I want to learn how to program. Where do I start?
An early-stage fintech CEO asked me whether or not he should learn to code.
I said if he’s running his own P&L with formulas in a spreadsheet, congrats! Both =SUM()
and =VLOOKUP()
are built-in spreadsheet functions that operate programmatically. That is to say, they’re a form of “code”.
Box: checked.
I encouraged him to go further.
First, why bother?
As the business straddles technology and finance equally, improving his technical mojo provides greater functional literacy in one of the company’s core pillars. (This CEO was CFO in his previous two roles, so he’s good on finance.)
Having basic understanding of hands-on execution also buys a lot of street cred with the R&D team—he’ll get far better information if technical resources feel like he knows enough that they will be understood. His CTO will also likely appreciate the effort and be happy to help in his learnings through its inevitable fits and starts.
Another question quietly arises: what should one code on and which skills are going to be the most useful to learn?
(My reflection on this conversation prompted this post as well as some guidance for a starter project. I was unhappy with my actual answer in-situ—more on that within.)
Coding with purpose
Throughout my career, my “day job” required between 0% and 100% coding, ebbing and flowing as roles and requirements changed.
Sometimes I was in the critical path: if my software failed, so did business continuity. Sometimes my code was non-critical: if something suddenly didn’t work, it didn’t much matter. (Toy applications, Monte Carlo simulations, proof-of-concepts, and so on.)
I’ve ebbed and flowed to have great confidence in declaring:
Coding is less riding a bike and more playing a musical instrument—some muscle memory might be there, but if you want your instrument to really sing, you need continual, active practice.
To keep my chops current throughout life’s tidal flows—how’s that for an infinitive?—I needed a project that was:
- simple enough to ramp up quickly after long idle periods;
- complicated enough to keep things interesting;
- used enough that others could benefit from it, but not need it;
- stable enough that it wouldn’t break often; and
- meaningful enough that I would still care to do a good job with it over the long haul.
I realized I had all of this right here. The website you’re reading right now.
My Zen Garden
My eponymous website, michaelgruen.com, has evolved over the years representing the average technology of its time.
It started out in 2003 as a collection of hand-written static HTML files uploaded via FTP, converted from an earlier GeoCities site I had built in high-school. It was later ported into a WordPress install that lived on three different hosting services (compromised by script kiddies at least twice—only once my fault), and in its current incarnation runs as on a gitops CI/CD pipeline to statically generate flat-files, hosted on AWS’s global CDN via infrastructure-as-code.
There is also a search function, if you can find it.
As personal websites go, it is stupidly over-engineered; but, it is what sustains my coding and writing skills when my “day job” requires less of that.
I think it an ideal starter- (and forever-) project for anyone who wants to learn to code.
In my Zen Garden, I put together code and words, and take them apart with arbitrary complexity as it suits. Maybe the output is pleasing to others—truthfully, I do not care. It is as much a hobby as it is good practice, a repository of thoughts and resources of mixed usefulness. It also serves ego and an extension of self. Code is both poetry and prose. More than half of my efforts live in branches that I will never publish and never prune. I put far too much sweat into this proportional to its current import. I want it to be good, but that is not a hard requirement. I sometimes convince myself that it will one day be home to my eidolon—my ghost in the shell—should my corporeal form betray me. This is meant to be relaxing and rewarding, even if it proves difficult at times. Like raking sand in the rain.
I have been working on it for over 21 years.
It is old enough to be served.
Working with code
Back to our CEO protagonist.
In addition to learning to code, it’s equally important to know how to work with code. Both are foundational.
To do anything useful depends on the latter.
And, as you might expect, working with code also involves coding and proto-coding, and there’s much to pick up along the way.
(On that, plenty of “working” code is unsuitable for production—it’s important to know why considering LLMs and GenAI produce convincing facsimiles. Knowing the difference will take a bit of time to learn.)
Ok, so now what?
If you already know what you’re looking to accomplish with code, you’ll find it easily: there is an endless supply of tutorials and walkthroughs online.
If you don’t know what you’re looking for other than an abstract notion of wanting to code, most sites (at least the ones that show up on the top of search results) will throw you into the deep end of control structures, variables, computer architecture, data structures, databases, and other core coding skills.
This is all good stuff, but it doesn’t get a learner to something meaningful quickly.
Therefore, I wrote out my approach: Learn To Code: Build your Digital Zen Garden, a forever-project that can have arbitrary complexity with an infinite skill ceiling.
Why not give it a go?
Glossary
term | definition |
---|---|
AWS | Amazon Web Services, one of the 800-pound gorillas where you can rent a company’s computers to serve your website for you |
CDN | Content Delivery Network, a way to utilize some else’s network of computers around the world so people can get your content faster. (e.g., if you’re looking at a website while you’re in Tokyo, a computer in Japan will help you first rather than one, say, in Germany.) |
CI/CD | continuous integration, continuous delivery: the ability for software to get better continuously without too much regard for big version declaration (e.g., Windows 10 vs Windows 11) |
fintech | a portmanteau of “financial” and “technology”, a financial technology company |
flat-files | a file on a system that gets served-up as-is; most websites these days are dynamically-generated in which a server puts together a webpage on the fly for you, like your friend feed on facebook.com. |
git | the most popular source control system |
gitops | instructions in application source code that instruct other computers how to build and launch that software (as opposed to having people to it by hand) |
infrastructure-as-code | a.k.a. IaC , a way to declare, in code, what kind of computers and networks need to be created in order for an application to work. (e.g., if I want you to see my website, I have to put it on a computer that’s connected to the internet that you can find by a URL, which used to require a lot of manual work and plugging things into each other! Now, we can describe what we want in code via IaC and an computing infrastructure company, like AWS, will do it all for you automatically.) |
pipeline | a defined process that does something consistently from a set of inputs to produce an output |
Proto-coding | composable bits of formal logic that aren’t quite what the zeitgeist would consider coding. Examples include writing an Excel formula, creating a “zap” from Zapier, or creating a macro by recording your mouse movements on a screen. |
Current Site Architecture
Maintained here.