Guided Tour of Digital Realities
This chapter was a little different from those that follow. We looked at the landscape around us so you could get a feel for the journey ahead and what will be important.
Computers are Unintelligent
Computers are unintelligent. This is one of the first and most important things you need to understand when starting to create your own programs. As we have seen, a computer is a machine that uses transistors to control the flow of current through the computer. Using abstraction, we can make meaning from this with binary data and machine code. We can use these machine code commands to instruct the computer to perform basic actions such as adding numbers, reading values from memory, storing values in memory, jumping to new instructions, and other simple tasks. There is no intelligence anywhere within these electronics.
If computers are unintelligent, how can they do the awesome things they do?
That is a good question. Computers are unintelligent, but programs are not. The computer does not know what it is doing any more than a bicycle knows how to move. When the computer runs a program, it is controlling the flow of current through circuits. At a higher level of abstraction, we can see this as following the list of steps that were coded into the program. These steps were created by the developers who created the program. When a computer does something cool, it’s because a person told it to.
This is why software development is so awesome. You get to make computers do the things you want done. This creativity can be exhilarating when you finally get your program to do exactly what you want. It is empowering: computers are everywhere, and even tiny computers are very powerful now in terms of what they can process. By learning how software works, and the building blocks that go into creating them, you can build upon the digital realities of others to create unique and powerful realities of your own, and have these influence the real world in new and interesting ways.
The Journey Ahead
So what do you need to take away from this?
There are two key takeaways from this chapter: abstraction and digital realities.
Computers are hugely complicated if you try to think about everything that is going on within them. In order to get on top of this we must use abstraction to lift our thinking above physical reality and the events that are occurring within computer hardware. This allows us to start building digital realities, within which we can control every aspect of how they work, including how they interact with the real world. We just have to imagine them and craft the programming instructions to make them come to life.
So, at this stage, you don’t need to worry too much about how transistors work to create gates within the computer. You also don’t have to worry about how they are designed to make computations function. You can live above these details because of abstraction.
At the start of this journey, in Part 1, you will start to explore programs as instructions. Our first step will be to look at the different elements you can put within your source code to control the computer. We will explore how each element works, and what the computer will do when you use them. This will ensure that you can use each element effectively, and understand how they relate to each other.
Your ability to work and engage with abstractions is important now. Programs are abstract — they are our ideas and thoughts manifested in code. You need to be able to hold these imaginary entities within your mind so that you can engage with constructing the code that will make them come to life.