in reply to RFC: "Today I Learned" page

I tried something like this a while back. I amassed weeks of so-called 'learnings' only to discover after performing an investigation on said entries that my content lacked 'depth' as well as organization. This was unnecessary since much of the material involved highly organized sources like books and/or comprehensive whitepapers chock full of examples.

What I developed in response is a different way of going about surmounting the so-called technical learning curve using purely free tools and best practices. Deficiencies in the haphazard method were identified as follows:

So it makes sense to look a learning as an opportunity to enhance existing knowledge, improve something by some quantifiable measure (time, space, effort), identify my own knowledge level, take complex things apart.

The Work Breakdown Structure

The most useful tool I came up with to combat the above problems is what I call the Work Breakdown Structure (WBS). I like to try and quantify what I don't know and look to repeatedly deconstruct that while scheduling tasks to become more familiar with components. Essentially the WBS is nothing more than a sideways graph (using Graphviz). Here is one I cobbled together rewriting an online example I found:

digraph G { orientation=L; node [shape = diamond]; {rank = same; 3 4} {rank = same; 5 6} {rank = same; 7 8} 1 -> 2 [label = postgres]; 1 -> 3 [label = redis]; 2 -> 4 [label = HA]; 3 -> 5 [label = "key-value store"]; 5 -> 6 [label = "Performance comparison"]; 6 -> 7 [label = "Live data check"]; 7 -> 8 [label = "Support provider avail."]; }

Created by running:

dot -Tpng learnX.dot -o learnX.png

Admittedly I use object or (preferably) package/component names instead of numbers for the nodes. The goal is to take a chunk of something and break it down into parts. In the case above I am comparing two competing alternatives for data storage given a particular problem I am trying to solve. I have general constraints to work with like data volume, minimum/maximum latency, how long I want to maintain live data before archiving it, etc. to consider. I branch off between two competing alternatives. I know I will have to scan books, articles, websites, and whitepapers/scholarly articles on the two different subjects. Hence two separate branches. When I come across unsubstantiated claims I look for evidence or create tests myself.

Rank is not arbitrary but is in fact significant. In my above graph HA (high availability) is an aspect of Postgres, one which involves different toolsets and configurations. I want to align those with what Redis does, so these are aligned by ranking nodes. The orientation of the graph is meaningful as well (as well as the node shape -- see Schedules section below for that). Although not present, this graph should be visualized as having a timeline at the bottom. This keeps me from spending too much time on any one thing. Work is breaking down into smaller and smaller parts but I know why I should spend time on it as well as what I am comparing it against.

In science branch A would have a variable modified in some way while branch B would be the 'control.' In my case I will often make branch A how I normally do things while branch B is what the 'cool kids' are doing. I am sure you can come up with many other uses.

Schedules

There is one last tool I want to mention as well. Nodes on my graph are diamond shaped for a reason -- they should match milestones on a PlantUML Gantt chart:

@startgantt Project starts 2022-09-13 [Chapter 1] lasts 2 days [Install ang] happens at [Chapter 1]'s end [Chapter 2] lasts 4 days [Chapter 2] starts at [Chapter 1]'s end [Chap 2 milestone] happens at [Chapter 2]'s end [Chapter 3] lasts 4 days [Chapter 3] starts at [Chapter 2]'s end [Chap 3 milestone] happens at [Chapter 3]'s end [Chapter 4] lasts 4 days [Chapter 4] starts at [Chapter 3]'s end [Chap 4 milestone] happens at [Chapter 4]'s end [Chapter 5] lasts 4 days [Chapter 5] starts at [Chapter 4]'s end [Chap 5 milestone] happens at [Chapter 5]'s end [Chapter 6] lasts 4 days [Chapter 6] starts at [Chapter 5]'s end [Chap 6 milestone] happens at [Chapter 6]'s end [Chapter 7] lasts 4 days [Chapter 7] starts at [Chapter 6]'s end [Chap 7 milestone] happens at [Chapter 7]'s end [Chapter 8] lasts 4 days [Chapter 8] starts at [Chapter 7]'s end [Chap 8 milestone] happens at [Chapter 8]'s end [Chapter 9] lasts 4 days [Chapter 9] starts at [Chapter 8]'s end [Chap 9 milestone] happens at [Chapter 9]'s end [Chapter 10] lasts 4 days [Chapter 10] starts at [Chapter 9]'s end [Chap 10 milestone] happens at [Chapter 10]'s end [Chapter 11] lasts 4 days [Chapter 11] starts at [Chapter 10]'s end [Chap 11 milestone] happens at [Chapter 11]'s end [Chapter 12] lasts 4 days [Chapter 12] starts at [Chapter 11]'s end [Chap 12 milestone] happens at [Chapter 12]'s end [Chapter 13] lasts 4 days [Chapter 13] starts at [Chapter 12]'s end [Chap 13 milestone] happens at [Chapter 13]'s end @endgantt

Produced using

java -jar ~/whereIkeepit/lib/plantuml.jar learnX.puml

So when confronted with a subject completely foreign to me the Gantt chart will cover every chapter of some good book on the subject. WBS will be reserved for places where I get 'stuck.' Of course you can find Graphviz, Java, and the PlantUML jar online by searching.

Celebrate Intellectual Diversity