Nowadays, most people don’t need to know how a computer works. They can simply turn on a computer or a mobile phone, click some programs/games or slide an instruction on the smart phone and the machines will react to their choices.
Programming allows you to understand what’s behind the game that you play and/or the software that you bought.
Basically, writing software (computer programs) involves describing the processes and the steps taken in order to create the algorithm. Computer programming involves developing lists of instructions – the source code representation of the software.
Creating a computer program not only that is a very complex way of making you understand the processes of how things work, but also it can be seen as an artistic way of creating things, it is just like a sort of art.
How it all started
All computer programs rely on very simple instructions, adding descriptions, adding functionality to a character, adding numbers, moving things from one place to another etc. In modern systems, such instructions are generated by a compiler from a program in a high-level language, but early machines were so limited in memory and processing power that every instruction had to be spelled out completely, and mathematicians took up pencil and paper to manually work out formulas for configuring the machines – even before there were machines to configure.
The evolution of programming languages
The evolution of programming knows three big distinct periods of time: 1950-1959, 1960-1969 and then 1970.
The 50’s years represent the pioneer’s stage in the programming domain.
Initially, the programs were written in a machine code(the instructions, I-O data were formed from series of 0 and 1, as like, actually, every computer in the world is processing them).Because of this fact, the writing of the programs, the introduction of data were particularly finical and less productive activities. An important step in evolution is given by the apparition of the assembling languages. This languages use for every instruction in the machine code an abbreviation from English that synthesize the effect of the respective instruction.
Even if a lot eased, the activity of programming in an assembly language still remains difficult.
Even so, the assembly languages are still used today with success because of some benefits like: the possibility of writing some computer specific programs that can run a specific program (therefore with a high speed of execution), the possibility of writing some program sequences that cannot be written in an evolved language (because they miss some specific instructions).
In this period also appeared the high level languages (Fortran, Cobol).
At this time, the writing of the programs is made with the help of some expressions from English (even tough extremely restrictive).Also, the formulas that ask for some expressions calculation are a lot alike with the mathematic formulas.
A great advantage of the high level languages is made by the portability of the written programs with their help (the possibility that a written program can run on different types of computers).
In the 60’s a great development of the mathematic machine needed for creating and using the programming languages takes place .In this way, the rules of writing the programs in the respective languages are mathematically formalized. Also, the recursion concept appears in programming (this concept has been used for a long time in math’s).For the first time it appears the notion of dynamic allocations of the memory(the allocation of the memory space for miscellaneous variables is made during the program executions, when is the case, and also in all this time an allocated space can be deleted, when is no longer necessary).All of these appear for the first time in the Algol language. This language, less used by the practitioners, had a fundamental role in the posterior development of informatics.
In the same period other evolved programming languages appeared that were spread in the entire world.
At the begging of the 70’s the structured programming has appeared(their makers where E.W.Dijkstra and C.A.Hoare). For the first time standardized methods of elaborating programs appear, the activity of programming passing the artisanal stage. The elaboration of any program can be made by using some simple structures(sequential, alternative, repetitive).A complex problem is decomposed in sub-problems, that then at their turn they decompose again until they are simple enough for being transposed in programs(descendent programming).
At the end of the 80’s a new concept appears, the object oriented programming(in which the data and routines for them are unified in “objects” that can be used just like that or subsequently developed without needing of taking the work from zero or knowing them in their intimate mechanism).The time will decide if those will become or not indispensable in the programming activity.
The history of computer programming
People probably use computers and programs on a daily basis but little did they know that the first “pre-computers” didn’t even use electricity or that the first computer programmer was a woman.
In 1801, Joseph Marie Jacquard invented the Jacquard loom, a mechanical, automated loom.
Changeable punched cards controlled the operation of the loom.
The punched card was later used by Charles Babbage as a method for storing programs for the Analytic Engine.
First computer programmer: Ada Lovelace.
Augusta Ada King, Countess of Lovelace (10 December 1815 – 27 November 1852) was an English mathematician and writer, chiefly known for her work on Charles Babbage’s early mechanical general-purpose computer, the Analytical Engine. Her notes on the engine include what is recognized as the first algorithm intended to be carried out by a machine. As a result, she is often regarded as the first computer programmer.
In 1842-1843, Lovelace translated an article about Charles Babbage’s proposed Analytic Engine. In her notes, she describes an algorithm that is cited as the first computer program, making her the first computer programmer.
She also theorized that the computer, could, one day, play music and chess.
Ada, a U.S. Department of Defense computer language, is named in her honor.
First high-level computer programming language used: Fortran
It was invented by John Backus of IBM in 1954.
It was released commercially in 1957.
A high level programming language is one that is far removed from the computer’s instruction architecture. It is typically more user friendly than low level programming languages.
First computer game: Spacewar! (1961)
Programmed by Steve Russel, Spacewar! is a two player game where two spaceships, affected by the gravity of a star, fire missiles, unaffected by gravity, at each other. Each spaceship has limited ammunition and fuel.
Took hardly 200 man hours to complete.
Written on a DEC Interactive mini computer.
Russel never profited from Spacewar!
At Stanford University, Russel introduced Nolan Bushnell to Spacewar! Bushnell went on to program the first coin-operated arcade game and later started both Atari Computers and Chuck E. Cheese.
First computer virus programmer: Fred Cohen.
In 1983, Fred Cohen designed a hidden program that could infect a computer, copy itself and then infect other computers through the use of a floppy disk.
The program was benign, meant only to prove that it is possible.
The evolution of computer programming languages
Created in 1957, Fortran (FORmulaTRANslation), is the oldest language still in use. Created by John Backus, the language was created to perform high-level scientific, mathematical, statistical computations. The language is still used in aerospace, automotive industries, government, and research institutions.
Created in 1959, Cobol (COmmon Business Oriented Language) is behind the majority of business transaction systems running credit card processing, ATMs, telephone and cell calls, hospital systems, government, automotive systems, and traffic signal systems. The COBOL development team, led by Dr. Grace Murray Hopper, set out to create a uniform, user-friendly language for business transactions.
Created in 1964, BASIC, developed by students at Dartmouth College, Beginners All Purpose Symbolic Instruction Code was designed to be a simplified language for those without a strong technical or mathematical background. A modified version, written by Bill Gates and Paul Allen became Microsoft’s first product. It was sold to M.I.T.S. for the Altair.
Integer BASIC ran the original Apple II in 1977.Basic has over 2 million lines of code in use, in 1975 there were only 4000.
Pascal language has appeared at the begging of the 70’s and it was elaborated by the mathematician N.Wirth. The language was initially created for the systematic teaching of the computer programming discipline (the classic structures from the structured programming were transformed into instructions). With time, the program became being used in the practical programming of the computers. The American company Borland had a fundamental role in this, which implemented an alternative named Turbo Pascal, which besides the classical instructions of the language also contains many others .A great advantage of this language is that an user can declare his own data sets/types. The last versions of the language allows the OOP(object oriented programming).
C was designed between 1969 and 1973 by Dennis Ritchie at the Bell Telephone Laboratories for use with the Unix operating system. At that time, the Bell laboratories held a programming language named B, “B” from Bell. The next language that they created was C, the next letter after B.
The C language is a medium level language. Some parts of it are similar to the assembly language, also, the most DOS compilers for C allows the user to insert written parts in the assembly language in the C written programs, without any great effort. Other parts of the C language are at a higher level, being almost intelligible. C language combines the speed advantage with one similar to the English language.
C language is part of the structured programming languages family. The data can be organized in collections of different types of elements. The programmer has the possibility to define his own types, which facilitates an adequate representation of the information that will be processed.
Unlike Pascal, the structure of the programs is simpler and more uniform .This in the first place because the subroutines are organized in C under a single form, the functions (in Pascal two forms are accepted: functions and procedures).In the second place, because the functions can’t be defined one inside the other. A program is formed by many functions that perform clearly defined activities and that are well delimited from the rest of the program.
The base unity in the C language is the function. The functions can be composed by many blocks. A block is a sequence of many declarations, definitions and instructions that fix the availability duration of the variables and the symbolic constants defined inside him. The block holds the same quality, just like the functions, to protect the local variables.
C++, created in 1983 (formerly “C with classes”;++is the increment operator in “C”).It’s an intermediate-level and object oriented language. An extension of C, with enhancements such as classes, virtual functions and templates.
It was created by Bjarne Stroustrup in the Bell Labs and its primary uses were for commercial application development, embedded software, server/client applications and video games.
Also, on the base of C and C++ languages it was reached at the designing (by James Gostling from the Sun company) of another language which was required very quickly on the platforms that had access to the internet, named Java.
Now it’s used by Adobe, Google Chrome, Mozilla Firefox and Microsoft Internet Explorer.
Specific OOP concepts implemented in C++
Data encapsulation- it is the fundamental concept of OOP, which is based on treating together of both data and processing subroutines of those.
Abstract data types- are data sets that have the same intern representation and for which are defined and a set of operations can be used that can be executed on the respective elements of the lot.
Class- the defined type that creates the encapsulation of data and subroutines
Object- a variable of class type (it instantiates it)
Member- component element of a class. The members of a class can be:
-of public type (can be accessed from anywhere)
-of protected type (it can be used only inside the hierarchy of the class)
-of private type (it can be used only inside the class)
The members can be of data or function type.
Method: component function of a class.
Polymorphism: it refers to the possibility of operation with different versions of a function that processes an operation for different objects .OOP allows by polymorphism the definition of many variants of the same function and appealing them depending of the context. In C++ both functions and the operators can be redefined.
Derivation: it allows the defining of a new class on basis of an existing class. The derived class takes over the data and processing methods of those being able to add its own data and processes .In this way the new realizations are based on older efforts. It is very important that an anterior realization to be able to be harnessed in other applications. The class specialization process holds the name of hierarchization.
Inheritance: data or subroutines can be sent from a base class to the derived class from it. In this way the objects and the tasks that they perform can be hierarchized, giving the possibility of a faster evolution of those and easing the maintenance of applications.
Virtual function: a function that has a definition in the base class, being able to be redefined in other derived classes from the initial base class.
Pure virtual functions: are functions that only held the prototype in the base class but for which the definitions will be necessary in the derived classes.
Template functions: template function that describes a model of treating more identical functions from the behaviorally point of view but different from the processed data types view.
Template class: template class that describes a model of working of more identical classes from the behaviorally point of view but that contains different members.
Treating the exceptions mechanism: it offers a possibility of treating the errored situations structured on more levels. If an occurred error can’t be treated on a particular level, the situation will be sent to a superior hierarchical level.
Objective-C, created in 1983, is an object-oriented extension of “C”. It’s used for general-purpose and it’s a high-level language. Expanded on C, adding message-passing functionality based on Smalltalk language.
Perl, created in 1987 (“Pearl” was already taken). It has general-purpose and it’s a high-level language. It was created for report processing on Unix systems. Today is known for high power and versatility.
Was created by Larry Wall at Unisys and its primary uses were CGI, database applications, system administration, network programming and graphics programming.
Now it’s used by IMDb, Amazon, Priceline and Ticketmaster.
Created in 1991, Python (for british comedy troupe Monty Python), it’s a high-level language with general-purpose. It was created to support a variety of programming styles and to be fun to use. Tutorials, sample code and instructions often contain Monty Python references.
Was created by Guido Van Rossum at CWI and its primary uses were for web applications, software development and information security.
Now it’s used by Google, Yahoo and Spotify.
Ruby (the birthstone of one of the creator’s collaborators), was created in 1993, it’s a high-level language with general-purpose. A teaching language influenced by Perl, Ada, Lisp, Smalltalk etc. Designed for productive and enjoyable programming.
It was created by Yukihiro Matsumoto and its primary uses were Web application development and Ruby on Trails.
Now it’s used by Twitter, Hulu and Groupon.
Java it’s not only a programming language, it’s also an environment of programming that offers to the user the necessary framework and tools needed for developing Java applications. Java is a technology that offers support to the delivered developed applications, independent of the platform. Java programs can work on different types of platforms, with the condition that a virtual Java machine has to be installed on top of the respective platform. What gives to Java language an advantage, compared to other programming languages it’s his tight connection with the Internet technology especially thanks to the Java applet’s. Java applet’s are Java programs that execute inside WWW(World Wide Web) browsers. Java as a language and a programming environment was launched and it is continuously supported by the Sun Microsystems company.
The biggest part of Java programming syntax is inherited from C++, but many of the objectual programming concepts present in Java have their roots in SmallTalk, Lisp etc. The architects from Sun have included in this language the newest concepts of programming, making him a strong and easy to be handled tool.
The roots of Java language are inside a research project (the “Green” project) of Sun company. The named project coordinator was James Gosling, one of the veterans of network software design. The mission of the project was to create “smart” household effects and to make them communicate one with another.
Initially as a development language was used C++. But it seems that C++ wasn’t the language to satisfy the requirements of such a project. As a result, James Gosling gives birth to a new language that later will make him famous. At the beginning the language is named “Oak” in the honor of the three from outside Gosling’s window. As a result of a won demonstration of the project, and by default of the language, Sun company has a tentative in Interactive Television Industry, tentative that will sadly fail. This happens in 1994.In time that Oak and Green were searching for buyers in the Interactive Television, a new apparition changes the Internet world in the spring of 1993:Marc Andreesen, still a student, working at National Center for Supercomputing Applications (NCSA) launches Mosaic1.0, the first graphic WWW browser. Losing the race in the Interactive Television, Oak starts another one in WWW. The team projects a new WWW browser, named Web Runner, with capabilities of running development applications in the Oak language. This is the moment when Oak changes its name in Java, Oak mark being already on the market. Netscape company helps to the launching of Java language by buying the license and his integrity in the Netscape browsers. Java enters in this way in the race of the evolved programming languages. In this way, in November 1995 the first Beta version of Java is available. From that time the language is in a continuous ascension, passing from the 1.0 version(in 1995) at 1.1(in 1997) and at 1.2(in 1998). Every new version implements new concepts, and new tools make their apparition in Java world. The result is surprising in the software world. Java is profiled as a language, a strong programming environment, a technology for the future developments of software. In this moment the biggest software companies have bought the Java license from the Sun company regarding the development of some products that depend on the Java technology.
JavaFX is powered by Java. The JavaFX platform enables application developers to easily create and deploy Rich Internet Applications (RIA) that behave consistently across multiple platforms. JavaFX extends the power of Java by allowing developers to use any Java library within JavaFX applications. This way developers can expand their capabilities in Java and make use of the presentation technology that JavaFX provides to build engaging visual experiences.Now it’s used by Android OS/apps.
PHP(formerly “Personal Home Page” now it stands for “Hypertext Preprocessor”) was also created in 1995 and it’s an open-source with general-purpose. Was created for building dynamic web pages. Most widely used open-source software by enterprises.
Created by Rasmus Lerdorf, its primary uses were building/maintaining dynamic web pages and server-side development. Now it’s used by Facebook, Wikipedia, Digg, WordPress and Joomla.
Created by Brendan Eich at Netscape, its primary uses were dynamic web development, PDF documents, web browsers and desktop widgets.
Now it’s used by Gmail, Adobe Photoshop and Mozilla Firefox.
Short history of OOP (Object Oriented Programming)
The apparition of OOP can be dated at the end of the seventh decade once with the appearance of the language Simula I (1966).This was the first language that permitted using together data and subroutines. In this way, in the next version (Simula II-1973) there were used, clarified and successfully spread the encapsulation notions, object and class. Because of the radical novelty of the way of conceiving the OOP programming but also of the low speed took for the execution of the programs, the language haven’t made the wished change in the programming world.
Another language that fundamentally marked the OOP was the Smalltalk language(appeared in three more important versions: 1972, 1976, 1980).This used for the first time the inheritance notion giving in this way the possibility that the code can be used again. The”pure” objectual languages had appeared. This languages are directly based on the OOP advantages, without taking the resort of any anterior characteristics (for example the procedural programming).Other languages of this type are: Eiffel, Edison, Oberon, Java.
Another orientation in the programming languages world was that of adding OOP facilities in the already created languages. In this way using possibilities of the OOP techniques at the languages: Turbo Pascal(from 5.5 version), Modula-2, Ada, Lisp, Oracle, Informix, Fortran, Cobol, PL/I. This languages, because of the way of using together both the OOP concepts and the older concepts of procedural programming are named ”hybrid objectual languages”. C++ language is part of this last category.
Fundamental concepts in OOP
In structured programming, the program is based on the fundamental idea set forth by Nicklaus Wirth, the creator of Pascal language.
Algorithms + Data Structures = Program
This technique has proven since the beginning, by the discipline that imposed to the programs in organizing, structuring and processing data, an important progress in the development of the complex applications direction. It was found that the structured programming still remains with an important deficiency in the direction of conceiving the programs.
In this way, data is treated separately from the subroutines of processing of those, creating problems to the flexible organization and efficiency of applications. Also, appeared the problems with re-using the existing code, a quality that is absolutely necessary for using complex applications.
OOP has at the base the object concept that associates (encapsulates) data with the subroutines needed for processing. In addition, the protection of data is offered, such that, implicitly, those couldn’t be utilized outside the object that they are part of. There are different models of classification and exact structuring of data and of processing. From a specific grade of complexity, treating the applications without the facilities of OOP becomes too laborious.
Source 1: Tudor Sorin – Algoritmi si limbaje de programare, editura L&S Informat, 1997, ISBN 973-96382-4-4
Source 5: Dan Gookin – C pentru tonti, editura Teora, 1996, ISBN 973-601-401-0
Source 6: Dorian Stoilescu – Manual de C/C++, editura Radial, 1998, ISBN 973-98337-0-3
Source 7: Calin Marin Vaduva – Programare in Java, editura Albastra, 2004, ISBN 9789736501494