The world, particularly the world of technology, is in a constant state of evolution. The era of single machines has almost reached its inevitable end, as personal computers are replaced by an explosive plethora of new gadgets and devices.
The advent of such technologies spawns a brand new, wholly unique set of job functions within the industry. And each of these job functions presents its own brand of problems which require different and innovative approaches in order to be resolved.
In this new era then – an age of information overload – it has become progressively more important for everyone, regardless of their particular job, to be able to do at least a little coding. The sheer magnitude and frequency of data flow and processing in today’s world means that engineers alone can no longer be relied upon to shoulder the entire burden of programming. Coding is the next big, must have skill in the global job industry.
The Evolution of Coding
Yet coding itself is undergoing massive changes, evolving so that it can adapt to the inundation of new devices and the future technological environment. The coding that is done today is quite different from what it was a mere decade ago. A program used to involve a single, stand alone machine or computer but those days are long past.
Today, the targets include big data, mobile and web applications, and they are all increasingly interconnected. The challenges that face programmers today are network communications, concurrency, asynchronicity, locking, caching, and a spate of network protocols. The pressures created by these challenges result in a variety of phenomena at various levels in coding.
Moving forward, in the near future and the more distant one, programmers will need to progress beyond coding for embedded devices and write codes for mobile phones, cars, glasses, smart dust, and even drones. Additionally, non-traditional coding is, and will continue to be, required even for traditional computing with the advent of the GPU array as an advanced data crunching coprocessor. The need for new and innovative approaches to coding is apparent, from both languages and programmers in order to adjust to various form factors and to tackle issues, such as CPU speeds, low memory, power consumption, and real-time requirements that were previously only dealt with by specialists.
Languages such as JavaScript or C++ inherently focus on how data behaves and thus constrain it and data collections within access methods, leaving programmers to incessantly worry about its behavior and how to access it. Yet, data has no behavior mathematically speaking. It simply exists. The restrictions of object oriented programming have thus led to the rise in popularity, and the subsequently increasing use of, programming languages which do not wholly concentrate on how data behaves, but make it easier to analyze and manipulate. These languages include R, Clojure, and Python.
Modern day programming has spawned a generation of developers, who know very little, if anything at all, about coding and software development. Yet, they create quite a glorious mess and out of that chaos spring magical solutions in JavaScript, Zapier, IFTTT and Excel macros. These programmers by accident hold no interest in lines upon lines of complex, unintelligible code or in learning how to write it.
They require instead a new programming environment, with enhanced languages and improved frameworks therein, so that they are able to develop what they want without the attached hassles of traditional coding. What they need is invisible and seamless coding, so that they can execute what they have thought of simply by dragging and dropping blocks of pre defined functionalities.
The problem however, with the prevalent approach to coding is that it is akin to balancing multiple tea cups, one on top of the other, in order to save time and improve efficiency. Sooner or later, one cup will topple and it will bring the whole stack crashing down. Increasingly powerful systems with faster processing can no longer be the answer to all programming problems. The relative application performance has not shown any subjective improvement over the past decade anyways.
The solutions that software engineers have provided so far have gone around in circles, without actually solving the big problem. They are often subject to security holes within their frameworks, creating significant risks for systems and make apparent the need for a shift away from the traditional programming way of thought and towards more innovative and effective system architectures.
Coding has gone from highly complex low level programming languages which required multitudes of lines in code, to slightly simpler mid level programming languages which are still rather complex but require fewer lines of code, and on to high level programming languages which make the code all but invisible, allowing programmers to write applications swiftly without really needing to understand what goes on behind the scenes, so to say.
In the near future, perhaps the next ten years or so, languages will evolve further so that coding becomes nigh invisible. All programmers will need to do in order to develop applications is select pre defined functionalities, drag them around and drop them where they wish. Open source communities will provide the world with applications akin to Keynote or PowerPoint, whereby programmers of the future will be able to add any and all functionalities they desire simply by dragging the blocks around.
Programming languages need to evolve further towards simplicity, simply because the system architectures and the problems presented by the future will be exceptionally complex. This complexity will arise from the need to program parallel architectures. A problem will be broken down into parts and each part would be individually handled by a CPU in an array of CPUs working in parallel.
The requisite simplicity would be achieved through languages that are based on the natural language that we use on a daily basis to define our problems. This natural language interface will mask the more complex algorithms that would work behind the scenes. These artificial intelligence algorithms will translate and define the problems in a high level programming language, such as JavaScript or C++.
The code thus generated would be nigh seamless, as it would be rid of man-made syntactical errors. This would be possible to achieve because the artificial intelligence will create the variables, form the loops, and will define classes and handle all errors. Artificial intelligence will not however, be able to entirely replace human programmers as there will remain certain problems beyond its scope. These problems will require human attention and intervention, and the use of programming languages that we work with today.
In addition to the complex system architectures of the future, programming languages would require a natural language interface to enable experts from each field to solve their own problems without having to know or to learn the complex semantics and syntax present in the programming languages of today. That ability will allow people from fields as diverse as astrophysics and archaeology, and genetics to statistics to be able to solve the most difficult of problems by utilizing computers themselves.
Could the future of coding truly be invisible or seamless then? Based on all the evidence so far, and the ongoing efforts and advancements in the world of programming, one would certainly be inclined to say that yes, coding could definitely be invisible and seamless in the future. This is evident even today in the bringing together of C++ and R by the Rcpp package.
C++ could perhaps be defined as the programming language of today, and the statistical language R could be the language of the future. The Rcpp package allows for near seamless transfer of data between the two languages, bring the present and the future together. It combines the efficiency and speed of C++ with the incredible versatility and the power of R to deliver high performance statistical computing.
The Rcpp package is proof today that the future of coding could be seamless, if not invisible, tomorrow. Whether more programming languages, particularly JavaScript, evolve and adapt to accommodate the need for seamless integration is yet to be seen. But there is definitely hope for a future where programming languages do not get in the way of programmers and developers, and seem nigh invisible.