views:

580

answers:

13

I find that one of the most frustrating aspects to software development is finding a solution to a problem, forgetting it, then being faced with the same issue in the future only to forgot how you previously solved it. Or to write a useful bit of code, then on a later project not be able to find this code.

My general question is this: How do you keep track of all the new things you learn each day while programming? Does anyone have a systematic way to capture knowledge and easily and efficiently apply it in the future?

UPDATE: Thanks the for the responses, here's what you came up with:

Social

  • Stackoverflow
  • Tumblr
  • Twitter
  • Evernote
  • Blogs/Wikis

Code Repositories

  • Github
  • Unfuddle
  • LaunchPad
  • Google Code

Desktop

  • Dropbox
  • Yojimbo (mac)
  • VoodooPad (mac)
  • Wikidpad (win)
  • Surfulater
A: 

I use Yojimbo to keep track of just about every neat algorithm, code snippet, or handy idea.

phoebus
A: 

A database of notes (I use an application called Surfulater) and a directory tree of source code (also kept in a Subversion repository).

If I were to start today, I'd probably use some Wiki framework to store my notes.

Michael Burr
+6  A: 

Stackoverflow is a good place to start :-)

Keeping a blog is another thing (here's mine).

Even Twitter can be useful for this.

There are also a number of "desktop wiki" applications that I find very useful: VoodooPad on the Mac and Wikidpad for Windows.

Finally, if you need to store snippets (or more) of code (that you have the rights to, of course), then there are plenty of source code repositories available now (GitHub, LaunchPad, Google Code or Unfuddle if you want complete control).

Phil Nash
+1  A: 

I'm having this problem myself too. I've just started couple months ago by adding good SO questions/answers into my favorites, even those I answered or posted. I guess that's a good start. :)

o.k.w
+3  A: 

The brain has limits. Accept it.

The solution is to have tests for your code so you can merge repeated code without breaking a sweat as soon as you notice it.

Aaron Digulla
+1  A: 

I think Evernote is one of the best resources for storing all kinds of notes. You can even upload photos of texts (say from your iphone, or just your computer), and the text will be OCR'd, so that you can free-text search for parts of the text later.

David Hedlund
Evernote is a great app. I use it all the time for storing scanned documents and other odds bits of data. However I don't find it makes a great developers information store. For that I prefer the desktop wiki type apps I mentioned in my answer.
Phil Nash
+2  A: 

Write a blog. Publish your findings, code samples and everything else. The best way to save the knowledge for future.

Developer Art
Which reminds me, I had a post for exactly that purpose on my blog, which I've just migrated to Stack Overflow. Thanks!
Greg Hewgill
+3  A: 

I don't care too much when I forget how I solved some problem five years ago. Chances are that in the meantime, there is a better way to do it available. GIYF.

ammoQ
Sometimes this is true, sometimes it's not. There have been many times that I've found myself working on a solution - only to find that I'm working towards the same solution I had before.It's always nice to have a fresh perspective - but having previous examples to hand can still be very valuable
Phil Nash
+1  A: 

If it is for an organisation, having internal wiki page (or something similar) could help. If it is only for you (and anyone that's interested), write a blog, favourite snippets on internet etc.

For code, a good approach (in both cases: organisation and yourself) is to keep something I call "Utilities Library". Each piece of code I like usually fits into one of the problem scopes / namespaces of the library. This way, over time, you have a neat code base that allows you to not to invent the weel again. Of course, after couple of months or years the library needs documentation to find anything in there :)

mYsZa
A: 

I always carry around all my interesting projects with me using dropbox. Then I usually know where to find the tricks I did before.

Everytime I see something good on SO I star it, everytime I see a good article on the web I bookmark it.

Keeping a blog or a tumblr is also nice.

marcgg
A: 

I am used to carry my flash disk wherever I go. So, I have different folder there for C# notes, Asp.Net notes, Design Patterns etc.

And whenever I do something that I feel I can use it in the future, basically I open the relevant Word document in it, add the details and the code snippet with a header and save.

I do not know how the others do it but it really helps me.

Do not forget to add a reference index in the beginning of your document.

P.S : I also carry all the e-books in my disk. To have them all in my pocket gives me really good feeling.

burak ozdogan
+3  A: 

I use TiddlyWiki to keep track of a lot of things. It's a one-page, self contained wiki that you can run off your desktop, or your server.

If you want a hosted solution, you can get one for free over at TiddlySpot

GSto
Might I add that since a TiddlyWiki is a single HTML file, you can carry it around on a flash drive as well. TiddlyWikis are good for personal use or for team use. I fell in love with TiddlyWiki once I discovered how easy it was to use and to modify/customize. It has enabled me to replace my calendar, project notebook, giant legal pad full of scribblings, and overwhelming pile of sticky notes with one cross-referenced masterpiece of simplistic software serenity.
bta
A: 

I use google reader to store all the interesting blogs and I add notes on the issues it was about.For codes strangely I always forget after having solved the issue but now I either post on asp.net forum and stackoverflow. But only strange thing happened to me couple of years ago, I had an issue and I managed to research to solve it but when I reviewed some codes I had written 3 years before I saw that I had used the same function and identical code for a similar issue. I think even if I didn't remember the code, it must have been hidden somewhere in my mind :)

Shivam