Sign up ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free.

I've already been programming for quite some time and have a firm grasp on programming itself, OOP, and a few other programming related things. However, I'm interested in learning the same things that would be taught to a computer science graduate, and was wondering what I need to cover?

In case it's relevant, I've programmed with PHP, Java, Python, C & C++ and I'm looking into Lisp/Scheme.

share|improve this question

migrated from Aug 10 '11 at 2:32

This question came from our site for professional and enthusiast programmers.

closed as off-topic by gnat, MichaelT, Bart van Ingen Schenau, Kilian Foth, m3th0dman Feb 1 '14 at 19:46

This question appears to be off-topic. The users who voted to close gave this specific reason:

  • "Questions seeking career or education advice are off topic on Programmers. They are only meaningful to the asker and do not generate lasting value for the broader programming community. Furthermore, in most cases, any answer is going to be a subjective opinion that may not take into account all the nuances of a (your) particular circumstance." – gnat, MichaelT, Kilian Foth, m3th0dman
If this question can be reworded to fit the rules in the help center, please edit the question.

Are you looking for breadth or depth? I suppose you could choose both, but that might be a bit time consuming... – Webs961 Aug 9 '11 at 23:35

5 Answers 5

up vote 12 down vote accepted

Computer Science courses obviously vary from university to university, but generally speaking they don't focus too much on languages. Learning a bunch of different languages may help you find a job, but won't teach you much about algorithms, the theory of computation, artificial intelligence, compilers, and the other subjects university courses cover.

MIT Open CourseWare would be worth looking at. It might also be worth your time to look through your local university's website and see exactly what courses and subjects are taught, and what textbooks are required.

share|improve this answer
MIT OpenCourseware isn't really that great for computer science, at least not if you want the video tutorials - excellent in general, but not specifically for computer science. The algorithms course is excellent, but you may need some math from elsewhere first. Also, automata theory is extremely important - there's a course (6.045J) but no lecture videos. – Steve314 Aug 10 '11 at 5:49
Also - again, the "computer science" is mostly programming, but there's still a lot there - probably a lot more practical than "real" computer science too. Also (Advanced Data Structures course). – Steve314 Aug 10 '11 at 6:03

Much of the computer science curricula leaves you with "programming literacy". Here are the classes I remember that build on top of that:

  • Operating Systems: Mostly covering threading and the low level interlock code necessary to make it work. We implemented out own "green" threads on top of some solaris primitives.
  • Compiler Construction: Lexing and Parsing; We built a non-optimizing compiler for a C-like language.
  • Fundamental Algorithms: Sorting and Searching; Divide and Conquer; Balanced Trees; Big-O Notation; Graphs
  • Discrete Math: This is a post-algebra course that isn't calculus. Basically essential to understand what the heck is going on in...
  • Computability Theory: Regular Languages; Finite-state automata; Turing machines; Proofs.

(There were also a bunch of electives that were "learn a technology; build something in it." Graphics, AI, and Networking come to mind. These don't really require the courses I've described above.)

share|improve this answer

Pick up a book on Discrete Math - I used Rosen and thought it was pretty good.

After that pick up Sipser's Introduction to the Theory of Computation, which in my opinon may be the most readable book on Computer Science ever.

share|improve this answer


programming: - structured programming - object oriented programming - data structures and algorithms (qs, lists, trees, indexes, quicksort, dijkstra, etc...)

data bases: - relational - non relational

os: - linux fundamentals

software engineering:

electronics and phisics: may be optional - digital systems - automated systems (VHDL) - basic phisics on diodes and transistors, Op Amp

share|improve this answer

Most colleges have this kind of information online these days. Look at the required courses and electives in the CS programs at a few schools, and then synthesize something that meets your interests.

Some schools (e.g., MIT) have a lot of their courseware online. Watching recorded lectures might suit you better than just reading the textbooks.

Definitely make sure you get the textbooks and work through the assignments. It will give you a much deeper understanding than just hearing or reading the material.

share|improve this answer

Not the answer you're looking for? Browse other questions tagged or ask your own question.