Does everyone need to learn how to write code?
I have been debating this with myself for quite some time now. On one hand, it seems that writing code, or at least understanding enough about code to edit it, is quickly becoming a skill most people will find helpful to have. Something like knowing how to put together IKEA furniture, not completely necessary to do, but helpful if you know how. On the other hand, however, developers are doing a good job creating tools that abstract the code via some visualization. At the end of the day, these tools still produce code, but the user never has to see it.
I feel like the trend to create better, more domain specific, tools will win out over the trend of teaching non-technical people software engineering and development practices. I’ve met plenty of people who consider programming almost magic, they don’t understand it and do not really want to. Even if there is a simpler solution to their problem, if it forces them to write a little bit of code, they will take the hard way out.
Having said that, these people still want to customize their working environment, they still want to optimize their process and create custom software experiences. A really good example of a domain of software that enables users to do just that is CMS or Blogging tools. They enable users to customize their process as well as the look of their site and content. They are largely WYSIWYG and do not require one to ever look at the code if he doesn’t want to. And, at the end, all of the user’s work is turned into code.
Creating software that makes it easy and fast to publish content to the web is arguably what has lead to the rise of Blogs. We can now enjoy content from people who do not know, understand, or care about the technical side of things. And now, in addition to publishing software, there are more general tools being created. These tools are designed to allow regular users to create their own applications with the same ease as publishing on the web. They are designed to create Mashups.
A mashup is an application that combines the features of several other applications into a single tool. A great site to track mashups is ProgrammableWeb. Check it out to get a better idea of what mashups are all about.
The advantage of creating mashups is that the developer does not really need to create any specific feature of an application. For instance, lots of mashups use Google Maps to present mapping information. This lets developers to concentrate on their core competency and not try to recreate already existing services. On top of that, by using something as popular as Google Maps, developers are able to leverage a well known interface and thus, make their own application feel more familiar to the user.
As we have been discussing so far, non-technical users want more freedom and control over their experiences with applications. This is where mashups come in. Because creating a mashup involves reusing features that one is familiar with, their creation seems like a natural fit for application users. To that end, several mashup creation tool-kits have appeared. Most notably Pipes from Yahoo, Popfly from Microsoft, and MashMaker from Intel. The first two are really just abstractions of the programming paradigm using graphical elements. The third does something very different.
Instead of trying to simulate programming via block and arrows, MashMaker works as a plug-in into Firefox or IE. It lets users annotate their data as they are browsing the web. The annotated data can then be used as input into other services and the produced result can be insert back into the original page. For example, one can specify which part of a CraigsList listing is the address and have MashMaker render a CraigsList page annotating all of the listings with a small map from GoogleMaps. You can find more information, including a demo video, as well as the plug-in itself, on the MashMaker site.
By restricting the domain and simplifying the problem, developers can create powerful tools that enable non-technical users to create custom applications and experiences. In the case of blogging and mashup creation tools less is truly more. This is more broadly knows as domain specific languages, but that’s a topic for another post at a later time.
January 14th, 2009 12:33
The problem with creating development environments for non-programmers is that it never really works. It takes a certain type of thinking to become a programmer.
For example, COBOL was designed so business people instead of programmers could build apps. Instead it just created a new class of programmers.
http://www.martinfowler.com/bliki/BusinessReadableDSL.html
The design of VisualBasic had similar intentions.
There are very few areas where it really works (like Spreadsheets mentioned in the Fowler article).
Perhaps one day, we’ll have components that can be put together like legos to create a program but, then again, some people are a lot better wtih legos than most too
January 14th, 2009 18:18
I share your view, and I appreciate a lot the examples you provide.
In the medium term, knowing an easy programming language (something like Office macros, Python or ActionScript) will be increasingly common for many kinds of jobs (I have witnessed that trend in the finance world already, where traders and other people on the business side often know some C++ with smart pointers…), because the productivity advantage of being able to automate its job is so huge.
And in the long term, as you envision, zero-code programming will of course win. There will still be a need for “hardcore” developers, just like there is still a need for some developers to create and maintain operating systems.
In practice this evolution might not be that easy to see, and for instance there is already a huge number of people tagged as “developers” that are actually doing business tasks, think about the SAP consultants.
You mention DSL’s, and most Java/.Net API’s available can be considered as DSL’s expressed with the Object Oriented constructs; I am very curious to see how tools could enable non-technical people to combine arbitrary API’s together to build mashup applications.