Programming books which put you on the path to being a better programmer
Posted by Significant-Yard-495@reddit | learnprogramming | View on Reddit | 41 comments
I don’t just mean books that taught you a programming language (though feel free to mention those), but also books that shared best practices or conveyed insights through the author’s personal experiences
Bubbly-Swan6275@reddit
In regards to specific books I don't think it matters.
I'd read books on these subjects:
Intro to Programming, OOP, Discrete Math, Data Structures & Algorithms, Computer Architecture, Operating Systems, Networking, Databases, Distributed Systems.
Try to do most of your academic work in C++ if you aren't trying to make money imo. It hides less from you and has a lot of high level tools to play with as well.
StructureLegitimate7@reddit
Opinion: c++ is a horrible first programming language do to all of the high level abstractions available in it. I’d recommend C.
Any programming language really if you stick with it long enough you learn the low level concepts like pointers and references it’s just those things are mostly abstracted in things like JavaScript or Python. It’s just c kind of throws you into it and forces you to learn it right away.
g1rlchild@reddit
It depends on how you learn. If you want to get started in programming by making a website or a mobile app, writing it in C would be a special kind of hell.
It's a great idea to learn C in the same sense that it's a great idea to build a compiler --- leaning low-level programming teaches you a lot about high level programming and how those abstractions work. But that absolutely doesn't need to be where you start.
And, for the record, writing a compiler for a subset of your favorite language that emits assembler or LLVM IR will teach you an absolute ton about that language and how its abstractions work. Highly recommended -- but not for your first project.
rayreaper@reddit
I absolutely agree, sometimes people just want to build something and ride the dopamine hits that come with it. It used to be that just getting a display to show some text felt like a massive achievement. But these days, with flashy video games and colorful websites everywhere, writing a simple CLI tool doesn't feel like much of a feat. Sometimes, just getting into something and having fun is the best first step.
param_T_extends_THOT@reddit
I'll have to learn C at some point if I want to have a serious grasp of Linux and be a better Linux user -- currently I know my way around bash scripting and the terminal and most of the most useful GNU utils --, but I wonder what kind of background I need to have in order to become an effective C programmer. So, having said that, what kind of background knowledge do you believe I must have in order to be a good C programmer?
Bubbly-Swan6275@reddit
You'll definitely learn a lot doing C first. I just suggest C++ because it has room to grow and learn high level stuff. OTOH like you said it can confuse people. The most important thing is understanding those low level concepts because most people will end up working in Java, C#, Javascript, Typescript, etc.
StructureLegitimate7@reddit
Oh yeah 100 percent do C++ or any language you want that will keep your attention. I think that language for me was just very overwheleming when I was a beginner. I started in Python and moved to c for learning. Got bored went back to Python and now working in perl and JavaScript in my professionally. I tried learning c++ at the very beginning of my journey and felt overwhelmed. Python was much more enjoyable as a young programmer. Granted at the time I didn’t know a lot about what was happening under the hood. I just liked making things work. I hated Java in school. I just did enough to pass but felt bored out of my mind haha.
Everything you said is 100 percent valid. I just think when your starting out people will lean towards higher level languages on average but you’ll get those psychos who jump right into c++ or c and absolutely crush it.
Bubbly-Swan6275@reddit
Yes, on the other hand I started with python and got very confused about types, classes, etc. I was afraid to learn OOP. Obviously I eventually learned that stuff but I think C/C++ rip off the band-aid. If someone can maintain interest on a statically typed language it's for the best to start there.
Jolly_Telephone6233@reddit
For a beginner looking to learn systems programming, I'll recommend rust over both C or C++. CPUs have gotten so complex that C can't be considered portable assembly anymore. Rust enforces you to think about ownership and lifetime, and the borrow checker will make you a better systems programmer by the nature of the compiler being strict and preventing memory corruption vulnerabilities. To learn how it works under the hood learning assembly and reverse engineering is a must no matter if you start with C. Also depending on if you want to get into the hardware aspect, some electrical engineering will be required as well. If the goal is to get someone thinking about what are variables and their allocation cost, how pointers work, and how to manually manage memory than C is more than sufficient although won't teach much more than that own it's own. Also, if anyone is interested in learning I agree the commonly recommended comp-sci books aren't worth reading since a lot changed and you can learn more by disassembly your own programs with Ghidra, and googling when you have questions.
PureTruther@reddit
The Mythical Man-Month by Frederick Brooks Jr.
guillermokelly@reddit
idkfawin32@reddit
"The C Programming Language" by Brian Kernighan and Dennis Ritchie
iamevpo@reddit
Classic
Machvel@reddit
matrix computations. its a (computational) linear algebra book but its the first one that got me really thinking about proper data structures and choosing the right algorithm for the task at hand
misplaced_my_pants@reddit
This is a great collection of high ROI books: https://teachyourselfcs.com/
kawangkoankid@reddit
shitman117@reddit
I have made a video on how to think in first principle method to become a pro in programming at @the7principle https://youtu.be/PoP7wFlmIAw?si=qbxtX4-bMQp65GUx
Ezykial_1056@reddit
Code Complete by Steve McConnell
I programmed for over 40 years, and this and design patterns were the best guides to good code that I read.
Frolo_NA@reddit
Aorihk@reddit
You guys read books?
WillAdams@reddit
In addition to A Philosophy of Software Design mentioned by /u/LucasOFF a text which I found very helpful is Dr. Donald Knuth's Literate Programming:
https://www.goodreads.com/book/show/112245.Literate_Programming_Lecture_Notes_
The bible for the style of programming discussed at:
http://literateprogramming.com/
DEK considers it even more important than TeX/METAFONT, and absolutely necessary to have made those possible.
LucasOFF@reddit
To add to the books being mentioned already: Philosophy of Software Design by John Ousterhout
WillAdams@reddit
Came to recommend this, and glad to see it already suggested.
It markedly helped my current project --- read one chapter at a time, then re-wrote the code to take that concept into account and by the time I was done with the book the changes became ever less, and the program was greatly improved.
cinematic_unicorn@reddit
Algorithms to live by is a solid one.
Morguard@reddit
Prognostic Programmer.
wial@reddit
The Phoenix Project is a fictionalized manifesto for DevOps. Very eye-opening and a must read.
scalyblue@reddit
I can't say that I have found any book more useful than Thomas and Hunt's "The Pragmatic Programmer"
https://www.goodreads.com/book/show/4099.The_Pragmatic_Programmer
Make sure that if you pick it up you get the more recent 20th anniversary edition, my public library has 2 copies so I imagine yours would have at least one.
tenesedu@reddit
Systems performance Brendan Gregg
SnooComics3929@reddit
Code Complete
KrakenOfLakeZurich@reddit
Some timeless classics:
But I find these more useful, when you already have worked on a few projects and understand the most basic programming concepts.
Other recommendation:
„Head first Design Patterns“. It‘s much more approachable than the original GoF Patterns „catalogue“. I found it a good introduction into „object oriented programming“ (which, despite of what Reddit wants to make you believe, is still very relevant today).
StructureLegitimate7@reddit
The Linux programming interfaces. TCP ip illustrated (reference and reading a few targeted things for understanding of the networking involved in computer programming). The algorithms book I think the abbreviation commonly used is CLRS due to the books authors.
All of that is kind of a slog and just used for great references. I’d focus on a math or two if there is one relevant to your field ie gaming = trigonometry, quant = calculus and discrete math.
Really everyone should be learning discrete math in the computer science field that’s why Knuth dedicated so much time writing books on it. Look at concrete mathematics.
Finally the pinnacle of all programming books is a series of them called the art of computer programming. Also Knuth.
Once you get a job in the field and a family (speaking from experience) you wont have time for any of this stuff though lol so do it all now.
SeeSayPwayDay@reddit
Curious why you recommend DM highly? And, if you don't mind, what are some practical application examples?
Honest questions - I'm still a student and finished up my last DM course of the degree. I really enjoyed it, even as the exam was trying to end me.
But I often hear people say they don't 'use' it on the job at all (usually software developers), so they characterize it as just a box to check to complete the degree.
desrtfx@reddit
EmphasisRoutine2772@reddit
Not well
avocadbro@reddit
“The Pragmatic Programmer” by David Thomas & Andrew Hunt seems like it would be right up your alley in terms if what your describing.
Bhurmurtuzanin@reddit
Effective Java by Joshua Bloch. For me it wasn't only a book about Java, but a glimpse into how experienced engineers think and how much deep language knowledge changes. It was a treat from beginning to end.
SpookyLoop@reddit
These sorts of things rarely matter when you zoom all the way down to the level of "writing code".
"Designing Data Intensive Applications" and "Software Architecture: The Hard Parts" does go quite a bit into "past experiences and lessons learned" though, but again, it's not really about making you a better programmer.
By and large, if someone thinks "doing this makes someone write better code", they'll take that concept and make a tool around it, not write a book about it.
CarelessPackage1982@reddit
SICP
AlSweigart@reddit
Any book on Git and version control, especially on SCM or "software change mangement".
The Google SRE books from O'Reilly: https://sre.google/books/
I wrote a free book that covers some "clean code" concepts: https://inventwithpython.com/beyond/
Ksetrajna108@reddit
Refactoring to Patterns by Joshua Kerievsky.
Illustrates how to keep code in order incrementally with Java, UML, TDD. Liner notes list refactorings and code smells. Although the example code is Java, the refactorings are illustrated with UML, so can be applied to any object oriented codebase.
This book is not for learning Java or how to code, but for continuously making code better.
Bubbly-Swan6275@reddit
Also, you should get good at using the command line in general. MIT's Missing Semester is great. A lot of stuff shouldn't be a program but rather a shell script. Get used to working with linux, almost all of cloud/backend/embedded even is on it.
https://missing.csail.mit.edu/