Thursday, March 06, 2008

Scruffy vs. Neat

When I used to work in AI as a grad student, there were two rough camps. There was neat AI and there was scruffy AI. Neat AI was based in mathematics and was posited on the idea that you created sound mathematical models from which you could derive results from. Scruffy AI was about trying a bunch of things and seeing what worked. Scruffy AI didn't care there was mathematical formalism. It looked at stuff that was interesting, and tried to make progress.

I believe these terms can be applied to intelligence. When someone says "that guy is really smart", and they are of the academic variety, they usually mean they are smart in a "neat" way. They understand a lot of hard math. They can draw high level conclusions. Neat people often prefer the world in a neat way.

Although computer science arose from mathematics, and many early practitioners of computer science were mathematicians, the field is fundamentally scruffy, and that's because computer science, at its core, lies in solving problems through the use of programming languages.

I know many people, including the esteemed Donald Knuth, see the basis of computer science as algorithms. Well, maybe that's true of computer science, but it's not true of the software industry. Algorithms are often phrased in the hermetically sealed world of math. People solve graph algorithms because it abstracts away many of the details an algorithmitist doesn't care about. Practical programmers worry about a myriad of real details.

They care about version control, about Windows APIs, about various standards of image and sound, about IDEs, about bandwidth. You have to both know a lot of grungy details, and learn how to figure out grungy details.

A neat computer type wonders why there needs to be more than one language. A scruffy guy either accepts the fact that many people use many languages, each with its strengths and weaknesses, and they learn to deal with it, or they even embrace the idea that there are many such languages, and find them all interesting.

Of course, these two categories are not mutually exclusive. One can like both the scruffy aspects (or at least be proficient in it) and also be good at the neater aspects, too.

And then there are those who aren't particularly good at either, even those who have a piece of paper to their name that professes their aptitude in computer science.

Practically speaking, it helps to be scruffy rather than neat, because the world of computing always changes, and in arbitrary ways, and you have to learn to live with that fact. You can't say "Let there be Lisp and no other language forever and ever, so I can concentrate on writing programs
instead of learning syntax."

Maybe the field will mature more, but it seems like decades away. In those decades ahead, we'll look back at today, much as we look back at the coders from the 60s, and wonder how they could deal with so little abstraction, and how much time was spent coding in what seems to be an awful way.

I also believe that we may experience at least one significant change to the way view programming, even more significant than object-oriented programming, though perhaps not reaching the level of "programming" using neural networks.

So even if the neat smarties get more credit for being smart, scruffy types are smart in their own way, and in a way that makes it more likely to be successful in the industry.

No comments: