Even if you are young student, you will have a story to tell about your learning adventure. Sooner or later you will publish something. I have discover Computer Science long in faculty and now I’m old. I have many stories to tell, but little time. My life has orbited around software engineering, mathematics and programming since 1985 when I have written my first program.
After graduation I have become Mechanical Engineer not Software Engineer. So I have start learning by myself computer languages to resolve engineering problems: Some of the languages I have try in early days: FORTRAN, BASIC, Pascal, C, Lisp, Prolog, Ada and FoxPro . 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? It was because of the missing features. Other languages do not had the functionality required to create complex business applications.
I have seen many developers struggling with primitive languages. While I was delivering successful results on a small PC with FoxPro other developers from the computer department, struggled using outdated computer languages like FORTRAN and COBOL.
Learning Pascal was a blast! This language was the most revolutionary and comprehensive language I have ever learned. Learning every other language was a pain, especially Lisp.
Pascal language was comprehensive. I was able to learn some English from it. Pascal was good for engineering applications, unfortunately not productive enough for business.
I have found it difficult to organize my data using unstructured files. I have switch to Dbase II then FoxPro. Of course I have kept an eye on Pascal and for a long time to watch its evolution and eventually I have used this language for some of my projects.
Delphi pretended to be RAD (Rapid Application Development) tool. And yes: Using Delphi I was able to create faster small application prototypes with user interface, menus and tool-bars.
Today, 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. I have a Delphi license but I’m not using it.
I have learned Ada but never use it. Since the compiler was expensive and my engineering department has refused my request to purchase an Ada compiler. Oh well, at least I have learned how a good programming language should look like. Later, when first Ada compiler has become free I was already programming in other languages. The only advantage it game me was the quick learning curve for PL/SQL. As you know this is a language similar to Ada that also has embedded SQL.
I have noticed Java much later than others. I was busy working with Delphi for a successful German company. So when everyone else was starting singing and dancing on streets: Java, Java, I was not paying attention. After a short while I have review Java and I have concluded that is a bad designed language not worth knowing.
I was right then and is true now. Everyone else but me seams to fall into a frenzy of adulation. Java has promised to run in web browser and do the other things easy. It fall short on delivery, 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 have try to copy Delphi because they do.
Microsoft was envious on Java for years. 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 new, just empty promises to disrupt the industry. It is a subset of C++, but pure Object Oriented. It has restricted users from using pointers, free functions and references to functions. I do not like restrictions hence I do not like Java.
Python language has gain a lot of popularity lately. It is a dynamic language so it is a little bit slow (100 times slower than Fortran or C). The programmer productivity is higher though. This is due to descriptive syntax elements and multi-paradigm approach. Also it is an interpreted language and this helps the beginners to learn it. Python has a strong influence in computer industry: Swift, Go and Julia are new languages inspired from Python.
I have learned Python in 2014 – 2015. My first project was a test automation script for parsing Hadoop logs to find error messages and publish them on intranet web pages. It was very steep learning curve to learn HTML +CSS and Python in the same time. My next project was a DSL for test automation of digital maps. Third project was an ETL to transfer and convert digital maps from files into Oracle database. Python was great at this kind of jobs.
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. I will explain several issues:
- Pure languages have limitations and they are introducing concepts difficult to comprehend. I find migration from imperative language to functional programming or object oriented very difficult.
- Many languages are using abbreviations for keywords. Some languages like APL are using strange symbols that are not on your keyboard. APL had some success at the beginning but after a while it faded into the past. I think APL was a bad idea.
- Character representation using ASCII code was popular for a while but it is very limited. We use Unicode for strings, but older languages like C and Fortran have issues adopting it. New languages like Rust and Go are fixing these issues and have a better implementation for Unicode.
- 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.