Taking notes is quite important to (a programmer)/(an engineer), as we need to
- Involve a lot of details to implement a program or resolve real problems.
- Learn a lot of new technologies to improve systems.
- Have good structure learning and thinking to beyond scattered points and details. Which needs us to adjust the old structure based on previous notes.
My note-taking method and tool have evolved four generations in the past 8+ years of working.
Generation 1: take notes as documents
Requirements
- Support rich-text documents.
- Sync between different clients.
Tools
- Evernote
Generation 2: use markup language to replace rich-text
Requirements
- Support markup language. Then we have a standard way to format the notes and saved a lot of time of adjusting the format. A very general markup language is Markdown.
- Sync between different clients.
Tools
Generation 3: take notes based on events/tasks/issues/questions (Event Driven)
Requirements
- Support markup language.
- Sync between different clients.
- Events based. This way is consistent with programmers’ daily work - when we need to implement features or fix bugs:
- We will have (a ticket)/(an issue) for each event
- We update the issue with comments
- We can manage and filter tickets with different attributes - labels, time estimation, priority …
- We can build different boards to track them
Tools
Generation 4: use infinite-zoom lists for better structure
Requirements
- Support markup language.
- Sync between different clients.
- Event level view support.
-
Infinite-zoom lists. Can zoom in and zoom out easily
- Zoom in to focus on an item, then it just likes an event-based view
- Zoom out to have a high level structure view
With time going, we will experience more events/points and then we will build a more comprehensive structure.
Tools