I have often advised programmers to keep lots of notes. I believe it is a useful practice for a number of reasons:
We all forget things.
Notes are useful for organizing a project, e.g. todo lists.
Being able to write well is a important skill that programmers often neglect. Consistently writing anything, including notes, helps us keep our writing ‘in shape’.
In that previous article I talked about keeping notes on physical media like notebooks and journals. That is what I do. However, I also use two programs for managing notes and those are what I want to share with you today.
In the older article linked above I mention that I keep a notes file on my computer that I edit with GNU Emacs. But I did not discuss the specific Emacs package that I use for those notes: Org Mode. As its website says:
Org mode is for keeping notes, maintaining TODO lists, planning projects, and authoring documents with a fast and effective plain-text system.
Honestly, that is an understatement. Org Mode has many features as you will see from the size of the manual. And if you want to read some great posts about what you can do with Org Mode then I recommend the writings of Sacha Chua.
I like using Org Mode for my file of notes because it has a great functionality for organization, prioritization, narrowing down the notes by topic, and so on. This same functionality is also why I keep an individual Org Mode file for every programming project. Org Modes ability to let you track time comes in handy for those projects, allowing me to easily record and create reports about how much time I spend on each task.
I have seen more than one person install Emacs just so they could use Org Mode, and that’s all they used it for. That is how great Org Mode is. If you’re already an Emacs user then there’s nothing better than Org Mode for keeping notes.
DokuWiki is a simple wiki platform, one which does not even require a database; you do need a web server though, and something running on
localhost works perfectly fine. DokuWiki is easy to setup and has a nice collection of plugins and themes available.
I mention DokuWiki because I believe a personal wiki can be useful for programmers. You can use DokuWiki to record useful snippets of code, tricks for programming languages, collections of bookmarks to various libraries, things like that. The flat-file structure of DokuWiki also makes it easy to maintain backups of the wiki content by using version-control software like Git.
Collaborative editing is what most people associate with wikis. But a private wiki that you keep to yourself can be an effective and terrific way of collecting and organizing notes. I also highly recommend keeping a private wiki (or more) for teams of programmers. This is a practice that my former co-workers and I used at Cyber Sprocket Labs—now Charleston Software Associates—and it routinely proved valuable. It gave us a way to internally share notes about projects and that was great for helping bring developers up to speed on projects that were new to them.
So whether you’re part of a development team or you’re just coding solo, maintaining a wiki with software like DokuWiki is a great way to store and organize notes about everything you want to record.
What Else Do You Use?
I also use FreeMind but I intend to write an article specifically about that program sometime in the future. In the mean time, what do you use for keeping notes? Please share any programs you find useful in the comments.