Good article. Your practices are so similar to my recent approach to learning and organizing knowledge that it's scary ;) The only difference are the actual tools which I think is non-essential.
So, when I'm faced with some bit of knowledge/howto/troubleshooting that I encounter for the first time (at least from memory), I do the following:
* Launch Zim desktop wiki (http://zim-wiki.org/) opened with my Dropbox synchronized notes
* Add a new page with some descriptive but not overly long title (using the same principles as for the title line for the version control commit messages)
* For example: "Python command line arguments"
* Write the tags for this particular bit of knowledge. This may sound repetitive but the number of tags needed (at least in my frame of mind) are usually 2 to 5.
* @howto @python
* The actual content is written by myself, no copy and paste allowed. In this way I'm the one re-wording/restating the knowledge, so that the search queries afterwards will result in almost 'perfect' matches:
<CONTENT>
The command line arguments are accessed using the list sys.argv:
import sys
# Prints the name of the script
print sys.argv[0]
# Prints all remaining command line arguments
print sys.argv[1:]
</CONTENT>
When searching:
* Open the search dialog (CTRL+F), and enter my search string, for instance: "command line arguments"
Recently I've started using Anki for adding similar bite-sized facts about Perl, bash, grep, sed, awk, etc. because in the past year or so I was gradually 'forced' to become programming polyglot (I'm not there yet, though). I was frustrated for the very same reasons described by the OP's article: forgetting the little details when occasionally have to come up with a little script or modify an existing one in a non-primary programming language.
Generally, I use Zim wiki for facts/articles that are not that small that will be better as a flash card question/answer.