I have dedicated my professional career to different disciplines (i.e., graphics, software engineering) within Computer Science. In this blog entry I would like to summarize some observations regarding computer languages. At different stages in life (e.g., college, work, self study, and business owner) most developers are required or just decide to learn different programming languages. An issue that frequently comes up with project managers is: “Knowing and using multiple programming languages is better or worse for a software developer?” In this blog entry I would like to provide some insights on how to respond to this question.
First let’s take a quick look at the descriptions of some popular programming languages. The descriptions have been taken and edited from the first few paragraphs from Wikipedia.
C is a general-purpose, imperative computer programming language, supporting structured programming, lexical variable scope and recursion, while a static type system prevents many unintended operations. By design, C provides constructs that map efficiently to typical machine instructions, and therefore it has found lasting use in applications that had formerly been coded in assembly language, including operating systems, as well as various application software for computers ranging from supercomputers to embedded systems.
C++ is a general-purpose programming language. It has imperative, object-oriented and generic programming features, while also providing facilities for low-level memory manipulation. It was designed with a bias toward system programming and embedded, resource-constrained and large systems, with performance, efficiency and flexibility of use as its design highlights. C++ has also been found useful in many other contexts, with key strengths being software infrastructure and resource-constrained applications, including desktop applications, servers, and performance-critical applications. C++ is a compiled language.
C# is a multi-paradigm programming language encompassing strong typing, imperative, declarative, functional, generic, object-oriented (class-based), and component-oriented programming disciplines. It was developed by Microsoft. C# is a general-purpose, object-oriented programming language.
Java is a general-purpose computer programming language that is concurrent, class-based, object-oriented, and specifically designed to have as few implementation dependencies as possible. It is intended to let application developers “write once, run anywhere” (WORA), meaning that compiled Java code can run on all platforms that support Java without the need for recompilation. Java applications are typically compiled to bytecode that can run on any Java virtual machine (JVM) regardless of computer architecture. As of 2016, Java is one of the most popular programming languages in use.
Python is a widely used high-level, general-purpose, interpreted, dynamic programming language. Its design philosophy emphasizes code readability, and its syntax allows programmers to express concepts in fewer lines of code than possible in languages such as C++ or Java. The language provides constructs intended to enable clear programs on both a small and large scale.
Python supports multiple programming paradigms, including object-oriented, imperative and functional programming or procedural styles. It features a dynamic type system, memory management and has a large powerful and comprehensive standard library.
Python interpreters are available for many operating systems, allowing Python code to run on a wide variety of systems. Using third-party tools, such as Py2exe or Pyinstaller, Python code can be packaged into stand-alone executable programs for some of the most popular operating systems, so Python-based software can be distributed to, and used on, those environments with no need to install a Python interpreter.
Swift is a general-purpose, multi-paradigm, compiled programming language created for iOS, OS X, watchOS, tvOS, and Linux developed by Apple Inc. Swift is designed to work with Apple’s Cocoa and Cocoa Touch frameworks and the large body of extant Objective-C (ObjC) code written for Apple products. Swift is intended to be more resilient to erroneous code (“safer”) than Objective-C, and more concise. It is built with the LLVM compiler framework included in Xcode 6 and later and uses the Objective-C runtime library, which allows C, Objective-C, C++ and Swift code to run within one program.
A year or so ago, I decided to use every day multiple programming languages. I was wanted to understand if it would be a positive or not so good experience. About a month ago, I decided to concentrate on a single language.
When using multiple programming languages, I was able to quickly think about different data structures and classes used in other programming languages to come up with approaches to solve the problem at hand. Not sure if that was because I had recently experimented with a variety of constructs on different languages. The downside was that I would have more syntax errors during the day. For example, during the years I have been programming in C in many different platforms. I have written millions of lines of code. When starting a source file in C I could not recall if I had to type the key word include, using, import, to get access to a header file (*.h). Of course, after a few minutes working in C, most (never say all) syntax issues and wrong names of library functions went the way of the dodo.
A few weeks ago I decided to work on a single programming language. I chose Java. After a few days, when presented with a problem, I could work a decent (never say perfect) solution with minimal syntax issues. The main issue between C and Java is that the first is a procedural / imperative language while Java is object oriented. For me, the mind set, the way one thinks when using these different types of languages is interesting. Knowing that objects are structures and one looses the advantages of OOP was quite revealing. Of course, developers get down to C when a time optimization is needed. Writing is C instead of C++ is not an approach I would recommend except for code optimizations.
In conclusion, when developing software, use the language that is rich in features you will need for the task at hand. If you are proficient in one procedural and one object oriented language, with the help of a good IDE (i.e., Eclipse), language documentation (i.e., Java Doc) and some web sites (i.e., Stack Overflow) you should be able to become quite proficient with a new programming language in just a few days. Becoming an expert takes experience and additional reading. That might take a couple or more years.
You always need to consider the expertise and abilities of your team and company policies. If the company is a Microsoft shop, using Java or Swift might not be well received. The same is true if you would like to use MySQL or SQL Server or Linux versus Windows. Always consider maintenance tasks. You might be able to develop the code for the task at hand and then move to something else. How would the team approach enhancing and addressing issues on code written on a different language. The same holds true when using different hardware or operating systems.
If you have comments and / or opinions please let me know.