What hackers and painters have in common is that they’re both makers. Along with composers, architects, and writers, what hackers and painters are trying to do is make good things. – Paul Graham
There’s been a lot of talk lately about what it means to be a programmer. Patio11 has a fantastic article about not being “just’ a programmer–about selling yourself as someone who creates value. As someone who has done far more sales than he has ever wanted to, this is all old news to me. It’s absolutely true, of course.
And then raganwald came along and basically said, yes, this is all true, but here’s another thing:
I’m not in the ‘programming’ business, or the ‘adding value to the economy’ business. I program and add value, but my motivation for programming and for finding ways to add value is that those are the ways I finance my real business, which is the making dreams come true business…. Great software and great programming languages have a dream-like quality. Learning to use them has this strange feeling of needing to relearn everything you know while simultaneously feeling so natural that you are filled with wonder but not dissonance.
Programming, for me, is creation. It’s having an idea, and breathing life into that idea. It’s sculpting something beautiful out of the formless for loops and switch statements. It’s walking down the street, having an idea for a new children’s toy… then heading into the workshop, building it, and placing it under the Christmas tree. Here little customer, sit on my knee, Santa’s brought you a CRM system that fits in your pocket and can read your mind. Idea to implementation to the smile on their face, in a single development sprint. And it doesn’t have to be extraordinary–sometimes it’s the little things. Maybe I just want the dishes to be a little cleaner. Software can do that.
Programming, for me, is literature. You curl up with it on a cold and rainy day with a nice cup of tea. Writing a compiler is an exercise in existentialism–what does a program mean, anyway? Writing AI is a class in philosophy–do I understand the program better than the program understands me? (You know it’s time to stop when you stop finding “bugs” in the program and start having arguments with it.) Writing a web application is the discovery of Berkleyism— is the W3C still a spec if nobody follows it? It’s the soul-crushing defeat of being unable to understand that bug, day after day, the desperation of trying to ship on time, the struggle with productivity and the motivation to keep going. Just one more cup of coffee.
Programming, for me, is fantasy. What would the world be like without assignment? Or without the jump instruction? What alternate steampunk universe can we construct if communication were our primitive operation? Or if our programs had no human authors? What if regexes could predict the future, or if rolling dice could beat the math professor? What if all Ruby was valid HTML, or if our compiler was a little more foregiving? What if piezo buzzers could play chiptunes? It’s imagining the world as a different place, and then building that place. And then exploring what that place is like on some idle Tuesday. You’re a wizard, Harry.
Programming, for me, is mystery. Does that variable look a little suspicious to you? Why does the program only crash on Wednesdays? Why do the e-mails travel only 500 miles? Why did the behavior change after I read the source code? Why does it need that much magic?
Programming, for me, is art. The anonymous author of 0x5f3759df is out there somewhere, smiling, like Banksy. It’s the ability to push compression beyond any believable limit. It’s a voice that taught a generation to love development. It’s making people cry.
Programming, for me, is magic. It’s a magic lens that speaks French. It’s a personal assistant. It’s the ability to create objects. It’s the power to destroy. It’s the ability to see things more clearly. It’s the power to find what we’re looking for. It’s a portal to our friends and family. It can find the questions to all our answers. It’s the ability to search everywhere without looking everywhere. Users often ask for ridiculously hard things like AIs and voice recognition. The reason they ask for such things is because they perceive the things we can already do… equally as magical. AIs don’t seem like that big of a leap compared to the other magic we do.
Programming, for me, is a great responsibility. Programming is power. We speak of good books as “friends”, but none are friendlier than Siri. We speak of the pen as mightier than the sword, but the humble for-loop wages more war and defends more life than either. We call the silver screen a reflection of life, but is it really more reflective than your inbox? Software is the most powerful medium so far constructed. Will you be a force for good, improving the lives of your customers, saving the company, freeing users from burdensome tasks that used to take ages, helping other programmers? Will you be a force for evil, empowering vendor lock-in, helping to spy on your citizens, and launching patent wars against small startups? Or will you be a force of apathy, sitting by the sidelines, fixing bugs in that rusty CRUD app and leaving the world-changing to others?
Programming, for me, is being alone. It’s fundamentally a solitary activity. On the whole, things get done faster when you’re alone and you have space and quiet and time to think. A programming conference is a group of 5000 people who get together in order to be alone. You will be misunderstood by the other disciplines of the business. Your manager will set up a suboptimal work environment, will pester you to make more checkins and count your lines of code. You will spend many hours failing to explain your occupation to people who really weren’t all that interested, thanks. You will at some point be replaced by a low-cost engineer in India and it will take a long time before anybody notices the difference. In fact, if you ever get really good, there will only be a few dozen people in the world who actually understand what it is you do.
But most of all, programming, for me, is a calling. It’s not a 9-5. It’s not something to pay the bills. It’s not a hobby for the weekends. It’s not just demoing a cool product, or making the front page of Hacker News. It’s not a paper in some journal. It’s what I have to do. The same as eat, sleep, and breathe. Just because you get fired doesn’t mean you stop coming to work. If you take away my computer, I will build one. If you take away my parts, I will write the programs on paper. (And I have both the hand-built computer and the notebooks of program listings to prove it!) It’s non-negotiable. I will consider retiring after I am dead, but no guarantees.
But why on earth would I ever want to stop?