Note: If you haven’t read my article about what it means to be a software engineer, I would recommend you go back and read it first for some valuable context.
Okay, so you know that you want to be a software engineer, now what?
Should I go to college?
Now, I am definitely biased since I went to college for computer science. While a computer science degree is not required to become a software engineer, it definitely helps a lot, especially as many companies become more selective in their application processes, making exceptional academic performance a near requirement.
The skills expected from software engineers closely mirror accredited computer science curriculums, namely core CS competencies, such as algorithm design and efficiency, memory organization, set theory, etc. Such skills are invaluable when designing robust software at scale, especially when concerns like efficiency and extensibility are always at the fore.
While I cannot speak for every college, where I went knew that the majority of its computer science students intend to become software engineers. Therefore the institution explicitly designed curricula to prepare its students to work “in industry.” For instance, some courses would structure projects to simulate Agile software development by assigning teams and engaging in regular check-ins.
College has a number of additional benefits. It’s an excellent place to figure out how you work independently. It gives you the experience to know how and when you prefer autonomy vs. collaboration, all while giving you a leg up in applications, since hiring managers make a fair number of assumptions about the skill sets of college graduates. Higher education also provides extensive networking opportunities with classmates and the chance to connect with prospective employers through career fairs.
As a brief note on graduate school, a higher-level degree can give a slight edge in the job marketplace and is often required for many specialized positions (e.g., machine learning, advanced graphics, etc.). However, for most engineering positions, many companies value several years of practical experience as equally important to a graduate degree. Therefore, graduate school is great for those who are interested in specific advanced areas but is not necessary to work as and grow as a software engineer.
What if I don’t want to go to college?
Great! College isn’t for everyone, and some people may simply thrive better in an alternative educational environment. Those reasons can include the need for a more flexible schedule, the increasingly prohibitive cost of college, a desire to learn more specific skill sets, or whatever other personal reason you might have.
Regardless of your exact reasoning, it is essential to do your research. For instance, if you want to go to a coding bootcamp, make sure that you evaluate the programs you are interested in carefully for both quality and the type of curriculum.
In terms of quality, an unfortunate reality is that the standards of bootcamps can be highly variable, ranging from world-class programs that believe in empowering and bettering their students to scammers looking for a cash payout on a hot, new career path. Additionally, tuition costs do not necessarily reflect the quality of a program, so make sure you will be getting your money’s worth.
Finally, teaching yourself how to program is still a valid way to become a software engineer. But it may be the most difficult path because of the simple fact that it is really hard to know what you don’t know. So if you are interested in self-teaching, be prepared to put in a lot of hard work into formulating clear goals, and then figuring out concrete steps to reach those goals.
Other valuable experiences
Regardless of what education path you end up choosing, it is important to always be looking for opportunities to improve your skills and stick out from the crowd.
Here are some of my personal suggestions:
Find an internship or related work experience. For practical experience, internships and software engineering-adjacent jobs—QA, DevOps, etc.—are great. A lot of companies have created job and internship opportunities tailored for those still in college and can be used as stepping stones towards engineering positions, thus serving as an excellent launching pad for your career.
Strengthen your skills by educating others. Engaging with computer science in an educational capacity is also an excellent opportunity to improve your skills. This could include being a teaching assistant in college, becoming a private tutor, volunteering at youth camps, etc. Teaching is a good way to gain a deeper understanding of how to apply software engineering skills, as well as honing your ability to adapt and learn on the fly. Not to mention, these experiences will improve your soft skills as you interact with students and other educators.
Study a wide variety of topics. Whatever educational path you chose, I would recommend trying to expose yourself to a wide variety of software engineering and computer science topics. That could include taking a diverse set of electives, contributing to open-source projects, or creating your own personal passion projects. Beyond the fact that learning about new topics is fun and interesting, doing so helps you see connections between various topics, which increases your ability to apply existing knowledge in novel areas.
Take advantage of software engineering resources. Finally, when in the process of applying for software engineering positions, it would be crazy to not use one of the seemingly infinite resources available to prospective engineers. These include websites with libraries of practice coding problems, videos that walk you through the most common algorithms and data structures used in technical interviews, and articles that explain how to ace the personality portion of interviews (plus a lot of these resources are free).
When you are actively interviewing for a full-time opportunity, I would recommend paying particularly close attention to questions that you struggled answering. Don’t be afraid to use your interview experience as an excellent resource to identify areas for improvement, especially when there is a very good chance that a different interviewer will ask you a similar question in the future.
Acquiring the numerous skills required to be a software engineer can take on many forms, from college to bootcamps to self-taught. Regardless of exact path, being proactive in learning new skills and honing existing ones is essential to obtaining the diverse set of abilities necessary to be a well rounded software engineer.