Take the 2-minute tour ×
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.

Say you, a senior developer, get a junior developer straight out of uni or college to care under your wings. He/she is the typical freshly minted programmer: knows at least one mainstream language fairly good and perhaps some basic knowledge in a second or third; possesses the basic knowledge about search algorithms and data structures and when to use which; uses some form of coding standard consistently, but doesn't really grasp the notion of self-commenting code; have participated in several small projects of one or two team members and one larger project with 5-10 team members; etc.

Now, to ensure that your eager apprentice is mentally properly equipped before getting to work, which 3 technical books would you recommend him or her to read? These can really be any books, as long as they improve the developer's programming skills on way or another. (If you know a must-read book about a particular programming language and the project happens to contain lots of such code, do include that one in your list if you feel it applicable.)

share|improve this question

closed as not constructive by Mark Trapp Jan 27 '12 at 1:37

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.If this question can be reworded to fit the rules in the help center, please edit the question.

1  
I like how a lot of the books in these answers are either required (like Code Complete) or recommended (like The Pragmatic Programmer) by my department. –  indyK1ng Oct 15 '10 at 15:26
1  
    
Arg, people are going to vote on particle combinations of books, rather than each on its own. Why did you ask it this way? –  Novelocrat Nov 5 '10 at 21:06
1  
Bible, Koran and Torah. May the force be with you. –  Job Nov 24 '10 at 5:26
add comment

13 Answers

These aren't programming books per se, but I'd recommend "The Mythical Man Month" and "Peopleware". When you get out in the real world, chances are good you won't know how a software project should be run, and there are plenty of bosses out there that will take advantage of that fact. Reading these books won't give you your manager's experience, but they'll give you a better idea of when they're doing something dumb or trying to put something past you.

And believe me when I say that learning to "manage up" is a programming skill. A bad manager is the single biggest threat to your programming skill there is. Even if you don't learn to get your way with them, you'll at least know when you're in a bad situation.

share|improve this answer
    
+1 for your last para above. Spot on. –  quickly_now Nov 6 '10 at 2:35
add comment

I would recommend Code to Developer by Mike Gunderloy.

Some of the technology references (VS 2003) in the book are a little bit dated, but I specifically remember this book as being my main introduction to concepts like source control, defensive programming, bug tracking, etc - all of the stuff that they didn't teach me in school.

share|improve this answer
add comment

The Art of Unit Testing - Roy Osherove
Design Patterns in C# - Steven Metsker (C#) / Head First Design Patterns (Java) - Elisabeth Freeman, Eric Freeman,Bert Bates, Kathy Sierra
Code Complete: A Practical Handbook of Software Construction - Steve McConnell

share|improve this answer
add comment

Clean Code has already been mentioned in other posts. I'd like to add Interface Oriented Design: With Patterns . It teaches how to think in terms of interfaces and not actual implementations. In the end making your code more flexible and maintainable. Also, The Art of Unit Testing is one of the best books on unit testing that has simple and practical examples. It teaches you why and not just the how.

share|improve this answer
add comment

My answer is very different, it could be totally wrong :-)

I consider that College graduates should first have a strong foundation before they move to the finer aspects of SW Engg. Also in my experience a lot of graduates come very unprepared to the real world.

  1. Continue reading and re reading Cormen. If you are done with it migrate to "The Art of Computer Programming" by Knuth. Read and re read these for an year or two :-)

  2. Pick up one book on Operating System internals. "Unix internals" by Steve P Date is a good book. It will take an year or two to digest everything and be a champ on Unix.

  3. Pick up Code complete. The book helps you decide at what standards you want to develop the code you write.

I would also advocate picking up a fourth book on TCP/IP or just plain networking whatever suits you.

share|improve this answer
2  
I think a junior developer working on Windows writing CRUD apps would only waste time with your first two suggestions. Algorithms and OS workings are worth knowing, but likely irrelevant to the majority of junior consumer application developers. –  Anna Lear Oct 16 '10 at 19:32
    
I can understand your comment but then he will always remain a Junior developer devloping CRUD applications. There are always a lot of libraries you can directly use for the Algorithms which we use every day but the point I wanted to make was that people enhance thier Problem solving skills. You can always apply variants of Algorithms in your everyday work. Also once you become senior you are expected to solve tougher problems and if you haven't done it the only thing you have is X Years of experience. Most difficult problems in an App come when the OS doesn't behave as it should. –  Geek Oct 17 '10 at 5:56
    
This answer is too specialised, I'm guessing your list is what you would have liked to have read when you came out of college? Reading a unix book would only really give you useful information about unix. What about web or mobile developers, and windows/mac developers? TCP/IP again is only useful when you need to use it. Surely it is better to focus on more universal skills like others have mentioned algorithms, UML, code patterns etc. rather than a particular platform? –  adamk Dec 26 '10 at 21:40
    
@Adam: The essence was a platform specific book, you can replace it your mobile paltform or Mac. I am right about TCP/IP, I hate it to see that 5+ years programmers can not troubleshoot basic networking issues. –  Geek Dec 27 '10 at 6:10
add comment

Hrm:

  • Code Complete, it is the Bible of software development
  • Rapid Software, you're going to question a lot of decisions your management makes and you're going to wonder what they're doing right or wrong. It's good to question everything but since software management is so unintuitive this guide provides you with a more level understanding.
  • Refactoring, Martin Fowler has never done me wrong so far. You'll have to iterate a lot. Best to learn how to do it correctly.
share|improve this answer
add comment

Code Complete

This covers so many aspects of software craftsmanship. It was my first, and it was a great book to start your career on.

User Stories Applied

This book helped me make meaningful estimates through the use of velocity based planning.

Framework/Language specific books are important, but in my opinion books about craftsmanship and estimating software are more important to success in your career.

There will always be another framework to learn.

share|improve this answer
add comment

Get him The Bug by Ellen Ullman. I've rarely read such a vivid rendition of the life of a developer... Plenty of lessons to learn in the book, and it's not one of those dry technical tome, it's actually fiction.

share|improve this answer
add comment

I'd likely give them the same sort of books that I tend to reach for the most often at my job, or those books that helped me out the most when I first got started. Thus:

  1. Code Complete: A Practical Handbook of Software Construction by Steve McConnell
  2. Software Requirements by Karl E. Wiegers
  3. Algorithms in a Nutshell

Some substitutions that I might make to this list depending upon the environment and the background of the person would be Software Estimation: Demystifying the Black Art by Steve McConnell if they didn't have much of a background in that. Also, the textbook Introduction to Algorithms instead of the Nutshell reference if they didn't have a course using that book (or bought it on their own) in college.

share|improve this answer
add comment

For the job, some of the first things that are not taught in school that a developer is going to have to get comfortable with are:

  • Unit Testing
  • Version Control
  • Project Automation (CI, etc.)

Fortunately, there's the Pragmatic Starter Kit. It was a huge help when I started and it's by no means the "if you only read 3 books, read these 3" but if you're going to read a whole bunch in your career, I'd suggest starting with these 3, just to get it out of the way.

Covers:

Pragmatic Project AutomationPragmatic Version ControlPragmatic Unit Testing

share|improve this answer
    
-1 for Pragmatic V C using Subversion - one of the worst books in the Pragmatic Programmer series I've read. –  talonx Oct 16 '10 at 1:39
    
@talonx: What's wrong with the Pragmatic SVN book? I wound up buying two copies, one for myself and one to float around the office. It was very handy for getting people up to speed on svn, branches, best practices. –  khedron Oct 16 '10 at 3:10
    
@khedron - I found it to be extremely thin on content and not worth reading. programmers.stackexchange.com/questions/6974/… –  talonx Oct 16 '10 at 4:22
add comment

I found very useful to give three types of books. I'm assuming you target C#, but you can find the corresponding book in almost any technology:

We can use an analogy and compare with learning a spoken language:

  • The first one helps with syntax
  • The second with vocabulary and usage
  • The third helps to know what to say... and when... and to whom... ;)

They are all essential to me.

share|improve this answer
add comment
  • The Pragmatic Programmer, by Andy Hunt and Dave Thomas
  • Refactoring, by Martin Fowler
  • Code: And Other Laws of Cyberspace by Lawrence Lessig

The Pragmatic Programmer tells you just about everything you need to know about how to be an effective programmer. (And the reason I don't list Kent Beck's Test Driven Development is because that's an expansion of one topic in PragProg.)

Refactoring shows you in detail how to improve your code.

Code: And Other Laws of Cyberspace shows you the impact your code can have on the world around you. You're not writing something in isolation. You're writing something that can have a profound impact on your users, and the world at large. Code is Politics.

share|improve this answer
2  
Great list - I'd also add Clean Code by Uncle Bob as an complementary to The Pragmatic Programmer and Refactoring. –  Martijn Verburg Oct 15 '10 at 14:58
3  
Almost exactly this, but I would swap Code Complete for The Pragmatic Programmer. I think the latter is something that I wouldn't really have been ready for when I came out of university. It was really great for helping me feel passionate about my profession again when I had a few years of experience under my belt. –  glenatron Oct 15 '10 at 16:34
    
straight out of College ?? Not many people know proper coding, Algorithms and OS when the come out of college :-( –  Geek Oct 15 '10 at 17:17
add comment

The Pragmatic Programmer taught me a lot and there is no complicated code examples in there either. Just good advice and useful concepts.

share|improve this answer
add comment

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