Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
Ask HN: What is a must read for a developer without a computer science degree?
128 points by varrock on April 7, 2020 | hide | past | favorite | 43 comments
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?


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.


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.


Your recommendations are excellent. Thanks


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


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.


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


The way you interpreted my question is correct.


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


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.


I found most courses I did as being useful. Many people can write code but only a few can understand how a machine running that code works, what the code they wrote does in the background , how can you write efficient and correct code, how can you better express business domain.

It's good to have a higher level of understanding, learning languages, frameworks and libraries is of course necessary but not enough if you want to be one of the best.

My advice is to read on CS topics as much as one can. Are you interested in databases or work with them? A bit of algebra will help explain how they work. Some of the introductory courses on databases I did had some algebra because that was necessary to explain relations, normalization and other topics. You can't do much AI and ML unless you learn some statistics.

As for algorithms, data structures, complexity I find them invaluable in any kind of programming.


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.


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.



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.


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


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


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.


Exact two books I recommend people (only in reverse order).


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


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)


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.


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


Does that mean it's worth learning..?

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


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


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


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.


What every programmer should know about memory https://people.freebsd.org/~lstewart/articles/cpumemory.pdf


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.


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 ¯\_(ツ)_/¯)


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


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.


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


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.


"Concise Guide to Software Engineering" and "Guide to Discrete Mathematics" respectively (for those who hate bare links with no info about what they refer to).


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.


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.


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.


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.


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


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


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


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

[0]www.teachyourselfcs.com


I've enjoyed books recommended at "teachyourselfcs".




Consider applying for YC's Winter 2026 batch! Applications are open till Nov 10

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: