Deep in my heart, I am a total nerd. I am proud of it.
My father taught me how to write the first little BASIC programs at age five or six on a Commodore VIC-20. I got really into coding at age 12 and taught myself to write software in Visual Basic. I developed the usual suspects: vocabulary trainer, floppy disk organiser, you name it.
At age 14 I developed my first 80C32 micro-controller board, designed, etched and soldered the circuit board and developed a 2-line dot-matrix display driver in assembler. A year later, in ´95, I discovered Linux and taught myself to write Unix software in C and got really deep into TCP/IP networking. At age 17 I was somewhat of an expert in developing networking software in *IX based environments and worked in IT projects for international corporations parallel to high-school.
To me learning how to code was a truly exciting journey. I got totally immersed in the problem I was trying to solve. I remember how complete afternoons, days and nights just flew by when I was trying to crack the next nut. Books about programming languages, network protocols and hardware components were with my virtually every minute of my day. I had the steepest learning curve I have ever had in my life thus far. And I learned just out of curiosity, not because I had to.
I believe that learning basic programming skills should be on every kid‘s educational agenda. It provides wonderful opportunities to develop valuable skills, even if you do not plan to pursue a career in IT.
Learn how to break large problems into smaller pieces: Every piece of software you write is a solution to a problem that you or someone else posed. Even if the problem is artificial and nobody really needs the software you develop (nobody used the software I developed in the first years). The programming language and operating system provide a fixed framework of tools that you may use to solve the problem at hand. This restriction helps you to structure the problem rigorously. You have to thoroughly understand the problem you are trying to solve. Code is always 100% explicit. If you understand only 95% of the problem you‘re trying to solve, you‘re likely to solve the wrong problem. Thus programming encourages you to think sharply.
Learn how to communicate complex thoughts: Programming languages are just… languages. And coding is communicating your thoughts in a programming language. As in natural languages there are many ways to say the same thing. But expressed in code a statement is always right or wrong, working or not working, and it is doing exactly one thing. There is no space for interpretation. Speaking „code“ teaches you to express your thoughts in an unambiguous way. And that is a great skill, especially when you are not talking to a computer.
Learn how to educate yourself: Every software developer in the world will tell you that it is part of their day to day job to teach themselves new skills. You constantly find yourself in situations where you have the feeling that there should be a best-practice way to solve the problem you‘re facing. That there should be a method suitable for a given task. That there might be an algorithm to perform a given calculation. You start searching, distill a lot of information, play with possible solutions and select a way to go. Whenever you go through this loop, and it may happen many times a day, you autonomously acquire new knowledge. And this ability is one you will develop even when you acquire just basic coding skills.
Practice endurance: When writing code you will soon encounter a situation where your program is not doing what you think it should be doing. And you can be quite sure that the reason for this is somewhere in your code. But you can‘t figure out what is going on. It can take days to figure out the solution. And you will typically feel very stupid after you found it, cause it now seems so obvious. These experiences develop your endurance like nothing else. You know there must be a solution. So you keep going.
Although these are very useful skills, the biggest advantage of learning how to code at a young age is that it is a great source of self-confidence. It gives you the trust that you can build something and that with diligent efforts you can solve big problems.
For me personally the coding skills I developed during my high-school years were the biggest asset I had when graduating. I went to a fairly bad school where the vast majority of teachers I had to learn from were not at all interested in the subjects they taught and thus were unable to spark any interest for their topics. Problem solving was not on the agenda. Teaching myself how to code is what allowed me to develop a feeling of empowerment and let me feel the joy of diving deep into subject-matter. And I believe that most people who take the effort to learn it will appreciate it the same way I do. No matter if they want to go into computer sciences or not.