I love programming! But I used to hate it.
For me, a major motivation is helping people. Who am I helping, and how?
My path was winding. The high parts were all when I was helping people. The low parts were all when I was not helping people. Over time I thought programming was: boring, then hard, then rewarding, then frustrating, then awesome.
😴 Community College Coding
My parents always wanted me to learn to work with computers. They (correctly!) thought it would be a great career path by the time I grew up.
They had me do computer programming classes at a community college as soon as I was old enough to, which was as young as 8th grade at the time. The ideas in the classes were kind of neat and I am thankful I had this opportunity. I learned about object oriented programming, inheritance, properties and methods. We made models of buoys and sailboats. I recorded their latitude and longitude, and gave them methods like
toot(). But why?
These buoy models did not help anybody. I did not love to code.
😣 Neurobiology Lab Coding
Freshman year I found a neurobiology lab that took me on as an assistant to work on processing their data. I love psychology, and I wanted programming to make sense too.
Unfortunately, labs often do not write easy-to-read code. I spent the majority of my time trying to read and clarify old, messy code. I did not get much done, and I left the lab after one semester.
I did not help the lab very much. I did not love to code.
🤩 Summer Internship Coding
Throughout undergrad, I had a term-time student internship doing laptop repair. To manage who worked where, when, we used custom software that the students wrote, the “Shifts” app. One summer I had an opportunity to work on improving this application that I used every day in my student job, and I would even get paid to learn web development in the process. I was sold!
That summer of coding, my boss described an issue we had: students had trouble updating the schedule when folks needed changes. My boss had to go into the database manually and edit values in database columns. That was difficult and very easy to accidentally edit the wrong person’s shift. He wanted a datepicker in the application to choose what date and time the shift would be from the web interface. Much better! That summer I made a datepicker drop-down package (as a ruby “gem”) for our application and we used it in those two use cases.
I helped my boss, and I helped my student employee peers! I loved coding!
😤 Computer Science Course Coding
After that summer internship, surely I’m a developer now. I know basic programming from community college and my summer internship, both. I signed up for Yale’s Introduction to Computer Science course “Data Structures and Algorithms.” I thought it would be pretty straightforward. It was not.
This class was notorious. Assignments were very long and difficult, and it seemed like I would only learn how to manually do things that other programming languages already do well. “How do you sort an array in C? No this is not ruby, there is no
array.sort()! How do you sort one manually?”
This class could be interesting in the right context and the right environment— but this class was not for me. I dropped out a few weeks in.
This class was not helping me help anyone. I did not love to code.
😍 Managing Student Developers
After graduating, I managed the student developer program that I did the summer internship with. I helped other students learn to code, and especially to love to code. I made sure every feature we worked on and every bug we fixed was well-motivated. I asked the developers “do you know why we are working on this?” and if they could not give me a solid answer we would talk through it. I want them to feel the motivation behind our work.
I loved helping students love coding!
👨🏫 Teaching New Developers
Eventually I taught my own introduction to programming class through the university IT department. Each of our lessons and exercises started with a tangible goal, something that could even be useful outside of the class. One exercise I am especially proud of is having the students make their own RandomBeyonce.com. Students learned how to randomly choose items from an array (boring!) so they could share Beyonce music videos with their friends (fun!). That is applied programming.
I loved helping students learn to love coding!
😎 Side Projects
I have since worked in software development for a long time. Lately as a Product Manager I do not write as much code myself. Instead, I work on choosing what features the team works on. I still always like explaining the why.
When I do code things lately, they are small side projects. I love solving actual problems with a bit of code. Here are some of my more simple but well-motivated side projects. I am using simple as a relative term here, these are not full-blown, complex web applications like Facebook. These are more like single-use-case tools:
- Is My Mic Working — Sometimes I can’t tell if my microphone is working. I just want the computer to tell me. This records a few seconds of mic input, and plays back what it hears. So simple!
- Is My Internet Working — On every videocall, someone asks “oh is it my internet or yours?” — the computer can know this! I made a tiny app that messages google.com every second to see if the internet is up for me. When it gets spotty on my end, I get a notification.
- Videocall Push To Talk — On some videocalls I want to stay muted the whole time except when I am speaking. I like the walkie-talkie style of holding down a key to speak, so I made that happen in Google Meet / Hangouts!
- Folk Tune Transposer — I love to play folk music in bands. When I play flute I can read the sheet music directly, because flute as an instrument is in the key of C. When I play my B-flat clarinet or B-flat trumpet, I cannot read the sheet music directly. Perfect use of code! This site I made transposes folk music into the key I need it to be in for my instrument of the day.
- Lyricsss board game — I love this board game idea where you get a word and have to sing a part of a song that has that word in the lyrics. This app is literally choosing a random word from a list and displaying it. So simple!
- Graphviz REPL — When working remotely one thing I always miss is whiteboards. Online whiteboards are not great. Sometimes I would use the command line tool “graphviz” to create flowcharts using text, but it was hard to collaborate with other people on this. I pulled together some tools other people created to make Graphviz REPL, a realtime-collaborative flowchart tool that I still use today! (Although honestly, I use another tool more lately, a friendly “competitor” tool that was made since then: graphviz.it)
I try and trick myself into being motivated in other contexts in a similar way. It’s often about other people for these, too:
- It can be hard to get through an online class. Sometimes I tweet insights I come across. I am sometimes more excited about composing the tweets than the actual class itself, and that is fine by me. I get through the content, and some people can learn vicariously through me too. “I can’t wait to tweet this!”
- It can be hard to finish composing music. When I am stuck, I try to think of a friend I could share the demo to. Knowing who I will eventually share it with is very motivating for me. “I can’t wait to show them!”
- It can be hard to keep my apartment clean. When I have trouble cleaning, sometimes I schedule a party. I find it very motivating to clean when I know I will have people coming over. “I can’t wait to have them over!”
Casey Watts! studied neurobiology at Yale University, and he is a co-author on several neurobiology papers. He has also worked in software development for 10 years, including at Heroku. Casey is an independent author based in Washington, DC.
Casey is the author of Debugging Your Brain. This book brings together two parts of Casey's background: psychology and software development.
Debugging Your Brain (DYB) is a clear applied psychology book and a concise self-help book. Whether or not you have a technical background, you will find the software development analogies approachable and insightful. You will likely reference and re-read DYB many times, each time discovering new insights.