What Computer Programming Can Teach Us About Expertise
This is a guest post by Seth Leonard.
In 2003, I spent 6 months in Mexico, learning Spanish and doing a little travelling. I also continued some of my work as a web programmer, finding internet connections where I could. My teacher commented that the code I was writing might as well have been in Chinese.
I find this understanding of programming to be a common one. After all, they are called programming "languages." Most people consider software code to be like a strange foreign land they've never visited, where the letters don't make any sense and everyone moves way too fast.
I will spare you the details of why coding is more accessible than you might think. I don't want to tell you what I've learned about programming. Instead I want to focus on what I've learned from programming.
In this post you'll learn how to be more creative, take on new challenges, and deal with failures better if you start to think about life the way that a software developer thinks about code.
The best skill that a programmer has is...
How To Make A Concept Into A RealityEvery piece of code starts with the idea of a finished product. Whether it's an iPhone app or a web tool, programmers start with a very specific image of what they want to create.
The act of programming, then, is actually manifesting that image.
It's about finding the right pieces to turn an idea into something real. Too often in our lives, we are going through the motions. We are imitating what others are doing or are simply trying to keep up with what we think we're supposed to be doing.
However, if we have a clear picture of where we're headed and commit to getting there, we make sure that our steps are in line with our envisioned destination.
Programming has taught me how to focus my efforts. If I know where I'm going, I can figure out how to get there. That's the case even though I...
Don't Expect To Know EverythingAny time that I've written a program or app, I've had to seek help. I’ve asked a friend, posted a question to an internet forum, or done a google search to find out what functionality might achieve my desired result.
I expect that to be the case from the outset. Even though I'm clear on where I'm headed, I'm not necessarily sure how I'm going to get there when I first start.
But I start anyway.
I do what I know until I bump up against something I don't know. Then I spend time learning how to do it, or I find an alternative way around the problem.
If I can't, I drop that requirement or alter my vision of the finished product to accommodate what I'm actually capable of doing.
One thing that I've seen stop a lot of people from trying new things in their lives is that they are afraid to start. They're afraid because they don't think they know everything they're supposed to know to in order to achieve their goals.
But you don't need to know everything to start. You simply need to start and know that you can (and will) figure things out when you need to. That's part of the process, and part of the fun.
Don't take things too seriously, because even once you have gotten to the end of what you're working on, you can...
Assume That It Won't Work At FirstThere's a fun moment when I'm done with the first draft of a program and I run it for the first time. Early on in my career when I finished coding, I eagerly awaited watching everything unfold as expected, culminating in a nice, clean conclusion and a job well done.
Now I do the opposite. I click a button and sit with curiosity as to what will go wrong.
One time a program I wrote started deleting every file it could find. Another got stuck in an infinite loop of printing out the same sentence over and over again (luckily it wasn't "all work and no play...").
One time everything even worked.
But that was the exception. I now assume I've made a mistake somewhere along the line. There are far too many variables to expect them all to behave exactly as expected. This is one of the lessons from programming that has been hardest for me to apply to my life.
The more work I put in to something, the more I expect it to be an immediate success. I'm ready to wash my hands of it and move on.
But that's never the case. Something always needs to be corrected, something always needs to be tweaked.
In programming, "debugging" is the process of going back over things to find what's causing problems. So often in our lives we are afraid to debug. If something doesn't work, we want to throw the whole thing away, whether that's a new process, habit, or plan.
But if we're willing to go back and look at what we tried, we can usually find something we can adjust that will produce a different and better result. If we're patient enough, we can create a pretty smooth operation.
Programming isn't about simply laying out a perfect linear series of commands. It's filled with guesses, bursts of inspiration, and a lot of debugging. That's because...
Everything Is An ArtI want to go back to where I started this article: with the idea of a programming "language." The reason I think this description does writing code a disservice is that we consider language, especially a foreign language, to be pretty rigid.
There's only one way to ask "where is the library?" in Spanish. You need to learn the translation of every word in that sentence to be able to ask the question.
Programming is not a language. There are less rules than you think. Every coder has their own style. Everybody puts their own stamp on their creations. Everyone finds their own path to the results they seek.
Your life has fewer rules than you think. There is room for creativity in everything you do. There is room for your own unique approach.
Programming is an art. Life is an art.
Subscribe to the Expert Enough newsletter.
Get our latest articles sent to your inbox weekly: