From String-Slinger to Pixel-Pusher
I graduated with a B.M. in Piano Performance. Surrounded by Steinways, symphonies and stickies (see above), I left college assuming that music was all I could—or should—be doing professionally.
Sixteen hours after nailing my Senior Recital, I watched my twin brother receive his diploma as a Georgia Tech Yellow Jacket with a B.S. in Computer Science. I never understood what a fun guy like Jonathan found so fascinating about a tech field. To me, programming was more about circuitry than creativity.
Fast-forward 3 years to September 2016, when I picked up a menacingly thick red book entitled “Front-End Web Development: The Big Nerd Ranch Guide.” It was a dare from Jonathan—I read the book three times before I understood [any] of it.
Several Codecademy/Udacity courses, algorithm books, tutorials and a shipped Node app later, I’ve discovered that not only is coding creative, it challenges you to think about everything in a completely novel way and forces you to cultivate solid work principles to which other professions only pay lip service.
In the interest of biasing toward shipping, I will condense eight months of learning to 5 programming skills you can apply to any profession.
1. Learn to Learn
When learning a foreign language, you are associating familiar ideas with new terms. But to learn the language a computer understands, you must adopt a mindset completely foreign to the way a human brain normally processes information. Computer Science is the adolescent of the academic disciplines and is evolving daily as we find new ways to leverage technology. A developer thrown into this context is challenged to cultivate radical learning habits:
- How to arrive at the same solution through different approaches. Your ability to view information through a gamut of lenses is critical to communication, teaching and problem solving.
- How to be comfortable with being uncomfortable. You will never master your field, so curiosity is your greatest asset…and your only hope of job security!
- How to abstract and implement design patterns from an example. You may not be able to fully understand someone else’s work, but you can replicate their approach and apply it in your own work.
2. Prioritize Tasks
It’s easy to complete tasks when they’re handed down to you, but programming often requires dual skill sets as “expert” and “project manager.” Your app’s success depends on your ability to sift through an ocean of good ideas and pick only what’s necessary to make it functional now. In the field of music composition, you can start anywhere in your project; in coding, you have to build your application layer-by-layer so it is usable at any stage.
Simple planning tools like Trello and Pivotal Tracker make it obvious what features are core to your project’s value. Have a cool idea? Compare it to your other ideas and decide where it fits in the scope of your project. A styled-up user interface for your banking app is not half as critical as encrypting user data or designing your server to gracefully handle errors.
The punchline for non-programmers? Ask yourself what is preventing you from sharing your project with the world, and move those items to the top of your to-do list.
3. Iterate to Perfection
The first time I was ever called a “perfectionist” was in my high school precalculus class, when my math teacher noticed how precisely I drew my graphs for a test.
Luckily, programming practices help bound perfectionist tendencies. Code can always be refactored and class names can always be improved (can I get a witness?), so the only way to get something done is to bias toward shipping to make your application a minimum viable product (MVP for short). Here are a few mantras developers abide by to steer their projects to success:
- Write an isolated chunk of code that accomplishes one thing. Not two-and-a-half things.
- Ship now. Write code that works today.
- Iterate later. Optimize your existing codebase as the scope and complexity of your project grows.
What if you’re not a programmer? These principles are just as applicable in your workflow:
- Create a solution that solves one well-defined problem.
- Ship a unit that has measurable impact today.
- Note areas for improvement in your solution and address them in another iteration.
4. Embrace Problem Solving
It’s the skill every profession is looking for and no one likes the sound of. Personally, it reminds me of that little Dutch boy plugging up leaks in the Holland dike. Who wants to have a career in catastrophe prevention?
Thankfully in the dev world, problem solving is an innovative, intuition-driven process that creates value. Instead of fixing a previous problem or pressing issue, you are entering a new frontier and brainstorming an elegant solution to the problem at hand that feels like a work of art and meets consumer needs. A good problem solver can turn an ugly problem into a beautiful solution.
Humans are fabulous at improvising solutions to complicated problems on the fly, but computers have to be pre-taught every nuance, edge case and error. Thinking like a computer—with no foresight or intuition—trains you to fully grasp both the problem and the solution by adopting effective strategies:
- Define the problem. Explain what you are solving to another person, or buy a rubber duck.
- Divide and conquer. Break up an unapproachable problem into smaller problems that can be tackled one at a time so that demonstrable progress can be made. Where to divide is often more important than how.
- Reduction. Transform a problem into another well-known problem for which there is a well-known solution.
5. Foster Collaborative Habits
Collaboration is the gold standard of business, but it often tastes like that grade from a college group project: sour. You probably could have done it better by yourself.
Collaboration is not like a college group project. It’s not about dividing up work. It’s not even about recruiting extra manpower.
In fact, you can collaborate with yourself!
So what is [good] collaboration? It’s an approach for accomplishing measurable results, built on these tenets:
- Communicate frequently. Set mutual expectations, touch base regularly, and identify obstacles.
- Make yourself replaceable, a.k.a. the Bus Factor. If you got hit by a bus, could someone take your place?
- Leverage individual expertise. Chances are you’re not (1) all-knowing, (2) brimming with infinite time or (3) perfect. Let your colleagues in on the areas you don’t specialize in.
Most non-trivial applications require more than one developer, so when your code represents just a smidgen of the project, you must play nicely with other contributors for your work to be meaningful. Modularizing your code, following style guides and making your code readable are just a few of the techniques developers have honed to make collaboration sweet.
TL;DR: You should become a programmer, right?
Whether or not you plan to hop into the command line after reading this article, I hope you’ve gleaned some insight into the way that effective developers work. And by championing the 5 universal skills of programming in your own work, you will stand out in any profession.
There’s one other lesson programming has taught me: that I can learn something new. Make it your maxim to stretch (and break) your brain. Don’t ever underestimate your ability to learn new things.