The average programmer starts their career with an education in the abstract nature of building software. Arrays, linked lists, pointers, operating systems programming, data structures, and other technical topics. Fundamental pieces for creating effective, efficient programs. But if you want to stay employed, or to make things that millions of people can use, or just build something to show your friends, it is more effective to keep something else in the forefront of your mind. Like Google and Apple before you.
Google’s success was quiet, at first. In the late nineties, I started hearing about their search engine on Slashdot. In a world where Fetch and Gopher had been useful less than five years before, and Yahoo! sold the top results, I could type something into a text box and Find It. Wikipedia wasn’t that big then, either, so being able to say, “Huh, I wonder how long it takes to soft boil an egg,” and finding ten discussions about boiling eggs was revolutionary. And Exactly What I (and other people, apparently) wanted.
Computers don’t naturally do what anybody wants. We’re analog. We have thousands of disparate, unconnected inputs every minute. We then sift through all of them to assemble a central stream of consciousness, and continuously output a long series of motions with variation in direction and intensity no computer can yet match. No computer probably ever will match.(2) Given this constant input, and all the control over it other people attempt to gain, any tool that makes our lives simpler is welcome. Apple interfaces have worked to provide that since the Macintosh. It’s a simple white box with easy to push buttons. As long as you don’t throw around the plastic box, it is hard to break. It just does what it says it will do; sometimes more, but never less and very rarely is it frustrating because it makes doing something that you think should be easy hard.
These are excellent examples of software that focuses on People.
As an engineer(3), my focus has been on writing software that made technical tasks easier for people. I work to design databases that are simple to use because of their clean, logical, effectively connected organization. I work to name my variables and document my code well, so that the next programmer(4) doesn’t curse my name. I ask lots of questions about how the people I’m working with want my code to talk to theirs. I try things I think are stupid, because they probably aren’t stupid if you didn’t write the code(5).
It’s funny that I meet so few programmers who have read, “Beautiful Code.” Because while it is a book almost entirely consistent of esoteric examples, every one of them is pretty well documented. And each of them makes some sense as to why it was picked. And most of them are pretty…. Well, simple. Especially the ones where someone picked somebody else’s code. (the JUnit code stands out)
So my advice to you is to make your code as simple as possible, but with depth and flexibility under it. And aim for the same in your interfaces. And your documentation. And your life, when it comes down to it. Simplicity is the most complex thing to make.(6)
I can’t teach you any of that, I don’t think. But I can look at your code and trace the logic and perhaps dig into a bug or two, if you want. And tell you what I don’t understand; if I don’t understand it, you might want a comment or two – I can program in a lot of languages.
1 – Not ALL programming. There is definitely some programming out there that’s all about math. Kinda. It’s still about people, though, because people hate (and are naturally bad at) math and computers help do it. (Did you know Babbage really just wanted better logarithmic tables? ‘Fun’ fact.)
2 – Why bother? There are lots and lots of people, they’re pretty good at being people, and it would be really expensive to make one from component parts. I don’t understand the attraction.
3 – Sort of. It’s a long, complicated story and questionable definition.
4 – Most times, this next programmer is me. Making this what some would call, “Self Care.”
5 – “I’m the greatest sword fighter in the world.” “And you wrote the software.” “Yeah. That, too,” – Hiro Protagonist, who writes interfaces for himself. And Is Unemployed. (Snow Crash, Neal Stephenson)
6 – This is where I COULD go off on a glassblowing rant. I could talk about how hard it is to make a simple thin round cup by hand, like you can buy machine made at Ikea for about ten cents. I could go into how mastery of any material requires understanding of its limits and flexibility. How open-ended problems are the hardest problems, especially to make look right when if you touch THIS special tool to THAT particular area at the wrong time you’ve lost your chance at making perfection until you start again. How learning to make physical objects informed my perfectionism in code, and the massive pile of broken glass I have produced was totally worth it. I’d never do such a thing.