tags:

views:

403

answers:

11

I am getting ready to buy my next book to read. What should I get?

I am still pretty much a Junior Developer in terms of writing maintainable code, design patterns, and just overall good code. Sure, I can churn out a ton of code that works, but it probably isn't the best code.

I want something that will help me write better code. I have read Code Complete (1 and 2), but now I am looking for something else. I code in Asp.Net with C# (if that makes a difference). I have read most of the questions on SO about books, and most of them list the same books with "Code Complete" and "Pragmatic Programmer" leading the way, but no one really gives good reasons why the books are good.

Everyone says "Pragmatic Programmer" is a good book, but others say it is outdated. I don't want to drop $30+ for something that I won't get much use out of. "Clean Code" by Uncle Bob looks good, but what do you think? Or should I go the design pattern route with "Head First Design Patterns" or the Gang of Four Book?

EDIT

Let me add that I am not a beginning programmer. I have almost 5 years experience. My problem is that I have never had a mentor, so I have not learned the proper ways to code, and I am trying to retrain my brain into writing better code.

ANOTHER EDIT

In case anyone is reading this, Pragmatic Programmer is outdated, and is not that good of a book. Everything seemed very common sense to me, and I really learned nothing from it. It might be good for a beginner, but I did not like it at all.

+1  A: 

See this:

http://stackoverflow.com/questions/20965/what-programming-books-do-you-recommend

cakeforcerberus
dude, I ain't dropping $12 on a kid's book.
Martin
I have read Code Complete, and that question (read MY question).
Martin
+4  A: 

Pragmatic Programmer & Head First Design Patterns are excellent choices and are still very relevant.

Gary Willoughby
I would recommend the Gang of Four book over Head First Design Patterns any day, even to a beginning programmer.
Thomas Owens
Pragmatic Programmer is outdated and common sense.
Martin
@Martin The problem with common sense is that it isn't all that common. The above two books are great recommendations. Especially Head First Design as it will introduce things like composition, which you have to understand in order to build "better" systems.
Ty
@Martin If you think The Pragmatic Programmer shouldn't be recommended because its common sense, surely means you are arrogant in thinking everybody should already know this stuff? The truth is, everybody doesn't know this stuff and if you are a junior programmer as you describe, maybe its time you actually read it this time?
Gary Willoughby
Read my edit in my question. It was common sense to me, but would be an Ok book for a beginner. I downvoted your answer because, per my question, Pragmatic Programmer was not the right answer, and a waste of $30.
Martin
Ahh, i see... your obviously a legendary programmer, We'll Ok, ..good luck in finding books worthy of your status.
Gary Willoughby
No, I'm not, that is why I want to keep learning ... but IMO, the book was both not an excellent choice, and not relevant.
Martin
+1  A: 

I don't think you can learn that from books. It would be like learning how to swim from researching it and practicing on the floor. You have to dive into programming and write a lot of code to get good at programming. Another important thing is to look at your code from a few months or years ago, and see how you have improved. Working with others and seeing their code will also help you.

Marius
Well ... I can write code all day long (I do), but practice makes permanent, not perfect, and that is where I am right now.
Martin
+1  A: 

I would recommend you The Practice of Programming, although it's recommended for people knowing C/C++/Java, it's still useful whatever language you use.

willehr
+1  A: 

Coder to Developer has been on my list for a while now:

http://www.amazon.co.uk/Coder-Developer-Strategies-Delivering-Software/dp/078214327X

Kieron
+3  A: 

You should definitely read this book, no matter what language you're used to: "Test-Driven Development by Example", by Kent Beck ~ http://bit.ly/6hMby

Nando Vieira
Agree. Practicing Test-Driven Development will definitely help you to write better code.
Alex
A: 

If you're an ASP.NET and C# developer, I remember a book a read quite a while ago called "Professional ASP.NET 2.0 Server Control and Component Development" by Dr. Shahram Khosravi. It isn't a design pattern book or even very well known, but it will throw you right into the middle of WebForms and page life cycle and how various systems in the WebForms model are implemented. I found myself actually learning a lot about architecture and design from what I was learning about WebForms.

Overall, I think its an absolutely fantastic book, quite challenging too

LorenVS
+1  A: 

Programming Pearls will really stir your thinking. Some of the specifics are out-dated, but the principles are timeless. The book has several short chapters that can be read independently.

John D. Cook
A: 

One of the things that really helps you get better at writing code is to try writing in another programming language to the one you're used to. When you see how things are implemented in other languages, you get an appreciation for different aspects of the language and libraries you are using.

If you learned C# from 1.0 onwards, you may not realize how cool things like Generics and Extension methods are. If you look at modern C++ (STL, Boost..) you'd get a different perspective.

Once you have covered the pros and cons of various programming languages, you can make better architectural decisions too.

A lot of this comes with experience.

Writing 100 throw-away programs won't get you the same experiences as writing one application complete with installer and user documentation that you then give away/sell on a web site and give continued support to users.

Once you've got a handful of loyal users of your application asking you for change requests, you'll start to see how you could've done things differently to enable you to make changes more easily.

JBRWilkinson
+6  A: 

Refactoring by Martin Fowler.

Writing Solid Code by Steve Maguire.

Conceptual Blockbusting by James Adams.

Algorithmics by David Harel.

Programming on Purpose by P.J. Plauger.

There are also many great websites:

C2 wiki

How To Design Programs

Dictionary of Algorithms and Data Structure at NIST

MIT even has free courses available online:

Chris Judge
#1 Pick = Refactoring by Martin Fowler
Justin Standard
A: 

Rapid Development by Steve McConnell. The book is good overall, but the chapter about classic mistakes alone already makes it worth reading. The only negative thing I can say about this book it that it is somewhat old already (it was published in 1996).

Konamiman