I have started programming with FORTRAN which I hated then. Now not so much. Then I have learned in this order: Lisp, Basic and Pascal. These are all the languages I have learned in faculty. Lisp I have learned by myself from curiosity since it was not required in class. My IT professor to not knew Lisp at that time so he was teaching us Pascal.
After graduation I have become Mechanical Engineer not Software Engineer. So I have start learning by myself other computer language: Ada, C, Prolog searching for a useful programming language. My first useful program was written in: FoxPro. That was a 4’th generation programming language.
Using FoxPro I was able to do alone large scale projects for engineering and accounting. The question is: why I was not successful with other languages before? It was because of the missing features. Other languages do not had the functionality required to create complex large applications.
I have seen many developers struggling in with the language. While I was delivering successful results on a small PC for engineering other developers from the computer department struggled, using outdated computer languages.
Learning Pascal was a blast! This language was the most revolutionary and comprehensive language I have ever learned. I was not speaking English before learning Pascal. Learning every other language was a pain, especially Lisp.
Pascal language was comprehensive. I was able to learn some English from it. Unfortunately, Pascal was not productive enough for business. Working with row data files unstructured, it was difficult to organize your data, therefore I have switch to FoxPro. Of course I have kept an eye open for Pascal for a long time to watch its evolution.
Delphi pretended to be RAD (Rapid Application Development) tool. And yes: if you know Delphi you can create fast a small application prototype with user interface, menu and tool-bar. Delphi try hard to be RAD for mobile and therefore the upgrades are very frequent. Lately I have lost interest. This is because Delphi upgrades are not free while other technologies are free. I have a Delphi license but I’m not using it. Other languages do the job and RAD is a thing of the past.
I have noticed Java much later than others. I was busy working with Delphi for a German company. So when everyone else was starting singing and dancing: Java, I was not paying attention. After a short while I have review Java and I have concluded that is a bad language.
I was right but everyone else seams to fall into a vortex. Java has promised to run in web browser. It failed to deliver, but the language refused to die. Java RAD created by SUN was a disgrace compared to Delphi but was free. Don’t tell me they have not try to copy Delphi because they do.
Microsoft was jealous on Java for a short time. So they have stolen Java ideas and made C#, that is much better language than Java now. What has Java come up with? Almost nothing, just empty promises. It is a subset of C++. It has restricted users from using pointers and references to functions. I do not like restrictions so I do not like Java.
Python language has gain a lot of popularity lately. It is a dynamic language so is a little bit slow (100 times slower then Fortran). The programmer productivity is higher though. This is due to multi-paradigm approach. Also it is interpreter and this helps the beginners to learn it. Python has strong influence in computer industry: Swift, Go and Julia are new languages inspired from Python.
Language design issues
Computer languages are used by millions of programmers. New developers strive to create distant learning, artificial intelligence, knowledge databases and many other incredible things using primitive programming languages. Next I will explain just several issues:
- It is difficult to establish a good convention for comments. Ada is using “–” , C is using “//” and “/*…*/”, Shell and Python are using “#”. Assembly is using “;” while Pascal is using “(*…*)”. No good convention here. Therefore I have created my own convention for comments.
- Concurrent functional programming languages like Erlang have introduced advanced concepts to make parallel computation effective. However pure functional languages have limitations in performance and are introducing concepts difficult to comprehend. Migration from imperative language to functional programming is very difficult. So I have decided to create a multi-paradigm computer language.
- Many languages are using abbreviations for keywords. Some new languages like APL are using strange symbols that are not on your keyboard. This language had some success but after a while it faded into the past. I think APL was a bad idea that injured the industry.
- ASCII was popular for a while but it was too limited. Later code pages had also a poor design. Then comes along Unicode with heavenly promises. After study I’m convinced that Unicode also has a bad design. It does not have a “simple design” therefore it should be replaced.
- For pascal here is a link to most famous article published by Brian W. Kernighan, April 2, 1981 AT&T Bell Laboratories, Murray Hill, New Jersey:Why Pascal is Not My Favorite Programming Language . This article convinced me to start learning C, but later on I have discover C has problems of it’s own.
C and C++
- C language is not safe and is hard to read. Developers can do lots of mistakes that can even crash the operating system. Therefore C is not accepted in many companies as primary programming language. Also evolution of C is slow because of compatibility with older versions of the language.
- Why C and C++ are Awful Programming Languages
- In C you can use single = into a decision statement by mistake instead of ==. Many developers fall into this trap. Even if you want this to happen in your application, someone else can think is a mistake when read your program.
- The C++ language uses angular brackets <….> for templates. Also uses >> symbols for streams. What if you put them together? <…>> . This is a syntax error is it? This kind of syntax error can happen wit a pointer used into expressions. Consider *ptr a pointer content. What is this expression doing then? x = 1**ptr. Is a multiplication or a pointer dereferenced two times ?
- In Python and C developers use underscore to declare private variables: ___private___ notation. This is very ugly since _private_ is also used. How many underscores I have used here? I think is a bad practice to start or end any variable with underscore. I think underscore is not natural at all and is just tolerated in computer science.
- Python has mandatory indentation at a number of spaces. This is nice, but I really miss the closing “end” statement for the blocks. Therefore we will introduce mandatory indentation but also will keep the end of a block statement.
- Python do not have “;” at end of line. This seams like a nice advantage for an interpreted language. However this create some problems for a compiler. Also when we have a longer line there is need of a “continuation” operator.
- Not declaring variable types is bad for readability and efficiency of the program. I like to know what kind of variable I deal with. So I prefer a strong type system to a dynamic one. Therefore a I like to have Python language with stronger types.
- Java has object oriented style but also has native types. Therefore is a hybrid language and is not pure object oriented. Some pure object oriented languages exists and are better then Java in this regard. However Java may be more efficient due to this design.
- In Java, “=” symbol is used for assignment. “==” is used for comparison. However “==” is not able to compare 2 Strings properly! This is confusing and a trap for developers that come to java from other languages. For example if you have a=”one” b=”one” in Java a==b is true or false. This is because strings are objects and comparison will compare references to objects not the values.
- In Java, symbol + can be used to concatenate strings. Therefore “1” + “2” = “12”. This does not looks natural. In VBScript two strings can be concatenated using &, but this symbol is used for address referencing in C. In PL/SQL the double pipe || is used to concatenate two strings. So for Level language we can chosen & to concatenate two strings. It seams nice and is used in other languages like ADA, VBScript and others.
- In Java the || is used for OR the && for AND. Symbol & is for bit operations in Java. A total confusion if you come to java from other language like C.
- Ada is a nice language, however not very popular and a little bit heavy on syntax. Maybe it was ahead of it’s time. It has many valuable features that I have researched with passion. My new languages are inspired from Ada.
- Ada uses two files for one program unit. Specification and the body. This can be an issue if you rename the package you need to rename the specification. This makes version control difficult and may be source of bugs.
- Ada end a section of block using end <section_name>. This is inconvenient if we rename the section. Therefore in my languages I do not use this convention.