Programming Wisdom, My Lessons
My Short Journey, My Biggest Lessons
Though I’m 63, I haven’t been programming as a career for many years. For one thing, personal computers were very expensive when I first got started. And they weren’t very powerful. It’s a totally different situation today. Anyone can program. Anyone can find an affordable, adquately powerful computer.
Don’t ever let an old man move into your soul.
Lesson 1: You Don’t Have to Be a Genius
Programming is the New Literacy. Ages ago, only a small percentage of people could read or write. Probably most people could speak their mother tongue. But almost no one could read or write in that language. Today, we have a similar situation with computer language or “coding” as the kids call it. I’m simply talking about the human language we use to speak to a machine and understand what it says back to us.
Just as not everyone who writes in English is TS Elliot, not everyone who writes in code is John Von Neumann. Does that mean everyone else should just quit writing in either English or Code? Of course not.
There is no limit of ideas that can be created and processed continually by a computer. There is no end to the services that computers can offer to solve going forward. These will all be written in code. Many times by people who are not geniuses. They will most often be written by people who are dedicated to making them work correctly and re-written so that they can be refactored and maintained.
Lesson 2: Programmers Must Be Resilient and Persistent
It helps if you’re a great problem solver, but honestly, even geniuses have bad days. If you have a an IQ of 180 and throw in the towel on a tough problem after 6 hours, the person who got it done after 10 hours provided more value to his or her company than the genius did, even if that IQ was 125 (and assuming the person wasn’t being paid as a genius).
My point is, it’s not enough to be really smart. It’s better to be pretty smart and persistent and resilient.
Lesson 3: Get Really Good at the Basics
There are some things that you do over and over again as a programmer. You start with a big problem, and you have to break it into smaller problems. And then you figure out what kind of data structures best suit your solution, and what kinds of iterations lead most directly to what you need. Then when you start getting the right answers and passing tests, you have to think about not wasting time. And you think about how you can express your solution most clearly to others, so the next guy to come in and read your code can follow you.
Sometimes when I hear a problem, there’s a voice that shouts in my head about what kind of data structure the code needs. If I’m writing in Python, for example, I’ll hear “Dictionary!” or “List Comprehension!!!” It’s it’s Javascript, then I hear “Object.keys!” or “String Splice!” Sometimes, I hear a question: “Recursion?” “Create class instance?”
I remember when I very first got started, I had no idea what to try first. I was like a fish in water who didn’t know how to swim. But then, honestly, since I’m a fish, there must be something inside me that already knows how to swim! That’s what I want to listen for. That’s the voice I know is inside me somewhere.
If you solve enough problems day after day, year after year, this voice begins to get pretty clear.
Lesson 4: Enjoy The Wins
Most of the time we’re working with something that doesn’t work. We got the job because it’s broken. But life is full of jobs like that. This is what plumbers, handymen, mechanics, and countless other people do. Only some jobs give you a payoff right away. Programming many times is rather stingy about your payoff. The sooner you fix a problem, the sooner you get another problem to fix.
My advice is to find a way to celebrate those fixes. They are wins. They should earn you an “attaboy” or “attagirl”. And you hopefully will find a way to give yourself these wins. I happen to like chocolate covered almonds from Starbucks. Or I might like to print out a snippet of my favorite code and post in on a wall near where I stream a Netflix comedy special, or whatever I happen to enjoy watching.
Collect your win! That’s all I’m saying. Make sure you remind yourself what you accomplished today. Put your code on the refrigerator like your parents used to do with your drawings!
Lesson 5: Think Different
I almost think this idea must have been channelled though Steve Jobs. It’s the basis for all problem solving. Problems exist as mental constructs. They’re conceptual.
So why not alter the construct such that they have a hard time being visible?
Find different perspectives. Use your imagination. Think in cartoons. Pretend you’re a piece of data travelling through the program. Or imagine the entire program is happening underwater or out in space? Or imagine you’re inside a video game, how would you write a program inside of a video game so it would work in your job? What if you were a program yourself? What if you weren’t writing a program, but the program was writing you as you tried to write a program?
There’s no end to this type of exercise. If this is too hard, go take a nap. You’ll think different while your’re asleep.
Whatever you do, get out of the mindset and perspective that created the problem. For example, if you’re solving world hunger, let go of your scarcity mindset. At the very least, pretend that there’s plenty for everyone. If that were true, then how would you go about solving the problem?
New Lessons Happen Every Day
You never learn it all. Learning is a mindset, a mental. The eternal child within is always a youngster. He or she knows how to enjoy life as well as how to learn. Don’t ever let an old guy move into your soul.