Proposal for a collaborative learning system
As a self taught programmer I have always been interested in finding better and faster ways of educating myself on any subject. In my experience I have found the biggest blockade to learning is the quality of information. The problems I most commonly encounter are:
Assumes you already have studied a certain technique/skill/area but fails to mention this. This can make many people give up as the subject seems difficult when actually they are just missing a key piece of information essential to understanding it.
Wastes time explaining a different subject to the one it is meant to be explaining. The worst example of this was a tutorial on encryption I once read where 90% of it explained how to code in C (badly), and then only spent a few lines at the end explaining encryption. For people who already know C this tutorial was 90% redundant.
There is no structure across different documents which often leaves gapping holes in a students knowledge. These holes often lead to the first problem described occurring.
While these problems won't stop a determined individual from learning it does waste time and will almost certainly leave some holes in the individuals knowledge. I have come across these problems many times, and while my ability to work around them has improved greatly I still feel that I and many others are wasting too much of our time battling with them.
For the last two years I have thought about ways of solving these problems. The ideal solution would be for a single person to write a cohesive set of documents starting from the absolute beginner stepping right through to expert without leaving any gaps in the information. However, I highly doubt a single person skilled enough for this task exists and if they did I also doubt that they would have the time to do such a large task. For example, imagine how long it would take for one person to write up just one segment of the IT field (e.g. Computer Science) as it stands today, never mind keep up with new developments.
However, if this set of cohesive documents were written by a variety of people this would solve the problems associated with a single person (as well as introducing some of its own). Kuro5hin is an example of collaborative media that we're all familiar with. I believe a system similar to Scoop (the software Kuro5hin runs on) is the right direction. A web based system that allows users to create content and is moderated by peer review. Scoop is not an ideal an ideal system for solving the problems outlined earlier. I believe that a custom system with the following features is required.
Topics broken into modular lessons - Each topic of information should be covered in its own lesson. For example, one may be tempted to place the topic of C1 programming and the topic of linked lists in the one lesson due to their close relation however it would be more appropriate to give them separate lessons. Not everyone who wants to learn C wants to learn how to create a linked list2 and vice versa. The real benefit of this is seen when we look at the overall structure of the site in the next point.
Tree like structure organisation of information - Lessons should start with with core concepts then branch out into different areas. This allows beginners to the subject start from the bottom up. For example, a website teaching German to English people would start off by explaining how language is actually constructed (sentences, paragraphs, vowels, nouns etc.). The next lesson in the tree would then cover how language construction differs in German. Then it could branch of into topics such as writing in German or Speaking in German. The user can choose a path of learning that suits their current interests. Users more experienced in the subject can easily enter the tree at a level they are comfortable with. Because the lessons are modular they won't waste time reading redundant (to them at least) information. The tree structure allows us to present all the information to become proficient in field while still giving them the freedom to choose which direction is takes.
Defining assumptions - Each lesson should clearly define what knowledge is required to fully understand the information and ideally link back to lessons that contain that knowledge. If a user finds that what they are reading is above their level they can easily traverse back down the tree until they reach a comfortable level.
Peer review - When someone submits a new lesson is should be peer reviewed much like the edit queue on Kuro5hin. However, unlike Kuro5hin an unspecified amount of time should be given to review the article in order allow users to do their own research for the article. Users should be encouraged to contribute as well as fix mistakes. Rather than a voting system users would have a flag they could turn on or off when they felt the lesson was complete. Once complete an editor would check the lesson and add it to the tree. Having editors involved ensure that the information meets the websites quality standards as well as prevent abuse of the flag system.
Lesson specific comments - Users should be able to attach comments relating to the lesson. The online PHP3 documentation already has this feature and it has proved extremely useful. User comments often provide practical advice relating to real world issues and problems.
Regular lesson reviews - In most fields there are many developments and changes over time. In the IT world for example languages has such as C have changed quite a bit since they were first developed. It is important that lessons undergo regular reviews to ensure that they are still relevant in the future.
Strict editorial guidelines - Because many lessons will be written by different authors the possibility exists for each lesson to have it's own writing style and format. A familiar style and format is easier for the user to learn from so it is important that writing styles and lesson formats are clearly defined. What these are will depend on the subject.
Funding - An issue often neglected with many websites is the financial side of things. Large websites cost money to run in terms of bandwidth, hardware, and server administrators. Contrary to popular belief there is actually quite a lot of money in online advertising. The forum webhostingtalk.com reportedly has an income of over $200,000 per month. Provision should be made for the website be financially viable in the long term.
The end goal is to have a series of well written lessons that when put together give complete instruction in the entire field and is updated and improved regularly to ensure it remains relevant for years to come.
Ideally the best way to implement something like this would be as an Open Source project like Scoop. This would mean that people from non-tech related fields could implement their own versions. For example, there could be systems to teach math, languages, the various sciences, and much more.