A while ago I wrote this post about all the curated lists of "awesome" things you can find on GitHub. There is an "awesome" list now for almost any programming topic out there. A lot of these lists are interconnected, even if they were not authored by the same person. In that article, I alluded to a method of making learning programming topics easier.

So how could we do that? Well, I'm still not entirely sure. There are entire fields of research involved in the best way to learn and the best ways to teach a topic. This holds true for every subject. Not just programming or technology topics. So knowing this, how could we even think of trying to create a new method for teaching someone a programming language? I believe the answer lies within the discovery of great content. So how do we let people discover great content?

Creating Content Behind a Pay Wall

We could create a new website targeted at a specific range of topics. There are quite a few start-ups appearing in this area. These are largely commercial projects. I will not point any one out in particular, but the process is fairly straightforward and easy to understand: you pay a fee, and you gain access to learning content. This content may also include access to progress tracking systems such as quizzes, tests, etc. or even access to limited teaching professionals. For some people these systems work great, and that's great. These business should exist. However, I largely believe someone is paying for access to content that can be found freely elsewhere. Found on sites like this one, YouTube, but more generally just elsewhere on the Internet. My main problem here is not the fact that a user is required to pay for these services (people should make money for their hard work, after all), but rather there becomes a great amount of learning material centralized in one location. No site exists forever. There are millions of websites out there with great content. There should be a way to expose the content of them all (I can already see people skipping to the leave a comment section at this point).

A Guidance Engine

A lot of people probably though of search engines at the end of that last section. After all, that is what search engines are supposed to do: expose content from around the web. However, I find search engines distracting. For one thing, you may not know exactly what it is you are looking for. You may know you want to find information and learn topic "XYZ". You type whatever phrase it is into your search engine of choice (again, not going to go mentioning any one in particular. And I doubt me mentioning one would drive any game changing traffic to them). So at this point the user is probably presented with millions of results, after all we've already established there are millions of pages with great content. The first results may seem promising, but they probably don't cover every thing you wanted to know. Search engines are largely "you asked for content relating to this topic, and here is a list of pages that seem like they cover that topic best". Could we do better?

Could we build a guidance engine? For example, you want to learn about the same topic "XYZ". With a guidance engine instead of a list of search results that are all competing for your attention about that topic, what if a list of results that all worked together appeared instead. Results that guide you in your learning. These results would probably be built from users that are knowledgeable in those areas. Where you start with the first and then work towards the end of the list. And then by the end of the list of results you should have a fairly good grasp of the topic.

That would be the point: one search one topic. It's much to easy to get distracted, especially on the Internet. The results of such a guidance engine should be intelligent enough to visually separate content that is related, but not immediately crucial to learn a topic. Again, this would probably be something that a group of users would need to curate.

The system would not necessarily contain the content itself, in that respect it would be like a search engine. The system would be a jumping off point. Helping users to find great content in a different way. It behaves like a search engine, but the underlying ideas would be drastically different.

Page Rankings

Ah, here we go. How would you rank content in such a guidance engine? Well, the content is already heavily curated. Because of that there really wouldn't be too much of a need for pages to obsessively compete with each other (they still would, but not in traditional ways, I suppose). Maybe an algorithm could be written that observes keywords and phrases at the beginning and ends of articles within a topic. For example, say we had the following sets of articles (with the sample keywords appearing in brackets):

Article One: Introduction
--------------
[introduction,beginner]
...content...
[variables,next,lesson,(etc)]

Article Two: Variables
--------------
[introduction,lesson,variables]
...content...
[functions,lesson,intermediate]

And so and so forth. Perhaps this algorithm could pair the articles up in some logical way, possibly helped along by users who contribute rankings. But the point is, the system would have to attempt to rank pages not in popularity, but in logical order. There is still a lot of thinking to do here.

Social Interactions

This area is huge and important. Astonishingly important. Social networks would not be as big as they are if people did not have a genuine desire to be connected. That's my answer to questions like "Why is [insert giant social network name here] so big?" - because we, as a society wanted them to be big. But I digress, a learning system would have to have a way of allowing users to connect socially. Not necessarily using a pre-existing social network, the system could have its own ways of connecting. As long as its natural. And fair. Of course, there are users that would gain higher status than others - can you think of anyone you look up to when looking for content or articles? Recognizable figures in an industry? There would be ways for people to follow users, favorite content, etc. Users who follow other users could look at the favorite content lists of all the people they are connected to. It is not to unreasonable to think that these related lists would affect a user's guidance results.

In the end, social interactions would be a must. But they must be natural.

Conclusion

That wraps up this session of thinking on this topic. I'm certainly interested in seeing where the idea of a "guidance engine" could go and I am also certain there will be more posts like this in the future, as I work this subject over in the back of my head. In the meantime, if anyone has some suggestions or comments relating to this idea, feel free to leave them in the comments below. I will point out though, that I am not suggesting that the current major search engines do a bad job. They do a great job at their intended purpose. This article is about designing something similar, but with a much more narrow scope.