by Ben Chaplin, Software Engineer at Goldman Sachs
There’s a lot about programming that can appeal to the mathematician. The theoretical challenge of writing algorithms is combinatorial and analytic, and the pursuit of good clean code feels a lot like writing a precise and rigorous proof. Really, I think, there’s a lot about programming that can appeal to anyone. There’s just something cool about making a computer do something incredibly fast and without mistake.
But the difference between a beginner programmer and an industry software engineer might appear daunting—it certainly did to me as I was wrapping up my bachelor’s in mathematics and applying for jobs in software. I received no offers in my first round of applications, and ended up working various teaching/tutoring jobs for a year after graduation. However, during that time, I took additional steps to improve my knowledge and experience, and thus upgrade my portfolio for a new round of job applications. Finally, I received an offer—which I accepted.
Now, one year into my current job, I remain happy and interested in my work. More importantly, I feel established in the field and confident that I can move to another position should I ever desire. In that way, a first job is so vital—it’s a path into a profession with many openings but a hesitancy about hiring juniors.
If you’re like I was, just searching for a way in, I hope this article will prove a valuable resource. I’m by no means an expert, but I can share my story of what worked and what didn’t work as I made my way into the world of software.
As students of math, we are well-acquainted with the process of learning theoretical concepts with rigor. In my view, software work belongs in the world of engineering because it tends to favor practice over theory. However, most software engineers start by studying the fundamentals of computer science, which—luckily for us—is quite mathematical in nature.
I strongly recommend learning these fundamentals in school—and this is the only time I’m going to recommend school over self-study. Of course, a natural self-learner can learn anything without school—however, I know I benefit from a classroom setting when I’m tackling brand-new theoretical concepts. Enter from stage right: Data Structures & Algorithms (or your school’s equivalent introduction to data structures and the time/space complexity of algorithms). This material is so important because it’ll be the basis of how you think about code for the rest of your life, no matter the language, technology, or application. This is the time to work diligently and think deeply.
Here’s the good news: after that, you’re pretty much off to the races. Don’t get me wrong—theoretical computer science is a rich field which is worthy of exploration if you’re interested. But if your goal is to get hired without work experience, then your biggest asset will be personal experience, which comes from doing. And after learning the fundamentals, you’re ready to start doing. The rest of what I needed to know about software came from practice—and for that, school or not, you just need to get your hands dirty.
I got into computer science quite late in my college career. I took an introductory course, then data structures & algorithms, and then a generic software engineering course. That was it. Unfortunately, those few courses were not enough to convince software recruiters that I was worth interviewing—and I’m not sure I blame them. Sure, my transcript showed that I was comfortable with a couple languages and had a good grasp of the fundamentals, but I had nothing to prove that I knew how the world of software worked. And honestly, I didn’t know how the world of software worked.
Instead, I took a job that I didn’t love, and in my free time, I worked to build a portfolio of projects to gain experience. I struggled a lot with the material and also with motivation. It’s hard to build a project with a new technology—you’ll probably find you’re in a near-constant state of confusion. This leads me to what I feel to be my most important bit of advice: you have to make things for which you care about the result. This might sound obvious, but I think it’s easy to forget as you stress over which projects you think will most impress future employers. At the end of the day, the most impressive projects are the ones that you put the most effort into—and those are the ones that you actually wanted to make, just for the sake of making them. I loved typesetting my homeworks as a math student so I built a website for learning LaTeX. I loved chess so I wrote an online chess platform for a new variant I thought up. I studied an interesting problem in graph theory my senior year so I coded up the algorithm which solves it. There’s no way I would have lasted through some of the headache-inducing debugging sessions I encountered building that chess platform if I hadn’t really wanted the project to succeed.
Ok, if that sounded a little too vague or dreamy—don’t worry. There are definitely some more straightforward ways to ‘game the system’, so to speak. Even as I advise you to choose projects that interest you, the technologies you use can be chosen with some strategy in mind. Recruiters often aren’t well-versed in software. They may decide whether you’re qualified by simply matching technologies from your projects with the job requirements. They might be hiring for a junior position with one year of experience with React, and not recognize that your experience with Vue is pretty easily translatable. So, while you’re gaining great experience no matter what language/framework you choose—if you’re trying to get hired, it’s just best to pick what’s popular at the time.
And… everything else
I’ve mainly discussed software specifics in this article, but of course, all of those other job application best practices you’ve heard about still apply. Networking can give you a huge boost, polished and keyword-containing resumes and cover letters are ever-important, and sending out basically as many applications as you can will give you the best chance at getting hired. But most importantly, it’s best to maximize your experience and come up with some evidence to prove it.
I hope this guide has been helpful, and for those of you in the process—I wish you the best of luck! Feel free to send me a message if you have any questions or just want to chat: email@example.com.