views:

994

answers:

14

Everyday we are faced with programming problems ranging from easy to complex. For me it is important to record that knowledge so that I can find it in the future. The features that I consider that most important is recording ease of use (WYSIWIG would be good), good search capabilities and perhaps hierarchical organization or tags enabled.

What tools do you use to collect programming knowledge?

Try to give one solution per answer. Perhaps something like a short one liner clear description followed by a blank line and a paragraph explaining the rationale for your solution. You can include what you consider the strong and weak points of your choice.

+9  A: 

I use a personal wiki - currently TiddlyWiki.

TiddlyWiki is a single html file which has all the characteristics of a wiki - including all of the content, the functionality (including editing, saving, tagging and searching) and the style sheet. Because it's a single file, it's very portable - you can email it, put it on a web server or share it via a USB stick.

I use TiddlyWiki with a DropBox account. Using this configuration I can search my knowledge base from every internet enabled machine. Every time I encounter a solution for a problem I record it in a new snip (post) putting a problem description and the solution. I add labels to the snips and try to categorize them. TiddlyWiki provides good search capabilities and is relatively easy to use. Even if I do not have an Internet connection at the moment I can browse the offline local copy. This is grand. The main problem that I encounter is the script like interface to create snips. I would much like prefer to use a WYSIWYG interface. It also gets slow with large knowledge databases. This is mostly because it was not designed for such large datasets of information.

smink
Sounds like a great idea. Wish I thought of this 10 years ago :)
Torbjørn
You might also wanna check out http://tiddlyspot.com/ which has free tiddly hosting.
André
A: 

I have accumulated a collection of code snippets over the past few years.

Galwegian
You collect them as text files?
smink
I have a snippets database.
Galwegian
+7  A: 

I blog about stuff I think will be useful to me in the long term.

Unfortunately I don't blog on technical stuff as often as I ought to.

Jon Limjap
what about when you do not have a valid internet connection and you just want to see something?
smink
Valid point. The net has become so ubiquitous I haven't thought of that. However, do you really have to bring an offline wiki along with you all the time?
Jon Limjap
Perhaps no. But may happen sometimes. And those are the ones you most regret ;)
smink
+12  A: 

I've recently started using Evernote to collect notes on anything, including programming. Easy to use, easy to access anywhere and easily searchable with tags.

I started blogging too. I transfer the more useful notes from Evernote to my blog. Anyone can read them... including me :-)

Mendelt
Evernote rocks for this purpose. Extremely searchable and taggable note database.
Epaga
I was going to say 'Evernote Rocks' - but someone beat me to it!http://www.evernote.com/
Adrian
Seems a very nice tool. I am glad I posted this question ;) Will have it a go.
smink
superbe :) And it works offline!
smink
I use the heck out of evernote... but not for programming >.>. Mostly for fictional band names that would be funny, like "Well Defined Flab". I'm pretty proud of that and I would hate to forget it...
TokenMacGuy
+5  A: 
  • Specific tags on Delicious are really helpful.
  • I've also recently started blogging on some relevant issues.
  • On stackoverflow - Marking questions as favorites is useful
yoavf
what about when you do not have a valid internet connection and you just want to see something?
smink
A: 
  • Delicious tags
  • Personal blog, although that's a fairly heavyweight way of capturing
  • I used to use a folder full of text files that I could then search, although that's not portable.
endian
A: 

I use a wiki for that task, XWiki to be specific.

It brings its own database, web server and can be used 'out of the box'. (Very important if you don't have time to setup a complete wiki environment) On the other hand it is pretty extensible and can be shared over the company's network. (If that is what you want :-) ) It also provides a decent search function and some blogging features.

DR
A: 

I use my mind to store lots of programming knowledge. Implement things and remember advantages and disadvantatges of the implementations, so you can recall them later without going into the crazy land of copyright-problems.

Tetha
So, a mind-field, then?
Remou
I wish I had a memory... I used to... do you know where one can be purchased?
Mark T
right next to autism, loneliness and really strange humor.
Tetha
+3  A: 

I use a program called SuperMemo (http://www.supermemo.com). When you come across something you want to remember you copy and paste it into SuperMemo and edit it as necessary. The program will then present it to you the next day for review and then at increasing intervals. You are encouraged to further extract useful facts from your snippets, and eventually convert the facts into questions and answers, so SuperMemo can gauge how well you're remembering stuff.

I've been using it for several months now and it has definitely increased my retention rate. The downside is that the user interface is extremely unintuitive and overcomplicated in places. Also, you have to remember to run it regularly to review your captured knowledge, which is taking me about half an hour a day.

The biggest plus is that it makes it dead easy to read several books or articles simultaneously; what the authors call 'incremental reading'.

Charles Anderson
There is an open source alternative for supermemeo called Mnemosyne...
c0m4
I keep forgetting to use it
Adrian
+1  A: 

It is a know fact that one of the best things you can do if you really want to understand or remember something is to explain it for someone else. With other words anything you do where you trying to teach or explain some think to others will be a great help to remember it and understand it.

So any "tool" that have an explanatory aspect I think is a good one. I think this page (stackoverflow.com) itself is extremely good example and for me personally one of the main reason I use it. But their are of course a lot of other way to do it, blogging for example.

P-A
A: 

I was using code snippets. Just zip some part of the project containing the important solution you want to save or create a small test project, expressing the solution. It is impoetant to write text file with keywords for easy searching later or name the project with self explaining name. Then I just keep my ZIPs in special folder on external mirrored HDD (before that on DVDs, before that on CDs, before that on FDDs :) ). I was using WhereIsIt? to index the FDD/CD/HDD collection in a single file and it provides very nice search.

But since stackoverflow.com is here, I don't need to use my old snippets anymore. It is faster to ask here a question and the answer is posted almost immediately.

m_pGladiator
+6  A: 

This has been discussed elsewhere on SO multiple times from various angles. Might want to check the following threads:

Storing Personal Data

Capturing Code Snippets, etc.

Keep Notes

Remember Knowledge in Organization

All the things you've learned

Programming Journal

itsmatt
A: 

my programming blog. i started it a few years ago as a way to keep notes to myself, but now i get 250 hits per day, which feels better then a bunch of notes to yourself

mkoryak
A: 

I previously used a what-did-I-Learn-Today word document on my desktop.

Now I use Stackoverflow. With over 100 questions and 1000 answers alot of what I have worked on in the last year is on SO.

Another way to collect knowledge is to "collect" people, I know that he fixed this problem on project X and he fixed that problem on project Y.

Shiraz Bhaiji