Programming with a Beginner's Mind (written by a real beginner)
I'm a beginner at programming.
In college, I studied history. I still consider myself a student of history, but in college, I had to make it official. As a second-year, I chose history as my "major" (aka concentration / course / field of study). When I graduated, they wrote it on my degree.
From my classmates, the ones studying finance or computer science (or both!), I'd sometimes hear "Wow, I wish my parents had let me study history!" or "Wow, history, that's really great that you get to study something you're actually interested in!" With the implication being: "You absolute dolt, you're here amidst the marble columns of higher education, when you could be punching your ticket to a life of prosperity, and you're studying history? "
Collegiate cajoling aside, I had ample opportunity to start my programming learning journey at any one of several life inflection points.
I was lucky enough to grow up in Silicon Valley, have a computer in the house from a young age, work for 5 years (post-college) at a technology company. Yet none of these bits of fortune nudged me sufficiently to begin to learn programming.
Coding seemed to me a mystical and arcane magic, accessible only to those with mental firepower that far outstripped my own (part of me still believes this 😅).
It took the strange combination of business school (🤔) and a global pandemic for me to get over the hump in my mind to start to learn to code.
All this to say, I'm a beginner. I've read probably 12 different articles on Big O notation (some here on Hashnode), and I'm starting to get why n(log(n)) time complexity is the best we can do for sorting. A couple months ago, when I wrote my first dictionary comprehension, I felt a joy that buoyed my spirits for the rest of the day.
The Beginner's Mind
The beginner's mind, a concept originally developed by Zen Buddhism and now littered through management and self-improvement literature, is characterized by:
- Openness to experience
- Freedom from preconceptions
Beginning anew is costly - opportunity cost and emotional costs are two sorts that predominate. There is a school of thought which holds, not without merit, that working on one's strengths is far more prudent than attempting to shore up one's weaknesses. Especially if evaluated over a short time horizon, working in an area of strength will generally have a higher ROI (return on investment) than starting at the beginning.
It is particularly this difficulty and costliness that makes the cultivation of a beginner's mindset so important; it does not come naturally. Ineptitude (relative to others or to other activities we're better at) is unpleasant. Our brains rightfully avoid what's painful, and being bad at something is pretty painful.
Programming makes the rewards of cultivating the beginner's mindset abundantly clear. In a relatively short span of time, I've learned to use new tools and extended my capabilities to shape and interact with my technological environment. The wealth of free online open-source resources made getting a foothold and gaining confidence much easier than I thought it would be.
The real treasure, though, comes not from scripts I've written nor my expanded technical vocabulary, great as those aspects are. The real treasure comes from the way the practice of learning to program has programmed me.
Programming is Programming Me
Our tools shape us, so it behooves us to take care that we are being shaped in a way that we choose.
The first steps on my programming learning journey have shaped me into a more eager beginner, and that alone has been worth the price of admission (the price of admission in this case being taking hours to find a bug that a more experienced developer would have spotted in seconds).
In your next novel endeavor, programming-related or otherwise, I wish you more delight than despair, less trepidation, more high-quality attention and more care.