how to figure out what to specialize in, in Computer Science

<p>So, I'm a freshman, and there's like 6 or 7 different tracks within CS that you can take at my school. The 3 I'm interested in are security, software engineering, and machine intelligence. I mapped out my 4 year schedule, and doing 3 tracks+a math major seems like it might be too much. Basically I want to narrow down my tracks to 2(most people do 2 at my school). </p>

<p>But what do you suggest on finding out what i most like? What kind of people tend to like those each individual track? Any advice would be greatly appreciated, thanks.</p>

<p>Is your goal academic graduate study or work in industry afterward?</p>

<p>If it is to work in industry, consider getting a broad background with a course in each of algorithms/complexity, operating systems, networks, software engineering, databases, and security, plus whatever additional courses of interest.</p>

<p>The most reliable way is probably to start taking courses and pick a track as late as possible. Figure out which professors do which tracks and which professors you like more or are more well-respected. See what research opportunities there are at your school for undergrads.</p>

<p>What tracks are there? You only list a few. It’s possible that you’d be interested in others and not even know it. Of the three you list, the two most math-intensive ones are security and machine intelligence. I assume you like math since you are sacrificing CS coursework to major in it. Those tracks could play to your strengths.</p>

<p>ucbalumnus’s recommendation is good, but it applies equally to graduate school as well as it does to industry: get a strong foundation regardless of what you do. Courses that you should look for and really do some soul searching before skipping include…
Algorithms / complexity
Operating systems / networks
Programming / languages
Formal languages / automata
Discrete math / proofs / logic
Computer organization / architecture
Parallel / distributed computing</p>

<p>Applications courses are where you should feel most comfortable missing out…
Software engineering
Databases
Graphics
Artificial intelligence
Numerical analysis / methods
User interfaces / HCI
Security
Real-time and embedded computing</p>

<p>These can be useful for specific jobs and graduate positions, but nobody needs to be conversant in all of these, and there isn’t one everybody needs to know. The other category, I would say, is more important to focus on.</p>

<p>I think all of those concentrations are interesting so I’m not really sure what criteria you used to come up with the “skip” and “don’t skip” list. The only one that I think is sort of a waste of time is software engineering – that’s the kind of thing that you can easily pick up in the industry or through various o’reilly books and what not. And I sort of agree about databases, not because it’s unimportant but because there doesn’t seem to be a whole lot of interesting new research on the topic.</p>

<p>Most of the jobs after UG is in software engineering/development or database.</p>