Martin Vysny is the software developer with whom we discovered the magical world of pure children’s curiosity in the first part of the interview. Today we are going to be a bit more technical, with the aim that everybody can understand what we are talking about. I was curious mostly about programming languages, but this article covers much more including topics such as Artificial Intelligence or what good code looks like.
Before we start, let’s clarify the most common terminology: the so-called “business logic” and “display logic”. Display logic is what we see as users on the screen of our computers, phone, tablets, for example a button which allows you to pay your bill. Business logic is a program that runs on a bank’s servers, making sure that the bill is paid. Before we will start talking about programming languages, it’s important to know that years ago, both business and display logic were running on your machine, and this was called a “fat client”. Nowadays, it has become divided.
“In the past everything ran in MS DOS or Windows where coders had to know C and C++ languages, maybe some of them used Pascal. But if somebody coded differently, he/she was an outsider. Especially for a beginner it is easier to swim with the flow, because you have more documentation or manuals from which you can learn. When you become an expert, you naturally choose what suits you and you will choose a language you like.”
A lot has changed since then. The fat client approach is no longer used and everything moved to the browser. Because of that, coders usually use different languages for programming display logic and different one for business logic.
“For display logic, the most used language nowadays is JavaScript. Even though I think it is a terrible language (laughing), it’s everywhere and therefore is good to start with. You can learn the language, then recognize its limits and maybe look for other languages without those limitations. On the server side (business logic) JavaScript is also becoming more and more popular, but at the moment there still rule Java and C#, maybe Python.”
Martin recommends starting with programming languages that are the most popular. It’s also a good idea to choose the same language that your peers and friends are using, because they can help you out. After that every coder has to find what he/she prefers and what suits him/her the best. There are a lot of languages to choose from and everyone has a different style and favours something else. But what are the essential differences between languages?
“I personally prefer this kind of categorisation: we have statically-typed (Java, C#, Kotlin, C, C++, Pascal) and dynamically-typed languages (Python, Ruby, Groovy, JavaScript), and we have object oriented and functional languages. I prefer statically-typed languages which use a mixture of object oriented and functional approach.”
I can see your confusion, so I asked again, what does it mean? Honestly, it is difficult to explain it in a way a layman would understand. While Martin was trying to explain it to me, I had a feeling that I somehow got it. But how to write about it, it is a different story…
“The “static versus dynamic typing” thing, that’s something completely else and it’s tougher to explain correctly, so let’s try a funny parable. Say you have a garage which services cars. In the static typing world the garage can only service cars, it is written upfront on the garage page and if you try to walk in with a duck then the serviceperson will throw you out. With dynamic typing, there is a web page which says “we service things” and so you walk in with a duck, the serviceperson picks up a wrench, tries to remove wheels off the duck and the Matrix explodes.”(laughing)
Martin knows and uses different programming languages, even if he prefers Kotlin. I was curious to know if a coder can survive with knowing one language only. And also if it is easy to learn a new programming language.
“It really depends on what you want to do… One language can be enough. If you want to do the client-side display logic only (the so called user interface), you are completely fine to know just JavaScript or TypeScript. But still you need to learn at least 2-3 languages. Because even if you use JavaScript for a user interface, you also need at the same time to know the CSS and HTML language. I personally recommend learning even more languages, because it will open your eyes and you will also see weak points of the language you had used before. For example I was using Java for 15 years and I was quite happy with it, oblivious to other people telling me about its shortcomings. 5 years ago I tried Kotlin, and o boy it was an eye-opener – I saw the Java ecosystem as being ridiculously complicated; I saw the Java language itself trying to focus on academical purity instead of being helpful to people using it. And whether it is difficult to learn a new language? I think if the languages are similar, let’s say both of them are object-orientated static typed languages sharing a common ecosystem (tools, libraries), then it is not that difficult. For example I had used Java and a few years ago I learnt Kotlin and it was pretty easy, because they are very similar. But if you know Java and you would like to learn JavaScript, which is the other type of language, it is brutal. You are starting almost from zero and you have to learn everything.”
Usually there are more coders working on the same project. They might not use the same programming languages. Is it a problem when a team consists of different programmers using different languages? Martin’s perspective is that teams where coders use different languages are inevitable at the moment. He also adds that it might be dangerous in situations, where people start to feel superior because they use certain language. Is it then possible to say who makes a “good code” and who is a “good coder”?
“This is a dangerous question. (laughing) For different people, good code is something different. For me, a good code is simple, readable and maintainable. There have to be comments. Because the simpler you make it now, the easier it is for you to come back to the code in one month or a year later when you naturally won’t remember it anymore. I like a sentence I once heard: “Code is like a love letter that you write to somebody who will come to code after you.” (laughing) People should simply avoid all unnecessary complexities…”
I have heard Martin swearing a lot while working. For sure at the moments when he crosses something else than a “good code”. So, when he gets angry?
“I get angry in a situation when there are no comments, or only poor ones and I don’t know what this code is supposed to be doing. Or when some part of the program does a lot of activities and it’s all unclear. Or when there is massively used inheritance (a feature in the object-oriented language), it is also not sustainable. And of course, when I am the guy who should clean this mess up. The problem is that I can’t remade it as I wish, because nobody pays me for breaking up the existing code… Of course, we sometimes do it secretly and if the company is reasonable, they also do it officially. They understand, it is good to check the code 2-3 times and to adjust it to be simple, readable and neat. Companies that do not wish to do this are just accumulating their technical debts and it will catch them up in the future.”
To make a simple and neat code is very important for Martin. He also finds it important to be surrounded by people with the same attitude.
“When coding is done simply, it is a pure joy to see how the program is growing in front of your eyes. It’s simple, it’s reliable and the development is fast. You don’t have to have a big team and neverending meetings going on, where people just trip and fall over bad code. You can do it much faster and much cheaper. And the whole product is 1000 times cheaper, because you either don’t need to have a big team. Or if you need to have a bigger team, you don’t need a crowd of managers. If you need some menagers, you don’t need Scrumleaders and all that bullshit. You can create wonders simply by having four great coders. They don’t need to be organized, because they know what they are doing and in that case money is saved. But to reach such a point through all that marketing that’s going on in IT, it’s very very difficult.”
Currently a hot topic in the IT sector is artificial intelligence. Even though Martin is no expert in this area, I am sure he understands it much more than me. Naturally we jumped into this topic.
“Artificial intelligence (AI) is a big thing. There are some problems that cannot be solved otherwise than by AI, e.g. computer vision, objects recognition from a picture, automatic car driving etc. But AI started to penetrate other areas of our lives, where it may not be necessary to use it. As an example: personalized search on Google. This is AI and it is dangerous, because it holds you in your own bubble. It shows you only the information you are interested in, which eventually becomes purely one-sided. It is something akin to propaganda, but much stronger. AI is already used as a weapon precisely because it is great in creating bubbles… And those people, they’re not aware how they are being manipulated by trolls and ruled as puppets by people using AI toward their ends. And this is very dangerous. Because what is a democracy if not people voting according to their beliefs? If you manipulate them, then democracy is useless. Manipulated people vote. And AI is a very useful tool in the wrong hands… AI as a technology is innocent in itself; it’s simply being misused.”
The power and capacities of hardware (computers) are essential for AI. At the moment, our computers are simply slow.
“Power of computers has been growing double exponentially. In a few years, it might be possible that supercomputers can emulate the human brain in real-time. And if the growth continues, you will have such power in your mobile phone, in your pocket. Today it is very difficult to even teach a car to drive itself. We barely have enough hardware power for this simple task. But in 20 years everything might be different… Compared to this double-exponential growth, our own evolution as human species has basically stopped. AI will replace us in demanding jobs, the people will not be able to keep up, there will be frequent burnouts.”
Coding is a very mentally demanding profession. Therefore I wish Martin and other coders to take good care of their mental health. It’s good to be disconnected from all the electronic equipments and just to get your brain on vacation…