A software developer must by the very nature of interaction with a computer, utilize a programming language. The language is simply a means to organize and specify that algorithm functions occur when necessary to achieve a given outcome. There are many versions of languages from both a historical and current context; however, most computer languages can be broadly grouped as either high level or low level. Low level languages are commonly called "machine language" or closely resemble that type of notation in both operation and code used to implement an algorithm. These low-level languages implement the operations used by underlying hardware. High level languages by contrast are used to group and simplify statements and operations of low level languages so that the task of coding by a software developer is simplified.
High level languages allow a problem to be solved through operations by abstracting the underlying operations. The coder can express operations and algorithms as written sentences or specific variable code or in many cases now pictures and symbolic movement of images within a coding environment. The high level languages can then be utilized by the underlying machine by translating the expressions used by the software developer into machine language through a program called a compiler.
Most of the specific operations for a computer are performed at the lowest level with binary digits. Early coding utilized specific inputs with binary digits and faced problems that included high probability of error, long strings for programming, and difficult modification of the code after assembly and implementation. Early jumps in programming beyond simple binary representation included the use of assemblers to translate simple operations so that standard operations including memory addresses and transferring data into specific locations can be performed routinely. The operations could also be standardized so that the programmer could focus on the actual movement of data and operation rather than maintaining a list of locations and correcting those locations as changes were made in the program. Despite the advances made through assemblers and macro assemblers, much of the "work" performed by a software developer in using an assembler concerned with managing, sequencing and specifying locations for operations rather than solving the specific problem that the data and code was intended.
The advantages of high level languages over low level languages are not typically observed at the machine level as the eventual code for each consists primarily of zeroes and ones. The major advantage for the software developer lies in the almost endless capacity for creativity in solving specific problems. Important characteristics include the ability to break up problems into modules, simple expression of symbolic logic functions, meaningful names and notations for components in the program, and most important unlimited capacity for rigorous documentation within the programming at the high level within the language. In addition software developed on high level languages is more portable allowing significant independence in the type of machine where software is used in contrast to low level languages where programs are very machine specific. The advantages of both high level languages and low level languages are shown in Table 1.1 (Watson 1989)
Easy to learn and understand
Access to machine specific operations
Programs can be self documenting
Time and space are efficient in many operations
Rapid solution of problems
Simplified modification and maintenance
Debugging constitutes a significant portion of the time used by a software developer. This difference in debugging between high level languages and low level languages is a critical reason for the wide level of applications possible when using a high level language. Documentation and the use of symbolic, sentence, or even object manipulation in programming allows a developer much simpler review and capacity for spotting errors in the program. Compilers can be used to spot simple errors before a program is implemented allowing checks of operations that would not be detected until specific operations occurred in run time. Some languages even support interactive debugging of specific routines and subroutines during operations so that only segments of the program require repeat compiling. Finally, debugging is vastly improved through the use of documentation within the code used for a high level language.
Choosing and using a high level language depends on many factors but the most obvious choice is the historical precedent for software development within a family of machines or specific types of programs. Applications in most landscapes of software design have extensive libraries of generated code sources that allow implementation of many levels of code sharing and documentation review. Some applications demand a specific type of language simply because of the nature of the operations where coding was developed for that language. The high level language FORTRAN2008 for example has roots in the use of large numerical processes and with object oriented support, floating point operations and support for most electrical engineering processes (IEEE) and is therefore used as the primary language in programming for applications using supercomputers, astronomy, physics and chemistry (Chapman, 2008). The programmer may be a critical aspect in the choice of a language considering familiarity, type of application and the time constraints within the development of the program. Some programmers utilize programs to solve problems in other aspects of life outside of the program while other programmers have a primary interest in programming and computer. Some languages are suitable for one or the other type of programmer. One final aspect of choosing a language is portability where some languages have very narrow limits for application where others allow broad implementation over many platforms.
High Level programming languages are typically divided into four rough groups: imperative languages, functional languages, logic programming languages and the broader classification "other" (Watson 1989). Imperative languages use assignment and variable implementation in the operations and routines performed. Functional languages rely on implementing functions or procedures and implement recursion or repeats of functions to modify data and outcomes. Logic programming is a very high level type of coding where the programmer supplies a problem specification in a formal form. Other represents a spectrum of languages that a programmer can implement over many applications that fall outside of the above groups.
Two dramatically different high level languages with remarkable capability for software developers are C++ (pronounced see plus) and Python. C++ is one of the most widely applied computer languages and has aspects of both high level and low level languages, however for most programmers; the higher functionality of the language is utilized. Python is a strictly high level language with a powerful library of syntax and built in operations for the programmer.
C++ was developed initially to provide large software systems with the capability of managing small control and conciseness through the implementation of a construct called a class (Stroustrup 2000). The use of a class allows data contained within a class to be given a specific list of functions by association so that global assignments of functions can be given to classes of data independent of location and type. C++ allows complex expressions within classes and for all data assigned to that class to be written using conventional algebraic or object oriented form. C++ also allows a programmer to assign new functions to operators a factor that can cause problems between different software developers should code be transferred without proper documentation. The complexity of the language and capability of shelving data within classes as architectures called stacks has promoted use of the programming language in high performance applications such as server architecture, video game design, and entertainment software (Sutter 2004). C++ was designed to provide a programmer with wide latitude of choices in implementing the programming language with the following rules implemented by the creator, Bjarne Stroustrup:
C++ is designed to be a statically typed, general-purpose language that is as efficient…