My false start when learning to program

Jul 16, 2022 · 1021 words · 5 minutes read

I got into programming after college, but there was a brief period of time when I had first tried to learn how to program. It didn’t stick, and I was thinking the other day about why that first attempt didn’t keep.

It was during one of my college summers (2012 or so) when I was working as an intern at a small law firm in Vermont. My day to day duties varied heavily, with some days being very busy and other days being filled with nothing to do, and in some of that downtime, I decided to learn to program. I had met a few people at school who were studying computer science, and although I knew next to nothing about what it actually entailed, I thought it may be something that would be good to do.

I had heard about the introductory JavaScript classes on Codecademy, and I started following the first few modules. I remember working through a few of the starter courses, but it got difficult fast. There were a few concepts I didn’t immediately understand, and after floundering for a bit, I fell off the learning wagon. With the braggadocio of a 19-year-old, I cast it aside as something I wasn’t interested in. I didn’t take a single CS class in college, and I didn’t pursue more programming until much later.

Joke’s on me — I now do it for my day job, and I really enjoy programming.

In retrospect, I think the main problem was motivation, in multiple ways. It was during a period of “I don’t really know what to do, so maybe I’ll try to learn to program, or maybe learn to speak Korean, or what if I got into…”, where I was exploring broadly, but without clear goals or much practice learning on my own. At the time, I didn’t even know what I wanted to major in. Because there wasn’t much real interest backing the initial exploration, I backed out when I ran into some resistance and it required a little more effort, and I instead moved on to the next thing (spoiler alert: I also didn’t learn Korean). I wasn’t very good at putting in the work it takes to learn hard things, and I hadn’t had a lot of practice studying, though I somehow passed (most of) my freshman year classes without good study skills.

I think that starting with the broad, amorphous goal of “learn to program” didn’t include tangible goals that I think would have helped motivate 19-year-old me, like building an actual website, writing a useful app, or making a basic game. You need the fundamentals to build off of, but ideally you’d have something to build towards. Multiplying numbers for the sake of multiplying numbers wasn’t enough, and for an autodidactic approach (without a lot of autodidactic practice), there wasn’t strong enough internal motivation towards a goal to stick with it. Looking at it with more experience, it’s also clearly an impossible goal — you’re never really done learning.

That lack of inspiration wasn’t helped by an aversion to putting in the work. At the time, I hadn’t developed strong study skills and had been able to mostly coast through my freshman year, with a few bumpy general chemistry Cs offset by my liberal arts As and Bs. I had been able to make it through a lot of my earlier schoolwork with pretty good grades without learning to seriously study, and I hadn’t yet developed the muscle to work hard on something when it doesn’t immediately come naturally. Thinking like a computer with the rigid rules of a programming language was a new way of thinking for my brain, and when it started to get hard, there was that nagging feeling to just move on, and move on I did.

One of the unfortunate side effects was that I assumed I wasn’t interested in programming or computer science, even though I had a very, very narrow view of it and next to no context on what it was actually like.

Fortunately, I did end up coming back to it much later. When learning the second time around, a large part of the initial motivation was to make a career shift, and it was much easier to direct my energy and focus, aided by a little more maturity and practice learning as well. There was nothing quite like fielding customer support calls to help motivate me to study after work, and I was able to stick with it much better. I ran into similar sticking points, but I worked through them, asking for help and giving it time. I built up the muscles of putting in the work to keep trying at a problem and sticking with something difficult until it comes into focus.

It went much better than my first attempt. As I kept learning, the career shift motivation gave way to a general interest and enjoyment of both computer science and learning. It also naturally developed into a positive feedback loop, where I put in the work to learn more, it got easier to put that work in and learn, and I enjoyed the process and wanted to keep learning.

When people ask me about learning to code, I try to think of ways that they can leverage their interests — maybe if you love cooking, you can learn enough to build a basic cooking app to scratch your own itch. You’ll run into some tough spots, and having that inspiration can help you get through them, hopefully until you’re well practiced in getting through those tough spots. Better yet, if you’re able to work through it with other people, you can get through those tough spots together. I’ve found that a lot of learning difficult things comes down to sticking with it and putting in the work to understand; there will always be tough spots, but you get better at dealing with them.

I’m glad I stuck with it.

This post was inspired by a few thoughts I put together for a Hacker News thread: “Ask HN: Why did you quit learning programming?