HACKER Q&A
📣 varrock

Best book to gift someone for getting into software engineering?


It’s easy to find a book about a specific programming language, but I’d be thrilled to know of a book or resources that will provide someone with a solid foundation for good software engineering principles, regardless of the language being used.


  👤 jeffshek Accepted Answer ✓
Another vote for Code Complete. But coming from someone who's bought and gifted a few books, I'm thinking instead of the quote ...

"If you want to build a ship, don't drum up people to collect wood and don't assign them tasks and work, but rather teach them to long for the endless immensity of the sea." Antoine de Saint-Exupery


👤 hackermailman
Print out all the papers from MIT's grad level credit of 6.034: https://ai6034.mit.edu/wiki/index.php?title=6.844_Info or Sussman's version https://ai6034.mit.edu/wiki/index.php?title=6.S966:_A_Gradua... and bind them together in a book, with the instructor notes and include these papers https://courses.csail.mit.edu/6.803/schedule.html too

They are all classic AI papers, that try and encourage the reader to think about unsolved problems.


👤 diego_moita
Pragmatic Programmer is still a good book, not as revealing as before but still has lots of good advice.

Code Complete is a problematic book. It has some good ideas but also has some very bad ones (cone of uncertainty, 10 times productivity in good programmers, etc).

Design Patterns is mostly obsolete. Functional programming techniques made a lot of Object Oriented techniques irrelevant (e.g.: observer pattern vs callbacks with lambdas).

Art of Computer Programming is the book everyone mentions but no one reads. A classic that people actually read is Structure and Interpretation of Computer Programs.

My recommendations: "Code" by Charles Petzold,"Don't make me think" by Steve Krug, Working Effectivelly with Legacy Code, by Robert Feathers, Clean Code by uncle Bob,..


👤 ZeroGravitas
The Pragmatic Programmer was a good broad spectrum intro 20 years ago, I don't know how well it's aged, but they have just released a 20th anniversary update so maybe check out reviews for that.

👤 billman
Warning: Software engineering can be quite boring to someone who has done little programming. In my opinion, when your starting out it is better write anything that compiles and runs, then to write incomplete "proper" programs. Software engineering principles make more sense after you've hacked yourself though a bunch of badly written code.

👤 mindcrash
Grokking Algorithms (https://www.manning.com/books/grokking-algorithms), preferably on paper.

👤 drallison
It might be a good thing to define what you think Software Engineering means. The comments section shows that there is little agreement between HN readers. Software Engineering, particularly for large and complex systems, seems to focus on human management and interaction issues almost entirely. The technology of programmed systems plays a minor how those systems get put together. Mel Conway got it right: systems (recursively) mimic the organization that built them. See https://en.wikipedia.org/wiki/Melvin_Conway

👤 deepaksurti
The best gift given you requirements would be `Elements of Computing Systems` [1] aka `Nand2Tetris' and a better gift would be if you can mentor that someone while he works through it.

Also any book that covers soft skills aspects while emphasising the importance of having good career plans and good mentors is critical.

[1] https://www.nand2tetris.org/book

[2] https://www.nand2tetris.org


👤 WheelsAtLarge
People seem to forget that Software Engineering is a social endeavor as much as it's an engineering endeavor. Successful engineers have to be able to sell their ideas to their peers and management as much as they need to be able to create software. This is why I always recommend that engineers read, "How To Win Friends And Influence People." Reading it and practicing what it says will do wonders for anyone's life and career.

👤 brudgers
The Art of Computer Programming

It's a great book simply as a book. It's something people tend to rationalize not buying. That makes it a good gift. It will provide a lifetime of reading and learning (just as it has provided Knuth a lifetime of writing).

And it meets the spec: there's no more solid foundation and it is language independent. It's plausibly one of the most important books of the 20th/21st centuries.


👤 rramadass
A good and concise (albeit old) SE book is "Fundamentals of Software Engineering by Ghezzi, Jazayeri and Mandrioli".

For more background; "Software Fundamentals: Collected papers by David L. Parnas" is a great resource.

For a tour of the CS aspects; see "Specifying Software: A Hands-On Introduction by R.D.Tennent"


👤 wly_cdgr
Coders At Work is fun, inspiring, informative, and serves as a useful reminder of the large number of ways to skin a >cat

If you're after something more technical / textbooky, SICP, for its combination of rigor and playful enthusiasm.


👤 touisteur
Gifted to all new hires, lent to all interns (gifted if finished ;-) : Why Programs Fail, by Andreas Zeller. http://www.whyprogramsfail.com

👤 whatitdobooboo
If there is anything on a separate subject that you feel relates closely to software engineering might be useful. Personally I found software engineering boring until I saw how it could be used in other industries

👤 thorin
Microserfs - by Douglas Coupland

https://www.goodreads.com/book/show/2748.Microserfs


👤 wiseleo
A subscription to Safari would be the equivalent of a focused gift card. You would give access to thousands of books. I usually read 4+ at a time when trying to understand a particular concept.

Other than that, The Art of Computer Programming set. ;)


👤 asdfdfgdhsd
Making Software: What Really Works, and Why We Believe It by Andy Oram & Greg Wilson

Working Effectively with Legacy Code by Michael Feathers

Our standard text for SE was Software Engineering by Ian Sommerville.


👤 duelingjello
Hacker's Delight contains recipes for common problems.

👤 sr3d
Code Complete would be a great gift. This is the book I read when I first got out of college and it has had a very important influence on my coding style and thinking.

👤 9wzYQbTYsAIc
Software Engineering Body of Knowledge for a thoroughly broad-based view of the discipline of software engineering.

👤 Dowwie
The Rust Programming Language

👤 Gnarl
"Coding - on software design process" by Jonathan Locke.

👤 yjhoney
c0d3.com/book

I'm still trying to get this off the ground, so they get free support from me (ex Google / Fb / startup -> acquisition engineer with 12 YOE)