Programming has become too complex and has lost its way.
Having been coding for a couple decades now, I find programming is getting more and more complex and it makes me wonder if software development is actually getting better or is it getting worse ?
In all my years of programming I have stuck to the old adage of “keep it simple”. When you break software down, it really is quite simple. The software simply needs to do a task. Some tasks are simple, while others are complex. But no matter, software is task oriented. That is how I have always written my software, simply as a solution to a task or multiple tasks. I have written a number of applications in the past for a variety of businesses and rarely did I ever have to write a manual for how the software was to be run. If it was not simple enough for me to explain in a few minutes, then it was not simple enough.
Now building programming tools is much more complex (requires a lot of documentation too) so it can’t be compared to end user software in the same way, but still even programming tools need to be simply in nature. There is a trap though when creating programming tools. Simple does not mean you don’t have to think. I am a coder and I design my tools for coders. You have to think a bit to be a decent coder. But being required to think a bit does not mean that things can be simple and easy. The key to simplicity is to free software development from meaningless complex terminology and to provide libraries which are based on simple concepts.
To that end I prefer a purely procedural style of coding and libraries need to provide low level, medium level and high level functionality. If the high level features don’t do it for you, then you should be able to fall back to medium level functions (requires a bit more code of course) and if that does not suffice you should be able to fall back on low level functions (requires even more code). This is why EZGUI has so many different levels in its command set.
New users of my programming tools at times may think it is too complex and may give up quickly. As I have stated to many a customer, EZGUI Professional has an initial learning curve. It takes time to understand how things work. Well, if EZGUI is so easy, then why can’t some grasp it immediately ? There are a number of reasons, some of which I will touch on here. First, EZGUI is task oriented. It was designed to handle a nearly endless variety of tasks. This is no small feat. In its development I considered the many possibilities programmers may face and built in features to cover a variety of possiblities. In doing this though, I did not have the goal of making the transition to EZGUI as simple as possible, for example by emulating other development tools, just so new users would be immediately comfortable. For example I could have tried to emulate Visual Basic, so the design experience was so simple that anyone could do it, but I knew that is an easy trap to get into. What do I mean ?
The “easy” in programming is not simply having a visual design environment which allows a non-programmer to draw an application, but it is a development environment which allows a programmer to more easily convert tasks into workable code. Programming is a skill, a craft if you will. By its nature it is not inherently easy. In the same way that carpentry appears easy when you look at the basics of what is involved (cut a piece of wood, nail it to another piece of wood and so on), but the real art is the ability to use simple steps to accomplish a complex task (build the entire house). Programming is similar.
This is why in the development of my programming tools, I concentrate not on the initial experience, but on the simplicity of the tools to be skillfully used to build complex software. So what is so hard about building software ?
Much of it comes down to the ability to combine thousands of small parts to build something large and complex. This is why coding style and coding logic play a big part in creating quality software. For example, in the same way that a well designed automobile must also take into consideration how easy it is to repair it and maintain it, so too with software, the ability to maintain the software and to debug it is vital to its success. This is why I personally find that using a more modular design when writing software is very helpful. I like to view writing software like using building blocks. The easier it is to add or replace a block, the easier it is to fix or improve something. The same is true with software. The more modular the design, the simpler the code is to understand and read and the easier it is to follow the flow of the code, the better your software will be.
This is why I use Basic rather than C or C++ ! Basic is a more natural language (if used correctly). This makes code more readable. This is also the mindset to why I designed the EZGUI runtime command the way I did. The command set, while powerful, was designed for simplicity. Most sub/function calls in the library are very easy to understand the meaning of the parameters. While the nature of Windows does not allow me to make every aspect of programming so simple that even a novice can grasp it, I did try to design the library to be task oriented and to break down tasks into the simplest steps I could think of.
Because performance and a small footprint are important, I have avoided the use of any object oriented programming in my software. OOP tends to add complexity, rather than to decrease it.
The mainstream world of programming in my opinion has not made programming any easier, but have in fact made it more complex. I haven’t been using a Microsoft programming language (other than to dabble once in awhile) for the last decade and when I recently tried to use Visual Studio to build a Metro application for Windows 8, I found it overwhelming and too complex. OOP has ruined much of the experience in my opinion. Without intellisense, many modern programming languages would be useless. The endless new terminology tacked onto programming languages makes things even more complex. To me, software simply needs to be able to draw things on the screen, get user input, make calculations, read and write data to disk files and so on. I don’t need an endless array of complex programming terms which have little to do with the tasks I need to tackle.
For example, when I was developing EZGUI 4.0 and 5.0 I needed to better understand multithreading in Windows. I found an excellent book on the subject which was written by experts on the subject and yet it was do easy to read and understand that one could quickly see how simple multithreading really is and the ramifications of the choices you make in doing it. This is why I chose a specific model for the threading engine in EZGUI (which was to only use worker threads for non-GUI tasks while passing all GUI tasks back to the primary thread) which has worked very well in the product and made threading easy to use for my customers.
On the other hand when I read books on subjects associated with programming using current mainstream programming languages, I often find the language too complex, riddled with fancy computer lingo which makes little sense to me and poor explanations of why they do things the way they do. Now multithreading in Windows is not a simple thing to learn, but if a topic like that can be explained simply why can’t the same thing be done with other programming subjects ? Maybe it is because programming has become too complex in the first place. Maybe the love affair with OOP has had a more negative impact on programming than many realize. Maybe programmers are no longer coders, but simply application builders. What ever the reasons, programming has lost its way. Programming will always be a skill of course, but this does not mean that methods of programming need to be overly complex. The tools need not be so complex that it requires an encyclopedia to learn how to use them. Programming languages need not be cryptic in style and syntax to be powerful. That has been proven with Basic. When I mention to others than I use PowerBasic, I get laughs, yet PowerBasic has the power of a C compiler, with the ease of Basic. What is so funny about that ?
There needs to be an effort to make programming easier, not so that it does not require any effort but in that a programmer can concentrate on tasks, rather than complexity of their tools. Programming languages would do well to go back to the basics of “keep it simple”.