Programming Languages

Programming Languages

 by Ian Speer, Steven Mercier, Mark Roesner, and Adam Seiwart



Introduction

    A programming language is defined as “an artificial language designed to express computations that can be performed by a machine, particularly a computer” according to Wikipedia. While that may be an accurate description, it is not the only definition of a programming language. There are thousands upon thousands of programming languages in our ever advancing world and there are more being created every day. Programming languages range from the very basic binary language or “machine code” all the way up to the highest level languages such as Ruby, Python, and J with every shade in between. So why are there so many languages? Well there are many answers to that question. For one Computer Science is still an ever advancing field and people often find better ways to do things than those before them. Then there is the fact that some people prefer certain ­languages and some languages are better suited for the task at hand. However most modern programming languages do contain common elements and are Turing Complete.  Over the next few sections in this chapter, some key points will be reviewed such as:

  • Some key programming languages
  •  Programming Paradigms
  •  Compiled vs. Interpreted languages

By the end of this chapter one should have a keen knowledge of the fundamentals and background of programming languages.

 Programming Paradigms

A programming paradigm is a logical view of code within the computer language to be implemented or understood. The word paradigm is defined as “a set of forms which contain a certain element that is based on a certain base or theme.” Summarized, it means that a paradigm is a specific pattern that is used within a greater foundation of pattern. A programming paradigm is the pattern used by a computing language as the basis to make computer programs. Although there are many types of programming paradigms, there are four main types of paradigms. These main types are: imperative, functional, logic, and object-oriented paradigms.

Imperative Paradigm

            The imperative paradigm is the oldest of the paradigms. This paradigm was formed after Jon Von Neuman’s principles of Computer Architecture. The imperative paradigm works by taking a given list of commands to be executed in order to carry out the operation. Basic, C, and Algol are languages that use the imperative paradigm.

Functional Paradigm

            Although not as old as imperative, the functional paradigm came shortly after. The functional paradigm follows the algebraic formula and its theory of functions making it easier to follow than the imperative paradigm. The paradigm evaluates the sub-functions of the main function to reach its result. The functional paradigm uses languages like Lisp, Planner, and scheme.

            Derived from the name, the logic paradigm is based from the idea of logic formula. Logic formula uses a set of facts and rules called axioms, to logically prove the theorem at hand. The logic paradigm differs significantly from other paradigms. It fits better in obtaining basic facts and rules than the other paradigms but has a hard time with the math side of computing. Prolog is a programming language that purely uses logic paradigms.

Logic Paradigm

Object-Oriented Paradigm

            The object-oriented paradigm is the newest and most popular paradigm used today. The reason for its popularity is that it is common for it to combine with other paradigms which create more in-depth programming languages. The object-oriented paradigm takes a collection of classes and sends messages between all the classes within to get to the final result that the classes lead up to. There are quite a few programming languages that use object-oriented paradigms because of its ability to combine with the other paradigms. C++ and Java are used for imperative object-oriented paradigms, Functional object-oriented uses Clos, and logic object-oriented paradigms use object prolog as its programming language.

Programming Languages

Programming languages are created to control the behavior of a computer or machine and must conform to a set of rules for syntax so that communication between machine and man is succinct. There are thousands of programming languages; however, for purposes of brevity, we will only discuss the five most popular languages of 2012 in this section with the exception of Assembly. Programming languages are classified into “levels”: low level programming languages communicate more directly with the computer as opposed to high level programming languages. The top high level languages of 2012 are listed in their respective order from most popular to least: C, Java, Objective-C, C++, and C #. Assembly will be briefly discussed.

Assembly

    Assembly is a low level language that is designed for any programmable device, most notably computers and microcontrollers. A characteristic of a low level programming language is that they are generally unique to a computer architecture making them difficult, if not impossible, to use on separate architectures. A program language that is written in assembly consists of “a series of (mnemonic) processor instructions and meta-statements, comments and data.”  As modern technology advances assembly grows more outdated, leading to a large portion of tasks that have been previously coded in assembly to be rendered into more user-friendly                                                  

languages such as C. There are, however, key situations in which assembly language is considered more efficient than other programming languages. A few of these scenarios include “programs that need to use processor-specific instructions not implemented in a compiler” and “programs that rely on precise timing”. The software on graphing calculators is often programmed in assembly.

C

The programming language “C” was created by Dennis Ritchie between the years 1969 and 1973. It is considered a general-purpose programming language meaning that it can be used for a variety of purposes ranging from microcontrollers to operating system. C is considered one of the most popular programming languages as it has been commonly used for over two decades. As a result of its popularity, nearly all computer architectures support C. C is an object-oriented programming language and is also considered an imperative language, which is a programming paradigm whose computation is described in terms of statements.  C was originally useful for many applications or machines that had originally been programmed in assembly language.

Java

The programming language Java was developed at Sun Microsystems by James Gosling prior to its release in 1995. Java is considered a high-level programming language due to the fact that it can run on any computer that has the Java virtual platform installed, regardless of the computer’s architecture. Java relies heavily on C and C++ from which it derives most of its syntax. Java is used frequently for client-server web applications with over 10 million users.  Perhaps one of the key characteristics of Java that make it increasingly popular is its portability. Compared to C, Java requires more memory and is reputably slower. The newest Java, Java 7, is one and a half times slower than C.

class HelloWorldApp {

  public static void main(String[] args) {

    System.out.println("Hello World!"); // Display the string.


  
}

}

Objective-C

Objective-C was developed in the 1980s by Brad Cox and Tom Love at their company known as Stepstone. Objective-C was originally used for the NeXTSTEP operating system, but was later incorporated as an integral part of the OS X and iOS operating systems used by Apple explaining much of the languages popularity. It is considered a high-level, general-purpose, and object oriented programming language similar to the C language on which it is based. Objective-C is an increasingly popular programming language since it was ranked 6th in 2011 as compared to the 3rd place ranking it currently holds as of September 1st, 2012.

C++

            The programming language C++ is a “statically typed, free-form, multi-paradigm, compiled, general-purpose programming language.” If you understood all of that give yourself a pat on the back and feel free to skip the next couple lines, if not, then please continue reading. Static typing is essentially the equivalent of a spell check for programming syntax. In other words if you make a mistake while typing the code, the program will highlight the error you made. Free-form means that the position of the characters on the page is relatively insignificant. The text in the program does not need to be in specific columns such as on older punched card systems. Compiled implies that the program is implemented by transforming source code (or any programming language) into machine code (or another language), that may then serve as an input.  Multi-paradigm is rather self-explanatory, it supports more than one of the programming paradigms which were discussed earlier in this section.  Lastly general-purpose signifies that the language can be used for a variety of purposes; in this case it is used in “system software, application software, device drivers, embedded software, high-performance server and client applications, and video games.” Many other popular programming languages have been influenced from C++, including C# and Java.

 C#

            C# is considered friendlier than C or C++, allowing beginners to more quickly become proficient in C#. One of the features that it implements to make itself more user-friendly is the garbage collection - the concept that the program will automatically erase memory that it no longer needs. C# is considered a good choice for both individuals and large or small teams. C# is also known for rapid application development, and strong typing, which will prevent users from breaking operation perimeters.

Interpreted and Compiled Languages

In the world of computer programming there are two types of languages that help to break down high level processing so that it can be easily understood in our technological world. The difference however is how they both accomplish this goal. In a Compiled program, languages are translated from a high level program into a lower level program. Because high level languages can be very difficult to understand, it is crucial that we use a compiler to translate these languages into low level machine codes (usually binary code). These codes are then stored in a file for later execution so that the machine can run. Many of the compilers used today are either run by C or C++, and even sometimes by FORTRAN, which is considered to be years older. In our second language, known as the Interpreted Language, we learn that programs such as Action scriptJavaScriptJava, and C# help run the system. Interpreted language tends to run at a slower speed than the Compiled program because they make sure that every line is executed and analyzed perfectly. This in turn allows them to not need to be recompiled after changes. Some of the pros and cons with interpreted is that they have limited access to the underlying operating system and hardware, but they also are easy to program and are more forgiving in coding errors. 

The P-code Language:

            The P code is a type of hybrid established between the compiled language and the interpreted language. Examples of the P-code are Python, REXX/Object REXX, and Java. In the P-code, programming speed is still slower than compiled but is faster than interpreted. Unlike the interpreted, which translates to binary each time, the P-code does not. It only does this function once, because once the language runs the first time, the pseudo-code version then takes over and executes each additional time. Also unlike the compiled, storing binary into machine language, the P-codes pseudo version stores the binary into an executable binary file. 

Which is better?

            Really there is no way to compare the two to see which one is better, it really comes down to what you are trying to accomplish and how fast you want it done. But with the compilers of today some can compile and execute in memory making, just like an interpreted language.  However with both languages you are still going to need a text editor, which basically lets you enter in your own instructions. Many of the modern compilers come with complete and integrated editors optimized for working with certain types of languages. So it all comes down to preference.

 

Conclusion

Programming languages have changed remarkably since the very first programmer Ada Byron who lived over 150 years ago. In her time and for decades to follow, programming a computer required hours of work and their computational machines were mechanical not electronic. But even after computers became digital, programming them was still a difficult task with binary being the only way to program. Guess how long that would take?
01000001                                                                     (A)

01001100     01001111     01001110     01000111      (L.O.N.G.)                             

01010100     01001001     01001101     01000101       (T.I.M.E.)

 

                                            The Analytical Engine


 

   

 

                                         A modern server

 

                                                                                                     

     Out of the necessity of time-efficient programming needs, todays modern languages were born. And while there are many variations, modern languages are beginning to share common traits. So now that you have read this chapter, hopefully you have a better understanding of the world of programming. However, as stated before, computer science is still growing and progressing in a never ending process. It is only a matter of time before this textbook, teaching modern information and techniques, turns into a history book.

Works Cited

Elena I. Bolshakova. (n.d.). Programming paradigms in computer science education. Retrieved from http://www.foibg.com/ijita/vol12/ijita12-3-p13.pdf

What is a programming paradigm?. (n.d). Retrieved from http://www.wisegeek.com/what-is-a-programming-paradigm.htm

Overview of the four main programming paradigms. (July 7, 2010). Retrieved from http://people.cs.aau.dk/~normark/prog3-03/html/notes/paradigms_themes-paradigm-overview-section.html

 (2012, August 21). Comparison of programming languages. Retrieved from 

http://en.wikipedia.org/wiki/Comparison_of_programming_languages

Marshall Brain (2012). The simplest C program: What’s happening?. Retrieved from

http://www.howstuffworks.com/c.htm

Bjarne Stroustrup (2012). Welcome to Bjarne Stoustrup’s homepage!. Retrieved from

http://www.stroustrup.com/

Oracle corporation (2012). JSR 241: The Groovy Programming Language.

http://jcp.org/en/jsr/detail?id=241

(2012, September 2). Assembly.  http://en.wikipedia.org/wiki/Assembly_language

JavaTM (2012). About Java. http://www.java.com/en/about/

(2012, September 5). Java (programming language).

http://en.wikipedia.org/wiki/Java_(programming_language)

(2012, September 4). C (programming language).

http://en.wikipedia.org/wiki/Java_(programming_language)

(1999, December 7). The C programming Language.

http://groups.engin.umd.umich.edu/CIS/course.des/cis400/c/c.html

(2012, September 4). C++. http://en.wikipedia.org/wiki/C%2B%2B

(2012, September 5). C Sharp (programming language).

http://en.wikipedia.org/wiki/C_Sharp_(programming_language)

            Bertino, E., (2000), 'ECOOP 2000--object-oriented programming', 14the European Conference Sophia Antipolis and Cannes, France. Springer. pp. 362-363.

Brookshear, J.G., (2008). 'Computer Science: An Overview 10th ed.', Addison Wesley. pp. 296-311.

Spell, B., (2000), 'Professional Java Programming 1st ed.', Peer Information, pp. 1-21.

Vinoski, S., (2006), 'The language divide', Internet Computing, IEEE , vol.10, no.2, pp. 82- 84, March-April 2006.

Warren, M. R., (2009), 'C# versus C++ versus Java performance comparison', C# Architect [Online]. Available from: http://www.csharp-architect.com/ (Accessed: 2 April 2010).

            Bih, N. (n.d.). I-gloss/linux dictionary v 0.16. Retrieved from http://www.tldp.org/LDP/Linux-Dictionary/html/index.html

Artcle by: Juergen Haas

            Eric, R. (n.d.). The unix and internet fundamental howto. Retrieved from http://tldp.org/HOWTO/Unix-and-Internet-Fundamentals-HOWTO/

            david , B. (n.d.). Comparing popular programming languages. Retrieved from http://cplus.about.com/od/introductiontoprogramming/a/comparelangs.htm

Experience: Studied Computer Science and graduated as Bachelor of Science in 1981

 

 

Comments