What programming language should I learn?

2 minute read

The first time I asked myself this question, I came up with an answer that sounded like this:

I want to learn how a computer works, so I better learn a “real” programming language. C is a real programming language. So why not learn C?

This is where I started to get of the rails and continued like this:

C is old. So I should probably learn something newer. C++ is newer. C# is the newest, so I will go with C#.

This newer is better approach led to lots of wasted efforts and stagnation. C# is a high level language, so I didnt make progress on my quest to make computers less magical for me. Also, it did not really help me to learn progamming. Learning C# means being thrown into an IDE. An IDE is a weird program that looks like this:

Visual Studio - Integrated Development Environment

Programming means editing text files, that are then read by an interpreter or a compiler. Programming in C# means something different. It means that your code gets to live in this small cell in the middle of the screen surrounded by walls of useless buttons and weird windows. It took a while for me to realize: What ever this is, programming is something different. Learning something new usually involves making something appear less magical. This does not work when it comes to computers. Computers are clockworks whose behaviour can be changed by words.

Victorian era lady, after she found out she could reprogram her watch to play angry birds

This is not just a metaphor. The first computer was a mechanical device. Sadly the second computer which was partly electrical and mechanical is lost to the second world war. No pictures or plans exist any more, but at some point this hybrid creature existed. The third computer called Z3 is already electrical.

source:https://c2.staticflickr.com/8/7519/15072736954_72660db438_b.jpg
Zuse Z1 - the first computer was a mechanical clockwork

We can change the inner workings of a clockwork by changing words. I think trying to make this fact less magical is a lost cause. We have to give up the notion that we can understand and learn this from first principles. In theory this is still governed by the laws of physics, but in practice understanding those does not give us a better intuition in dealing with this clockwork. To answer the question “What programming language should I learn?” in a more meaningful way, its a good idea to first explore the nature of this clockwork a bit more. The wikipedia page about the Von Neumann architecture is a good place to start: Von Neumann architecture All modern Computers are based on this architecture. Including the one that you are using right now.