Code Adventurer

The Journey to Software Crafts(wo)manship

Learning Is Effin' Hard

• published in journey, projects

Two days into building Event Reporter (you can find the project guidelines here), I was flummoxed. I’d only been programming in Ruby for a little over a week, and we were diving head-first into test-driven development, while programming our first project without any training wheels. I came to Katrina, our super-heroine, molecular-biologist-turned-programmer instructor, and showed her my codebase. I was trying hard to separate concerns, build different classes, and keep every class and every test in its own file. This was starting to confuse me, and I was starting to lose sight of how to connect all the pieces back to one another. She took a few looks at what I had done, and asked me to rm -rf everything. All of it.

I looked at her in disbelief, explained that this was hours worth of work (even though really it looked like there wasn’t much there)… and then complied. And cried a little inside.

Starting with a blank slate, and just two files this time – one for all of my classes, and one for all of my tests – I looked at the requirements and started building from the first test case, “Happy Path”. I had one day left before the project was done, and I was starting to stress out. Why was this so hard? Every class I’ve ever taken, every passion I have pursued, has come easily to me. I can memorize insane facts, make connections between farming and management, lead groups, organize events, cook awesome organic meals, fix bicycles, juggle, live in yurts… and this project is the thing that is going to show me who is boss? I couldn’t handle it.

With every hour that went by, as some tests failed and somewhere along the way, a few passed, I kept getting more and more frustrated. I started to doubt being ever able to call myself a web developer in the past. If I couldn’t get this basic project to work, how was I going to move on to the next one? At 8:30pm the night before the project was due, I had only four methods that could pass tests. I shut my laptop, realized there was no way I could finish in time, and went to sleep.

I awoke at 3:30am from dreams where I was expertly solving Event Reporter, one passing test at a time, and quickly got out my laptop to try to recreate what was I was programming in my dreams. I cranked out the tests, and slowly started realizing that all of it was gibberish. Dream-state me wasn’t actually expertly solving anything, although it seemed like it. But, I was awake anyway, so I hit the gym at 4am, got through my workout, and decided to come to gSchool early and try again.

I worked through my code for a little while before Katrina showed up (she has some crazy schedule where she goes to bed at 8pm and gets to work at 5am), and helped me back away from the ledge of jumping off of the programmer cliff. She looked at me and said, “Learning is elfin’ hard.” Coming from a molecular biologist, I must have actually believed her, because an hour and half later, after talking through my code and my struggles, I started to feel better about the project (even through I was still nowhere near done).

I’m still not done today, but I have an idea of where I’m going. Talking with Katrina, Jorge, and Franklin during different pieces, and various colorful feelings ranging from rage to anger to depression to self-hate (gosh, I never knew programming could bring out so much in me) really helped me understand that all of us at gSchool are used to being good at things. And a lot of us are struggling — not just with the syntax and the TDD mindset, but also with this ego-crushing feeling of failure.

And then I have to remind myself that today is day 10 of gSchool. And there are still five and a half months to go. Two weeks ago, I had never written a test for one of my programs. I’ve learned a lot in this time — not only about Ruby, but about myself, my classmates, and the human spirit.

Thank you, gSchool, for showing me that learning a new programming language can be one of the most amazing things to teach me about myself.

If you’re interested in the spiderweb of code I’ve been building for this project, you can find my codebase on GitHub. Feel free to let me know what you think, either about the code, or about my journey, or about similar experiences you’ve had in the comments section.