6

I am interested in how computers work but I have no idea how the concept of 0's and 1's converts to making possible for people to control a computer by programming. I would like to understand from very fundamental levels of computer and continue studying more in depth until I am satisfied. Where should I start? Is there a name for this topic? What books should I read?

**Edit: This was my first post and I think I got a lot of good suggestions on where to start. I will be looking up all the answers posted here. Thanks a lot for everyone who answered on this post.

Mardia
  • 171
  • 5
  • 11
    https://www.nand2tetris.org/ – Yuval Filmus Jun 06 '20 at 09:34
  • The name for this topic is, simply, introduction to computers. – John L. Jun 06 '20 at 14:33
  • 1
    ... not to mention abstraction. – Pål GD Jun 06 '20 at 14:46
  • 2
    In addition to NAND2tetris, https://eater.net/6502 is a good video introduction to how binary code is executed by physical hardware, and also how an assembler works. You can even buy a kit and follow along, for better understanding. If you want to learn about programming languages, SICP has a project where you create a Scheme interpreter from scratch. And compilers are a natural next step once you have an interpreter. – Jacob Krall Jun 06 '20 at 22:52
  • 1
    http://nandgame.com/ is a free “game” version of NAND 2 Tetris, if lectures aren’t your style. – Jacob Krall Jun 06 '20 at 22:54
  • 1
    @D.W. I can hardly agree this question is a duplicate of the other one. This one is about "where to start?", while the other one is about "how computers work?". None of the answers here fits for the other question, while the answers to the other question can hardly fit for this question. – John L. Jun 07 '20 at 01:51
  • 1
    @JohnL., OK - perhaps I'm missing something. However, I'm not understanding how it differs. Most of the answers there suggest a reasonable place to start and things to read. Perhaps I'm just not seeing it or being blind? I could be just wrong here. Might you be open to editing this to clarify how it is different? – D.W. Jun 07 '20 at 01:56
  • Hmm, most of answers to the other question at least tried to explain "How does a computer work?" while none of the answers here made any attempt to explain that. While some answers of the other question does provide a map for further study, and thus could be considered as including an answer to this question, the nature of these two questions are, apparently, very different. – John L. Jun 07 '20 at 02:09
  • Once this is closed as a duplicate, it is not accessible in some situations (mobile non-logged-in?). The answers here are partially lost. If answers here can be merged to the other question, that would be great. – John L. Jun 07 '20 at 02:16
  • @D.W. Isn't a link to the other question good enough? It looks like the best way out could be updating the most popular/accepted answer here so that it refers to that reference question. Or just a comment with a link to the other question that will be voted up. – John L. Jun 07 '20 at 02:21
  • @JohnL., I've left a comment on the other question pointing to this one, so that folks can find the answers here. – D.W. Jun 07 '20 at 23:19
  • @D.W. Nice solution! I planned to vote up your comment over there. However, it was just a link. How about vote up my comment over there? – John L. Jun 08 '20 at 02:15
  • @JohnL., thanks, that's much better. Done. – D.W. Jun 08 '20 at 02:33

3 Answers3

10

You're asking a very broad question that isn't particularly easy to answer "correctly".

What you are describing is what you learn if you follow through with a degree in computer science or maybe more precisely in electrical engineering and computer science.

So I would recommend you to do exactly that: Go to you favorite university websites and look up what the content of a degree in EE/CS is.

For example, I've heard that MIT has a degree in EECS, so I looked it up, and found a long list of courses.

There I found a course called 6.01 — Introduction to Electrical Engineering and Computer Science I which even has a downloadable lecture notes document:

6.01 Course Notes, Spring 2011 (PDF - 4.9MB)

in which the basics of circuits are covered in Chapter 1.


Summa summarum you're asking for what goes into a degree in electrical engineering and computer science, and the best way to find the answer to that is to go to the source.

Universities and schools exist for a reason. :)

Pål GD
  • 16,115
  • 2
  • 41
  • 65
4

Three books:

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

Using everyday objects and familiar language systems such as Braille and Morse code, author Charles Petzold weaves an illuminating narrative for anyone who’s ever wondered about the secret inner life of computers and other smart machines.

2. But How Do It Know by J. Clark Scott

But How Do It Know? really explains how computers work. They are far simpler than anyone has ever permitted you to believe. It contains everything you need to know, and nothing you don't need to know. No technical background of any kind is required.

3. Elements of Computing Systems by Noam Nisan and Shimon Schocken.

Available online to read for free, and also as a free video course by the authors on Coursera: Part 1, Part 2 famously called Nand To Tetris. The course website is nand2tetris.org. While the first 2 books can be read through, this has exercise that you must go through to understand the material. A pre-requisite of a basic programming course in any language.

I recommend picking either of 1 or 2 and then proceeding to 3. Code is more detailed, but How Do it know covers a bit more topics. Both the first books cover fairly similar ground, which is mostly the first half of the nand2tetris course.

Nemo
  • 156
  • 2
3

Depending on how narrow we understand the question, the answer might be (parts of) a single university course instead of a whole degree.

A course on the design of digital circuits as taught at ETH Zurich includes how to get from boolean logic (i.e. conceptual ones and zeros, but not their physical implementation) to modern computers that you can program - although only in assembly, i.e. a very simple programming language. The link goes to a lecture website including recorded lectures and practice material.

To get from physics to the boolean logic (conceptual zeros and ones) you would need an electrical engineering or even physics course (depending on the level of detail you want) on semi conductors and transistors in particular.

To go from the simple programming language to more advanced ones you would need a course on compiler design like this one.

Nobody
  • 160
  • 7