Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I'm approaching the end of Sophomore year in college (Studying Computer Science), and very soon I'm going to have to decide on my concentration, but I honestly don't know what each concentration means.

I basically have two questions:
1. How much influence does your concentration have on your career path? For example, would a video game development company only look at people with a concentration in Game Development?

2.It would be great if you guys could, in a line or two, tell me what sort of jobs am I looking at for each of the concentrations? I need to pick at least two of the 9 below.

    - Algorithms and Data Structures
    - Artificial Intelligence
    - Computer and Network Security
    - Computer graphics and vision
    - Human-Computer Interaction
    - Game Development and Design
    - Numeric and Symbolic Computation
    - Programming languages
    - Systems
share|improve this question

closed as not a real question by gnat, ChrisF May 14 '12 at 22:45

It's difficult to tell what is being asked here. This question is ambiguous, vague, incomplete, overly broad, or rhetorical and cannot be reasonably answered in its current form. For help clarifying this question so that it can be reopened, visit the help center.If this question can be reworded to fit the rules in the help center, please edit the question.

What is the difference in terms of course work? Two classes / four classes / two years? – Job Feb 17 '11 at 19:31
Focusing on Algorithms and Data Structures will pay big dividends for any programming career. – dietbuddha Feb 17 '11 at 22:11
I might be weird, but when I read through that list I thought "I will take that" for every one of them – Anto Feb 19 '11 at 21:32
@BarryBrown: You're right, I did mean 'Security'. Edited after all this time. As for my choices, over the past year, I got into a lot of web and mobile development and realized how important HCI was, so Human Computer Interaction was one of my choice. I also got into game development, participated in some game jams and competitions, so decided to go with Game Development for the second one. – xbonez May 14 '12 at 22:12
It's far from solved. We need new programming languages for up-and-coming technologies: multicore and quantum computing. Parsing... yeah, that's pretty much solved. But generating efficient code and guaranteeing correctness is still a huge area of research. – Barry Brown May 14 '12 at 22:22
up vote 19 down vote accepted

How much does a concentration matter?

Not much at all. While there are always a few roles that require expert-level skills in a particular area, the vast majority of jobs require general skills. (And allow for you to pick up skills related to a particular area as you go.)

Having a concentration for your degree will however help you get started in a particular area. (But not preclude you from getting a job in the case you it isn't in your conentation.) For example, I was at Microsoft working on the F# compiler -- a very deep, very technical position. However, when I was an undergrad my college didn't even offer a course in compilers! This required me to do a lot of outside reading/learning, but I was able to be successful in that role.

Examples of concentrations in the real world

These are no way intended to be authoritative answers, but here are some examples on how these concentrations could be useful after you graduate.

  • Algorithms and Data Structures - This won't come up very often. Most of the algorithms and data structures you use are baked into programming languages and/or have sample implementations. However, you might come across a problem that is impossible to solve without proficiency in this area.

    For example, you work at a company which does X and and it costs Y to produce your product. Optimize. Google needed algorithms and data structures to make web search scale. Intel needs algorithms to minimize the complexity of chip layout.

  • Artificial Intelligence - Very useful, but only in certain domains. AI isn't just about getting robots to play Jeopardy! Many times AI is employed to provide data where there isn't any. (i.e., supervised learning algorithms.)

    For example, how do you make your ad campaigns more effective? (Train a model to identify key customers.) Or, given customer shopping preferences (gathered from your 'discount card') figure out how to better place items. The prototypical example is placing beer next to diapers.

  • Computer and Network Society - I personally don't have much experience with this directly, but it is obviously very important. Unfortunately, it is also not very applicable to solving general problems.
  • Computer graphics and vision - This, like security, is a very important role but also very specific. Computer graphics/vision is used not only for things like 3D games, but also mobile software. You might have seen a demo of an app that recognized text in a different language, translated it, and superimposed the English translation on top.
  • Human-Computer Interaction - Super important and useful. Programmers are notoriously bad at design, and a good user experience can mean the difference between a successful application and failure. (E.g., compare early Facebook with MySpace.)
  • Game Development and Design - Game development is a very challenge area because it incorporates many other areas such as systems, programming languages, graphics, etc. However, I would urge you not go to into games because you love your X-Box or PS3.
  • Numeric and Symbolic Computation - This is used a lot in industrial design and scientific research. For example, building and running simulations about how product X will behave under conditions Y.
  • Programming languages - Programming languages is essentially a 'solved' problem in Computer Science. While new research does help push the boundaries of what we can do with things like type systems, it isn't like programmers are struggling to write code.

    IMHO, there is a ton of value in being a skilled developer. That is, being effective in any language, any runtime environment, and on any hardware environment. A deep understanding of programming languages (and related areas like compilers) will go a long way in helping your programming skills.

  • Systems - Surprisingly, there is a lot of active operating system development going on these days. (Windows on ARM, Android, Meego, Singularity, etc.) Not only that, but the concept of 'systems' also extends to abstractions like 'data centers' or 'server farms'. These aren't just a matter of networking a bunch of computers, but understanding how to write software to utilize them effectively.

Hopefully this wasn't too long. But in short, there are a lot of exciting things to learn and do. You shouldn't think of having a concentration as limiting you in any way, rather it is helping make sure you can get a deep foundation in a particular area. (Which might spur your interests in other areas.)

share|improve this answer
That was very helpful. Thanks a lot. As of now, the one concentration I think I will take is Programming Languages. I have worked for an year as a .NET developer (intern) for a major multinational corporation and have had a great time programming for them. And I'm sure a deeper understandign of how languages behave can only help. – xbonez Feb 17 '11 at 19:41

Find out what they mean (by talking to the people that actually teach these streams) and take what sounds the most interseting. Game companies could easily take people with a "concentration" in Artificial Intelligence (for NPCs), Human-Computer Interaction (for user interfaces in the game), Computer graphics (for graphics) and Game Development and Design (for... duh!). It may or may not have a large influence on the rest of your career. You mgiht take one concentration and then find work in a different field and stay there. And that might happen more than once (switching fields) as well.

share|improve this answer

When I saw: Numeric and Symbolic Computation, I thought that a real concentration on that would mean a great deal of math. If you do take that path professionally, you'll mostly be working with (maybe for) mathematicians and people from the hard sciences. So having a clue what they are working on means you need a nontrivial amount of math... Not something you get from 9 hours of classes. So I'm betting, these are more like introductory surveys, not real specializations.

share|improve this answer

Well as always it depends.
If you are going into research later on in life ie the PhD I would say Algorithms + Systems
If you are going straight into the real world, but don't have any interest in robotics I would say Human-Computer Interaction + Programming Languages
If you love robotics I would say AI + Computer Vision + Algorithms
If you find yourself enjoying math Numeric Computation

share|improve this answer
  • Algorithms and Data Structures
  • Artificial Intelligence
  • Computer and Network Society
  • Computer graphics and vision
  • Human-Computer Interaction
  • Numeric and Symbolic Computation
  • Programming languages

Any of the above will provide a good foundational study for your career. Each adds different flavor, depending on where you want to go, but I doubt that neglecting any of the above as an advanced topic will wreck your chances of getting a job.

If I were to pick two, it'd be Algorithms and Programming Languages: those, I judge, are more fundamental to our endeavor than the others, and have the least chance of being obseleted. (Programming languages obsolete all the time - the principles are fairly constant).

share|improve this answer
You make a good point about those principles remaining constant. I'm inclined towards doing Algorithms and Languages (as you suggest), and try to fit in HCI if time allows. – xbonez Feb 17 '11 at 22:22
@xbonez: HCI has a good deal of value as well. There's a whole world of terrible applications out there, and they could stand to be improved. – Paul Nathan Feb 17 '11 at 23:16
+1 to Algorithms and Programming Languages. – rreeverb Feb 18 '11 at 5:31

In my experience, a good combo of a bunch of stuff will help your have a wide range of abilities to your employers dispose. I did a B Sc Computer Science with the following final year subjects : Advanced Programming, Multimedia Systems, Database Systems and User Interface Design (and obviously all my Applied Math modules). I chose this combination, because I want to work in the industry. They are all applicable in the real world at the moment and each one gives me an edge in the work place, in contrast to graduates that concentrated to much on one domain. If the industry is where you are aiming, try to take the subjects that will enable you to do web-development, database design and to be knowledgeable in multiple languages. Things like Data Structures, AI and Numerics are 95% for research, but still excellent subjects. Good luck and keep up the good work!

share|improve this answer

Each of the concentrations you listed represents a subject you studied over the years.

As an advice, I think you should make a list with pros and cons for each of them. Try to remember which you enjoyed studying and which not, which were hard to pass and which came to you naturally.

Take into consideration the job offers you received, talk to a teacher or to someone older who followed the same course. Good luck and happy programming! :)

share|improve this answer

Not the answer you're looking for? Browse other questions tagged or ask your own question.