PurelyFunctional.tv Newsletter 436: Software as Soulcraft
From OO to Clojure Workshop!
Watch my free workshop to help you learn Clojure faster and shift your paradigm to functional.
Design idea 💡
Software as Soulcraft
"What is the purpose of life? It is to build a soul." --- Alejandro Jodorowsky
My fascination with programming started early in my life. There was something about the ability to explore representations of ideas outside of myself that drew me in. Expressing a process in a precise and repeatable way holds an intrinsic value for me. The exploration of representation also fuels my interest in linguistics, philosophy, teaching, and writing.
Self-determination Theory studies personal wellbeing and fulfillment. It identifies three innate needs that lead to growth:
- Autonomy - control of one's time and actions
- Mastery - tangible progress
- Relatedness - a sense of connection to other people
Work that meets these three criteria is humane and fulfilling. Work that doesn't is a Dilbert cartoon. I've certainly worked at Dilbertesque jobs. But I also believe that software can be a vehicle for personal growth.
How do we relate to others and the rest of the universe? Well, software gives us a tool for understanding process. It helps explain mundane things, like why smaller batches of laundry are more efficient (hint: sorting is superlinear). It also helps us understand our intelligence. Further, we can feel that we are part of a community of practice, as I always do when I attend a programming conference. And, if we're lucky, we can feel that our work has a positive impact on society.
Programming is something we can get better at the more we do it. There's an industry of training and books and videos intended to help us improve.
However, there is a lot to be desired in this department. We don't have a good sense of what better means as an industry. We take to tribalism around different styles and technology choices. Further, I often feel that we build hubristic towers until they don't scale, at which point our job is to keep the bricks from falling over. A mastery approach would have us incorporate the lessons we learned in a new attempt.
I love the autonomy of programming on my own projects on my own time. It feels great to be solely responsible for how I choose to work, taking into account the complexities of my life.
In my experience, my previous jobs have fulfilled this need the least of the three. Deadlines, micromanagement, and Agile theater deprive me of liberty. To improve efficiency, product managers tell me less of what I need to know so that I'm not bothered by it. "We'll do the thinking so you can focus on coding." No thanks! I always felt I would be more effective with more autonomy.
Programming helps us build a soul. I have no doubt. But I think as an industry, we have much work to do to make software engineering more humane and fulfilling.
Awesome book 📖
Beowulf: A new translation by Maria Dahvana Headley.
I had attempted Beowulf when I was in high school. It seemed like it would be interesting. It's a 1,000 year-old Old English poem, written in a fantasy mode. But I had trouble with it. I wasn't a strong reader. And the translation was inscrutably boring.
This recent translation by Headley was fun and exciting. It probably helps that she is a good writer in her own right. But she also chose a contemporary mode that gave new life to the tone of the poem. She wrote it as a "bro story," meaning a story told over beers from one macho guy to another. It sounds terrible, but it works! The braggadocio pairs perfectly with the over-the-top feats of the protagonist.
The hyper-masculine reinterpretation of the tone also contrasts with her richer and more fair treatment of the female characters. Grendel's mother is not viewed as a vile monster, but as a warrior bent on revenge, fully a match for Beowulf. I found the whole text refreshing and energetic, and fully imaginable. I couldn't put it down. I only wish I had taken better notes on the characters since their Norse names did not stick well in my memory and they made the inter-kingdom rivalries hard to parse.
Book update 📘
There has been progress on the Kindle and ePub versions of the book. They are not done, but I have seen a draft. I am optimistic that they will be readable, if ugly.
It simply isn't possible to capture the custom, per-page layout on a small screen with a re-flow engine. But we can aim for putting stuff in a linear order that doesn't break anything and is at least legible.
I still can't recommend the Kindle version. It is inferior to the PDF and print versions. But if you must have it, the eBook will exist. I don't know when it is coming out. It is out of my hands.
Pandemic update 😷
I know a lot of people are going through tougher times than I am. If you, for any reason, can't afford my courses, and you think the courses will help you, please hit reply and I will set you up. It's a small gesture I can make, but it might help.
I don't want to shame you or anybody that we should be using this time to work on our skills. The number one priority is your health and safety. I know I haven't been able to work very much, let alone learn some new skill. But if learning Clojure is important to you, and you can't afford it, just hit reply and I'll set you up. Keeping busy can keep us sane.
Stay healthy. Wash your hands. Wear a mask. Get vaccinated if you can. Take care of loved ones.
Clojure Challenge 🤔
Last issue's challenge
- Longest Delimited Substring - Submissions
This week's challenge
The XOR Cypher is simple: To encrypt, you do a bitwise XOR of the message with a key. To decrypt it, you XOR it again with the same key.
Write a function
encrypt that does an XOR encryption of a message
string given a key string. If the message is longer than the key, repeat
Note: This is an exercise in JVM byte manipulation.
Please submit your solutions as comments on this gist.