If you really want to know C and assembly and how a processor works you could read this and do the projects. Its what they use at CMU. Theres a huge lab where you implement a y86 processor (mini x86) in C and other things like implementing malloc from scratch in C. Really horribly nasty shit.
https://www.amazon.com/gp/product/013409266X/ref=dbs_a_def_rwt_bibl_vppi_i0
Computer Systems: A Programmer's Perspective by Randal E. Bryant and David R. O'Hallaron was my first book on Computer Architecture and low-level aspects of programming. It doesn't go too much into transistors but discusses machine level instructions extensively with examples and practice problems in C. It's a popular text book across college campuses so you can find it used for $20-$40.
Thanks! I'm working as a python developer, but I prefer other languages :<) At this moment I'm re-learning C with this book, because I have a terrible knowledge gap in all the low-level things.
If you like theory you could purchase CSAPP (my all time favorite CS book), and then write your own implementations of the concepts. For example you could use this book to write an assembler, linker, cpu emulator, cache memory emulator, virtual memory emulator, etc. For every project use a different programming language.
You will learn so much if you do this and your resume will be impressive.
The downside is your projects will be essentially useless outside of your personal education.
Based on CS:APP 3rd edition. For those who are interested in how things really work beneath many layers of abstraction. Sadly, my lectures earlier in the semester on reading x86-64 machine/assembly code are not recorded, but I hope at least some people will find this useful.
As with all things, it takes patience and time to see how everything fits.
Usually you get a better.picture by the timw you do Algorithms, Data Structures, Computer Architecture, and Operating Systems or whatever equivalent courses you may take in college.
But a good book to start with is Computer Systems: A Programmer's Perspective & learning C.
(Link:https://www.amazon.com/Computer-Systems-Programmers-Perspective-3rd/dp/013409266X)
My Computer Systems Organizations courses uses some of the content from this book, and it all in all tries to bridge the gap between some of the high level abstractions and low level details.
Ignore frameworks and languages. It’s more relevant for more senior jobs where you are expected to hit the ground running. The one thing I didn’t see you mention was systems knowledge. There are many college courses across the country that use Computer Systems: A Programmer's Perspective https://www.amazon.com/dp/013409266X/ref=cm_sw_r_cp_api_glt_fabc_Z1DD7RCK3MW5TSX77PTX
Pick one and follow along. Cmu has one for example.
Then practice interviews and apply. Nothing else.
Definitely C. It's closer to the computer and lets you see much more of what the computer is actually doing. Learn C then read this book: Computer Systems. This book will teach you the answers to the questions you want to ask but you don't even yet know about to even want to ask them.
If you are really serious, you need to read the following book before the Hacking book;
C coding is taught in intro classes, assembly is taught in a systems/architecture course, and logic gates are taught in a digital electronics course. Sorry I don't know many reference books, but there are plenty of resources that teach intro coding, this was the textbook we used for computer architecture, and a quick search online yielding this website for digital logic. You can also probably look up open courses like MIT courseware and such
I took a course from the authors of this book during my time at university. I highly recommend it and often go back and re-read chapters: http://csapp.cs.cmu.edu/ (crazy amazon link: https://www.amazon.com/Computer-Systems-Programmers-Perspective-3rd/dp/013409266X). Dense, technical, but absolutely fantastic for understanding computers.
Stop wasting time on inessentials. Get this book - https://www.amazon.com/Computer-Systems-Programmers-Randal-Bryant/dp/013409266X, and work through it.
This is a very advanced topic, If you don't want a laymens explanation check this video
Book covering: https://www.amazon.com/dp/013409266X/ref=cm_sw_r_awdo_G667GKRDMDF51NXPWQX2
(Just find pdf online)
I have two books that is a most read. They are not a-y reading it's more of a manual that covers topics with sort of a red string. Exist free if you look.
https://www.amazon.com/Computer-Systems-Programmers-Perspective-3rd/dp/013409266X
I read this one when I was still in college. It is pretty comprehensive. The code examples are mainly in C and Assembly, but the book does talk about Java and C++ occasionally. Get the second edition if you can.
https://www.amazon.com/Computer-Systems-Programmers-Randal-Bryant/dp/013409266X
A programing language on its own will not teach you anything useful about the architecture of a computer. In fact, you don't need to be an expert at any low-level programming language to learn how a computer works, although you will need a basic understanding of a low-level programming language to read the resources and try whatever you are learning in the real world.
I suggest these two resources:
1- What every programmer should know about memory
2- Computer Systems. A Programmer's Perspective (Second edition is fine too)
You need to have a basic knowledge of C before reading these books, but don't waste a lot of your time on C's syntax.
It seems like you're just asking for course recommendations, so I'll give you my $0.02.
I came to CMU w/ 0 programming experience. The classes that I attribute most of my growth to are:
15-112: a rigorous programming fundamentals course in Python. If you already have some knowledge of fundamentals, maybe just go through the problem sets as an exercise (if you have access to those). If you don't have access to those, I hear that a certain school that starts with an M has a lot of material online. I don't know how this class compares to CMU's though.
15-213: computer systems fundamentals in C. Pretty difficult class that's seen as a rite of passage for many CS/ECE students (and grad students). You'll get a very solid understanding of low-level programming from this course. The class assumes some very basic knowledge of C though (pointers, dynamic memory allocation, etc.). The book for this class is written by the professors and is used pretty widely throughout academia. https://www.amazon.com/Computer-Systems-Programmers-Perspective-3rd/dp/013409266X
Check this out Computer Systems: A Programmer's Perspective
Personally I'm reading this book: https://www.amazon.com/Computer-Systems-Programmers-Perspective-3rd/dp/013409266X It is a good resource for low level and system programming.
https://www.udacity.com/course/introduction-to-graduate-algorithms--ud401 is pretty good for algorithms; I recommend picking up the book as well, IMO it's better then the intro to algorithms book
https://greenteapress.com/wp/semaphores/ is a short book, good for understanding the theories behind synchronization and concurrent programming which is a topic that most people don't understand very well
https://www.amazon.com/Computer-Systems-Programmers-Perspective-3rd/dp/013409266X covers hardware and computer architecture from an application developers perspective; I took this class https://cs61.seas.harvard.edu/site/2020/ along with it, if you can find other lectures to go along with it for free I would recommend it. The class is like $2900, my work paid for it, it's really great and it's hard to find material where they have you writing a new malloc implementation, virtual memory, and other really important low level concepts without a college course, as long as you're into that kind of stuff
I spent all summer learning about this in Computer Systems. We had a great book! https://www.amazon.com/gp/product/013409266X/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1
Start with the fundamentals so has a good foundation to build on
This was awesome. I learned so much from the beginning alone, and I didn't feel like I had to struggle to do so.
This is the book I used in class. If you know C or C++ you can implement your own memory system, that's what helped understand how memory allocation works.
I'd recommend Computer Systems: A Programmer's Perspective (currently reading it) and the course based on the book.
I would add Computer Systems - A Programmer's Perspective to that list.