Choosing the right programming language
There’s not a silver bullet to state the properest programming language for each project. On the other hand, there are some languages that will provide a better solution for specific problems.
There may be multiple programming languages right for each project, but there’s only a single right way to build Software though.
Common approaches
In my over 15 years of career, I’ve been fortunate to work with a bunch of programming languages and also play with others else in my side projects. Most companies follow one of the following approaches:
- Same language for all the projects
- Freedom to choose the language for each project.
Regarding these two approaches, I consider that It’s important understand both the pros and cons of both of them.
Same language for all the projects
pros
- Re-usable code through the usage of core libraries.
- Generic CI / CD pipelines and testing strategies.
cons
- Software lovers don’t have fun. As a consequence of this, some of them could leave the project after a few months or years.
- Sometimes, the language is a really bad fit for the project that needs to be built.
- Usually, this decision is taken by people in a leadership role who are not up-to-date and they are not in line with the leading edge technologies.
Freedom to choose the language for each project
pros
- The people in your team will have more fun, especially those people who love coding.
- Team members are more committed since they develop an ownership feeling over the projects and the company.
cons
- Code is harder to maintain. The possibility to homogenize practices and the code is almost impossible.
- CI (continuous integration) and CD (continuous deployment) pipelines become complex and harder to follow.
- There is no possibility to reuse code or share core libraries between projects.
Choosing the right (or discarding the wrong) language for each project
There are some factors or requirements that must be having into account to choose the right language for each project.
Technical requirements
There are some technical requirements or architectural concerns that will determine whether one programming language fits better our project or not. Let’s go through some examples below:
Technical requirements
- Performance: Sometimes improving the performance of a product is a MUST and not only a NICE TO HAVE. In my humble opinion, the best strategy is to write some PoC’s (proof of concepts) to figure out the language that performs best.
- Integrations: We need to integrate an external library. For instance, let’s imagine that we need to use a Graphical component that is written in C. Or we need to implement a new module for an existing database engine.
Architectural concerns
- GraphQL API: I would bet on NodeJS on the backend side. I have built GraphQL API’s with NodeJS, Java, Go, and Python, and even though there is a wide range of languages that can be used to do it, I consider that NodeJS is the right candidate.
- Artificial Intelligence (AI) and Data projects: Python is the right candidate when we need to work with big matrixes and make calculus with them. As a consequence of this, most AI libraries are implemented with Python.
- Web assembly: We can use several languages to build web assembly components, but Rust is meant to be the best one for this kind of project though.
Non-Technical requirements
Apart from the technical requirements, we must take into account anon-technical ones. I will enum a few of them:
- The skills of the people in our team and the learning curve to introduce a new language. We could consider Scala, Kotlin, or even Dart If our team is experienced working with Java but It will be harder if the people in our team are used to coding with non-typed languages such as NodeJS or Python.
- The budget to increase headcount. The cost of hiring specialists will vary depending on the programming language. For instance, hiring specialists in Java will be less expensive than hiring specialists in
Elixir
or.Rust
- The maturity of the language and the activity of the community around the language on the Internet. This could not be a handicap for R&D (research and development) teams but It will be for sure for those small teams with a limited budget working on projects with an agred go-live date.
What really matters
Apart from the above-pointed requirements and factors, I will enum the point that really matters to me to decide which programming language I will use for my next project.
- The code that we write can be run and tested locally.
- There’re good linters for the chosen programming language. There are guidelines of best practices and we follow them.
- There’s a big or growing community tsupporting the programming language.
- We chose the programming language that best fits the architecture and not the opposite.
- We can quickly perform upgrades of the language compiler or apply new releases with security patches.
- We can rely on the existing CI pipelines for projects that are built with this language.
Do you have a project in your mind and you need to outsource someone to build it? Or, do you need someone to lead the project? Don’t hesitate to contact me. You can reach me at hello@ivancorrales.com. Additionally, you could find more info about my services at https://www.ivancorrales.com