HACKER Q&A
📣 varrock

What is a must read for a developer without a computer science degree?


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 Accepted Answer ✓
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://www.physixfan.com/wp-content/files/GEBen.pdf

https://plato.stanford.edu/entries/computer-science/

https://en.wikipedia.org/wiki/Computer_science#Further_readi...

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


👤 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...


👤 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/ or on some universities websites.


👤 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.

👤 mimixco

👤 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...


👤 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


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

👤 afarrell
The Therac-25 paper.

http://web.mit.edu/6.033/2017/wwwdocs/assignments/rec-therac...

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.

👤 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/s?k=writing+an+interpreter+in+go&i=st...


👤 hackermailman
Brown's accelerated CS course 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

👤 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.


👤 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

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


👤 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".