Roam Research For Coders: Note Taking For Technologists
(Graphic taken from the Roam Research homepage)
Being a lifelong learner is a prerequisite for being an effective technologist. We live in an age with endless resources from tutorials to documentation, and it can be hard to keep it all straight. I'd like to talk today about Roam Research, to give a high level of its useful features for learning and retaining coding knowledge as well as to give a sample setup for a learning process tailored to code when using Roam.
Roam Research is a note-taking app based around a core of references between notes and ideas placed on a graph. As a huge fan of the graph data structure and everything from graph databases like Neo4j to graph neural networks, I'll admit this helped draw me into trying it out in the first place. I have used Roam for many purposes thanks to its array of features, from the signature Daily Notes (which I use as a journal) to Kanban boards for to-do lists(and in software, who among us does not have a love-hate relationship with the venerable Kanban?) However, I am only now exploring it for enhancing and enabling my continued learning as a technologist. I will speak to Roam's features and to my general use or setup.
Roam is as mentioned powered by and anchored by the graph of reference and knowledge you build as you use the software. Roam allows for note-taking as simple as daily journaling to hyper-complex webs of information and reference, it's a blank canvas(well, blank graph, perhaps) that is in some important ways agnostic as to how you use it as well as opinionated. I won't get too much into Roam's design here but I will encourage you to check out their website for more information and to tap into an exciting community. What I will get into is how Roam can be useful for learning and maintaining a knowledge base around code, in an industry where we are ever having to learn as technologists new information and jog our memory on old syntax or concepts as well. First, though, I am going to rope you in with some of Roam's cool features!
Roam has some very helpful features for coders: inline support for code blocks and CSS theming are two of the big ones that come to mind. Code blocks for various languages are available, opening up lots of avenues to use Roam to store code, reference code, link code snippets and ideas together, and more. As well, Roam supports customization using JS and CSS to add functionality and style if you get really into it. I have not created anything for Roam yet, but it's on the roadmap(the roam map?) and a quick search will show some exciting plugins and themes. I'd like to point to Maggie Appleton's post and themes around Painting Roam, I have gotten great use out of her idea of styling tags to really brighten up and bring visual clarity to a document in the past. While aesthetics may not be a first-class citizen in note-taking, they sure can help in combination with the right mindset and workflow integrating them.
(Image taken from the above-linked article of some of Maggie's awesome CSS work with Roam)
How to use Roam for this purpose does depend on your own learning style, the quality of your memory, your note-taking style in general, and more. I will sing the praises of Roam as helpful for having a learning plan and linking ideas as well as establishing the regular habit of writing what you learn down through its Daily Notes feature, which I highly recommend leaning into if you use Roam.
So let's talk shop, a quick overview of a possible way (but not The Way) to use Roam for code knowledge. I see Roam's strengths here primarily as a way to take notes on videos and documents with links of reference between them within Roam, tagging as per Maggie Appleton's post linked above is a real value-add to the Roam experience overall and in this use case, it is a great resource for saving salient code snippets along with commentary and putting it all under a learning plan. So here's the tips/plan.
Take Notes!: This is a no-brainer, but taking good notes(and I'd say your note-taking style improvement will always be an iterative process, what isn't?) and taking them regularly with references between them is at the core of Roam. Whether this is in the Daily Notes, larger notes, or smaller notes with lots of references(the microservice approach to note-taking, one might say), whatever works for you! The important thing is to write, write, write what you learn and create and need to remember.
Link ideas with tags: Again, I'm going to boost the idea of color-coded tags. Do you know those color-coded tabs from post-it notes? I love those things. Maybe this is just my bias here, but adding a pop of color visually makes it so much easier to navigate a complex space of ideas and to shout out to your future self that say, something is very important or needs more investigation or whatever you may use tags for when the sky is the limit.
(Image taken from the same source mentioned above, look at that pop!)
Save snippets and commentary: I would save especially code snippets from your formative work, gists, existing work, as I tend not to trust a SaaS note-taking application without an explicit focus on security to host my code(which Roam does not have as a selling point, and if we're really doing SCM, there are a lot better solutions for that out there.) However, saving more ideas-in-code type snippets, especially well-commented and contextualized ones, or something cool you've discovered how to do? Awesome and a great way to keep your eyes on the code that matters while exploring your notes in that "jog the memory" scenario we all run into from time to time as coders.
Put it under a learning plan: I mentioned the love-hate of Kanbans, but it's a feature growing on me in Roam. You could put your learning plan for developing as a coder in Kanban in Roam and reference across what you learn, a very powerful technique for learning management. However, I'd like to start wrapping up by saying there's a lot of ways to crack eggs in Roam and to use what approach works best for you whether it is for creating a learning plan within Roam or just how you engage with the app itself.
Roam is shifting sands as software, being regularly updated, and I don't want to date this article by commenting too much on matters such as its (affordable at the time of writing) pricing, I encourage you to check those out yourself and will save you my opinions!
Finally, for more on Roam, I can't recommend Shu Omi's youtube videos enough. Shu's channel helped me get into Roam and enhance the effectiveness of my usage of the app. Big props to Shu, who covers tons of great topics and content around matters like productivity.
Leave a comment if you have any thoughts roaming around in your head about this piece, feel free to reach out via. the email and social media listed on this site if you need anything or would like to chat Roam or anything else that catches your eye in my web presence, generally don't be a stranger and consider sharing the good word of Roam along with this piece to your coding network! Take it easy, but take it.