Other jobs in CS

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.

Product Manager (PM) or Associate Product Manager (APM)


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!)

Testing Engineer (STE, SDET)


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:


Reliability Engineer (SRE)


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:


Tech Writer


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:


Usability Engineer


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.”

Computer Science Teacher


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. If you have questions about teaching computer science, I am happy to answer them by email or by comments on this blog post.

Data Scientist


UPDATE: 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:


… and Many Others

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.

UPDATE: 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:

CS internships for freshmen

Every year my Stanford students ask me whether there are any internship opportunities available to them, even though they are often freshmen who have taken only a few CS courses. While many companies want their interns to be a bit further in their CS studies, the good news is that several tech companies have internships and programs specifically targeted at freshmen or students who are early in their CS curriculum.

Here is a brief list of some jobs and opportunities (last updated 2016/01/15, but many of these are ongoing or repeat each year):

credit to Quora and to UW’s Kellen Donohue for some of these links.

Stanford students should also check out Computer Forum, which is the official org to help connect industry companies to our department and our students. You can look at existing partner companies and possible available opportunities and get on their mailing lists to hear about new ones that come up. Computer Forum hosts a career fair early in every autumn and winter quarter, which you should definitely check out. Stanford also offers a course called CS9 with some good information about interviewing and tech jobs.

If you know of a good job opportunity that is not on this list, please let me know!

Also keep in mind that there are lots of other valuable things you can do in your summer besides getting internships at tech companies. Consider doing one of the following:

  • work on an independent project of your own creation
  • get involved in undergraduate research
  • learn new tech skills online through Coursera, Udacity, edX, or another online resource
  • set up a personal web site for yourself including your resume, list of courses taken / experience, possibly some samples of your work on GitHub, etc. (please don’t post your class homework solutions publicly unless the instructor says it is okay!)

Last but not least: It’s completely okay to just relax and enjoy your summer after your freshman year. At a top school like Stanford, it probably feels like everybody is doing these ambitious things in summertime and that if you don’t do the same, you’ll fall behind. But not everyone does this kind of summer work, and plenty of us have been successful in tech without doing so. (The author didn’t do ANY internships until he was in grad school, though I did work as a TA sometimes.) You don’t need to feel pressure to do an internship or a project. If doing so isn’t compatible with your schedule, or you prefer not to do so, or you aren’t able to find an offer for one, that is completely okay. It is fine to spend your first college summer traveling, learning a musical instrument, seeing your loved ones, improving at League of Legends, binge-watching Game of Thrones, or whatever you most want to do. Relaxing and recharging your batteries are also very important things to do.

Narrow fixed-width fonts for coding

I code a lot, and so I like having good monospaced / fixed-width fonts for doing so. Lately I think I prefer narrow coding fonts because they give me more characters per line that I can see at once. So I did a web dive to find some good narrow coding fonts online. Here are some I liked. I’m currently using M+1M as my main code font in Eclipse, Qt Creator, and other IDEs.