How to build a second brain as a software developer
aseemthakar.com
aseemthakar.com
1. It's always super helpful to write things down. Taking notes from what I read/learn is a great way to verify that I understand it. It sharpens my thinking.
2. However, maintaining the "second brain" is a lot work. It's not only about "linking" together notes. You also need to maintain some consistency between them. I ended up spending a lot of time thinking about the structure instead of actually thinking about the content.
3. Most of my notes/thoughts fall into two categories: (1) Either they are critical for something I'm actively working on or (2) it's just loose concepts that I'm toying with. For (1) I immediately end up playing with it in code — which is far more concrete and tangible than notes. And for (2) it was rarely important to retain the knowledge accurately many weeks/months later.
What I've ended up with is taking a lot of notes, but I hardly focus on organizing them.
Particularly to your point (2), the problem I've seen with most systems is they are not simple to maintain. Contrast this with "Getting Things Done", which is practically the simplest productivity system I've ever used that accurately works, where you have only two chores:
1. Write down tasks as they come up 2. Flesh them out later with as little metadata as possible (typically, at most, a project + due date if necessary)
The Zettelkasten mirrors this in a lot of ways. It has the advantage of re-writing your notes in your own words (your point (1)), but it is very simple to maintain. You re-write, make links to other notes in your existing setup, and you're done. Your notes should be as context-less as possible (which causes you to think further), and you should generally be able to relate it to GTD's daily "review" process.
A big point of clarity is the Zettelkasten is against "organization" - everything falls into the box. Ahrens talks in depth about how folders, categories, and even tags can be very limiting - you think about the metadata more than the actual content, which gives us a headache to maintain. A system should be as friction-less as possible if we want to actually use it.
Additionally, he does address your (3) to some extent, but it seems like you've figured out what these thoughts are, and resolved that they probably aren't worth fleshing out further (beyond maybe your proof-of-concept, fail-fast demo). I imagine if they are worthy ideas you probably would elaborate on them further.
--
I've been using it for a while now, and I can personally attest that it's been very helpful, especially as I've progressed into more architectural/design work, and less direct day-to-day coding.
I end up having to rebuild my (admittedly tiny) "second brain" from scratch from time to time, but at least I end up with stuff that's relevant now-ish, without having to bear the cost of a lot of long-term knowledge inventory.
NOTE: This is not advice, and this approach would probably not work even for me if I was inclined to regret throwing things away.
This is why wikis, which I originally thought were just the best things ever, seem to become useless over time.
The Mac application Quiver [1] introduced me to the idea of categories, which can contain one layer of sub-category, and either categories or sub-categories can contain articles, which contain text. A really simple tree.
This extremely simple structure is just enough to (A) contain everything I've thrown at it and (B) know where to look for something. And, you can make links from one article to another for when a cross-reference is good to have (but I do it very rarely).
I now use Obsidian [2] which is more modern, not Mac only, as well as being much simpler to use than Quiver, using simple markdown.
I think structureless is not possible, since some form of structure will grow, with lumps. I think there's some happy in between, with some light structure in place.
nomel wrote:
> I think structureless is not possible, since some form of structure will grow, with lumps.
This really nails it. There will be some kinds of structures (note the plurals), particularly if more than one person is involved, since you just think... differently at different times. A minimal structure like Quiver/Obsidian just takes all those silly decisions away that wind up lumping your data into a difficult-to-access wad.
I thought about it and my minimum requirements for a knowledge graph tool are:
1. Edit files in vanilla Markdown (no application specific cruft)
2. Be able to search content easily (ideally via grep)
3. Add 1:1 or 1:many links between files (direct links vs. tags, ideally using requirement 2 to implement this)
And the simplest solution for me was:
1. A single level directory of md files (no folders!)
2. Vim + Telescope [1]
3. A small set of guidelines [2] to define searchable patterns for linking files/nodes
I also wrote a little md renderer (seen in link 2) that adds the features I wanted for exploring my notes/second brain in a browser that picks up on the patterns in the guidelines. Gotta get a grep search on that thing and it'll be golden, but I apologize I'm rambling at this point.
Never been happier. I just use Working Copy to jot notes on mobile when I'm not at my computer.
[0] https://help.obsidian.md/How+to/Internal+link
Their user forum is in English and is THE best ressource regarding all things Zettelkasten. https://forum.zettelkasten.de Niklas Luhmann, the inventor of the Zettelkasten system, was German, after all :)
Although, I do think I have a small gripe with the Zettelkestan method. I don't see the point in having a large collection of small notes with unique identifiers. If I have a random thought, I will write it in a physical notebook accepting it's mortality. If I want to immortalize it, I flesh out the thought and transfer it either to it's own file, or add the small bit of info to a relevant file.
Even if I did want to jot down every small thought or idea of mine in my notes directory, the manageability difference between a single long file (for say all my small thoughts) vs. a ton of small files seems marginal to me. I do personally prefer the former though.
When your main method for searching relies on powerful content scanning (grep) and connections (tags/direct links) it doesn't really matter where the content lives. If the search is powerful and the connections are strong, everything is easily discoverable.
Reminds me (sorry, I'm a dinosaur) of the WAIS [0] days -- I had a friend who showed me some cool sites accessible through WAIS. When I asked them if there was some kind of directory to find stuff, he looked slightly annoyed and said, "You could build one, I guess." The WwW came along shortly thereafter, with lots of directories of sites, and yeah, most folks have never even heard of WAIS :-)
[0] https://en.wikipedia.org/wiki/Wide_area_information_server
Also the tags are very deliberate.
Organising: suggest event in {iCal, Outlook}, can search by date.
Other categories: suggest adding names of people to notes. Search (grep) for those extra names.
Suggest scheduling future event {date/time, person} to delegate task.
Suggest fractal recursion of self-sacrifice in Sierpinski Triangle, delegate out half the work, then half again. Say "thank you" to those who accept delegation; thank back to those who suggested ideas to you.
Can parallelise {reading, writing, listening, speaking, typing, singing, doing going} e.g. reading code and singing music. Can double available brainpower.
Thank you judofyr for your bug report; hope this workaround will help!
It's not perfect, but it's the best solution I've found so far. I've tried every note taking method out there and I always fall off after a few months. I think this is working for me because it has the quality of a general wiki, but I start fresh every week, so I don't have to worry about carrying over or linking "knowledge" for the most part.
OneNote is what I have end up with for now. Every page in one note is like a whiteboard where you can put anything anywhere. I sometimes store screenshots of code snippets. Sometimes even full files. Use it for small temporary todo lists. OneNote is a great place for putting down random info as quickly as possible.
Not worrying about how and where to put your thoughts down is very very important. Thoughts get lost in the process otherwise.
Yes, strong agree
What is my idea - I have VS Code and just write down things with tags using # - then even if I have something in two places on the same topic I don't mind. When I see it in search I will recall which one I need.
Disk space for text files is nowadays basically infinite :)
For an academic sociologist, building a zettelkasten is a step in the process of writing academic publications; for me an academic in Earth Science, taking notes is documenting the software my team writes, documenting the scientific methods we use; keeping track of tasks and writing meeting notes; for a programmer, taking notes is storing examples of code, ideas, etc.
That's why there is no one way to taking notes. There will almost be as many note-taking tools as people using them!
One person can have multiple systems of note taking. Just daily notes that you need to write down to keep some thoughts around. Other system might be for writing a book that needs to be really structured.
I think problem is that a lot of people think that they need to have "one master system" to rule them all.
But what is my idea - that if you have some daily note that you want to include in your book, you copy that piece to your "book notes" from your "daily notes" and have 2 copies in different contexts.
Sometimes I have that grand idea that I would like to wrap my mind around entirety of my life ... it is just not possible and CONTEXT is the king.
I would love to have a pseudo-smart tool that suggests meaningful actions based on the note content. Like "Move note to project 'learning-kubernetes'", "Tag with 'home-improvement'" or "See similar notes: [...]". That and the ability to do it on my phone would be a killer feature for me.
Some are lists, like todo.txt
Some are individual topics, brainstorms, etc.
For organizing them, I put hashtags like #food inside.
Even thousands upon thousands of textfiles (which I'm nowhere near) grep quickly, archive and backup quickly, and transfer to other systems quickly, without lock-in or putting my eggs into someone else's basket.
I can even build my own UI on top of it... First, index them into a SQLite, then generate some HTML from it, and have a form which puts another textfile back into the directory. Best of all: the UI never changes without my consent.
After getting burned repeatedly by third-party systems with stupid UI changes, data migrations, just plain shutting down, leaking my data, your version is out of date, and your OS is not compatible with our new version, and your device is not compatible with the new OS version, etc., there's no way I'm using a third-party system for this ever again.
Now I just write markdown files and store them in a hierarchical folder structure (never more than three folders deep!). I use VSCode to write everything which gives basic formatting for italics, bold, and code highlighting as well as an outline of the headings. You can click on links to go to other files. It has a preview feature if you want to see embedded images or videos or HTML. I use an extension that lets you edit draw.io diagrams and embed them without leaving the editor (https://marketplace.visualstudio.com/items?itemName=hediet.v...) Global search across all notes is instant. I have a few node.js scripts I've written to take care of automating some tasks, and since it's all markdown parsing it is easy with a library.
I've even been built a VSCode extension to show all of the markdown files in a folder in a webview and lets you organize them on a grid (I'll probably release this + make it open source once some bugs are ironed out).
Best part is, it's all just text files in git. I can read the formatted markdown files on github (and edit them in _any_ browser with https://vscode.dev/ !!!). It all works offline and syncing can be done with a click of a button.
I do the same, except that I use Emacs org mode. This gives me (other than highlighting):
1. Clickable hyperlinks (linking to the same document, linking to another org file, linking to any other file and linking to a URL).
2. Pretty export options (my entire blog is just a collection of org files exported to html, some technical documents are exported to LaTeX/pdf).
3. Text diagrams using the graphviz dot language.
4. Builtin history management and versioning using magit (of course this is all stored in Git :))
5. Nice formatting in emacs - parent checkboxes are automatically calculated and filled when children items are filled in, M-q nicely formats paragraphs, Sections and subsections are easily folded/unfolded by my simply hitting tab while the cursor is on the heading, tables are incredibly easy to create and modify, (sub)sections are movable without needing to copy and paste, etc
6. Items in a tasklist can easily be cycled between various states (TODO -> RESEARCHING -> IN-PROGRESS -> DONE) with custom states being specified at the top of the file..
Of course, VSCode is also way more resource intensive than emacs :) Kind of like using a power tool to build IKEA furniture.
Open source tools might not be as polished as Roam Research or whatever other fad is going on at the time, but I know they are more likely to stand the test of time.
My personal setup is creating markdown files with vimwiki and using fzf for file search. Occasionally I'll use https://obsidian.md to visualize my knowledge graph but otherwise I don't depend on it.
I wouldn't use another 3rd party system for keeping track of anything essential, ever again.
I love the distraction free experience of editing text.
I format however I want.
And it's ultimately portable.
Then I could just slap up a tiddly-service and connect. Incidentally, I've mostly switched to "Zim" wiki, but it's fairly similar.
Since ~8 months ago I've been consistently keeping notes organized in markdown files using Sublime, and storing them in Dropbox.
To read/edit them on my phone I use Obsidian and I use Dropsync for Android (free) for better syncing.
three parts.
1/ saving Notes in markdown files on github
2/ using static site generator to create website https://github.com/shuding/nextra
3/ hosting on Vercel for free
https://docs-site-coral.vercel.app/
The above is the sample site that was created with Nextra and hosted on Vercel, when you navigate on this site you would appreciate the simplicity of markdown files with good website navigation . Vercel hosted site will be updated as soon as you checkin .md file changes to github
All you need to do is clone this repo https://github.com/vercel/swr , npm install and run the site locally .
If you like the site, remove the files and replace with your own .md files , check-in into your own github repo , create Vercel account and it will pull your github repo and you Docs site is online .
I built my whole system on a Google Sheet, but I'm experimenting with building myself an App instead- something I would never have been able to accomplish or even been willing to start if I didn't have this second brain helping me.
The lessons I've learned from this:
1. Being pro-active on things instead of reactive makes everything easier. Each action takes less work because there's no worry or guilt associated with it. Just a small amount of planning to make myself pro-active is a worthy investment.
2. Putting things I need to remember into a system and then forgetting about them, trusting that my system has it under control, removes a huge cognitive load from me. I have more energy to use elsewhere.
3. Building a system that evolves to fit my needs, being flexible with myself, rather than trying to jam myself into someone else's system has made it work at all. That's why Google Sheets is awesome as a prototype tool for this.
This approach has worked great for me. I have a local web app that's grown (and rewritten) over several years, which renders a folder of Markdown files into a view with navigation, interconnected links, dynamic components (like calendar or calculator), syntax highlight for code snippets..
I love being able to write notes in natural language as well as code, and extend it with any feature I want.
Edit: Also I have some shell commands that open, add, or search notes from the terminal.
I've concluded that this is a necessary journey for me. It's a slow process, trying to learn how I best think and associate.
Do you find that it's taking a ton of time for you? Or maybe you're doing a loose interpretation of the system?
But was it hours of "administrative" tasks maintaining the GTD thing or was it hours of doing something productive?
I'm definitely not following Allen's methodology exactly. I'm doing what works for me. I'm automating a lot of the bullshit, and ignoring Allen's entire half-chapter devoted to why paper is the only option (there is no paper in my system at all). I also don't have any references to sort or organize- everything is in my google drive, which has a powerful search feature. That may come back to bite me, but it hasn't yet.
I do find I am spending a couple hours a day just doing stuff that I would have procrastinated on otherwise.
This is the key for me. My brain gets jumbled if I try to juggle too many things at once.
I write stuff I need to do down in a single place, or move my "I will _definitely_ read this later" bookmarks to Pinboard and promptly forget them.
When I need something new to do or read, I know where to find it.
There's no system that works for everyone. You have to develop your own, and it will evolve because you change. I started journaling over 10 years ago - it was a simple "daily log" that I only wrote in occasionally. Over time I got more prolific and proficient at it. The structure of that journal became more complex, with different journals for day-job vs personal, multiple levels of summary vs detail planning/notes/ideas, and links between them. I've had to refactor that structure and the taxonomy of tags many times. And much like he describes here, I ended up adding cheatsheets and Q&A and dev templates. *There's no way I'd recommend this system to a beginner.* You have to build your own system according to where you're at in your journey.
I keep seeing this term, but I have trouble understanding it. I open lots of productivity articles. It's not often that I make it past the third sentence because it's too general or not relevant to me.
Very few of the premises used in the article are how I solve problems or gather information as an engineer, either now or in the fledging times of the start of my career 15 years ago. Consequently, the second brain concept seems less useful for me at least at a glance.
I thought it was peculiar that in the initial flowchart of "problem requiring information" - there is no mention of RTFS (I use that acronym affectionately here), which is probably the most useful skill I have learned in my time building and maintaining software projects. It may be an innocent omission and its admittedly a steep initial learning curve, but I think it it amortizes incredibly well over the span of a whole career.
Not accepting "black magic" anywhere in your stack and challenging yourself to understand why something is breaking can certainly lead to rabbit holes, but avoiding it altogether introduces a significant opportunity cost, in my view.
Maybe trying to strike a balance there can dodge the information asymmetry/inefficiency issue established in the premise of the article. Really interesting read, whatever the truth may be.
I keep these PDF files and use them where most people would have bookmarks.
The advantage is that I have an offline cache of materials (60,000+ files), a carefully curated list of stuff I like (or can be bothered to think about long enough to decide I might need it in the future), and endless amounts of material to pdfgrep for further drilling.
This has given me quite an edge, time and again, because while others are struggling to find that one bookmark that has the article they kinda remember reading once a few years back, I've already found it, gone to the new site, seen the state of the art as it progressed in the time since my visit, and so on.
I believe this has given me a 'second brain'. There is no greater joy than to drop into this directory and do an "ls -alF | grep <some search term>" and find every single page I've read since 2003 on that particular topic, still in the original form I remember - and then to re-visit the page and get the updates.
I have a lot of HN articles saved this way - as well as the HN comments too, and this has also served as a second harmonic to my general knowledge, ready and easily accessible should I need it.
Try this trick, it really kicks ass!
But why save pdfs instead of downloading the webpages?
Ages ago we had this wonderful format called MHTML which allowed you to save an entire webpage (with images and all) as a single file. This was amazing for archiving and I remember saving lots of tutorials in this format.
But the format seems to have fallen out of grace over the years to the point where it became difficult to find a browser that allows opening those old files.
PDF now seems to be the best method of archiving content. Standards like PDF/A implement a subset of the PDF standard which ensures the content will be available for the years to come.
Ugh, no. No, no, no. Tiago isn't doing anything original. Tiago has never done anything original. This isn't Tiago's thing.
I've personally tried to use mind maps (a bit more general than solving technical problems) but gave up pretty quickly. I think part of the problem was the technology itself, mind map apps are mostly desktop only and the mobile experience navigating a 2D diagram is kind of clunky. The other part was just laziness, after building a mind map for an entire weekend I didn't even scratch the surface of what I wanted to achieve with it.
Also I take objection to the fact that we go straight to Google for solutions, I check the existing codebase I'm working on, code search in my company's internal repo, code search github, then go to Stackoverflow / docs. So there's some amount of intermediate caching.
FWIW, I use iThoughts across a couple of different devices. It's been around for a while now and has a good mix of usability and functionality.
Now I just need to learn how to go back through them.
> WE HAVE THREE TYPES OF MEMORY. The first one is organic, which is the memory made of flesh and blood and the one administrated by our brain. The second is mineral, and in this sense mankind has known two kinds of mineral memory: millennia ago, this was the memory represented by clay tablets and obelisks, pretty well known in this country, on which people carved their texts. However, this second type is also the electronic memory of today's computers, based upon silicon. We have also known another kind of memory, the vegetal one, the one represented by the first papyruses, again well known in this country, and then on books, made of paper.
* https://www.bibalex.org/attachments/english/Vegetal_and_Mine...
I'm currently reading 'Remember' by Lisa Genova[0]. She points out that we have 'Temporal' memory for events in our lives, 'Semantic' memory for facts and figures (divorced from when we learned them), and 'muscle' memory for things we do with out body. So yeah, 3 types ;-)
It’s kind of sad that instead of using the Internet to vastly expand the reach and effectiveness of that existing system, we seem to have thrown it away so we need articles like this to try to rebuild it. Rather than developing our own thoughts we search for someone else’s thoughts. (And I’m not being holier-than-thou; my first stop is Google and Stack Overflow now too!)
But it’s interesting to see that he’s using it for completely different things than me. For example, I don’t see much point in saving code snippets.
Google plus the internet is your second brain and is the optimal approach for almost everyone. This heavy approach seems like make work that will waste time, and the data will rot, leading to calcified and inaccurate knowledge.
1. Public (if it's non-public systems, information, etc. that you are learning then Google can't help you). 2. and either shallow or of one of a small subset of areas that has in-depth discussion online.
There are plenty of situations in knowledge work where Google will not cut it.
If the knowledge is already in the documentation or a book, why should I keep a copy of that knowledge elsewhere, in yet another format?
Use this with the encryption, sync to local filesystem, and with syncthing or similar and you can have an entire "second brain" tree of knowledge written in markdown. On your phone, on your laptop, pc at work, etc.... all for free because devs
However, none are built for software developers. If you want to know why, ask yourself — does anything here make me feel special as a developer? My guess is the response is "No".
I'm the founder of archbee.io, and although it's an early stage product, I built it for engineers — and you can see that by the features: architecture diagrams, GitHub integration, markdown shortcuts, very speedy, API docs with GraphQL and OpenAPI, custom domain hosting, Mermaid diagrams and more.
Please check it out and let me know what you thought!
:)
Have a look at Anki https://apps.ankiweb.net/, the tool that I use to make memory a choice. See also Michael Nielsen blog on this: https://augmentingcognition.com/ltm.html
A brain isn't just about knowledge; it's also a set of skills, capacities, patterns of behavior. Software is an area it's possible to capture capacities in the form of code that actually does stuff. This article makes brief mention of code snippets, but only really to remark on the kinds of metadata that one should keep to find them later.
What I have yet to see a satisfying description of, and what I sometimes try to work towards myself, is a mashup of a library with a knowledge management system, where notes link to code, and both go together in a common repo. However, depending on the kinds of things one stores, the software/library side can stumble over some challenges, and I haven't quite figured out how to keep the overhead spent on maintaining it low. One might have small pieces of code in many languages, or different versions of the same language (e.g. making notes about macros in scala 2.x vs scala 3), and notes made at different times might incidentally become dependent on differing specific versions of library (e.g. ideas in statistical analysis that use pandas).
1) Emacs with Org Mode, which is very powerful but has a learning curve like a brick wall, even if you already know emacs. Also nearly impossible to use with anything except emacs (yes, there are mobile/web apps that understand standard org syntax... which doesn't help with any customizations you make, which is like half the point of org mode).
2) Glamorous Toolkit, which is based on Pharo Smalltalk and is easier to use than org mode, but less featureful, much newer (== smaller community, less support), and has many of same problems (i.e. can't easily use it on any non-desktop platform).
It's looking more and more like I'm going to have to build something myself for this.
This does not match my understanding of PARA as described by Tiago. [0] These are not a straight-line "flat" nesting, there's some branches. Areas are at the top, they represent responsibilities, have a broad scope, and undefined/unknowable end date. Both Projects and Resources are nested under an Area. Resources are tools or provisions or information that are potentially useful to fulfill the Area's responsibility. Projects are an attempt to take a little bite out of the Area's responsibility by considering a particular goal in a narrow time horizon. You should be able to use the Area's Resources to help complete a Project.
Archives are the category that is not like the others. It's more of a "completed" / "abandoned" status that can be applied to any of the other three as a way to sift out things that are no longer immediately relevant without deleting them. I like to think of this as a generic, orthogonal Time dimension. Maybe infogulch's version would be called PAR/T.
[0]: I found the Building a Second Brain podcast does a pretty good job of outlining these categories more clearly. Episodes are short ~8m and digestible. https://fortelabs.co/blog/basbpodcast
But I can also relate to never wanting to stick to one system for second-brain work indefinitely.
I've made the mistake of trying to build my own second-brains more than I probably should.
BTW @genghisjahn given your tool usage I'd love to get your thoughts on BrainTool (which I've been pimping throughout this thread!) Since most of my inflow and things I need to keep track of come via browser and most of my notes are in orgmode text, BrainTool is the thing I built to bridge the two. I'm hoping its a more generally useful lightweight organizational tool which doesn't require the maintenance of other solutions and have been gathering informed feedback wherever I can.
I don't want to be restricted in how I am taking down information. Sometimes, I want to draw on a tablet, sometimes I want to write markdown, sometimes I want to do workflowy style outlining.
I shouldn't be restricted in that way!
So far, the only one I've been able to settle on for about 1.5 years now is Obsidian.
There are a million ways to approach this kind of thing, and whilst browser tabs aren't nessecarily the best way, they're certainly up there
So I have a browser window per "thing" that I'm dealing with, with a whole bunch of tabs, and when I'm done with the thing, the browser gets closed and the tabs go away.
It wraps around this exact workflow, saves your tabs, and can manage your browser windows. You may have to login to Chrome to get your bookmarks, tabs and stuff.
I feel like the tool I'm looking for doesn't exist, but I don't really know what I'm looking for either.
The point there is to change the workflow in such a way that you won't need tabs
The other issue, of course, is my TODO-stack growing faster than I have time to organise and plan it. I’m hoping a working Zettlekasten can address that part by moving the entire class of research and design type of tasks out of the “should be doing right now” category.
For my own practices, I've added in a bit of an OODA loop process. My intent is to systematically balance between deciding and executing, focusing on accumulating knowledge towards achieving a goal.
When I'm stuck, or dealing with unknowns, the brainstorming in each of Observe, Orient and Decide enable me to gain some flow.
Later, I can observe where I had blindspots, or anchored to certain contexts or scopes. I'm noticing I could develop checklists to go through to avoid repeating those biases.
When shooting my shotgun for finding more references, what I've done/know/questioned about a piece of code shows up too.
What good is doing all this filing and organizing if it only serves you personally? It's like building and maintaining a cache, but with a high percentage of cache misses.
Also:
* when you write something, it challenges you: do you know enough to form cohesive sentences or do you just have scattered thoughts * when you write, you get to organize the information in a way that makes sense to you - it's your knowledge, not someone's else
Currently I just use some markdown notes but I'm looking forward to augment them.
1) define your basic structure for capture (I also like PARA[1])
2) invest in the tools (for me, emacs/org-mode combined with the BrainTool browser extension - disclosure I built it[2])
3) understand your inflows and workflow.
4) just use search on your second brain for retrieval.
[1] https://fortelabs.co/blog/para/
[2] https://braintool.org/2021/05/15/Organizing-your-life-with-a...
Stuff like this isn't really a second brain. It's a stick for scratching.
Having used both Evernote and OneNote, I've found Joplin to be a better choice, especially when I'm bouncing between platforms. It doesn't lock you to a particular ecosystem or cloud service, and the open source app is free for use.
For what it's worth, I'm not affiliated with Joplin, I'm just a user.
Amazed it wasn't mentioned in this article.
The only thing that bothers me it has poor search, if you want to search for 'google' 'goog' doesn't resolve any results. A bit baffled by this, you can use an * wildcard but would prefer fuzzy search
Most of the problems we software developers encounter, we've solved before. So it's usually a case of recognizing the pattern of problems this is, and matching it to one you've solved before, and quickly being able to reference that previous solution. That's 95% of getting it done.
IMO Search Engine is the food pantry. local knowledge repositories are good for any domain specific knowledge thats really hard to find elsewhere online
My technique to combat that has been combining my own notes and making use of Pocket to have copies of resources that I think are interesting.
Foam. Built on Visual Studio Code and GitHub, Foam is early but already powerful. Write your content in markdown, use [[page]] for internal links, and explore your content with an interactive graph. The Backlinks Explorer lets you find all notes that link to a specific note. Foam also makes it easy to back up your notes on GitHub. [1]
Athens. Quite ambitious, Athens aims to offer a full open-source version of Roam. Built with Clojure. It's founder wanted to work for Roam but was rejected because he didn't know Clojure. So he learned Clojure and started writing an open source alternative. Roam was rejected by YC but AThens was accepted. [2]
I have simple vim macro that prints today's date bound to a key. This makes it easy to write notes for that day. It's worked well for the last few years
I'd love to find some simple/automate-able way to integrate output from phone/notepad & stylus system.
- it's free - markdown (or orgmode) based local first - open source - PDF annotator (fantastic for scientific papers) - Built in spaced repetition - very fast
Can highly recommend it
I'm looking to augment my process but I've started with a simple approach: markdown notes, scripts, and lately my own diagrams (made with excalidraw or plantuml).
The most common scenarios when I write: learning something new or when I've had to search/type a command for the nth time - time to write it down or create a script for it.
I keep a highly nested todo list of things I'm currently working on where I can track incoming tasks ("reply to Bob about XYZ") as well as split current work into subtasks ("don't forget to add a test for edge case ABC"). I find the splitting really helpful because as you dive into a complex piece of code that you want to change or add a feature to you will "see things on the way down" that need updating but updating them is blocked on _other_ changes you need to make. A todo list helps track all of this stuff and ensure it does not get forgotten.
Here is my flow. Google. If its really good/unique and I am afraid that I won't find it again, then I bookmark it, and if I think it will actually disappear from the internet, then I will scrape the content for a 2nd brain.
Now whether Google is best depends. Sometimes specialty engines would be better.
By waiting until you actually need it, you skip a lot of the work in maintaining a knowledge base you don't use, and you only build out the bits you actually need, instead of wasting a bunch of effort on things that sound nice, but won't actually help.
I've tried a lot of solutions but the one that clicked for me is a mixture of org-mode for current/smaller notes and Zettlr (https://www.zettlr.com/) for stuff that my kids will inherit one day.
Zettlr's advantage is that is it just a layer on top of folder or folders with standard markdown files. Zettlr adds ability to tag and search notes plus it displays MD in a nice way. Nothing more, nothing less.
I keep the notes on Synology drive, so they are synced/backed-up and it just works.
Basically it's like advocating for old school paper encyclopedia in the age of Google.
I fail to see what is so inefficient with a web search as a second brain: the content is always up to date and you have a chance of stumbling upon something that is better than what would be stored in your second brain.
And let's not forget about that maintaining a second brain is a real time sink.
The only plus side of a local second brain is that it's functional without an internet connection, but can you really write software in good conditions without an internet access (I sure can't)?
My "2nd brain" are mostly scattered notes and scripts: low effort but just medium reward. I'm looking to organize them better and get a high reward with moderate effort.
Was quite useful for some university classes.
This article got me reading about PARA. But it seems like this sentence is very much the opposite of what the creator of PARA says to do. Sounds like there shouldn't be any nesting of categories: https://fortelabs.co/blog/p-a-r-a-ii-operations-manual/
The only thing I got right was to title creative outburst with strings of random characters created by slapping the keyboard. You should just open some of those from time to time just to see what is inside.
Area: an ongoing personal or professional responsibility (My Health)
Resource: impersonal knowledge that may be useful (couch to 5k training program)
Archive: any of the above that are no longer relevant to your life
...Except the 'personal stack overflow ' idea. Because so many of the answers to my questions are there, or in rando blog posts, having a personal SO full of actual SO answers (that I found useful) would actually be pretty good. Then a personal Google to search it and I'd be most of the way there.
If you're using scroll events for anything other than loading and unloading content outside the current viewport you're doing it wrong. Please stop.
If i can't find any of these, then falling back on previous finds is valuable.
The older I get, the more useful they become.
I'm wondering how to keep "slices of projects" aligned. Like, different things are in different repos - how to keep notes and additional files belonging to that, it ends up being a side hierarchy?
I am considered to be super-together by my colleagues. I am confident if they have to pick up my work, they can data mine what they need from the few hundred pages I have produced to date.
Just like one does not go to the market unless it is not in the pantry, one should not replicate what google can get for you in a second.
So, then, what needs to be in the second brain is more of keywords and categories, so that we can make the google searches more effective for the particular question we have
P.S.: assuming we will always have google/some search engine.
Link rot is real and sites/information I used to be able to find on google in seconds have been gone for years.
I have a pretty simple organizational structure for information: I keep text files on ongoing projects and ideas. I think on ones that are on the back burner and update my notes on them when I have something compelling come to mind, and the forefront ones or ones that are related to maintenance I keep accessible, usually on my desktop or always open in my text editor. It's a bit of a disorganized system but it is just the right level of complexity. I'm the kind of person who knows which pair of pants on the floor that I left my wallet under last night and so a good portion of organization exists in my head and I work better that way. I'm always on the lookout for new organizational tools, but a huge criteria for them is that they require little to no overhead or maintenance.
I do rely on online search a little too much, I often forget to store information I find and might need later and instead store my google-fu queries in my head, and because of that often times I cannot find it again later (because online search as a tool is degrading as we speak) and this article is a good reminder that I cannot rely on external tools like that that I have no say in them continuing to work the same way.
I keep is simple, three main section’s. A morning section where I write what I need to do that day, what happened already, what’s going on in my brain.
A evening section listing what I got done that day, and what’s going on in my brain.
The third section is technically the “first”. Which is a reflection on yesterday after a full night sleep. What I did wrong, what I need to improve on, etc.
A small section in which I include excerpts from my task lists for personal or work. A small section with generic daily goals like “For god sakes comment your code”.
Another small section I call “daily avoidance“ which is stuff I want to avoid, like “Working through lunch” basically bad habits, etc.
The reflection part I use as an outlet to write about what worked/didn’t work in achieving those goals, avoiding the bad habits or any other thoughts I had about yesterday or yesterdays work.
I keep both as strictly separate, I don’t write about work in the personal one unless it’s because I had a issue that caused a strong reaction. I.e Argument with co-worker. The work one doesn’t have personal stuff in it and is mostly talking about the projects or idea’s I had.
Most of them are less the 100 (average is less then 75) lines, with about 2 dozen or so markdown formatting.
(No, I don’t love it. It’s just what’s there.)
The supermarket analogy glosses over the fact that supermarkets are designed to be accessible to many people. Documenting what everyone needs to know because you needed it for yourself anyway is a great way to make teams happy with you. Plus you get to demand the attention to ask lots of detailed questions “for our documentation” and often encounter and surface issues with internal processes.