Post answers with the author/book pair. Let's keep it language-neutral.
Here's the Coding Horror Recommended Reading list
Edit: Related Stackoverflow Question
What is the Single Most Influential Book Every Programmer Should Read
Post answers with the author/book pair. Let's keep it language-neutral.
Here's the Coding Horror Recommended Reading list
Edit: Related Stackoverflow Question
What is the Single Most Influential Book Every Programmer Should Read
I think The C Programming Language (http://en.wikipedia.org/wiki/The_C_Programming_Language_(book)) is widely considered a great book.
And, if I can blow my own horn, the Foundations of Programming free ebook (http://tinyurl.com/5jaae2)
Most of the books I would recommend were already on Jeff's list. Here are a few more that I'd recommend to someone just starting out:
And of course, Steve Yegge has a list of 10 great books for the more keen members of the audience. :)
The first book I would recommend would be Code Complete by Steve McConnell, however that's already on Jeff's list.
Code: The Hidden Language of Computer Hardware and Software Charles Petzold
This is a great book for a beginner to really understand computers and how people communicate with them at the most fundamental level. It's also a very entertaining read.
Bruce Eckel, Thinking In C++ - free, too. I know you said language-agnostic, and this is a C++ book, but the sections on OOP are very good. There's a Thinking In Java if I recall correctly.
@Jim Daniel said:
The first book I would recommend would be Code Complete
I would second that, really good practical advice, and generally language agnostic.
Programming Pearls and More Programming Pearls by Jon Bentley are really good in teaching you to think like a programmer.
I think it's important when you are starting off to get "quick wins". Something heavy like the books on these lists will just kind of bog you down. If you're not seeing instant results, you are likely to get discouraged by the deep theory and bogged down by the complexity.
Maybe if you are over 20 and mature enough to really delve into all that, something like Code Complete would be OK, but actually I'm not sure you could even fully comprehend what that book had to say until you'd been in the trenches, or at least seen the trenches.
I'd recommend someone who was truly just starting off to pickup a book on JavaScript or PHP (or Python). There's nothing that will get you hooked faster than within five minutes of picking up your first programming book having your computer "talking" to you and interacting with you. Once you've gotten "addicted" to programming, then you can start to really appreciate the deep theory and wonderful history that programming and CS has to offer.
At that point you can start learning C and reading Code Complete, Codding Horror, theDailyWTF, Don't Make Me Think, etc. etc.
So, saying all that, the first thing I would recommend would be:
JavaScript for the World Wide Web Visual Quickstart Guide (Tom Negrino & Dori Smith) and/or JavaScript for the Absolute Beginner (Andy Harris)
Or really any book from the Visual Quickstart Guide series, or PHP for the Absolute Beginner (Andy Harris) or even HTML, XHTML, and CSS All-in-one Desk Reference for For Dummies (Andy Harris & Christopher McCulloh (I wrote the PHP & jQuery portions - yes, shameless plug))
Honestly, the best book on software development I've read as of yet is mentioned in Jeff Atwood's reading list: The Pragmatic Programmer by Andrew Hunt and David Thomas is very nice because of its bite-sized chunks of incredibly useful wisdom. You can crack open this book, turn to a random section and get not-so-common common-sense advice which is applicable to everyday projects. I would recommend it to anyone who writes code for a living. Even if you have been programming for a few years, there is bound to be something useful within this book.
Michael Nygard, Deploy It!
This is the only book I have encountered that talks about protecting real world software systems through the use of good software design choices. Software will tear itself open and spill acidic blood all over everything nearby. The sooner you accept this and strive to protect yourself the better.
"Debugging the Development Process: Practical Strategies for Staying Focused, Hitting Ship Dates, and Building Solid Teams" by Steve Maguire.
No-non-sense, down-to-earth, entertaining, profound.
Microserfs - Douglas Coupland
Nothing at all to do with software development and everything to do with software development at the same time :)
Robert M. Pirsig, Zen and the Art of Motorcycle Maintenance
Books like Code Complete, Mythical Man Month, Pragmattic Programmer, and UML Distilled are great for practical advice, observations, and reference.
In software development and engineering, our end goal is often bringing a quality product into being. As you pick apart what those qualities are and try to define them, defining good and bad can become an intractable problem.
When I was looking for a way to stretch my framing of the development process, I found this book to be an insightful exploration of concept of quality. The philosophical nature of this book was a nice departure from the typical development-oriented texts on my shelf.
The following books are must-reads, in my opinion:
These are must-reads for several reasons. First, they introduce you to all aspects of software development, many of which are skipped or glossed over in formal education. Second, every book above provides helpful, practical knowledge and advice sourced from industry practice in the field. It's not hype, it's not theory, it's wisdom taken from people who have discovered how to develop software well. I would go so far as to say that the above 5 books contain more useful knowledge for software engineering than is typically acquired through completion of a Computer Science bachelor's degree program at an accredited western college or University.
Third, these books provide the intellectual models and nomenclature to talk and think about software development. It's difficult to stress how important this is. For example, if you don't know about the "extract method" refactoring, or if you don't know about the prototype design pattern, or if you don't know about mini-milestones you will be at a loss not only in that your work will be of poorer quality because you lack those tools but also in that you will lack the ability to communicate in those terms with other developers. Missing out on understanding these things would be like a mechanic not understanding how a distributor cap worked or not knowing how to use lava soap. Certainly they could still get work done (you can get a surprisingly large amount of work done with half an ass) but they would be at an extreme disadvantage to those that knew such things.
--
As an addendum, from left field I'll toss in this item:
This is actually a worthwhile read for software developers. It provides many real-world stories of technical investigations and problem solving. Every software developer spends a fair amount of time tracking down the source of bugs, this book provides an insight into how that's done in the medical field. The lessons you take away are just as applicable to software development (e.g. false-leads in bug investigations, the problem of treating symptoms instead of underlying causes, when you know you've actually fixed something for sure, etc.).
My one new contribution:
Michael C. Feathers: Working Effectively with Legacy Code. I've come to the conclusion that we should all learn to love working with legacy code and try to be as good with it as possible, seeing as that's what we'll be doing 90% of the time at work anyway. :)
Also, yay for PragProg, Code Complete and Refactoring.
Another one of Martin Fowler's great works is "Patterns of Enterprise Application Architecture".
because i tend to like indepth tomes and good reading, i would go with Dr Timothy Lethbridge's Object-Oriented Software Engineering: Practical Software Development using UML and Java for grounding, Theory and Practice of Relational Databases by Stefan Stanczyk, Bob Champion, and Richard Leyton for introduction to databases and then The Mythical Man-Month: Essays on Software Engineering by fred brooks for software projects.
the timothy lethbridge book has got lecture videos as well for those who enjoy a good movie
oh yes ofcourse dont forget codinghorror.com by jeff atwood. however the true value of this site is only seen if you start reading from the very begining of the posts in the archives
Practical Guide to Structured Systems Design by Meilir Page-Jones
I thought it was a good introduction to program design. It has a really good explanation of coupling & cohesion, principles which are still applicable today.
I read this book about a year after graduating college and wondered why it wasn't used in any of my courses.
I see many good books listed here, so I'll try to recall a few that weren't mentioned already:
Happy reading!
I second Code Complete by Steve McConnell all the way.
Excellent book that will start from the simple AND/OR gate implemented with relays (NOT transistors mind you) and work up from there.
You'll get all the internals right by starting with the book. Which will then help you further along once you start doing C/C++ and/or data structure classes.
I really think this is an absolute must for any beginner, but that's just me :-)
Lean Software Development: An Agile Toolkit
I love this book because it lays out a simple approach for developing high quality software fast and cheap - regardless of the language or environment you work in. Delivering value and eliminating waste are some of the core messages in this book. Ideas like these have greatly increased my (and my team's) productivity.
One that surely needs adding to the library of any self-respecting C, C++, C# or Java programmer is Kernighan and Pike's The Practice of Programming.
From two of the most influential programmers of the last 30 years the book is packed with gems of advice for people who simply want to write good programs (in almost any language).
The Pragmatic programmer and Joel on Sotware will be 2 eye openers for any begginer programmer. In my company we are giving one copy of each for every new junior hire.
Domain Driven Design by Eric Evans changed the way I design and write software.
Here's the top 10 books...
and you can find the rest of the Top 100 Books here.
I found these books very good as well
"Slack", "Waltzing with Bears", and "Presentation Zen"
the last one, I found really interesting, it doesn't have much to do with actual development, but it does offer some interesting concepts on how to keep things simple. I've been also meaning to dig into a couple of Edward tufte's books.
This book discusses topics that go beyond "mere coding" (although that's in there, too), such as: Source Code Control, Unit Testing, Bug Tracking, Logging, Documentation, the Build Process, and Delivering the Application.
Other useful books:
START with the wrox books, you can get many of them on the cheap at half.com (do a search a sort by lowest price)
Then when you can actually start writing a program, you can get into all the theoretical/academic crapola.