Written on 2021-07-17
I've reached a point in my life where I want to have ongoing software projects again.
I used to have a large number of little, floundering projects going on in the background. But, after I started working at a certain company, many parts of my life kind of went to the back burner as I focused on establishing myself professionally. (Kind of by necessity; Operations is not an easy field to work in.)
I was also struggling with my mental health during this period, and in general going through a lot. Long story short, I haven't really had an active software project in a couple years.
And now, I have a deep want to reignite that section of my life.
Of course, things have changed since back then, too.
I've learned to love s-expressions, I've moved away from OOPs, and I've entered the "So are Careers!" phase of my life. I'm now working in IT, I'm no longer self employed, and I've gotten budgeting fully under control. I finally grok the masterpiece of software that is org mode, I stopped trying to force myself to journal on bullets, and I've moved back towards a plant based diet.
As we all constantly gradually do, I have become a different person than I used to be.
Before, I largely worked in C and its derivatives (especially C++, which was my first language). As a member of that illustrious group that taught themselves instead of taking lessons, I would usually learn some kind of new concept and try to use it in a project that was more of an excuse to use the new cool thing instead of a project meant to be anything important. I'd eventually hit a road block of some kind, usually due to my lack of underlying theory, and would get frustrated, leaving the project floudering in one of my now-dormant git repos.
When it worked, it worked. When it didn't, I would burn myself out trying to force it to work.
"Programming is not about typing, it's about thinking." - Rich Hickey
Literate Programming is a discipline where You describe how a piece of software works in prose, with code interspersed throughout. Using LP, I am able to describe the way the system I am trying to implement should work, and then (below that) actually implement it. It allows for a clarity of thought I've long yearned for, but never was able to achieve with solely comment blocks or design documents.
Beyond that, it is a way to encourage extensive documentation. When You tangle the code from a literate programming document, the preceding text can be easily turned into a comment. And even more than that, the above-mentioned clarity of understanding it lets me achieve gives me the ability to easily create more documentation, when it is required (most of the time).