Ask HN: What's the best programming book you've read recently? - diegoloop
======
playing_colours
"Peopleware" [http://www.amazon.com/Peopleware-Productive-Projects-
Second-...](http://www.amazon.com/Peopleware-Productive-Projects-Second-
Edition/dp/0932633439) , a lot of insights and ideas how to build great teams.
Great to read for developers, team leads and managers.

"The art of multiprocessor programming", excellent book on parallel
programming theory with code explanations:
[http://www.amazon.com/gp/product/0123705916?ie=UTF8&tag=nirs...](http://www.amazon.com/gp/product/0123705916?ie=UTF8&tag=nirshavitshom-20&linkCode=as2&camp=1789&creative=390957&creativeASIN=0123705916)

~~~
dkersten
I read (not all of it, maybe 50% of it) "The art of multiprocessor
programming" a couple of years ago and I agree, its an excellent book. I have
a handful of books on the topic and I find this to be my favourite.

~~~
playing_colours
If you have the list of books to read on the topic I would be happy if you
share it. My next book on the topic will be
[http://mitpress.mit.edu/books/programming-distributed-
comput...](http://mitpress.mit.edu/books/programming-distributed-computing-
systems)

~~~
dkersten
The only ones I can think of off-hand are these two. The second one isn't
really about parallel/concurrent/distributed programming per se, but rather
about using Intels Threading Building Blocks - good book if that's what you
want to do, but not very useful if not. The first book is interesting and
covers a lot of ground (covering general techniques and algorithms as well as
specific implementations with OpenMP, MPI and Java's facilities), but I liked
Art of multiprocessor programming more, probably because it has a more
beginner friendly teach everything from the very beginning approach.

[http://www.amazon.com/Patterns-Parallel-Programming-
Timothy-...](http://www.amazon.com/Patterns-Parallel-Programming-Timothy-
Mattson/dp/0321228111/ref=sr_1_1?ie=UTF8&qid=1400477708&sr=8-1&keywords=patterns+of+parallel+programming)

[http://www.amazon.com/Intel-Threading-Building-Blocks-
Parall...](http://www.amazon.com/Intel-Threading-Building-Blocks-
Parallelism/dp/0596514808/ref=sr_1_1?s=books&ie=UTF8&qid=1400477796&sr=1-1&keywords=intel+threading+building+blocks)

------
tdicola
Stroustrup's "A Tour of C++" is a great overview of C++11 and modern C++. It's
not very long and worth a read to see what's new in the C++ world. The
audience is aimed at people who already know C++ but want to know what's new
with the latest version. I've been doing a lot more with C++11 recently and am
really impressed with the language--dare I say C++ is actually fun to use.

~~~
Jake232
Just purchased this. I'm hoping it can make up for a year of not attending my
c++ lectures, to learn enough for my exam in 1.5weeks.

~~~
tdicola
I don't think it's going to help that much if you're new to the language. You
probably want to cram something more beginner friendly like Thinking in C++:
[http://mindview.net/Books/TICPP/ThinkingInCPP2e.html](http://mindview.net/Books/TICPP/ThinkingInCPP2e.html)
It's a great book that helped me really start to grok C++ long ago when I was
new to the language.

~~~
Jake232
I'm pretty proficient in a ton of other languages, so I'm hoping I have a
pretty good head start and will be able to follow the book, but I'll read
Thinking in C++ in the meantime until my order arrives. Thanks for the
suggestion!

------
robgering
I've really been enjoying The Joy of Clojure
([http://joyofclojure.com/](http://joyofclojure.com/)) -- note that there's a
nearly-finished 2ed in PDF form if you buy the early access version.

I've also been reading Clojure Programming
([http://www.clojurebook.com/](http://www.clojurebook.com/)) to reinforce
concepts from the above.

------
lukasm
Code Complete has pretty good bang per page, especially if you are beginner.

[http://www.amazon.co.uk/Code-Complete-Practical-Handbook-
Con...](http://www.amazon.co.uk/Code-Complete-Practical-Handbook-
Construction/dp/0735619670)

~~~
abcd_f
This is the most disappointing programming book I have ever had a misfortune
to buy. If you ever read any UML / Rational Software books - this is right up
there in terms of sucking all joy out of programming, putting a blue collar
and tie on you and then strangling you to death with soul-less trivialization
of the software creation process. Horrible, horrible book.

If you like K&R books, stay the hell away from Code Complete. But make sure to
read it though if you think programming is a career.

~~~
lukasm
I must strongly disagree. If you like K&R books, you will find a lot of useful
tips like

if (!b) { a();} else { b();}

change to

if(b) {b();} else { a(); }

------
AlexanderDhoore
"Programming Erlang: Software for a Concurrent World", by Joe Armstrong
himself.

I have not read it completely, because the first chapters inspired me to start
programming (in Erlang) and I haven't gotten back to the book yet.

~~~
dmunoz
I also read this earlier in the year. I used Erlang in a few projects at
university, but never formally learned much about it beyond what I needed.

I invite you you to hop back into the book. I found it to be a fairly quick
read for a technical book. The chapters are well motivated, and the code
samples were well placed.

Since you have some additional experience with Erlang now, you might want to
skip directly to the later chapters on libraries and frameworks, or on
building real applications.

------
michaelchum
JavaScript: The Good Parts. Made me see JS in a much more elegant way. Coding
JS is not trivial. I did use JS in webdev in general, and APIs. But really, I
would have never known the mysteries behind it such as prototypal inheritance.

------
Skoofoo
I thought I knew how to write good Ruby code, but then I read "Practical
Object-Oriented Design in Ruby".
[http://www.poodr.com/](http://www.poodr.com/)

------
truncate
Currently reading Programming Pearls by Jon Bentley. Interesting small case
studies that gives insight on how to tackle problems and think about
programming.

~~~
NicoJuicy
First time i see this one. Could be interesting ;-)

------
lgunsch
Clean Code: A Handbook of Agile Software Craftsmanship, by Robert C. Martin.

------
warfangle
The Soul of a New Machine. Fascinating documentation of Data General's
development of the 32-bit Eclipse machine. Sorta programming, sorta
hardware... back when the two were more tightly integrated.

~~~
felixgallo
I had the good fortune to work for Tom West after that book was written. He
was, quite simply, the best.

------
franze
Peopleware

pretty much the most important programming book a programmer who works with /
in teams can / should / must read.

------
nwhitehead
"Programming in Lua", by Roberto Ierusalimschy. This is a gem of a programming
book. Some of my favorite chapters: coroutines, metamethods, weak tables,
threads and states. Similar in tone and clarity to K&R "The C Programming
Language". I learn something new every time I flip through this book.

------
sateesh
As part of the MOOC course Paradigms of Computer Programming
([https://www.edx.org/course/louvainx/louvainx-
louv1-01x-parad...](https://www.edx.org/course/louvainx/louvainx-
louv1-01x-paradigms-computer-1203)) I read the initial parts of the book:
"Concepts, Techniques, and Models of Computer Programming"
(mitpress.mit.edu/books/concepts-techniques-and-models-computer-programming).
The initial chapters provide a good approachable way to get started with
functional programming. Though working with Oz (the programming language used
in the book) gets some time to get used to, this is an excellent book. I am
bit surprised that this book is not as well known, and probably I wouldn't
have known about this book if not for the MOOC course.

------
isuraed
Refactoring by Martin Fowler. Extremely practical if you work with old and
large code bases.

~~~
npsimons
"Refactoring" is next on my list, but I started with "UML Distilled", and am
currently working on "Design Patterns", partly in preparation for
"Refactoring" (and "UML Distilled" was partly in preparation for "Design
Patterns").

~~~
enterx
Suggestion : Invert the order. :)

Read Refactoring first than read Design Patterns(GoF).

~~~
loumf
There's a great book called Refactoring to Patterns which I would suggest
after GoF (and just overviewing the Refactoring book)

[http://www.amazon.com/Refactoring-Patterns-Joshua-
Kerievsky/...](http://www.amazon.com/Refactoring-Patterns-Joshua-
Kerievsky/dp/0321213351)

------
julian25
I've been reading Real World Haskell recently and loving it. It does a
fantastic job of blowing your mind while simultaneously showing you how to
apply Haskell to real-world problems.

~~~
wink
Actually I didn't like it at all. It's been a few years, but it totally put me
off learning Haskell. Doing some small steps again now, but although I'm
usually all for real world applications first (instead of doing the millionth
factorial function) - but it did not make much sense to me didactically.

------
baddox
I recently went through the later chapters of The Little Schemer again. I
still find it incredibly challenging and awesome. As many have said, this is a
great book to teach you to think recursively.

[http://www.ccs.neu.edu/home/matthias/BTLS/](http://www.ccs.neu.edu/home/matthias/BTLS/)

[http://www.amazon.com/The-Little-Schemer-4th-
Edition/dp/0262...](http://www.amazon.com/The-Little-Schemer-4th-
Edition/dp/0262560992)

------
DanielBMarkham
Clean Code, by Robert Martin. Excellent book that dives in deep on how to
write solid code. It's like having the ultimate code review in book form.

Shameless plug: I just finished writing the first in a series of books about
Backlogs. Good backlogs can make programming a lot easier. Conversely,
horribly formed backlogs can turn coding into a death march.
[http://bit.ly/1fJd5Gg](http://bit.ly/1fJd5Gg)

------
why-el
Effective Java. A very succinct collection of wonderful practices and ideas on
how to code great software that you can finish in a couple of days, even if
you are on a working schedule. Don't mind the "Java" in the title; I read the
book regularly and it applies to pretty much any language capable of some OO.

Check the table of contents, it will give you an idea of what to expect from
the book.

~~~
will_work4tears
I've got this right at the top of my wish list. Got a list of other books I
gotta finish first though, lol:

Code Complete 2, The Web Application Hacker's Handbook, Algorithms in a
Nutshell, and Code.

Not to mention an Arduino book - but I'll probably get Effective Java and read
it first.

------
walexander
Not trying to sound cute, but The Elements of Programming Style by Kernighan
and Plaugher (1974). Just read this last week during a day of plane travel.

It's all PLI and Fortran, with lots of GOTO being harmful examples, but
surprisingly much of it is still relevant. It's a quick read and interesting
look at some of the problems they had back then (and some that we still create
plenty of today).

------
brudgers
The books on and around my nightstand:

\+ _Joy of Clojure_. A recent gift[card]. I put off learning Clojure because
of it's more complex syntax. I'm both glad I did, and that I have this book
now that that's the no longer the case.

\+ _ANSI Common Lisp_. Lisp was out of reach at the time when my younger self
might have pursued computer programming, and realizing around two years ago
how accessible it had become got me to download Lisp in a Box and then buy the
used copy. Currently visiting, this book orbits in and out of the rotation
with a cometary periodicity.

\+ _Art of Computer Programming: Volume 3, Sorting and Searching_ Twenty-five
years ago or so I bought volume I and about 15 years I donated it to the
community radio station's books sale [WMNF 88.5]. I spent about $25 dollars
including shipping for used copies of the first three volumes from Amazon last
year. Right now each is on a different floor. The proximate reason _Sorting
and Searching_ is by the bed: I'm taking Algorithms I on Coursera and it is
the first one that really dives into algorithms. A deeper reason is that Knuth
always reminds me how much more there is to know - I'm getting better at the
maths, but haven't learned MIX. Maybe one of these nights.

\+ _Structure and Interpretation of Computer Programs_ I bought a "used" copy
from MIT via Amazon last year. It's staggering how much is really in it that I
glossed over 'reading' the free online version. It's much better than I
thought, and I find myself constantly referring to it or just reading a
section. It's also a reference for the other Coursera course I am taking:
Funtional Programming in Scala with Martin Ordersky.

The non-programming books are from the public library:

\+ _How Literature Works: 50 Key Concepts_. The sections are four to six pages
and lightweight. Makes for something brief to read. It's the sort of book that
I feel no obligation to finish.

\+ _Poetry of the First World War: An Anthology_ This book is actually why I
mention the non-programming books. I don't read poetry, but I'd always seen
people make a big deal about it, and there this was on the new book shelf. I
see why the English make a big deal about Siegried Sassoon. I see why they
make an even bigger deal about Wilfred Owen. It's potent and powerful and the
bench of poets runs much deeper. It makes that war the last ancient one.

------
mtalantikite
"Concepts, Techniques, and Models of Computer Programming" by Peter Van Roy
and Seif Haridi.

Also "The Reasoned Schemer", which has the same pedagogical style as the other
Schemer books, but works around logic programming.

Both of those books are mind benders and I've gotten a lot out of them
recently.

------
fredyr
Richard Bird, Philip Wadler - Introduction to Functional Programming
[http://www.amazon.com/Introduction-Functional-Programming-
In...](http://www.amazon.com/Introduction-Functional-Programming-
International-Computing/dp/0134841891)

Richard Bird - Pearls of Functional Algorithm Design
[http://www.amazon.com/Pearls-Functional-Algorithm-Design-
Ric...](http://www.amazon.com/Pearls-Functional-Algorithm-Design-
Richard/dp/0521513383)

Christian Queinnec - Lisp in Small Pieces [http://www.amazon.com/Lisp-Small-
Pieces-Christian-Queinnec/d...](http://www.amazon.com/Lisp-Small-Pieces-
Christian-Queinnec/dp/0521545668)

------
thrush
A little more than just programming, but just finished Ilya Grigorik's new
book, "High Performance Browser Networking" (available free online). I learned
a lot about Javascript/HTML loading and execution that I had never even
thought about.

------
killnine
I've recently read The Passionate Programmer and was rather disappointed.

The book has a few very valuable insights. For the most part it reads like a
series of blog posts from a slightly experienced developer.

~~~
sunkencity
It's like a fish to water nowadays, basically assimilated into the programming
culture by now.

------
sytelus
Doing Bayesian Data Analysis

Interesting topics: MCMC, Gibbs Sampling

F# for C# Developers

This book seems to leave lot out in order to simplify but good starting book
nonetheless

TCP/IP Illustrated, Volume 1: The Protocols, Second Edition

I wanted to know what really "connection" means. This book has answer.

An Introduction to R

I guess everyone dealing with data should know R, right?

Here's my Amazon list with quite a few very interesting books collected over
time:
[http://www.amazon.com/gp/registry/wishlist/RXLC4WK1ZOJR](http://www.amazon.com/gp/registry/wishlist/RXLC4WK1ZOJR)

------
cenazoic
I'm attempting some self-taught coding (my degree is in history), and after
much dithering, have started with How to Design Programs (htdp.org). SICP is
beyond me at this point, and I wanted to get a good grounding in general
concepts and good design before jumping into some other more (theoretically
lucrative)language.

HtDP is wonderful at what it does, and while perhaps a tad dry in writing
style, it is, for me, a page turner in terms of engagement and presentation of
new ideas.

------
gfodor
Physically Based Rendering by Pharr and Humphreys. Excellent book on modern
ray tracing that is a literate program. It's an amazing piece of work (even
won an oscar!)

------
zwieback
"C# In Depth, 3rd edition" by Jon Skeet. I had been falling behind on the new
stuff added to .NET and C# and this is a good way to get back on the curve.

~~~
tonyedgecombe
I'm half way through this and slightly disappointed with it. I thought there
was too much material on upgrading from early versions that have been obsolete
for a long time. Hopefully the second half is better.

------
kirang1989
Computer Systems: A Programmer's Perspective and NAND2Tetris: Elements of
Computing Systems are the best books to learn the internals of computer
hardware and solidify your understanding of how a computer works.

The Pragmatic Programmer - My all time favorite. Awesome book to learn best
practices of various aspects in programming.

The Code Book: The Evolution Of Secrecy From Mary, Queen Of Scots To Quantum
Cryptography, if you have a thing for cryptography.

------
myko
Effective Objective-C 2.0:
[https://play.google.com/store/books/details/Matt_Galloway_Ef...](https://play.google.com/store/books/details/Matt_Galloway_Effective_Objective_C_2_0?id=qp4ZXAmGaoQC)

In the style of other "Effective Foo" books. Excellent overview of best
practices for ObjC, it's the first book I hand new developers on my team.

------
jason_slack
I have a few coming from Amazon

OpenGL Insights - Cozzi and Riccio

Game Engine Architecture (2nd Edition) - Jason Gregory

Programming: Principles and Practice Using C++ (2nd Edition) - Stroustrup

------
jeremyis
Not programming per say, but love Downey's ThinkOs (free):
[http://greenteapress.com/thinkos/](http://greenteapress.com/thinkos/).

Am currently reading Think Complexity (also free):
[http://greenteapress.com/complexity/index.html](http://greenteapress.com/complexity/index.html)

------
sunny1304
Linux Device Drivers, 3rd Edition still not finished, but this is best book i
have encountered for linux driver programming.

------
runT1ME
Functional Programming in Scala.

It's not a book about scala, it just so happens to use scala as the language
to teach you how to program functionally. I've read other books that purport
to do the same, they end up showing a light sprinkling of functional concepts.
This book goes much deeper, and is ultimately much more rewarding.

------
john0
Secrets of the JavaScript Ninja
[http://www.manning.com/resig/](http://www.manning.com/resig/) has helped me
understand some of the more interesting parts of the language (such as
functions being first class objects) better.

------
espinchi
It depends heavily on what stage of your career as a programmer you are.

I strongly suggest most junior programmers I work with to read Effective Java
and Head First Design Patterns. To me, it's a great combination to help you
write code that's easy to understand and maintain.

------
kevinskii
"Mining of Massive Datasets", by Jure Leskovec, Anand Rajaraman, and Jeffrey
D. Ullman. You can get the PDF here:

[http://infolab.stanford.edu/~ullman/mmds/book.pdf](http://infolab.stanford.edu/~ullman/mmds/book.pdf)

------
rdc12
Not strictly programming, but been reading Information, a history, a theory ,
aflood. Been strugling to userstand what life would have been like before
various aspects of storage/transmision would have been like.

Looking forward to when it hits Claude Shannon

------
arcadeparade
[http://en.wikipedia.org/wiki/Code:_The_Hidden_Language_of_Co...](http://en.wikipedia.org/wiki/Code:_The_Hidden_Language_of_Computer_Hardware_and_Software)

Really good introduction to computers from relays up.

------
dusandusan
"More Effective C++" by Scott Meyers

While directed at the C++ crowd, I would recommend this book to any
programmer, as it explains many interesting concepts and idioms that are not
C++ specific.

------
eiji
C++ Concurrency in Action, Practical Multithreading, by Anthony Williams

[http://www.manning.com/williams/](http://www.manning.com/williams/)

------
digita88
Non-technical but some great concepts which can be adapted to programming:
Thinking in Systems by Donella Meadows The Checklist Manifesto by Athul
Gawande

------
pcmccull
Working Effectively with Legacy Code, by Michael Feathers

~~~
tonyedgecombe
What do you think of it? I've been considering buying this for a while.

------
danielrpa
Structure and Interpretation of Computer Programs (SICP)

------
Serow225
C Primer Plus and Expert C Programming. I wish there was a book similar to the
latter that covered C99/11.

~~~
stusmall
Have you tried C Programming: A Modern Approach? It is very good with C99 but
there is no C11. My only problem is that it spends too much time for people
who are new to C.

~~~
Serow225
Not yet, I'll take a look - thanks!

------
joerich
I recently got "Hackers and painters" by Paul Graham. I'm still reading but
pretty cool so far.

------
wink
Modern Operating Systems by Tanenbaum, although it's more basics, still
relevant for low-level stuff.

------
enterx
Apprenticeship Patterns: Guidance for the Aspiring Software Craftsman - Dave
Hoover , Adewale Oshineye

------
tathastu
Computer Systems: A programmer's perspective

Great look at under-the-hood of what happens when a program runs.

------
iceman_xiii
Have read over half of Learning Python by Mark Lutz (O'Reilly). A good read.

------
deathtrader666
I've recently started my way through SICP and Algorithms in a Nutshell.

------
stopachka
Effective Javascript.

~~~
will_work4tears
Been reading this one on my Kindle app, but it seems very "entry level" so
far. You know of any good Intermediate to Advanced JS books out there? I have
Test Driven JavaScript Development by Christian Johansen that I've dug into a
bit, but have yet to finish (it's got some more "advanced" stuff I guess,
currying, etc).

~~~
OWaz
Check out JavaScript Allonge[1] or JavaScript Enlightenment[2]

[1]: [https://leanpub.com/javascript-
allonge/read](https://leanpub.com/javascript-allonge/read)

[2]:
[http://shop.oreilly.com/product/0636920027713.do](http://shop.oreilly.com/product/0636920027713.do)

------
taylodl
The Little Schemer.

Fun to read, solidify knowledge of Scheme.

------
antocv
Beginning Java EE7 is good, a refresher.

------
recursive
Sql Antipatterns by Bill Karwin

------
malandrew
The Little Schemer

------
jbeja
"Practical Object-Oriented Design in Ruby. A Agile Primer" By Sandi Metz. I am
not so much a ruby fan, but don't let the title decive you, ruby is just the
tool (since it could use any other OOP language) to show what the book is
realy about (OOP Design shown in the best way possible).

~~~
jimeuxx
I think this book is a little too basic for anyone who's already studied any
OOP. I'm no expert, but what I learnt from this could've been condensed into a
blog post. I think it'd make a great introduction (a word that should be
included in the title) to OOP though.

------
mystral
Last one was probably _Let Over Lambda_. One of the few programming books I've
read cover to cover.

------
yarou
TAOCP by Knuth (if you can get past the maths).

