When we enter 2017, the application programming language to be used by professionals is still debatable. On the one hand there are some cryptic languages to achieve high performance, and on the other hand we have some byte-code generating languages that promise productivity.
It looks like programmer’s life is hard, and complicated. Even in this day and age, software development efforts will need to deal with trade-offs like buggy applications, unmaintainable applications, inefficiency. While there are many software development tools available, none of them offer convenience. Each tool will fail at some aspect miserably, almost making us think about abandoning all software projects.
Maybe we should take a closer look at the tools that are offered to us.
C was invented by Dennis Ritchie when he was re-implementing the Unix operating system on a PDP-11 minicomputer. It is a low-level language, which means it works direcly on hardware. Computer architectures have been improved in many ways since then, so using C as a systems-programming language on modern computers is very questionable. However, architectures of small digital devices resemble old computers a lot, so C became a very popular language for embedded development.
When you read C code, you can figure out how it will translate to assembly instructions. Its syntax is also tuned for this purpose. Because it has constructs for branching and looping, some people tend to think that it is a high-level language. In fact, these are just a make-up for assembly language.
Java was designed by Sun Microsystems as an embedded programming platform, aiming to be an alternative to C. Digital devices started to show versatile properties, so there was a rising problem that each device would had to be programmed separately. A layer between device and software allows the same application to run on many distinct configurations.
C and Java are not the tools to be used for application programming on desktop or bigger computers. A general-purpose programming language to be used on computers would be Pascal. It is a high-level language, and it is designed to be compiled. So it will let you take full advantage of your computer hardware, while providing you all necessary language constructs to assist you in writing computer programs.
Pascal is a graceful language. It supports all essential object-oriented paradigms at language level, so that it can be used to adequately describe business logic. Its excellent modularity features make it possible to manage growing software projects.
Software project belongs to customer
When we finish a software project, we don’t only deliver some executables. We also deliver its source code. The code must be readable, and maintainable. The runtime cannot have any dependency that may interrupt the operation at some point. The designtime also cannot have any dependency that may cause difficulty for further improvements made to the project in the future. When there is no way to implement the project without dependencies, customer should be informed openly.
Hidden cost of managed code
When a project is implemented in a virtual machine language like Java or C#, a runtime dependency to the virtual machine is created. Developer will deliver the application and demonstrate that it is working. But the application has a dependency to a tool of Microsoft or Oracle. When they stop maintaining their virtual machines, the application will suddenly stop working.
The customer paid for the project and received the software. Once the virtual machine becomes obsolete, however, s/he will pay again to re-implement the project on a working system.
Pascal only makes the assumption that it is running on a Von Neumann machine. A Pascal program runs on any Von Neumann machine efficiently. Pascal code is valid as long as Von Neumann machines exist. The same program can be compiled to multiple computer systems without code changes. It’s like a virtual machine is already built into the language.
Pascal is like a protocol between you and the computer. It doesn’t get affected by changes to the internal hardware architecture of a computer too. When such changes occur, only compiler needs to be updated.
If a program is written in a low-level language such as C or C++, there may be severe performance drops even if the compiler is updated accordingly. These languages reflect to specific implementation of a computer, so code changes may be unavoidable to achieve same speed on a different implementation.
Science-oriented interpreted languages like GNU Octave are often used and preferred tool for the development of scientific computing software. However, when there is a need for using computation power of computers to a highest extent, usage of a compiled language becomes a necessity.
Utilizing systems-programming languages like C/C++ in such projects only increases complexity. What scientific community needs is a clean and concise language with well-thought basic computation capabilities:
Open source software needs to compete against proprietary software in order to free people. Using a productive tool is crucial for open source projects to succeed. Many times we see that open source projects are using the same inferior tools like C/C++ as their proprietary counterparts. Proprietary software companies have enough budget to pay the costs caused by these inferior tools. Quitting playing by their rules will allow developers to show their true potential.
C contradicts GNU philosophy
Free software should be distributed with source code. C is a low-level language. C code cannot be understood and modified even by an experienced programmer. So applications distributed with C code shouldn’t be considered as open source. The source code should be high-level and expressive; as this will encourage even a novice programmer to inspect and customize the code.
Pascal is also a distinguished tool to produce games. Many successful games were already built with Pascal, and there is no reason for it to not be the #1 choice as game development tool. Pascal is fast.
Gamers should ask developers to work with Pascal if they want to see less bugs in games. Game engines can also be written in Pascal. If your game is using a lot of memory, it is probably because the game engine is using a harmful technology known as C++.
Although Pascal has all the OO extensions needed for professional work, it still gracefully allows plain structured style programming. Ordinary users can benefit from full power of their hardware by easily implementing their personal projects in Pascal. Pascal can be used in labs of schools.
C++ programs have the potential of running 5–10% faster than Pascal programs. However, in practice Pascal programs usually run faster. This is because human factor will inevitably involve in real world situations. Consider this experiment:
Pick a simple task and have 2 different individuals work on this task separately. Limit their times to 10 minutes. One will code in Pascal, the other in C++.
* Pascal programmer will implement the task in 1 minute. S/he will spend remaining 9 minutes to optimize the code.
* C++ programmer will implement the task in 10 minutes. No time left for optimization, hence the program will run poorly.
When working on a software project, we start by implementing a small feature. We compile it, then test it. Then we add another small feature, recompile the program, and test the new feature. We approach completion of the program step by step by repeating this cycle.
In each cycle, compile operation sits between coding and testing activities. Therefore, compilation speed should be at an acceptable rate to ease our development.
So what could possibly go wrong here? It came to our attention that some tools that present themselves as very advanced development tools are having a very difficult time when compiling a project.
I don’t believe that spaghetti programming has ended. Nowadays they call it C++. It is a tool that lacks even fundamental data types such as boolean, and it draws your attention to hardware. The main motivation to use C++ in application programming could be to write unmanageable code.
C++ programs are obstructive, and poorly-designed. C++ programmers are harmful people. Stay away from their projects.
Professional programmers can easily be lost in many technical details. They should have a grasp of the position of their work in the society.
What: Developing software applications.
How: Implementing features in the software that meets customer demands.
Why: Achieving customer satisfaction by leveraging their businesses.
Although we are discussing programming languages in this article, this doesn’t mean that we believe coding will be relevant in near future.
Writing programs as text documents was a choice made when only text terminals were available. We have sophisticated GUI systems today, but coding in text is still practiced because it is still the fastest way of creating a program.
This is a saved file of a flowchart made in Flowgorithm. When you prepare the flowchart visually it will take a lot of time. However, you can use an XML tree editor to create and edit it much more quickly.
Since there is at least one way of creating programs faster and more conveniently, we can expect coding to become a rarely needed activity. An XML notation can easily be formulated for any given structured programming language. Once the XML layer is added, one can build a program tree by using XML tools.