Ever since the world embraced software development and programming, few issues have drawn more contention and divisiveness than the choice of programming language a developer levitates towards. I mean, historically, software developers and programmers have been identifying with their language of choice. In the midst of this identity crisis, objective facts are freely mixed up with subjective preference, making it hard to draw clear boundaries between what works and what doesn’t. To further complicate the issue, the last decade has not only witnessed an explosion in the number of languages developers can incorporate in their day programming endeavors, but also the number of languages that can be leveraged in the production process. As a result of this outburst, language affiliations have evolved to become more broadly and loosely spread across different frameworks, platforms and code bases. And thanks to this transformation, developers and modern projects have become tremendously polyglot, presenting the autonomy and freedom to leverage on more libraries and languages than ever before.
Even so, informed choices still have an indispensable part to play in the labyrinth that is programming. For that reason, it’s time to narrow down our focus to two of the most prominent survivors of the 1990s. Python and Java!
And that leads us to the big question!
Honestly speaking, such a question is hard to approach because there can’t be a definite answer. However, two things for sure, both have different origins and are associated with openness. For this reason, it is imperative to maintain an open mind when trying to figure out which way to go. Read on!
Of the two languages, Python is the eldest having been released back in 1991 by its inventor Guido Van Rossum. And since its inception, it has been an open source programming language. Today, the PST is responsible for the management standardization and design of Python and its libraries, while the PEP directs its development.
Python 2 was introduced back in 2000 while python 3 was made available for developers in 2008. And though the two versions are highly compatible they are designed with different functionalities and syntax breaking capabilities to be treated as different programming languages. Instead of retrofitting newer ideas and trends into python 2 (which would end up compromising and complicating the entire language) engineers approached the development of Python 3 as a new language which had learned from the shortcomings of Python 2 to become a better language. At the time of this writing, Python 3 version 3.8 was the latest release. The development of python 2 continued separately and culminated to version 2.7, which, according to the Python Software Foundation will not be receiving maintenance after the year 2020.
The most prominent feature with Python as a programming language is that its syntax exemplifies the philosophy of simplicity and readability. Its regular and simple style encourages consistent code layout and brevity making it a darling of novice developers looking to test the waters of programming. Its readability can be attributed to the fact that it was originally developed as a scripting language, exemplifying the UNIX philosophy of creating new programs from old ones, as well as leveraging existing code directly. This readability and simplicity are possible due to Python’s dynamic type system.
Being an interpreted language compatible with several platforms, Python is an ideal portable option for almost any programming project.
CPython, which is basically Python’s reference implementation scripted in C is the most popular since it is compatible with several platforms. Other developers have also built their own implementations. For instance, IronPython is scripted in C# and facilitates a close integration with the .NET runtime.
All in all, Python is a popular general-purpose programming language, built with an emphasis on object-oriented model. However, its object-oriented core doesn’t automatically imply that object orientation is the most popular programming style in Python. It is also designed with support for modular programming, functional programming and some aspects of procedural programming.
Fun Fact: Python’s name comes from a British Blockbuster comedy group known as Monty Python, while it’s incredible amount of humor can be found speckled throughout its libraries and documentation
Though never released until 1995, Java’s story goes back to 1991 when James Gosling and other developers at Sun Microsystems started compiling a language that could build interactive TV systems. The developers released it on the fanfare that it was a highly portable internet language, especially for browsers. Today, it is far away from where it started and its original name Oak.
What made Java attractive then was its relative efficiency and portability. Despite not being a native language like C++ or C, it excelled as a compiled language. And unlike purely interpreted languages like Perl and Python, its execution model is machine oriented.
Honestly, Java is more than just a programming language with libraries. As a matter of fact, we can call it a virtual machine, which consequently makes it an ecosystem. The JVM or Java Virtual Machine is a portable and idealized platform which runs Java code. Instead of worrying about having to port code to new platforms and hardware Java’s WORA does the work for you. As long as the Java Virtual Machine is running, any code compiled in its Bytecode can run and interact effortlessly with anything scripted for the virtual machine. Several JVM languages exist. These include the functional Clojure, the hybrid Scala, the script like Groovy, and a variant of python known as Jython.
On the functionality side, Java is object-oriented. Its C++/C like syntax is familiar with most programmers. Being dynamically linked, it allows new code to be run and downloaded but doesn’t allow it to be dynamically typed. As a programming language, its evolution has been very low. For instance, features that support functional programming have been added only recently. To be precise, the philosophy of the language and Virtual Machine has been focused on backward compatibility.
After Sun was bought by Oracle, Java and its compiler were made open source. Since then, its development is guided by the Java Community Process which comprises of individuals and companies outside Oracle.
With that in mind,
Well, let’s break them down into categories.
Despite the fact that performance is not an issue with software, it should always be taken into consideration. When database access and network I/O costs dominate, the precise efficiency of a programming language is not as significant as other aspects of design and technology choice, especially on its overall efficiency.
Neither Python nor Java is designed to support high-performance computing. However, when it comes to performance, Java has the edge by design and platform. And though some of Python’s implementations are custom designed to support performance, portable performance is not a field where Python excels. Most of Java’s efficiency can be attributed to the optimization of the virtual machine execution. When a program runs in Java, the Java Virtual Machine translates the bytecode into native machine code hence the speed. This just in time capability is why Java’s performance rivals that of many native languages
Unlike Python which is resolutely a sequential language, Java has been supporting concurrency since its first release as a programming language. This feature makes it possible for the language to leverage on current multi-core processor trends since Java code is more readable in such a situation. In python, the Global Interpreter Lock or GIL is its chief interpreter. The problem is, CPython is not able to handle this scaling. This is not to say that there are no Python interpretations without hits restrictions. They do exist, however, relying on them compromises the portability assumptions that Python code is anchored on.
More often than not, the choice of a programming language is not about its intrinsic qualities or design. I mean, programming languages are built to code and such code has an underlying context in history, economy, business, skills, software architecture, and development culture.
Systems draw momentum and sustainability form their mother technologies. As a consequence, changes can be prospected to follow the path that has already been laid down by their incumbent technologies, shifting incrementally and gradually as opposed to revolution and rewriting. For instance, a Python 2 code base is most likely going to be compatible with Python 3 instead of a rewrite. On the other hand, the back end of an existing Java project will grow its functionalities with more Java code by moving to a newer version of the language or through adding new features in other languages that are compatible with JVM such as Groovy and Scala.
Java’s verbose coding technique and its long history with the enterprise implies that its legacy systems are more numerous and larger than Python’s legacy. However, it is not surprising to find out that glue code and scripts that hold IT infrastructure in place are built with Python, giving it an upper hand in this category. Nonetheless, the two languages have legacy problems, only that they present themselves differently.
Development trends and culture have benefited both Python and Java. And by virtue of projects working with java its community and publications using Java as their Lingua Franca, it is more closely associated with agile development. However, in the programming world, no community is easily defined or exclusively static. Python has also had a taste of its own agile space which has fuelled its rise in popularity. One of the biggest reason responsible for this meteoritic rise is the DevOps movement.
On the other hand, Java enjoys better consistent refactoring when compared to Python. This can be attributed to its predictability, automation, reliable and a wide availability of IDEs for Java development which include NetBeans, Eclipse, and IntelliJ. On Python’s side, its more dynamic approach facilitates a different technique of agility in code. It focuses on fluidity, experimentation and brevity, fields where Java is considered a rigid option. Nevertheless, this model can also be a stumbling block to refactoring in Python. With its culture being in favor of a wide range of IDEs, the expectations of automating refactoring are slim.
The early introduction and subsequent popularity of JUnit and its support for test-driven development implies that of the two languages, Java is the most enthusiastic for unit testing of any language, thanks to the inclusion of JUnit in most of its IDEs. Nevertheless, Python’s origin as a scripting language and the incorporation of test features in all of its standard libraries implies that it is no stranger to automated testing found in contemporary development. However, it is most likely to be integration instead of unit testing.
Many at times, the language choice a developer makes is influenced more by its application skills as opposed to the software itself. I mean, staffing is more than just tooling and design. If the appropriate language for the job is one that people have no skills in, it is probably not the right language for the project after all. However, when all factors are held constant and programmers are willing to adopt new technology, everything equalizes and it will be beneficial to embrace the new technology.
Under Java, the bitter pill of its codebase can be sweetened by the fact that a developer can adopt another JVM programming language such as Clojure or Groovy to handle automated testing or by looking for solutions outside java like leveraging Python to run operations within the system.
Another dimension of the staffing issue is the skills market. Both Python and Java are listed in the TIOBE Index top 10 programming languages. For a long time, Java has been ahead of python in terms of popularity. However, Python has experienced an exponential growth that is prospected to grow even more and ultimately overtake Java in terms of popularity. In the light of the philosophy follow what you know, the two languages have a strong base in education. Java is commonly being used in universities while Python is being used to teach high school students. This means that current graduates with IT as a course most likely have the two languages listed in their résumés.
Existing software systems, choices, and skills dictate the programming language to be used in a particular software architecture. Subsequently, software architecture is all about reuse, libraries, and integration. In most cases, it is the technology that developers want to leverage on that dictates the choice and not the other way round. In other words, a software architecture built with Python won’t make significant progress with a java only development team.
Both Python and Java have a wide range of open source libraries rich in code from companies and people with simple solutions to uncommon problems. Luckily, most of them are ready to freely share the code with their respective community. Indeed, we cannot deny the fact that both of these languages have significantly benefited from open source development and respective online forums.
When the issues of reuse, legacy development skills and performance have been solved, most architectural decisions can still tolerate the approach of open language. For this the introduction of Microservice architectures, a technology that allows internet facing systems to be divided into smaller cooperating processes, making the choice of a programming language localized, rather than a dominant decision in the entire project.
Both Python and Java are in for a long haul. Together with their development communities, they have evolved and become more and more popular since the 1990s when they were first introduced. Over time, the two have found new niches and even replaced other programming languages and at times, competing in the same arena. And like I stated at the beginning, they are all associated with openness. For this reason, it will be advantageous for teams, developers and companies to keep an open mind when deciding the language to incorporate in there software development.