I was looking for an answer to this, and can't believe it hasn't already been asked. I'm just beginning to work on my degree in Computer Science, and I'm wondering what kind of jobs Computer Science majors typically take. I assume the vast majority become either systems programmers or application programmers. I really love to code, but mostly on projects I find interesting. I have a feeling working all day on code I can't get passionate about might eventually drive me insane. Are there any other common jobs people typically take?
Software Engineers. Software Engineer jobs will take the majority of CS graduates.
Modern development practices generally are a LOT better than they used to be, and allow one to get passionate about the software one writes.
First, foremost, and most obviously -- software engineer. Call it what you will, a computer science degree often focuses (for better or worse) on software engineering, since this is the job that most of us CS majors eventually end up in. Find out as fast as you can whether or not you can be happy as a software engineer (do internships, buy a programmer lunch and pick his brain), and if you think you'd like it, good news! You will never hurt for employment. There are not nearly enough good software engineers in the world. You can live and work successfully in nearly any major city on Earth, and if you're laid off, you'll be able to get a new job in days or weeks.
There are certainly other, somewhat related jobs that will use skills you're picking up.
Other options:
Startup founder -- Turns out that one of the biggest expenses in starting some online venture is hiring the programmer. Well, good news, you're that guy! If you've got a head for business, a good idea, and one hell of a work ethic, you could rake in money like it's still 1995! (PROTIP: Online pet food store sounds good but doesn't work)
Systems analysts -- Can you figure out wtf is going on with other people's weird COBOL hackery? Good news, nobody wants to do that, and nobody's good at it. Therefore, it pays very, very well!
Test engineers -- Not everybody's cup of tea, but if you know what to test and have a head for writing great, flexible, fully-automated tests, there is a lot of thankless but needed work out there.
Database Administrators -- Big companies have BIG databases. They need tuning, indexing, migrating, schema designing, and who knows what else. Actual knowledge of what the programmers need will help make you a great DBA, and it can pay anywhere from crappy to unbelievably well, depending on who you're working for. Like test engineering, not everybody's cup of team.
Network/IT work/tech support -- This ain't programming, and if you're a CS major, your mom's friends are probably already calling asking for tech support, and it probably already bugs you. As I'm sure you know, a CS degree isn't exactly what's going to qualify you for this, either, but it sure doesn't hurt. You'll pick up a lot of knowledge in this area over the next few years, and if you really have to, you can do these jobs.
And then of course there's all the other stuff on Earth. Your major doesn't completely dictate your life. Many jobs are out there that simply require a BS degree, which you'll have. You can be a wedding planning with a CS degree, you know!
- Game Programmer
- QA Tester
- etc etc
There are an infinite variety of programming jobs. If you like programming then you've got the right major. Get your degree and see what the job market looks like then. Work for a while and then switch jobs if you're unsatisfied. You'll have skills that are in high demand.
No need to worry too much about this. Besides, the job market will be totally different by the time you get your degree!
I'm not sure that being insane is actually all the much of an issue; you'll fit in with the rest of us.
That said, though, you're about to have four years in which you'll find out whether you can stand programming on problems you don't find intrinsically interesting.
With a computer science degree, though, there are lots of classes of jobs:
- you can program
- you can do UI-type programming, with a big visual design aspect
- you can go into marketing
- you can become a systems engineer, where you aren't programming as much as organizing the platforms
- you can become a system administrator, which has lots of problem solving and day to day interaction
- you can become a trainer, with lots of students and such
- you can become a technical writer or editor
and hell, that list is only the kinds of jobs I've done.
Another fieldthat seemed to be missing:
- Webapp Development (generally in languages like Java, C#, PHP, Ruby and Python)
There are a lot of cool apps using the SaaS model, which basically means you write serious programs, and present them to users via a web interface. When I was in school, I always thought of web programming as easy stuff -- there's actually a lot of cool work to be found there.
My current job is quite boring but I see it as an income that can support me while I work on my own side project.
Life is what you made of it. Don't sweat the little detail.
Expanding on @CaptainAwesomePants's Software engineering role.
Along a software engineer's role you will could probably gradually learn (more and more):
- In-depth knowledge of a programming language
- In-depth knowledge of how a programming language operates in it's environment
- Software development methodologies
- Software development techniques
- Software libraries
- Domain specific languages
- How databases work. How one particular database works.
- Interacting with humans in a team
- Interacting with humans outside your team. i.e. Clients
Not an exhaustive list, but I believe a lot of software developers and engineers could relate to this.
What about manager?
I quite enjoy coding, but I've recently been promoted to Software Development Manager and I really like it. I still get to code now on then, mostly on things that interest me, but a lot of my job is using people skills - negotiating time lines, getting people on different teams to sync up, helping further the personal development of the people on my team. It's quite rewarding.
No one has mentioned the obvious answer. You could go on to do a PhD and there you will gain the in-depth knowledge and resources to follow whatever research topic you are passionate about.