I just discovered Kathy Sierra and her Creating Passionate Users blog. I'm already signed up for her tutorial at OSCON and after reading just a bit from her blog, I couldn't look forward to it more. I basically have an instant reaction to all of the posts I've read or skimmed so far. She seems to be verbalizing a lot of the reasons that I think Ruby on Rails, 37signals, our applications, and my other endeveaurs have made some waves.
But let me riff on just one of them for a while. The idea of Hiring Different. This rings true to me in a lot of ways because I was never Computer Science Smart. While I can appreciate the beauty of mathematics and algorithms, I could never be that person. I tune out, like I did in high school earning an F in mathematics after a year of copying other people's papers and skipping class as much as possible.
So that's actually why I was in my twenties before I got into programming (that sounds old, but that's recent history when you're 25). I thought that you had to be crazy about math to be a programmer. I feel like that about a lot of subjects forced upon me. I think I've boiled it down to the fact that I don't really like hard problems. That's of course another piece of programming sacrilege. When you watch programming from the outside, everyone seems to love the hard problems and its widely celebrated as the interesting accomplishments.
But there are so many simple problems that haven't been solved. Or haven't been solved well. I'd rather solve them. And if I must tackle a hard problem, which you'll be hardpressed to totally avoid, I'd rather enlist the help of people who like that or judo the hard problem into an easy one. Because for me its all about value (and probably attention span): If you can get those magical 80% of the solution for 20% of the effort, how about just finding a way to cope with the missing 20% of the solution? If you can, you get to solve five easy problems (with comparable value) instead of solving one hard.
Naturally, this doesn't work for all situations or everywhere (I'm guessing). In my current context, building web applications, I've found it to work exceedingly well. And that's of course what makes it interesting in relations to Hiring Different. I would likely not fit into the celebration of hard problems and mathematical aptitude that places like Google, Microsoft, Joel Spolsky, and others see as the filter for good programmers.
And I think that's a shame. Not on my own accord (he said with arms crossed), but for the lack of diversity it creates, as Kathy Sierra notes. And in turn, for the lack of products coming out of that diversity. Products I would have liked to buy and use.
Personally, I've always liked to see the mathematical problems being dealt with in Computer Science. Mostly because it shows how hard problems (from my perspective) can easily be transformed into multiple easy (or at least easier) problems.
I think that's at least one of the reasons they use mathematical examples so much. Another is of course that most Computer Science studies came forth from the Mathematics department in universities. So I think the teachers have a hard time detaching from the mathematical aspect of the programming curriculum.
And what is difficult for one person might be almost trivial to another. Which is why I agree with you when you say that diversity is a good thing.
Programmers often have a hard time to think outside of the box and as such can hardly find the most logical solution to common problems. Which is why non-programmers often come up with a more elegant solution to those problems.
And hard problems are not really a good filter for good programmers anyway. Programmers should be creative, dynamic and most importantly, they should fit into the development team and should be able to adapt rapidly to changes in the problem domain. Hard problems do not really test those skills.
I felt the same way about mathematics and the standard approach to Computer Science. I got the same F year after year. Despite that, I turned out to be (if I may say so myself) a pretty damn good programmer.
The same can be said for many creatives I'd imagine. So many of todays great companies have been created by people fitting this mold, why do they later demand only the most structured thinkers?
There's something to be said about those that can think on their feet, adapt to change, and solve problems the right way rather then the way they were taught.
Challenge by Hunter on May 20, 17:25
This really rings true to me. Never the best CS student, I switched away from it in school to study economics but I make my living writing Web applications and I think I'm pretty good at it.
"how about just finding a way to cope with the missing 20% of the solution?"
Another way to think of this is "meeting the computer part way." Best example I ever saw of this was Palm and the Graffiti writing system. Hand held PDAs kept failing in large part because it wasn't possible to do hand writing recognition on a device which you wanted to carry with you everywhere. Graffiti was about figuring out how to cope with the missing 20%. Worked great for years until they ran the company into the ground. (additionally insights based on hardware limitations are never long term barriers to competition per Moore's law)
I agree with you, but I came at it from the other way. I was always good at math, and I loved solving hard problems. One day I woke up and realized you can pretty much solve any hard problem you come up against if you just throw enough time at it -- and at that point the hard problems became boring.
The fun problems are the one's you're calling simple. They're the ones that take time the other direction. They take a relatively short time to solve and if you do them right they probably end up saving more time than you put into them. Its Occam's razor all over again.
There is a universe of beauty in the interactions of simple things.
While I don't think that computer science and mathematics are mutually exclusive, I would have to agree that developing web applications doesn't require knowledge of calculus. I'm much more of a practical application sort of guy and don't like to bother with a lot of theoretical stuff...Life's too short to waste time learning formulas and patterns, just get it done and make something you're proud of (that ideally is making money for you). My co-developer is the complete opposite and we butt heads all of the time, because he'd prefers overanalyze every problem. We seem to feed off each other, though, so while at times it can be frustrating, it works for us.
The beauty of software development is that it's a big tent. There's room for both types of people. If it wasn't for the first type of person (math and science geek), we wouldn't be having this discussion because there'd be no OS, no browser and no internet. If it wasn't for the second type of person, we wouldn't be having this discussion because there'd be no rss, no blogs and no Rails framework. We need all of you. And then some.
I can't claim an F, but math is the reason I got a minor in CS instead of of a major. The funny thing is, a couple years ago when I made Flash games I re-learned a ton of calc, trig and geometry and found it really fun and interesting... but only in the context of programming. Understanding the formulas in code is easy, but write it in "math speak" and it confuses the hell out of me.
David, this is a post that is long overdue. It seems that alot of companies these days are following Microsoft's and Google's footsteps in regards to hiring. Google is the only company I interviewed with that wanted to see my grades from my undergrad years. I was a late bloomer and didn't do too well in my early years because I was spending my time writing open source software for BBS's (bulletin board systems) even before the term "open source" was coined. Too bad there is no record of this experience on my transcript.
You are right about having diversity. Christian Romney's comment about needing both types of people, brainiacs and code monkeys, are important to a company. Google and Microsoft seem to only want the brainiacs. I wonder why Microsoft was so slow to enter the internet arena, and why Google is now slow to enter Web 2.0. So instead of hiring code monkeys the first time around, they go out and acquire the companies where the code monkeys work. Makes alot of sense huh? :)
Great thoughts - and hope for all the math-challenged. I was always very good at math and at some point became bored with programming: It seemed like a never-ending stream of little puzzles, most of which were solved easily, some were harder, a few almost impossible and challenging, but all the same they were puzzles. Time to move on.
That's when i discovered software architecture, which is the art of avoiding these puzzles in the first place. With good architecture, hard problems do not develop - or develop very rarely and most of the time you know you could have done better on the architecure part instead.
Computer Science / programming has become just like real-world architecture, needing both left and right brain skills to do well. And that's beautiful and makes it enjoyable every day.
The question is not "can I solve this really hard problem?". The question is: "Can I design an architecture that will make the problem trivial?".