I just read this post by Jeff Atwood about how important keyboards are to your average programmer. It’s true that “programming” tends to mean “writing code”, which will involve a lot of typing (unless you’ve got a copy of Dasher and a lot of free time). No matter what language you program in, you’ll need to write somewhere between Basic (lots of words) and J – a sample program of which is:
+/ i.@x:&.(p:^:_1) 1e6
Lovely. However, how do programmers work? Hopefully they think about the problem before typing, and then when they’ve settled on a solution, they start to implement it. If I ask a question such as “what is the product of all the numbers from 10 to 10000?”, a programmer might think of writing something like “ans = 1; for i in 10 to 10000, ans = ans * i; print ans”. A smart programmer might then think “hang on, that might overflow – I need an arbitrary-length integer”, at which point they might go away and download a library with this functionality, implement it themselves, or relax smugly, safe in the knowledge that their language provides this by default. Either way, the point is that the idea for the program might be a lot easier to come up with than the implementation.
Many years ago, after writing some horrendous games in the aforementioned QBasic, I came across something called Klik and Play (forerunner of The Games Factory and Click and Create). This tool let me make much better looking and more complicated games in much less time, and without writing any code at all! Since then, I’ve gone back to “proper” programming (in C++) for my day job, but even there it’s clear that there is a need for a simpler way of doing things.
Lots of “enterprise software” programmers write apps for internal use, and these tasks fall to the programmers because they’re essentially automation and process tasks that the other employees (the “customers”) can’t do themselves. I’ve found myself “writing code” for things that really shouldn’t need code at all – for example, maintaining legacy MFC apps that have hand-written code that puts a check mark next to a menu item when it’s clicked. This is the kind of thing that should be achieved through a visual editor, without needing to know which particular API calls are needed to get a handle to a menu item. Systems like Windows Forms improve this situation in some areas, but still fail to support useful work-reducing concepts like data binding without significant coding input. Adobe Flex is great for GUI work, but typically needs to be mated to Web services to provide backend functionality, due to its client-side focus.
One tool that allows non-programmers to program is Automate. This allows the graphical build-up of process flows, combined with integration into common business packages like Excel, to keep the programmer either out of the loop or at maximum efficiency (i.e. not writing code). It’s basically scripting for people who don’t know any scripting languages. You still need a lot of the fundamental concepts of process engineering that are used in computing (such as a good logical analysis of workflow, comprehensive error handling, data transformations, and an understanding of what the process is trying to achieve), but without having to know any APIs or languages.
Some things will always need to be written in a low-level language (such as the underlying data structures, algorithms, and operating systems), but “end-user” programmers will hopefully one day be freed from the need to learn a language. Originally, programs were written in machine code; assembler was then used to make a useful abstraction from the hardware itself; higher-level programming languages like C were then employed to build larger systems more efficiently; and modern scripting languages like Ruby build upon these languages to provide an even more concise method of performing general-purpose computations. All of these are still languages, however, and require specialists (programmers) to learn them. Today, specialists in areas other than programming need to use computers for their day-to-day work in their specialist field – the next level of abstraction must be no language at all.
Or maybe Javascript?





