This question has been ranked as number 1 in the “Million Dollar Question” segment (We do not know the sources!)
Which Open Source programming language is better for product development or for legacy technology migration?
“Java is the greatest language ever and powers the Internet” “Ruby on Rails is the fastest way to get to Minimum Viable Product”, “Python is more sophisticated”. As a CxO of a product company/start-up, if you want to know that answer to that, then it lies on 2 important aspects: the Characteristics of the Language and your Local Ecosystem.
Characteristics of Languages
The long commercial life and wide adoption of Java has created a robust ecosystem of documentation, libraries and frameworks many of which are aimed at e-commerce, security, and complex transactional architectures. There are experienced Java developers readily available regionally and globally both as contractors and full-time employees. The open source community embraced Java early on, creating an abundant free marketplace of Java solutions and tools.
On the flip side, concern over licensing rights since the acquisition of Sun by Oracle has cast some doubt for the future of the language and given rise to the phrase “Java is dead, but the JVM lives on”. Java can also be resource-intensive, requiring more memory for example, as compared to other language.
Python is an open source interpretive language that has been embraced by many in the scientific community for its ease of learning and large set of scientific libraries. Django is a Python framework created for online newspaper publishers and powers popular start-ups such as Pinterest and Instagram. Django and Python together are mostly platform independent, although developers must still design programs specifically for independence in order to run on both Windows and Linux platforms.
One caution is that Python is notoriously difficult to scale across multiple centres on a single machine. This is due to the limitations of the Global Interpreter Lock (GIL).
Ruby and particularly the web framework, Ruby on Rails, is also a popular interpreted language for start-ups. Ruby has some comprehensive training available online, both for beginners, with no coding experience, and experts in the field. Ruby has a repository of reusable libraries easily maintained and deployed in the form of RubyGems. Like Python, Ruby is suitable for automation with Puppet, which is an open source configuration management tool written natively in the language. Ruby powers popular web properties, including Airbnb, Github, and Groupon.
One valid concern is that Ruby does not scale up well on the server side for large numbers of requests to the application. Twitter famously made a migration from Ruby to Scala in 2010 in order to handle the back-end requirements of their explosive growth.
One of the early popular languages for Internet applications and websites, PHP has a vast ecosystem of developers, frameworks and libraries. Major companies including the likes of Facebook, WordPress and Magento are part of the PHP alumni. Because of the age of PHP and its long history, the quality of PHP code has a great variance.
PHP doesn’t have rules like compiled languages or strict standards as seen with Python, but rather guidelines available from the developer community. As a result, larger projects can become difficult to maintain, a problem known as “Spaghetti Code.”
Because Node.js is newer, people with strong skills may be harder to find and more expensive to employ.
Outsourcing is up for grabs but you will definitely want to have a “Leader of the systems” within your local ecosystem. Organizations should properly balance the factors such as finding good teams, time taken in extending efforts to offshore, shorten development cycles and increase the agility. The availability of a skilled workforce will vary by skillset for example, organizations can find many PHP developers and they get very little or no access to Node.js people. Ultimately, your costs for developers will go up if the skills you need are not readily available or are in high demand.
So which technology is the best?
- Language Characteristics: If you are developing for the cloud, stick with interpretative, dynamic, open source languages for rapid and more cost-effective development. For enterprise applications that have critical security requirements or must integrate with legacy environments, compiled languages may be better.
- Problem Domain: Take a look at the languages that are being used to solve your business problems and that is supported by the expanse of libraries. Somebody might have already solved 80% of your problem and have a general license available for you to build on.
- Local Ecosystem: Research your local community to understand if you have a ready supply of skilled workers that can be tapped for affordable talent.