Coding becoming second nature
Yesterday in college, I presented a seminar about 'The level of knowledge teenagers and young adults have with programming or instructing computers to do things'. In this presentation I said aloud "I believe programming will become second nature in years to come", maybe a decade. Although it was not planned beforehand, really the whole presentation was kind of on the spot, it is something that has been on my mind for quite some time now.
First of all, I'd like for you to read the following blog by CodingHorror AFTER you read this one: http://blog.codinghorror.com/please-dont-learn-to-code/. If you've already read it, please disregard that post, as it is completely different in the perspective Jeff Atwood aka CodingHorror presents. With that said, Jeff's post is very valid.
Before I discuss my reasoning, you must first really think about what coding is. To those who are ignorant of the definition of code, the verb code means to 'Convert (the words of a message) into a code so as to convey a secret meaning' according to Oxford Dictionaries. In computing, usually we're not really trying to hide the meaning of the computer code, but the definition is still valid in that the code you usually write is through a computer language such as C++ or HTML which is eventually translated into machine code in order for computers to universally understand.
Every day a lot of code is written and produced that feature functionality users can use in some way or another. This code is typically a computer language, such as C++ or HTML. To even begin writing such code one must learn the language they're writing in. That requires both time, effort, and of course motivation, an interest. To a programmer, picking up a new computer language is sort of like learning the Finnish language as a Swedish person, very similar dialect. However, first timers can be in deep trouble for months before they learn and understand code they are reading.
That's just not ideal for arming everyone with the ability to code, not everyone has an interest in going out of their way to learn to write code. We need a way to present a way of writing code in a way they already understand. Like their mother tongue. In English I would write or say something like "Wake me up at 6AM" and it would set an alarm for 6AM. What might be going through your minds is that such technology already exists with Apple's Siri or Samsung's Galaxy. However, it's limited in what it can do and isn't accessible in a universal way, the way machine code is.
What I'm proposing is a general API present in all applications that adds immediate support for user coding that is standardised. A new way of coding that makes people's life so much more convenient because they get to change the way an application works using some words that generate a final command for the application to obey.
The reason this would be such a great investment is because everyone would feel and be in control of their own application usage. Take for example an application like Facebook or Reddit, the user hates the white background because it destroys their eyes, and lowering the phone brightness makes text unreadable. The user wants the background to be a darker colour: They command "Darken background" and the main background of the application darkens.
Another example, you're a busy business man who has many meetings per week, your smartphone has Calendar and Alarm Clock applications that you use for daily updates regarding your meetings. Typically you'd go to Calendar and specify your meeting date, but now you want daily or even hourly push notifications to let you remind you of your next meetings. So you specify the reminders every meeting you setup, that can be quite a hassle setting up all your reminders. The issue isn't quite present yet, the application would implement some template engine for your problem of setting reminders per type of calendar event.
However, the issue lies in the application developers implementing such a system. The system is independent and known only to that application. This idea provides a general way for users to be able to have two applications interconnect with each other. Although, the issue still isn't fully present. The application will implement an API that is accessible by others.
This is where the issue comes in: every application creates their own API, and every other application has to worry about implementing support for the other applications, it's a lot of unnecessary man hours.
Going back to the business man example, to immediately set up your meetings template, you would go to Alarm Clock specify a template called Meeting with some time templates set, maybe even do it all via voice "New Meeting Template daily reminders at 8AM and one hour before." Let's break that message down, first of all "New Template" specifies that we're creating a new template, with Meeting being the noun, "daily reminders" indicates the user wants this object to trigger on a daily basis at the following time "at 8AM", "and" is present so add another time to the daily basis 'time set' and read the following time "one hour before". The last part of the sentence is actually a lot less complex than you might think, simply part of this general API is variables everywhere. Part of the reason features aren't always present in applications is the amount of time it takes to make those features happen. So having data accessible via this user saves time for developers.
Then, in the Calendar application, the user would command "New Meeting 'with John'". This command will simply check out for any specific objects that go by the name Meeting and pass it some data 'with John'. Where the general API may even go a step further to further identify John and give you, the business man, more context.
What I want programmers to think about is nothing regarding how to break that order down. Instead pass it through some controllers and the application will get some responses regarding the order for the application to process, where everything follows a general API known to all.
Speaking of such an idea today is laughable because one cannot simply make everyone use such an API in a general way, which is why it will take more than one or a few people to perform such a life changing task.
The first step to making this present in all applications is providing it everywhere. This means that all platforms would ship this API as part of the bundle. Meaning large Fortune 500 companies would need to dip in and get involved in the process.
The idea itself is actually common in today's programming age, it is nothing extraordinary, all this idea presents is a general way that all software should be accessible. Doing this will greatly reward the market of smartphone users and maybe even all computer users by giving them control of the applications they use.
It is important to note that this idea is not meant to be forced upon the user, but provided optionally to them with their own consent and usage. This in itself is a major problem that all applications face today. There's one fixed User eXperience present in the application with an unexpected and unpredictable range of configuration that the application needs to specify and manage for the user.
This whole idea gives the user access to dynamic configuration where they start defining the configuration themselves. If that sounds complex for the user, it really is no more complex than commanding "New Meeting with John".
I see this feature as being inevitable, organisations can only keep going their own separate ways for so long before they get together and implement the great feature that is understood universally because in the end it is great for their own product and market.
"Coding is no more important to learn than Plumbing." Why you're very wrong. Despite the fact that these are two are very different things completely, they relate in basic human knowledge. Everyone is a plumber in that they know how to unclog a toilet by operating a plunger. Similarly, everyone should be a coder in that they know how to write very basic code.
"Would this still be coding?" Technically, yes. Although not the type of coding we're familiar with today. The idea of commanding although in plain english, is still technically specifying a code for the device to follow and obey which is then translated into machine code.
"How much effort would this require to incorporate everywhere?" A LOT. This idea of coding becoming second nature to the average human being means that the thing must be present in most places the human will come across. In this case most places is basically electronic devices, this requires the effort of all big players in the scene of electronic devices.
Performance issues Hah! Nice one.
But, why? Why not?
TL;DR We need a universal computer coding language that everyone can understand and write in using knowledge that they already have, such as their mother tongue, which is the easiest, most expressive way of reaching the goal.
:heart: