<p>I'm a freshman doing a B.S. Computer Science currently and I would have to decide this maybe in my sophomore year.</p>
<p>The ones that I'm interested in are (in no particular order) --for upper elective track :
-Bioinformatics/computational genomics
-Software Engineering (programming languages, compilers, etc)
-Security (databases, systems, cryptography, etc)</p>
<p>I want to do the one has jobs that are in high demand everywhere, for instance, if I wanted to work abroad in Australia or the UK at some point, which I hope to do.</p>
<p>That’s a hard question to answer without seeing the rest of the required courses in the program. Your first goal should be to get adequate breadth via some “core” CS curriculum. I’d recommend the following core:</p>
<p>Algorithms & Data Structures
Programming Languages
Operating Systems
Networks
Architecture
Theory (languages, automata, computability, complexity)</p>
<p>Others’ recommendations may differ from these. In any event, cover your core first. In particular, if you go with my recommendation, you should do the Software Engineering track to get Programming Languages and (Applied) Theory (by way of compilers). A more marketable move might be to take Programming Languages as a free elective or extra course, and do the Security/Databases track. Forget the biology one, unless you’re interested in pursuing graduate work in that direction.</p>
<p>Most CS grads are hired (if they’re hired at all…) based on their actual skillsets (read: programming languages), not based on what theoretical courses they took. </p>
<p>It is likely that the software engineering track would probably provide the greatest exposure to actual skills that can be put on a resume, rather than simply, “knowledgeable about computer security theory”.</p>
<p>Bioinformatics, computational genomics, are merely applications of computer science, and have a significant likelyhood of ‘turning off’ employers who do not value those areas as being core to their business functions. </p>
<p>Likewise, cryptography probably should be avoided as a freestanding CS subject in undergrad. Leave that stuff (and the implementation thereof) to the math majors or the specialists. 99.99% of CS practictioners, if they ever use cryptology in their software or systems, will use algorithms, libraries, and processes derived from others. As long as you understand the concept of public keys and private keys – you’re likely to pass any interview question for a BS CS-level practictioner that they dare throw at you.</p>
<p>You’re asking us to predict which of the three areas you mentioned
will be hot when you graduate in three years and that’s basically
asking us to predict the future. In general it’s a lot easier to see
what is in demand today and try to project. There are some people that
are good at predicting future demand but I’m not one of them.</p>
<p>There seems to be decent demand for Bioinformatics people in the
Boston/Cambridge area but you’d probably want to go for a Masters
Degree for this option. My son has a friend working in this area
with a Masters in Bioinformatics and he started working for a very
cool company in Cambridge two years ago (I think that he interned
or did coop there).</p>
<p>Security seems to be an interesting area as there seems to be so
little of it today. There’s a company in the Boston area called RSA
Systems that was bought out by EMC Corp a few years ago that does
crypto work. I imagine that some of the defence companies in the area
do crypto work. I also think that there are positions in large
companies for security experts to protect company assets but I don’t
know the career route to those positions. The armed forces may also be
looking for security experts but the don’t necessarily need experts in
math and algorithms as those that can use the tools.</p>
<p>Software Engineering is a broad/general area. You list compilers and
it is nice to understand how compilers work and it is an impressive
accomplishment to build one but demand for compiler experts isn’t that
great. In the old days, there were a lot of different hardware
architectures and the companies that made computers for those
architectures had to have their own software engineering groups to
build and maintain the operating system, compilers and other
software. So you’d need OS and Compiler people. We have far fewer
major platforms today which has reduced the number of companies
providing these things so there’s less demand for these expertise
areas.</p>
<br>
<br>
<p>Yes, this is a good area but it’s usually done at the graduate level
given the prereqs to study the topic.</p>
<p>The concepts from the following courses will be generally useful in industry software jobs:</p>
<p>Algorithms
Operating Systems
Computer Networks
Software Engineering Methods (just one overview course)
Databases
Security (general)</p>
<p>A compiler course will be useful for general understanding of many areas of CS, but has less direct applicability in industry, except when you need to write a compiler or parser. A computer architecture or digital systems course can help if you do something close to the hardware or do hardware design. Other courses like graphics, user interfaces, artificial intelligence, etc. may apply to specific types of software jobs.</p>
<p>Try to get exposure to several different programming languages. In some schools, the various courses may use various different programming languages. But if your school favors a single programming language for most courses, that may be limiting in this respect.</p>