degradation of programming, or back to the future?
It is impossible to make a mistake if the question about the most complex programs is to mention firmware FADEC and autopilot Burana. What do they have in common? This is ultra-reliable code executable in RTOS-conditions – that is, literally the apogee of programming with every cycle verified and several levels of program fault tolerance. It is all the more surprising that all programs of this level are developed only according to Low-Code methods – and this began long before the current hype.
In this article, I propose to understand a little – where are the conditional boundaries of the required skills and applicability of approaches.
Let’s immediately clarify the terminology: “programming” (programming) is literally decomposing and structuring a task into a set and sequence of specific actions. And “encode” (coding) is to turn sequences of actions directly into code.
Obviously, there is practically no exclusively programming or pure coding, but the essence of the topic under discussion is precisely in their percentage in various tasks. At the dawn of programming, when there were no “libraries” for every occasion of life and various high-level tools (and, importantly, millions of typical tasks a la “three in a row”), the main work of programmers was reduced to a deep analysis of problems and hardcore mathematics. And only after a detailed listing of the formulas, rather routine low-level coding began.
However, [с приходом интернета, мобильных приложений и цифровизации] over the past 10-15 years, everything has turned diametrically – the industry began to generate thousands of fairly identical projects without the need for heavy mathematics, and the corresponding development of high-level languages \u200b\u200bfinally shifted the focus of skills required from SW developers from programming to coding. Here it would be reasonable to argue that even a mass-produced modern program is difficult to imagine without a heaped filter, sorting and / or FFT – but they are primarily presented in the form of ready-made pieces of code, and mathematically invented decades ago.
And here we come to the very essence of the differences between modern programming and coding.
Problem setting difference
For the sake of clarity, let’s take two fairly typical tasks with a clear dominance of one aspect over the other.
“We need to make online banking with such a cloudy backend, such an interface and with such buttons that call for such options. We need a fast MVP and we will finish the releases.”
“There is this jet engine with hundreds of interconnected non-linear variables. At the push of a button, it should automatically maintain a given speed under any allowable operating conditions.” (By the way, this is the firmware mentioned above FADEC).
Exaggerating, modern coding is when specific functionality is implemented in the required environment / language with any available tools and any number of crutches with the possibility of further refinement. And pure programming … Well, you understand 🙂
So what is Low-Code programming?
Programming tasks are becoming more complex and require a minimum probability of error, and the tasks of coding such programs are becoming more and more standardized. As a result, already a couple of decades ago, such programming environments as SimuLink, VisSim, etc. were developed. It was they who became the pioneers of “Low-Code” philosophy long before the emergence of an established term.
In Low-Code environments, the programmer is given the most responsible role – to competently develop a transparent program using pre-prepared pieces of ideal code. The entire listing is compiled automatically, and can even be translated into ready-made machine code (historically, compilation went mainly to C languages, but the development of the LowCode philosophy expands this list).
Obviously, this approach completely eliminates errors at the level of syntax and mechanical performance of the code.
Also, a big plus is the convenience of optimizing the program to minimize the required computing resources.
In fact, any development and processing of the project can be done without creating a huge shadow legacy and a bunch of crutches.
But, of course, there are also disadvantages:
The final compiled listing is practically unreadable by a human if necessary. (This problem has been known for a long time, but it has been especially developed in the light of AI and neural networks – it is far from always clear to us how this chaotic code works in general).
Although the processor part can be flexibly optimized, the memory handling in the resulting listing may not be the best.
Again, these programming environments are not at all conducive to learning modern coding techniques.
Coding at a high level of abstraction
On the other hand, the unequivocal and extremely important advantages of the approach of hand-written high-level coding (especially in languages like JS, Py, etc.) include the following:
Extremely low barrier to entry into the industry: in fact, already from the age of 5 you can start writing simple executable code, and high school students and students have long been freelancing and working in small projects en masse.
Fast, understandable, effective: when you need a specific small product, it is much easier to write it “by hand” than to struggle through visualization.
A hyper-bloated, hand-coded industry has its downsides:
Low individual responsibility, especially in the corporate segment. Here, of course, the ill-fated waterfalls and kanbans were also superimposed, which are still smaller in serious programming.
A huge amount of legacy, and all the functionality is added mainly “from above”. Low possibility of fundamental processing of the product.
A few words about the labor market
The level of salaries is certainly a separate huge topic. But to be as brief as possible, then, as the people say, “the market has decided”: until recently, even the leading software engineers in the CIS received their strengths as juniors in typical SW coding – with a monstrous difference in the required skill level, not at all in favor of the latter.
On the other hand, it recently turned out that 60% of ordinary US IT employees, at best, do not interfere with the work of the rest. (About it: pompous in Russiansad in Englishand some dry facts from Khabrovites).
In today’s world – programming is obviously not a complete activity without coding, but coding is only a small part of the huge iceberg of programming.
In my opinion, the development of LowCode approaches for a wider range of projects will significantly improve and rebalance the SoftWare development market (although not without losses), which, ultimately, is definitely good in the medium-long term.