Are there any great programming or software development books that are language agnostic? Why should I read it?
This book is all about how to write code that works and is maintainable. A key concept is being practical. Everything in the book is boiled down to 70 tips that are easy to remember that help you deliver better, higher-quality software.
This book is probably the definitive book on software construction. It discusses topics such as the foundations for construction (requirements, architecture, and design), choosing a programming language, choosing a development methodology, designing classes and objects, writing high-quality functions and methods, defensive programming, the use and naming of variables, data types, organizing and formatting statements, collaborative programming, testing, debugging, refactoring, and development tools.
This is a must have on every software engineer's shelf, even if you aren't explicitly writing code.
My favorite is: Structure and Interpretation of Computer Programs
It was my first academic text-book 10 years ago, and it still blows my mind how relevant it is in predicting trends in state of the art "Software Engineering", and programming in general.
It uses LISP for it's examples, but I don't consider LISP any kind of language, hence it's totally agnostic ;)
Clean Code - Robert Martin
This is a must have book for software developers. Most software development tomes talk about coding software, programming languages and the latest technologies and techniques to write software.
In "The Mythical Man Month" - Mr. Brooks tackles a more fundamental (IMO) aspect of software development - the social aspect. He addresses the problems faced in a major software project, from the problem of adding people, the second system effect, and the need for proper process.
This books is one that looks at programming from the perspective of making it an engineering discipline, something that can be used to engineer a large, complex piece of software.
Design Patterns. The patterns largely OOP-bent, but within OOP, they're pretty applicable to any language.
You should read it because it'll make you a better designer. It teaches you good ways to solve subsystem design problems that you might not have figured out until you'd been designing systems for 40 years. They're reusable solutions to semi-common problems. That said, there's a pattern that sophomores go through when they learn design patterns in school:
- Design patterns are kinda neat. I wonder how I can use them in this project I'm working on?
- Design patterns are 10x better than sliced bread! I'm gonna use'em everywhere!
- Ok, there is a time and a place for using specific patterns. Moderation is good.
- We should solve this problem with solution X. Oh right, that happens to be pattern Y. How 'bout that.
Lots of high level concepts, its a pretty advanced book that I would not recommend to novice developers. If you are working on a large scale software project with lots of inter-dependencies, this is a great reference.
Test-Driven Development: By Example by Kent Beck.
A super introduction to TDD. Got me started on the TDD path. Code samples are Java, but the material is otherwise very language-agnostic.
- Code Complete 2
- Pragmatic Programmer
- Design Patterns Explained
- Writing Solid Code
- Refactoring - Martin Fowler (He's got a few actually all worthwhile)
- Clean Code
- 97 things Programmers should know.
These are all books I've either read through completely or reread significant portions of a few times and are well put together. I'm a newcomer to programming as a whole so I've used these to get contextual understanding of what I should learn how to do.
Oh for the database stuff
- The Art of SQL
- Simply SQL
- SQL For Smarties - Joe Celko
- These all spring to mind off the top of my head, so forgive me for not recalling all the authors-I was on my way to another post about memorising syntax :).