In my engineering curriculum, I took classes in two programming languages. In my freshman year of undergraduate work, I took a class in BASIC and then I took Fortran IV with WAT5 in grad school. I got my Masters in Mechanical Engineering in 1982 and that’s the last time I programmed.
Right before I retired in 2013, I talked to my friend Kieran at work about how one of my goals in retirement was to learn to program for real. I asked him if he’d teach me and he said no, but he could recommend a book. That wasn’t exactly what I was looking for.
I mentioned my dream of learning to program to Bart Busschots and on October 23, 2015, Bart Busschots started a podcast series with me called Programming By Stealth.
As Bart explained in his introductory episode, he wasn’t going to teach us a language, he was going to teach us to program. He said that to be a programmer, it’s important to understand the fundamentals so you can learn to apply them to all different languages.
He took the approach of sneaking up on us with the tools, hence “by stealth” in the title of the podcast. He decided not to teach us anything that wasn’t transportable across platforms so everything he’s teaching us is for Mac, Windows, and Linux users. The most universal place in the world is the web, so we’re learning to write programs for the web.
As we’ve gone through the lessons, there have been some really easy parts for me and some terrifically difficult sections. I’ve discovered that when the results are visual, I enjoy the assignments immensely. When the results are abstract, not so much.
When we’ve been deep in the hard parts, I remember what Dr. Maryanne Garry, the psychology professor out of the University of Waikato in New Zealand told us in Chit Chat Across the Pond. She said that research suggests that learning to do something that’s very difficult for you, and mastering it, is correlated with a reduction in the chance of dementia. My family is riddled with Alzheimer’s, so I need just about every advantage I can get. Whenever it’s been really difficult to grasp a programming concept, and I want to lay my head on the desk in frustration, I remember what Maryanne said. She said it’s supposed to be hard, or it won’t be effective.
Partway through the series, I asked Bart how I could possibly hope to remember what he was teaching us. His answer was, “practice!” I asked him when I was supposed to get that practice. There was this stunned realization (on both of our parts) that we were missing a fundamental part of learning. We didn’t have homework! I asked him if he would please give us challenges every week. I’m sure everyone else in class felt that I was teacher’s pet and were annoyed with me, but I think the idea was critical to success.
We’ve been at this Programming By Stealth thing for 92 episodes and the format continues to evolve. In some of the earlier episodes, we had incredibly complex homework due in just two weeks (it’s a bi-weekly show). I often didn’t get it done, even the help of my dear friend Dorothy, aka @maclurker who is basically my teaching assistant. I never felt like I got a chance to master what I was supposed to be learning.
Somewhere along the line, Bart suggested we have an extra two weeks on a particular assignment. It was glorious. I got to finish my assignment. Since then, we work on a schedule where we learn new things each week but in the background, we’ve got long-term assignments. I’m liking this much better because I really get a chance to dig in and try a lot of different solutions until I get it working.
One of the things Bart has been banging into our heads is that he doesn’t want to spoon-feed us all of the information. Rather he wants to teach us to be able to read documentation so we can stand on our own two feet. I remember a little web app number guessing game we designed, and all on my own, I found a library online that would let me make a changing pie chart representing the guesses that had been made. Bart was quite pleased because it proved that we were starting to be able to work independently instead of just following directions.
In a more recent assignment to do currency conversion, I found a library to make my table data more interesting. I had to read a lot of documentation that was written very differently from what I’d read before. It took a lot of effort to get it to actually function the way I wanted. Dorothy and Helma both helped me along the way of course. In the end it works really well (except on mobile which leaves me lying awake at night.) My currency-conversion web-app.
The current assignment is simply glorious. Bart asked us to make a clock, but gave us very few requirements. We had to allow the user to decide whether they wanted a 12 or 24-hour clock and whether to show the second hands. The user should also be able to choose a timezone and whether they want to have the time separators pulse. That’s it. No other rules.
He did suggest a couple of libraries that he felt would be quite helpful in this quest (moment.js and moment-timezone.js) but we didn’t have to use them.
I am loving this assignment for so many reasons. I love knowing that every person’s solution will be different. I love that I get to be creative in how I lay it out on the page and how the user will interact with it. I’m writing all of the code from scratch. But each new app I’m writing gets a new chance to be better than the last.
Bart recently revealed his solution to the currency conversion challenge and I spent some time looking at his code. I didn’t follow it entirely but it was beautiful. It was structured and elegant and crisp. Bart made a point of telling us that he actually spent a lot of time refactoring his code to make it this elegant He told us that it had grown like the Weasley House in Harry Potter and he had to take it all apart and rebuild it to make it this elegant.
When I started on the new clock assignment, I set a goal of making my code elegant and organized too. I’ve got the first half of the assignment functioning well now. I sent Bart a note to show it off to him and I said the most pleasing part to me is that my JavaScript code is only 66 lines long (including comments) and that it’s clean and beautiful.
He wrote back to me words that warmed my heart. He said, “Don’t ever let anyone tell you you’re not a programmer. Only a programmer can see beauty and elegance in code 🙂”. Isn’t that fabulous?
I entitled this article, “Programming is My Happy Place.” I called it that because it is the one place I can get away from it all right now. I open up my iPad to Notability and I scribble pseudo code with my Apple Pencil and design the user interface and think about how the logic will work. Then I open up my code editor, Visual Studio Code that fellow student Caleb Fong told me about, and SourceTree for my source control that Helma told me about and get going on writing code.
I can sit for hours and hours and hours until my legs fall asleep in this happy place. (For some reason I’m most comfortable with my legs crisscrossed under me in a desk chair.) I keep Telegram at the ready in case I need to ask Dorothy questions. Sometimes I have play dates with her or Helma on Skype to look at my code and help me figure out where I’ve gone wrong.
I’m happy programming. Truly happy. And I never saw that coming. It’s almost like it happened “by stealth”.
Welcome to the happy place. I know that you understand the “zone” of programming where time suspends (“hours and hours and hours”) when a difficult programming problem occurs, or just exploring different methods and solutions to resolve the current situation. Again, congratulations! But as Han Solo said to Luke “Don’t get cocky kid.”
My smiling emoji did not come across!
I tried out your “My currency-conversion web-app” and was just curious – where do you get the true conversion table? is it static – some fixed value – or dynamic- from some monetary site that may change – from some source other than internal in your code?
Well actually, Tim, it’s an AJAX call (so when you render the web page it’s accurate at that moment) to this site: https://api.exchangeratesapi.io/. It’s maybe a little far down on the page when it loads but there is a reference to it. I was very proud of doing multiple AJAX calls so I’ve got the asynchronous thing down!
Regarding the “don’t get cocky, kid” line, I am SOOOO far from cocky right now. I feel like a little kid yelling, “Mommy! Look at me do a cartwheel!” and then I do a partial somersault but mommy still says I’m amazing. I hope to get to cocky someday. That’s interesting about the “zone”. That’s a perfect description of it. It’s not like anything I’ve ever experienced before. It’s sort of like an adrenaline high but it’s more of a slow burn than that and in a mesmerizing kind of way.