Students ask me from time to time, what other kinds of jobs can a person get with a computer science degree besides just being a developer? This blog post describes a few of them; there are many more.
One type of job a lot of CS grads take is that of a Product Manager (PM) or Associate Product Manager (APM). PM is a role encompassing a variety of skills and duties. PMs typically work on tasks like requirements gathering, design, writing specs, managing, planning, triaging bugs, guiding the implementation of a product or feature, and more. A PM generally doesn't write code, but they do need to understand coding in order to design/spec the features well and work well with the developers and testers. Microsoft in particular has long a strong PM culture, and many other major companies like Google also value this role highly. Here's a Microsoft blog post about the PM role:
* Note: There are variations in the name of this job role at different companies; some refer to this kind of job as a Program Manager or Project Manager, for example. There is some confusion about the term "PM" because there are several job roles with that acronym or similar acronyms. Some of such roles are more technical, like the one discussed above, and others are more focused on managing a team, a group of people, or a product as a whole. There is some variation in the exact set of duties that PMs have from company to company. You may need to investigate or ask individual companies about what their PM role entails if you are interested. (Thanks to Gayle Laakmann McDowell, author of Cracking the PM Interview, for helping clarify some of the text about PMs!)
Another type of job that is common is to be a Software Testing Engineer (aka Dev in Test, SDET, STE, QA Engineer, etc.). There are multiple types of jobs related to testing. The main idea is that you aren't coding the product but are instead responsible for testing it and ensuring its correctness, performance, scalability, reliability. A testing job can range from directly testing the code yourself to writing large internal testing libraries or frameworks, automated tests, managing builds and integrations, servers, source repositories, that sort of thing. Some companies hire dedicated test engineers while others ask their devs to perform testing as part of their work. Here is a Google blog post about testing:
Another role that is kind of related to testing is the Software Reliability Engineer (SRE). This is typically an engineer who works to make sure software stays running properly. This includes protecting servers from hacks, doing performance testing, performing code reviews, improving scalability, writing automation code, and more. Here is a Google interview about their SRE role:
If you're verbally skilled and like writing, another job you might consider is that of a technical writer. Tech writers write documentation, tutorials, guides, specs, and more. Here are a few articles about technical writing:
If you have design and/or artistic sensibilities or especially liked HCI coursework, you might want to be a usability engineer or software design engineer. Usability engineers help ensure that a site is simple and intuitive for people to use to accomplish tasks. This involves coming up with UIs for software, modeling, prototyping, user studies, gathering and analyzing data about how existing software is used, doing A/B tests to choose between alternative user experiences, and much more. Here is a brief article about usability engineering:
UPDATE: Philip Guo adds, "Similar to usability engineer, the role of "designer" is now paramount in all sorts of organizations. Most industry designers do not have a firm grasp of CS/programming foundations, so if someone has a strong CS background *and* training in design, they are very highly sought-after on the job market."
I can't resist adding this one to the list, since it's the career I myself have chosen. Being a lecturer, professor, adjunct instructor, high school teacher, community/technical college instructor, are all great ways to stay active in Comp Sci and to help others learn about our field. Teaching is a high-impact profession where you make a difference in others' lives every day. Fellow Stanford CS Lecturer Cynthia Lee reminds us, "Estimates are that we need, minimum, about 10K more high school CS teachers in the next 5 years." The CS for All (formerly CS 10K) initiative endorsed by President Obama and others strives to meet this goal by recruiting, training, and helping new CS teachers. Many industry companies even allow their engineers to moonlight in part-time teaching at local high schools, such as the magnificent TEALS program or Teach for America. If you have questions about teaching computer science, I am happy to answer them by email or by comments on this blog post.
Guilherme Reis writes, "Include research and data scientists! A researcher in industry may set up and evaluate experiments, research and design new algorithms, implementations, and new ways of doing what your company does, but better. You'll find these mostly at data-driven or state-of-the-art companies. It's a fun role, and pays better than grad school while still letting you play scientist and publish papers. :-)" ... Gargi Chakraborty adds, "I would recommend expanding that to include Quantitative Analyst (data scientist role at Google with higher emphasis on stats compared to Data Scientist position at Microsoft or Facebook), and BI/Data Engineer." (Thanks!) Here is an article about some of the roles of a data scientist and skills used in the job:
There are several other jobs a CS graduate can pursue. If you love security, you can become a security consultant, helping companies protect and secure their code. If you like systems and servers, there are lots of IT and networking jobs for which a CS grad is eminently qualified. If you prefer the business side of software development and have some coursework/experience in that area (e.g. a business minor?), there are positions in the biz/management side of companies that may fit your skills, including software marketing and sales. There are also a lot of jobs in software support, helping users and businesses run and manage software and services such as operating systems, file management, database systems, and so on. There are an almost infinite number of (CS + Something) jobs where you apply tech skills to other fields like medicine, law, finance, marketing, art, design, economics, and many more; I won't try to list all of them, but suffice it to say that many other fields love finding someone who knows about their field and also has technical / CS skills.
My fellow Stanford CS Lecturer Cynthia Lee mentions the following other options: "(1) get a law degree and do intellectual property work; (2) tech policy analysis in government or policy think tanks; (3) teach computer science, of course! Estimates are that we need, minimum, about 10K more high school CS teachers in the next 5 years."
I hope this guide was helpful! Here are links to a few sites that I used to help me write this post: