February 27, 2013

When I was somewhere around 7 or 8 years old, my father brought home a computer and introduced me to it. It would be an understatement to say that this had a profound effect on the course of my future life. First he borrowed a Commodore 64 from his friend, then later he bought us a shiny new Amiga 500. Being a kid, I was of course immediately hooked to playing the games. But since we shared the computer, I also saw my dad doing his stuff, and I remember seeing these "beautiful graphics" on the screen, which he explained to me were "sine curves" (he was a math teacher by profession). I didn't know what a "sine curve" was, but it looked amazing to me. And no, he didn't "download an app" to do that, as many would probably do nowadays. He programmed a simple plotting program using the Basic programming language. And then he taught me how to draw using Basic. Like draw a circle of this radius in these coordinates, then a line from these coordinates to these coordinates, etc. While I didn't really know what a radius was, I did know what a circle was, and before I knew it, I was writing code to draw a stick man. It really wasn't that big a deal for me, and I really didn't think that I needed to graduate with a Computer Science degree first, or that I would need to be specifically trained for this by some professional organization. And I didn't know it was called \"Basic\" either. It was just simply cool to make the machine do what I wanted it to do.


Soon thereafter, I remember he brought home a new "game” that he introduced to me as "a game making program”. In retrospect, this was really a brilliant strategy. The name of the program was "3D Construction Kit”, which was in fact a sort of an early 3D modelling / programming environment. Yes, you could use it to visually construct 3D worlds, but then for the world to act in any way, guess what: You had to write code (this was a scripting language called "Freescape Command Language”, which I ended up writing extensively, but up to this day I never knew what it was called, I just had to look it up on Google earlier). So again, without knowing it, I ended up writing code there. And I learned a new programming language too.

Next time yet again he told me that he had a new "game making program”, and I continued to be thrilled. What he never told me was that this was in fact a full blown IDE development environment called AMOS. It was still using the Basic language. And so I went on using the "game making program”, blissfully ignorant of the fact that what I was doing was in fact "difficult and scary” (or was it?) and that many people had gone through university degrees to learn the things I was doing. I was just happy making a game. Later on I even borrowed a book from the library that described how to do scrolling, double buffering and stuff. And it's not that I was somehow exceptionally brilliant, because I wasn't, and still am not (although you could argue that my dad was). I'm just glad that there were no "helpful” people around me telling me that what I was doing was way beyond my level, because the important thing there was simply to just do it.

Today we live in different times, but not in fact so very different. One thing that HAS changed is that there are a LOT of "game making programs” now (or "app maker” programs), and they are not quite the kind that my father introduced to me. If you simply google for "app maker”, you get a long list of all these programs that are targeted for non-programmers so that they can easily make a "mobile app” (and the results of this Google search are by far not an exhaustive list). The common taglines for many of these can be something like "you don't need to be a programmer”, or "make an app in minutes”, or "without writing any code”. The essential objectives for the development of these app makers seem to be (1) the speed of "making an app”, and (2) the ability to do everything via drag-and-drop, without writing any code.

Of course, as everything, these app makers have their rightful place, and many of them are probably good for their particular purpose. Many of these app makers are developed by very committed people I'm sure, most probably doing these apps sincerely to help others and to improve the world, and where they do these things in this way, for the right reasons, absolutely and indeed they will find their rightful place. But we should not think that these app makers are in any way a substitute for real programming. The essence of these drag and drop tools is to combine existing components together in an easy to use manner, but they fall short of offering a way to develop anything new. One particular tool I saw recently highlighted in their marketing materials a particular app that was developed "in minutes” that would have conventionally taken tens of thousands of dollars to develop, and was quickly done with the tool just by combining "lego like” blocks. While this is of course wonderful, if your desired functionality is not part of the handful of blocks offered (and when I say handful, I mean something that can be counted with the fingers of two people), you can't do it. End of story. Change your design and requirements to meet the capabilities of your tool (which you paid for, and this tool is not cheap!). And while they probably don't offer any way to extend the tool, guess what you would need to do to be able to write a new block, if ever that was possible? You guessed it: Write code.

These app makers are fun toys, but at the end of the day, there is no value in not doing anything yourself. No effort equals no value.

On the opposite end of the scale as compared to the app makers, we have Dani Fankhauser, who writes on Mashable:

"as our world is more and more influenced by what we're able to accomplish with code, being a maker of such programs gives a person an advantage in nearly any industry.”

In the above-linked article, he lists apps that have been programmed by people who were not programmers, but who decided to learn to write code nevertheless, and then used their newly acquired programming skills to develop applications.

There is great value in this. If you choose to improve yourself and learn, and then use the skills you have acquired, there is tremendous value in that. While these apps may or may not be the greatest technological miracles in the world, and while the developers may not (yet) be the superstar master programmers, they are on the way towards something better, they are learning, and they are improving. Whereas if you just get a tool and use it, that's the end of the line for you, and the only improvement possible is to get a new version of the tool.

Kate Freeman also writes on Mashable about a non-programmer co-founder of a company who wanted a feature added in the product. She writes about this person that did not want to (or could not) wait for the development team to work on the feature, so she learned programming, and implemented the feature herself. In 6 days!

Can you see that? It is not hard to learn programming. Or a new programming language. A business person can do it, and a child can do it. You just need to have a little bit of enthusiasm for what you are doing (and with enthusiasm I don't mean the aspiration to earn a lot of money, but the genuine love for creating and learning new things). If you are in school, the teachers are there to help you, but without personal enthusiasm, you won't get very far; and if you're not in school, the personal enthusiasm would drive you to learn things nevertheless, which you can always do online. Tools are great. And easy to use is great. And easy to use tools do indeed have their rightful place in increasing productivity. With such tools, an experienced programmer can do more things, they can do them faster, and they can do them more effectively. But easy to use tools are not good for beginners. It is useless to have drag and drop editors, Intellisense or other forms of code completion or code generation if the programmer himself does not know how to write code yet. If the tool makes the program, then there is no value in the programmer, nor in the program.

But there is great value in learning, and in developing something that is new, using the gift of creativity that we have all been given. And I would want to encourage all programmers and non-programmers alike to focus on that: Learn new things. Create new things. And as you learn and create, you'll end up growing. Then you can further improve on what you've worked on. And in the long run, we'll move forward. And when we apply this specifically to mobile application development, please, let's all try to improve on our collective programming skills. Let's move away from the approach of automatically generated apps. It's not worth it. It will move us backwards.

What kind of application would you like to develop, and for what device? What would you need to learn? Leave a comment.


Share this article: