“No one person’s Hollywood success story has anything in common with anybody else’s Hollywood success story.”
- Old Hollywood saying
One day my friend Luke and I were working on a school project in an empty classroom. We got side-tracked — as usual — and I took the opportunity to ask him the burning question — how had he gotten so good at programming in Python?
“You know, it’s funny you ask that,” Luke said. “I remember how I got started. But the rest is a blur.”
His answer hung in the air, asking to be explored. I knew I was on the brink of a serendipitous story. So I dove in and asked him to take me back to the very beginning.
Luke had gotten into programming the summer between our Freshman and Sophomore year of college. I was working in a research lab, and Luke’s job was mostly data entry. Each evening we would hang out and watch The Office while he used CTRL+C and CTRL+V to copy log after log and upload file after file.
Motivated by the some of the cool programming work I saw done in the research lab, I decided to try my hand at it. After a few Google searches and listicles, I settled on learning Python via the Codecademy module.
Me being the type of person who starts things and never finishes them, I decided to ask Luke to join in. He agreed that it seemed like a worthy endeavor. I mean, it was one of “The Top 10 Skills You Need to Compete!” the listicle headlines shouted. Not to mention, “The Language That is Dominating Data Science!” With our sights set, we sunk into the couch and wired in for the first time.
But this is not where the magic happens. Our coursework picked up, the hunt for internships began, and we were forced to choose between sleeping, showering, and studying. Side projects, programming tip calculators, and hunting for syntax bugs were at the bottom of a long list of things to be done.
Luke continued his job doing data entry as a means to fund the Saturday night bar tabs and the Sunday evening date nights. Roughly a year had passed and he and I were now working in separate cities.
Then one evening I received a series of Snapchats from him showing logs of data being copied into Word documents with a caption — “Look ma, no hands!”
Woah! What happened?
With his feet kicked up onto a desk, Luke began to tell me about an engineering course he’d taken last semester that focused on modeling systems in Matlab. Most of the programming was about solving differential equations with approximation methods for calculating satellite trajectories, but one instance required they use Matlab’s file input and output features to read and write data.
“I just started playing around with the file I/O features in Python with it being free and all. But I started really small. Just writing console input into a text file. Once I finished one task, I would google something else and try to connect it to the previous task. It was addicting.”
These competencies began to build and multiply as they linked between one another, and formed a skill set that he could start to incorporate into his data entry job.
Luke continued: “I debugged for days when I first tried automating one of the tasks in my data entry workflow. I hardly understood what I was doing, my scripts were comprised of code stitched together from at least a dozen Stack Overflow answers. One of biggest issues was that some of my code was written based on Python 3 instead of Python 2.7. Something so simple. But when I learned that… it was probably the first monumental step in the right direction.
“It’s almost painful thinking about it. I seriously had no idea what I was doing. I would change things in the code trying to get a different error message, looking back and forth between the 28 Chrome tabs I had open. It was so easy to keep going on it though, because I had access to so much. I could just type, Python how to copy dates from excel to a word document, and something relevant would come up on Google. I watched YouTube tutorials, studied Stack Overflow code, literally anything relevant.
“Slowly my understanding of programming became more deep and profound. I knew the differences between lists and dictionaries, how to import libraries, and loop through data — creating structures as I went. Each error message taught me right from wrong. It was so, so, so painstaking and exhausting. But I loved it and couldn’t wait to get back working on my code.”
The Python modules from the previous summer hadn’t gotten this kind of a reaction out of either of us. What was so different this time?
Luke answered: “The motivation was inherent this time around. I wasn’t building something in order to learn. I was learning so I could build something. That reversal tells all. Doing the data entry manually, with my full attention, took about 2 minutes to complete one loop through the workflow. I knew that automating a couple of the aspects of the workflow would dramatically reduce how much attention I had to give. I really just wanted to have it so I could sit and my desk, run scripts, and watch New Girl.
“Outside of this being a pain point, the fact that I knew it was possible was huge motivation. It was a challenge of consequence, with real positive implications on my life. People automate processes like this in software all of the time. I knew it was feasible to build workarounds that would result in an identical work product. When I’d ask, why should you keep doing this? The only answer was — why not?”
Now, I’ve found that in my past attempts to learn something, I’ve often stopped once I hit a difficult roadblock. So I dug deeper — “What happened when you hit really bad roadblocks?”
“I hit terrible roadblocks,” Luke said. “Whenever it would compile but I’d get the wrong output — no output being the worst scenario — there were no syntax errors helping me out with what a specific message and line number. I had to draw out my data structures and print my inputs and outputs through each step of code, each time verifying what I would see.
“I didn’t specifically understand what structures I was building. I was piecing together lists and dictionaries inside one another until they worked the way I needed. I didn’t have any of the conventional wisdom of how to debug code. I’d pour over the code, make adjustments, compare results, and repeat. Time went on and I began writing cleaner code, spending way less time debugging. Seeing the mistakes before I’d make them. Recycling and tweaking old code to fit different needs. Knowing where to look for bugs and knowing how to systematically find them. Knowing how to set up my data structures so I could easily work access the key components and iterate through them.
“Overcoming the roadblocks wasn’t the reward. The true value was in the data I had internalized in the process of overcoming the roadblock. It made that much easier to crush the next one.”
Luke had fallen down the rabbit hole, and the inertia of his curiosity wouldn’t let him stop writing code.
Finally, Luke exhaled, looked off into the distance, and slowly nodded his head. “I automated myself out of my job — 85% of it, that is. Almost 85% of the data entry workflow is accomplished through input to the Python console. I’m pretty well stuck at that 85% mark due to the limitations of the file transfer software used for uploading and downloading data sets. But to think that it’s come this long of a way is just amazing.”
So what happened? Well Luke had gone through a typical Hollywood training montage.
The training montage is a myth. At least, the way any Hollywood movie shows it. The movies skip over the longest, hardest, and most important part! The part where you pour your soul into learning something — master it — through literal blood, sweat, and tears. Possibly years of your life.
Luke had made some serious progress learning how to program over the summer. But like he said, it would often take hours to find certain bugs. He wouldn’t binge on Netflix or go out for a few beers on a Tuesday night like every other college kid living around us. He would sit and program until his eyes burned from the contrast of his white LCD screen against the blackness of the early morning.
This wasn’t a 2-minute scene where he does a few push-ups, catches some chickens, and then runs up a hill. In real life, there are no training montages. There are only long, painful personal growth experiences. But after it’s all said and done, it feels like a blur. Like this serendipitous thing that just happened.
Or as Luke said, “Really though, learning programming wasn’t any different than learning anything else. You suck at something. Then you bust your ass for however long it takes. And then when get you decent at it, you look back and wonder how it happened. Chalk it up to luck or hard work or something like that. It’s really just getting that fire in your belly and choosing to not let anything stand in your way.”
Maybe life isn’t full of these serendipitous training montages we’ve come to know. Maybe hindsight blurs our vision of the path we’ve taken. Maybe instead, success is full of many late nights, thousands of hours of trial and error, and a lifetime of learning.
Did you enjoy this story? If so, please ❤ and share!
I tell stories about the compelling things I experience everyday. A few friends and I are currently creating a tech/lifestyle publication we’re calling College Entrepreneur. Contact me at firstname.lastname@example.org if you’d like to talk.