Pages

Monday, July 2, 2018

Programming Languages: What are they, and which ones should I know?

Since my goal is to go into software development as a career, I believe having a thorough understanding of programming languages will be essential to my success.  In regards to my experience with programming languages, I have been exposed to both front end, as well as backend programming languages.  Through a weekend-long workshop at the Turing School of Software and Technology, I learned the basics of Ruby as a backend language.  We then touched on HTML, CSS, and Javascript as frontend languages.  The most extensive programming experience that I have lies in the Programming Concepts course I took at Ashford University, which taught Java.   There are a few questions that I focused on during my research into programming languages: 1) What are the best applications of different programming languages?; and 2) Which programming languages will I need to know to make myself marketable in the rapidly changing tech industry?

Programming languages are important because they allow users to execute complex tasks on a device, without needing to know machine language.  Programming languages are used to send commands to the computer, and to simplify the operation of devices (i.e. operating systems).  The instructions for a device are in the code, or software, which is written using a specific programming language.  The programming languages that we reviewed in our textbook are all very different from one another.  Machine language is the lowest level language, and the only language that computers can read and understand.  Machine language is simple binary code made up of ones and zeros.  Assembly language is a step up from machine language in that it reads a bit more like English; however, complex functions are not possible using assembly language.  High-level languages like Python are the most efficient and commonly used today.  They have similarities to English, but can allow for complex functions and logic, including conditional statements and loops (Vahid, 2017).

Understanding the evolution of programming languages is pertinent to understanding how computers operate so efficiently today.  Just as computer hardware has evolved over time, so has computer software, thanks to contributions from scientists, inventors, and mathematicians including Joseph Marie Jacquard, Charles Babbage, Ada Lovelace, Herman Hollerith, Alan Turing, and Grace Hopper (Vahid, 2017).  Computers used to be bulky and simplistic.  In fact, “Computers originated from telephone switches in the early 1900's” (Vahid, 2017).  These switches were used in computers to perform calculations.  A switch could have one of two positions—one or zero.  “A single 0 or 1 is called a bit. 1011 is four bits. Eight bits, like 11000101, are called a byte” (Vahid, 2017).  The specific sequence of bits determines how a computer reads and stores information.  The original switches were very large, and computers had to be manually programmed by adjusting the switches to the configuration required for a computation.  The first computer programs used machine language and punch cards; higher-level languages did not evolve until the 1950’s with the development of languages such as FORTRAN and COBOL: “John Backus introduced FORTRAN, usually considered the first high-level programming language” (Foster, 2017).  In addition, these high-level languages were only created after Grace Hopper wrote the first compiler, which allowed for high level languages to be translated into machine language (Vahid, 2017).

Computers today are much smaller and execute functions much more efficiently than they did in the past.  In fact, “beyond business and personal computing devices like PCs, tablets, and smartphones, computers exist invisibly in nearly anything electrical today too” (Vahid, 2017).  One of the most important pieces of computer hardware today that allows computers to be smaller, while maintaining the speed of operations, is the computer chip.  Rather than using big, bulky switches, computer chips are circuits comprised of transistors and wires, which have become much smaller over time.  According to Vahid (2017), “A 1960 IC (integrated circuit) could hold just a few transistors, but a modern IC can hold billions.”  Since transistors and wires are much smaller today than they were in the past, it is possible to switch between one and zero much more quickly, and the signal does not need to travel as long a distance (Vahid, 2017).  The combination of smaller computer chips, along with the development of high-level programming languages have allowed modern computers to operate much more efficiently.

There are many modern applications of high-level programming languages.  These languages are used to build websites, computer apps, mobile apps, web apps, browsers, operating systems, anti-virus software, and software within embedded computers (Vahid, 2017).  Some of the most common computer applications that have been built include the word processor, spreadsheets, presentation apps, and databases.  These applications allow users to create word documents, organize and analyze data, develop engaging presentations, and retrieve information efficiently from a database.  Without high-level programming languages, these applications would have taken much longer to evolve to what they are today.  In addition, without programming languages, we would not be able to establish network connections to browse the web and retrieve information through the internet.  Programming languages have allowed computers to communicate across a network, sending packets of information back and forth between different IP addresses.  Furthermore, to protect users’ privacy and security, there are now a variety of software packages available to defend personal and business devices against malware (Vahid, 2017).  Again, the use of programming languages makes the development of these protective products a much faster process.

In regards to programming languages today, they are fundamental in the process of software engineering.  According to Guzdial (2018), “a language can usefully constrain and facilitate programmers’ work to improve problem-solving and productivity.”  Will all types of programming languages be used in the future?  To answer this question, machine language is the most basic language of computers, so it will always be used as the foundation that the other languages are built on top of.  Assembly language can be used for basic functions and basic manipulation of data.  High-level languages, such as Python, are used for complex manipulations and large data sets (Vahid, 2017).  High-level languages are the most popular today because they can perform tasks much more quickly than machine language and assembly language.  However, it is important to recognize that some of the programs we have today are relics from the past, which need to be maintained and understood: “Programming is the infrastructure for our world. There are large systems still in use today written in Cobol and PL/1, and we have to maintain that information infrastructure” (Guzdial, 2018).  Therefore, it is important that the knowledge of older programming languages is perpetuated in order to maintain the infrastructure that was first established.

Deciding which programming language to use for a new project can be challenging for today’s software developers.  According to Foster (2018), “Myriad languages have been developed in the last six decades, with at least a few dozen in common usage today.”  The question of which languages software developers should know does not appear to be going away any time soon.  While some may think that one high-level language is sufficient, in a study conducted to compare code quality of projects written in different programming languages in GitHub, here were the results: “While they suggest that the language does indeed matter, almost all of the observed effects are small … except that some particular language features, such as a lack of memory safety, do have profound effects” (Foster, 2018).  In addition, besides narrowing down which language might be best for a given project, it is important to consider that, “in practice the choice of programming language is often constrained both by external factors (for example, the language of existing codebases) and the problem domain (for example, device drivers are likely to be written in C or C++)” (Foster, 2018).  Again, this point emphasizes the need to maintain the knowledge of older languages, upon which existing software was built.  Based on these two views, it is important that software developers know a variety of languages, and can adapt quickly to new languages, dependent upon the need of a project.

In regards to which programming languages are taught in introductory level computer science courses at universities, the data varies from university to university and from year to year.  Even universities cannot seem to agree that one language is better than another to learn first.  According to Siegfried et. al. (2016), “The choice of a programming language for an introductory programming course has been a topic of debate for over forty years, and the academic community has seen a variety of programming languages gain and then subsequently lose popularity.”  Because the data changes so often, Richard Reid, a computer science teacher at Michigan State University, has been tracking data regarding the issue of which language is taught first at universities since the 1990’s.  Every few years he comes out with a new list of the distribution of introductory level programming languages chosen by universities for a given year.  Between the years 2011 and 2015, 83 schools in the study changed the programming language taught in their introductory computer science course, with the largest change being that schools switched from Java to Python.  In 2015, the most popular language taught in introductory level courses was Java, with Python coming in second, and C++ third.  These three languages remained the top three chosen (although with differing orders of popularity) regardless of the region of the US in which the school was located (Siegfried et. al.,2016).  While the debate continues regarding which programming languages software developers should know, evidence suggests that to have an adequate foundation in programming languages and be competitive in today’s job market, it’s important to know at least Java, Python, and/or C++.

Resources
Foster, J. S. (2017). Shedding New Light on an Old Language Debate. Communications Of The
ACM, 60(10), 90. doi:10.1145/3126907

Guzdial, M., & Landau, S. (2018). Programming Programming Languages, and Analyzing
Facebook's Failure. Communications Of The ACM, 61(6), 8-9. doi:10.1145/3204443

Siegfried, R. M., Siegfried, J. P., & Alexandro, G. (2016). A Longitudinal Analysis of the Reid
List of First Programming Languages. Information Systems Education Journal, 14(6), 47-
54.

Vahid, F., & Lysecky, S. (2017). Computing technology for all. Retrieved from
zybooks.zyante.com/