Ravi Mohan's Blog

Tuesday, September 18, 2007

The Lame and the Blind - Proofs And Code in research software

There is this old story about a blind man teaming up with a legless man. The blind man carries the legless man on his shoulders and provides the locomotion while the sighted cripple tells him where to head.

Similar divisions of labor exist in enterprise software (think "developer" and "analyst") but this two fold division of labour is exacerbated when one focuses on research software. Here the scientists are the "sighted folks" who know where to go but can't move and the developers are (ideally, as we'll see later) the folks who know how to move the project forward by writing code, but don't have the requisite mathematical/scientific skills to navigate and choose one direction over another.

Earlier today, I was talking to a scientist trying to move a multi million dollar machine learning project forward, who was feeling hamstrung because it was impossible to find a few people who could follow advanced calculus and also write good C code.

Unlike in the folktale, a real life arrangement consisting of a blind man and a cripple would be very inefficient, with the occasional fall, not to mention the constant stubbing of toes and odd outburst of swearing. But equally, nothing in real life mandates this kind of "pairing". Nothing prevents a scientist from learning how to code (except a feeling that coding is a relatively "blue collar" activity) and nothing prevents a developer from learning the requisite maths and science (except that most developers, especially the enterprise/agile/dsl types either don't have the caliber to learn hard math or think erroneously that these skills are beyond them or just don't want to work that hard).

The few folks who do master both proofs and code, can and do make a tremendous difference. The very best people in every research area that incorporates software and maths are very capable scientists/mathematicians and very capable programmers. Peter Norvig is an example. As is Donald Knuth. Or Manolis Kellis. Or Yann leCun.

If you are running a research software project you'd want to staff it with high level multi-class (think dungeons and dragons) scientist-mathematician-developers. Unlike in D and D specializing in one area does not need to involve trading off the other.

After all the lame man/blind man arrangement is not the best possible one. The best (and normal) situation is having two (or n) people who can both walk and see.

8 comments:

Nested said...

I don't understand what 'proofs' have to do with your basis thesis. The idea that programmers working on something in machine learning should have some background knowledge of the field sounds reasonable enough. It's hard for me to believe it would be so difficult to hire people who studied the topic in University. Maybe they should be looking for Lisp programmers instead of C :)

Ravi said...

> I don't understand what 'proofs' have to do with your basis thesis.

Very good observation. I intended to write something on this but didn't.
Next post.

For now, think of the ability to write proofs as something that scientiss or mathematicians can do but most developers can't. Just like well designed, readable, high performance code is something that good developers can create but most scientists can't.

"programmers working on something in machine learning should have some background knowledge of the field"

I am not talking of "some background" . I am talking about people who are experts (in, say, machine learning) and also excellent developers. How many of those have you encountered? :-)

Please note I said (emphases added)

"it was impossible to find a few people who could follow ****advanced*** calculus ***and*** also write ****good**** C code"

I didn't say these people couldn't be found anywhere in the world. In this particular context, they don't exist.

And as to University, you *really* don't know how Indian Universities work, believe me :-). Oh yes I was talking to someone in India not say, Boston or Mountain View! :-)

Thanks for the comment!

Nested said...

And as to University, you *really* don't know how Indian Universities work, believe me :-)

I have to admit I know nothing of Indian schools... It's a shame to hear that though. I figured that given the large population, even if (for now) a comparatively small percentage of people in India received an education on par with a good school in the US, that might still be a very large number of people in absolute terms. So I figured there would be people to choose from who'd had a background in ML or at least in AI.

Ravi said...

Vlad,
"I have to admit I know nothing of Indian schools..."

Nothing to be ashamed of :-) Count yourself lucky. I don't know much of Canadian schools either. I should have been clearer about the context in the original post.

In a nutshell, The Indian Institute of Technologies (IITs) provide a good (in some respects) *undergraduate* education. There isn't that much original thinking here either. A few years ago, some professors in an IIT banned the availability of Internet access in the dorms because they wanted the students to "not be so introverted" .

Once upon a time, in IIT Madras a (male) student could be fined by a professor if he gave a girl a ride on his bike! (This would have led to a lynching of the person trying to enforce the fine in most Indian campuses, but they actually implemented this).

What I am trying to convey is that free thinking isn't all that popular even in the IIts. There's too much respect for hierarchy and conformance. This is not conducive to promoting original thinking or research.


Most of these people who finish their undergraduate education in an IIT immigrate immediately (I don't blame them, just stating a fact). *Graduate* study isn't all that great though.

There is no university in India on a par with (or even approaching) say Stanford or MIT for graduate or postgraduate studies. Most "research" that happens in India is absolutely horrendous. There are a very few talented *people* who do good research in spite of the system, but the system is (very) sub optimal.

And the idea that having large population implies that even a small fraction acquiring a good education means lots of people doesn't really hold. Compared to the size of the population, the number of people receiving a worthwhile education, especially in programming/research is minuscule.

And the Indian software Industry is structured so anyone with a 2 day training in how to write "hello world" can get a job as a "software engineer", especially if one has the right undergraduate degree (the ones that are useful to get a US work visa). The work that comes to India is mostly of the "maintain this steaming pile forever" type which really doesn't encourage original thinking..

As a simple example, how many killer startups have come out of Bangalore? Surely there should have been a few by now , after a decade or more of outsourcing? People are content to clean up the enterprise crap offloaded from the West forever.

I don't really mind all this though. It just leaves that much more on the table for the few who think ofr themselves and run for the fences.

Anonymous said...

Brilliant analogy!

As a scientist, I see where you are going with "proofs". I'll wait for the promised blog entry before I comment.

Physicists who can code (well) are very rare. I learned Python and am a so so programmer (I use SciPy when I can, Matlab when I can't).

Scientists are generally too busy to devote time to master programming. More's the pity. Sighted and lame indeed.

Anonymous said...

Whats more disturbing is ...

If you look at some of the leaders in technology today, they don't have a college degree.

In India, on the other hand, "ALL" software guys have atleast a graduate degree and most a masters.

Yet, Not one ! Not one product based company , Not one technology (language / compiler / OS) that came out of there ...

Most companies should take the "Technologies" from the end of their name, and put "Travel Agency" there instead. Infact, if you really think of it, Most do just that !

Sad ! Really Sad !

Anonymous said...

"most developers, especially the enterprise/agile/dsl types either don't have the caliber to learn hard math or think erroneously that these skills are beyond them or just don't want to work that hard"


ouch! that stings!

I am not sure I agree completely with your views, but I am beginning to tire of endlessly writing "enterprise", "heavy lifting" ruby/java code.

Your post was a like a bucket of cold water in the face.

Not really pleasant but very thought provoking. Kudos for having the guts to call it as you see it.

Anonymous said...

I definitely agree with your views on the substandard state of the "Educational system" (at least in Engineering colleges). I have actually seen people ("Computer Engineers") with good grades from these universities asking "What is a pointer?", and believe it or not, they fail to understand basic concepts even after a master's degree in Computer Science from a US university. These are the class of people who, forget proofs and code, but are in the wrong field altogether and should have been in a non-scientific field. Unfortunately everyone goes with the tide and with the seemingly ever increasing number of Engineering seats in India, most of the students end up taking a wrong career decision.