Tell me more ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

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
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

migrated from stackoverflow.com Aug 10 '11 at 2:32

9 Answers

up vote 10 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 see.stanford.edu/see/courses.aspx - 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 cise.ufl.edu/~sahni/cop5536 (Advanced Data Structures course). – Steve314 Aug 10 '11 at 6:03

Why, Knuth's Art of Programming series of books of course! Read them cover to cover.

Also, being able to list off languages you know (the syntax of) is not that impressive. If you go for a job that even requires programming expect questions on Algorithms and Data Structures.

share|improve this answer
1  
On the back of my copy there's a quote from Bill Gates: If you have read and understood the whole book, give me a call (or something similar) – miku Aug 9 '11 at 23:57
3  
True. I hope to one day replace my CV/resumé with a copy of a cheque from Donald for $2.56 – James Aug 9 '11 at 23:59
1  
Volume 4 isn't out for too long, might be a good hunting ground. – miku Aug 10 '11 at 0:01

Look up the curriculum for a CS program you respect. Course websites will often reference a textbook. Buy the textbooks and work through them. If nothing else, do do this with one or two algorithms textbooks. Pay attention to theory, which is what programming experience will not necessarily give you. Learn Lisp, Prolog, Haskell and one or two assembly languages. Get at least a passing acquaintance with the lambda calculus and pi calculus. Write yourself a minimal OS kernel and a compiler. Computability and complexity theory is a must. Database theory, too, even if you know SQL in practice.

share|improve this answer

If you want to learn for yourself, I'd suggest you work through some books:

Also - as already mentioned - ocw.mit.edu or webcast.berkeley.edu are great audio-visual resources.

share|improve this answer

Code Complete is definitely worth reading

http://www.amazon.com/Code-Complete-Practical-Handbook-Construction/dp/0735619670

http://www.cc2e.com/

It will teach how you should code, not how to code.

share|improve this answer
1  
OK, but how is this related to computer science? That term usually refers more to the theory (automata, algorithm analysis, lambda calculus etc) rather than the practice (particular languages, design patterns, code style). – Steve314 Aug 10 '11 at 5:52

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

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

algebra:

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

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

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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