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 made a pretty good living as a self-taught programmer, but when I find that I discuss some low-level fundamental topics with my peers who have a CS degree, holes appear in my knowledge. I'm a big picture (architecture) guy, so for a long time this hasn't bothered me, but lately I've wondered if there is an approach I can take that will help me learn these fundamentals without going back to school? Are there books, websites or videos that you can recommend that would give me a ground-up perspective as opposed to a learn it as you need it mentality?

share|improve this question
1  
This is an excellent question. I've had the same issues. – Rob Jan 17 '11 at 15:36

4 Answers

up vote 21 down vote accepted

This ought to keep you busy for a couple of weeks:

http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/

share|improve this answer
@hal - Look at the lecture notes attached to the courses. These will help point you in the right direction. – jmort253 Jan 17 '11 at 0:23
I'm on the second video... I can't wait to go through the entire series and start watching more of these... thanks! – Brian Reindel Jan 21 '11 at 3:42

If you just went through the Structure and Interpretation of Computer Programs book, and did the exercises, you'd have a pretty solid foundation.

share|improve this answer

Since I learned a lot from books, I tend to think in terms of books.

There are a number of good books for learning about the basics of the craft of programming. At the top of the list, I'd put:

  • Code Complete, 2nd Edn

It is largely language-agnostic, and it explains the why's and wherefore's very approachably, and covers a lot of ground in its pages.

I like a few other general books - my background gives me a strong Unix bias:

  • The Practice of Programming
  • The Art of UNIX Programming

Although Knuth's "The Art of Computer Programming" is in many ways excellent, it is also a daunting set of books to read.

You could usefully look at some of the books about algorithms - there are many.

After that, it depends on where your main areas of interest and professional duties lie. What is appropriate depends on where you need to specialize. You might want to look at "An Introduction to Database Systems" by C J Date, as a general background on relational databases.

Other possible contenders:

  • Design Patterns
  • Refactoring
  • Clean Code

In a somewhat different vein, "Software Fundamentals: The Collected Papers by David L Parnas" is an interesting read - but probably not at the top of your priority list.

share|improve this answer
+1 Have to agree. There's a great reference thread on SO that contains pretty much all of the above tomes: stackoverflow.com/questions/1711/… – middaparka Jan 17 '11 at 11:45

There are several books & topics I consider to be very good. There are a ton of others, but these will get you a long way towards a solid CS education. I've seen other books on these topics, and these - IMO - provide the depth needed for a thoughtful consideration of the matter, at a professional level.

Corman's Algorithms

Russel & Norvig's AI: A Modern Approach

Money & Harris's Digital Design.

Hopcroft & Ullman's Introduction to Automata Theory

Aho, Ullman, Sethi's Compilers, aka "The Dragon Book"

None of these books are nice friendly quick-digesting Apress or O'Reilly books. That is not their purpose. They don't really come with lots of code (exception is Digital Design, which is for sophmores, not seniors), but usually come with a fair amount of math. Difficulty of understanding goes up exponentially when moving into the deeper things.

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.