Our industry is overwhelmed with a number of programming languages. Every good computer scientist or a programmer interested in programming languages strives to create his own language. Today you don’t even need to be extremely smart to do it. Take a look at JetBrains MPS beast. With this tool, you can put together your own language literally in few hours. I believe it is important to distinguish languages which you can use for businesses and language which you can have fun playing with. And it’s better to avoid crossing the line. If you stop your education on widely used language like Java it is bad for you. But much worse things will happen to you and your company if you start or continue using for your business some exotic or old language, like COBOL or SmallTalk. Many people think that it does not matter what language you use because each of them can provide sequential, conditional and repeating operations and this is pretty much all you need. I was among those people few years ago. And while this is true, you can write almost any program in any Turing complete programming language, after trying working in both, a popular and exotic language, I would firmly assert: it matters a lot. And here is why.
Popular programming languages tend to form whole ecosystems around them containing tooling, plug-ins, frameworks, libraries, platforms, developers, vibrant communities with support forums, open-source foundations, vendors and companies which build solutions using all these components. This is millions of people and dollars, huge moving, innovating, self-maintaining organisms. A lot of energy and manpower. You can probably easily guess what languages managed to build such ecosystems: C, C++, C#, Java, JavaSsript, PHP, Ruby, Python. All others are lagging behind. If you develop software with programming language, which does not have powerful ecosystem, the following will inadvertently happen to you.
Main rule of software economics, which doesn’t build stuff which you can avoid building, will be broken. You will have no choice and will build all frameworks and tools on your own. Sounds great, but it is a very sad situation. You will spend too much of resources on maintaining these things, which are not related to your business directly. And the worst thing is that all these spendings will not help you with hopeless lagging behind others, who can cheaply buy or even take for free all those tools and frameworks. New programming technique has established? Like TDD or refactoring? Those who are in ecosystem just download tooling and start using these techniques. However you spend resources, which you could have spent on developing apps for your customers, on this tooling. Results are of the low quality, of course, since your resources are limited. All this leads to… Isolation. Since you can not cope with the pace of the industry, based on vibrant software ecosystems, you will isolate yourself from the rest of the industry. You will not introduce TDD, refactoring, continuous integration, continuous delivery, micro-services or any other development practice or architectural pattern into your organization. Consequences:
- StackOverflow will never help with any technical problem. Your developers will constantly distract each other asking for help because the world community is simply absent;
- Your developers’ effectiveness will drop considerably, they will spend most of their time fighting with the code and bugs;
- The technical debt will grow in frightening speed;
What comes next? Demotivation. Your people will start with great motivation at your company. They will try to bring the best practices they know about making software to your company. But very soon they will discover that they just can do nothing without proper tool support, which you can’t give because you have to focus on your customers, not on tools for you developers. People will stop learning and developing themselves. They will stop refactor and test their code well. Who cares? The code and architecture is a mess anyway. This situation will slowly formulate your technical culture. And this is a dangerous situation because best people will avoid working in such a culture while it will attract people, who don’t care about their craft. This will make your organization even less efficient.
From individual developer’s perspective, your career will be put in danger. If you develop software in isolation from the industry and use unknown, home-grown, low-quality technology, no one will be interested in paying you for your services. You will eventually become uncompetitive.
This same idea works for any other technology like framework or library or platform, not only for a programming language. For example, I have built this site using WordPress, which is extremely popular. Before that, I was maintaining my site made by myself. It was a total pain, I spent hours to make minor changes. This site, nechai.net, was made during two evenings after work. And it has absolutely EVERYTHING I can imagine putting on my site. All free and high quality. If I will need something specific, an army of companies and freelancers will be ready to help me for very small payment. Amazing, is not it?
Now, you can object, that giving such an advice puts innovation at risk. Yes, I agree. If you only do popular stuff, innovation will not happen. But is your business is to bring something new to the world of technology? If not, why should you or me care? My business was to create this site. I could have given a use case for some new progressive content management system, but I did not. Instead, I just seamlessly and fastly created what I needed to bring some content to you.
All right, so what is the conclusion? Well, it is in the name of this article. Program in popular languages for your business and remember, our job is to provide software, not to write code. Teach yourself programming using exotic languages. Don’t mix things up, unless your business is technology and you want to invest into some new raising shiny language (or framework or library or platform). Luckily most companies understand this. See how most of them stick to Java or C#.