views:

416

answers:

17
+2  Q: 

books in college

I need as much knowledge as a college graduate! What books should I read? If you had to study PHP, Java, Ruby or Python, I'm even more interested in your answer.

+3  A: 

Joel Spolsky's "Reading List" is well regarded: http://www.joelonsoftware.com/items/2005/11/22.html

William Leara
Beware that the link itself says that it's a bit dated, and that most of the books are management-oriented. Many of the books are fairly timeless (Getting to Yes is an older but great read) but some (Testing Computer Software, Subversion stand out) might not be the best reads on their subjects just by virtue of being several years old.
Eric J.
"is well regarded" - by Joel Spolsky! Seriously, there's two problems with this answer. #1 - only 2 of the books listed have anything to do with programming, and #2 - indirect link. The direct link is http://www.joelonsoftware.com/articles/FogCreekMBACurriculum.html
Steven A. Lowe
A: 

You could search for a career program and then look for bibliography for each class.

mada
+1  A: 

Our curriculum in college didn't focus on learning more and more languages. We basically only used Pascal (to teach the basics), C & C++ (to implement different algorithms), Java (OOP), and PHP (web).

We spent more time on data structures and algorithm analysis and how software engineering should be done properly. It helped me develop my analytical and logical skills. Those are the kinds of knowledge you can use in case you needed switch from one language or another.

The following books helped me acquire those knowledge:

Randell
Why are you splitting things?
Delirium tremens
I'm guessing that you might want to know which ones should be on top of everybody else's list. Including them in one post will be biased based on my own preference.
Randell
Or could it be that you want more upvotes (not saying that I wouldn't do the same thing)?
Lucas McCoy
Subjective poll-type questions like this are usually community wiki and usually ask for one entry per answer, so I can understand why Randell initially split things up.
las3rjock
+1  A: 

If you're looking for textbook type books, you could see which books they use at MIT: http://mitcoopbooks.bncollege.com

Rob Lourens
+1  A: 

Learning Python

Randell
+4  A: 

Thinking in Java

Randell
Or you can use the book for free here: http://www.mindview.net/Books/TIJ/
chollida
+8  A: 

For what it's worth, MIT's Open Courseware program makes many of their courses available online for free- Here are their comp sci and EE courses.

Tim Howland
+1-That is superb answer!
Webbisshh
+5  A: 

Big Java by Cay Horstmann

PHP and MySQL Web Development (4th Edition) by Luke Welling and Laura Thomson

Joel Spolsky's Reading list is also good, but it is a bit dated.

And if you want to know as much as a college grad you will also want to take a look at C. The only book you will ever need for C is The C Programming Language (2nd Edition) by Brian Kernighan and Dennis Ritchie.

I also have to take a course with Assembly Language, so you may want to look at that a bit too.

Josh Curren
las3rjock
+1  A: 

Don't forget there's also good stuff on iTunesU - Stanford offers a lot of courses:

http://deimos3.apple.com/WebObjects/Core.woa/Browse/itunes.stanford.edu.1287736948

You may want to start with the "Programming Abstractions" series (I've not tried it yet but I plan to listen through).

People coming out of college have actually not done that much "real" programming, generally... you may be better off starting by looking through open source projects, thinking about something you want to try adding on, and learning enough to make that happen. Lots of other learning will take place as you go, and solving problems with real code as a starting point is the kind of thing that makes you hirable - as well as gives you the self understanding as to this being the right path for you.

Reading/Listening to the theory stuff too though (like the Abstractions series I mentioned) is also healthy, even if you don't understand all of it now. You just want to seep in whatever you can and slowly it will absorb...

Kendall Helmstetter Gelner
+4  A: 

in my idea of a good computer science curriculum, the focus is not on specific languages but on concepts. you should try to expose yourself to topics like data structures, algorithms and language theory. A language is something you pick up while practicing and exploring all those concepts.

Peter Recore
+1  A: 

When I was in school, many colleges followed MIT's curriculum. I'd recommend following those and the Stanford links. It's amazing they put these online. Don't shy away from the non-language specific courses. It may not seem directly practical right now, but it is certainly valuable.

A college Bachelor's degree generally includes at least a dozen different courses. There are basic programming courses-- I learned Pascal, and after that LISP, but now I hear Java is popular. We had an overview of different types of programming languages, and even though Ruby or Python or PHP didn't exist when I was in school, we covered the core concepts behind them.

As others have mentioned, studying a language is only the tip of the iceberg. There are algorithm courses, compilers, databases, data structures. We had a very challenging and mathematical course on the "theory" of software (proving programs correct, Big O notation). There were a set of required mathematics courses, as well as all the out non-CS stuff. And most programs include some sort of 'real world project' as well. As you may suspect, most of this material isn't directly relevant to the day-to-day work of a programmer. But they do come into play periodically and really help out.

ndp
+1  A: 
las3rjock
A: 

After getting a good understanding of your target language, download open source projects. Read and run the code. Someone's code is way better material than books. It will often lead you to ask WTF and open the door to better understanding and improved usage.

I read Whys Poignant Guide to Ruby. Despite all the extra storyline stuff, I found it entertaining and a good intro to Ruby. It's an improved "For Dummies" theme.

dr
A: 
las3rjock
+3  A: 

The only books from my computer science education that were worth the paper they were printed on were SICP, CLR, the Dragon Book. If you make it through all three, you'll be ahead of 99% of computer science graduates.

(Alternatively, just read Knuth. If you live to tell about it, you'll be ahead of 99.99% of computer science graduates. You may have trouble convincing anybody you actually understood half of it, though.)

Be sure to do all the exercises. Most of the knowledge gained in college is not from the reading, but from the doing. If you haven't written a compiler, you haven't really read the Dragon Book.

Don't bother with any books on PHP, Java, Ruby or Python:

  1. Most good colleges don't really teach languages. You're expected to pick them up on your own, when doing the coursework, and you don't need a book for that.
  2. Whatever language specifics you learn today will be obsolete in a year or two. A couple of the worst courses I had to take in college used Java 1.0; guess how much Java 1.0 I'm writing today.
  3. When you're learning computer science you want a language that gets out of the way and lets you see those concepts, not one with a couple decades of cruft. You'll have plenty of time to agonize over backwards compatibility once you get out in the real world.

There's a reason most of the Amazon reviews of SICP are 5 stars, even though most people don't use Scheme at work.

Finally, ignore all this advice and get "Dreamweaver for Dummies", because it'll pay for itself much sooner than Knuth, and there are certainly some people who managed, somehow, to graduate college not knowing anything else.

+1  A: 

Why not just scrape the syllabi from a collection of college courses? There's always google; just search for programming site:edu intitle:"java" or "ruby" or "python" or the url to this query. Interesting results.

vgm64
+1 for the beautiful Greek delta for your avitar.
duffymo
Thanks @duffymo, but to be Geek about the Greek, its technically a nabla. Or in my line of work, del.
vgm64