4 ms·
This is the core of a CS degree, each one is class, sometimes multiple classes that go into more detail. All interview questions will basically only cover thes
by mahyarm 13y ago
This is the core of a CS degree, each one is class, sometimes multiple classes that go into more detail. All interview questions will basically only cover these topics.
1. Algorithms & Data Structures <- The biggest one
2. Baremetal Hardware. ASM, goes into the design of a physical cpu with ALUs, etc. Sometimes you make your own basic CPU. I suggest using a course with ARM ASM, simpler than x86 ASM.
3. Operating Systems & Multithreading Theory. You usually do a bunch of C language work here. Maybe combine it with a project on an ardunio or similar.
4. Discrete Mathematics
5. Databases
6. (Optional) Compilers. Write your own compiler, do this after the ASM course.
7. (Optional) Artificial Intelligence. Learn cool things such as machine learning. AI can be very statistical at times, so I suggest adding a Statistics & Probability course to supplement. Statistics is used a lot in business, so it's useful to know for life in general.
8. (Optional) Computer Graphics, using OpenGL!
On top of that I suggest you learn a functional language like Clojure or Haskell. Or both of them. Also learn a language where you have to do memory management and deal with pointers (like C, C++, Objective-C) if you don't include it in your Operating Systems course. After that you can basically do anything in software. Any new language and platform will be just covering concepts you already understand at that point, so you'll be able to learn them extremely quickly.
- mahyarm 13y agoForgot to add that computer graphics can use linear algebra & calculus.
- semisight 13y ago4: I've found nothing substitutes for a good teacher. Maybe try Coursera or something of the like? On 6: You may want to write an interpreter as a first step. Google "bootstrap scheme" for a guy who implemented a scheme-like language in 22 steps. It's pretty cool, I'm following it right now. If you're looking Look into LLVM. It's a great backend and is practical knowledge if you like what you're doing. Adding onto languages, if you want the esoteric stuff, look at Factor, or Smalltalk (for more image based programming). Different paradigms are cool.
- jobu 13y ago+1 for Algorithms & Data Structures In my experience with non-CS developers, this is one of their biggest shortcomings when trying to solve non-trivial programming issues in the real world. However, if you have a design background and a knack for UI, then don't sell yourself short. There are lots of programmers and plenty of great artists, but talented people with both skill sets are seriously hard to find. Take a look at this article for an idea of what most developers (myself included) come up with for UI: http://www.codinghorror.com/blog/2006/11/this-is-what-happens-when-you-let-developers-create-ui.html http://www.codinghorror.com/blog/2006/11/this-is-what-happen... If you have the ability to prevent atrocious designs like the one in that article then you are solving important and challenging problems. There's a reason user experience (UX)design is such a buzzword right now.
- mtdewcmu 13y agoWhen I went to CMU, databases was not in the core curriculum, but statistics and programming languages was. I don't think there was even an undergraduate-level databases course in the CS department.
- jd007 13y agoI would add computability and complexity theory to that list. Some computational complexity should be covered in algorithms and data structures, but theory of computation is not really (as algorithms by definition solves only computable problems). A fundamental knowledge of what is and what isn't computable is quite important in theoretical computer science IMO.
- mtdewcmu 13y agoI can't remember if formal languages and automata was an elective or a requirement for me... I think it might have been required. The textbook was the one by Sipser, and I thought it was a pretty good book.
- mahyarm 13y agoYes I forgot about that. In my degree it was just the second 'algorithms & data structures' class.
- wicknicks 13y agoA precursor to the compilers class is the Formal Automata one. This is very useful in understanding fundamental computation models (what is computation, why, how can we do it etc..). I was recently reading [1] to refresh some concepts and found it to be more engaging than some of the older books on the topic. [1] http://www.valorebooks.com/textbooks/automata-theory-and-applications/9780132288064 http://www.valorebooks.com/textbooks/automata-theory-and-app...
- casperc 13y agoCould we try to add some books for each of these topics?