
Programming from the Ground Up uses Linux assembly language to teach new programmers the most important concepts in programming. It takes you a step at a time through these concepts: * How the processor views memory * How the processor operates * How programs interact with the operating system * How computers represent data internally * How to do low-level and high-level optimization Most beginning-level programming books attempt to shield the reader from how their computer really works. Programming from the Ground Up starts by teaching how the computer works under the hood, so that the programmer will have a sufficient background to be successful in all areas of programming. This book is being used by Princeton University in their COS 217 "Introduction to Programming Systems" course.
That's a self-defeating attitude which you don't want to reinforce :-(
Assembly is not difficult but writing large-scale programs/systems in it is. But almost nobody does this nowadays; it is generally C & Assembly. So you need to know/understand just enough assembly to get along.
Start with Jonathan Bartlett's Programming from the Ground Up for a nice introduction - https://news.ycombinator.com/item?id=11702025 Then look at Daniel Kusswurm's and Larry Pyeatt's books. Also https://news.ycombinator.com/item?id=45782206
https://www.amazon.com/Programming-Ground-Up-Jonathan-Bartle...
[0] https://www.bartlettpublishing.com/site/books/learn-to-progr...
[1] https://download-mirror.savannah.gnu.org/releases/pgubook/Pr...
That being said, this book teaches network programming from the ground up so I would recommend understanding how to compile and output C code, then go through the book.
If you run into keywords, or syntax that you are not familiar with, just google it, and then keep working through the examples.
Mind you, the key takeaways from this book are not how to network practice IN C, but general practices. This knowledge can be applied to plenty of other languages such as Rust.
Also there is a book called Programming from the Ground Up that starts with assembly and moves up to C and beyond.
As a developer who didn't learn via a scholastic setting, taking the time to sit down and learn a bit of assembly was something I see as a critical point in my career.
Starting with a high level scripting language, my brain had a hard time dealing with so much abstraction and taking what felt like a crazy amount of axioms as given.
I took a few months to sit down and go through the excellent book Programming From the Ground Up. After doing some bit twiddling, writing a basic allocator, and a handful of the other exercises from the book, I felt way more prepared to handle abstractions higher up.
Anything that I couldn't infer based on the underlying knowledge was something I could google, then quickly form the missing links between starting from the bottom.
I feel like learning C could give the same benefits, though I do hear some struggle with pointers, and in assembly you get to look face first at what they actually are. Everyone has different levels of abstraction that they're comfortable with as well. Assembly was enough to fill the seeming void of knowledge that I felt was holding me back, but for others it may be higher depending on which aspects are puzzling (memory management, intermediate representations, etc).
I also appreciate how much information modern VM authors publish about the inner workings of their platforms. It helps a lot in the same manner to reason about the systems (v8, JVM, CLR, etc).