#2 in Computers & technology books
Use arrows to jump to the previous/next product

Reddit mentions of Code: The Hidden Language of Computer Hardware and Software

Sentiment score: 190
Reddit mentions: 336

We found 336 Reddit mentions of Code: The Hidden Language of Computer Hardware and Software. Here are the top ones.

Code: The Hidden Language of Computer Hardware and Software
Buying options
View on Amazon.com
  • Microsoft Press
Height8.9 Inches
Length6 Inches
Number of items1
Weight1.0361726314 Pounds
Width1 Inches

idea-bulb Interested in what Redditors like? Check out our Shuffle feature

Shuffle: random products popular on Reddit

Found 336 comments on Code: The Hidden Language of Computer Hardware and Software:

u/ilknish · 482 pointsr/learnprogramming

Code: The Hidden Language of Computer Hardware and Software.
It may be a bit more lower level than you're looking for, but it'd be a great foundation to build off of.

u/samort7 · 257 pointsr/learnprogramming

Here's my list of the classics:

General Computing

u/HeterosexualMail · 187 pointsr/programming

We did something similar as well. The labs were tons of fun. I remember having to run a couple dozen lines of code through the CPU cache on a test once, including some sneakery of using code as data at one point. I do appreciate having done it, but I'm not sure how much practical lasting value that really contributed.

That said, for those who are interested in this there is The Elements of Computing Systems: Building a Modern Computer from First Principles, more commonly known as "NAND to Tetris".

Petzold's Code is excellent as well.

Edit: Actually, while I've suggested those two let me throw Computer Systems: A Programmer's Perspective into the mix. It's a book we used across two courses and I really enjoyed it. We used the 2nd edition (and I have no issue recommending people get a cheaper, used copy of that), but there is a 3rd edition now. Being a proper text book it's stupidly priced (you can get Knuth's 4 book box set for $30 more), but it's a good book.

Anyone have suggestions similar to that Computer Systems's text? I've always wanted to revisit/re-read it, but could always used a different perspective.

u/falcojr · 103 pointsr/programming

If you're really serious about learning, I HIGHLY recommend the book Code: The Hidden Language of Computer Hardware and Software. It's basically a book that 'builds' a computer from the ground up, starting with simple morse code type stuff through the wire, and each chapter just keeps building until you get to assembly and some higher level language stuff at the end. You do have to think through (or glaze over) some stuff in a few chapters, but it's a very eye opening book.

Edit: Grammar

u/PM_ME_YOUR_MAKEFILE · 75 pointsr/learnprogramming

CODE by Charles Petzold is the book to read to understand computers at a base level. It literally starts at a single bit and moves all the way up the stack. I cannot recommend this book enough for someone starting out.

u/srnull · 54 pointsr/programming

Sorry to see this getting downvoted. Read the about page to get an idea of why /u/r00nk made the page.

I have to agree with one of the other comments that it is way too terse at the moment. I remember when we learnt about e.g. d-latches in school and it was a lot more magical and hard to wrap your head around at first then the page gives credit for. That and, or, and xor gates can be built up from just nand gates (the only logic gate properly explained) is also glossed over. Either go over it, or don't show the interiors of the other logic gates.

The interactive stuff is really neat. Good work on that.

Edit: If anyone reading wants to learn this stuff in more detail, two good books are

u/indrora · 42 pointsr/programming

I think one of the most profound articles I read about just what makes a computer "work" is Brian Kernighan's article, "What an educated person should know about computers". It's a decade old now and was developed into a book of similar name. (Amazon link)

Another was sitting down and reading Code: the hidden language of computing (Amazon link) and actually walking through it. The book is coming up on 20 years old, but Petzold (who has taught many a developer how to do fancy tricks with their silicon) really sat down and wrote a book that anyone could understand and come away from feeling better off and more knowledgeable about the way our world works. This is the book I refer new programmers and old knitting circle nannies to read when they ask how a computer works.

u/myfavoriteanimal · 40 pointsr/compsci

Code, by Charles Petzold

Here it is on Amazon.

u/wall_time · 32 pointsr/programming

Charles Petzold also wrote Code: The Hidden Language of Computer Hardware and Software. It's a great book. I'm sure most of the people browsing this subreddit will already understand most of what is in the book (or have read it already) but fantastic read nonetheless.

u/hooj · 28 pointsr/explainlikeimfive

The whole subject is a bit too complicated and a bit too deep for a short ELI5, but I'll give a stab at the gist of it.

The reason why computers work (at least in the vein of your question) is very similar to the reason why we have language -- written, spoken, etc.

What you're reading right at this very moment is a complex system (language) simplified to symbols on the screen. The very fact that you can read these words and attain meaning from them means that each sentence, each word, and each letter represent a sort of code that you can understand.

If we take an apple for example, there are many other ways to say that in different languages. Manzana. Pomme. Apfel. And so on. Codes -- some symbol maps to some concept.

In the context of computers, well, they can only "understand" binary. Ones and zeros. On and off. Well, that's okay, because we can map those ones and zeros to codes that we (humans) care about. Like 101010111 could represent "apple" if we wanted it to.

So we build these physical circuits that either have power or don't (on and off) and we can abstract that to 1's (power flowing through that circuit) and 0's (no power flowing through it). This way, we can build physical chips that give us basic building blocks (basic instructions it can do) that we can leverage in order to ultimately make programs, display stuff, play sounds, etc. And the way we communicate that to the computer is via the language it can understand, binary.

In other words, in a basic sense, we can pass the processor binary, and it should be able to interpret that as a command. The length of the binary, and what it should contain can vary from chip to chip. But lets say our basic chip can do basic math. We might pass it a binary number: 0001001000110100 but it might be able to slice it up as 0001 | 0010 | 0011 | 0100 -- so the first four, 0001, might map to an "add" command. The next four, 0010, might map to a memory location that holds a number. The third group of four might be the number to add it to. The last group might be where to put it. Using variables, it might look like:

c = a + b. Where "c" is 0100, "a" is 0010, "b" is 0011, and the "+" (addition operator) is 0001.

From there, those basic instructions, we can layer abstractions. If I tell you to take out the trash, that's a pretty basic statement. If I were to detail all the steps needed to do that, it would get a lot longer -- take the lid off the can, pull the bag up, tie the bag, go to the big garbage can, open the lid, put the trash in. Right? Well, if I tell you to take out the trash, it rolls up all those sub actions needed to do the task into one simple command.

In programming, it's not all that different. We layer abstractions to a point where we can call immense functionality with relatively little code. Some of that code might control the video signal being sent to the screen. Some of that code might control the logic behind an app or a game. All of the code though, is getting turned into 1's and 0's and processed by your cpu in order to make the computer do what is asked.

If you want to learn more, I highly recommend Code by Charles Petzold for a much more in depth but still layman friendly explanation of all this.

u/stevenxdavis · 27 pointsr/compsci

I just started reading CODE by Charles Petzold and I've really enjoyed it so far. It's an accessible take on the basics of computer science that doesn't just focus on computers themselves.

u/cholland89 · 27 pointsr/compsci

I just finished reading Code: The Hidden Language of Computer Hardware and Software and will state unequivocally that this book is the most satisfying read I've experienced. It starts with flashlights blinking through windows, moves to Morse code, introduces electrical relays and demonstrates how they can be connected to form logic gates, then uses those gates to construct an ALU/counter/RAM and multiplexors. It goes on to describe the development of an assembly language and the utilization of input and output devices.

This book can be described as knowledge hose flooding the gaps in my understanding of computer hardware/software at an extremely enjoyable pace. It may help satisfy your interest in the concepts and technology that led to modern computers. Check out the reviews for more info.

If you haven't already studied logic gates in depth in your formal education, I would suggest using a logic simulator to actually build the combinational logic structures. I now feel very comfortable with logic gates and have a strong understanding of their application in computing from my time spent building the described logic.

I went through the book very slowly, rereading chapters and sections until I felt confident that I understood the content. I can not recommend this book enough.

After reading CODE, I have been working through The Elements of Computing Systems: Building a Modern Computer from First Principles. If you are looking to gain a better understanding of the functions of hardware components, this is the book to read. This book's companion site http://www.nand2tetris.org has the first chapters free along with the entire open source software suite that is used in the book's projects. You will build, in the hardware design language starting with Nand gates, each logic gate and every part of a computing system up to a modern high level language with which you can program custom software of your own design to compile in a compiler you designed into an assembly language you specified which is turned into binary that runs in a processor you built from Nand gates and flip flops. This book was very challenging before reading CODE, now I feel like I'm simply applying everything I learned in code with even more detail. For somebody that hasn't attended college for computing yet, this has been a life changing experience.



u/bpikmin · 26 pointsr/programming

I highly recommend the book Code. I read it in middle school and it was absolutely fascinating. Pretty short too.

u/devilbunny · 23 pointsr/explainlikeimfive

That's a pretty interesting course. I've read the book and done exercises up until you actually have to start building the CPU.

However, I would strongly recommend reading Charles Petzold's CODE first. It's a little less technical, but explains the general concepts much better than nand2tetris.

u/shivasprogeny · 20 pointsr/learnprogramming

How deep do you want to go? Code: The Hidden Language of Computer Hardware and Software goes all the way from binary to computer code.

If you don't really care about the hardware, you might start dabbling in assembly on a Raspberry PI.

u/neutronfish · 20 pointsr/cscareerquestions

One book that helped me a lot while starting out and which I highly recommend to any new student of computer science is Code: The Hidden Language of Computer Hardware by Charles Petzold, which starts out as a general interest book about the history of computing and then very quickly ratchets up into how modern computers, compilers, operating systems, and hardware drivers are built. You basically have to learn some discrete math and assembly language just to follow along, and by the end you have a really good idea of what happens under the hood when you run your programs and why.

u/KernlPanik · 20 pointsr/learnprogramming

I'm a ~10 year sysadmin that has decided to rebuild my software dev skills that I haven't used since college. Here's what I did to reawaken that part of my brain:

  1. Harvard's CS50. I figured an entry level college course would be "beneath me" but it was a great experience and I learned a surprising amount. It's very entertaining as well so that made the "simple" parts fun to do as well.

  2. Read CODE by Charles Petzold. Great insight into the nuts and bolts of how computers work. Read through it on my lunch breaks while taking CS50 in the evenings.

  3. Read and do the problems in C Primer Plus. This is a great book for learning how to write in C, which is the basis for all modern languages and is still widely used today. Great starter book for anyone who wants to learn to program.

    3.5) After going through the last chapters of C Primer Plus, I realized that some of my math skills were not up to par, so I took this MOOC from MIT to supplement that. No idea if that's something you need.

  4. Here comes the fun one: The Structure and Interpretation of Computer Programs, aka The Wizard Book. This book is more about how to design software in general, and it is pretty difficult. That being said, if you can get through it then you have the chops to do this professionally.
u/myrrlyn · 18 pointsr/learnprogramming


This book is an excellent primer for a bottom-up look into how computers as machines function.


This is my textbook from the class where we built a CPU. I greatly enjoy it, and it also starts at the bottom and works up excellently.

For OS development, I am following Philipp Opperman's excellent blog series on writing a simple OS in Rust, at http://os.phil-opp.com/

And as always Wikipedia walks and Reddit meanders fill in the gaps lol.

u/totemcatcher · 18 pointsr/linux
  • CODE: The Hidden Language of Computer Hardware and Software by Charles Petzold

    A ground up approach to understanding digital processing and transmission in a broad sense. I only recommend this book if you are looking for an intrinsic understanding of computing rather than merely a handle on using a particular programming language or operating system. By the end of the book you should have a handle on actually building your own computer, however it's actually an excellent "first book" for anyone interested in computing.
u/mohabaks · 17 pointsr/unixporn

Thanks ;). Not so skilled on that and my advice might be misleading; though I got a background in cs:This would be my suggestion for someone beginning.

u/Afro-Ninja · 17 pointsr/explainlikeimfive

It doesn't "know." Any logical operation (especially basic math calculations) can be broken down into binary digits, and a single binary digit (bit) can be represented as the presence or absence of electricity.

It's almost how if you were to build a sequence of pipes and valves, and pour water into the opening, the water would end up flowing through the same way each time. The pipes don't "know" where the water goes, it just happens.

A computer does the same thing but on a tiny scale with tiny electric pulses travelling through sequences of thousands of gates all connected to each other. Imagine that the buttons you hit on a calculator slightly change how the valves open and close. (or which opening to dump the water into) You hit enter, the water is poured, and the result shows on screen.

fair warning: I am not a hardware guy so this explanation is probably not 100% accurate.
If you have more interest in the subject I HIGHLY recommend reading this book: http://www.amazon.com/Code-Language-Computer-Hardware-Software/dp/0735611319

u/Spasnof · 17 pointsr/learnprogramming

Awesome book Code , really helps you understand from a bottom up perspective. Super approachable without a CS background and does not need a computer in front of you to appreciate. Highly recommended.

u/Rinnve · 16 pointsr/learnpython

You should read this book. The best explanation of how computers work I know of.

u/goodbyegalaxy · 14 pointsr/hardware

Code: The Hidden Language of Computer Hardware and Software

As the title implies, it's not just about hardware, it goes into how software is written for hardware as well. But it's a really cool book, takes you from the very basics of circuitry (a battery, a light bulb, and wire) in the first chapter, and building only on things taught in the book gets you to a fully working computer.

u/expedient · 13 pointsr/programming

Not a video, but Code: The Hidden Language of Computers by Charles Petzold is really great.

u/MirrorLake · 12 pointsr/learnprogramming

"Code" by Charles Petzold, if anyone wants the link.

u/entropicone · 11 pointsr/compsci

Riding on your top post coattails...

The Elements of Computing Systems and Code by Charles Petzold are exactly what you want.

Code goes through number systems, basic information theory, circuits (from gates on up), memory, machine code and programming languages, all with accessible diagrams and explanations.

TECS has you build an actual working computer from the ground up.

u/mooshoes · 11 pointsr/IWantToLearn

I'd recommend you start with the book "Code", which handles just this progression: http://www.amazon.com/Code-Language-Computer-Hardware-Software/dp/0735611319

From there, investigate operating system development. The Minix OS is very well documented.

u/toastisme · 11 pointsr/IWantToLearn

A similar question was posted on Quora not long ago, and the main recommendation was Code by Charles Petzold:


Having subsequently read the book I think it's a fantastic introduction, and goes through everything from the importance of binary code and applying Boolean logic to circuits, to the details of the inner workings of the first microprocessors, and all in an interesting and engaging way.

u/remembertosmilebot · 10 pointsr/learnprogramming

Did you know Amazon will donate a portion of every purchase if you shop by going to smile.amazon.com instead? Over $50,000,000 has been raised for charity - all you need to do is change the URL!

Here are your smile-ified links:



^^i'm ^^a ^^friendly bot

u/Grazfather · 10 pointsr/engineering

Anyone who likes this stuff should really read code. The author goes from tin-can phones to building a computer, in language anyone could follow.

u/Monguce · 10 pointsr/askscience

This is a really great book about the topic. It's much simpler than you might think but kind of tricky to explain unless you know a bit of back ground. The book costs less than a tenner and will give you a while different appreciation of how computers work. Well worth a read even if it starts out seeing rather simple.


u/akmark · 9 pointsr/programming

I'll recommend Code, even though it isn't specifically theoretical. However, it does go over how code (semaphore, morse code) evolved over time. From someone who does program this is about a 'human' a book as they come which could fit exactly what you are looking for.

u/McFuckyeah · 9 pointsr/askscience

This is the book you want to read. It walks you through every bit of how a CPU works, in an incredibly approachable way. (If you can understand a light switch, you can understand this book.)

u/edwilli222 · 9 pointsr/AskProgramming

This is kind of a weird one but I’d suggest Code. Very non-technical, no programming, but cool history and fundamentals.
Code: The Hidden Language of Computer Hardware and Software - Code: The Hidden Language of Computer Hardware and Software https://www.amazon.com/dp/0735611319/ref=cm_sw_r_cp_api_i_IiH2DbWSNWHMW

u/weasler · 9 pointsr/compsci

Code is an absolute classic.

u/mcscottmc · 9 pointsr/compsci


This book explains how computers work from first principles (electricity and switches on up). Very easy to read. I am surprised it hasn’t been mentioned yet.

u/dhobsd · 9 pointsr/askscience

Hooray, a question I can answer!

One of the problems here is that the question is worded backwards. Binary doesn't combine to give us programming languages. So the answer to your question is somewhat to the contrary: programming languages were invented to ease the tedium of interfacing using binary codes. (Though it was still arguably tedious to work on e.g. punched cards.) Early interfaces to programming machines in binary took the form of "front panels" with switches, where a user would program one or several instructions at a time (depending on the complexity of the machine and the front panel interface), using the switches to signify the actual binary representation for the processor functions they desired to write.

Understanding how this works requires a deeper understanding of processors and computer design. I will only give a very high level overview of this (and others have discussed it briefly), but you can find a much more layperson accessible explanation in the wonderful book Code: The Hidden Language of Hardware and Software. This book explains Boolean logic, logic gates, arithmetic logic units (ALUs) and more, in a very accessible way.

Basically, logic gates can be combined in a number of ways to create different "components" of a computer, but in the field of programming languages, we're really talking about the CPU, which allows us to run code to interface with the other components in the system. Each implementation of a processor has a different set of instructions, known as its machine code. This code, at its most basic level, is a series of "on" or "off" electrical events (in reality, it is not "on" and "off" but high and low voltages). Thus, different combinations of voltages instruct a CPU to do different things, depending on its implementation. This is why some of the earliest computers had switch-interfaces on the front panel: you were directly controlling the flow of electricity into memory, and then telling the processor to start executing those codes by "reading" from the memory.

It's not hard to see how programming like this would be tedious. One could easily write a book to configure a machine to solve a simple problem, and someone reading that book could easily input the code improperly.

So eventually as interfacing with the machine became easier, we got other ways of programming them. What is commonly referred to as "assembly language" or "assembler" is a processor-specific language that contains mnemonics for every binary sequence the processor can execute. In an assembly language, there is a 1:1 correlation between what is coded, and what the processor actually executes. This was far easier than programming with flip-switches (or even by writing the binary code by hand), because it is much easier for a human to remember mnemonics and word-like constructs than it is to associate numbers with these concepts.

Still, programming in assembly languages can be difficult. You have to know a lot about the processor. You need to know what side-effects a particular instruction has. You don't have easy access to constructs like loops. You can't easily work with complex datatypes that are simply explained in other languages -- you are working directly with the processor and the attached memory. So other languages have been invented to make this easier. One of the most famous of these languages, a language called "C," presents a very small core language -- so it is relatively easy to learn -- but allows you to express concepts that are quite tedious to express in assembler. As time has gone on, computers have obviously become much faster, and we've created and embraced many languages that further and further abstract any knowledge about the hardware they are running on. Indeed, many modern languages are not compiled to machine code, but instead are interpreted by a compiled binary.

The trend here tends to be making it easier for people to come into the field and get things done fast. Early programming was hard, tedious. Programming today can be very simple, fun and rewarding. But these languages didn't spring out of binary code: they were developed specifically to avoid it.

TL;DR: People keep inventing programming languages because they think programming certain things in other ones is too hard.

u/beaverjacket · 9 pointsr/AskReddit

This book is a very good explanation of how computers work. It starts with explaining electromechanical switches, and how you can turn a couple switches into a logic gate. Then, it shows how you can put logic gates together to do arithmetic. It goes on like that until you reach programmable computers.

u/IamAlbertHofmann · 9 pointsr/learnprogramming

here you go

It's the 'hidden language', not 'secret'. Sorry about that.

u/lightforce3 · 8 pointsr/tech

What you seem to be asking is "how do computers work?" At any rate, the interaction of hardware and software is fundamental to any computer system, whether it's your fitness band or your cell phone or a supercomputer or the computer in your car engine or The Next Big Thing.

How that works is a really, really big question. Rather than attempt to answer it, I'll suggest you check out the book Code by Charles Petzold. It explains how computer hardware and software work, starting with basic electrical circuits and building up layer by layer until you're running an operating system and application software. That might seem like a lot to cover, but Code does it simply and cleanly, in a way that just about anybody can digest and understand.

u/codeificus · 8 pointsr/programming

The 86 stands for the instruction set for the cpu. Basically, every chip designed in the world accepts input and output, but in different ways (different numbers of connections, ordering). All of those chips have more or less backwards compatibility with regard to that, so it makes it easier for others to develop around that.

So there is a meaning conveyed, though it probably isn't important to you if you aren't developing hardware or writing assembly.

I strongly recommend Code by Charles Petzold which explains the origins of these chipsets. Basically Intel put out the 8080 in 1974 which was an 8-bit processor, then the 8086 in 1978 was a 16-bit processor, so they just ran with the number scheme (6 for 16 bit). The "80" from 8080 probably came from IBM punchcards which were used for the US census (since the 1920s!), which is actually how IBM started, basically as the child of Herman Hollerith who built automated tabulating machines in the late 19th century. Also this is to blame for the 80-character terminal convention. Blame IBM.

u/fiskfisk · 8 pointsr/compsci

Code: The Hidden Language of Computer Hardware and Software from Charles Petzold does just that, starting from the simplest form and going through all the different steps we took to get to where we are today. Well worth a read!

u/prego_no_pao · 8 pointsr/portugal

acabei de ler o Code (1999). É uma boa introdução ao funcionamento de um computador baseada na sua evolução na história.

u/MrPhantomZz · 8 pointsr/6thForm

Could read a book based on your interests in computer science, e.g. AI, Machine Learning, data science etc.

A good book that I recently picked up was
[Code: The Hidden Language of Computer Hardware and Software by Charles Petzold] (https://www.amazon.co.uk/dp/0735611319/ref=cm_sw_r_cp_api_qB4TBbG90ANHN)

u/Daganar · 8 pointsr/programming

For anyone interested in this kinda stuff I would really recommend "Code: The hidden language of computer hardware and software"

u/azimuth · 8 pointsr/compsci

Also Code: The Hidden Language of Computer Hardware and Software. It literally starts out with telegraphs, and shows how, if you are sufficiently crazy, they can be assembled into a working computer. Then it shows how you can write software for your telegraph-relay-cpu. A great read.

u/Zaemz · 8 pointsr/programming

This is awesome! I've been slowly getting more and more interested in hardware, and this is something I would absolutely love to do. I just don't know where to start.

I've been reading a couple of books about learning lower level stuff, and planned on working my way up.

I'd really like to get out of webdev and into low-level programming, or even hardware design and implementation. There's sooooo goddamn much to learn, that I doubt I'll be ready without getting a BS in Comp. Engineering, and maybe a master's as well.

(I'm absolutely a beginner, and if anyone is interested in the books I've been reading, these are they:

  1. Code by Charles Petzold

  2. The The Elements of Computing Systems: Building a Modern Computer from First Principles by Noam Nisan and Shimon Schocken

  3. Computers as Components by Marilyn Wolf)
u/deiphiz · 7 pointsr/learnprogramming

Okay, I'm gonna plug this in here. I hope this doesn't get buried because when I saw someone asking about low level stuff here, I couldn't help but make this recommendation.

For anyone that wants to learn more about low level computer stuff such as assembly code should read the book Code: The Hidden Language of Computer Hardware and Software by Charles Petzold. I've been reading it recently and I'm really glad I picked it up. It really delves into how a computer really works, like how languages relate to the circuits on a board.

So yeah, /u/DEVi4TION, I recommend picking this up if you wanna know about more stuff like this. Then maybe try your hand at actual 6502 programming later :P

u/[deleted] · 7 pointsr/learnprogramming

I'm 43 and became specialized in a narrow range of products. on the one hand, if you need someone who knows about this stuff, I'm one of the most knowledgeable you can find.. on the other, I've become so specialized it's starting to hurt me career/ financially.

a friend of mine just got another startup going. he's a backend php developer and they needed more of a systems/ sysadmin person in a part time role to setup all the tools and the production environment. he asked if I'd be into it and I said yes - I was eager to learn new skills and aware I'd be blowing away cobwebs and kick starting brain cells etc. but dived in.

I've learned more in the last few months than I've learned in the last 5 years and it's been awesome. I read and really enjoyed [Code] (http://www.amazon.com/Code-Language-Computer-Hardware-Software/dp/0735611319/ref=sr_1_1?s=books&ie=UTF8&qid=1334526682&sr=1-1), I'm almost finished working through [learning the bash shell] (http://www.amazon.com/Learning-bash-Shell-2nd-Edition/dp/1565923472) and plan on working through [C programming] (http://www.amazon.com/C-Programming-Language-2nd-Edition/dp/0131103628/ref=sr_1_1?s=books&ie=UTF8&qid=1334526363&sr=1-1) after that.

one thing, I used to be a Java programmer a decade ago. I read computer articles out of curiosity and will buy the occasional computer book for fun.

backing up - I've realized in the last few years that for me one very important skill is the skill of learning. getting your brain back into a state where it absorbs new information easily and likes it can be an uphill climb once you start back after a break of a decade or more.. but I'm resigned to always working on new stuff, deepening my technical knowledge, studying music, I want to do woodwork and organic gardening, learn piano, etc. after a while you start seeing deeper connections between areas of specialization - and that's pretty cool :)

u/unknowngp · 7 pointsr/AskComputerScience

>I want to be able to understand how computers work

Code: The Hidden Language of Computer Hardware and Software

I was on the search for the same as you a couple of weeks ago and people recommended the book above. I just recently started reading it but hopefully someone who has read it can chime in with their opinion.

u/SidewaysGate · 7 pointsr/compsci

When I was a young teenager I read (most of) a book called Code.

This was absolutely fantastic. It didn't just talk about programming or about software, it explained the concept of a code and the work that we do from the ground up. It literally started from light bulbs and switches and went to microprocessors and programming languages. This is the book that helped me bridge the software-hardware cognitive gap. Eventually it got to be too much for me, but in my defense I was 12-13 at the time. Even so, the parts that I did get through stuck with me.

I'm going to go back and reread it.

The book isn't going to cover design patterns or microservices, but IMO it's best thing to give computer scientists context on what we're doing here from an engineering perspective (with sipser as the book from the mathematical perspective)

u/InvalidGuest · 7 pointsr/computerscience

I'd recommend this one: https://www.amazon.com/Code-Language-Computer-Hardware-Software/dp/0735611319

It's very enjoyable to read and definitely increases one's understanding of how computer conceptually function. Petzold also makes it very easy to understand what he is saying in his explanations.

u/gineton2 · 6 pointsr/ComputerEngineering

For a gentle introduction, CODE: The Hidden Language of Computer Hardware and Software is a really pleasant read. It works its way up gradually, so maybe not the best fit for a physics student or someone who already understands the fundamentals. For someone new to the subject it's a great fit, however. Otherwise I see Patterson and Hennessy recommended.

u/com2kid · 6 pointsr/learnprogramming

Read Code by Petzold

You'll have a far greater understanding of how things work at a basic level than everyone else.

u/boojit · 6 pointsr/explainlikeimfive

Related, this is a very good book about computing that happens to cover the history of the braille system in some detail. If you click on the "look inside" preview bit, and go to Chapter 3, most of the information relevant to your question is covered in these preview pages.

u/Rikkety · 6 pointsr/AskComputerScience

Check out The Annotated Turing by Charles Petzold. It's Turing's paper on the Entscheidungsproblem which introduces Turing Machines, annotated with a lot of background information and some stuff about Turing's career. Very interesting stuff.

I can also recommend Code, by the same author which describes how a computer works from basic principles. It's doesn't have a lot of material on Turing, but it's certainly an interesting read for anyone interested in Comp Sci.

u/armchair_viking · 6 pointsr/smashbros

"Code" by Charles Petzold is a great book that does that. Starts with a simple flashlight switch, and builds on that example until you have a working processor.

Code: The Hidden Language of Computer Hardware and Software https://www.amazon.com/dp/0735611319/ref=cm_sw_r_cp_awd_FeDzwbRQ2ZDDP

u/yoodenvranx · 6 pointsr/de

Falls du wissen willst wie eine CPU funktioniert und was Assembler ist und vor allem wo das alles her kommt und warum es funktioniert, dann kann ichdir Charles Petzold - Code: The Hidden Language empfehlen. Er fängt mit einfachen Morsesignalen an, leitet dann Logikgatter her und am Ende des Buches hast eine eine funktionerende CPU.

u/novembersierra · 6 pointsr/cscareerquestions

Code: The Hidden Language of Computer Hardware and Software

This book starts with flashlights and Morse code and Braille, goes to telegraphs and electricity, works it way up to Boolean logic gate circuits (still using the components from telegraphs!) and then goes all the way to programming languages and computer graphics.

u/Omnipotent0 · 6 pointsr/educationalgifs

This is the best video on the subject I've ever seen. http://youtu.be/VBDoT8o4q00
Of you want to learn more I very very very strongly recommend this book. http://www.amazon.com/Code-Language-Computer-Hardware-Software/dp/0735611319

u/tech-ninja · 6 pointsr/ProgrammerHumor

Depends what you want to learn. Some of my favorites are

  • Code by Charles Petzold if you want to know how your computer works under the hood.

  • Peopleware if you want to learn how to manage knowledge workers.

  • Clean Code by Uncle Bob if you want to learn about good practices and program structure. Impressive content, covers much more than I expected.

  • Don't Make Me Think if you want to learn about usability.

  • Algorithms by Robert Sedgewick if you want to learn about DS & algorithms.

  • The Art of UNIX Programming by Eric S. Raymond if you want to learn about the unix philosophy. Lots of hidden gems in there. Have you ever heard: write programs that do one thing and do it well; don't tune for speed until you've measured; imagine all this knowledge distilled to you in one book.

    This a good list to get you started :) most of my favorite books are not language specific.
u/developero · 6 pointsr/learnprogramming

Code is a great book that helped me understand programming on an abstract level

u/jadae · 6 pointsr/compsci

I'd also recommend Code: The Hidden Language of Computer Hardware and Software by Charles Petzold. I recently finished reading this book after having it recommended by a post on Reddit a year or two ago. It starts off with a lot of basic information, covering Morse code and braille, and moves along in the development of code and hardware up until you actually create a functioning computer in the book. The later chapters were harder to get interested in, but the first 3/4 was very excellent and actually covered more than my computer architecture class in undergrad.

u/gingenhagen · 6 pointsr/programming

Try this book: Code, which is a bottom-up approach. Depending on how rigorous your college CS curriculum was, it'll be either a good review of your college classes or mind-blowing, but I think that the approach that the book takes is really great.

u/bhrgunatha · 6 pointsr/AskComputerScience

A famous artefact of early computing is the boot-strapping process where the goal is a self-hosting compiler - which lets you write the compiler for a new language in the new langauge. However to get to that point a lot of earlier innovations were needed.

Take all of this with a pinch of salt - the order and the details may be wildly inaccurate, but the overall ideas viewed from afar give an idea of how we got to the point that we can choose our own language to write a compiler for another language..

To start with, raw binary values had to be set in order to define and run a program. Those raw binary values represent instructions that tell the hardwaer what to do and data that the program needed to operate. This is now usually referred to as machine code.

At first you would enter values into computer storage using switches.

Since that's so tedious and error prone, puched cards were developed along with the necessary hardware to read them so you could represent lots of values that could be read toagether. They had their own problems but it was a step forward from switches.

After some time symbolic instructions were defined as a shortcut for several machine code instructions - now usually called assembly language. For example put the value 8 and store it into a memory location 58 could be written as ST 8, [58]. This might take 3 machine code instructions, one represents the store instruction, one the value 8 and one the location 58. Since now assembly language could be written down it was easier to understand what the computer is being instructed to do. Naturally someone had the bright idea to make that automatic so that for example you could write down the instructions by hand, then create punched cards representing those instructions, convert them to machines code and then run the program. The conversion from the symbolic instructions to machines code was handled by a program called an assembler - people still write programs in assembly code and use assemblers today.

The next logical step is to make the symbolic instructions more useful and less aimed at the mundane, physical processes that tells the computer exactly how to operate and more friendly for people to represent ideas. This is really the birth of programming languages. Since programming languages allowed you to do more abstract things symbolically - like saving the current instructions location, branching off to another part of the same program to return later, the conversion to machine code became more complex.Those programs are called compilers.

Compilers allow you to write more useful programs - for example the first program that allowed you to connected a keyboard that lets you enter numbers and characters, one connected to a device to print numbers and characters, then later to display them on another device like a screen. From there you are quite free to write other programs. More languages and their compilers developed that were more suitable to represent more abstract ideas like variables, procedure and functions.

During the whole process both hardware - the physical elctronic machines and devices and software, the instructions to get the machines to do useful work - were both developed and that process still continues.

There's a wonderful book called Code by Charles Petzold that details all of these developments, but actually researched and accurate.

u/charlesbukowksi · 5 pointsr/learnprogramming

I liked it. I would also recommend reading CODE: http://www.amazon.com/exec/obidos/ASIN/0735611319

Between MIT's Python course, CS50 and that you'll have an excellent grounding in CS

u/tolos · 5 pointsr/IWantToLearn

First, there are two requests: one from your title, and one from your description. The request from your title is a bit easier, though I'm afraid I won't be able to answer it satisfactorily. As far a real world example, that may be a bit harder because modern CPUs are pretty complicated. (When I was learning computer architecture at university, we never really discussed how an intel or AMD cpu worked -- just learned about the MSP430 and a couple of hypothetical CPUs. If you really want to see how a real CPU works, I'd suggest looking into a microprocessor to get started.)

A quick and dirty summary for MIPS CPU datapath Computer Organization and Design 4th ed page 315:

  1. The Program Counter (PC) loads the next instruction
  2. PC is incremented
  3. Instruction is parsed and the correct registers are loaded
  4. Registers are fed into ALU if necessary or
  5. Registers are passed into data memory (for read/write)
  6. Results from ALU/data memory are loaded back into registers
  7. next instruction

    Note that the MIPS example doesn't use pipe-lining, which generally makes things a bit faster. And there's only one code path executing. And there's no look ahead. Which isn't the case for modern CPUs.

    For further reading I highly recommend Code by Charles Petzold. I think it helped prepare me before going to college (for computer engineering).

    For video learning, a quick google search shows some videos that would probably be helpful (I haven't watched any of these).

    Sorry for the rushed response, I can expand on this more later if there's interest.
u/AlSweigart · 5 pointsr/learnprogramming

Patternson's Computer Architecture: A Quantitative Approach was a pretty good book. I remember mostly teaching myself from that textbook since the prof I had wasn't a great lecturer.

You can probably find a PDF of it online easily enough.

EDIT: If you want a reasonable sized book instead of a big textbook, I'd recommend reading Petzold's Code, it's a fun read.

u/el3r9 · 5 pointsr/explainlikeimfive

I would this in a top level comment but it’s against the rules of the sub to do so, but OP can check out this book, called “Code” is a great, truly ELI5 intro to computers. If someone is interested they can check it out.

u/ewiethoff · 5 pointsr/books

Petzold's Code: The Hidden Language of Computer Hardware and Software. Fascinating book about logic gates, character encoding, and so on.

u/Not0K · 5 pointsr/learnpython

If you would like a really in-depth explanation, check out Code.

u/cyberbemon · 5 pointsr/hardware

This is a great start, as it explains and goes into great detail regarding cpu/gpu architectures: Computer Architecture, Fifth Edition: A Quantitative Approach

Another one that goes to low level is: Code: The Hidden Language of Computer Hardware and Software

>"He starts with basic principles of language and logic and then demonstrates how they can be embodied by electrical circuits, and these principles give him an opening to describe in principle how computers work mechanically without requiring very much technical knowledge"


u/serimachi · 5 pointsr/computerscience

It's so great you're being so proactive with your learning! It will definitely pay off for you.

I like other's suggestion of Clean Code, but I fear as a first year that it may have mostly flew over my head--not that it would at all hurt to read. For a first year student specifically, I'd recommend either of two books.

Structure & Interpretation of Computer Programs, also known as The Wizard Book and free on the link I just sent you, is a famous textbook formerly used in MIT's Intro to Computer Science course. However, it's conceptually useful to programmers on any level. If you really, seriously read it and do the exercises, it's gonna give you a rock-solid foundation and shoot you ahead of your peers.

It uses Scheme, a quote-on-quote "useless" programming language for any real-world purpose. That's arguable, but the important thing about the book is that it's really edifying for a programmer. The skill it helps you develop is not the kind that will directly show on your resume, it's nothing you can point to, but it's the kind of skill that will show in your code and how you think and approach problems in general. That said, the book has exercises and the MIT site I linked you to has labs that you could potentially show off on your github.

Code: The Hidden Language of Hardware and Software is much more approachable, is not marketed specifically for programmers, and does not contain any exercises. Read it, though, and you'll find you have a huge boost in understanding the low-level computing classes that your classmates will struggle with. What is basically does is show the reader how one can build a computer, step by step, from the very basics of logic and switches. It's readable and written for a casual audience, so you may find it easier to motivate yourself to finish it.

SICP and Code, despite both being extremely popular, can be a bit difficult conceptually. If you don't fully understand something, try reading it again, and if you still don't understand it, it's fine. Everyone experiences that sometimes. It's okay to move forward as long as you feel like you mostly get the topic. Don't let the perfect be the enemy of the good.

Best of luck to you, and be excited! It's thrilling stuff.

u/intertroll · 5 pointsr/compsci

If you don’t want to real an actual textbook, this one will do the job (without skimping on details) and is more laypeople friendly:

Just as an aside, I had a non techy friend who had a similar sense of mystification as OP’s but really wanted to understand them better, so I pointed him at this book. The next time I saw him we had a great conversation about logic gates and data representation. So it works! It was actually almost a cathartic experience, taking a person who doesn’t get to someone who does, since as a developer you often have to deal with users who don’t know and don’t care.

u/addcn · 5 pointsr/explainlikeimfive

All of these answers answer your question on a general level, but I would really recommend reading Code: The Hidden Language of Computer Hardware and Software by Charles Petzold for a deeper understanding. He talks about how the first computers were built and how they were programmed, and he does it in a way that's understandable even to a person that doesn't know a thing about computers.

u/umib0zu · 5 pointsr/AskComputerScience

You should probably start with this book called Code and work your way up from there. It's actually pretty hard to find a single book that describes the history and the concepts, and even if you did find one, most of the topics would be hard to grasp on a first read. Code is usually a great starter book and might give you a few pieces of what your looking for. After you finish it, maybe check out a software book and dive into some of the concepts.

u/CharlieBlix · 5 pointsr/askscience

You should give this book a read Code: The hidden Language Of Computer Hardware and Software By Charles Petzold

It does a great job of explaining how it all works. Loved it and I don't know how to program (Yet).

u/DrAmbulanceDriver · 5 pointsr/learnprogramming

I'm assuming you just want to learn the basic information about how computers work and the principles behind programming them, right?

In that case, I'd recommend Code by Charles Petzold

Are you looking to actually learn how to program and write code in a specific language? If so, then I'd recommend Automate the Boring Stuff with Python by Al Sweigart. It covers the basic principles of writing functions and how computer logic works, and you'll actually be able to apply it to some practical uses. And since its Python, it'll run on a lot of different platforms. If you like it, you may want to get into working with the Raspberry Pi. Javascript is another good language to start with, but as a book, I really like this one.

If you already know a bit about programming, and just want a general reference book, then Computer Science Illuminated by Dale and Lewis is pretty good.

u/UncleMeat · 5 pointsr/compsci

I cannot recommend the book Code by Charles Petzold highly enough. This is the book that solidified my love of computer science and hits most of the major topics in CS in an easy to understand and thoroughly entertaining way. By the end of the book you have walked through the fundamentals of how to build and program a rudimentary computer and had fun why doing it!


u/atommclain · 5 pointsr/apple

For the 'computers in general' side of things: Code: The Hidden Language of Computer Hardware and Software

u/jonride · 5 pointsr/askscience

If you're interested to learn the basic physicality of a computer, I'd recommend checking out a book by Charles Petzold: "Code: The Hidden Language of Computer Hardware and Software."


It's easy to read and provides a lot of insight into how circuitry embodies and propagates information!

u/mattandersen · 4 pointsr/compsci

You may be beyond this book, or it may not be full of the harder science of logic design but every CE or CS student should have a copy of CODE from Charles Petzold. It will probably fill in a lot of gaps of a formal classroom discussion of processor architecture, and it provides a great set of tools to explain the concepts to others. Which for me has always been the benchmark of understanding. http://www.amazon.com/Code-Language-Computer-Hardware-Software/dp/0735611319

u/ismtrn · 4 pointsr/compsci

This book(Code: This hidden language of computer hardware and software): http://www.amazon.com/Code-Language-Computer-Hardware-Software/dp/0735611319/ref=sr_1_1?ie=UTF8&qid=1333490779&sr=8-1

It explains it all! The title makes it sound like it is about code, but it is really about how a computer works(code is of course a part of it). It is very easy to read and does not really require any prior knowledge, it actually starts by explaining how a flashlight works and builds on that.

I simply can't describe how awesome it is, you should really read it!

u/neop · 4 pointsr/compsci

I'm also a math major who turned into CS. There are already a lot of good recommendations here so I won't add much, but I suggest reading Code: The Hidden Language of Computer Hardware and Software by Charles Petzold.

It's not very technical and it's not in-depth, but I think it's an amazing book. You probably won't learn anything you're actually going to use by reading it, but I think this book has a unique ability for expressing the underlying facts that make us all find computer science so fascinating. It's a very fun read and it will give you a very broad overview of how computers work and how software gets compiled and ultimately ends up moving electrons around to make the magic happen.

u/Bizkitgto · 4 pointsr/learnprogramming

The book you are looking for is called Code: The Hidden Language of Computer Hardware and Software by Charles Petzold!

u/MrAckerman · 4 pointsr/AskProgramming

I really enjoyed Code.

I feel it's a really accessible summary of what is going on under the hood of a computer.

u/-___I---I-___ · 4 pointsr/learnprogramming
  1. topic name: Fundementals, discrete math, algorithms, a good book to start with, there are tons of free courses and lectures on the internet, but you will have to type in the specific search terms

  2. idk

  3. idk
u/autophage · 4 pointsr/IWantToLearn

Lots of people are recommending ways to learn a language, and I just want to pop in to say: most popular languages are much more alike than they are different. Learn any one of them for a few months (until you're no longer looking up references for how to write a for loop or getting confused by the language's comparison operators), then try your hand at a different language.

If you find something hard to grasp in one language, it's probably about equally hard to grasp in another language - so don't just think "Hmm, well, maybe this is easier in other-language" and switch over to that one instead. (There are a few exceptions - for example, you don't have to worry about memory management in Java the same way that you do in C. You can still get memory leaks in Java, but the fact that you've got garbage collection makes memory management on the whole far simpler.)

In terms of getting into hacking - the first step, hands down, is to read this book. It will teach you the really really basic stuff, on a far deeper level than most laymen ever think about, in a very gentle and even fun way. After that, start getting your hands on networking texts, security texts, and just plain writing a lot of code. Get the source to some popular open source projects (Apache, for example) and run it in a debugger, watching how the values change and looking for unexpected things.

u/p7r · 4 pointsr/NoStupidQuestions

I've taught a lot of people how computers work, or more precisely how to program them. I am sure you can learn too.

First, let's make it fun.

There is a lot of material for people who like the Raspberry Pi out there that is fun and simple. You don't even need to own a Raspberry Pi to understand what they're talking about.

It's fun and simple because it's designed for youngsters who find long/complex books a bit too boring. I think you might enjoy it, because you've said you've found the books you've tried too boring.

Here is a load of magazines about the Pi - on each issue you can click on "Get Issue" and then under the cover "download the PDF" and read it and see if you enjoy that.

Next, have a play with Scratch. It's designed for kids but the exact same concepts are in professional programming languages.

The reason I recommend it is not because I think you are a child, but because it's a lot of fun and makes a lot of the dull and boring bits of programming go away so you can focus on the fun bits.

You have to remember all the things going on inside a computer are basically the things going on in there - just a lot more complex.

If you ever want to learn a programming language that professional developers use, I think you'll like Ruby.

It's very forgiving for new developers, but still lets you do what we would call "production grade" code. It's what I work in most days.

Also, why's poignant guide is quite funny, but you might find it a bit weird and confusing - I know I did the first time I read it. :-)

I also recommend this book to you: Code by Charles Petzoid. The first few chapters don't seem like they're about computers, because they talk about flags and electrical circuits - that's because you need to understand those things first.

If you can read and understand the whole thing you will know more about how computers work than half of the professional software engineers out there. And they're normally quite a clever bunch.

If you find it too difficult, slow down and think. Each paragraph has something in it worth thinking about and letting it mull over in your mind.

IQ is not a measure of how much you can learn, but perhaps how quickly it can see patterns and understand things.

You having a lower IQ than somebody else does not mean you can't see those patterns or understand things, it just means it might take you a little more thinking to get there. I'm sure you will.

If you ever have any questions about computers, I'd love to try and help answer them - feel free to ask me.

u/nattoninja · 4 pointsr/learnprogramming

Code is a really good book that goes into how it all works, from the basics of binary and electrical signals and builds from there. The text is very straightforward and there are lots of good illustrations.

u/dr_dalek · 4 pointsr/explainlikeimfive

Take a look at this book: Code The book starts off with a switch and builds a whole computer from there.

u/mwassler · 4 pointsr/webdev

Everyone seems to have good things to say about khan academy's comp sci courses.

A few good lower level books in my opinion are this one which is maybe less technical but a good lower foundation and then From Mathematics to Generic Programming by Alexander Stepanov.

I think your probably just experiencing outliers in your job search. If you keep at it your luck will probably turn around.

u/rohit275 · 4 pointsr/hardware

I haven't read it, but it looks pretty good. I can personally vouch for this book however:


It's truly amazing. I'm currently an EE PhD student but I had a pretty limited background in digital hardware and computer architecture, and I read most of this book just out of interest a little while ago and frankly learned quite a bit. It's written at a very readable level for anyone with almost no prior knowledge, yet gets technical when it needs to. It's very thorough, but approaches the topics at a wonderful and easy pace with very clear explanations. The author even says you can skip some of the more technical details if they're not of interest to you, and you'll still end up learning quite a lot. The book you posted looks pretty similar, so I'd say it's worth a shot.

u/luciano-rg · 3 pointsr/IWantToLearn

For an introduction on how computers work the book "Code" by Charles Petzold is very informative. It starts from rudimentary circuits of blinking lights to the complexity of modern computers. I found this book to close the gap between the concepts of software and hardware.
Amazon link: https://amzn.com/0735611319

u/Xavierxf · 3 pointsr/explainlikeimfive

Code is what helped me wrap my head around this.

You might have to read it a couple times to understand it, but it's really good.

u/Mazer_Rac · 3 pointsr/compsci

Code by Charles Petzold. It starts with Morse code and works up to a fully functional computer processor. All while written in a prose style. Very nontechnical and a great read.


u/randrews · 3 pointsr/csbooks

Code, by Charles Petzold is pretty much exactly what you want.

u/Packet_Ranger · 3 pointsr/askscience

You'd be well served by reading a book called "CODE - the Hidden Language of Computer Hardware". It starts all the way from the simplest electronic circuits, explains how a powered signal amplifier can be turned into an electronic switch (e.g. telegraph relays, and later, transistors), how those switches can be chained together to form logic gates per /u/Corpsiez, how those logic gates can be chained together to form arithmetic units and memory, and finally how to make a simple 8080 CPU and implement ASCII inputs and outputs.

u/anachronic · 3 pointsr/AskNetsec

> I have zero Linux experience. How should I correct this deficiency?

First, install a VM (Oracle OpenBox is free) and download a linux ISO and boot from it. Debian and Ubuntu are two of my favorites. Both are totally free (as are most linux distros). Once installed, start reading some beginner linux tutorials online (or get "Linux In A Nutshell" by O'Reilly).

Just fuck around with it... if you screw something up, blow it away and reinstall (or restore from a previous image)

> Is it necessary? Should I start trying to make Linux my primary OS instead of using windows, or should that come later?

It's not necessary, but will help you learn faster. A lot of security infrastructure runs on Linux and UNIX flavors. It's important to have at least a basic understanding of how a Linux POSIX system works.

> If you can, what are some good books to try to find used or on PDF to learn about cissp and cisa? Should I be going after both? Which should I seek first?

You don't need to worry about taking & passing them until you've been working in the field for at least 3-5 years, but if you can get some used review materials second-hand, it'll give you a rough idea what's out there in the security landscape and what a security professional is expected to know (generally)

CISSP - is more detailed and broader and is good if you're doing security work day-to-day (this is probably what you want)

CISA - is focused on auditing and IT governance and is good if you're an IT Auditor or working in compliance or something (probably not where you're headed)

> What are good books I can use to learn about networking? If you noticed I ask for books a lot its because the only internet I have is when I connect my android to my laptop by pdanet, and service is sketchy at my apartment.

O'Reilly is a reliable publisher of quality tech books. An amazon search for "O'Reilly networking" pull up a bunch. Also, their "in a nutshell" series of books are great reference books for Windows, Linux, Networking, etc... You can probably find older/used copies online for a decent price (check ebay and half.com too)

> How would you recommend learning about encryption? I just subscribed to /r/crypto so I can lurk there. Again, can you point me at some books?

Try "The Code Book" for a very accessible intro to crypto from ancient times thru today

Also, for basics of computer architecture, read "CODE", which is absolutely excellent and shows how computers work from the ground up in VERY accessible writing.

u/ummonommu · 3 pointsr/technology

Code: The Hidden Language of Computer Hardware and Software

A good read if you want history and understanding binary code, among others. Not exactly about politics, but more on the easy-to-read technical side.

u/wgren · 3 pointsr/dcpu_16_programming

Code: The Hidden Language of Computer Hardware and Software,The Elements of Computing Systems and Inside the Machine were recommended on Hacker News.

I have the last one, I will re-read it over Easter holidays...

u/herky_the_jet · 3 pointsr/math

You might enjoy the book "Code" by Charles Petzold (http://www.amazon.com/Code-Language-Computer-Hardware-Software/dp/0735611319), in combination with the "nand 2 tetris" course developed by MIT (http://www.nand2tetris.org/)

u/chunyukuo · 3 pointsr/TranslationStudies

First of all, congrats on the promotion and the learning spirit. I wish more managers had your attitude.

I had a similar situation where I went from in-house linguist to loc manager, and I wonder if my experiences might be of use to you. Like you, I definitely did not describe myself as "into programming." I'm still not into that sort of thing. But learning as much of it as I could had a direct benefit to a lot of my daily tasks, and I would recommend at least giving the more learner-friendly tutorial sites a try.

I finished a lot of modules on codecademy.com and genuinely enjoyed them because they were not particularly difficult and also allowed me automate a lot of things and also gain a deeper understanding of how things work. I went through Learn Python the Hard Way and gained a lot from that, especially since subsequent projects included quite a lot of assets in Python. I went so far as to plow through the first half of Code: The Hidden Language of Computer Hardware and Software (the latter half too arcane for me) and found that quite useful as well, although in hindsight it was a bit overkill.

Even after my department was given an actual programmer to code up solutions for us, I at least was able to understand how a good amount of it worked. Coding aside, a localization manager is the person that the linguists and testers go to when things break, and man do they break a lot. That said, I would also recommend training of some sort in SDL and Kilgray's products if you use them. In my experience as manager, both broke often or were fussy at best.

A few years later, I haven't really read much about code, but I still try to ask developers as many questions as I can about the technical aspects of their products and find it really helpful to follow up on Stack Overflow or just Wikipedia.

Good luck with your new position!

u/katyne · 3 pointsr/learnprogramming

First of all you will never understand everything on the level that you think you want to understand it. That just doesn't happen. Even with an advanced degree, even working for the industry for 10+ years you'll end up specializing in this or that and sort of having some idea about the other things. There's just too much stuff to learn. Those black boxes people talk about - they're called "abstractions", a way to simplify complex details in order to understand a concept. And in the beginning all you'll be doing is trying to understand concepts. When you were learning to drive a car you didn't need to know the very last mechanical detail of its engine, right? You just had an abstract idea of it, you knew you had to put in fuel and turn on ignition and why you had to shift gears and stuff, and that was enough. Same here. First learn to hold the wheel and steer, then choose the field you'd like to specialize in. But it will take you a lifetime to learn everything about everything - and that's if all you'll be doing is learning, not making anything of your own.

If you're like me you still need some introduction to "why" before you start learning "how" I would recommend this book - it's very approachable and sort of encompasses the general topics without going into much detail. Other than that it's hard to say anything because we don't know what your goal is, do you want to work as a web dev, a system programmer, or make games, write for mobile maybe? front end, backend, databases? It's like saying "I want to learn how to sport", well what kind of sport. They're all very different directions of virtually unlimited depth.

u/Triapod · 3 pointsr/askscience

Consider implementing an ALU which does various things like add and subtract and bit shifts. So, you have inputs A and B from your memories and your program instructs the computer to add them. The instruction for "add" is also sent to the ALU. So how does the ALU "change" it's function to add this time and subtract the next? Look at how a multiplexer works. So for a simple implementation, your ALU can compute both A+B and A-B (in parallel using separate logic gates) and then at the end, based on the instruction, select which to output. You can also try to imagine how a multiplexer can be used to implement various boolean operations by thinking about the truth tables :).

So, if we can build the kind of ALU logic above, the key becomes addressable memories (note that addresses are themselves numbers which can be manipulated using ALU). When you compile and run a program, it is loaded into memory. The instruction and data are read and then fed into logic like above.

If you are interested and have the time, the book Code presents the material quite well and accessibly.

u/jimschubert · 3 pointsr/csharp

I recommend starting by teaching some version control basics. Focus on git and quickly cover others like TFS and subversion. You can read Pro Git for free.

If you teach a hardware/software course, CODE is an excellent book.

I also recommend C# in Depth. I would also think it'd be cool to offer points for contributing to StackOverflow or the new open source .NET projects on GitHub.

If you teach design/analysis or other classes focused on architecture, Adaptive Code via C# is pretty good. I'm only a few chapters in, but it discusses Scrum methodology, layering and tiers, as well as how to follow practices for writing great code.

I would also suggest a course on JavaScript. I have had to train too many Junior and Senior developers on how to write JavaScript. It's scary that many web developers don't even understand fundamentals.

u/SevenGlass · 3 pointsr/learnprogramming

Petzold's Code is the book you are looking for.

u/nekochanwork · 3 pointsr/learnprogramming

> I assumed calculus would somehow be the building block of where all computer systems are based.

I'm afraid I don't know what expression "building block of where all computer systems are based" means, but if it helps at all, Petzold's book The Hidden Language of Computer Hardware and Software explains how computers work from the ground up.

If you were to ask me, I would say "building blocks" of computers is Boolean algebra. Boolean algebra can defines simple logic gates, which in turn can be realized physically through circuits and relays. You can combine gates to form simple adders and multipliers; you can feed the output of a relay as an input back into itself to create a flip-flop gate, which can be used to store state; you can set up a relay to disconnect from the circuit as soon as it receives power, and reconnect when there is no power, resulting in a simple oscillator; etc. etc etc.

I'm positive a lot of smart people used calculus to shrink circuits and relays down to solid-state transistors, which in turn implement a von Neumann machine architecture that all modern software depends on. But at the root of it all, the movement of information through your computer is modeled by naive propositional logic and the rules of Boolean algebra.

u/audionautics · 3 pointsr/videos

For the latter half, "the CPU executes instructions", there's a fantastic book called Code: the hidden language of computers, that, through a series of scenarios, takes you all the way from talking with your friend through a string and two tin cans, to flash lights, to morse code, to logic gates, transistors, and finally encoding information in bits and executing it on a CPU.

It's a super fun read.

u/frostmatthew · 3 pointsr/WGU

tl;dr version:

  1. yes
  2. no, but that will be the case at any school

    Quick background to validate the above/below: I was a 30y/o banquet manager when I decided to change careers. I had no prior experience [unless you want to count a single programming class I took in high school] but did get a job in tech support at a medium size startup while I was in school and wrote a couple apps for our department. Just before I graduated I started working at a primarily Google & Mozilla funded non-profit as their sole software engineer. I moved on after a little over two years and am now a software engineer at VMware.

  3. The degree is a huge boost in getting past HR and/or having [good] recruiters work with you. You'll also learn the skills/knowledge necessary to get hired as a developer, which is obviously the more important part - but for the most part this is all stuff you can learn on your own, but you'll greatly reduce the number places that will even give you a phone screen if you don't have a degree [I'm not saying this is how it should be, but this is how it is].

  4. I typed out a lot before remembering New Relic had a great blog post a few months ago about all the stuff you don't learn in school [about software development], ha. So I would highly recommend you not only read it but also try to learn a little on your own (especially regarding SQL and version control) http://blog.newrelic.com/2014/06/03/10-secrets-learned-software-engineering-degree-probably-didnt/ Being a good developer (or good anything) takes time/experience - but knowing what they don't cover in school (and trying to learn it on your own) will help.

    Two books I'd suggest reading are The Pragmatic Programmer and Code: The Hidden Language of Computer Hardware and Software. Pragmatic Programmer is one of those classics that every good dev has read (and follows!). Code is great at giving you some insight into what's actually happening at a lower level - though it gets a bit repetitive/boring about halfway through so don't feel bad about putting it down once you reach that point.

    The best thing you can do to help you land a job is have some open-source side-projects (ideally on GitHub). Doesn't have to be anything major or unique - but it will help a lot for potential employers to see what your code looks like.

u/mivfx · 3 pointsr/programming

Yes. The best book i read that explains "computer" from really "ground up" is Charles Petzold' Code. Even my literature-graduate girlfriend understood it.

u/TheAdventMaster · 3 pointsr/learnprogramming

Something like Code: The Hidden Language of Computer Hardware and Software may be up your alley.

So may be From NAND 2 Tetris, a course where you build a computer (hardware architecture, assembler, OS, C-like compiler, and programs to run on the OS / written in the compiler) starting with just NAND.

At the end of the day though, the way things work is like this: Protocols and specifications.

Everything follows the same published IPO (input, processing, output) standards. Stuff is connected to and registers expected values on expected peripherals. The CPU, motherboard, graphics card, wireless modem, etc. all connect in the right, mostly pre-ordained places on the hardware.

In this vein, there's firmware level APIs for then communicating with all of these at the BIOS level. Although as far as I'm aware, "actual" "BIOS" is no longer used. UEFI is instead: https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface

This is what Firmware is / is built on-top of. Operating systems build on top of these. System calls. Operating systems communicate under the hood and expose some number of system calls that perform low-level actions like talking to devices to perform things like file access or network I/O. A lot of this stuff is asynchronous / non-blocking, so the OS or system will then have to respond to an interrupt or continuously check a registry or some other means of getting a response from the device to see if an operation completed and what its result was.

Loading the OS is one thing the BIOS is responsible for. This is through the bootstrapping process. The OSs are located at very specific locations on the partitions. In the past, the only command you had enough room for within BIOS / pre-operating system execution was to load your OS, and then the OS's startup scripts had to do everything else from there.

Once you have an operating system, you can ask the OS to make system calls and invoke low-level API requests to get information about your computer and computer system, such as the file system, networks, connected drives and partitions, etc. These calls are usually exposed via OS-specific APIs (think the win32 API) as well as through a command-line interface the OS provides.

New devices and I/O from/to those devices communicate through firmware, and interrupts, and low-level system calls that are able to communicate with these firmware APIs and respond to them.

Just about anything you can think of - graphics, audio, networking, file systems, other i/o - have published standards and specifications. Some are OS-specific (X windowing system for Linux, DirectX win32 API or GDI on Windows, Quartz on Mac, etc.). Others are vendor-specific but don't seem to be going anywhere (OpenGL, then nVidia vs AMD driver support which varies across operating systems, etc.).

The biggest hardware vendors and specification stakeholders will work with the biggest operating system vendors on their APIs and specifications. It's usually up to device manufacturers to provide OS-compatible drivers along with their devices.

Drivers are again just another specification. Linux has one driver specification. Windows has another. Drivers are a way that the OS allows devices and users to communicate, with the OS as a middle-manager of sorts. Drivers are also often proprietary, allowing device manufacturers to protect their intellectual property while providing free access to use their devices on the OS of your choice.

I'm not an expert in how it all works under the hood, but I found comfort in knowing it's all the same IPO and protocol specifications as the rest of computing. No real hidden surprises, although a lot of deep knowledge and learning sometimes required.

When we get to actually executing programs, the OS doesn't have too much to work with, just the hardware... So the responsibility of slicing up program execution into processes and threads is up to the OS. How that's done depends on the OS, but pretty much every OS supports the concept in some sense.

As far as how programs are multi-tasked, both operating systems and CPUs are pretty smart. Instructions get sent to the chips, batched and divided by them and the computational results placed into to registries and RAM. Again, something I'm not a huge expert in, and it honestly surprised me to find out that the OS is responsible for threading etc. I for some reason always thought this was at the chip level.

When you include libraries (especially system / OS / driver libraries) in your code, you're including copies of or references to OS native functions and definitions to help you reference these underlying OS or system calls to do all the cool things you want to do, like display graphics on the screen, or play audio. This is all possible because of the relationship between OS's and device manufacturers and the common standards between them, as well as the known and standard architectures of programs designed for OS's and programs themselves.

Inter-program compatibility is where many things start to become high level, such as serialization standards like JSON or XML, but not always. There are some low-level things to care about for some programs, such as big- vs little-endian. Or the structure of ASM-level function calls.

And then you have things like bitcode that programs like Java or JavaScript will compile to, which are a system-independent representation of code that most often uses a simple heap or stack to describe things that might instead be registry access or a low-level heap or stack if it had been written in ASM. Again, just more standards, and programs are written according to specifications and know how to interface with these.

The modularity of programming thanks to this IPO model and the fact that everything follows some standards / protocols was a real eye opener for me and made me feel like I understood a lot more about systems. What also helped was not only learning how to follow instructions when setting up things on my computer or in my programs, but learning how to verify that those instructions worked. This included a lot of 'ls' on the command-line and inspecting things in my debugger to ensure my program executed how I expected. These days, some might suggest instead using unit tests or integration tests to do the same.

u/wannabeproprogrammer · 3 pointsr/computerscience

Computer processors have historically been in powers of 2 in terms of instruction sets because of boolean logic and how it relates to binary numbers. If you were building a very rudimentary computer, i.e a circuit which is just on and off then you can say that the circuit only represents 2 states. This can be encoded as just 0 or 1. In fact this is what transistors do, they hold either an on or off state. Now let's say you want to represent more than two states? How would you go about that with what you already have? Well you introduce another transistor. Now you can represent 4 states. This is done following the same logic as before, so these 4 states can be 00, 01, 10, 11, where each digit corresponds to the on or off state of one of the transistors. In fact you can repeat this pattern ad-infinitum and keep adding more and more on-off holding transistors. What you'll find is when you do this, is that the number of states that your rudimentary CPU can hold will always correspond to the number of memory units that can be accessed at any time. This will be 2\^N hence the 32-bit and 64 bit numbers which are powers of two. The 32 and 64 correspond to the number of unique states that can represent a 0 or a 1 or an off or on, or rather the memory that can be accessed at any time.


Now in modern CPU's this can get a lot more complicated in terms of architecture as in reality CPU's may have million of transistors and have multi-cores but are still considered 32-bit or 64-bit. In reality the 32-bit and 64-bit in this context relates to the instruction set architecture of the CPU. This relates to the format of instructions that the CPU handles to perform operations i.e. in a 32 bit architecture, the CPU will handle instructions of 32 bits long which determine whether you're accessing memory, writing a value, triggering an interrupt signal and so on. If you really want to understand how CPU's work I recommend reading this book. It explains how CPU's work from a very rudimentary base all the way up to how machine code translates to actual CPU instructions. Hope this helped.

u/KyleRochi · 3 pointsr/ComputerEngineering

Codecadmy! I recommend python or ruby. They are pretty easy languages to pick up, so you will have a good understanding of programming concepts when you start doing C/C++ or java. Also for digital logic I recommend picking up a copy of [Code](Code: The Hidden Language of Computer Hardware and Software https://www.amazon.com/dp/0735611319/ref=cm_sw_r_cp_api_nxOAyb12J4N87) by Charles Petzold. It is by no means a comprehensive guide, but you will be familiar with everything when you take a logic class and while most of the class is trying to figure out what an adder is you will already know and be focusing on how and why it works

u/johnsibly · 3 pointsr/programming

I'd certainly recommended Charles Petzold's "Code" as a source of material:
Great explanations of all the points you mention

u/Great_Lord_Kek · 3 pointsr/EngineeringStudents

If they just explain them as a logic table it makes no sense. looking at them as they perform in a circuit is much more intuitive and clear; i'd recommend a book (it's pretty old at this point) by Charles Petzold called "Code: the hidden language of computer hardware." https://www.amazon.com/Code-Language-Computer-Hardware-Software/dp/0735611319

That book goes over circuits from the bare bones (lighting up a lightbulb) all the way to latches and RAM arrays. It's not dumbed down either.

u/fj333 · 3 pointsr/compsci

Read either of these books, and your CS education will become much much easier. The first book is lighter reading, the second book is intended to be studied over two full semesters, but I finished it in about 2 months because I enjoyed it so much.



Truth charts should be fairly easy to understand conceptually. To understand how they relate to hardware may be more difficult at first. In the second book about, you are told at the start that a NAND gate is a magical piece of hardware that can do one very simple boolean operation. From that magical gate, you can then learn how to build every other kind of boolean gate, from which you can build ALU's, RAM, CPU's, and a computer. A NAND gate can be made out of many things; you could make one out of legos. The reason NAND in computer hardware is so cool and so scalable is because it is tiny.

u/CaRDiaK · 3 pointsr/learnprogramming

If you're interested in the history then Code by Charles Petzold it's great. It explains how code has existed for hundreds if not thousands of years in many different forms.. He takes you right the way through from people signalling using lights, morse code, relays to modern day processors. What's cool about it is you can just pick it up and put it down which I get the feeling is what you're looking for ; https://www.amazon.com/Code-Language-Computer-Hardware-Software/dp/0735611319/ref=sr_1_1?ie=UTF8&qid=1467960451&sr=8-1&keywords=code+charles+petzold

u/Cogniphile · 3 pointsr/learnprogramming

What is their approximate age?

Highest education level achieved?

Any prior experience in programming or computer science?

What is your budget?

Do you have experience programming?

The hardest part is finding something that is interesting and will keep an inexperienced reader motivated. Otherwise you could throw some undergrad level textbooks at them and they'd come out better than most college students who don't actually study.

I highly suggest you stay away from front-end programming because it will be very frustrating to learn about making interfaces when you can't make an interface. This means stay away from html, css, and such.

One possibility is having the person write programs on paper and forward them to you. You can type them into a pc, check for bugs, and even print out the results to send back.

Also I've had this book recommended but haven't read it myself:


This also might work:


u/emcoffey3 · 3 pointsr/learnprogramming

Definitely take as many web-related classes as possible and at least one database class. The other two focus areas you mentioned are important, but probably not as important as the first two. Maximize your time on learning the important stuff; the other stuff can be learned later.

If you want to learn about UML diagrams, check out Martin Fowler's UML Distilled; it's an easy read and handy as a reference. Likewise, Charles Petzold's Code is one of my favorite hardware-related books.

u/ULICKMAGEE · 3 pointsr/AskEngineers

Honestly just purchase this book it's exactly what you're looking for and will do a far better job than a bunch of condensed replys to your inbox.

It's a really good book.

u/Summerdown · 3 pointsr/askscience

I think this book is exactly what you're looking for. I bought it recently and am now half-way through it, and it's fascinating.

u/pgvoorhees · 3 pointsr/c_language

As /u/Shok3001 said, your course textbook is going to be a good place to start.

As an additional note, it might be really beneficial to know how computers work in general. To this end, read Code by Charles Petzold. Once you see the underlying mechanics of a computer, you will see more easily why things are the way they are in the language and how to manipulate data inside a computer.

u/Helix_van_Boron · 3 pointsr/compsci

Code: The Hidden Language of Computer Hardware and Software by Charles Petzold. This is the book that made me decide to switch my college major to CS. It gave me great insight to what I was manipulating inside of a computer. It might not be very helpful to an experienced computer scientist, but I recommend it to anybody that's interested in getting into CS. And even if you understand all of the concepts in it, it's still an interesting read.

u/curious_webdev · 3 pointsr/compsci

Not all on topic as "CS" books, more general programming, but here's a short list. I also suggest the opening chapter or two of a lot of books for stuff you don't know but are interersted in. They're generally just nice easy to read introductions.

u/shrapnull · 3 pointsr/programming

For anyone that hasn't read it, [Charles Petzold's "Code"] (http://www.amazon.com/Code-Language-Computer-Hardware-Software/dp/0735611319/ref=sr_1_1?ie=UTF8&qid=1407846258&sr=8-1&keywords=code+charles+petzold) is a great read through the history of computing and programming.

u/lespea · 3 pointsr/programming

I can easily recommend the book Code: The Hidden Language of Computer Hardware and Software ; fascinating stuff!

u/CSHunter33 · 3 pointsr/cscareerquestions

Congrats! I'm on such a programme at the University of Bath in the UK right now. Bath's programme teaches C and Java, with a little Python in some elective modules. There are also theory of computation modules with a bunch of discrete maths in.

If you let me know which specific course you're attending, what your undergrad was, and how technical a career you might want I can give more tailored advice.

I did the following for prep, after researching what modules I'd be taking:

  • MITx's Intro to CS MOOC (amazing)
  • Read and did all exercises from several relevant chapters from a "Discrete Maths for Computing" textbook I got second hand for a fiver (helped a lot in a maths-heavy module)
  • read the oft-recommended book Code (useful for awareness, but not essential, especially since we do no Comp Arch at Bath)
  • did some algorithm challenges at places like leetcode.com and firecode.io once I had done the Intro to CS MOOC

    Conversion masters are generally very intense so doing prep now and over summer is a great idea. The stuff I listed helped immensely and I would do the same again - perhaps I would switch the MITx MOOC to Harvard's CS50 instead since CS50 has a bigger spread of languages. If I had had more time on my hands, proceeding from here to do a Java MOOC would have been really useful also.

    Working on the Leetcode/Firecode challenges helped a lot for general programming practice, and will also be helpful prep for job hunting later.
u/binary_search_tree · 2 pointsr/movies

Actually, I was just reading a great book called Code: The Hidden Language of Computer Hardware and Software, in which the reader builds an imaginary computer composed of nothing but telegraph relays and light bulbs - all tech from the 1800s.

And Morse code is actually very interesting. It's a very clever way to encode data, and quite an efficient means of communication, especially if you happen to live in the 1800s. It's touched upon in the book.

So yeah, I suppose I am fascinated by those things.

u/anossov · 2 pointsr/AskProgramming

What subject exactly? Unicode is kinda complex, but try starting here.

Fundamentals like bits/bytes/numeral systems are annoyingly absent from sites like codecadamy.

Out of modern books, Charles Petzold's «Code» is regarded to be very enlightening.

u/Mirrory · 2 pointsr/synthesizers

Yes, books! Stacks of them. This is one of the best, IMO

That book will teach you everything about how hardware/software works and more importantly, why it is the way it is. Technically, you know you could use a synth to make a modem squeal and ring a dial up server. Remember that old dial up noise? You were actually listening to the raw handshake. If you play that through a speaker, it's the voltage of the handshake that generates that unique sound. It's probably nothing new to you, but synths are exactly that: machines to control voltage to speakers. They have a bit of logic built into them as well, to handle timing and everything. There's only a handful of transistors in most analog synths I've seen. Much different than a modern computer with billions of transistors.

u/rocketraider · 2 pointsr/learnprogramming



It's the first book that is not dry like a textbook, but gives a thorough understanding of computer architecture. My professor in my Computer Architecture and Assembly class gave the recommendation. I read it in 5 days following the Spring semester.

u/shhh-quiet · 2 pointsr/learnprogramming

Read the FAQ.

Also, I've heard good things about this book, Code: The Hidden Language of Computer Hardware and Software.

Seems like a solid 400 page's worth of framing your entire experience with programming and computers in a useful context.

It's very easy to go down useless rabbit holes while you're busy learning-by-doing. Sometimes it's wise to sit down with an effective book and try to understand more deeply from the ground up.

Same with Python. The FAQ I believe contains some good book recommendations.

u/SteelNeckBeard · 2 pointsr/programming

I feel like Structure Computer Organization could be replaced with this book, Code: The Hidden Language of Computer Hardware and Software:


u/IrishTheHobbit · 2 pointsr/explainlikeimfive

If you are truly interested in how the computer performs these functions, this is a GREAT book. I found it easy to understand, and I think it will answer the question you have.

u/Serious_Callers_Only · 2 pointsr/learnprogramming

Read this book It basically goes from assuming no previous knowledge of computer anything, to how to build your own computer from scratch, and does it in such a way that my parents could understand.

After that, your goal is to work your way up to Structure and Interpretation of Computer Programs

u/abudabu · 2 pointsr/programming

Lots of good suggestions here. Let me add what the dormouse said.

And Petzold's "Code":

u/le848dave · 2 pointsr/compsci

This book does a great job of explaining the innards of how a CPU works from the ground up. It is a fantastic read


u/j_s_lebach · 2 pointsr/lectures

For a lighter resource, I would recommend Code: The Hidden Language of Computer Hardware and Software.

u/SarasaNews · 2 pointsr/askscience

If you're really interested in this you might want to check out the book "Code", it leads you from the invention of electricity up to how computer programming languages work, step by step, including the stuff that's being talked about on this thread.

u/ho11ywood · 2 pointsr/hacking

My one-liner answer:
It was a slow process of steady improvement that started with physical logic gates and/or commands directly to your hardware.

My longer answer:
Go read this book....

u/sky111 · 2 pointsr/AskTechnology

There's a book about that:

It has very good explanations about everything computer related.

u/RoamingChromeLoam · 2 pointsr/networking

"Code" starts by explaining binary and ends with a tour of the undersea cable network. It's a fascinating 10000-foot look at the concepts and tech underlying the Internet


u/JMV290 · 2 pointsr/promos

I dislike asking for things but uh:

Code: The Hidden Language, something by Philip K. Dick, or some other book that I'm blanking on idklol.

u/geoff- · 2 pointsr/answers

This book explained it in a way that finally made sense to me, and got me started in IT.


He begins with two neighborhood kids shining flashlights at each other's windows to communicate, then advances through Morse code and Braille to the telegraph system to finally teaching you about a basic adder (the foundational concept of a CPU)

This question isn't easily answerable in just a few paragraphs. This book, while obviously not a quick little pamphlet, is not a long read by any means and I blasted through it and felt like I finally "got it."

u/MoxMono · 2 pointsr/computerscience

If you want a really good basic grasp of the concepts, CODE by Charles Petzold is a great read.


u/Thunderducky · 2 pointsr/IWantToLearn

If you're interested in looking at how computers work on a fairly deep level, I'd recommend finding a copy of Code: The Hidden Language of Computer Hardware and Software. I thought it seemed very approachable.

u/Tyaedalis · 2 pointsr/learnprogramming

I just began reading CODE and it talks about the lowest level of computing mechanisms. This could be something of interest, although it wont teach you how to program specifically.

For that, I propose to you -- as others have -- Learn to Code the Hard Way. I would recommend the Python version, but he is working on a C version that is being completed. Another great contribution is How to Think Like a Computer Scientist, another book that focuses on Python.

I guess I could best help if I knew what your goals and intentions are. If you want to learn the basics, you can't go wrong with installing a virtual machine with some simple virtual hardware and code at the hardware level. You could even go so far as to build a computer from individual components connected in a specific circuit and hard-code the hardware itself. If you want to learn the more modern, abstract methods, I would strongly suggest Python, C#, or Java. There are many good books on each subject.

u/bdol · 2 pointsr/ECE

This is an amazing book that describes how computers work from the ground up. Petzold basically starts with switches and relays and moves all the way up to processors and displays. At the end of that book, you'll have the same general knowledge as a second year EE/CE.

u/ryanplant-au · 2 pointsr/learnprogramming
u/jaydoors · 2 pointsr/learnpython

Other libraries and functions!

I think I have a similar perspective to you, of having loose ends in my mind until I know what's underneath all of it. It helped me a lot to learn about what computers are, underneath. It's 'just' simple electronics - circuits which can be powered on or off, and which can affect other circuits. I highly recommend this book for a good explanation right from the bottom, all the way up.

In terms of making windows - when you get down to it: the screen is a bunch of pixels, each of which is represented in the computer's memory, and which the screen hardware effectively reads, in order to generate an image (eg first pixel colour while, second colour blue, etc). Some program on your machine will have arranged for this memory to hold information that gives the right colour pixels in the right place to give the window you expect.

u/Truth_Be_Told · 2 pointsr/explainlikeimfive

You need to absolutely read this book (used copies are just a couple of bucks);

Code: The Hidden Language of Computer Hardware and Software

The book is very very accessible and written brilliantly. The only thing it doesn't cover, is the Physics behind the implementation of Electronics but the basics of that, you have probably studied in high-school and undergraduate classes. What you are looking for is the logical abstraction behind the application of Electronics.

The above book will clarify that like no other book i have read.

u/mcflufferbits · 2 pointsr/hardware

I'm looking to buy this one if I can't find any decent websites


u/Scoutdrago3 · 2 pointsr/pcmasterrace

Heres some book I have bought in the past on Programming. You can just download a PDF/e-reader file if you dont want to spend the money, but I would recommend supporting the author.


Python Game Developement

Pro Python

Java For Dummies

How to Program Java


Networking All-In-One

Networking: A Beginner's Guide


Computer Repair with Diagnostic Flowcharts

Code: The Hidden Language of Computer Hardware and Software

u/michael0x2a · 2 pointsr/learnprogramming

I've seen a lot of people recommending Code: The Hidden Language of Computer Hardware and Software

It is about 15 years old though, so it might seem a little out-of-date in some places/might appear to omit some modern developments in technology and computer science, but the existing content should still be pretty solid.

That being said, I do agree that the best thing to do is to just jump straight in. The best way to gain a good mindset for programming is to just start programming. You'll run head-first into obstacles and bugs, and figuring out how to fix those bugs/avoid those bugs is pretty much how you acquire that sort of mindset.

u/Tibio · 2 pointsr/learnprogramming

I found this book to be a great overview from ground up. I have the physical copy but if you want to get it for free you know how..


It's a fairly easy read except the middle 40% about logic gates. Prepare to read through that part multiple times if you want to really understand it. But as you said that would be unnecessary, just for fun. I read it for the same purpose you did wanting some foundation.

u/lethargilistic · 2 pointsr/IWantToLearn

I am not great with hardware, so I can't help with actually building a computer.

Nonetheless, a book that's been really helpful to me and a lot of other people is Charles Petzold's Code: The Hidden Language of Computer Hardware and Software. Basically, it's about machine organization. It walks you through how computers work by building a theoretical computer with you, starting from how to encode information and building to logic gates, relays, and circuitry.

It's also hilarious, written for the layman, and informative enough for serious students. It's incredible. Absolute, unreserved recommendation. Petzold is a master. I recommend the (published later) paperback version because its preface give the book great context.

u/fossuser · 2 pointsr/compsci

If you're looking for a detailed, but approachable overview I'd highly recommend picking up this book: https://www.amazon.com/Code-Language-Computer-Hardware-Software/dp/0735611319

I did CS and this book does a great job explaining how it all works from the ground up as well as how it was figured out. Putting everything in a historical context makes things a lot easier to understand and remember. It doesn't suffer from the common high level explanations that are useless to understand how something really works.

It's also just a fun read.

u/pixel_sharmana · 2 pointsr/compsci

Code: The Hidden Language of Computer Hardware and Software
by Charles Petzold

The book starts with very simple binary logic, then how to create your own transistor out of bent wire and batteries, building logic gates out of transistors, creating your own assembly language, then implementing BASIC on top of that, and finally screens and pixels

u/bwhauf · 2 pointsr/cscareerquestions

If you want to understand how a computer works from the ground up, this book is pretty great: https://www.amazon.com/Code-Language-Computer-Hardware-Software/dp/0735611319

u/forzrin · 2 pointsr/technology

It was a few years ago, but lots of entire series of lectures are online. I got through most of the "core" CS concepts in ~2 years of doing intense academic learning alongside actually writing code (and releasing some stuff to small groups or to app stores). Picking straightforward, small projects with a specific academic challenge like a game with a simple concept but needs pathfinding algorithms (and implementing them myself instead of using a framework)

e.g. Data Structures (YouTube)

You can also find series of lectures like the above on algorithms. Than do basic research on what the most common/industry standard textbooks for these topics are, like Introduction to Algorithms (Amazon link) and buy them or download PDFs or whatever.

The important thing is to actually do the work, suggested tasks/projects, etc. Personal accountability is the driver, here.

Then there are one off books like Code: Hidden Language (Amazon link) that explore specific topics or walk you through certain ideas and concepts at a kind of introductory level. If you find the topic interesting or it is important for your work, it's a good starting point to learn about the lowest level stuff.

u/Kerbobotat · 2 pointsr/videos

I highly, highly recommend [CODE - The hidden language of Hardware and Software](https://www.amazon.com/dp/0735611319/) (amazon link, non-referral)

This book explains how computers work from the fundementals, communicating with flashlights, morse code, tin cans on string, all the way up to modern computer hardware. Its really a great read.

I hope this helps a little bit on the way to understanding stuff. If you have any others you'd like to share as well, let me know!

u/Senipah · 2 pointsr/learnprogramming

This is a very broad question which requires a somewhat nuanced answer. If you are genuinely interested I highly recommend this book:


It’s very accessible and does not require any technical knowledge.

That being said, perhaps the single most important concept to understand with regards to how new languages are made nowadays is the concept off bootstrapping.


u/ryantriangles · 2 pointsr/webdev

> Recently released books? Udemy courses? Free stuff online like W3Schools or CodeAcademy?

Mozilla Developer Network has fantastic documentation for JS, HTML, CSS, and the browser APIs, and a section intended to guide you through them for the first time in a comfortable order.

If JS is your first language, I'd recommend checking out the book "Code" by Charles Petzold, a great and relatively short book that answers the fundamental beginner questions like "So what's a CPU actually doing in there?", "How does source code make stuff happen?" and "How can music be 1s and 0s?"

There's a great series of books, available for free online, called "You Don't Know JS", that teach you how the language operates. It might be too involved if it's the first thing you read, but definitely at least start it and bookmark the later volumes to come back to.

Marijn Haverbeke's book "Eloquent JavaScript" is available to read freely online. I'd really recommend that one, too. And when you want to stop reading theory and start working on actual projects, grab "JavaScript Cookbook" by Shelley Powers.

> Did I choose right languages for what I wish to create? Maybe I should also use something else, like Bootstrap, Node.js or Typescript?

Don't worry about those for now. Node will be useful if you decide you need a server component to your game. Bootstrap is nice, and it's helpful, but if you're still trying to learn HTML and CSS yourself, it will only get in the way and obscure things. TypeScript is something you'd look at only once you're comfortable and confident with regular old JS. Stick to plain old HTML/CSS/JS of your own to start.

u/Serpilliere-a-biere · 2 pointsr/france

Je suis en train de lire ça en ce moment : https://www.amazon.com/Code-Language-Computer-Hardware-Software/dp/0735611319

Pour l'instant j'adore. Il vise une compréhension profonde en partant de rien du fonctionnement d'un ordinateur (il t'explique ce qu'est l'électricité et comment ça fonctionne au début). C'est synthétique et très informatif.

u/ljcoleslaw · 2 pointsr/learnprogramming

There is a great book called Code: The Hidden Language of Computer Hardware and Software which I give to people who are just starting out and are struggling with the bigger picture on computers.

It works from the bottom up without assuming you know anything. It's not a textbook on computer architecture, but it should satisfy your need for a high-level picture of what's going on and will be much easier to read and enjoy than looking up definitions people give you and piecing it together yourself.

u/akame_21 · 2 pointsr/learnprogramming

there is a book which has been recommended as a precursor to nand2tetris in a previous thread I read

Code: The Hidden Language of Computer Hardware and Software

I started reading it a couple days ago -> mind blown. Awesome reviews on amazon and it's half price right now

u/Harkonnen · 2 pointsr/programming

This book is awesome. I learnt a lot from it.

u/thegunn · 2 pointsr/learnprogramming

This is only 8 pages. If you're wanting to do some more reading I can't suggest this book enough. It keeps everything fun and accessible while letting you know what's going on and why.

u/autisticpig · 2 pointsr/Python

Welcome! Have you read code the hidden language ?

u/factorysettings · 2 pointsr/pics

I'm a self taught programmer, so I don't know what CS degrees entail, but I highly recommend the book Code and also another one called The Elements of Computing Systems.

The former pretty much teaches you how a computer physically works and the latter teaches you how to build a processor and then write an OS for it. After reading those two books you pretty much know how computers work at every level of abstraction. I think that's the way programming should be taught.

u/ChrisAshtear · 2 pointsr/gaming

congrats on choosing something you want to do!

btw i recommend reading CODE by charles petzold.

its a book that shows you how everything in a computer works on the electric level, and then shows you machine code & assembly. Not that you really need to program in assembly, but it gives you a good mindset as to how programming works.

u/bithush · 2 pointsr/explainlikeimfive

You want to read Code by Charles Petzold. It is a modern classic and takes you from a flash light to a modern CPU. One of the best books computer books I have ever read. It is so good it never leaves my desk as I love to read it randomly. Pic!

u/Electric_Wizard · 2 pointsr/learnprogramming

My advice is to not worry too much about your programming experience or lack of it. While I didn't do a CS bachelor's myself my understanding is that, in the UK at least, almost all courses will start with the basics and go from there. As there isn't much Computing taught in schools here (until recently) there isn't much courses can assume about people's background in programming, so they will normally start from Hello World in a language like Java or Python and then go from there.

In fact given your background you will probably be about average if not above average in the amount of experience you have already. Of course everything I'm saying here might not apply to you if you're taking a different course which does require some background, but for a regular degree this is normally the case.

That said, it's not going to hurt if you do some more programming or reading on the side, but don't stress too much about it as any extra work you do will be above and beyond what they'll expect you to know when starting.

Aside from programming, one thing which really helped my understanding of things was to read this book, it covers what's actually going on in terms of the hardware and software in a computer from first principles, and should help your understanding and complement what you'll be taught in your course.

u/kirang89 · 2 pointsr/AskComputerScience
u/cletusjenkins · 2 pointsr/learnprogramming

Charles Petzold's Code is a fun read. It deals with very little actual code, but gives the reader a good understanding of what is going on in a computer.

u/hackinthebochs · 2 pointsr/philosophy

I would suggest staying away from The Dragon Book (a CS book on compilers) or anything deeply technical. I don't think that's needed for what you're trying to accomplish. If you do have time I would suggest Code by Charles Petzold. It gives an introduction to modern computing from transistors on up that is understandable by the motivated layperson. I think this book will give you all the intuition you need to formulate your ideas clearly and accurately.

u/MrQuimico · 2 pointsr/compsci

Code: The Hidden Language of Computer Hardware and Software
by Charles Petzold

It's a great overview of CS, very easy to understand.

u/ceol_ · 2 pointsr/TheoryOfReddit

Fantastic! I've gotta be honest, though: you're not going to learn a lot of "programming"; you're going to learn a lot of computer science. That's not a bad thing. You'll learn things like sorting algorithms, complexity, and discrete math.

A great language to start out with for this kind of thing is Python. Read Dive Into Python and Think Python to get you started. If you're having trouble wrapping your head around some concepts, I'd suggest Code: The Hidden Language. It's a great introduction to how computers work which should give you a bit of a kick into development.

Here's a quick example of using reddit's API to grab the last comment someone posted using Python:

import urllib2
import json

url = 'http://www.reddit.com/user/ceol_/comments.json'

request = urllib2.Request(url)
resource = urllib2.urlopen(request)
content = resource.read()
decoded = json.loads(content)

print decoded['data']['children'][0]['data']['body']

You can fool around with the reddit API here and see what it returns in a nice hierarchy.

Hope this helps!

u/NotCoffeeTable · 2 pointsr/Minecraft

Yeah... if you want something outside of Minecraft I'd read "Code"

u/theinternetftw · 2 pointsr/Minecraft

Another book I really respect in this vein is Charles Petzold's Code. It's not as step-by-step, here's-how-you-make-a-real-product as TECS, but it explains more and does so in a more approachable way.

Both books are great.

u/wcbdfy · 2 pointsr/askscience

If you really want to understand how all things (binary coding, electronic representation, logic gates, microprocessors) come to together I cannot recommend this book enough - Code - By Charles Petzold

u/Lhopital_rules · 2 pointsr/IWantToLearn

Possibly one of these? They were the only books about coding/computers with the name Charles that I could find. I'm guessing you're talking about the first one. It looks like a more popular version of things, but probably all still new stuff for me, so I'll check it out!

EDIT: The second one looks really promising too. Thanks for the suggestion!

Code: The Hidden Language of Computer Hardware and Software by Charles Petzold

Fundamentals of Logic Design by Jr. Charles H. Roth & Larry L. Kinney

u/cloakdood · 2 pointsr/learnprogramming

There's a fantastic book that explains how a computer works from the circuits up. I think it would greatly aid in your understanding of how computers work.

Code: The Hidden Language of Computer Hardware and Software

u/terminalmanfin · 2 pointsr/explainlikeimfive

The single best resource I've found for this is the book Code by Charles Petzold


He walks you through how computers work from the formation of Telegraphs, to logic circuits, to small memory, math, and near the end a small computer with a custom assembly language.

u/reddit_user_---_---_ · 2 pointsr/webdev
u/vincenz93 · 2 pointsr/learnprogramming

"Code" by Charles Petzold is a great resource.

Code: The Hidden Language of Computer Hardware and Software https://www.amazon.com/dp/0735611319/ref=cm_sw_r_cp_api_QrnuxbBB5A8CF

u/peschkaj · 2 pointsr/compsci

Check out Charles Petzold's Code. It starts with some basic ideas and moves through digital communication and then into the wonderful world of computering.

u/Shinigamii · 2 pointsr/mildlyinteresting

That book sounds interesting. Is it this one?

u/KingMaple · 2 pointsr/boardgames

If I would recommend a book that can bridge the gap somewhat, it is called Code. This one: https://www.amazon.co.uk/Code-Language-Computer-Hardware-Software/dp/0735611319/ref=sr_1_1?ie=UTF8&qid=1518447991&sr=8-1&keywords=code

The reason I am recommending this is that it MIGHT (unsure, since I am not mechanical engineer myself) bridge the gap between software and hardware and lead to next steps.

u/terryducks · 2 pointsr/computerscience

Start with this book CODE

It lays the groundwork to understand how everything works. From numbering systems to digital gates to how a computer works.

If you liked that, great continue on. If not, CS may not be the right spot for you.

CS is algorithms and problem solving. It's working in teams and communicating. It's writing. It's dealing with complexity and decomposing it to very simple steps that the "idiot computer" can do.

i've spent 20+ years as a code slinger.

u/CSMastermind · 2 pointsr/AskComputerScience

Senior Level Software Engineer Reading List

Read This First

  1. Mastery: The Keys to Success and Long-Term Fulfillment


  2. Patterns of Enterprise Application Architecture
  3. Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions
  4. Enterprise Patterns and MDA: Building Better Software with Archetype Patterns and UML
  5. Systemantics: How Systems Work and Especially How They Fail
  6. Rework
  7. Writing Secure Code
  8. Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries

    Development Theory

  9. Growing Object-Oriented Software, Guided by Tests
  10. Object-Oriented Analysis and Design with Applications
  11. Introduction to Functional Programming
  12. Design Concepts in Programming Languages
  13. Code Reading: The Open Source Perspective
  14. Modern Operating Systems
  15. Extreme Programming Explained: Embrace Change
  16. The Elements of Computing Systems: Building a Modern Computer from First Principles
  17. Code: The Hidden Language of Computer Hardware and Software

    Philosophy of Programming

  18. Making Software: What Really Works, and Why We Believe It
  19. Beautiful Code: Leading Programmers Explain How They Think
  20. The Elements of Programming Style
  21. A Discipline of Programming
  22. The Practice of Programming
  23. Computer Systems: A Programmer's Perspective
  24. Object Thinking
  25. How to Solve It by Computer
  26. 97 Things Every Programmer Should Know: Collective Wisdom from the Experts


  27. Hackers and Painters: Big Ideas from the Computer Age
  28. The Intentional Stance
  29. Things That Make Us Smart: Defending Human Attributes In The Age Of The Machine
  30. The Back of the Napkin: Solving Problems and Selling Ideas with Pictures
  31. The Timeless Way of Building
  32. The Soul Of A New Machine
  34. YOUTH
  35. Understanding Comics: The Invisible Art

    Software Engineering Skill Sets

  36. Software Tools
  37. UML Distilled: A Brief Guide to the Standard Object Modeling Language
  38. Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development
  39. Practical Parallel Programming
  40. Past, Present, Parallel: A Survey of Available Parallel Computer Systems
  41. Mastering Regular Expressions
  42. Compilers: Principles, Techniques, and Tools
  43. Computer Graphics: Principles and Practice in C
  44. Michael Abrash's Graphics Programming Black Book
  45. The Art of Deception: Controlling the Human Element of Security
  46. SOA in Practice: The Art of Distributed System Design
  47. Data Mining: Practical Machine Learning Tools and Techniques
  48. Data Crunching: Solve Everyday Problems Using Java, Python, and more.


  49. The Psychology Of Everyday Things
  50. About Face 3: The Essentials of Interaction Design
  51. Design for Hackers: Reverse Engineering Beauty
  52. The Non-Designer's Design Book


  53. Micro-ISV: From Vision to Reality
  54. Death March
  55. Showstopper! the Breakneck Race to Create Windows NT and the Next Generation at Microsoft
  56. The PayPal Wars: Battles with eBay, the Media, the Mafia, and the Rest of Planet Earth
  57. The Business of Software: What Every Manager, Programmer, and Entrepreneur Must Know to Thrive and Survive in Good Times and Bad
  58. In the Beginning...was the Command Line

    Specialist Skills

  59. The Art of UNIX Programming
  60. Advanced Programming in the UNIX Environment
  61. Programming Windows
  62. Cocoa Programming for Mac OS X
  63. Starting Forth: An Introduction to the Forth Language and Operating System for Beginners and Professionals
  64. lex & yacc
  65. The TCP/IP Guide: A Comprehensive, Illustrated Internet Protocols Reference
  66. C Programming Language
  67. No Bugs!: Delivering Error Free Code in C and C++
  68. Modern C++ Design: Generic Programming and Design Patterns Applied
  69. Agile Principles, Patterns, and Practices in C#
  70. Pragmatic Unit Testing in C# with NUnit

    DevOps Reading List

  71. Time Management for System Administrators: Stop Working Late and Start Working Smart
  72. The Practice of Cloud System Administration: DevOps and SRE Practices for Web Services
  73. The Practice of System and Network Administration: DevOps and other Best Practices for Enterprise IT
  74. Effective DevOps: Building a Culture of Collaboration, Affinity, and Tooling at Scale
  75. DevOps: A Software Architect's Perspective
  76. The DevOps Handbook: How to Create World-Class Agility, Reliability, and Security in Technology Organizations
  77. Site Reliability Engineering: How Google Runs Production Systems
  78. Cloud Native Java: Designing Resilient Systems with Spring Boot, Spring Cloud, and Cloud Foundry
  79. Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation
  80. Migrating Large-Scale Services to the Cloud
u/takemetothehospital · 2 pointsr/computers

Code: The Hidden Language of Computer Hardware and Software is a great book that starts from the bottom up, and explains the very basics in an understandable manner. It will give you an easily graspable outline of everything you need to build a basic computer from scratch. You may need to fill in some gaps if you actually want to go ahead with a homebrew computer project, but I find that it's more than enough to scratch the theoretical itch.

u/BeanerSA · 1 pointr/learnprogramming

Code, by Charles Petzold might be useful


u/JonnyRocks · 1 pointr/computing

As others have noted, your question needs to be fleshed out but this book will answer your question regardless:


u/stucky602 · 1 pointr/explainlikeimfive

If you want to know more I would recommend checking out Code: The Hidden Language of Computer Hardware and Software by
Charles Petzold. It's not even really a coding book (well it is but it isn't). He goes form the bare basic of the telegraph and works all the way up to computers. It explains everything in a way that makes so much sense.

I'm not a programmer. I only really know how to make code spit out Hello World. I love this book as it was so freaking interesting.


u/Amablue · 1 pointr/askscience

If you want a very good overview of how computers work, you should try reading the book Code. It starts off talking about codes, like Morse Code and Binary. Then it moves on to light switches and batteries, and other neat constructions you can make with switches and relays, then it shows you how to build a simple adder. By the end of the book the author has basically given you an overview of how computers work from the logic gates all the way up to the processors and operating systems. It's a really good book, and each chapter flows pretty well to the next and it explains things in ways that are easy to understand.

u/cupkeyboardpaper · 1 pointr/0x10c

I consider myself C competent but I've never done any assembly programming. I ordered these two books today to supplement any internet resources I might come across:

Code: The Hidden Language of Computer Hardware and Software

The Elements of Computing Systems: Building a Modern Computer from First Principles

One of those (or maybe both) were mentioned in some forum (or maybe on Reddit) in reference to preparing to learn the language.

u/snowe2010 · 1 pointr/explainlikeimfive

Along with Kngjon's comment I would suggest reading the book ("Code")[http://www.amazon.com/gp/aw/d/0735611319?pc_redir=1411971211&robot_redir=1]. It's a very easy read and super fun also. You'll learn everything you ever need to know about computers. (Mostly)

u/ienjoybuckyballs · 1 pointr/lostgeneration

Programming is not for everyone. People like to talk about future saturation of programmers but I don't believe it will happen simply because the majority of people will never cut it as programmers and of those that do most will be terrible at it. It's not a sleight on your brain power or intelligence to say you won't be a good programmer, it is simply an observation of the way your brain and mind work and the way you think. Most people just flat out do not think the way a programmer needs to think. It doesn't mean you can't give it a go and it doesn't mean you'll fail but it might mean you'll struggle to understand advanced concepts and may find yourself over your head and slow to adapt.

It's also important to make a distinction between a 'programmer' and a 'designer.' While there is plenty of work in web design, web design is not programming. Neither HTML nor CSS are programming languages. There is such a thing called web application development that involves HTML, CSS, and back end programming but this requires the knowledge of one or many programming languages such as PHP, Ruby, or C#.

For anyone interested in programming I would recommend you read this book before you start trying to learn programming. http://www.amazon.com/gp/product/0735611319/ref=oh_details_o00_s00_i00?ie=UTF8&psc=1 If you find yourself lost or confused and cannot finish, programming is not for you. Again, that doesn't mean you're stupid or less intelligent than anyone else it is simply an observation that you think differently. It is not an observation of inferiority, I can't stress that enough. If you can finish this book you will likely find success learning advanced programming concepts. Pick a language, any language, and start learning.

u/mlevin · 1 pointr/learnprogramming

I highly highly highly recommend the book Code by Charles Petzold. It seriously changed my life.

u/KnipSter · 1 pointr/MechanicalKeyboards

There's a poetic coincidence with this keyboard as well.

Jeff Atwood, in his blog post introducing this keyboard, described the name as "a homage to one of his favorite books": Code: The Hiden Language of Computer Hardware and Software by Charles Petzold.

I am also a fan of this particular book. I'm proud to be a contributor to its errata.

u/_rs_ss · 1 pointr/romania_ss

Dar daca ai citit deja ce am zis de nimeni ca nu glumesti dar e buna. http://www.amazon.com/Code-Language-Computer-Hardware-Software/dp/0735611319.

u/jonc211 · 1 pointr/learnprogramming

This is another book to have read if you're interested in this stuff.
It takes you from 1s and 0s to computers actually doing things.


u/cdubose · 1 pointr/IWantToLearn

There is actually a system to Braille. I read the first part of the book Code, and it does a great job explaining how someone might have first conceived of a system like Braille. For instance, notice the letters A though J. Then notice the letters K through T. The Braille patterns for K through T are the exact same as those for A through J but with the lower left dot filled in. Then notice the letters U through Z. With the exception of W, the last few letters of the Braille alphabet are like the first few letters, but with the bottom two dots filled in. (W doesn't match the pattern because W isn't part of nineteenth century French, the native language of Louis Braille).

Knowing some contextual information like this will help you memorize and understand the Braille alphabet better. I would start by learning the numbers associated with the different dot positions and go from there. This page is a good introduction I think.

u/DudeManFoo · 1 pointr/lostgeneration

I am an old linux guy ( since 92-3ish ) and this reminds me of ... me...

If you are still that guy that likes to just know, I ( the unix guy ) would recommend an awesome book for anyone wanting to emulate your / my up bringing and it is actually from microsoft press called Code: The Hidden Language of Computer Hardware and Software

u/Kal5 · 1 pointr/ireland

If you're unemployed for over a year, there are two state provided education schemes called Springboard and Momentum whose courses you can apply for. By my understanding, Springboard courses are put on by colleges/universities while Momentum courses are put on by private training companies (Not sure about that though as I think some colleges are putting out courses under Momentum). Most last about 9 months while some are 6 months.

If you are interested in computer science, I recommend you take course which teaches you a programming language solely before you take any courses that promise the moon, sun and stars. These usually try to cram too much in so you have a shite knowledge of everything.

Get learning a programming language out of the way and then everything becomes easier. Your choices are usually either c# or java, two object oriented languages. c# is microsoft's copy of java and is used to make stuff that runs on their architecture. Java is used in lots of places as it is fairly free to use. Android apps are made with it. If you know one, you know the other. There are minor differences. Basically if you know the concepts of any object oriented language, you can learn any of them very easily.

CCT used to put out a really excellent java only course but I don't see it there now. I only see this one which seems like an all encompassing one: http://www.springboardcourses.ie/details/3478

I really would suggest you write to them and ask them if they might put one on next September as there are two start times form programs throughout the year so you'll see different programs on offer depending on when you search.

Currently I see two java courses on the Momentum scheme. Both outside Dublin. I can't say how good they might be.

searching for java on Springboard only brings up these two courses, looks like you would need to know java before attempting either of those. But just have a look around those sites and search for computer related terms, "programming" etc.

If you learned java, you would be able to take this Android course on momentum:
(can't see that listed on the momentum site for some reason but it is a momentum course)

You'd still have to pick up some database knowledge somewhere but a book on mysql would be easy enough to understand and do yourself. If you learned java, and then databases in your own time, and then did the android course, you could become an Android dev in about 2 years. Course you'd be missing a lot of knowledge about how computers work which degree course don't teach well anyway so to that end, just read this book:


u/Birdrun · 1 pointr/AskReddit

Try this book: "Code" by Charles Petzold. It's a wonderful summary of computer workings, starting with the most basic electronic principles, and building up to everything needed to build a usable (if simple) computer.

It's all very well written and quite enjoyable to read.

u/n06 · 1 pointr/ECE

This isn't a textbook, but this is one of my favorite down to earth books about computing and electronics I have ever read. My physical computing teacher gave it to me as a gift. It is called Code and it's very cool, and pretty cheap. It's well written too.

u/coned88 · 1 pointr/linux

While being a self taught sys admin is great, learning the internals of how things work can really extend your knowledge beyond what you may have considered possible. This starts to get more into the CS portion of things, but who cares. It's still great stuff to know, and if you know this you will really be set apart. Im not sure if it will help you directly as a sys admin, but may quench your thirst. Im both a programmer and unix admin, so I tend to like both. I own or have owned most of these and enjoy them greatly. You may also consider renting them or just downloading them. I can say that knowing how thing operate internally is great, it fills in a lot of holes.

OS Internals

While you obviously are successful at the running and maintaining of unix like systems. How much do you know about their internal functions? While reading source code is the best method, some great books will save you many hours of time and will be a bit more enjoyable. These books are Amazing
The Design and Implementation of the FreeBSD Operating System

Linux Kernel Development
Advanced Programming in the UNIX Environment


Learning the actual function of networking at the code level is really interesting. Theres a whole other world below implementation. You likely know a lot of this.
Computer Networks

TCP/IP Illustrated, Vol. 1: The Protocols

Unix Network Programming, Volume 1: The Sockets Networking API

Compilers/Low Level computer Function

Knowing how a computer actually works, from electricity, to EE principles , through assembly to compilers may also interest you.
Code: The Hidden Language of Computer Hardware and Software

Computer Systems: A Programmer's Perspective

Compilers: Principles, Techniques, and Tools

u/mcandre · 1 pointr/cscareerquestions

I wouldn't try to read programming tutorials during commutes, as programming is best learned by trying out exercises in a real text editor / terminal as you follow along in the book. Only something like Microsoft's Code would make for light, commuter reading.

As for podcasts, The Verge is a fun tech podcast.

I've started listening to Welcome to Night Vale, a fun, nontech podcast.

u/extra_specticles · 1 pointr/AskMenOver30

Before you commit to it, read Code: The Hidden Language of Computer Hardware and Software by Charles Petzold. If it fires your imagination then computer programming may be is for you.

Another one to read is Soul of a New Machine by Tracy Kidder which is much older, but easily readable by non coders. Again if it fires your imagination then coding might be for you.

CS can lead to many many careers - many more than when I did my degree (80s), but you need to understand where the world of computers is moving to and where you want to be in that space.

If you're just looking for more money, then perhaps you shouldn't be looking at coding as a panacea. Don't get me wrong, coding is fantastic thing to do - if it floats your boat. However it's main problem is that you constantly have to keep yourself up to date with new technologies and techniques. This requires you to have the passion and self motivation to do that training.

I'm been coding since I was 11 (1978) and have seen many many aspects of the industry and the trade. I will concur with some of the comments here that indicate that the degree itself isn't the answer, but could be part of it.

Either whatever you decide - good luck!

u/gfawke5 · 1 pointr/computerscience

I recommend you take a look at this book. It builds a computer from scratch, and the author has made it extremely easy to follow. You could even apply what you learn there on a physics sandbox and make your own alu/cpu.
Hope this helps.

u/random012345 · 1 pointr/learnprogramming

Books on project management, software development lifecycle, history of computing/programming, and other books on management/theory. It's hard to read about actual programming if you can't practice it.

Some of my favorites:

  • Code: The Hidden Language of Computer Hardware and Software - GREAT choice I notice you already have listed. Possibly one of my favorite, and this should be on everyone's reading list who is involved in IT somehow. It basically how computers and programming evolved and gets you in a great way of thinking.

  • The Code Book: The Science of Secrecy from Ancient Egypt to Quantum Cryptography - Another great history book on code and how things came to be. It's more about crypto, but realistically computing's history is deeply rooted into security and crypto and ways to pass hidden messages.

  • Software Project Survival Guide - It's a project management book that specifically explains it in terms of software development.

  • The Art of Intrusion: The Real Stories Behind the Exploits of Hackers, Intruders and Deceivers - A fun collection of short hacking stories compiled and narrated by Kevin Mitnick, one of the most infamous hackers. Actually, any of Mitnick's books are great. Theres a story in there about a guy who was in jail and learned to hack while in there and get all kind of special privileges with his skills.

  • Beautiful Data: The Stories Behind Elegant Data Solutions - Most of the books in the "Beautiful" series are great and insightful. This is one of my more favorite ones.

  • A Guide to the Project Management Body of Knowledge: PMBOK(R) Guide - THE guide to project management from the group that certifies PMP... boring, dry, and great to help you get to sleep. But if you're committed enough, reading it inside and out can help you get a grasp or project management and potentially line you up to get certified (if you can get the sponsors and some experience to sit for the test). This is one of the only real certifications worth a damn, and it actually can be very valuable.

    You can't exactly learn to program without doing, but hopefully these books will give you good ideas on the theories and management to give you the best understanding when you get out. They should give you an approach many here don't have to realize that programming is just a tool to get to the end, and you can really know before you even touch any code how to best organize things.

    IF you have access to a computer and the internet, look into taking courses on Udacity, Coursera, and EDX. Don't go to or pay for any for-profit technical school no matter how enticing their marketing may tell you you'll be a CEO out of their program.
u/crabbone · 1 pointr/learnprogramming

https://www.amazon.com/Code-Language-Computer-Hardware-Software/dp/0735611319 this one is a nice book. It's not exactly a way to teach oneself to code in a particular language for a particular job position, but, if you have time to spare, it gives you a lot of background knowledge / motivation behind some of the basic concepts of programming.

u/LordPachelbel · 1 pointr/explainlikeimfive

Charles Petzold's Code: The Hidden Language of Computer Hardware and Software is a great book with several chapters about this topic and topics that are closely related to it, such as Morse code, Boolean algebra, the telegraph system, electromechanical telephone relays, etc. Those chapters explain really well how everything we do with computers is ultimately handled by tiny electrically controlled switches that are connected together in special ways.

u/mech_eng_lewis · 1 pointr/computerscience

Read this book: https://www.amazon.com/Code-Language-Computer-Hardware-Software/dp/0735611319

It goes from learning to count in binary to writing flip-flops, adding circuits, muxes, comparators, shift register etc. There's hardly any maths you just need to know basic algebra and how to add and multiply. The book teaches you the rest.

If you like hardware you'll love this book.

I'm an Electronic Engineering student AMA.

u/redbuurd · 1 pointr/learnprogramming

I'm going to be that guy...I know you asked for documentaries, but if you haven't read this book already, you should. One of the best explanations of low level computing that I've seen.

u/t3h2mas · 1 pointr/learnprogramming

I think your plan is just fine. You may be distracted by the large amounts of choices you find along your way -- this thread is clear proof of that. Stay focused.

If you intend on starting with C I suggest a reading list kinda like this.

  • Code (good to read before you start to code)

  • K & R - The C Programming Language

  • LCTHW - Learn C the Hard Way (free to read from the site.)

    And then begin Java study. The first two may be a bit heavy at times... Work your way through and do your best, but don't except to get everything.

    You could start with Java. There's a fine community and great resources. I say go for the C -> Java route and get a taste of some low level fundamentals.
u/topherker · 1 pointr/funny


You would love this book if you haven't read it already.

u/baldhippy · 1 pointr/AskReddit

This book does a good job of explaining it. In it the author starts off with a simple relay which is either on(1) or off(0) and slowly builds it up in complexity until he builds a CPU. Really interesting read.

u/Foryourconsideration · 1 pointr/programming

I fowned a great book at Chapters in Canada called Code. It's certainly very interesting as it deals with all sorts of "code" from Morse to C# and it looks at how they are related. A surprising break from tutorial books, which I also love.

u/FetusFeast · 1 pointr/books

lets see...

u/VonAcht · 1 pointr/AskElectronics

I always suggest this book. It's pretty good for an introduction to electronics/basic computers. Read it and see if you like it. There's also a list of resources for beginners in this sub's FAQ, but most of them are electronics only.

u/chalcidfly · 1 pointr/programmer

As always, read the docs first: (Code by Charles Petzold)[https://www.amazon.com/Code-Language-Computer-Hardware-Software/dp/0735611319] At least give it a skim. Great book, worth the 20$ for sure. That'll give you a really, really good intellectual basis for how computer hardware works.

Then, you could try getting a microcontroller like the Raspberry Pi or an Arduino or one of the millions of other options. Don't just get the microcontroller though, if you can afford it, get as many of the add-ons and books you can find and try to build something simple, like a computer. (Not too difficult with a Raspberry Pi.)

Or, if you want to just manipulate some LED stuff, you can buy some little LED lights and plug them straight into your microcontroller.

Whatever you do, it helps to document it through a blog or Facebook or Twitter or whatever, it'll keep you accountable.

u/lazyAgnostic · 1 pointr/santashelpers

For programming, what kind of programming is he into? Here are some cool programming books and things:

  • Automate the Boring Stuff with Python This book has a lot of beginner projects that are actually useful.

  • Arduino A little microprocessor that he can use to make cool projects. I'm a software engineer and I had fun playing aroung with this. Plus, you can use it for actual useful things (I'm planning on making an automatic plant waterer, but you can look online for all the awesome stuff people have made).

  • Raspberry Pi Similar to the arduino but it's a full computer. For more software-heavy projects than the arduino. I'd probably recommend starting with the arduino.

  • Great book about how code and computers actually work that's geared towards the "intelligent layperson" link.

  • If he's already programming and wants to create games I can recommend this one.. Not good for beginners though.

  • If you want to give him a well written tome about game programming here it is. Again, not really for beginners but really good for someone wanting to learn about game programming
u/Headpuncher · 1 pointr/ProgrammerHumor

I had PTSD from your class and I wasn't even in attendance.

Obligatory mention of Code book that explains logic gates and some other stuff.

u/skamansam · 1 pointr/explainlikeimfive

Software on your computer tells the CPU how to send instructions to a given piece of hardware. The software is called, "a device driver." if you want to go really deep in the answer, check out the book Code, by Charles Petzold (http://www.amazon.com/Code-Language-Computer-Hardware-Software/dp/0735611319). It is probably the best book on the subject, and is written in an ELI5 manner.

u/tlazolteotl · 1 pointr/learnprogramming

If you are interested in theory, a great book is Code by Charles Petzold.

u/juniordevradio · 1 pointr/programming

Tl;dr: Code: The Hidden Language of Computer Hardware and Software is a fantastic primer for this course.

u/Zeroe · 1 pointr/learnprogramming

I found the Build a Modern Computer: From NAND to Tetris course to be very informative regarding the basics of computer architecture. They also have a book in print that covers all the same material, and the first half of the book and course are available on their website for free.

If you'd like something that is less detailed and just covers the ideas, I recommend the book Code: The Hidden Language of Computer Hardware and Software by Charles Petzold. It starts from the basics of encoding information using systems like Morse code and binary numerals and shows how combining this with Boolean operations represented in hardware, we can construct machines that carry out general, programmable computations. He shows simple diagrams of relays and how those are assembled into gates, memory, and more complicated structures.

I highly recommend both resources.

u/ibrokedown · 1 pointr/learnprogramming

A good, if somewhat dated (and dense) traversal through this is the book Code by Charles Petzold.

u/eolith · 1 pointr/hardware

The book that fits here is Code, by Charles Petzold. Not a textbook, more a general CS divulgation book, but is gold. The author explains the very basics of how a computer works in a very gradual way. You end up thinking, as you said, is amazing what we have. Complex async graphical UIs, distributed systems, virtualization... I work on IT for more than 10 years and still can't believe we have it.


u/hamishtarah · 1 pointr/AskComputerScience

Charles Petzold's book "Code" gets recommended a lot for understanding how computers work, from a very basic level.


There are even several people that have built relay computers similar to those discussed by Petzold.



u/perrylaj · 1 pointr/learnpython

This isn't a programming book, or even a strictly computer science book. It's about Code, the history, the mindset, the means of communicating in binary/encoded processes, the evolution of signals. It touches on electronics, computers, coding, communication and so many other things. It's great for getting some history in an enjoyable format and lays some groundwork in understanding the roots of modern computing. I read it after having some years of experience in CS and still learned a lot of neat ways to look at the field from different perspectives.


Highly recommend it.

u/MelAlton · 1 pointr/cscareerquestions

Ah those are both excellent suggestions!

Code is a great book - If a programmer newcomer reads Code and doesn't find it interesting, that's a no a good sign, as all the concepts in the book are vital, and presented very well Link: Code by Charles Petzold

And medical science background is a great lead-in to bioinformatics - in that area OP would have a lead on other straight-CS programmers. And bioinformatics uses a lot of Python, which is pretty easy to learn.

u/SlinkyBlue · 1 pointr/ITCareerQuestions

Thank you for the reply, that's very helpful. Obviously I have been able to benefit from the book I already have, it makes sense to continue along that avenue. [This]
(Https://www.amazon.com/dp/0735611319/ref=cm_sw_r_cp_awdb_sq.azbES12DCH) is the book that has helped me out.

I live in Sacramento. There is a massive health care and education based economy here that has an expanding infrastructure that I want to get in on ASAP.

u/dm0x48 · 1 pointr/Unity3D

Unity has already been well covered here by other redditors.

Nevertheless, if you are also in the process of learning how to program, I would like to contribute with two pointers.

Code: The Hidden Language of Computer Hardware and Software, by Charles Petzold

For the very basic of computer science


Inside C#, by Tom Archer and Andrew Whitechapel

This is quite old now but very easy to read and good to understand the language


If you are not in the US, just google around for other sources.

Happy hacking

u/EibeMandel · 1 pointr/ProgrammerHumor

I can highly recommend the book Code: The Hidden Language of Computer Hardware and Software, it helped me overcome my fear of hardware.

u/JimWibble · 1 pointr/Gifts

He sounds like a younger version of myself! Technical and adventurous in equal measure. My girlfriend and I tend to organise surprise activities or adventures we can do together as gifts which I love - it doesn't have to be in any way extravegant but having someone put time and thought into something like that it amazing.

You could get something to do with nature and organise a trip or local walk that would suit his natural photography hobby. I love to learn about new things and how stuff works so if he's anything like me, something informative that fits his photography style like a guide to local wildflowers or bug guide. I don't know much about parkour but I do rock climb and a beginners bouldering or climbing session might also be fun and something you can do together.

For a more traditional gift Randall Munroe from the web comic XKCD has a couple of cool books that might be of interest - Thing Explainer and What If. Also the book CODE is a pretty good book for an inquisitive programmer and it isn't tied to any particular language, skillset or programming level.

u/KaiserTom · 1 pointr/factorio

If you want to understand it, read through Code: The Hidden Language of Computer Hardware and Software. It's not a giant textbook, just a regular book (with figures to help explain subjects too) which means it is concise in its material and not overly verbose. It will give you a complete rundown of what a computer is and how it works at its most base level, starting from the concepts of morse code and electricity up to binary and mechanical relays and then the instruction codes and massive banks of transistors which end up forming what we can definitely call "a computer". It's a great book for anyone trying to delve into computer science or even just trying to understand it as a hobby.

u/Bozo_The_Brown · 1 pointr/computerscience

Let's convert 65 to A:

01000001 // 65

00110000 // "A" bitmap 8x8 pixels

This can be accomplished in hardware with an EEPROM, similar to the way you implement the 7-segment display in Ben's series. But instead of 4 bits representing a number decoded to 7 bits for the display (4 to 7), this is 7/8 bits representing the char code decoded to 8x8 bits for the display (7/8 to 64).

You could have 8x EEPROMS that each represent a row of output. Feed the same 7/8-bit address (char code) into all of them, and connect the outputs to a grid of lights. This is just for one character.

For a more practical idea, maybe connect the char code output to an arduino that does the decoding and renders on your computer monitor.

Conversion in software follows the same principle, just mapping the char codes to bitmaps. Not something that would be fun at the assembly level XD

Code by Petzold
and N2T for more fun.

u/yaymountainbiking · 1 pointr/learnprogramming

This, like all things, contains a varying amount of truthiness. I agree that beginners shouldn't use an IDE simply because they need to learn how to build an application from the ground up. However, professionally my work definitely benefits from an IDE, especially with larger code bases or when I get stuck something stupid like Java or Groovy. And sooner or later you WILL get stuck with something stupid like Java or Groovy.

Perhaps the best advice is to learn how a computer actually works. C, for example, is more representative of how a computer works than something like Javascript. Assembly, x86 or otherwise, is even better. Code by Charles Petzold is a good primer.

u/kecupochren · 1 pointr/computerscience

I’m self-taught so I have lot of gaps. This book really helped with the hardware part though, it goes from morse code all the way up to full blown PC - https://www.amazon.com/Code-Language-Computer-Hardware-Software/dp/0735611319

u/bladekill97 · 1 pointr/learnprogramming

I put C++ in the similar boat as C, both are good languages to start.

Also HTML is not programming language rather it is markup language used for structuring the web sites.

If you are going with C++ I would suggest:

u/looeee · 1 pointr/books


If all computer related knowledge was destroyed, and only this book survived, we could reinvent the computer.

Yet still simple and enjoyable to read.

u/scrabbles · 1 pointr/explainlikeimfive

Further to the excellent comments already left, if you want to investigate things later on in your own time, you might enjoy this book Code: The Hidden Language of Computer Hardware and Software. It explains programming and computer hardware fundamentals using excellent (and real - based on history) examples. I think even a 10 yr old would get a lot out of it, I would go so far as to recommend it to tech inclined parents for themselves and their children.

u/Wittgenstienwasright · 1 pointr/computerscience

I am sorry but that is simply not true. The Admins on this site are quite careful about such things. Without the age of the child it is impossible to provide a suitable answer. At eleven possibly, as I recommended in my DM, perhaps Rpi and surrounding projects as shown on the site, at thirteen, then Python and later on as experience dictates. Please do not berate a fellow father trying to educate people especially for free. Good luck and before your teenage tries anything new, perhaps you can find this physical tome.


The first chapter is about communication.

u/reeecheee · 1 pointr/compsci

This book was absolutely awesome and will take you logically from a flashlight to logic gates to an entire computer with no EE background:

Code: The Hidden Language of Computer Hardware and Software by Charles Petzold http://www.amazon.com/dp/0735611319/ref=cm_sw_r_udp_awd_X-7-tb14JMMZV

u/maratc · 1 pointr/buildapc

Petzold's Code is a very nice book.

u/Blufalcon94 · 1 pointr/AskNetsec

Check out Code: The Hidden Language of Computer Hardware and Software https://www.amazon.com/dp/0735611319/ref=cm_sw_r_awd_Rdrfub17VD49B

u/zeitistjetzt · 1 pointr/explainlikeimfive

For further reading

It started from the beginning with binary, Morse code, and light switches, etc, gradually building up to motherboards and operating systems. It starts to make me feel like I could build a computer from scratch.

u/clever-clever · 1 pointr/explainlikeimfive

If you're interested, this is an amazing read.

u/lucasmez · 1 pointr/NoStupidQuestions

I would recommend this book to start out.

u/Junaos · 1 pointr/learnpython

No problem :) If you want to read a little bit further on why this happens, take a look at Two's Complement, which explains a bit more how this works, and why it works, at the binary level.

Also, this book does a much better job explaining these concepts than I ever could.

u/dybt · 1 pointr/Minecraft

While not specific to redstone/minecraft, this book is a great introduction to the workings of computers and the concepts apply to redstone computers as well. It takes you from why flicking a switch turns on a lightbulb, to a stage where you can make sense of and implement fairly complicated circuit diagrams such as this in the length of an average novel.

In terms of applying it to minecraft, just read the redstone related pages in the wiki. I think this relies on the fact that a redstone signal can pass through glass but not solid blocks so you can store data using glass as a 1 and another block as 0 and the pistons push them around in a circuit.

u/pubgrub · 1 pointr/explainlikeimfive

You might want to look at this book

or this webpage

u/a_redditor · 1 pointr/learnprogramming

Let me just say right off the bat that it sounds like you're well on your way to being a successful programmer.

One thing I can definitely suggest (which helped me a lot) is reading Code or some other book like it. It is effectively a guide from the ground up of how computers and programming work in general. I had the fortune of reading most of it before I started my CS degree, and it really helped me breeze through my hardware courses.

As well, any books on data structures would probably be helpful, as this is one of the early topics covered in many CS programs. I can't suggest any specific books, but I'm sure others can.

Most of all I have to suggest just getting very comfortable with programming and learning several different languages. It looks like you're already well on your way with this, but the goal here is to have a strong passion for programming before college. That way, when you're up at 3 AM the night before an assignment is due, it's not because you procrastinated and you waited until the last minute to start because you loathe the thought of programming, but because you're so excited about making your code perfect and adding in additional functionality because you absolutely love programming.

u/prettymucheverywhere · 1 pointr/AskReddit
u/JumboJellybean · 1 pointr/learnprogramming

Here are my two big enthusiastic suggestions.

Sign up to Lynda. You get a 10-day free trial, and then it's $30 for a month. Watch Foundations of Programming: Fundamentals (4h 47m), Foundations of Programming: Data Structures (2h 29m), Programming Fundamentals in the Real World (3h 8m), and Python 3 Essential Training (6h 36m).

These are short crash courses, you obviously don't walk away a full-on programmer. But the main instructor Simon Allardice is excellent at explaining the basics and fundamentals in a very clear, natural way. I have taken university courses, I have watched MIT and Harvard courses, I have used a dozen tutorial sites and watched a bunch of lecturers and read three dozen books: the Lynda programs I linked are the best first-intro things I've seen. I strongly recommend that you watch at least the first two.

You might not understand it all, that's fine. Don't worry about what languages he uses for examples, 90% of stuff carries over between languages. If you can absorb a good chunk of that material it'll be a huge boost for you and a nice foundation to start on. You'll walk into your first real class in a better headspace, already knowing the gist of what you're going to flesh out and properly sink your teeth into. And if you find that the Lynda stuff really works well, look up their C and databases courses, since you'll wind up using that stuff too.

My second recommendation is that you buy and read Charles Petzold's wonderful book Code: The Hidden Language of Computer Hardware and Software. This book doesn't focus on a specific programming language, or how to implement programs, or the mathematics, or the theory. Instead it answers "So what is a computer actually doing under there when we program? What's a CPU, exactly, how does it understand words and numbers?" It does this in a very natural, accessible, for-the-layman way, starting with really simple analogies about signal flags and morse code, and before you know it, bam, you understand logic gates and binary arithmetic, and a lot of the mystery and magic of computers has dissolved for you.

u/marrick66 · 1 pointr/hacking

I own the first edition, and looking at the second, it does a much better job of giving some rudimentary programming basics. You might want to pair it with Code, which is great for getting an overall view of how computers work.

u/ctide · 1 pointr/ruby

code is really low level, but is awesome for getting a good core understanding of how things work.

u/synt4xtician · 1 pointr/explainlikeimfive

Code is a great book that starts with this analogy & works its way up to advanced computer science and information technology concepts. Highly recommended if your'e interested in this!

u/metawhimsy · 1 pointr/compsci

You may be interested in Code: The Hidden Language of Computer Hardware and Software by Charles Petzold.

u/idoescompooters · 1 pointr/learnprogramming

Big Nerd Ranch Objective C is a great book. Take your time with it. Code: The Hidden Language of Computer Hardware and Software, here, is really good.

u/LocalAmazonBot · 1 pointr/ECE

Here are some links for the product in the above comment for different countries:

Amazon Smile Link: the good book?


This bot is currently in testing so let me know what you think by voting (or commenting). The thread for feature requests can be found here.

u/batmannigan · 1 pointr/ECE

Have you read the good book?. Joking aside, Code is an amazing book, which really tied alot of things together conceptually for me.

edit: My god I need to make a reddit bot, those are cool.

u/Teknull · 1 pointr/IWantToLearn

Is this it?


I am interesting in building an 8-bit cpu as well.

u/pat_trick · 1 pointr/learnprogramming

She may be interested in these books (though they are a bit higher level):



I would ask what programming language they are learning in class.

I would NOT recommend Scratch as a programming language, though that's my personal opinion. Better to learn an actual language.

u/stepstep · 1 pointr/compsci

It doesn't take much math to understand the basic principles of how a physical computer works (starting at the level of transistors, and not including all the software that runs on it). OP said he/she wants to work from the level of transistors upward, so he/she doesn't really need to know any chemistry or physics. In fact, OP doesn't even need much electronics knowledge (e.g. inductance, impedance, etc.), since most of the construction of a computer will be at the level of digital logic gates. "Engineering" is a broad term that encompasses all of these topics, so I won't consider it separately. Software development and computer science might be relevant once OP has conquered his/her quest of understanding how a physical computer works and wants to study higher abstractions, but this is not prerequisite knowledge. industrial engineering will be useful only if OP actually wants to cheaply build practical computers out of silicon, but this is probably not the goal.

By the way, I second /u/azimuth's suggestion: Code: The Hidden Language of Computer Hardware and Software.

u/XUtYwYzz · 1 pointr/educationalgifs

Code: The Hidden Language of Computer Hardware and Software is one of my favorite books and covers this topic. It's amazing.

u/rocknerd32 · 1 pointr/learnprogramming

This Book really me understand The Hardware And how it Functions. May Help

Code: The Hidden Language of Computer Hardware and Software https://www.amazon.co.uk/dp/0735611319/ref=cm_sw_r_cp_api_KxpLxbD41R90A

Sorry For The Spelling, German

u/dnew · 1 pointr/Unity3D

There was a book I read 40 years ago that covered basically everything from vacuum tubes and semiconductors up to basically chips. It was in the library, and it was like 800 pages long. I asked on reddit if anyone knew what it was, and someone pointed me at the newest edition. But I don't really have time to go through all my comment history looking for "electronics book" or to write a program to do same, but you should feel free to do so. :-) Then I got into assembly for the 8-bit CPUs, picked up the 16-bit and 32-bit CPUs of the day, and the mainframe stuff. Then I went back to school. :-)

However, all that said, this looks like what I read, and the intro sounds like he's describing the first edition I remember: https://smile.amazon.com/Electronic-Devices-Circuit-Theory-11e-ebook/dp/B01LY6238B/ref=mt_kindle

If you want more about assembler, just flipping through this seems like it starts with the very fundamentals and goes through a fair amount. https://smile.amazon.com/Code-Language-Computer-Hardware-Software/dp/0735611319/ref=sr_1_5 If you already know how to program, and you understand the basics of how (for example) basic assembler language works and how the chip accesses memory and what an interrupt does and etc, then learning new assembler languages is pretty straightforward. Sort of like "I know Java, now I need to learn C#."

But honestly, at this point, I'd look online. When I learned all this stuff, textbooks were the way to go. Nowadays, everything moves so fast that you're probably better off finding a decent description online, or looking up an online class or something and seeing what texts they use.

If you don't want to learn assembler or hardware, but you still want to challenge yourself, the other thing to look into is unusual programming languages and operating systems. Things that are unlike what people now use for doing business programming. Languages like APL (or "J"), or Hermes, or Rust, or Erlang, or Smalltalk, or even Lisp or Forth if you've been steeped in OOP for too long. Operating systems like Eros or Amoeba or Singularity. Everything stretches your mind, everything gives you tools you can use in even the most mundane situations, and everything wonderful and wild helps you accept that what you're doing now is tedious and mundane but that's where you're at for the moment. :-) (Or, as I often exclaim at work, "My kingdom for a Java list comprehension!")

u/RadioRoscoe · 1 pointr/funny

I have played on that learning circuit board thing, and it is truely awesome. The books that come with it are top notch. A nice compliment to it would be Petzoid's book, Code.

u/Cyphierre · 1 pointr/math

I Highly Recommend for that purpose.

u/Nasty_Nate93 · 1 pointr/learnprogramming

Computer Science as a whole is going to be hard to digest. I have heard good things about This book as a starting point, to give you a basic feel for it all (and determine if it's the right career path for you). You will need to choose your first language to start studying as well. Python or Java are not bad options.

u/HarambeBerlusconi · 1 pointr/italy

Visto che mi pare che tu stia iniziando e non abbia alcuna conoscenza, ti sconsiglio tutti i libri che ti hanno suggerito, perché malgrado in qualche caso siano buoni (tanenbaum) se non hai la minima idea di cosa stiamo parlando non saranno proprio immediati e forse troppo noiosi.

Purtroppo, il libro che ti consiglio non mi risulta sia più disponibile in italiano (non è molto difficile da leggere in inglese) ma potresti ancora trovarlo: https://www.amazon.it/Code-Language-Computer-Hardware-Software/dp/0735611319/

E' un'introduzione di alto livello ai concetti più importanti dell'informatica, non insegna nulla di pratico ma credo sia il miglior testo introduttivo mai scritto. Se non sai nulla di informatica eviterei di leggere qualsiasi altra cosa, anche se più pratica, prima di questo. Ti darà la base teorica necessaria per apprezzare a pieno tutto il resto.

u/3burk · 1 pointr/learnprogramming

If you want to start at the ones and zeros and really understand how a computer makes calculations, there is no better book than:


u/kaylee-anderson · 1 pointr/Documentaries

Get the book CODE by Charles Petzold. It's a super easy read, and by the time you're done with it you'll understand how CPUs work.

u/kasbah · 0 pointsr/ECE

I have just started reading "Code" by Charles Petzold. I think this book would have been a godsend when I was just starting out.


u/Sonoff · -15 pointsr/speedrun

If you did not understand what was happening but thought "wow" and wish you had, reading this book is a great way to start (maybe the best) : https://www.amazon.com/gp/aw/d/0735611319/ref=mp_s_a_1_1