Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

How do you remember programming related stuff? Have you had the feeling that you've encountered the error you have before you right now, a few years ago and you could swear you knew the cause then but now you've forgotten it?

Did you work with the xsl's string parsing some time ago but now you can't remember exactly which are the string functions altogether from xsl and you have to start from scratch? Or perhaps you forget about some feature from Apache Commons like "filtering a collection by some predicate" that you surely used in the past.

So how do you do it? I tried having a blog but when I develop apps, I never find the time to update the blog or write about my experiences. Also, using a wiki is a nice thing but then I found it difficult to keep a clean separation between them since many times I needed to change a blog post to add new information about that topic. This made me think that I actually should have put this topic in the wiki instead of the blog.

Do you have any systems that help you remember about your programming experience? What's your setup?

share|improve this question
74  
my setup: 1.google 2.bookmark page 3.forget about the bookmark 4.goto->1. –  e-MEE Mar 19 '12 at 10:27
4  
Use a personal Wiki. Note down each problem you solved so that you and others can view it later. Just do it for a couple of months and you have a wealth of information. I use WikidPad and its quite nice –  Ubermensch Mar 19 '12 at 10:31
2  
google is fantastic for answers but I don't think it really addresses this question about memory techniques. Of course it is just a comment though. –  Michael Durrant Mar 19 '12 at 12:25
4  
My brain is my CPU and cache. I put stuff in my cache by doing it. The rest of my knowledge is in other places such as old source code, notes and stackoverflow.com. –  Steve Taylor Mar 19 '12 at 14:50
5  
@e-MEE: while the situation you described is often used, it's bad practice and you can't rely on it. It's time consuming and redundant. You can use that time for building awesome features, not reinventing the wheel :) –  Claudiu Constantin Mar 19 '12 at 15:25

12 Answers 12

up vote 57 down vote accepted

Forgetting things is normal. Not remembering some tricks that helped you in the past is also normal. This is the first step one should acknowledge. Then there are some ways you can "store" knowledge for further revision:

  • Find time and blog about it. The future-you will be very thankful to the present-you;
  • Work with tiny demos and archive them in some way. You will surely step through this archive many times;
  • Make use of your stackexchange profile. Mark interesting questions/problems/issues/tips/tricks as favorites for further investigation;
  • Keep doing, keep programming. The more you use a certain part of a framework, the more you familiarize with it and the more you remember.
share|improve this answer
4  
+1 for the part of "keep doing", sort of like refreshing the knowledge. –  tehnyit Mar 19 '12 at 10:53
3  
+1 for "keep doing", learn deep and wide, get involved. –  YvesLeBorg Mar 19 '12 at 10:55
    
Point 1 reminds me of an episode of The Office... –  JBRWilkinson Mar 19 '12 at 17:03
    
I registered here just to upvote your answer. Perfect one –  Martin. Mar 19 '12 at 21:02
3  
+1 for the value of a log/diary. Logging improves the success of diets, finance, fitness, most anything really... people who don't take the time to write a log think the benefit of a log is to look something up but the real value is in forcing you to think over recent past events, critically consider those events and form them into a story. This process helps memory and causes the writer to think about the future. The benefit of a log for most then, is not in reading it after the fact but from the personal and real value during its creation. –  Quaternion Mar 19 '12 at 22:50

My key is

Variety


Repetition. Once can be fleeting. Seeing the 100th occurrence makes a difference!

Memory by fingers. I remember code much better when I've actually typed it a few times.

Code Library - Keep a personal stash of code and tricks you have used and seen.

Centralization. I keep 1 file with all my usernames (hundreds) on 1 pc. I apply security to it.

Discipline - you mentioned not have time / making the effort to update your own blog, etc. That you just have to work harder on and make sure you do it.

Acceptance - skills and techniques and things you learned lass week will be fresh. Some of the items you say 3 years ago will be hard to remember. That's normal as the brain makes room for more.

Multiple senses - sometimes I use mnemonics, sometimes I drop a picture with key concepts drawn in distinctive ways. I read, I listen to podcasts, I watch video's, I use color in editors. The more sense I use the better.

Mnemonics, e.g. css border order Tarball (TaRBalL) TopRightBottomLeft. I also use colors and shapes to remember words and themes. Often the more bizarre, the more memorable!

Continued Use- This is the 'use it or lose it' effect. All knowledge fades over time. Time++ Fade++

The Stack Exchange Network - I'm using Stack Overflow in multiple areas to try and keep as many different skills and techniques 'current' and 'remembered' even if I'm not using them in my current job/project.

Dropbox - I keep commnon small files with memory related items

Books - I still like the fool and feel of physical books. I also have multiple kindles and other on-line technical books that I can refer to anywhere. Obviously my technical library can be accessible anywhere when it is digital which is huge.

The Google effect - no list of items would really be complete without mentioning this. This is more about what you don't need to remember - because you can google it and find it. This is an important consideration too. As more people become more adept at this way of getting knowledge the need to actually memorize any given fact is falling. However this is also 'raising the bar' for knowledge workers who are finding more and more that a deep conceptual understanding is required to perform in the current environment. Of course which out for CME's!

My own Blog

My own bookmarks site.

  • How do I keep my blog and my bookmarks updated? Well at the end of the day I think it is discipline and niftyness, i.e. yes, there is a certain amount of dedication required for it. However if you went to school for a degree and paid $100,000 (or even $10,000) or you are self-taught, you know the meaning of dedication and persistence. This is no different. The niftyness, or 'nifty factor' is that when you see a cool web site with a cool tutorial or technique or whatever, or you overcome a tough thorny problem, you go "hey that's nifty!" - so when you feel this (or whatever catchphrase you use), now associate that with "I must blog that or record that bookmark". There's a good chance you're not at a pc, updating your blog at that very moment, so send yourself an email, or a text or even a voicemail, or a new task in your task list - whatever works for you - to remind yourself to do it! For instance my android phone has a tasks app that is useful for this.
share|improve this answer
    
Thanks for your thoughtful answer. He do you stay disciplined about updating your blog? I think the issue I have is either laziness, or I don't post something because I don't think others would benefit from it. –  Kyle Hayes Mar 21 '12 at 2:59
    
+1 for variety. Really works and I have experienced it many times. –  Karthik Sreenivasan Mar 21 '12 at 6:25
    
Kyle good question, I've updated my answer. However my answer is still more about the need to stay updated rather than how I remain disciplined. At some point it does come down to personal motivation. –  Michael Durrant Mar 22 '12 at 20:01

Over the last year Evernote became a program I could not do without.I copy everything into Evernote. Code Snippeds, Screenshoots, Contact data, Version History and so on. So I don't have to remember so much details. I just know it's in there somewhere.

The basic version is free. So try it!

share|improve this answer
1  
So, what would you do the day evernote's services are down, or there's no internet (because your carrier has been nuked for example)? I don't recommend relying on "the cloud" for storing important know how. –  Mister Smith Mar 19 '12 at 16:30
    
I am currently using Evernote but if you put everything there, the tags section will become very cluttered and you'll start using it less. If you have nice tricks about this, it would help much to share! Thank you! –  leadgy Mar 19 '12 at 22:48
    
@danleadgy, I agree with the tags. I've had to be more selective which I really shouldn't have to be concerned about. –  Kyle Hayes Mar 21 '12 at 3:09
    
After asking this same question on Stack Overflow, I started using Evernote and it works very well. Besides programming info, I store how-to processes. For example, how to set up my dev machine from scratch (install OS, install software, configure). That has been extremely useful. Also, you can access the same info from any device. So you can read on one computer or tablet, and work on another. –  B Seven Apr 7 '12 at 13:52

Sherlock Holmes once said something like "A man's mind is like an attic. If you fill it up with trivialities, there is no room for anything truly important. For all of these details, we have the encyclopedia."

Unless you have a photographic memory, and the problems therein, you won't remember everything. Build a set of resources, a personal library of both information and problem solving techniques.

You may not remember the answer, and you may not even remember where the answer is written down. But, if you know how to solve the problem, then you can always find the answer again. Hopefully, this will include documenting your solution in a searchable and reusable fashion.

share|improve this answer

Well, maybe my case is particular ... but : I have every scrap of software i wrote since 76 on my laptop, programs, scripts, configurations, etc. So over time (must confess), my memory burden has shifted from remembering 'stuff' to remembering meta-data about stuff. Sure, a lot of it is not relevant anymore, but what i find that the hard part is having the ideas, not actually implementing them. So meta-data is basically an index of what 'ideas' can be found where.

When I hit new turf, nowadays, i tend to find some large code base that uses the new aspects, and spend some quality time with the code base. I study it, try to make it work in a test environment, then try to augment it so I can ease into new tools (libraries, languages, build technology, etc...). This process allows me to map out my patterns, ideas, onto an example. I may take time to do a few such mini-projects, and pick as a reference the one with which i feel the most at home. Once that is done, I will eventually re-purpose that code base to build the skeleton of my own apps.

When personal archives fail, i hit the net, to which i recently added SO. I will get a hit on 'new' concepts (new from a personal standpoint) on SO before gaagle. In fact, i rarely (nowadays) return to gaagle. The First relevant answer on there is typically a link to some interesting questions on SO.

share|improve this answer

Like others, I keep track of things using bookmarks.

I used to use Delicious, but have now moved to Pinboard.

But I don't use this way as much as I used to. It seems like every programming problem I come across is a small google search away. And in the last year or so, I've started using Stackoverflow as one of my search terms!

Whenever I come acoss a SO question for a particularly difficult issue, I favourite it to track it so this is another form of bookmarking.

share|improve this answer
    
I used delicious in the past too, but they have made a mess out of that project. I now use Diigo for bookmarks and highlights. I'll have to check out Pinboard. –  jmq Mar 22 '12 at 14:17

"Remember the painting, forget the fine strokes"

It is absolutely normal not to remember the finer details. However what you should worry about is forgetting the major things. If you fixed a bug you should at least have a conceptual idea about what the issue was.

Bookmarks, blogs, notebooks are all fine for storing away those finer details. But ultimately you still need to remember the bigger "picture". Otherwise re-discovering those "finer" details will be that much harder.

share|improve this answer

Keep your own notes, expressing things in your own words. Your target audience is you, nobody else, so you can afford to be terse. (A blog post however really needs to be clear and well-edited, which is time-consuming.) If you find good articles/blogposts, record the URL, but still explain things out in your own words.

I keep a large hierarchy of small, short, single-topic files. The files are mostly free-form, but I'm switching over to using Markdown. Search using grep/find. I keep the folder in my DropBox, so it's always available to me.

share|improve this answer
    
I used to do it as files like this as well but found Evernote to be a good repository for this type of data as well. –  Kyle Hayes Mar 21 '12 at 3:04

I use OneNote. I have a lot of different programming languages I work with so I have different sections for each language and different tabs for different types of notes.

Now, I am starting to use Stack Exchange also.

share|improve this answer

Everyone may have his own style that he/she is used to it, For me, I separate knowledge in categories:

  • Books

  • Articles

  • Collections (Stuff I find interesting limited to few paragraphs - I actually copy the information and sometimes annotate the source) - For example: OODevelopment, Generics,...etc.

  • Re-usable code (text and snippets) - Each on a separate file under a good tree organization. E.g. DataValidation node would contain many techniques for validating different data items, each in a separate file

  • Completed projects

  • Personal Video Tutorials (I sometimes record videos of how to do things when too many steps are involved).

  • Links

I organize the above by subject, with each subject in an appropriate tree structure.

Some times there are overlapping things but I manage to find what I want.

Also, using Google Desktop, finding text or files is very fast.

share|improve this answer
    
It would be interesting to see your tree if you were willing to share. –  Kyle Hayes Mar 21 '12 at 3:26
    
@KyleHayes, I may be able to provide a sample –  Emmad Kareem Mar 22 '12 at 16:56

You must be balanced between memory and "storage"..If you rely too much or for wrong things in memory, == problem, if you rely too much on storing everything == useless.

My rules:

-Do not over beautify! write the important stuff even if the font size varies in your doc :)

-Do not over orginize. Convince yourself that orginizing your thoughts doenst need a 10-level tree structure

-Spent TIME in finding what to record. you may find 5 solutions for the same problem. the moment you write them ALL down you loose. Write down 1-2 that REALLY help you. do NOT let yourself tell you that you dont have time for this now. Its rather strange but it applies: "Spent time to get time"

I dont like putting these things in some "product" because i want to be sure that it will exist 20 years later and i dont want to migrate myself to various platforms..

So what to do?

Anything that you can get the info with minimum effort.

For example install phpBB and write to your self. you get search functionality out of the box, its free and you can have data extracted with simple SQL statements and put them in files. you can have a cronjob exporting your thoughts in files for archiving. So if you ever need to put them in another system you are ready with minimum effort.

Another problem is that nobody guarantees that the links you find will work tommorow (imagine 5 years later). So try to duplicate the info:

-Download the video with some browser extention and attach it for example to your phpBB post (or wordpress or whatever).

Face it: you are a programmer and you make apps for other people. Make a simple one for yourself and become YOUR best client.

my 2c

share|improve this answer

Short answer:

Practise, practise, practise.

Not-So-Short answer:

How do you remember how to walk? How do you remember how to speak? Granted these skills aren't exactly the same and they don't require a, seemingly, encyclopaedic knowledge (for beginners, at least), but you're using the same thing: memory.

While I admit that, for beginners, programming can seem an impossibly large subject when you start to study it, it becomes like any other subject once you've gotten the basics down.

As soon as I figured that out, I started to break things down into smaller and smaller chunks (my own, personal version of abstraction). That way, something that seemed difficult to remember becomes easier (at least with me it does).

Writing things down helps more than you might think (having worked in Education, I know that this can have massive positive effects on retention). Especially if you can put it into your own words - rather than just copying it verbatim. If you can paraphrase or equate it to something you already know, even better.

For example: In C#, String objects are immutable. This means that whenever I tell my program to change the contents of a string object, what actually happens is the original string is destroyed (technically it's placed on the garbage collector's lowest level). Exactly like when an artist makes a mistake when creating a marble sculpture - it cannot be changed, thus it is destroyed and a new one created.

It's not a great example, but it shows the basics of what I'm getting at.

Quality documentation helps, too. Something that my Programming 101 lecturer once told me stuck with me:

Make your commenting verbose. Not to the point of stupidity, but you need to be able to write comments that a non-programmer could understand. That way, you know that someone else on the project can understand it, perfectly. Imagine that you'd spend months implementing a system but you where involved in some kind of horrible accident on the way to work. Someone else will be assigned your work - especially if it's close to crunch time - and if they can't figure out what your code is doing, then production stops.

Good books are an excellent resource, too. A different tutor once told me that if a book doesn't have an index (and there are lots of them, out there that don't), then it's not worth buying.

Google can be an amazing resource, but be aware of copy-paste coders. Stay away from sites that just give you a block of code with no explanation. I prefer to read a whole article on small blocks of code, that way you go away knowing exactly what the block of code is meant to do, how it does it, and why the programmer wrote it that way.

Hope that helps

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.