At present, the majority (about 60%) of new PhDs in CS go to work in industry. A smaller fraction (about 30%) go to academia, and some work in government or start their own companies.
In industry, some researchers work in the research branch of their company. Here, researchers work on open-ended problems, collaborating with colleagues throughout the company. They often interact with university researchers, travel to conferences to present their work, and publish in journals and conference proceedings. The research produced in these labs are often years ahead of the products that will ultimately use them.
In other cases, researchers are more closely embedded in the development part of their company. Here, they work closely with software engineers and others on current product development, helping solve some particularly challenging technical problems that rely on current research.
In academia, faculty members have considerable autonomy to choose research problems and also teach and mentor the next generation of researchers. Faculty jobs are appealing to those who enjoy both research and teaching.
While many companies offer a high degree of autonomy to their researchers, academia generally offers the greatest flexibility to pursue one’s interests. On the other hand, academic researchers generally must seek external funding (e.g., from the National Science Foundation) to support their research programs.
In government, many challenging technical problems require research experience and expertise. While researchers in government typically address specific research projects of national interest, they too frequently publish in the same venues as industrial and academic researchers. For example, high performance computing, visualization, and several other fields of computing are particularly well-represented in federal research labs.
There are many parallels between working as an entrepreneur/at a startup, and doing research. Both involve solving unsolved, new problems, and both require effective communication of those problems as well as your solution. These are generally more open-ended roles which require creativity, design, and implementation skills. Hence, it is quite common to see graduate students transition into entrepreneurial roles upon graduation, often in the technical area in which they specialized.
Finally, postdoctoral fellowships are becoming increasingly popular in computer science. These are short-term (typically one or two year) research positions in academia, industry, and government, where new PhDs can further develop their research programs with the support of an experienced mentor. While postdoc experiences are not required for most jobs, some graduating PhDs find them to be a good way to have a few quiet years to work on their own research without the additional obligations that come in a faculty or other research position.