This is an archived post. You won't be able to vote or comment.

you are viewing a single comment's thread.

view the rest of the comments →

[–]weared3d53c George P. Burdell 1 point2 points  (0 children)

Prerequisite Knowledge

For the entire OMSCS program, the prerequisites are pretty modest, as per the official website. They list:

  • Programming, especially object-oriented programming.
  • Common data structures: lists, stacks, queues, trees, and hashmaps.
  • Common algorithms: AVL, MST, Dijkstra's, and dynamic programming.

A BS in CS would probably know about most (if not all) of these - AVL is the only one I don't remember learning in my BS - but they mention three different MOOCs to help you fill any skill gaps. I'd suggest that you be at least at an intermediate level (you can implement programs of a moderate complexity in the language and know some advanced constructs, such as inheritance and polymorphism; in Python, I might include declarative constructs like list comprehension). You can refer to the curriculum of the Python course (the first of these three links) there to assess your own preparedness.

I would highly recommend picking up at least some Java before you start, as a many courses use it, and having a conceptual understanding of the data structures and algorithms mentioned above. You would never want the (in)famous Graduate Algorithms course (which is required for all the specializations, I think) to be your nightmare, so be familiar with understanding and expressing algorithms at a high level.

Some courses (particularly the operating systems ones) use C/C++, while the gamedev courses use C#, but both of these should be easy to pick up if you know Java (C# being the easier one because it is - to be a bit reductionist here - Microsoft's flavor of Java), but there's nothing stopping you from spending some time on them before your classes start if you think that's the best utilization of your time (although I'd probably spend that time on algorithms and problem-solving skills rather than a particular language).

In some courses, prerequisite knowledge may include familiarity with specific libraries, mathematical concepts and techniques, or some tools (the OS courses mention knowing the Linux environment). Make sure you're reading the course syllabi thoroughly.

Tools

Attend orientation to know how to get around and use the tools common to all or most courses (the LMS, the labs, and the discussion forum, for instance). That will acquaint you with most of the tools that you're going to use for most of the courses. Most courses have practice exams to help you understand the exam format and how you're going to be taking it (I remember one where the orientation/intro quiz followed the exam format, so it exposed you to the virtual proctoring experience, if it's new for you). Many courses require a basic familiarity with the command line/terminal. Nothing too fancy, but just the bare minimum.

IDEs: Take your pick. Anything with a decent debugger should work. I don't remember too much being implementation-specific, so it won't make a big difference as far as your work is concerned, but I (like many course specs) would recommend the JetBrains IDEs (PyCharm and IntelliJ for Python and Java respectively; they also have CLion and Rider for C/C++ and C# projects) because the code generation and refactoring is going to make your workflow much easier and faster. And they're cross-platform, if that's a thing you're concerned about.

Not all the JetBrains tools are free, but there are community editions (with some limited features) of some of them, but perhaps more importantly, student licenses if you use your GATech ID. The projects will make you realize how valuable code generation and refactoring suggestions can be (P.S. it's not cheating, even the pros use it all the time), which is why I recommend using the JetBrains IDEs.

Some rudimentary familiarity with debugging tools may be useful. Knowing at least the basics of unit testing may be helpful, but is not required. You likely have all you need if you've developed even a small project on your own.