Various Paths to a Career in Tech- 7 mins
“Hey Brice, do you have any advice for getting into computer science/software engineering/coding/programming/<insert whatever it is I do here>?”
No one really asks me this – I probably started that conversation at even the faintest spark of interest. If you don’t know me personally, just know that I tend to get very excited talking about the things that I do. It really is a privilege to be able to pursue whatever happens to pique my interest, and I try to make liberal use of it.
My answers to the above question come in various flavors and opinions depending on the day and how much I feel like bashing Python. What remains consistent is that I’ve had – and will continue to have – this discussion with many of my close friends, inspiring me to aggregate my thoughts here before I stray infinitely further from my days as a college freshman, writing programs to calculate the final exam score I needed for grade cutoffs1. In this blog post I will explicitly be focusing on my opinions with respect to getting into software engineering, since that is typically the question.
If you have the time and bandwidth for a degree, whether it be a bachelor’s, master’s, post-baccalaureate, etc., I would suggest going that route. I think studying computer science allots you the freedom to pursue any domain you’d like, in addition to further academic pursuits like research and teaching. Keeping the scope limited to a career in software development, I will list a handful of areas that you could potentially work in:
- Graphics, game engines, and game development
- Machine learning/data science
- Network engineer
- iOS/Android development
- Robotics/human-computer interaction
- Traditional software engineering/web development
The list goes on. My understanding of bootcamps is that they do well in preparing people for a career in web development. If that is what you’re looking to get into - great! But I think there is a lot of value in taking the breadth of courses in a computer science degree and being exposed to various areas within the subject.
A degree also allows for the chance to work as a software engineer intern in the summer(s), since many companies require interns to be a full-time student. Some companies might also allow for part-time student status, but I’m not very confident about that. An internship is an incredibly valuable item to have on your resume, as actual work experience is valued by companies a lot more than projects. Anecdotally, my observations are that it is easier to enter into the “big tech”2 pipeline as a fresh graduate with internship experience than it is as an industry hire:
1) Interning at a company can be a direct way to land a full-time position there with a return offer.
2) Internship and new graduate interviews are typically easier due to less rounds and no questions about system design.
3) The pool of applicants for internships and new graduate positions is smaller due to the limitation on student status.
Lastly, internships in software engineering generally pay quite well.
Bootcamp: Not Bad
For the bootcamp route, you would reach the job hunting stage much faster than doing a degree. I would say time is the largest savings by going this route. Financially, bootcamps seem to be similar in magnitude to university tuition. Mentally, it will take a lot of dedication to learn and learn well the sheer amount of material. You’ll focus on just the topics relevant to software engineering/web development, which is a plus if you don’t see yourself going into/not interested in the other fields.
After completing a bootcamp, it would be enough to get your foot in the door. I would surmise that after a few years in the software engineering industry, whether you went to a bootcamp or received a degree would be negligible. Landing that first job will be the toughest. For a reputable bootcamp however, you should be able to leverage the alumni network to assist in getting that first job.
This is also an option that I initially did not plan on writing about. Honestly, you have to be incredibly self-motivated to go this route. The benefit of both university and bootcamp is that they provide a structured learning environment with enforced deadlines to assist you through the ocean of course material. Talking and working through problems with your peers is an amazing benefit for learning, as well as having access to professors and TAs. I believe that these relationships and connections that you form with your peers are what make the cost worth it.
However, if you choose to take on this grand task, you can have comfort in that people have trekked this path before. They have went on to make structured, open-source education into a tangible reality. The knowledge is out there. If you are able to thrive in this sort of environment, then more power to you. Here are some suggestions that appear to be fairly solid:
- Overview of various areas within computer science
- Well-maintained, fully open-source course curriculum
- Good option for an introductory course
Full disclosure that I haven’t personally completed any of these, these recommendations are just from my brief search for resources and how they line up with my expectations of a good computer science foundation.
A Final Note
My suggestion, for anyone getting into this field, would be to work on a handful of projects you actually care about. They don’t have to change the world, just find something that you want to make or a problem that you want to solve, and use code to do it. Use Google a lot – Stack Overflow will become your best friend.
My background of going to school to study computer science for four years obviously has a major influence on my views. I wish I could write more about the bootcamp side, but I am limited by my experience. As with most things in this field, there are some clear tradeoffs between these different paths – it is up to you and how much you value time, content, and structure.
Personally, I would not be at my current job without having gone through several fundamental classes such as operating systems, distributed systems, compilers, etc. that fostered an interest in designing and building large systems. I don’t necessarily use the information I learned in these classes on a daily basis, but it is more in terms of how I think and work.
That’s it for this post – thank you so much for reading if you made it down here! Writing has always been a challenge for me, but I am trying to push a bit out of my comfort zone for the sake of good documentation.
Thank you to Melody for reading a draft of this post, Flora for making me write down my initial thoughts, and Addison for inspiring me to start writing a blog of my own (go check out his cool course, which covers stuff that every programmer should know!).