Idea: Website to rapidly learn a programming language

One of my frustrations with learning programming languages is that there should be a better way. In this article I will propose how this learning process could be radically improved.

Problem 1: Finding what you're looking for

A common strategy for learning a new programming language is to buy a book. While this is a good starting point, it often leaves you with many unanswered questions. The moment you start coding, you're going to run into frustrating problems/questions that the book doesn't answer. That's where Google comes in, right? While Google is tremendously useful, it can still be time consuming to find what you're looking for. Google solves the problem decently, but not well.

Thesis 1:

The knowledge required to use a programming language is relatively well defined, and should be searcheable with the top search result being the correct one 95% of the time.

Problem 2: Mediocre content

My second complaint with the Google method is that often if you do find an answer, the code example or the explanation leaves something to be desired.

Thesis 2:

High quality content is a critical component to any learning system, but is straight forward to produce given a good author

The Vision

Imagine you're learning C# and you've forgotten how to interface with the Windows Clipboard. You search for "c# windows clipboard" on Google and you're confronted with several links. You do some clicking but the content is bloated and non-specific. "This should be so simple!" you say to yourself.

Now picture a link in your favorites bar called "C# search". You click it and a Google-like page comes up with a logo to tell you that you're searching for C# related information. You type "windows clipboard", but before you've even finished typing the search box turns a different color to inform you that the site has a webpage that has been specifically labelled as an exact match for the search phrase "windows clipboard". A dropdown box appears with the title of this exact match which has the title C#: Using the Windows Clipboard. Below that are three other links that are documents explaining how to do more specific things with the clipboard, such as copying text to the clipboard, copying an image to the clipboard, etc. But you like the sound of the top match, so you press ENTER to open the page.

Without any delay, the page is in front of you. It explains in a clear, concise manor how to interface with the Windows clipboard, provides clear code examples, and links to related documents explaining how to do more specific things with the clipboard.

Impressed, you try a few more searches, such as taskbar. The top search result is C#: Adding an Icon to the Windows Taskbar. When you search for something with natural language, such as how to convert a string to an integer, the search performs just as well, returning a top search result of C#: Converting a String to an Integer.

How to turn this vision into a reality

The essence of solving this problem isn't in creating the content, which admitedly would be a lot of hard work... it is in developing a search framework to succeed at returning the correct search result 95% of the time.

My proposal is to use a brute force solution, aided in feasability by developing an efficient mechanism for specifying all* of the ways you could search for any one document. (The top 95% of the ways, to be exact)

To use our windows clipboard example, the exact matches to the document C#: Using the Windows Clipboard would be quite a long list, of which the following would be a small subset:

windows clipboard
using windows clipboard
using the windows clipboard
...
clip board
using clip board
using the clip board
...
windows clipboard
using windows clipboard
using the windows clipboard
...
windows clip board
using windows clip board
using the windows clip board
...

As you can see, the number of permutations is pretty large. But by using tools such as regular expressions, we can cut the list down quite a bit. For instance, the following are perfectly interchangeable:

clipboard
clip board
windows clipboard
windows clip board

Describing this as a pattern reduces the number of permutations immensly:

(windows )?(clipboard|clip board)

In other words, what we need to do is:

1.Determine the list
2.Represent the list compactly using clever means that takes into account patterns, etc.

The language

Because this process is at the crux of creating our search engine, it is worthwhile to invent a language to help. Here's how the language might work:

Patterns can be defined and associated with symbols
Symbols can be used within other patterns
Our list of patterns can be used to generate the final list that we consider to be exact matches for our document

To use the windows clipboard example, we might define the following symbols and patterns:

A = (windows )?((clipboard)|(clip board))
B = how to

Having defined these symbols, we might define our actual list to consist of the following:

1.(using)? (the)? $A
2.$B? use (the)? $A
3.(($B? copy)|(copying)) (data)? (to (the)?)? $A
4....

A program would use this patterned-based list to generate the final expanded list.

Symbol "A" would expand do:

clipboard
clip board
windows clipboard
windows clip board

List item #1 would expand to:

clipboard
clip board
windows clipboard
windows clip board
the clipboard
the clip board
the windows clipboard
the windows clip board
using clipboard
using clip board
using windows clipboard
using windows clip board
using the clipboard
using the clip board
using the windows clipboard
using the windows clip board

List item #2 would expand to:

use clipboard
use clip board
use windows clipboard
use windows clip board
use the clipboard
use the clip board
use the windows clipboard
use the windows clip board
how to use clipboard
how to use clip board
how to use windows clipboard
how to use windows clip board
how to use the clipboard
how to use the clip board
how to use the windows clipboard
how to use the windows clip board

List item #3 would expand to 48 possabilities.

So with our two symbols and three list items, we have 32+32+48 = 112 possabilities. They likely would not account for 95% of the ways that someone might search for our document, but with a bit more work I'm sure we could get there.

Creating a comprehensive website for a programming language might consist of 5000 articles. Writing each of those articles and carefully selecting the exact search phrases for each article would carry a very significant cost, but the end result would be invaluable.

Some additional comments

1.Learning by reading a book is a kind of bottom up learning, where you build a foundation and work from there. Learning by jumping in with both feet and searching for answers only as their needed is more top down. The term JIT learning (just-in-time learning) comes to mind.

...
deutsche porno,gratis porno,kostenlos porno,porno kostenlose,deutsche kostenlose,kostenlose porno,frei porno,deutsche porno,deutsch porno