24 August 2016

In Silicon Valley, employers want you to love what you’re doing. It needs to be your passion, your existence, your “I Ching.” I just don’t think i’m built that way.

Everything in my life that I’ve ever wanted really badly has never ended up happening. The job I really, REALLY want, I never end up getting because when I WANT to impress someone, it never ends up happening.

If I see a job and I’m like yeah I could be pretty good at that. If I’m lucky enough to get a couple of interviews I think “I could be pretty good at that job and I think can do it really well.” That’s the job I usually end up getting an offer for.

I have to go into the interview not caring whether I get it or not. I have to be “on”, comically. I have to find an opening and land a joke and when people start laughing they start relaxing. If I leave them and they’re still relaxed, I can usually get an offer from that.

The other thing is complex “programmer” math. Folks, I graduated college in 1991. HTML didn’t exist, at least not in its present form. JavaScript, python, java, PHP and Ruby on Rails didn’t exist. Practically every convention that we currently use in computing has evolved into being since then. When I went to college for information systems, I learned SQL, RPG, COBOL and C+ [back then there was only one plus]. The only one of those in current common use is C. And it’s object oriented now with two plus signs.

Asking me about complex “programmer” math is an exercise in futility. I currently know a little bit of Ruby, PHP, JavaScript, enough python to read code but not enough to write, and the barest notion of Java in the places where the syntax coincides with C. All of those are self-taught. I learned them because I sat down with a book and forced myself to learn. And then began working on real world problems for clients using the new tool.

In one interview a 19 year old Chinese girl with thick glasses and even thicker accent (a staff programmer at the company at 19!!!!) asked me to write a b-tree and became angry when I wouldn’t even try. I told her that was a problem that smarter people than I had solved and we didn’t need to rehash it now. Honestly I didn’t know if I remembered how to write one. I could look it up and learn it, but why? It had been done 1000 times by good programmers and I wasn’t going to revolutionize the code so why bother?

Yea, I pulled the ultimate white privilege “Change the rules if you can’t win” but I had already decided I didn’t want to work for the company and was being purposefully argumentative.

What I mean to say is this in interviews Silicon Valley tends to focus on theoretical programming concepts none of which usually end up getting implemented in the real world. Real world problem-solving has a tendency to be much more boring than the theoretical stuff. For example, there’s data from this REST endpoint that needs to go on your page mixed in with data that’s already there and you need to do it in an elegant way that doesn’t block user action on another part of the page but also lets the user know that something is going on behind the scenes and the page they’re looking at may change at some point in the near future.

Now the judge of whether or not all of that happened successfully is really four or five different data points not just the code that makes the REST call. First you need to make sure the REST call begins in A way that doesn’t block user interaction with anything else going on on the page. So what that means is waiting a few seconds after the page completely loads and loads all of its images in order to begin the code that starts the REST call. Once the REST call is made you need to wait for the response in a way that again that doesn’t block anything else going on on the page. That usually easy to do with jQuery, but jQuery is falling out of fashion with most JS Rev’s that are embracing ES6. jQuery’s AJAX stack is built on a promise interface so it’s usually easy to put a post action “onComplete”. Now updating the user of the result can be done in 1000 different ways and may need to be done in more than 2 or 3 practical ways depending on the page.

I said all this to say, knowledge in programming does not equal FINESSE. Any programmer may know how to make the call and update the user in a pop up alert but it takes an experienced programmer and/or II integration specialist to show a progress indicator while the call is being made and unobtrusively slip the data into the DOM and not let the user know unless something goes wrong. That’s programming finesse and its much more difficult to teach to people who don’t love code. It also comes mainly from experience and from a personal decision on the level of fit and finish you’re going to consistently deliver. None of which has anything to do with education.

A love of code is different from being able to regurgitate the solutions to commonly solved problems like b-trees. Its considerably different than the “put data A in slot A and data b in slot b” that is taught in most computer schools.

It is also, coincidentally what keeps me coming back to code. I love looking at beautiful code and reading thru it. I love seeing developing patters and where code is smart and takes advantage of reusibility. I love beautiful, concise classes that once written, you cannot live without. Good code that’s written with finesse is a pleasure to behold.

Or maybe this is just a massive rationalization for not remembering how to write a b-tree.

Two things can be true.