Not only new technologies emerge, existing ones also evolve or improve. Java 8 brings many features that have been already available for years in other languages (lambdas, default implementations, optionals) and Microsoft announced .NET is going open source.
The best programming language
Most of the time when I meet someone who wants to learn computer programming, I get the question: "What is the best computer language out there?". That's when I say: "It depends", and then try to explain how difficult is to give an answer. Every programming language (as many other things in life) has positives and negatives.
That question can be compared to answer which is the best food in the world. There is no one absolute reply, and it usually depends on many conditions.
It is well known that in the world of Banking, technologies are chosen in a rather conservative way. Security, stability and long term support are the winner factors, and this criteria also applies to programming languages. If you do a simple Google search you will find that most websites agree in the same most used list for banking: Java, C# (or other .NET) and C++.
The big boys, Java, C#, C++
Java, as expected, is used for many things. But one of the biggest areas is around web services. Many of the internal APIs and web applications of banks are running on Tomcat. Also, there are still Java Desktop Apps or some Applets out there. As impressive as it sounds, some banking Web Portals are still running as Java Applets as their main customer frontend portal.
One plus side of Java, is it compatibility and portability. If you develop a solution to run in a specific version of Java, it is guaranteed that it will run on all the subsequent versions of the language with no alterations. In other words, Java is crossplatform and does not introduce breaking changes with new releases. Because of this, it is a very attractive language to use in Banking.
C# is right on top with Java or C++. This is an interesting fact, since the other two have been around for more time. One of the reasons C# has been adopted this quickly is the fact that it is so tightly integrated with Windows. Many of the internal applications are developed in C# because it is very easy to integrate with other Microsoft products, like Active Directory and Office. And Microsoft knows how to do something really well: to create tools and environments that make developers really productive.
If you're working in a bank, and you are requested to develop a Windows application using Active Directory SSO, that hits a couple of internal Web Services to display some data, C# would be a very smart choice.
C++ has been always associated with real time, performance and efficiency. There are hundreds of debates discussing whether C++ is faster than non native code (Java or .NET). Since this is a very sensitive subject (like discussing what is the best engine oil for your car), I will only add that even being slower or faster than C++, I consider that the nonnative languages are fast enough to be used in many real time applications out there (e.g. Twitter is largely coded on Scala, which runs on the JVM).
In my opinion, there are more important factors to consider nowadays when comparing C++ with the other two, like speed of development, availability of engineers, cost of maintenance/debugging, interop capabilities, and others.
Dynamic and agile
Python is an extremely flexible language. It can be used to create maintenance scripts. data analysis algorithms and web services. But it also has downsides, like the slow execution speed of the runtime. However, since it interfaces very well with C++, in many cases it is also used to build frontends or layers of abstraction reusing many of the existing C++ codebase.
The main advantage of dynamic languages is the mindset of agility around them. Their community of developers, embraces the culture of building fast and deploying early. There are package managers and frameworks that allow developers to create any kind solutions really fast.
As an example, with Node.js it is possible to bootstrap a REST Api Backend in literally minutes. This is a great plus for building small, self contained projects, since developers can focus on the functionality and not the implementation.
What about architecture?
The architecture in which a project is going to be built also influences what language is used. If a Monolithic Architecture is chosen, then moving away from it can be a difficult task. The result of Monolithic stacks is huge code bases, developed usually in a single programming language. Most of the time it is unflexible and deployed as a whole (of course, there are exceptions).
On the contrary, if the architecture is based on (or migrated to) Microservices, then the diversity of technologies can flourish. Many different developers, with different background and expertise, can combine their efforts using the best tool for the job for each particular service. This is an ideal scenario given that there is enough time and resources to implement it. Usually this architecture takes more time to be put together, and it is more complex, but it is cheaper to expand and maintain in the long run.
For example, multiple backend services developed in Java and .NET, can expose a set of API endpoints to one or more frontends developed HTML5/JS or Python.
So, what's the best Language 🙂 ?
We've seen a very high level overview of the top languages used in banking. Although technology adoption in Banking it is usually slow, it catches up eventually.
The strong, static typed classic languages will be in the top list for a long time. There are plenty of seniors developers out there, the libraries, compilers and runtimes are very mature and they are supported by big companies (Oracle or Microsoft). Also there is already a big infrastructure already built on these languages.
What I believe will happen, is that we will see more Dynamic Languages entering into play. JP Morgan's Athena platform is built on Python, C++ and Java. Cases like this one will be more common in the future, and there will even be a point, in which knowledge of open source frameworks will be required in the job description.
Finally, I believe the generations to come of Software Engineers will be used to a much more diverse environment, with easy access to the open source community. Banks should embrace this philosophy and incorporate these technologies, at least internally. This will allow them to attract great talent and maintain a challenging and motivating environment for Software Engineers.