200 OK

My colleagues in Extension computing throughout the nation started an annual tradition sometime back of celebrating what are usually the best of the worst (or the funniest) stories throughout the year that happen to them or their colleagues (or their clients) in computing.

Being computing professionals, they appropriately call them the “404 awards”. Usually because in the moment, someone’s intelligence and/or sanity has gone missing. I don’t usually feel like mine are funny enough to tell, but I certainly have my share of 404 (and 500) stories.

But every so often, there’s a 200 OK.

I have a friend that I’ve known for over 20 years that is a captain and chaplain in the U.S. Army. We haven’t talked much in a long time, and earlier this year he deployed back to Afghanistan.

The other day he dropped me a note. He and his wife were scheduled to have a Skype call this weekend – and something was broken with Skype on her Windows 7 computer. I don’t do much desktop support, and it’s been years since I supported anything on any version of windows – and I’ve never met or talked with his wife. But in 20 years, I don’t think my friend has ever asked me to do anything like that.

I fired up Windows 7, downloaded Skype, then downloaded it again when I realized Microsoft and Skype have versions all over the place, got a few details, and headed to the forums. She had already been through a whole bunch of things that she had found searching for a solution, and had done a lot of homework on it already, but it still wasn’t working

There wasn’t anything definitive that I found, but I had some gut feelings about it. So another email or two with some details and some ideas on just walking back to square zero with one of Skype’s updates to something that was still in beta (or the “garage” they call it). I wasn’t sure what was going to fix it – but I had some steps and a plan and I was already readying an old Mac laptop as a fallback.

And in the evening, I got an email back – the opening line was “HALLELUJAH!!!”

I didn’t really do much. Certainly there have been other computing problems this week that have been more complex, that I worked harder and longer at finding a solution to. But they didn’t feel as good as this, and it’s been a long time since I had that “this is what I was meant to do” feeling.

I’m sure next week I’ll rm -rf a server again. Or blow the release of an app. Or jump to some conclusion about what isn’t working and break what is.

But today wasn’t one of those days.

Today was 200 OK.

Stanford’s Learning Experiment

I like data, I cannot lie.

Out of all the things I enjoy in my job, I think what I like the most is pulling together the bits and pieces of data that we have, aggregating it together and trying to extract some meaning out of it. Maybe it’s because I was a system administrator first, I don’t know. I like the logging, I like the queries, I just like doing it. It’s fun. It feels meaningful.

But I always feel like it is amateur hour when I do. Sure, I know my basic statistics, and if it’s a dataset about activity that I know about, I have an intuitive feel for what’s right and wrong about the data surrounding it. But I don’t really feel like I know how to make something meaningful out of it.

I was, and am, pretty excited that Stanford decided to experiment this fall in mass delivery of three topics, databases, machine learning, and artificial intelligence.

I decided to follow along with the machine learning class, because I was curious about the material, and I think it may help me make more meaningful relationships out of the data that my apps and systems collect.

If you want a perspective on the course from a professional writer, you can follow along with the course from Chris Wilson at Slate, but four weeks in, I wanted to share a little about how I’m feeling about it.

First, let me say what’s great about the course. Dr. Andrew Ng is really good at teaching. He is what I am amazed about when it comes to the best faculty I meet: demonstrable experts in their field that are able to connect with those of us who are not experts, and will likely never be. He has done something that I remember the best of the faculty I’ve learned from do, he’s guided us into having a better intuition about what’s happening with the various mathematical algorithms he’s presented.

Also great are the technical implementation of the course. The student assistants putting together the website, the video delivery, the submission system have all done a great job – especially given the constraints of what delivering a course to thousands (maybe tens of thousands) of students entails. I’m not the biggest fan of the Q&A forum format – but it’s not because of the technical implementation, it’s because I don’t think anyone has quite gotten the “mass of people able to fluidly from niche groups” thing right.

I have learned. And that’s what matters. I’ve completed all the review assignments, scoring 4.25 or better (out of 5) on the first try, learning if I missed parts of a multiple choice review question, and being able to resubmit the review questions with 100% credit on the second.

And I’ve submitted each one of my programmatic assignments with 100% credit on the first try.

But I’ve still felt lost (especially with the neural network assignments).

Part of that is me. I get lost in the math. I don’t know what is different about being able to follow and deconstruct variable names and statements in programming languages and trying to follow and deconstruct mathematical notation. Maybe it’s all the greek letters, I don’t know, but I struggle with it, I always have. I can see it in code, I can’t just “see it” in the math notation. That frustration is part of the reason I didn’t pursue graduate degrees, and what (little) advanced math there is in this machine learning class (we get to pretty much skip all the formula derivation) just serves to throw me off my game for a bit.

So the programming assignments have been great because they’ve helped to clarify the math for me – I come out of them (usually) having a better understanding of the math (but that’s only once I grok enough of the math to get started).

But here’s the one place that I think that the Machine Learning class falls short. The programming assignments are treated as the protected resource. And it’s not limited to Stanford, I think it’s endemic to most Computer Science programs, and that’s the great failure I think of Computer Science instruction.

We’ve been asked to agree to the Stanford Honor Code and not share code before the assignment is due. I can understand that given that if the course is structured to use the programming assignments as a “gradeable” resource (and the internet-wide course is sharing itself with Stanford’s own applied section of their CS229 machine learning course) – and it makes total sense that they would, because you can do automated mass-checking on outputs with mathematical programming. I don’t begrudge that.

But by treating the code as the protected resource, it fails the very thing that these programs need to be doing the most, getting us to solve problems with others, to build on each other’s work (just like we are building on written recognition research in our own programming assignment) – to begin to develop efficient, readable, understandable implementations of the methods to solve these problems.

At the least, there needs to be a time “after” the assignment for sharing and reflection. I’ve scored 100% and I still feel lost. My code pasts the test, but is it efficient? Is it obfuscated? Are there better implementations? How could I build on it and make it better? I still feel a little lost that I’ve gotten it right, I’ve seen hints of it in the Q&A forums where I could learn even more if I had the chance to compare and contrast. I’ve thankfully seen pushing-the-honor-code hints that got me started enough in the right direction past the math notation that the assignments themselves did not.

But that’s not possible in this course, because the programming assignments are still “open” after the deadline for reduced credit.

(It’s made a little worse that the “credit” for a course like this is moot, the internet mass of volunteers here to learn, not for a grade of any kind – but again, we share with the for-credit work of students at Stanford.).

I know from my own degree that Computer Science is not software development, and probably never has been. I think that things have changed in the 15 years since I got my own degree, not so much in the early courses where the algorithms still do the grading, but in the later courses. But it still hasn’t changed enough.

I am very thankful for the opportunity that Stanford and Dr. Ng have provided to us, to give us Stanford-quality instruction in a way that gives us a live progression with others going through it at the same time. I think that part of it may well be a coming future for education.

But until the software part of computer science instruction becomes a lot less of a protected resource in the process – this isn’t the future of computing education.

Enough with the rock star labels

I have a fundamental axiom that deals with wisdom and knowledge. In a phrase it’s this:

People that call themselves ‘gurus’ aren’t.

That’s why I can’t believe that I’m seeing more and more job posts that are seeking “rock star” developers.

I revere and envy the best in our business, the ones I see in dozens to hundreds of github projects, who write the blogs and posts that my google searches land on when I go to solve problems, and add to each of them the thousands in their workplaces that aren’t so visible, but are equally as brilliant.

I know first hand that the productivity and talent curve in software developers is a pareto distribution, and a few computational scientists and engineers have transformed human productivity along with (and sometimes in spite of) the rest of us – their colleagues in their field.

Stereotypically the rock stars of my age and just before were incredible artists that became coddled tyrannical adolescent assholes who trashed hotel rooms, trashed equipment, and drank and drugged themselves to death at ages way too young.

And you want to co-opt this term and encourage the ego and hire the developer namesake?

Are you kidding me?

I grant you this, you sure won’t see me advertising for one, and you sure won’t ever see me hire someone that calls themselves a “rock star” developer. Because the best in this business have confidence, ego, talent and wisdom.

At the risk of sounding like the premature old man screaming about the kids on his lawn, the best of the computational scientists and engineers that came before us didn’t call themselves “rock stars”

And the problems that the computational scientists and engineers in my generation and those after mine need to solve are far bigger than this “rock star” bullshit.

So enough with the rock star labels already.

Some Yaks Must Be Shaved

Today, my first-ever stack overflow question about tracing ruby dependencies/requires was still stuck in my crawl, even though the actual problem was long since solved.

Because, the core of all learning starts with one of two things: either a question or the internal drive of there has to be a better way

And sometimes in the journey of finding a better way, you find there isn’t. But the journey is almost always interesting, and in my career, I’ve found that journey to be critical to continually learning new things.

So I figured something out.

Is it worthwhile? For the world? no, not really. But it was for me.

I think Joi Ito describes it best (and well enough it deserved a citation on the wikitionary page) – but I’ll summarize:

Some Yaks Must Be Shaved.