
Ask HN: What is a must read for a developer without a computer science degree? - varrock
Which book would you say is a gentle, yet highly foundational book for a programmer that would take their self-taught knowledge to the next level? Would it be a book about data structures, algorithms, or even operating systems? If so, which resources specifically?
======
binarynate
These three books helped me tremendously:

1\. The Pragmatic Programmer by Andy Hunt and Dave Thomas

2\. The Clean Coder by Robert Martin

3\. Design Patterns: Elements of Reusable Object-Oriented Software (the "Gang
of Four" book)

The first two contain a range of advice pertaining to working as a
professional software engineer. The third one, although very dated, is still a
great resource for understanding many of the design patterns used in OOP.

------
keiferski
SICP, Gödel Escher Bach, some theoretical works on computer science are a good
start.

[https://mitpress.mit.edu/sites/default/files/sicp/index.html](https://mitpress.mit.edu/sites/default/files/sicp/index.html)

[https://www.physixfan.com/wp-
content/files/GEBen.pdf](https://www.physixfan.com/wp-content/files/GEBen.pdf)

[https://plato.stanford.edu/entries/computer-
science/](https://plato.stanford.edu/entries/computer-science/)

[https://en.wikipedia.org/wiki/Computer_science#Further_readi...](https://en.wikipedia.org/wiki/Computer_science#Further_reading)

Is there some reason why I am being downvoted? These are all highly-regarded
books.

~~~
perceptronas
Your recommendations are excellent. Thanks

------
acchow
After you learn a little bit about compilers (and know something about
software security), the paper "Reflections on Trusting Trust" blew my mind. I
consider this a must read.

[https://www.cs.cmu.edu/~rdriley/487/papers/Thompson_1984_Ref...](https://www.cs.cmu.edu/~rdriley/487/papers/Thompson_1984_ReflectionsonTrustingTrust.pdf)

------
DeathArrow
Those books cover a part of topics I've studied at the University:

The Art of Computer Programming by Donald Knuth

Introduction to Algorithms by Thomas Cormen

An Introduction to Formal Languages and Automata by Peter Linz

Probability and Statistics by by Morris H. DeGroot

Operating Systems: Internals and Design Principles by William Stallings

Understanding Cryptography by Christof Paar

Database Systems: Fundamentals of Design, Implementations and Management by by
Peter Rob

Principles of Concurrent and Distributed Programming: Algorithms and Models by
M. Ben-Ari

Introduction to Graph Theory by Richard Trudeau

Advanced Data Structures by Peter Brass

Ones and Zeros: Understanding Boolean Algebra, Digital Circuits, and the Logic
of Sets by John Gregg

An Introduction to Algebraic Structures by Joseph Landin

Theory of Computation by S.N. Sivanandam

You can always find more on
[https://cstheory.stackexchange.com/](https://cstheory.stackexchange.com/) or
on some universities websites.

~~~
smt88
I took OP's question to mean, "What parts of your CS degree are actually
useful in practice?" That may be wrong. Perhaps OP wanted to know what is
interesting, or they wanted an abbreviated CS curriculum.

While some of these are very useful in practice, a lot of the content covered
is abstracted away in the stack in the languages most programmers use (Java,
JavaScript, Python, C#, etc.)

~~~
varrock
The way you interpreted my question is correct.

~~~
mavelikara
In which case, the grandparent’s comment is likely not useful advice.

~~~
t-writescode
Unless they’re writing Ruby, where unsorted arrays are faster than sets for
everything, it is still very good to understand algorithms and apply them.

------
mrosett
One note: Many of the books being listed are quite challenging to read cover
to cover. For instance, "Introduction to Algorithms" (which is generally
referred to as "CLRS" as an abbreviated form of the last names of the four
authors) is the textbook for Georgia Tech's graduate introduction to
algorithms course, and we probably only covered half of the material in it.
Even just reading a quarter of that book (or of many of the others suggested
here) would still be tremendously valuable.

~~~
heelix
Both book 1 and 2 are solid interview prep material. They were very helpful
jumping into graph database development too. I was not expecting them to be
that 'deep end of the pool' when someone recommended a set.

------
mimixco
About Face[0] by Alan Cooper about UI design.

Refactoring[1] by Martin Fowler.

On Lisp[2] by PG.

[0][https://www.amazon.com/About-Face-Essentials-Interaction-
Des...](https://www.amazon.com/About-Face-Essentials-Interaction-Design-
ebook/dp/B00MFPZ9UY/ref=sr_1_3?dchild=1&keywords=about+face&qid=1586271808&sr=8-3)

[1][https://www.amazon.com/Refactoring-Improving-Existing-
Addiso...](https://www.amazon.com/Refactoring-Improving-Existing-Addison-
Wesley-Signature-
ebook/dp/B07LCM8RG2/ref=sr_1_1?dchild=1&keywords=refactoring&qid=1586271869&sr=8-1)

[2][http://www.paulgraham.com/onlisp.html](http://www.paulgraham.com/onlisp.html)

------
downerending
_The Mythical Man Month_ is arguably the most important CS (or software
development if you like) book ever written, and it's an easy read. Still
relevant.

------
ThisIsTheWay
I recommend "Understanding the Digital World" [0] to everyone, but especially
those who work in the tech field. Understanding how the systems work is
absolutely fundamental, but many people do not spend the time to build that
foundation.

Highly recommended, it's a great book.

[0] [https://www.amazon.com/Understanding-Digital-World-
Computers...](https://www.amazon.com/Understanding-Digital-World-Computers-
Internet/dp/069117654X)

------
seanmrafferty
I've seen a of lot enigeers that don't understand fundamentals and it causes a
lot of problems in real-world software. These are my goto recommendations:

Code Complete: A Practical Handbook of Software Construction, Second Edition

Clean Code: A Handbook of Agile Software Craftsmanship

~~~
urxvtcd
It's weird that you mention a book like Clean Code to a person worried about
potential gaps in their CS education. I mean, they don't teach it at
universities, right? Chances are, if he's self taught he knows Clean Code
better than average graduate.

------
Lesabotsy
My take Introduction to Computing Systems: From Bits & Gates to C/C++ & Beyond
([https://www.amazon.com/Introduction-Computing-Systems-
Gates-...](https://www.amazon.com/Introduction-Computing-Systems-Gates-
Beyond/dp/1260150534))

~~~
spinchange
I love the "motivated ground-up" approach. Always mystified by the economics
of educational/textbook publishing, though. I suppose for required coursework
it's not unreasonable and it really looks like an exhaustive tome and
educational resource. Just kind of prohibitively high $ for non-formal
student. (New price is like $135, used price inexplicably over $1000)

------
afarrell
The Therac-25 paper.

[http://web.mit.edu/6.033/2017/wwwdocs/assignments/rec-
therac...](http://web.mit.edu/6.033/2017/wwwdocs/assignments/rec-
therac25.html)

It presents a case study of the impact of a poorly build interface and the
impact it can have on peoples' lives. If you do the work of a software
engineer, you bear a responsibility for the systems and interfaces you build
and the impact of how humans use them. The paper also introduces you to the
important questions to ask about systems and teams in order to bear that
responsibility.

It was the first paper in my university's Systems Engineering class for good
reason.

------
username3
Read Cracking the Coding Interview. That’s all that the companies test of your
degree.

~~~
BossingAround
Does that mean it's worth learning..?

I'd also challenge that CTCI is what companies test... It's what FAANG tests.

~~~
wdroz
The first chapters cover useful tips that are not focused on FAANG. Like
making a matrix/table with each projects you did and writing down the answers
of classic questions (Challenges, Mistakes/ Failures, Enjoyed, Leadership,
Conflicts and What You'd Do Differently).

------
potta_coffee
I'm also self taught, some books I feel have been really helpful to me:

Elements of Computing Systems

Writing and Interpreter in Go

[https://www.amazon.com/Elements-Computing-Systems-
Building-P...](https://www.amazon.com/Elements-Computing-Systems-Building-
Principles/dp/0262640686/ref=ed_oe_p)

[https://www.amazon.com/s?k=writing+an+interpreter+in+go&i=st...](https://www.amazon.com/s?k=writing+an+interpreter+in+go&i=stripbooks&ref=nb_sb_noss_2)

------
hackermailman
Brown's accelerated CS course
[https://learnaifromscratch.github.io/software.html](https://learnaifromscratch.github.io/software.html)
teaches graph theory, big O, some compilers and all the assignments are things
you do in industry like writing a program to test another program.

------
zn44
What every programmer should know about memory
[https://people.freebsd.org/~lstewart/articles/cpumemory.pdf](https://people.freebsd.org/~lstewart/articles/cpumemory.pdf)

------
JGM_io
New here: I am a startup business coach at an European, no strings attached,
accelerator. This makes my advise less tech oriented.

Unless your stack is very deep or highly specialised I would say the
following: I don't have a specific book in mind but with code slowly becoming
a commodity I would advise content that intersects tech with business or UX.
Anything not IP or otherwise USP to your company can be built by reusing
other's work.

Also learning the mindset to leverage repo's and API's to the max so effective
productivity is realised is super important.

~~~
ammanley
Would you be willing to expand on this? I have observed in my work that code
is less and less about "technical innovation" and more about figuring out
_which_ of the myriad number of tools, libraries, and abstractions are best
suited to solving a particular (usually business process) problem. Seems like
you'd know a thing or two about this. (yes, this puts me in the not-vaunted-
line-of-business category of programmers - welp ¯\\_(ツ)_/¯)

~~~
JGM_io
I wouldn't call myself an expert but tech facilitates business (value for
society captured by an organisation) and I see many product or tech oriented
founders losing sight the life blood of a company: money and time where time >
money.

So I don't think it is about a set of information/processes as it is a mindset
to set aside the ego that wants beautiful code and be ruthlessly effective

------
TbobbyZ
A lot of books mentioned in the comments are great. But reading them just to
read them isn't going to bring that much value. I get the most value out of
programming books when I've been coding and I see place in my project and I
think, "there has got to be a better way to do that." I then will search for
specific chapters in books that help me improve what I think can be done
better. To me it's better to use them as a reference while you are building
something than just reading them cover to cover.

------
slipwalker
i would recommend two ( of many ) springer book that are free to download, and
i find that complement each other nicely:

\- Concise Guide to Software Engineering:
[https://link.springer.com/book/10.1007%2F978-3-319-57750-0](https://link.springer.com/book/10.1007%2F978-3-319-57750-0)

\- Guide to Discrete Mathematics:
[https://link.springer.com/book/10.1007%2F978-3-319-44561-8](https://link.springer.com/book/10.1007%2F978-3-319-44561-8)

~~~
non-entity
how much of a math background do you have to understand discrete math? I was
going it try to self teach what was effectively engineering math (most of
calc, linear algebra, differential equations), but found my foundational
algebra and precalc were too full of holes and have had motivational issues.
Discrete math seems a bit less, _mathy_ for lack of a better term, so I'm
wondering if I'd have better luck with that.

------
rramadass
For Practical aspects: _Code Complete by Steve Mcconnell._

For overall understanding of the Computer as a holistic system of
abstractions: _Structured Computer Organization by Andrew Tanenbaum._

Any book on Algorithms/Data Structures; Robert Sedgewick's books are
recommended.

The above should give you a good foundation. You can then move onto in-depth
study of each layer/abstraction eg. Languages/OS/Compilers/Networking etc
based on your need/job.

------
p1esk
In my experience, getting to the "next level" always requires building
something substantial. Just like trying to speak or write in a foreign
language is always better than learning about that language.

If you feel like you want to grow as a programmer, pick a project (or
contribute to an existing one), and learn whatever is needed to do it.

------
justforfunhere
I would suggest, "Computer Systems: A Programmer's Perspective" by Randal
Bryant.

It helps you deep dive into the computer systems and covers subjects taught in
at least three to four courses in a formal computer science education.

------
thecleaner
Maybe try the dinosaur book - Operating System Fundamentals. Even if you dont
have a degree you know that a computer has RAM, a disk, a processor. This book
ties everything together. Much more satisfying to put in the effort to do the
assignments.

------
stevage
Depends so much on your goals. Do you want to be an application developer or a
computer scientist? Two totally different things.

------
shakkhar
Start with CLRS. It's an excellent intro to the fundamental algorithms and DSs
that makes up CS. Absolute must read.

------
Jugurtha
I believe restricting recommendations to books one has read would shrink and
improve this thread.

------
travmatt
I’d pick a book from [0], focusing on what you’re weak on or interested in.

[0]www.teachyourselfcs.com

------
magnusmagnusson
I've enjoyed books recommended at "teachyourselfcs".

