Choosing the right programming language
Choosing the right programming language for your next project is a tricky proposition, perhaps more so these days than it was in the past. There are many factors to consider - development cost, availability of developers, infrastructure costs to name but a few.
Going for well advertised options such as Python, Java or C# might seem like a good idea at first as development cost and developer availability are unlikely to be major issues. While these are fair arguments - there is more to consider when choosing the foundational technologies for a project.
Platforms such as Dropbox for example found out the hard way that Python may have saved them money when first starting out, but it was costing them (and the environment) considerably. They chose to compensate by investing in the creation of a new run-time environment called ‘Pyston’, while being forced to rewrite critical parts of their systems in C++ and Go for a great deal of the heavy lifting.
Facebook faced similar issues having started out with PHP - only to find a bottomless money pit awaiting them as their number of users increased. In the end they were forced to develop a new run-time environment and a special dialect of PHP to compensate as their codebase was simply too large to port to a better language or environment.
New projects would do well to plan for scale ahead of time - instead of needing to fix things later on.
With exciting technologies such as FaaS / Serverless to come along, languages like Java and ‘.NET’ are starting to show deficiencies as well - deficiencies that aren’t easily rectified. They require special run-time environments to run, that are not only quite large but rather slow to load. This means considerable delay when application containers are copied, built and bootstrapped - making them far less suitable for FaaS unless instances are kept on standby to compensate; essentially defeating the whole purpose of elastic cloud computing.
Languages such as C++ and Rust would seem better choices, and they certainly are for the most part if it wasn’t for issues during development cycles. While their runtime performance make them superb choices, sourcing developers at an affordable rate is likely to prove a real challenge. They’re also quite slow to compile - increasing development and CI/CD costs considerably. Though once a project reaches maturity, the performance, security and scalability of Rust are unmatched.
Semi-managed languages like Go or Swift offer an alternative as they achieve comparable run-time efficiency to Java and .NET in most cases, while allowing for relatively fast development cycles as with most scripting languages. They don’t require a run-time environment as Java and .NET do, making them far more suitable for elastic cloud computing. Developers are also more likely to be available at lower rates than C++ and Rust. In terms of flexibility however Go has Swift beaten as it is available for a wider range of operating systems and architectures.
Choosing the right programming language for a project is still a risky proposition, but it’s becoming more and more obvious that scripting languages and fully managed languages are best avoided. The way forward is clearly elastic computing wherever possible, at least for applications - whether it’s in a private or public cloud environment. The good thing is that saving money and saving the environment are very much connected in the cloud space, making the implications of choices a little more transparent.
We’d recommend choosing Go or Rust for your next project given all the considerations, but then we’re biased towards the environment. Whatever you choose, make it green - the colour of money as well as grass.