Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
The software engineering notebook (winterflower.github.io)
357 points by Winterflow3r on Oct 14, 2017 | hide | past | favorite | 130 comments


The commitment to taking good notes has been one of the best decisions of my life -- not just professionally. I use my standard text editor (Textmate 2), and have a "notes" project, with all manner of categories organized by folder. I take notes on articles I have read, take notes on any presentations I watch or educational courses I take, or books I read. Moreover, I now take much better in person notes -- I take them into "scratchpads" and then synthesize them later.

It's indispensable in meetings because I both take notes about the goals of meetings beforehand, take note of any important parts during them, and am able to succinctly review them afterwards as they relate to the original goals, and easily keep track of any action items.

I manage EVERYTHING this way now-- what I am currently working on, notes about what I've done in a day, notes about what I've done on the weekend, notes about books I want to read, movies I want to watch, have watched, fitness routines. It goes on.

At first it was a small but useful knowledge base, and a good plan for how to keep track of things better. Now it's a larger, and even more useful knowledge base, where due to review and organization the important concepts in it have mostly made its way into my long term memory. And the process of taking and using the notes has become a smooth and well-honed process. I keep the notes in dropbox so I have easy access to them on mobile also.

In short: I treat my personal knowledge base as if it were a coding project: using well organized text files. I am constantly adding to them and maintaining them. It is working very well for me.


On the other hand, based on my personal experience, maintaining a constantly growing archive of things, be it notes, bookmarks, emails, etc. turns out to be not very useful. Also, it gradually becomes something that you spend more time on than on other things. I now prefer to be more spontaneous, try to minimize the number of things that drag me into the past, start things as if from scratch, "reset" myself, dismiss the baggage that is often turns out to be nothing more than a dead weight. This "lightweight" approach seems to allow me to move forward faster, learn new things that I might have no plans to learn for a long time, because of a queue of other things on my "TODO list". But again, this may be personal.


I had the same problem as you, but my solution was separating "notes" from future actions.

My notes track knowledge, they are referenced as-needed so I store everything because there's low/no cost. I've also found that writing things down improves my recollection, so there's value even if I never reference the note again.

My calendar / omnifocus track future actions, I minimize these and keep them very well curated - no "todo", only "do". Externalizing some cognition takes time in exchange for efficiency... less overhead from context switching or remembering unrelated items.

The tradeoff is loosely analogous to scheduling in computing - inefficient for an isolated single thread of work, but beneficial when coordinating lots of concurrent work.


> no "todo", only "do"

I'm curious about what this means. What are "do" notes (as distinct from "todo" ones). If it means that don't calendar, and you just do that task immediately, how you plan and (more importantly) remember future tasks?


TODOs are crufty ambiguous notes that often poorly describe the current system and potential future work... and they're so easy to add that the average "todo" is very low-value, dragging down the perceived ROI of fixing any tech debt.

I keep the two separate: good notes describing the state of the world, and a calendar to schedule future actions.

When it comes to software, that means all code must have good documentation and known flaws are scheduled to be fixed. If it's not worth scheduling, it's not worth changing.

My personal life follows the same pattern, although much less formal... there just isn't enough time for every possibility, so I always work backwards from my calendar.


In practice, most people's "todo" list ends up being the garbage bin for low-priority items that they'll never actually do. It's worth separating the things you actually plan to do next week/month, from the ones in a "backlog".

Grep any large code repository for "TODO" comments.


As someone who's worked on multiple teams that used TODO comments and then had a regular type of sprint in which they were grepped and cleared (these weren't perfect projects, there were other organisational problems, but this particular thing was handled well), I was actually quite surprised to get into a discussion recently here on HN about projects where this doesn't happen and TODO comments end up being largely aspirational.

However, I think code and life are slightly different contexts here. I get what you mean about separating aspirations from near-term actual intents but I generally use the word "todo" to refer exclusively to the latter (which still doesn't help a whole lot with ensuring execution as the list still grows quite large).


I think it helps to do only enough to be useful and not enough to be a productivity sink. I keep a general purpose plaintext file called notes and a handful of plaintext files specific to certain topics in ~/documents and that's it.


I like to separate notes from journaling for precisely this reason. I have hundreds of notes in Evernote that I will never see again. They're invisible, as light on me as a feather. Yet they're also searchable, so they're available in seconds if I ever need them.

I have system of using "top" tags to define my working view for a project. Say I'm working on project Foo. At any one time I'll have about half a dozen notes tagged "foo-top." I can take any note from my past and bring it front and center by tagging it "foo-top" and then delete the tag when I want the note to disappear again. Say, for example, I want to see if CouchDB will be useful for Foo. I used CouchDB for a personal project several years ago, so I can search for my note of CouchDB concepts and commands, tag it "foo-top", and then remove the tag if I decide it won't be useful. It's a beautiful way of carrying around a lot of baggage without feeling the weight. It's nice that if I want, I can write down notes and thoughts about something without worrying that I'll clutter up my journal and make it unreadable, or worrying that I'm mixing up the wheat and the chaff. It's not like I spend a bunch of time rummaging through a bunch of junk to find what I want, forcing me to think carefully about what I record. I can record anything that seems like it might be useful later.

A journal would be nice to have, too, though. One note in each project serves as a journal of sorts, in the form of a quick summary of what I've done each day and a quick summary of what I expect to accomplish next. (For work, I find it more convenient to keep a single note for this instead of breaking it out by project.) Evernote isn't great for keeping chronological notes. I only use it because I haven't seen an alternative that is compelling enough to make up for the convenience of using just one program.

One thing I really wish for is a program that could automatically present me with a diary of sorts based on my note-taking. Versioning would be nice, too, so I could see how my notes evolve over time.


Nice. I’m going to think about using ad hoc tags like this to tame my monolithic orgmode hierarchy.

Is there not an API in Evernote to query the notes? Seems like getting the last few weeks’ worth, sorting, and dumping to html or pdf would go pretty far for your diary use case.


I also used to keep tons of notes, references, cheat sheets and bookmarks to various topics around. I found the success rate of finding something there vs google was quite low and things quickly became obsolete. Not only did the topics quickly become irrelevant (I would never go back to CVS or SVN when i only use GIT today so why should i keep my old CVS-cheetsheat around, it's just dead weight and waste of time to organize it) but even for up to date technologies the landscape quickly changes, especially in the javascript world. If i re-google something vs read a note i wrote down 3 years ago i might hit an article teaching me a new better way to do something instead of being stuck in my old bubble.


I'm doing something similar. I prefer pen and paper. For someone reason digital notebooks don't have the same effect on me as physical notebooks.

I read my notes every now and then. But what the notebook does mostly is make me focus and concentrate on my goals and remind me what's important. As the parent said, a notebook enhances your long term memory. You re-iterate lessons learned/forgotten. It's not a bookmarking tool.


I just replied to the parent agreeing with their method, because I do something more or less the same, but I also try and keep a balance between this and what you just described.

The importance of the 'reset' has helped me a lot too, and calling a lot of recorded things 'baggage' is very true. If everything I had recorded was wiped would I be disappointed? Definitely! But life would go on. :) I'd re-discover things, my tastes and personality would change so those recorded things aren't relevant, etc.


A shudder went through me when I read the parent post you replied to. Based on my personality that wouldn't work for me, and over time I've had to learn to better understand and work better with people that work that way. I've had people comment on me as sloppy, uninterested etc. when they make the observation I'm not a detailed note-taker which is quite frustrating.

I've mentored enough colleagues that I've come across those who take extremely detailed notes, and are successful, and a fair number who do this and don't find success in their work. When I try to find ways to get them to question their approach they are often resistant to changing because the have an ingrained belief that detailed note-taking is of fundamental importance.


One insight that I've come across is the idea that "writing is just thinking on paper". Detail isn't necessarily valuable when it comes to thinking -- it can add noise to the crucial signal. I think the same is true of notes.

I spent my entire education and most of my software career taking few notes, and they did the job well enough. Despite my shift to taking a lot more for various reasons, I agree that there is no moral or strategic value to taking nice notes just for the sake of having done so.


I would bet those who are successful have some pretty good reasons for taking notes, while those who are not do it as an end until itself (e.g. "because that's what successful people do")

Which makes me think there is something not so obvious that accompanies effective note taking.


For me, it's when I've expended some effort to gain a new piece of knowledge. I'll have to redo the (debugging process/google trail/staring into space thinking real hard) from scratch next time I do it, because it's too intricate to have memorized it.

Taking notes about routine everyday stuff is boring and worse than useless, because the notes are full of duplicated information that makes searching slower. I imagine the people who take notes for it's own sake are basically listing everything that they do, whether they gained any new insight or not.


I think that's a really valuable mental tool. Sometimes past baggage is a hindrance to current goals.

As part of treating my notes as a code project, I even keep them version controlled, which leaves me a little more free to just delete things or "refactor" stuff. A lot of the value I get is going back through things and synthesizing them into clearer and more useful notes. TODOs in particular are dangerous -- I try to treat files of that nature as extensions of my long term memory, rather than a curriculum which I feel obligated to follow.

That being said, there is an element of this project where I feel like a am building a piece of "my life's work". I've built a number of software projects, and part of building them over time and organizing them leaves them in a state where I am proud to have built them -- I can point out a piece of the system, and understand why it works that way, and remember the choices that led to its current state. At one point, I realized that I had no such project for my life, and it was a little weird that I had so clearly documented software systems that were hardly used, whereas my life and action and ideas and knowledge were, for the most part, just in my head. So in a way it's more than the practicality of having notes, although in the practice of it I have found it to be practical. It's a way of adding meaning to the course of my life -- now the ten minutes I spent reading an article can also become a gift to my future self due to the one choice quote I grab from it.


It isn't about having the artifact, but about the reflective activity of creating the artifact.


I'm fairly similar to you but not as maybe not as meticulous

One thing that wasn't working for me was storing TODO style things and "X I want to watch/read/learn/play/do" items in my notes. Eventually I found Trello and it seems a good fit for that style of task (for me)

Everything else is stored in my notes though, or sometimes in paper-based notebooks that I take pictures of occasionally for archiving.

Still need to get better at things I've done at the weekend/daily bullet points etc, I often forget or am too lazy


What is the read-versus-write ratio of your notes?

I.e., how often do you actually read the things you write down?

PS: Have you ever thought about using a "lifelogging camera" instead? :)


Great question... some files are very read heavy (e.g traits.txt, which is a collection of about 25 traits phrased as imperatives that I aim to accomplish, such as: "

BUILD QUALITY RELATIONSHIPS - improve existing relationships, and seek out new good ones

MAINTAIN NEUTRALITY - approach things with a beginners mind

PRACTICE SELF-COMPASSION - admit pain, take kind and mindful action ")

Some files are just used a lot for both reading and writing. These include a todo.txt, event_planning.txt for planning logistics of whatever fun getaway or event I'm doing next, a shopping_queue.txt (reduce impulse buys by requiring I put things on that list for some amount of time).

I find that for taking notes on books or presentations, I will write them once, and then refer back to them infrequently -- maybe once a year. A bigger advantage is gained because it makes it easier to stop reading/watching things, because then I can always pick it up again and review the notes associated with it, so I can have a lot of educational threads going at the same time without fear of losing the context.

For journaling, I tend to review my journal and list of activities as a whole a couple of times a year, and typically will review the last week every week or so.

Much of this happens naturally due to the fact that the project is open -- it's often easier and more interesting to review my past work week or pick up where I left off on a book (stored as a pdf within the notes) than it is to jump onto facebook or whatever.


Videos reduce the read-vs-write ratio even more for me, they can't be searched or skimmed.


Totally agree goo! I do something more or less the same as you, just to not the same extent—but I will be soon when I export my 'to watch' list from IMDB and 'to read' list from Instapaper.

Since 2013 I started creating a text file almost every day in a directory structure of '../daily/2017/17-10-14.txt'.

I use it as a journal (I put the current time and wrote whatever it is down), a scratchpad, a temporary todo, habit tracker, etc. It's been super useful for me. I've thought about formalising it, using tags, etc. but have found myself getting along fine.

I used to use Day One (macOS/iOS) religiously but have found that this daily txt log mostly sufficient. What I would like is to expand my macros from getting the current time to getting my current location and weather.

For work, I have a 'log.txt' in which I have a section for each day and copy-forward the previous day's section. While we have our own company tracking tools, etc., this is purely for me and has helped me keep better track of everything I need/want to do without letting anything slip out.

I've found that doing each of these things takes up very little time too—partly due to not formalising it or making it fancy. I've thought about using a vimwiki which I'm a big fan of, and gave it a go once, but I stopped. It was no fault of vimwiki itself, but so far have found the text files sufficient.

For my phone (iPhone), I use https://ia.net/writer/, and I keep all these text files in Dropbox.

Another reason why I've stuck to text files is because of the fatigue of different apps and services disappearing due to whatever reasons.


I'm doing almost the same thing. I have a simple script that opens a ~/Documents/devlog/20171015.txt automatically when I start working.

When I need to find something old I use fgrep on that folder. Works like a charm.

It's plain text, no defined structure. I dont't use it for TODOs as that info would get easily lost.

I use it almost everyday, specially when something different happen: how to release an old piece of software that current setup dont support anymore or how to connect to a service that I only use sporadically.

I tried some tools and apps for this, even tried to track that for a few days in Trello. eventually I gave up and went back to the plain txt file.


Can you explain how you organize them? Been trying to do something similar but haven't gotten it quite right yet.


I've given up on organizing. I find things with ctrl-f and put the date siren every time I start writing, so if I know generally when something happened, I can go back and find it.


I have a diametrically opposite experience instead. For me taking notes is most of the time harmful. If I need to document something it is much better to write a confluence page so everyone in the team can access it. While I'm coding taking notes breaks my flow of thoughts and I lose the momentum. Obviously I do write schematics or structures of the components on which I'm working on, but I don't consider that note taking, it is really part of the designing process and at the end the architecture will go in any case in confluence. Last but not least, I noticed that if I can just read some note easily I don't commit that information to my long term memory, so paradoxically, writing notes actually harms my memorisation process.


How do you find relevant notes from the past? grep (or a fuzzy-match version) would help, or do you organize them by some system?

The organization of notes in an accessible manner is a challenge for me - perhaps I'm doing it wromg.


Many notes are easily organized -- when I take notes on books I am reading, for example, there is pretty natural connection to where the not should live (e.g. /education/books/design_of_everyday_things.txt)

Otherwise, since these notes in the context of a project, I can treat it the same way I treat code. So a mix of multi-file search, and directories that correspond to the knowledge in them (e.g. "finances/investing.txt" or "journal/happiness_project.txt", the latter containing any work I do on http://diurnal.st/2013/05/27/training-your-brain-to-be-and-s... -- which I don't do everyday by any means, but that's an example of the kind of thing that exists in my notes)


Would you be willing to talk more about your experience? I too am very interested in this process, but have yet to find one that is successful for me. I would love to hear more about your process.


I had started a simpler version of your approach a while ago, but how do you manage the overhead if you use it for EVERYTHING?


Good god, man/woman. Do you have time to do anything else besides taking notes?


What does the folder structure look like?



I have adopted this practice over the last year and have found immense value in the practice. I believe this practice is one of the cheapest ways to help leverage your previous experience on the job as you keep yourself from having to repeat previous learnings over and over again as you try to remember what those compiler flags you used 6 months ago actually were :).

My system is quite simple. I have created a github repo called journal and an alias which opens vim to a markdown file for today's date. If I leave the file and come back later vim will drop me in at the end of the journal. I intend to add some vimscript in the future to automatically add a timestamp when I reopen the file but haven't gotten there yet.

This system has been quite helpful to me as it is resilient to data loss as I can push to multiple backup systems. Easily searchable (grep). And can support prettier documents if I want to open my Markdown formatted journals in tools like Macdown.

TL;DR I use vim to manage this. See alias below.

alias journal='vim + "/Users/username/journal/$(date +%Y)/$(date +%Y%m%d).md"'


A script might finesse things a little more, but you could get a naive implementation of the timestamp behavior with something like:

  alias journal='vim + "/Users/username/journal/$(date +%Y)/$(date +%Y%m%d).md" -c "execute \"normal! Go$(date +%T)\<CR>========\<CR>\" | startinsert "'


This command (as presented) is giving me issues with saving the file on my machine, not sure if it's specific to only me but figured I'd give you a heads-up!


Here's a nice hacked up version, note the mkdir -p that makes the directory if it doesn't exist. Also I changed the time from 24hr to more provincial 12hr w/ AM/PM Please be careful adding aliases if you aren't sure what' they're doing!

alias journal='mkdir -p /Users/insert_your_username_here_on_mac_on_linux_change_Users_to_home_on_windows_good_luck/journal/$(date +%Y)/; vim + "/Users/insert_your_username_here_on_mac_on_linux_change_Users_to_home_on_windows_good_luck/journal/$(date +%Y)/$(date +%Y-%m-%d).md" -c "execute \"normal! Go$(date +%r)\<CR>========\<CR>\" | startinsert "'


If you're looking for a more structured version of this, I'd highly recommend checking out vimwiki[1]. Its diary feature does exactly what you mention, plus it will autogenerate a nice index file for you (among many other features).

[1] https://github.com/vimwiki/vimwiki


For engineers, I found this logbook guide which seems perfect[1]. I found this on the desk of my new job, about 1 month ago. Someone left it there and it intrigued me. I'm trying to abide to it, not religiously, but so far so good. Others might find it helpful.

[1] http://www.webpages.uidaho.edu/mindworks/Capstone%20Design/P...


I have a "notes" directory in dropbox. I use .md files, with a text editor that does some highlighting based upon the markdown.

95% of them go into what I call my "dev diary". Each day gets a new file. Any questions, answers, thoughts, etc. while programming or designing go in there. For searchability, I also add any reference Jira/Trello/etc ids.

Beyond that, I have cheatsheets and checklists. Cheatsheets are short, useful things (e.g. commands, undocumented gotchas, etc.) for a given piece of tech. E.g. I have a git.txt, mysql.txt, etc.

Checklists are things I should go over whenever I do X. Am I about to commit something? Well, there's a list of things I tend to forget to do. So I have a checklist for this.

Each project also gets a file (or folder if it grows large enough) in my notes directory.

I previously used Evernote. Then Onenote because it was nicer on the surface pro. But I had to abandon Onenote because they don't have a good Linux client. I decided I was going to stop throwing my notes away and just switched to regular files.


Try my http://notes.sciter.com - I did it for exactly that purpose. The only thing it renders and edits notes as HTML/WYSIWYG.

I've found that for some reasons I simply cannot consume/read .md in source form.

After all having <h1> rendered in larger font means something, right?


What do you with screenshots or other graphics?


http://tiddlywiki.com/

Sits in a browser tab, insanely quick to use which is the most important thing.

Consider it perfect for taking notes.

I use seperate systems for todo and project management (the project management one I wrote myself)


Cool, I've never heard of this before. Completely blew my mind when I saw it's a single html file that I can use offline! I love it and definitely will start using it.


I think you do need to install a plugin for your browser to save changes to disk, but beyond that it's pain free.


Seconded. What I was looking for in a note-taking system was something wiki based, and this has a really nice take on the concept.


Also have a very quick search, which beats any server based wiki.


My first notebook entry is a file called 2011-01-20.txt. I just opened it and had a look what I was doing on that day - really interesting!

These files have useful commands, todo lists, debugging notes, stack traces, useful links.

Don't overcomplicate things - just make a text file each day and dump everything in. Don't bother too much with structure or tidiness. If you need info from the previous day, just copy it across.

Once you've got enough stuff in your notebooks to be valuable do remember to get an automated backup going.


https://gist.github.com is my notebook which has 800+ collections of my own samples and notes along with 800+ stared notes from other developers.

It's one thing to keep notes. It's another to have a social network around notes.


that link is a generic one, to an account's own gists. it is not a link to your gists, _except_ for you.


Back in college, going for my BSEE degree, the professor or lab assistant were constantly stressing the need to record everything done at the bench in a log book with pages dated and signed. Part of this was to keep a history of lab experiments and remind you of what you did and/or learned. Really, however, it was to develop the habit to carry over into your professional career. There are many examples of this but the most important one I remember is the notebook kept by John Bardeen of Bell Labs wherein he recorded the path taken to invent the transistor along with Shockley and Brattain. Not only did it win credit and and patent for its invention, it also won him the Nobel Prize. All because they could conclusively prove their invention along with the when of its discovery.


> dated and signed

What's the signature for?


Establish legal link from the contents of the page to the author. At least an attempt to create a record that can be traced afterwards if there are IP/patent or manipulation claims. Some of the rules at least some places have: bound book used page by page, so pages can't easily be inserted afterwards. Numbered pages so they can't be removed. Corrections have to be dated and signed as well, old entry is only thinly crossed out so it's still legible. Empty spaces crossed out.


I knew what I wanted in a digital notebook, so I spent an afternoon writing one. This:

* no explicit saving or loading, everything automatically persisted as plain text

* infinite persistent undo / replay of text entry, for retracing steps; can double as work logging; this uses a log file alongside the plain text; this also lets text be deleted without being lost, which helps with clutter

* "most recently edited first" page order, so you can forget about those old pages

* minimal ceremony to create a new page; use the first line as the title

* quick searching and navigation in time and space, using keyboard

https://github.com/barrkel/scratch


Nice! This is basically Notes on MacOS, which seems to basically do this (minus infinite undo/redo). I use Notes extensively and it works really well.


Except Apple does not provide a clean way to export notes for archival. I literally stopped using Apple Notes because of the no-export ‘feature.’


When I started my first 'engineering' job at a chip startup over a decade ago, I remember being given a leather blue notebook with gold lettering titled 'ENGINEERING NOTEBOOK'. It was great for focusing on a single project and especially made sense for areas beyond code like drawing electrical schematics, but over time I've become addicted to digital approaches.

These days? I rely heavily on Trello for personal projects - organize things by keeping a separate Done board (list for every month) for the project for times I want to flip back through older work done. Also keep paper notebooks around for times when I want to sketch ideas out.

Additionally there's a 'rhizomatic frankenstack' of nvAlt+simplenote / pinboard / markdown files in project folders etc. I keep wanting to set up something where it's all searchable and ideally dream of something like federated wiki with a lot more UI polish.

[1]: term from Venkat Rao's post http://mailchi.mp/ribbonfarm/frankenstacks-and-rhizomes?e=96...


I keep a notebook partially to help myself but also to protect myself James Comey style. It really comes in handy when non-coding managers ask what I do all day or when they try to gaslight me on my commitments.

And yes, I am looking for a new job.


This might seem like over-kill at first, but I've been running the Enterprise version of http://www.xwiki.org on my laptop, and couldn't be happier. Its served up using Jetty, and starts up automatically when I login. I like using tools that I know will scale well in the future, should the need arise (no reason why you couldn't run it on a free Heroku instance, if it handles the load, and it should, as it just idles along most of the time).

It has a Code Macro plugin that supports Pygments syntax highlighting. It all comes down to how you structure the wiki (I often turn to Wikipedia for help with that). I've been an Engineer for 20 years, and the info-flood doesn't really end, unless you dial back your enthusiasm. I like to document the tools and services I discover so that I know what's valuable, and what's out there, should I ever need them.

Once installed, its very easy to create new pages and edit them. Plus there are hundreds of plugins.


TiddlyWiki is a lightweight, portable wiki option. (I wish it had Vim keybindings, though.) http://tiddlywiki.com/


Quiver is the closest thing I've found to what I consider my perfect note-taking software. I think getting any closer would involve writing my own at this point, and that's simply not going to happen.


Same here. It's perhaps a slight shame that development has been so slow over the last year or two. But OTOH to be honest it's good enough as it is to be far more useful to me than any other note taking app I've used.


Maybe this is just changing fashion, but a lot of developers keep blogs for this reason, and 10 years ago everyone would have simply called this idea a "blog". Among the ones I read:

http://intertwingly.net/blog/

https://burningbird.net/

https://kottke.org/

https://www.tbray.org/ongoing/

I keep my own blog entirely for my own benefit, and the tech section is simply things I've read recently, or things I've learned recently:

http://www.smashcompany.com/technology


Usually they're work specific notes for my coworkers, its always nice to share a line by line account of your build process when you're using some arcane systems that require being built from source with really complex configuration issues to handle.


The only tool I use are markdown files and gitlab to do this, I've found the .md markdown format to be extremely useful compared to the bad old days of emailing word docs.


While I don't keep a software development notebook as a rigorous practice I note down interesting or useful insights, findings and patterns in Evernote. I sometimes keep code snippets as GitHub Gists but usually I find source code to be too transient and dynamic to keep it anywhere else than in the actual project it's needed in.

More importantly though I use my blog for keeping more polished, more elaborate versions of my more relevant notes. Sharing your thoughts with others not only benefits others but it also makes you think over and refine your original ideas.

Distilling your thoughts for the benefit of others will help you better understand the matter as well. While we teach, we learn.


I've been actively looking for a good tool for personal note taking, and finding lots of things that seem not-quite-right.

Plain Text:

Pros > Simplest, works everywhere/on everything, scales well (append forever!)

Cons > Least automated, no images, no math, no code, hyperlinks depend on editor, no embedded files

WYSIWYG Doc Editor (Word, Writer, etc):

Pros > As easy as plain text, can do images/math/hyperlinks/embedded files, somewhat portable

Cons > Bad at code, not many automated features, unwieldy once file gets large

Markup language tool (Org-Mode, Wikis, etc):

Pros > Powerful, portable, good at code/links, scales well, highly configurable, highly scaleable

Cons > Have to learn the markup language, mostly bad at math, high up-front costs (e.g. needing to set up a server or learn alien keyboard shortcuts), non-wysiwyg feels less like a "quick note" and more like a professional document, image/doc embedding can be hit or miss

Note-taking app (Onenote, Evernote, etc):

Pros > Automates lots of note-taking tasks (e.g. time stamping/tagging), can do images/math*/hyperlinks/embedded files, scales... fairly well

Cons > Least portable (dependent on app-specific sync features which may change), less simple (best use of notebook features are non-obvious), still bad at code

Electronic lab notebooks (ELNs) (labfolder, benchling, etc):

Pros > Good for organizing/presenting data, embedding files, scale very well, have collaboration features

Cons > Very not-simple (most require either require server config, or you don't own your data), most are somehow still bad at math/code, frequently expensive and not portable

Task Managers / To-do lists (Trello, Asana, etc):

Pros > Very intuitive to use, can sort of embed documents/images, have collab features

Cons > Not good for longer-form notes, bad at math, not meant for note-taking, you mostly don't own your data

Others:

Jupyter/Mathematica can do WYSIWYG text, code, math, data, and images all in one document. However, Mathematica is expensive, and Jupyter is non-trivial to get up and running. These tools are primarily geared towards creating a polished document, and are less good at documenting the evolution of ideas inherent in note-taking.

Personal Diary/Journal software is mostly underwhelming, most of these seem like cut-down note-taking apps sold to the non-tech-savvy


Jupyter is trivial to get up and running. I did it just a couple weeks ago and it took under 5 minutes. There is a docker image but I think I just did "pip install jupyter" and "jupyter notebook".


I’m thinking perhaps GP is referring to the fact that you can’t just quickly use Jupyter; the server has to be running, with your desired kernel, and you need to know what port it’s on and get a browser tab open on it.


It does look like they've cleaned up their install instructions since the last time I checked them.

When I tried following their instructions in the past, I was unable to install the kernels I was interested in (Haskell, F#)


Someone should make a database of every HN comment on the best ways to manage notes and/or tasks. I might even buy a subscription.

Edit: My current stack, to show good faith: paper for log and tasks, Org and Git for memoranda.


I have a small website in the wild. Every page is a markdown file with notes and ideas about a subject. The entire website is git versioned. I keep a copy of the git repo on Dropbox to easily edit articles and push to upstream (that is the place where the website is hosted). Ah... there is an sqlite file with a single table with the following cols: article-name, file-path, creation-date, tags (for search by argument). Article last edit time is taken directly by the file. Every meta-info is shown on top of the html rendered markdown file (i use Parsedown)


I like these types of discussions.

For me, note-taking is something which helps me digest complex ideas. It's a valuable thing and something you can improve at with time.

Then I read the reasoning behind why others don't take notes and I stop to think. Hmm, maybe there is such a thing as too much. Maybe note-taking has a fine balance. Breaking up complexity and summarizing it with notes can be very helpful with getting something finished. Writing journals of everything you do daily probably detracts time from actually performing the tasks required.

There's some science out there on how dopamine gets released when we TALK about performing an action with desirable results. (I'm going to create this project, I'm going to workout this summer and lose weight, I'm going to read 12 books this year). Basically, you're being rewarded for not doing but just saying. If you spend too much time note-taking on a plan or project, you might be getting the dopamine fix, which might make it harder to execute.

Similar comparisons are with startups and large companies. Startups work fast and can ship products quicker, at the cost of maintainability. Large companies have to take their time documenting, grabbing requirements, assigning the team, and following internal processes. The process kills productivity, in favor of predictability and maintainability.


In Dropbox, I keep an annual logbook file for both work and home, just a text file (well, rtf). As I do things that I want to remember I did, I write a note, paste a command line or link, etc, under a line with the date on which I did/wrote/pasted. Over time I've built up a record of my activities, and a handy notebook for remembering how to do complicated things I seldom do. It also makes it easy to write up status reports when those are necessary.


I've noticed that discussing and chatting are way more productive forms of writing for me, and I've realized that it's exactly because they discourage excessive editing.

So after thinking about it for a while, I realized that the best way for me to take notes is just to have a chat room with myself, where I write things down as I do stuff or think about stuff.

The common pattern is that I start the day by writing something about what I want to do, how I plan to spend the day, maybe some reflections on how I feel about the project's direction... Then during the day I'll put some brief notes, including random ideas that I just want to get out of me... And then at the end of my workday I'll go and reflect what I did and the current status.

Then I also have a setup of Org mode documents. One is a general project management file for all the projects in my life (housing, volunteering, work, recipes, etc) and then there are notes files that are more like sprawling personal wikis or (more pretentiously) like very disorganized book drafts where I flesh out my thoughts in a more long term way or in depth way.

(About the self-chat, I also use that for writing things like blog posts; I make a first draft just by chatting, and then I spend hours reorganizing and editing.)


I'm using LiveComment structured notes for everything. I developed a methodology how to use it across multiple operation systems & technologies. LiveComment extend my memory & speedup developing source code. It has powerful server/client plugins system for add any function in runtime with live reload. I'm using paper & board for brainstorm too.

https://www.npmjs.com/package/livecomment

Samples here:

http://acpul.org/livecomment-src - livecomment js sources (it's quine, that developed using self documented code)

http://acpul.org/pool - common memory pool: active info, some processed bookmarks from HN, reddit, etc.

http://acpul.org/pica - livecomment in real project. here is collected info when i was develop gpu optimizations for popular nodejs image resizing library https://www.npmjs.com/package/pica


When I got my first full time job as a programmer in the 1970s, my boss handed me a new square deal grid bound notebook and told me to write down everything I did. It was my secret weapon: years after working on something, I could do a quick refresh if questions arose.

I still keep copious notes every workday of everything; e.g., hyper parameters for modeling, server info, URIs to useful documentation, etc.


For several years I've been using RedNotebook - http://rednotebook.sourceforge.net. I use it mostly to journal what I worked on so that when I need to report it I don't have to struggle to remember anything. Since RedNotebook's text input is directly tied to the date, it works best in my opinion for daily log entries. However, there are shortcuts to jump to the previous/next entry to easily skip days with no log entry. Basic text formatting (txt2tags) is supported along with the ability to export to HTML, Latex, or PDF. It's created in GTK (if that matters), but is supported on Linux, Windows, and Mac.


Professionally - I took over the monthly payment system at my current job. There was a fair amount of technical debt and tribal knowledge about the thing - the first few months, I took extensive notes about everything from basic usage to problems encountered. As I paid off the technical debt, however, I was able to gradually turn the notes into code; now, it's almost at the point where there's nothing to write down each month (although there's usually new code to write).

Outside of that, a friend of mine has made his own semi-public wiki, and tied that into his email client; he can now easily link to pages from within the email, allowing him to communicate A LOT with very few new words. It's pretty neat.


Here is my software engineering notebook (still a work in progress): https://baron816.gitbooks.io/good-stuff-to-know/content/

Working on this has definitely helped me learn these concepts much better and deeper, plus it's easy to go back and find things when I need them. Just reading something is not a good way to absorb information. Actually having to regurgitate something in your own words makes a huge difference.

Gitbook is not the best place for all my notes. Will be using Evernote going forward.


I have a "things learned" section in Notes.app, mostly to avoid repeated fuckups and to become a better person. Some earlier example entries:

* Leave the office once you're really sure that deployment was successful

* Have timestamps in logs

* Before making your opinion public, make sure what you think is a mistake is in fact a mistake

* When you struggle with an issue, make sure the fix isn't right in front of you

* Make sure everything's set up for remote work; you don't want to hotfix some production issue at 2 AM, only to find out you can't access Git from home

* Other people's time is worth twice yours


For me, celerity of access makes my note taking possible. Mouse over a hot zone and the editor slides out. Mouse away, and it hides.

I used to use SideNote, but that was abandoned. I'm currently using SideWriter, but it's a little flaky.

I hope to start learning swift soon so I can develop my own with some extra features, mainly markdown and either tabs/multiple hot zones.

My memory is horrible, so I need to write down what I did/thought before it vanishes. Mostly comes in handy when I have to justify to HR why they need to give me a raise.


I currently use Boost and I like it, but I miss the old PIMs of the early 00s. I keep wanting to make my own old school pim as a pet project but that always stays in the back. It would be ncurses based :)

I started with old wikis and then a Russian PIM that I can't remember and then Google Notebook. Evernote was always a hit o miss the sync never was good for me.


I keep all bash history, automatically appending it to a file that’s backed up in google drive. That deals very effectively with remembering how I did something from the command line in the past, which is being mentioned in this thread. However it doesn’t work for commands issued on a machine which isn’t your main personal machine.


Is there any opensource things that can be a software engineering notebook or journal that is easy to use and painless?


I was looking at Boostnote earlier: https://boostnote.io/


+1 Boostnote! It's one of the few open source notebook apps I've used that I've actually enjoyed!


Looks nice. Can sync to all devices where you've installed it, via Dropbox.


Not opensource but hard to beat Quiver: http://happenapps.com/

Edit: I take that back, Boostnote looks pretty good!


I'm not that concerned about Quiver not being open source, as its note storage format is simple & documented json. Should there be a reason to move away from Quiver, it would be pretty simple to construct a way of transferring notes (assuming the destination is as transparent). In the meantime, it's quite a pleasure to use: very fast, well-presented, and with carefully-considered interactions.

I must give Boostnote a try. On the face of it, I would think an engineering notebook, to be used daily for large amounts of stuff, would be a paradigmatic case for a native app like Quiver rather than electron. But then there's Atom & vscode so maybe not? And I'm a bit uncomfortable with Boostnote's copyright transfer for pull requests (https://github.com/BoostIO/Boostnote/blob/master/contributin...). But then again, I pay little attention to copyright matters so perhaps just haven't noticed if this is common in open source. And it's clearly nevertheless more open than Quiver.


I've just given boostnote a quick tour, as a Quiver user I'm not so sure boostnotes is quite there yet, at least on feature parity.

There seems to be some UI slowdown on my machine too, whereas Quiver doesn't seem to suffer from that at all, and I have like 200+ note files in my Quiver repository!


A plain paper notebook. I’ve tried everything and nothing works as well.


This is true and somewhat infuriating.

I have a $700 computer in my pocket and the best way to write a grocery list is on a post-it found in the kitchen drawer.

I think it comes down to the human interface of a touch screen being slow, frustrating, and generally inefficient.


It's amazing that we have accepted this user interface for as long as we have. Imagine if touching your paper notebook the wrong way could accidentally erase it or share it with your mom.


> share it with your mom

O horror!


Get a Samsung Note 8. Use wacom pen to take notes. Carrying around dead trees is archaic.


Reminds me of the anecdote about the Russians using a pencil in space (vs. a $1000 pen specifically designed to work in weightlessness).



Not to mention throwing away my iPhone and all the software I bought for it to go to something completely different. Seriously, a pocket notebook can record info much more efficiently and effectively, more rich information than any device.


... and your 700-dollar pocket computer is probably not much better than the 200-dollar one that you ditched a couple of years ago. We buy things not because we need them, but because we want them. (Why we want them is another story.)


I mainly upgrade my phone for the camera upgrades, if I'm being honest with myself.


I always carry a Wacom tablet with my laptop specifically for drawing diagrams and notes without interface limitations.


I also use paper. So there are two of us. 8x11 notebook of quarter-inch graph paper.

Useful for taking notes wither portrait (in meetings) or landscape (in front of a computer). Also graph paper obviously helps with sketches and dividing up the page on the fly.


OneNote works wonders for me.


This. The ability to quickly capture and annotate screenshots and the setup of multiple notebooks makes this my most-used (and most loved) Office application.


+1. It's not open source but I haven't found anything else that even comes close.


A folder of text files.

Sounds stupid but I've yet to find a better tool.

I'll use Org-Mode if things get more complicated, but nothing beats plain text.


I mean org-mode is just easily readable plain text for the most part... Only has the potential to get ugly when you do odd or advanced stuff. The basic structure is just asterisk prefixed text.


Yes, this is me. I just open up sublime text, and within the second jot down whatever stuff I want. Nothing beats it.

I do use notes.app, evernote for complex writing stuff though.


I've tried everything including wikis. I've been using a mind map for the past ten years (freemind/freeplane). Nothing beats it. It's fast and a screen has two scrollable dimensions so why not use them. Easy to start disorganised and refactor later. Really easy to just hide noise without losing it completely. Second to a mind map is plain text but its limited if you want to embed diagrams or cross-link.


I use tiddlywiki, which is opensource. It's been recommended by many HN comments in the past. It works pretty well. You can store a copy on dropbox, and use android/ios apps to sync it. The web interface on a computer is really great. The mobile apps are not as great, though (clunky around syncing it).


I use sublime text and imported a directory of journal files as project. These files are of markdown and you can search sithin the project.

But this setup is somehow clunky because there is no tracking if a ceratain topic/headline already exists, linking is not possible, etC


I just set up gitlab private repo with .md files for my notes so I can edit/read those on my android phone (pocket git + droid edit) or whatever other computer I setup an clone repo.


I've used wikis like Mediawiki and blogs like Jekyll to great effect for this purpose.


Used vimwiki for a while until I accidentally deleted few top level file with lots of file links and now it is almost impossible to get it all organized again without going through very file. Tried some DIY versions with markdown files in directory structure, but the solution isn't too good.


On the topic of tools, I'm wondering if QOwnNotes would work for this time of journal/notetaking.

I recently moved off Basket and after an extensive search, found QOwnNotes seemed to fit my brain the best.

http://www.qownnotes.org/


I think jotting down very important points we realized while developing is worth noting down. May be in a gitbook. But having an actual paper or notepad journal and noting down everyday things is too much data and we rarely, and i mean like very rarely look at that a second time !


Despite being primarily a computational scientist, I still keep a proper "dead tree" lab notebook. It's been invaluable, both in keeping my thoughts ordered, and also referencing decisions toward old projects.


If you're on a Mac, I highly recommend Quiver - "The Programmer's Notebook" (http://happenapps.com)

No affiliation, just like and use it :)


I find it hilarious that in science and engineering using a lab or engineers notebook is common practice and VC is rare, but in software engineering VC is common and keeping a notebook is rare.


Electronic Lab Notebooks are a growing sector e.g. Findings - Lab Notebook by Findings Software SAS https://itunes.apple.com/gb/app/findings-lab-notebook/id9228...


The fields could learn from each other, in the same way cycling has learnt from formula1 and medicine has learnt from aviation safety (SE could probably learn from aviation safety).


I use Github for digital notes: https://github.com/azer/notebook

And physical notebook for other things.


Nice notes man. You've inspired me to make my own on github.


I use Evernote for this since it also backs as a web clipping tool.

Any article I like on the web which I might want to come back to in future, Evernote makes it easy to clip web pages as is.


> do you keep a notebook (digital or plain dead-tree version) to record things you learn

What's the point? After some time, that would the list of things you forgot... :)


yep i do and i've carried the habit from the lab into the workforce. it's mostly a write-many, read-few kind of thing but i've got a very loose system for capturing Action Items and i find having doodle space helps me keep track of the discussions other people are hafving. but then, i'm an ex-chemist too so biased sample... ;-)


I take A LOT of notes of everything. Mostly because I like writing things down. I NEVER find myself coming back to those, ever.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: