[Journal] Knowledge Work - Mauro
2025-10-25 Learning C++
Following Sascha’s example I decided to start journaling my Zettelkasten practice.
I’m a computer engineering student, and in the meantime, I do some freelance projects for some local enterprises. My areas of interest at the moment are mainly math and programming.
Today I’ve started brushing up my C++ skills by going through the learncpp.com lessons. These past years, I've worked on lots of web-related stuff, and I want to start doing more low-level programming.
I’m becoming more selective about what I put in my Zettelkasten. Before I would write about anything, but now only about things that I think are useful to my areas of interest.
Howdy, Stranger!
Comments
Do you schedule specific coding training sessions?
My bias (as a trainer) is obvious and intrusive. But I am wondering how to incorporate deliberate practice into a coder's schedule.
The one paper that haunts me is this: Argenta M. Price, Candice J. Kim, Eric W. Burkholder, Amy V. Fritz, and Carl E. Wieman (2021): A Detailed Characterization of the Expert Problem-Solving Process in Science and Engineering: Guidance for Teaching and Assessment, CBE---Life Sciences Education 3, 2021, Vol. 20, S. ar43. full text
In boxing, there is a hierarchy of exercises:
My own strength was my willingness to drill isolated techniques right from the beginning. My trainer said to me (perhaps, just randomly as he sometimes went to impulsive extremes) that I should throw 1000 jabs and 1000 crosses per day. This is what I did for weeks or months (felt like an eternity). The result was that my technique got better much more quickly.
So, I am wondering: What can you drill, isolate and repeat, in software engineering?
I am a Zettler
On a syntax level, you could use Anki or read other people’s code. I suspect drilling on syntax meets diminishing returns early on. To make an analogy with natural languages, I know of the existence of the word “Puissant”, but it’s more likely that I will say “A person with great power” instead. Between a word that fits better and one that is more understandable, I think I will choose the latter.
I currently work alone, or at most with people at my same level, so I’m not exposed to the best programming practices. I plan on starting to read good open source projects on GitHub to be exposed to better code.
On a program architecture level, there are tons of websites that allow you to practice individual skills. For example, Codeforces has a huge selection of algorithms and data structures problems. My doubt with this approach stems from the fact that competitive programmers have their code become more intelligible the better they become. I don’t doubt that good competitive programmers are also great programmers in general, but I wonder if spending time building projects would be more efficient.
At what point does doing a thousand jabs and a thousand crosses per day become less important than spending that time sparring and getting a real sense of how a fight is?
Said so, I thank you for your comment. I’ve never thought of structuring my programming practice as if I were going to the gym, and I think it would be useful to do that.
2025-10-26 Investing time in what matters
As mentioned in my previous entry, I am dedicating time to brush up on my C++ skills. Given that I’m not unfamiliar with the main concepts, I am trying to be efficient and process only what will help my skill improve.
Said so… I enjoy writing zettels, and sometimes I make notes about ideas that are maybe not top tier, but still somewhat useful.
An example of a note:
# How to use comments
Comments should be used for three things:
Using Sascha’s items of knowledge, I would consider this note a concept, but it could be an argument if you want to be pedantic. It is in a state of superposition
This other note was formalised into an argument. I think it is overkill, given that the concept is quite trivial, but I am practicing writing arguments.
# If a comment needs to explain how the code works, the code should be rewritten
I am still getting the hang of using the items of knowledge, but I believe it is a great addition to the Zettelkasten method.
P.S. I think the levels in the guide to atomic notes are useful, but they should have descriptive names rather than 1,2,3,4.
To the orbit of 'comments in code', you can add assertions to codify expectations, which get rid of some needs to explain what's supposed to be done, and why (invariants upheld, rules protected, OS tweaks worked around); the how should be the code itself, arguably.
Assertions and static analyzers are useful tools to have executable or "active comments"(1:06:25h, 20220922carmack)
The name is telling the whole story: assertions codify assumptions, world-views, expectations about data.
They are a tool to document invariants.(32:40min, 20230419theobugs)
20220922carmack: "John Carmack: Doom, Quake, VR, AGI, Programming, Video Games, and Rockets | Lex Fridman Podcast #309", 2022-08-04, https://www.youtube.com/watch?v=I845O57ZSy420230419theobugs: Sebastian Theophil: Nobody Can Program Correctly - Lessons From 20 Years of Debugging C++ Code, CppCon (2023-02-16) https://www.youtube.com/watch?v=2uk2Z6lSamsFor comments in particular, I like to point out how writing them helps think about the accuracy of what the code expresses. I've found myself in the need to explain crappy implementations because I could tell that I wouldn't be able to grok the code in a year's time, and then found a better factoring:
https://christiantietze.de/posts/2024/03/you-absolutely-do-not-need-comments/
For C++, watch Jason Turner (makes the language accessible -- and has interesting demos; the link will make you see zero overhead abstractions), Herb Sutter, and Sean Parent, esp. the "Better Code" series that's still unfolding. Many CppCon videos from all of these on YouTube
And Alex Stepanov. See https://elementsofprogramming.com/ -- which will offer a unique, superficially maths-like introduction into algorithmic thinking. With very short definitions of things that can go into a Zettelkasten.
Author at Zettelkasten.de • https://christiantietze.de/
Thank you! Assertions are something I've never written about.
All the links you've sent me seem very promising, the elementsofprogramming is probably going to be the next thing I'll process in my Zettelkasten.
2025-10-25 Formal logic and Japan
This morning at the gym, I saw a link in Hacker News to a formal reasoning introduction guide, so, like a dog seeing a squirrel, I got sidetracked and started processing it.
I know most of the basic concepts in propositional and predicate logic, but I took advantage to formalise pre-existing definitions in my Zettelkasten, for example:
This note is diatomic, but the second concept did not seem worthy enough to deserve its own note.
On a side note, at the end of November, I will be leaving for a month and a half for a solo trip to Japan. I know basically nothing about Japanese culture, so I am reflecting if the Zettelkasten can help me, both before leaving and when I stay there.
This was one of the most important and useful changes I made to my own Zettelkasten. Congratulations on taking this step. It saves so much time and effort.
I agree. When you start focussing on "feeding" the Zettelkasten only with what is truly important you gain so much more from it.
This is the linchpin question.
It is quite late. Much later than many people think. I think you'll benefit of truly honing (mindlessly drilling mindfully) years into any mastery journey.
I have a friend who plays in an orchestra (he is one of the best clarinet players in Germany). He said to me, that he never abandoned a set of very basic exercises which he considers a key to his general performance.
I think that a basic set of drills should never be removed of someone's overall practice.
I wrote an article in this sentiment: https://zettelkasten.de/posts/athletic-training-zettelkasten-value/
The first step in coding should be separating actual coding and coding specific exercises. Problems that are specifically designed to induce aha-effects. Deepening theoretical knowledge. Critical thinking skills. System thinking skills. Creative thinking. Design thinking.
I can tell you from first-hand experience that just the practice of regularly deep-processing sources, especially books, already has a profound effect on the mind.
I am a Zettler
This is interesting. What do you mean by “It is quite late”?
Ah, my English. I mean that in boxing and anecdotally in music you'll benefit from simple drills for a very long time. Well, into the intermediate and advanced stages.
I am a Zettler
Do you have any suggestions about books or papers about this?
Do you mean about how to develop a practice in general or what do you mean specifically?
I am a Zettler
Both about how to develop a practice and about the efficacy of drilling basic exercises.
The best general book on developing a practice I know is "Peak" by Anders Ericson.
I can't give you a general justification of basic drilling. But in Peak and the references you'll find the rational of finding current bottle necks in your ability, developing drills that fulfil the criteria for deliberate practice and then attack your weaknesses with full force.
I am a Zettler
2025-11-01 Back on track
These past few days, I have been busy, but yesterday and today I got back on track processing C++ resources.
Every day I become more selective. Before, I feared missing out on knowledge; now I am processing only what is applicable. Maybe one day I will want to get hyper-theoretical, but it’s a problem for future me.
In the meantime, I am still thinking about how to use my Zettelkasten for my Japan trip. I do not know if it will be useful, but I am ready to be surprised. Since interacting with the Zettelkasten should have a purpose, mine will be discovering more of the Japanese culture. Quite abstract as a goal, but for now is the best I could come up with.
I plan on having an empirical (and probably quite biased) approach. Where I live, people often idealise Japan as an incredibly civilised country. I think some people exaggerate, but I will stay there a month and a half, so I will see.
Given your background as a coach, have you ever come across the ideas presented in this article? What do you think about them?
One criticism about deliberate practice I have heard is that it depends on mature pedagogical development.
The same website has also a series on tacit knowledge that looks promising.
I will take a look into it. Thanks for the tip!
I am a Zettler
A very nice thing about the Zettelkasten is that, with practice, it becomes natural to use it for activities one wouldn’t normally consider.
Learning about a place you plan to visit is one of them.
I now use it for all sorts of things, and it especially helps me approach seemingly large cognitive tasks with calm — breaking them down one thought at a time, without anxiety, without having to do any particularly demanding upfront planning of the activity.
Yes; I agree. About 6 months ago, my wife and I were contemplating another move (we've moved 31 times since we were married 50 years ago; you'd think we'd have it in hand by now). As you know, there are many, many moving parts in a move. I used my Zettelkasten to organize and make sure I stayed on top of all aspects of the move.