When I started to learn to program from Bart Busschots in October of 2015 with Programming By Stealth, I didn’t really have the vision to understand what that would mean. I don’t think I expected really to be able to do the things I can do today.
Caleb Fong tipped us off in our PBS Slack channel to a podcast called CodeNewbie which is stories from people on their coding journeys. I like it because they talk about how they attack problems, how they learn, and often talk about whether they’re “real developers”. So far, most of them say no. They’ll sidestep it and say they tinker, or they’re hacks at it.
I was talking to Claus Wolf the other day and when I referred to him as a developer, he said, “Not a dev, just someone who codes.” I think it might just come with the territory that you might feel competent in programming but you never feel like you’ve really “got” it.
I’ve been rolling around in my head what it feels like to learn to code and it might explain this phenomenon. When I first started learning to code, I was definitely like a baby learning to crawl. It wasn’t that I was making mistakes, it was that I didn’t even understand what I was supposed to be doing. I could mimic what others had typed but the words of explanation were pretty much gibberish to me.
Eventually I was able to do a few very rudimentary things on my own. I remember distinctly the first time I wrote the code ALL BY MYSELF to increment a variable so I could loop through a task. I felt like I finally stood up on my own two feet. I had made fire!
It wasn’t just mimicking, I had solved a real problem and I had done it by myself. I wish I could truly remember what it felt like when as a toddler I stood for the first time, but I imagine it felt much like that. I’m pretty sure I wrote to Bart that day to tell him about my amazing accomplishment. Like a good dad he patted me on my little punkin’ head and told me he was proud of me. This was genuine and I think it pleased him to no end that I was so proud of myself.
Eventually, I was able to walk upright. I was unsteady on my programming legs but I was moving forward. Dorothy was holding my hand a lot, steadying me on my unstable programming legs.
Bart has continuously stressed learning to read documentation. For at least three years I would get angry at him when he would tell me to RTFM. I took offense not just that it sounded profane (he says it means Read the FINE Manual), but also because I was trying to read the fine manual. It was 100% gibberish to me. The jQuery docs are the worst – it was like when you ask someone to define a word and they use the word in the definition. During times like this, I was crawling again like a baby.
My vision of my apps was finally starting to take form in front of my very eyes. Caleb Fong had suggested I use Microsoft’s Visual Studio Code as my editor and as I learned more about it he encouraged me with plugins to help me go even faster.
Then Helma from the Netherlands stepped in and started teaching me version control. Bart had given me the baby steps of how to create a Github account so I could upload my files but I didn’t know how to use the version control parts of Git. Helma introduced me to her favorite graphical user interface to Git, SourceTree from Atlassian..
She taught me how to commit tiny changes to my local repository so if I messed things up I could roll back the changes. She kept saying, “commit early, commit often”. She walked me through what it meant to Push and Pull to get my local code to go up to Github so it was safe, but only when I had a good, working version.
By now, I was in a full-on sprint! I could do everything!
But then I would hit what Zefrank described in his interview on CodeNewbie as the Valley of Despair. Just a minute ago I was sprinting but suddenly I’ve hit this giant mountain that for the life of me I cannot climb up. Often when I’m in the Valley of Despair, it’s about something really simple. I have spent literally weeks doing something like trying to get a plugin to work that is supposed to let users of my tool type into a search box. Bart did it. Michael Westbay did it. Dorothy did it. Why can’t I do it? And yes I read the fine manual!
As a runner, I find that some days I can run like the wind. Other days it feels like I’m running through molasses. On the days when it’s super hard, I am convinced that it will always be this way. I will never run fast again. I’m too old. I am worthless. But for some reason on the speedy running days, I don’t feel like I will always run fast. I think to myself, “well this is rare, I’d better enjoy it because it’s never going to happen again.”
The same thing happens when coding. On the days I’m in the Valley of Despair, I am convinced that I’m not good at this, I’ll never be good at this, my memory is too weak and my imagination is too small so I should probably just give up.
But then something happens to bring me back into it. This week I showed off my newest project, which I called Time Shifter Clock. It features a range slider that you can use to shift the time in your own time zone while also shifting the time in another time zone of your choosing. Lot’s of clocks show you what time it is in another time zone, but the Time Shifter clock figures out what time it will be in another time zone. This project was inspired by Terry Brett’s TimeScroller OS X widget and iOS app.
I was showing off my masterpiece to Claus Wolf and he mentioned that he liked the lookup text area that allowed the user to type in a city name. This was, of course, the plugin that had slowed me down for a full two weeks. Even after all that effort, the search box wasn’t perfect and I knew it. If a city name has a space in it, the official list of timezone names I’m using puts an underscore in place of the space.
For example, if the user types in “los” they’ll find Los Angeles, but if they add a space after “los” the search box will empty and show no results. I knew about it but hadn’t fixed it yet. Claus noted this problem and I suggested he figure it out for me. Claus had never used Github before but he figured out how to download my source code and he figured out how to fix the underscore problem.
But here’s the cool part. I asked him if he could submit his fix officially as a pull request. This would send me a message saying he was requesting I pull his version of the code and merge it into mine. This is the power of version control and having open source code. I could see what code he had changed, I could test his code, and if it worked I could accept it. I was able to keep working on other things while he solved a problem that would have taken me weeks to solve.
Remember I told you upfront that it seems a symptom of programmers that we don’t see ourselves as “real developers”? And remember it was this very same Claus who when I called him a dev said, “Not a dev, just someone who codes.”
Even though I’m technically still in the Valley of Despair because I don’t know how to do my homework for this next assignment, I think that I can officially call myself a developer. Maybe my projects aren’t changing the world, and maybe other developers could have written them in their sleep, and maybe I’m the slowest kid in the PBS class, but I am a developer. I can prove it. I have a set of projects on Github, I have contributed to other people’s projects, and people have contributed to my projects.
If you’d like to play with my amazing Time Shifter Clock you can find it at podfeet.com/code/time-shifter-clock/ and of course there’s a link in the shownotes.