Hello everyone!
I think I've been long due to make an update on my last post on Obsidian. I can say that so far, things have gone very well, and I would like to preface by saying that I had to take a break from CP for around 6-8 months due to a very intensive set of exams I had to prepare for.
In any case, here are the things that I've learnt using Obsidian after a 3 or so months more of CP!
What I've been doing
For the last 3 months, I focused on preparing for the IOI and getting better at problem solving in general. For this reason, I held off learning tonnes of new data structures all at once (You'll see some evidence of this in the graph). My main priorities was getting good at hard implementation problems, something that is common in the BIO. I also focused on getting used to identifying different programming paradigms, so practicing ad hoc, Greedy and dynamic programming was something I also took seriously.
Here is the graph as of now for reference:
It's definitely grown a lot since my last post, and managing clarity for certain parts has also grown more difficult.
explaining the graph
There are a few bits and pieces I will have to explain before I can continue to show the problems I encountered when working with bigger graphs. You will have noticed a few more colors a lack of labeling on the nodes compared to my last post. The latter is because the graph has gotten too big to show labels! The extra colors has been a substitute for that in a sense, since it represents different tags and attributes to the problem. Here is some rough sketching to describe the "domains" of the graph:
Often, things that I like to avoid doing is having large groups of nodes all attached to the same thing, such as what you see in the greedy domain. Managing an obsidian graph, funnily enough, is like trimming hedges! Sometimes quality is better than quantity, and writing good nodes with plenty of relevant backlinks can really make your graphs shine.
Red colored nodes are unfinished, meaning they either don't have a good enough amount of content written about them to be considered useful. A good example of this is the singular node connecting the range query domains to the graph domain, a note on segment trees, which is something I looked up on out of interest but found a bit too complicated at the time.
Problems encountered with bigger graphs
Here are the main problems you'll find as your "notespace" increases.
- You'll end up having to look through and manage a lot more notes to keep your backlinks working.
- You'll, at some point, have to add more plugins to keep the app flexible, which can (over time) slow down the program, at least for my 5 year old laptop lol.
- Writing backlinks and extra notes can sometimes be a chore, especially when you're having to do it for many problems a day.
Benefits of using obsidian
One amazing benefit I've found with Obsidian, and notetaking in general, is how well it helps to consolidate information. Usually writing things down means you spend more time on the problem, which definitely can help you remember the problem in the long term. Also, I've found reading explanations of Algorithms done by myself is a good exercise! Not only does it help you improve your ability to explain and write, but it also drastically improves understanding and retention!
Throughout the last 3 months I have been able to find relationships between problems that I would not have been able to find had it not been for Obsidian's remarkable tools. As an example, I had just finished working on a tricky implementation problem the other day, and after finishing the problem I noticed (using Obsidian's local graph view), that there was actually a very similar problem like the one I had just done, from over 2 months earlier. It was phrased completely differently than the current problem, but had the same underlying technique.
And it was not just one problem, but several! All the green nodes below are problems related to the one I had just done.
Plugins, tools and techniques to manage problems
tips:
Here are some tips when making notes that I've found useful when learning from others:
- Try to make a note for every problem you find difficult. If ever you spend a long time on a problem, have to read its editorial or even just find it insightful, always try to write about it! It's will be very useful down the road!
- Read through your notes every once in a while. Perhaps every fortnight, try and zip through all the notes you've made and see if you've forgotten about any of them. This is something I did after my half-year break from CP, and it helped get back to speed with the knowledge-side of algorithms (not necessarily speed though!)
- The graph is your home! After all, it's Obsidian's no. 1 feature! Use it when you want to find hidden links between sets of knowledge, or to better group together different aspects of your notes.
- The graph is not an art piece! Please don't start sacrificing the flexibility of the graph for the sake of it looking nice.
- Try customizing some shortcuts! A good one to start with is a shortcut for the command palette and another one for Obsidian's quick switcher.
Techniques:
Here are some neat techniques
Dough stretching:
I've seen this one somewhere on reddit before, but I cannot find the link unfortunately. If someone knows about it, please let me know!. Anyways, this is a fun way to see close links between a certain node without having to make tags for anything. All you have to do is take the node you want to compare and stretch it as far as you can. As the graph relaxes itself, you should find that certain groups of nodes will have clustered together, indicating patterns! Here's a result of dough-stretching on my note on graphs
Graph parameters:
Here are a good set of graph parameters for seeing relationships. I always like to bring up the "link force" as high as possible and adjust all the other forces as necessary. This is because the link force, as far as I am aware, operates based on the number and "closeness" of nodes linking to any other node, meaning that closely related nodes will group together far more.
To show what I mean, here is a graph without any link force
It's just a circle! Now here's the same graph with link force dialed all the way up
Here are the settings I used
Plugins:
Here are my main plugins (in no particular order)
- Advanced tables: helps a lot when representing hash maps.
- Better footnote: super useful for making more elusive notes that don't need to take up space.
- Custom Attachment location: extremely useful for making my folders less untidy
- Checklist: good for checking which problems I still need to do
- Templater: VERY useful when making notes, especially for every new problem I do.
Conclusion
Have I enjoyed Obsidian so far? Definitely! Should you use Obsidian? At the end of the day, that decision is up to you, but I can say confidently that it is an overall better method of going about CP practice than without. I hope you enjoyed this, admittedly rambly, journey of Obsidian with me and I will make sure to give one more update in the future! Thank you!