Most Important Computer Science Electives?

Ok so here are the required courses for a CS degree at my school

Discrete Math
Data Structures & Algorithms
Databases
Networks
Operating Systems
Systems Programming
Computer Organization
Design and Analysis of Algorithms

Here are some electives I’m interested in

Programming Languages
Compiler Construction
Complexity Theory
Formal Languages
Computer and Network Security
Cloud Computing
Big Data
Machine Learning
Computer Architecture
Parallel Computing
Computer Graphics
High Performance Computing
Computer Vision
Natural Language Processing

I need to chose 5 electives. I want to choose courses that are most useful for real life software engineering jobs.

A few questions
1- What is the difference between Formal Languages and Complexity Theory? Both courses mention that they deal with theory of computation.

2- What is the difference between Computer Organization and Computer Architecture? Is Architecture necessary if I already have organization?

3- I have heard that courses like Machine Learning, Big Data and Cloud Computing are just fancy ‘hot topic’ courses, that won’t last very long. And that they are just ‘trendy’, anyone care to weigh in on this?

4- How likely am I to ever get a job that will utilize Computer Vision or Natural Language Processing? And is one course at the undergrad level enough for those jobs?

Cloud computing would be very marketable i think. Machine learning is just fascinating imo. Not sure how good it would look on a resume.

  1. Formal languages deals with the relation of regular expressions and finite state machines, context free languages and push down automata, Turing-acceptable languages and Turing machines, etc.. Closely related is complexity theory of time or space used by a Turing machine to solve a problem.
  2. Computer architecture appears to be a more advanced, hardware focused course in your list above.

If the required courses and other electives you choose do not expose you to several different programming languages, then you probably do want to take the programming languages course.

UCBalum,

Do you think any of the electives I list are ‘must-take’ courses? Do you think the required ‘core’ at my school already covers most of essentials for a software engineering role?

Could I also get your opinion on Numerical Methods? The class focuses on modeling with matlab.

The required core does include most of the concepts that are widely and commonly used.

If the required core and your other electives do not include exposure to several programming languages, then take the programming languages course.

Because security is an important aspect of most computer programs, taking the security course to get an idea of how to write secure programs would be a good idea.

Most of the others are likely to have good applicability in some areas, less so in others.

Numerical methods and MATLAB appear to be most commonly used in computing for science and engineering applications. Such a course may be required or recommended for engineering majors.

Programming Languages and Computer Architecture were core courses back in 1982. I cringe to think schools make them electives today. Those two are a must especially with all the happenings of computer science - new languages, architectures…

Three more… One would think you can create groups based on your interest:

Compiler Construction, Natural Language Processing, Machine Learning - that should teach some heavy duty coding skills, i’ve taken those.

Complexity Theory, Formal Languages, … hmmm. Too much theory. Formal languages was grad school material in my days.

Computer and Network Security, Cloud Computing, Big Data if you’re looking for cloud computing

Parallel Computing, Computer Graphics, Computer Vision for a variation of the 1st group.

In my days undergrad comp sci at a relatively decent comp sci program (Univ Louisiana) was like 18 courses. Plus a pair of discrete math, a pair of statistics. These days it’s a lot less courses even at big name schools as we’re too busy teaching multivariate calculus (say, why not take a bunch of numerical analysis courses if you’re math-happy)

Forgot to mention before, but include some project courses. Compilers typically is such a course, but others can be also. Be aware that these can be a lot of work.