My daughter is 11 months old, recently she started to stand up and walk baby steps by her own. Most of the time she has to use sofa to help her, and she falls down in all different ways all the time. So we have this idea that to protect her, we can buy some kind of special helmet to ease the pain when she falls down. But after some considering we decided not to. Firstly, the baby doesn’t like wearing anything on her head. Secondly, if she wears it, yes she won’t feel the pain when she falls down, but she also won’t learn that hitting the ground with her head will hurt.

Since I’ve been learning C recently, it hits me suddenly that learning programming is the same thing. C originally being designed with the philosophy that programmer knows what he/she is doing and is always right, is a very sharp and powerful tool. It gives you the basic aid to let you do the job and is easy to learn. But to master it you have to practice for a long time. Lisp also has the same feeling, the rules are simple, but to use it effectively, you need to practice a lot and deep understanding. So as many good things in life, music for example, the theory is simple, but to compose good music is very hard.

I’m also looking into Kotlin recently, the feeling is totally different. It to me is like a cookbook language, meaning it has pre-built solution for a lot of known problems. Such modern languages has two problems in my opinion:

You will be limited. Using high level language is more like mapping a problem into a language feature. In a way programming in Kotlin is like walking with helmet all the time. It is probably true that you can walk much faster than average people, but gradually the helmet becomes part of you. At first you may be very happy about it, you may even laugh at those people walking warily on the street bare-head. But you will occasionally see people who run so fast and so beautifully and pass you like wind. You know that with the heavy helmet you wear now, you will never be that person, or you don’t need to or want to. So no matter how they advertise the latest and shinest language, the truth is that the higher level the language is, the fewer problems it can solve efficiently. Less fun. One thing I think makes things fun is the uncertainty. I don’t know if programming is the right place to go for fun if you mean serious business, and most business are boring anyways. But it is always less fun if you are told that there is only one true way to solve a problem. If you are told so, the truth is that the person who tells you so is lying. Design pattern is the typical example. They are prebuilt solutions to certain problems, but they should be used with caution. Almost always they cannot be applied directly without tweaking.

And if you think about it, everything in the world is business. How many people can do C# means a lot to Microsoft. How many people can do Kotlin means a lot to Google. If google can make Kotlin more easy to use on the surface then it means that more people can adopt it more quickly, which means in some sense an advantage over Microsoft.

So the verdict is: SCREW THEM ALL!. Do what makes you feel good and life goes on :)

P.S. If you want to get out of the “boring” web and mobile world, look here:

http://nand2tetris.org/

https://handmadehero.org/