The Existential Pleasures of Software Engineering
Readers of this blog may have noticed an occasional, pithy post tagged "Lambdakure," where I delve into philosophical or allegorical musings. Slowly but steadily, I've been crafting a book inspired by Hagakure, aimed at the journeying programming Samurai. My hope is to capture the transformation from a "factory worker" of enterprise OOP to a craftsman who appreciates the depths of functional programming. Despite the floatiness of the concept, I strive to balance sincerity with a touch of lightheartedness. As those who know me might attest, my passion for these topics is matched by a desire to remain humble and inclusive. Yet a project like this requires a matter-of-fact nature, as no work inspired by Hagakure could do otherwise, so posts labeled "Lambdakure" will be terse and pointed. This is a stylistic choice, rather than a pompous opinion.
That said, here's a snippet of the beginning of the journey...
Like all skilled trades, software engineering offers opportunities for deep growth and appreciation of one’s work. There are opportunities to enrich the lives of others, strive for mastery, and see the art and beauty in the languages, styles, and dialects of available approaches.
In "The Existential Pleasures of Engineering" by Samuel C. Florman, which I read during my freshman year of engineering school, he explores the deeper satisfactions and joys found in the practice of engineering. Florman argues that engineering is not just a technical field but a profoundly human endeavor that offers a unique blend of creativity, problem-solving, and tangible impact on the world. He delves into the philosophical and emotional aspects of engineering, celebrating the sense of accomplishment and fulfillment that comes from designing and building structures, systems, and technologies that improve human life. The book challenges the notion that engineering is a dry or purely mechanical profession, highlighting its potential for personal and societal enrichment.
The same is true for software engineering. The software engineer's journey can break free from the corporate, factory-like production of commodities built with code and venture into a world of discovery. This journey encompasses the visual and tactile appreciation of stylistic code, a desire to hone one’s mastery and craft elegant masterpieces, a deeper understanding of mathematical abstractions that can be applied to both philosophy and code, and an awareness of the social aspects of technology and its potential to improve or harm lives. There is potential for growth in logos, pathos, and ethos.
In my earlier years as a software developer, like many others, I embarked on a journey to master the art of object-oriented programming, presuming it to be the pinnacle of the craft. Over time, my dedication bore fruit, and I became intimately familiar with its patterns and the revered SOLID principles. Writing code with disciplined adherence to these standards brought a great deal of satisfaction.
However, as the winds of change whispered through the leaves, I found myself drawn to a new path, one that beckoned with mathematical purity and poetic elegance. I heeded the call of functional programming, embracing its principles with the curiosity of a wanderer and the resolve of a warrior.
As I traversed this new path, I discovered a world of pure functions, immutable data, and the graceful art of function composition. The simplicity and elegance of this approach to programming filled me with a sense of existential pleasure, akin to the calmness one feels while relaxing by a placid lake or gazing at the delicate beauty of a rhododendron in full bloom on a mountainside.
In embracing functional programming, I have found a new discipline that has sharpened my mind and brought harmony to my code. Like the Samurai reflecting on his life of rigorous training, I now stand at the precipice of a new era, poised to share the wisdom and insights gleaned from my journey.
What follows are reflections, stories, and aphorisms that examine this journey from the perspective of functional programming. Taking inspiration from the Hagakure, it views the journey as one that can be mastered in body, mind, and spirit. Although the journey has many paths, the path of functional programming - The Way of the Functional Programmer - is the one I have chosen to follow and illustrate. It is surely a way to experience, to borrow from Samuel C. Florman, the existential pleasures of software engineering.
As you delve into these pages, may you find inspiration to reflect on your own journey and be encouraged to dive deeper into an aspect of the craft that speaks to you.