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: Kyle Loudon, Mastering Algorithms with C Martin Fowler, Refactoring Eric Freeman, Head First Design Patterns (A much more gentle treatment of the subject than GoF) Shelley Powers, Jerry Peek, Tim O'Reilly, and Mike Loukides, UNIX Power Tools Ben Collins-Sussman, Brian W. Fitzpatrick, and C.
Michael Pilato, Version Control With Subversion And of course, Steve Yegge has a list of 10 great books for the more keen members of the audience. :).
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)).
Thanks for recommending our book--much appreciated! – Dori Sep 19 '08 at 3:38.
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.
The first book I would recommend would be Code Complete by Steve McConnell, however that's already on Jeff's list. Code: The dden 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.
Here's the top 10 books... Code Complete: A Practical Handbook of Software Construction (2nd Edition) Steve McConnell Head First Design Patterns Elisabeth Freeman Rapid Development Steve McConnell Design Patterns: Elements of Reusable Object-Oriented Software Erich Gamma Applied Cryptography: Protocols, Algorithms, and Source Code (2nd Edition) Bruce Schneier Agile Software Development: Principles, Patterns and Practices Robert C. Martin Joel on Software Joel Spolsky Peopleware: Productive Projects and Teams (2nd Edition) Tom DeMarco, Timothy Lister The Mythical Man-Month, Anniversary Edition (2nd Edition) Frederick P. Brooks Refactoring: Improving the Design of Existing Code Martin Fowler and you can find the rest of the Top 100 Books here.
Programming Pearls and More Programming Pearls by Jon Bentley are really good in teaching you to think like a programmer.
I see many good books listed here, so I'll try to recall a few that weren't mentioned already: Extreme Programming Explained The Mythical Man-Month Programming Pearls Peopleware Ship It! Practices of an Agile Developer Happy reading!
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).
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.
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.
The following books are must-reads, in my opinion: Code Complete 2e Rapid Development Design Patterns Refactoring Facts and Fallacies of Software Engineering 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: The Medical Detectives 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.).
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, and Building Solid Teams" by Steve Maguire. No-non-sense, down-to-earth, entertaining, profound.
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.
Zen and the Art of Motorcycle Maintenance, indeed. A must for every programmer :) (you must understand where you have your heart and values) – kitofr Sep 30 '08 at 8:03.
Another one of Martin Fowler's great works is "Patterns of Enterprise Application Architecture".
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.
I think The C Programming Language (en.wikipedia.org/wiki/The_C_Programming_...)) is widely considered a great book. And, if I can blow my own horn, the Foundations of Programming free ebook.
The first book I would recommend would be Code Complete I would second that, really good practical advice, and generally language agnostic.
Microserfs - Douglas Coupland Nothing at all to do with software development and everything to do with software development at the same time :).
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 don't 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 recommend the O'reilly in a nutshell series.
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.
Mike Gunderloy, Coder to Developer: Tools and Strategies for Delivering Your Software 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.
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.
Wow, alot of nerd rage it seems on this site. I thought the idea was to downvote misinformation, not difference of opinion. – RandyMorris May 4 '10 at 22:00 Original question was much more vague and the question focuses on begginner.
Msybe I should have answered with Godel, Escher, Bach: an eternal golden braid from douglas hofstadter to a query for a begginner book. Join in on the psudo intellectual posting rant. Maybe throw in a self story of my first computer to further make this more about "me".
Nah, that is just tacky, i'll take the down votes. – RandyMorris May 4 '10 at 22:10.
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 :-).
HTML, XHTML and CSS: A Visual Quickstart Guide for sure.
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.
Other useful books: UML Distilled by Martin Fowler. It covers the essential subset of UML that will help you to communicate your ideas to other programmers (according to me, this is the only thing for which UML is useful). Design Patterns Explained by Shalloway and Trott.My favourite introductory book about patterns.
I cant really gove you an answer,but what I can give you is a way to a solution, that is you have to find the anglde that you relate to or peaks your interest. A good paper is one that people get drawn into because it reaches them ln some way.As for me WW11 to me, I think of the holocaust and the effect it had on the survivors, their families and those who stood by and did nothing until it was too late.