About a year ago I asked a highly sought after blogger on web 2.0 where she thought the next wave was. She felt that the next generation of the web was about letting the user create applications without being a programmer. No doubt she had the mash-up movement in mind, but what struck me was not the trendiness, but the reason: software for the people by the people.
For 20 somethings and under software is the normal way to solve a problem. It doesn't make sense to them that a guru needs to write a program to solve their problem. They want a way to glue things together to solve their own problems. And they want to do it without learning a thing about programming!
Heresy? No more I think than computers and iPods with a color scheme to match your pocketbook or favorite wardrobe color. Or designer virtual reality goggles. When a technology becomes the normal way of doing business, Joe and Jane average want to personalize it and make it their own.
There is a certain kind of programmer that is likely to see this popularization of technology as a threat, but I think we should see this as a huge opportunity. The current mash-up technology is rather limited. It is really little more than a glorified report writer. I think a lot more could be done to empower the average non-programmer to create applications that make their lives easier. Mashing up data scrapped from webpages and sucked in from REST APIs is only the start of this revolution.
Perl community and the Perl language ecosystem is in a unique position to write and support the next generation of this technology.
We're the glue language Glue is in our communal blood and the way we think. Traditionally, we've applied the glue to components that only engineers and programmers can use. Now we need to think about how to add glue for components that are self contained enough that a non-programmer can plop them into a framework.
Applications written by non-programmers are basically composites of existing applications. The supporting software defines a wiring system. The non-programmer plops in components into a preset wiring system. The programmers develop the wiring. We've done it before. We can do it again.
Our skills are deep and broad. In my brief 5 months of active involvement in Perl monks I am most struck by the extremely wide variety of people it attracts. The elegance of the language tends to make it interesting to bright people in a wide range of professions - judging by the posts and the CB chatter I find mixed in amongst our full time programmers and hard core systems engineers are lawyers, doctors, school teachers, biologists, physicists, artists, musicians, entrepreneurs, financial engineers, and probably several others I've missed.
I am also struck by the intellectual flexibility of this community. Most of the more active members of PM are computer language polygots. Even more important they are paradigmatic polygots. This is one of the very few places on the web where you can find people who are handy and know how and when to apply procedural, functional and object oriented programming.
This is important to the next generation of web tools because creating powerful write-your-own-software systems with a robust division of labor between the end user and programming system is hard. It requires bright people who understand software on many levels:
- low level network problems that can interfere with distributed processes and data
- analytical skills and wide development experience for teasing apart the wiring issues from the content issues in a useful manner.
- the ability to design applications that intelligently apply multiple paradigms (procedural, functional, object oriented). In my experience, the code base for software that writes software quickly becomes huge and unweildy unless one can create designs that move fluidly between these paradigms, playing their strengths off against each other.
As a community we have all of these skills. We even have individuals with a large number of these skills bundled up into one person. I don't know any community other than the C community that has such a range of skills. However, the C community has never focused itself as a language community. Its communal life is largely focused on specific open source projects. This interferes with the kind of cross-discipline free-flowing ideas needed to develop the next generation of mash-up frameworks.
We've got CPAN. We have a huge repository of pre-built modules providing a diverse range of functionality. For a non-programmer to use these modules they need a visual front end. This is lacking, but the Perl community has the tools to change this: we may not be very strong in the desktop GUI department (e.g. Tk) but we certainly have good tools for programming web interfaces. And in this case it is the web interface that really matters.
We've got a growth path. Looking at both the history of religion and the history of science, I've noticed a common trait in ideas that last: the ability to work at two levels. Ideas that last have a simple level that everyone can understand. But for those that want real mastery there is a deeper level of intellectual engagement that seems to go on and on.
The same is true I think in software. A framework that pretends to do everything fails. Successful frameworks do the most important things well. For the things they don't do well, they provide an escape hatch that lets one plug-in a custom solution or a bridge to a suitable third party application. They also build a community around that escape hatch so that those who need to use it can find help as they are learning customization skills.
User groups built around software are as old as the first home computers. The PHP world has been especially good at creating communities around their software. But I don't think those are the kind of communities needed to support someone who wants to customize a next generation mash-up engine. These communities are built around a specific application, not the process of creating applications in general.
The people who will want to customize a next generation mashup engine won't just be learning to customize a software package, they will be learning to customize software that writes software. They will, in essence, be learning to program linguistically rather than visually for the first time. They will need a community that is both knowledgeable in programming and patient with beginners. There is really only one community that has been spending the last 10 years learning how to do that. And yes, it is Perl Monks.