Ask HN: Books you should have read when you start a career in SE / CS? - DDerTyp
======
chollida1
Three boks I'll recommend you read as soon as possible.

1) The Mythical Man month

3) The Pragmatic Programmer

3) Code Complete.

The thing about these books, well atleast 1 and 3 is that when they were
written they broke new ground. Or if that phrase bother you, they were the
first mainstream publications that brought their core ideas to developers.

Reading these books early in your career will help cement these best
practices.

Reading these books after you've been a practicing programmer means,IMHO, that
the return you get from reading them goes way way down.

You'll find that you've already learned all/most? of what they are trying to
teach.

You'll find yourself getting frustrated that they are preaching what you
already know as common sense and first principles.

Or put another way, I'm not sure there is much that someone who has programmed
for 5-10 years can get out of those books that they haven't picked up
somewhere else already or learned the hard way.

~~~
manaskarekar
A quick reference for the important points in Pragmatic Programmer
:[https://blog.codinghorror.com/a-pragmatic-quick-
reference/](https://blog.codinghorror.com/a-pragmatic-quick-reference/)

Code Complete: [http://codecourse.sourceforge.net/materials/Code-
Complete-A-...](http://codecourse.sourceforge.net/materials/Code-Complete-A-
Detailed-Book-Review.html)

~~~
nur0n
Thank you. The most value I get from these kinds of books is to become aware
of important concepts so that I can actively work on improving them. In other
words: what I seek from these books is the mental framework that experienced
developers rely on, the rest is mostly noise.

------
pcprincipal
Some I haven't seen mentioned here:

1\. Coders at Work

Peter Seibel does an amazing job of asking programmers questions that make
them explain their methodology. The interview with Donald Knuth is awesome;
really enjoyed hearing him talk about literate programming.

2\. The Soul of a New Machine

Tracy Kidder's 1981 Pulitzer Prize winner I think is a brilliant case study on
how engineers work together and the things that can go wrong and right with
different personalities interacting with highly technical ideas. The project
in this book starts without the consent of management, which to me shows the
value of questioning the system to add business / engineering value.

3\. Little Schemer

Small book that will give your brain a serious workout and show you how to
problem solve with Lisp like languages. Even if you never end up using a Lisp
dialect, this book expands your brain.

I have more here, all of which I recommend for software and other careers
[http://benbrostoff.github.io/books/](http://benbrostoff.github.io/books/)

~~~
bgutierrez
+1 for Little Schemer. Before I read it, I could write recursive methods, but
after I read it I could think about recursion naturally.

~~~
nur0n
This! The primary benefit of this book is in learning to understand recursion.
Lisp just happens to be a good environment for naturally expressing recursion.

------
_hardwaregeek
Don't Make Me Think by Steve Krug and The Design of Everyday Things by Don
Norman.

While they're not strictly software or programming related, I really like the
concepts of making interfaces that require minimal thought to use and
empathizing with your users. I've seen an unfortunate amount of "programming
machismo" where a confusing or poorly engineered system is used and accepted
because "that's just how things work in the real world". And whenever someone
struggles with the process, it's obviously because they're wrong, not the
system. But more often than not, if more than one person has trouble
understanding your system, whether it's an API, a website, a build process,
the design is the issue.

~~~
busterarm
Don't Make Me Think is a good one, but I always felt like its lessons could
have been summed up in an infographic...though I guess that would be missing
the context to get people over that hill. I guess if you don't know that
intuitively, you're the kind of person that needs that book.

~~~
vazamb
I honestly felt the same way about "The design of everyday things". The first
few chapters are quite interesting but it gets insanely repetitive after a
while. To be fair I feel that way about a lot of pop-sci books...

------
wilsonnb
Our field is so varied that there is no good answer to this question unless
you specify what you want to focus on.

Some people are inevitably going to recommend _The Art of Computer
Programming_ , which hardly anyone has read and isn't that relevant to the
work that 99% of us are doing.

Someone will probably recommend _The C Programming Language_ , also called K&R
after the authors, but again it's not very useful unless you're going to be
using a lot of C and even then I personally don't think it provides anything
you can't get from guides on the internet. (I have actually read this one, but
it's been a while)

There are other classic textbooks that will probably be mentioned that are
only useful to those in that domain. Many of us can get by without a deep
understanding of algorithms and data structures, most people don't need to
read a compiler book, etc, etc.

However, there are some generalized books that people often recommend like
_The Pragmatic Programmer_ and _Code Complete_. These are, in my opinion, good
recommendations if you're looking for something to read but I wouldn't say
that someone starting a career in software engineering _should_ read them.
Software engineering isn't really a field with seminal texts that should be
read by everyone.

For example, every political scientist should have probably read _The
Republic_ by Plato and _Politics_ by Aristotle among many other texts. I don't
think software engineering has that equivalent, partially due to the relative
newness of the field and partially because the primary output of our field is
not written texts.

Another interesting question would be "What codebases should someone starting
their career in software engineering look at?". Are there things that the
average joe programmer can learn by poking around the Linux kernel or Firefox?
Maybe. I don't know. I've never done it. I'd be interested in hearing from
those who have, though. Maybe I'll do my own ask HN.

edit: I feel I should clarify that this is written from the perspective of a
software engineer, not an academic in computer science. For all I know there
could be seminal texts that those on the academic side should all have read.

~~~
commandlinefan
> recommend The Art of Computer Programming

And, if you do decide to dive in and read them, plan to spend a few years on
them.

~~~
papaf
It works as a reference, just today I found out that the devops darling of
anomoly detection [1] is in volume two [2].

[1] [https://www.slideshare.net/tboubez/5-things-i-learned-
toufic...](https://www.slideshare.net/tboubez/5-things-i-learned-toufic-
boubez-metafor-lisa2014) [2]
[https://en.wikipedia.org/wiki/Kolmogorov%E2%80%93Smirnov_tes...](https://en.wikipedia.org/wiki/Kolmogorov%E2%80%93Smirnov_test)

------
jpamata
Designing Data-Intensive Applications[0] by Martin Kleppmann. There's a
previous HN thread about it[1]. Helped me understand a bit more about
databases and systems. The book is also very approachable and has the perfect
blend of application and theory at a high level that anyone approaching the
industry for the first time stands to gain a lot from reading it.

The Architecture of Open Source Applications[2] series is a good one for
leaning how to build production applications and you can read it online. The
chapter on Scalable Web Architecture[3] is a must-read.

[0] [https://www.amazon.com/Designing-Data-Intensive-
Applications...](https://www.amazon.com/Designing-Data-Intensive-Applications-
Reliable-Maintainable/dp/1449373321)

[1]
[https://news.ycombinator.com/item?id=15428526](https://news.ycombinator.com/item?id=15428526)

[2] [http://aosabook.org/en/index.html](http://aosabook.org/en/index.html)

[3] [http://aosabook.org/en/distsys.html](http://aosabook.org/en/distsys.html)

------
collinf
As far as a technical book, Data Intensive Applications by Martin Kleppman.
This book covers distributed systems as well as databases, data-warehousing,
and data-processing.

A lot of tools and patterns you don't see in school that describe how most of
the "magic" behind high-powered software we use is implemented.

~~~
sp527
This should honestly be the top-voted answer. The standard palette of cargo
cult options are at best a weak proxy for real-world experience.

But Kleppman's book is genuinely and outstandingly useful for understanding
the various components involved in modern backend architectures.

------
mfrw
My take on some which I think should be atleast read once:

    
    
      1) The unix programming environment
      2) The design of the unix operating system
      3) The Pragmatic Programmer
      4) Programming Pearls
      5) Computer Systems: A Programmers Prespective
      6) K & R C
      7) The art of Unix Programming.
    

PS: I admit my bias towards systems.

~~~
travmatt
I’m halfway through the 5 and its an amazing resource.

~~~
jamestimmins
Really phenomenal textbook. Maybe the only one I've read (almost) all of the
way through.

------
busterarm
I've read most of the recommended books, but as far as what I think has
delivered immediate real value, I'm going to go with:

1) Clean Code 2) The Phoenix Project 3) UNIX and Linux System Administration
Handbook

I'm sure #2 will be something folks want to fight over _shrug_. If you want to
sidestep years of headache it's a must-read though.

~~~
poulsbohemian
FWIW, "The Goal: A Process of Ongoing Improvement" by Eli Goldratt, almost
certainly was the inspiration for The Phoenix Project, and is IMHO a better
read. One could follow up with any of Goldratt's other books for more
information about the Theory of Constraints.

~~~
busterarm
In a sense, I agree with you, but TPP is specific to a software organization
and I find it "translates" better, especially to the inexperienced.

~~~
poulsbohemian
You make a compelling argument that making the information accessible is more
important than the means of conveyance.

This is a good point for many books listed in this thread: it doesn't matter
how you pick up the design pattern knowledge, the algorithm knowledge, the
code quality knowledge, etc etc, so long as you get it, and with complete
understanding.

~~~
senorsmile
Couldn't agree more. The fact that there are options out there means that
there are more ways for these things to hopefully "click".

------
pera
_Structure and Interpretation of Computer Programs_ :

[https://mitpress.mit.edu/sicp](https://mitpress.mit.edu/sicp)

~~~
heinrichhartman
This is the most influential book I have read in my SE career. It's not a LISP
book. It's a book about programming fundamentals. E.g. Objects are covered as
well. They even build a register machine at the end.

I think a translation to a more modern language (lua!) would boost adoption
quite a bit.

~~~
skfist
_How To Design Programs_ pursues a similar goal. Esp. 2nd edition has largely
been rewritten and uses a more modern programming language. Maybe give it a
try?

------
bloodorange
There are many books which sound good in theory but I think my younger self
would not have been able to make use of the wisdom in those books because I
did not have the experience to relate to what the book was talking about.
Nevertheless, if I had to ignore this factor, I too, like many others in this
thread, recommend "The Mythical Man Month". However, I think, it's more
important to figure out what one wants from life than to just better one's
craft. Of course if that is what you want in life, then indeed pursuing that
makes sense. I'm also tempted to recommend "Siddhartha" by Herman Hesse and
"The Consolations of Philosophy" by Alain de Botton.

~~~
commandlinefan
> recommend "The Mythical Man Month"

But be prepared to come away very depressed than a book that's now 44 years
old contains wisdom that none of the people who ought to have absorbed it
have.

------
modbait
1\. The Mythical Man Month. Quite old, but still a classic.

2\. Dilbert. This comic series is an excellent introduction into how
corporations actually work.

3\. The Systems Bible. Somewhat obscure. Fascinating ideas on how large
systems, both technical and organizational, actually work.

~~~
tabtab
Dilbert! Amen. Humans are not Vulcans.

------
Slansitartop
Peopleware: Productive Projects and Teams ([https://www.amazon.com/Peopleware-
Productive-Projects-Teams-...](https://www.amazon.com/Peopleware-Productive-
Projects-Teams-3rd/dp/0321934113/))

It talks about what makes a good team, how powerful they can be, and also
gives some insight on team dysfunction.

------
ozim
You start career. If you already have been programming like in high school or
something and finished CS university don't focus much on technical books.
Learn how to work with people not computers and listen. I assume you know
objects, ifs, for loops. It is enough for technical start. I don't expect more
from junior. "The pragmatic programmer" is quite good start on it.

If you lack technical background and have problems with structure because you
have not worked through university/school in structured way then "Code
complete", "Clean code". Pick also something in depth for your specific area
you are going to start, for C# good would be "C# in depth" to get really
details of tech you will be working on. Get details in one programming
language really well then you can pick up some other tech.

------
jiveturkey
Le Petit Prince. Certainly you’ve read this but it should be reread on
occasion and starting a career is a good time.

eg “You become responsible, forever, for what you have tamed”

------
troupe
How to Win Friends and Influence People

------
skfist
My favorites so far:

\- _Pragmatic Thinking & Learning_ by Andy Hunt

\- _The Design of Everyday Things by Don Norman

\- _The Effective Engineer* by Edmond Lau

\- _The Pragmatic Programmer_ by Andy Hunt and Dave Thomas

\- _SQL Performance Explained_ by Markus Winand

And [http://teachyourselfcs.com](http://teachyourselfcs.com) curriculum is
pretty good as well.

As a side note, there's so much we can learn from game programmers and
OS/database/compiler engineers.

------
ryanmarsh
Anything about Complex Adaptive Systems. Holland’s short intro is nice.

Eventually you’re going to be faced with a very complex system to refactor. It
helps to understand the principles of healthy complex systems in nature.

[https://www.amazon.com/Complexity-Very-Short-Introduction-
In...](https://www.amazon.com/Complexity-Very-Short-Introduction-
Introductions/dp/0199662541)

------
bmj
The Practice of Programming by K & R.

Or has this fallen out of favor?

~~~
bluGill
It is by K&P, not K&R. Great book though.

------
napsterbr
This will be an unusual suggestion, but I highly recommend Geographic
Databases and Information Systems by Stefanakis. The book is split into three
parts, and the last one is specific to GIS. The other two, however, are a
great introduction for databases, indices, data structures and even some graph
theory. I've revisited several concepts I'd seen before at college.

------
Itaxpica
Back when I was just graduating from college I picked up a book called "Coder
to Developer: Tools and Strategies for Delivering Your Software". It was
basically written for people who knew how to write code, but not all the stuff
that comes with it in a professional setting - unit testing, build systems,
version control, deployment and monitoring, etc.

I'd have a hard time recommending it per se, because it relies heavily for
examples on specific technologies that were dated even when I was reading it
half a decade ago, but I think something like it with that kind of content is
a must-read for anyone starting in SE, especially coming from a CS degree that
might have been light on those areas. If I could find a version that's more
recent I'd recommend it to every new grad I know.

------
kat
Find a book that introduces to programming patterns. I read 'Design Patterns'
from the Head-First series when starting out
[http://www.headfirstlabs.com/books/hfdp/](http://www.headfirstlabs.com/books/hfdp/)

------
pvg
Superdupermegapreviouslies:

[https://hn.algolia.com/?query=books&sort=byPopularity&prefix...](https://hn.algolia.com/?query=books&sort=byPopularity&prefix&page=0&dateRange=all&type=story)

------
kosma
The Art of Unix Programming. It teaches the "why"s, not just the "how"s.

------
telltruth
This might sound either obvious or naive but if you are not a CS major, I
would really emphasize reading CS textbooks such as CLRS, Programming Pearls,
Dragonbook and most importantly textbooks on statistics m probability, linear
algebra. There is a pyramid of skills for developers. People who haven’t
studied throughly above stuff usually ends up at bottom (aka “enterprise” or
“web” or “database” developers). They spend their lives in trivialities of
patterns and plumbing and only very rarely doing something interesting such as
distributed computing, game programming, systems programming, ML/AI.

------
akaralar
For the technical side of things,
[http://teachyourselfcs.com](http://teachyourselfcs.com) gives a nice
curriculum.

------
tomdre
"Introduction to Algorithms" by Cormen et al. is one of my favorite books. It
gave me a deep understanding of algorithms and data structures.

~~~
sidcool
How do you compare it with Steven Skiena book?

~~~
tomdre
Never had the chance of studying it. I'll give it a closer look. Thanks.

------
Rotdhizon
Most books recommended here are for programming of some or administration,
anyone have notable books for cyber security, pen testing, red teaming, etc?

~~~
DDerTyp
+1, that would be awesome! :)

------
cbanek
1\. Mythical Man Month - obvious reasons

2\. Deathmarch: The Complete Software Developer's Guide to Surviving 'Mission
Impossible' Projects- also a classic.

3\. Thinking fast and slow - a great introduction to biases that will affect
your thinking in any project.

4\. The Art of War - strategy and tactics for attacking any problem. My
personal favorite translation is by Thomas Cleary.

~~~
godelmachine
It's next to impossible to find a soft copy of "Deathmarch", except for in
Russian. I tried but I haven't found yet.

~~~
mcphage
Do you mean this one?
[https://www.amazon.com/dp/013143635X](https://www.amazon.com/dp/013143635X) ?
Or do you mean a different book?

~~~
godelmachine
Yes, the link is about a hard copy, not a soft one.

~~~
mcphage
Is hard copy vs soft copy different than hard cover vs soft cover?

~~~
AnimalMuppet
Yes. Hard copy is printed (hard or soft cover); soft copy is electronic.

~~~
mcphage
Huh, I’ve never heard “soft copy” used for that before—I’ve always used
electronic copy or digital copy. TIL.

------
bluGill
Something for any industry that interests you. Computers are a tool. We use
them not because a bubble sort is n-squared and quick sort is nlogn with a
n-squared worst case. Step outside of your box and learn something about the
real problems in the world and you will be the better as you realize how you
can apply computers to solve the real problems.

------
Trundle
I'm surprised to see basically only books on how to be better at making
software. Nothing on negotiation or other soft skills like that.

Do people generally just not value things like negotiating? Or do you just not
think a book would have helped younger you?

~~~
sidcool
I can recommend two books, Crucial Conversations, and Getting to Yes.

------
nextos
The Little Schemer

------
jrs235
The Principles of Product Development Flow: Second Generation Lean Product
Development

It changed my understanding and thinking about how best to work flow
development. I highly highly recommend this book to coders to managers.

------
InclinedPlane
\- The Pragmatic Programmer

\- Refactoring

\- Facts and Fallacies of Software Engineering

\- Code Complete

------
enitihas
Code Complete. I found Code Complete to be as eye opening for day to day work
as SICP is while learning in University.

------
sidcool
The title makes me wonder, is it too late to read these books for me, a decade
long programmer?

~~~
charlysl
No

------
mhh__
Linux kernel coding standard, for attitude rather than specific guidance?

------
gargarplex
Waltzing With Bears. Oh my god how I wish I had read that one book.

------
dmux
(1) Object Thinking by David West. (2) Thinking Forth by Leo Brodie

------
nacho2sweet
Code Complete 2. I bought it... never read it.

------
hemantv
Effective Engineer by Edmond Lau

Game Programming Patterns

------
Hernanpm
Web Scalability for Startup Engineers

------
cmrdporcupine
The Glass Bead Game by Herman Hesse.

------
sl956
1) The Art of Computer Programming

2) The Art of Computer Programming

3) The Art of Computer Programming

4A) The Art of Computer Programming

~~~
akshat_h
Has anyone really read these books from page to page?

Also, are they really relevant when you are starting your career? These seem
more into the category of making you competent in the field of algorithms
research, rather than something a person starting a career should read.

~~~
commandlinefan
> Has anyone really read these books from page to page?

I recently finished reading the first three, and have started on the fourth
(with a detour to read "fascicle 1.1 on MMIX"). I started the series planning
to work every single problem. That turned out to be just a little
unrealistically ambitious - I settled for _attempting_ every single problem
except for the "unsolved research problems" (in some cases, just figuring out
what the problem was asking for left me with a sense of accomplishment). Even
so, I ended up spending a year on each volume, reading/working problems for a
half hour a day or so. On the one hand, I loved these books, and really
enjoyed reading/working through them, but - recommended before beginning one's
software development career? You'll need to know a fair amount of calculus to
make sense of a lot of it, and it'll take quite a while to get through. It's
questionable how relevant it really is, fascinating as the subject matter is.

------
BigTex420
Hackers and Painters

------
jacksmith21006
The Phoenix project. Everyone should read, IMO. I actually started with The
Goal first. Then Phoenix project and then the Google SRE book.

