Ravi Mohan's Blog
Tuesday, August 07, 2007
Indian "Journalists" strike again
SmartTechie (what a horrible name for a magazine !! ) has an article purportedly written by Roy Singham, CEO of Thoughtworks. Having worked at Thoughtworks and having met and interacted with Roy, I am very skeptical about the attributed authorship. The article has many examples of "Indian English" and is very tortured writing to boot. Roy is a very articulate speaker and writer and speaks perfect "American". So if you read the article and go "WTF?!!" do keep in mind that the writer is probably some Indian hack pretending to be Roy
Here is a sample " To over take other automobile companies and to reach at the helm, Toyota had devised a comprehensive action plan which included the Toyota Production System. " .
"reach at the helm"? WTF? You expect me to believe Roy writes or speaks like that?
I can only conclude that some half baked journalist essentially made up the article and attributed it to Roy.
Thoughtworks is an excellent company, with many world class writers in its ranks and this kind of ghostwriting goes against everything Thoughtworks stands for. And if the editors at the magazine must have someone pretending to be Roy, they magazine ought to get someone who understands how to write English well.
It amazes me that people whose profession is all about writing well don't know the rudiments of the language in which they write.
Saturday, August 04, 2007
On Having Friends Who'll Change the World
A few months ago I and a few friends started meeting at the end of every month for an "iteration review" of how much progress we've made (or not) on our "life work" that month. The structured part of the meeting consists of each participant reporting what went right, what went wrong and what was learned during the preceding month and what the plans for the coming month are. Anyone can ask clarifying questions. This is followed by unstructured discussion over dinner (and drinks, for those who indulge in that particular vice). Apart from the obvious benefits of meeting up with friends regularly, the act of vocalizing what was learned has tremendous value.
The last meeting was focussed, for instance, on the difficulties of transitioning from the habits instilled from working in India's "Silicon Valley" to those needed for doing world class work, particularly in research/scientific software, the price one needs to pay and the metrics of progress. While that was a fascinating discussion, what struck me then was how lucky I am to know people who are unwilling to accept the status quo and exert themselves to become the best they can be.
This extends beyond the attendees of our end of month meetings. I just got back from lunch with another friend I haven't met in a while. I am amazed at how much she has learned in the intervening period and how many different areas of improvement she has targeted for the future. Indian society has the nasty habit of grinding down women who want to excel in any field, but then she has extraordinary potential, so that will be an interesting career to watch. If she ever starts a company, I will be the first to invest in it.
On reflection, I realize that I subconsciously rank people by (a) their potential to excel and (b)the ratio of actual achievement to potential achievement. I pay attention proportional to how high I think they score on these parameters and so I end up ignoring people who, in my subjective opinion, have low scores on both parameters.
I am not very certain that this is the "right" way to judge people or decide who to befriend (I guess I am an unconscious "elitist") but it results in my knowing people who strive to excel. And given the caliber of some of my friends, I effectively end up knowing people who'll change the world.
Sunday, July 08, 2007
Misquoted in the Media
A reporter from the Economic Times asked me for some information about our wargames club, conducted a telephonic "interview" with me and a couple of friends, and then wrote an article in the paper.
So far so good. What is not good is that he has quoted me as saying things I never said , and in horrendous English, to boot.
Here is what I am supposed to have said.
(Apologies for the terrible English and mangled tenses. *I* didn't say *any* of this. The journalist just says I did. The language and ideas are his, not mine. I checked with some journalist friends of mine and apparently this practice of expressing journalists' ideas as "quotes" from the people they interview is common practice in India! And I thought only the Indian Software Industry was a con game!)
Anyhow, onto the quotes (from the Economic Times dated 8th July 2007) - my comments below each quote
"We are an informal group of Wargamers based in Bangalore. We are interested in topics like strategy in wars, the history of warfare, historical re-creation of battles, battles of all times and eras. We do not use miniatures in our games but make do with suitable counters instead,” says Ravi Mohan, group co-ordinator."
[ I never said this. This paragraph is lifted straight from our club website. See the first paragraph].
The report continues to "quote" me.
In the last one year, the group strength has increased substantially. “
[huh? This is outright fiction. The club membership has held steady over many years and there were no additions in the last year. Needless to say, I never said this either! ]
As kids, we all use to play games such as this. So there is a natural interest. And, as awareness spreads, we'll see more people joining the fray,”
[Aargh! This is tortured, atrocious and ungrammatical English , and cliched to boot. Does anyone talk like this? "we'll see more people joining the fray" ?!!
The least a professional journalist could do (even when inventing quotes) is to use correct grammar.]
There are many unintentionally funny errors in the article- E.g: the use of "Canon" for "Cannon"- but it is too much effort to list them all here.
The next time someone wants to interview me for the mainstream media (and may that horrible day never come!) I'll just write the damn article myself. Or even better, run like hell!
Friday, June 22, 2007
Zenter - Working Habits for a succesful startup
I am still "offline" but this was so striking I wanted to record my awe.
from here, (emphases mine)
What was a typical day or week like at YC?
We basically lived by the following schedule 7 days a week for 3 months.
10am - Noon: roll out of bed and stumble into the living room to sit at the computer, check email, blogs, news for the day and start coding
Noon - 12:30: eat our $2 Lean Cuisine lunch - My personal favorite is Swedish Meatballs
12:30 - 7pm: Heads down coding, music played all day long and we alternated days to pick the play list which worked well
7 - 8: Kick Robby's ass at Tennis on the apartment courts. I think I may have won 3 sets over the entire 3 months. But they were always like 6-4 and it got us out for some exercise.
8 - 9: Make and eat gourmet dinner - mostly tombstone pizza, but occasionally Red Baron when they were on sale. Care packages from family were also extremely helpful to make sure we didn't eat too poorly.
9pm - 4am: Code like the wind - maybe do a design session or two if we are trying work through something particularly hard.
4am - 10am: sleep
I am impressed!
Thursday, June 21, 2007
Archive Visibility Fixed
The archives for this blog were not visible. Now they are.
Thanks to the reader who sent this in.
Friday, June 15, 2007
Blog On Ice For a While
the nutshell version:
I am *extremely* busy and won't be paying too much attention to this blog for the next couple of months. If you need to contact me, write an email or call. Thanks
Longer version:
I just spent an hour or so responding to a comment and an hour a day is something I just can't afford these days. I have a lot of travel coming up. My research has finally "clicked" and while there is a tonne of work to be done, there is no longer any ambiguity about what to do or how to do it. But I really need to buckle down and work. It's all very exhilarating but time is at a premium.
I have a roaming cell phone number and check my email twice a day. So do write or call if anyone needs anything. Friends can almost always ping me on messenger or gtalk.
I will be back in late August/Early September.Thank you for your understanding.
Thursday, June 14, 2007
Rogue Researcher's Route Map - Addendum
I wrote about what I learned when attempting to do Comp Sci research on my own (A Rogue researcher's route map).
Something I've learned since then might help people read research papers- Every (good) research paper asks (and hopefully answers) a question. Try to discover the question being asked and the answer and nail them both down by trying to express them in a couple of sentences each.
This really helps you understand the significance of a paper for your research. And stops you from panicking when you discover papers which seem to cover ground similar to what you are doing).
Paul Graham , talking about startup ideas, says,
Treating a startup idea as a question changes what you're looking for. If an idea is a blueprint, it has to be right. But if it's a question, it can be wrong, so long as it's wrong in a way that leads to more ideas.
Seems to work for research as well, especially for solo hackers attempting research outside institutional frameworks.
Wednesday, June 13, 2007
The Stratal Effect
Dr de Bono defines a "stratal" thus.
"A stratal is a number of parallel statements or observations that are put together as a whole. The statements need not be connected in any way whatsoever. There is no attempt to be comprehensive. There is no attempt to cover all aspects or to be descriptive. There is no attempt to be analytical. Just as a random word is used because you want to use it, different statements are put together as a "stratal" simply because you want to put them together in this way. A stratal is a number of unconnected statements put together solely to form a stratal. "
The key is that the statements are loosely connected or not connected at all. De Bono suggests that a stratal be used for generating ideas or to convey a particular effect.Some of the best poems can be seen as stratals.
But one can also use stratals for different purposes. One of the most fascinating uses (at least for me) is to lay out two (or more) random statements or ideas in parallel, especially in conversation and then see which of the ideas gets picked up. Let us say you are talking to someone who feels has a problem with relationships and you think there might be an empathy skills deficit. How do you check? One way to do it is to lay out two statements in parallel, one which checks for empathy, one which checks for it's opposite(say self centred ness). and see which one gets picked up. Say something like "I feel very frustrated when I talk to you so perhaps you can change that behaviour in the future" There are two ideas here, one starting with "I" and one starting with "you". A person having problems with empathy will probably pick up the sentence beginning with "you" and answer something like "Oh I know I need to think about changing my behaviour". A more empathetic person will place the focus of consciousness outside himself and on the other person say something like "Oh you feel frustrated? Why do you say that?"
There are all kinds of variants of this technique in combination with all sorts of other psychological/counselling tools, but the essence is simple. Layout parallel thoughts.
I picked this up a variant of this technique from John Hundreiser (aka "H", once head of recruiting at Thoughtworks ) who frequently uses a similar technique in his interviews. He would ask you a chain of three or four questions and see which one you'd pick up . He was the head of HR and his interview would come after many rounds of interviews. he'd ask something like "How did the previous interviewers from TW treat you ? Did the explore technical questions in depth? Are you feeling comfortable?" There are three distinct questions here and many people would answer one of these questions, at most two and forget the third. It is the very rare (and very self aware) person who says something like "To answer your questions in order, first ...second , .. third .. "
Of course the big problem with these tools of applied psychology is that they are all very context dependent and to use them properly the user needs to be (relatively) free of complexes and biases himself and also have the ability to evaluate the results properly. But that is the subject for another blog entry.
"Concentration is the Enemy"
A fragment from a (chat) conversation with my friend Abey.Context == Talking about programming,
me: Hey did you know about this " I think maybe concentration is the enemy. Seriously. If you're working on something that is so complex that you actually need to concentrate, there's too much chance that it's too hard. - Ron Jeffries"
Abey: yeah that makes sense[/sarcasm]
me: I guess one could always pair to avoid the "danger" of concentration. Hard to focus if someone is yammering in your ear all the time.
Abey: Yup! Pairing always helps. Instead of one person fretting and strumming the guitar and singing (takes too much "concentration"), you should have one doing the fretting and one doing the strumming
me: Let's "turn the dial up to 10". How about two pairs, one pair on the frets and another on the plectrum. Lots of redundancy and no need to concentrate!
Abey: yeah Extreme Guitar .. perhaps we could write a book?
Monday, June 04, 2007
On an unwillingness to pay the price
This is something I've started noticing recently. A lot of people claim they want something and then balk at paying the price. The pattern is
- I want X. I soooooo wish I could have/be X
- Sure why not, Do A, B and C and there is no reason you can't have/be X.
- Urmm yeah but that's too tough.. I don't want to do that.
FAQ (from my mail-box) #3 Can we hire you ?
Probably Not.
Some context. Every single day, I get 3-5 emails from people trying to offer me a job. The obvious form letters go into the trash can immediately, but I'm old fashioned enough to write a response to any mail that looks as if it has taken a human being some time to compose (Examples of both type sof mail at the end of this blog entry). Of late however, I find myself writing the same thing one too many times, hence this blog entry.
So, you are company X . Will I work for you ?
If your business model depends on body shopping (where body shopping is defined as "we don't care what projects we work on or for whom and the business model is x number of developers farmed out to random clients for y $/hour"), no, I'll never work for you. Been there, done that, got the T shirt. There is nothing you can offer that I want. I don't want to be an "architect" who does "high level design". I don't want "extensive travel" or "green card sponsorship". I don't want to be a Project Manager type and "lead enterprise changing teams for Fortune 500 clients". I do not want to be an "Agile Coach" (yuck!).
Please don't write to me. You are wasting your time and mine.
If you are a product company with a strong technical focus or even a tiny startup with an interesting idea, while I don't promise to work for you, I'll give your email serious consideration. I don't promise to accept your offer, but you'll get a reply.
Here is an example of a recruiting mail that goes straight into a the trash bin.
Dear Candidate,
I saw your resume in out database and would like to talk to you about some positions with our Direct Client in Naples , FL. If you match to any of the below mentioned positions then please mail me your resume with the job title in the subject line.
Location: Naples, FL, USA
Duration: 2 years +
Start Date: ASAP
Requirement : Java Architect
* 8+ years of software development experience
* Strong OO concepts
* Experience with RDBMS (Oracle and SQL Server)
* experience in leading a development team and working with Fortune 500 clients.
* Good problem solving skills
Please email me your resume if you are interested on [email] or call me at [phone number] if you have any queries.
Regards,
[Name]
It boggles my mind to imagine that people expect responses to emails that begin with "Dear candidate"(!!!).
Here is an example of an email that gets answered in the polite negative.
Hi Ravi,
I hope you remember me. We worked together in [company] where I was working as a recruiter. Well I've moved on to [Outsourcing company] and we have a desperate need for senior people. Compensation is not a problem and even if I do say so myself, we have an interesting culture and great projects. if you are looking for a change, do touch base with me. Regards, [Name] This is the kind of email to which I hope to forestall having to reply by writing this blog entry. Let me repeat, if your business model is built on selling developer time by the person hour, I am not interested. Lastly here is a mail I got from a recruiter in a certain company head quartered in Mountain View. It is still very much a slightly customized form letter and if I wanted to work for the big G, I'd probably ask someone I know who works for them to reccommend me, but this letter got a reply. Hi Ravi, I would like to introduce myself. My name is [Recruiter Name] and I am a technical recruiter with Google. I came across your profile online and I thought you would be a good fit for one of our Software Engineering roles on our test tool development teams. If the proposition sounds interesting and you would like to learn more, please contact me directly via e-mail or phone. I would love to share with you the exciting approach Google takes to software testing and the amazing advances we are making in test tool development. Thank you so much for your time and consideration. I look forward to hearing from you and talking to you about a career with Google. Respectfully, -- [Recruiter Name] Google Staffing [Recruiter Phone Number] 1600 Amphitheater Parkway Mountain View, CA 94043 [Recruiter Phone Number] Product Company? Check. Technical focus. Check. So I spent about 10 minutes thinking about it and then wrote a "Thanks but no thanks" email. I don't want to write testing tools, (though I know a few people who are) and I am not sure working for Google now is a good idea. Their stock prices are at unheard of levels and Bangalore (where I am located) is probably very far away from the real technical action in Google, if the "Bangalore centres" of other companies I know (and are competing with Google) are anything to go by. I could be wrong, but I've never come across anyone who worked for Google Bangalore. If I knew someone I admired who worked in Goog Bangalore, then yeah sure I'd consider it. I also hear on the grapevine that the old "Google culture" is fading a bit. I'd rather work for a startup with 5 smart people than for Google. Which brings me to an interesting point. Beyond a certain level of expertise, I doubt if recruiters can be very effective at all in hiring good developers. Most developers are pulled into new jobs by their network of fellow developers / people they worked with before. So here is a hint for recruiters trying to hire good developers. Ask the best developers you have to contact the best developers they know. Beyond a point, I suspect that's the only way.Monday, May 28, 2007
FAQ (from my mail-box) #3 I am just starting out in the sw industry/I am still in shool. Can you give me some advice?
Sure. Giving advice is easy. Following it is hard :-)
If you like coding (and technology in general), seriously consider if you want to study further.
A B.Tech from most Indian Universities is utterly useless. A good MS or PhD will get you the good technical jobs. If possible get some deep grounding in science or maths. Or if you are the non tech type consider an MBA.
Even if you can't study further, start specializing in a "tough" sub domain of software. If you are working in Java, learn C and assembly. If you are wrestling with java and xml on the job , acquire some expertise in algorithms or networking stacks. which brings me to
Decide on whether you want to be an "enterprise" programmer early. Pros = fairly easy work, easy to get that first(and subsequent) job, plenty of travel. Cons = ultimately unsatisfying if you are a seriously technical person (you may need to move up to be a manager if you want good work or money, but being a manager is not a technically intensive job), it is too easy to get into an endless grind of developing the next website for an arbitrary series of industries.
If possible, join a startup/small company/technically sharp company (like Google) vs one of the behemoths (like Wipro or Infosys). [Useful heuristic - if the company is an ISO/CMM./other process heavy company, run for your life!]. You'll learn more in a shorter period of time. You can always join Wipro or TCS after a couple of years when you are ready to "settle down" (and be mediocre).
Be prepared to work like crazy for the first couple of years.
Be prepared for intensely political environments (the more so if you join a big company). I am not saying be political, just be aware of politics. Politics is a part of every human endeavor which incorporates more than one person. Either scrupulously stay above it or learn to play the game well. Don't get caught in a "middle path" where you play sufficient politics to get hurt but not enough to use it get more money or power.
Be aware that a job is not a continuation of college. It is surprising how many people make this mistake. (Some companies even encourage this in a ludicrous attempt to be "cool". If the company HR asks you to play Dumb Charades on a company outing, or if the company workforce is divided into "houses" which compete against each other in "skits" or "Dance competitions", you are probably in one of these companies) Seriously consider leaving. There is a subtle distinction between a job that's fun and a boring job with pseudo hip "activities" layered around it.
Above all if you don't enjoy coding, for God's sake move on. Do something interesting with your life. There are enough doofuses in the Great Outsourcing Destination without you adding to it.
Thursday, May 24, 2007
FAQ (from my mail-box) #2 Should I apply to Thoughtworks and/or can you help me get in?
This is a question that comes up a lot.
My answer to questions of the form "Hi , I am ... my experience is ..... Do you think I should apply to Thoughtworks?" ( i can't imagine writing a letter like this to someone I've never met, but many people seem to think it is ok, so .. ) is
I have no clue! It is up to you to decide what your career should look like. In general, TW is a good company to work for if (a) you want to work on "agile" (b) you like to travel (more so if you are applying to the TW offices outside India) (c) you like working on enterprise systems (d) you are very good at whatever you do (coding, analysis, dba whatever).
TW is very un hierarchical (less so these days than before but still largely true) and if you are the type who measures your status by what your title says or how many people report to you then you should NOT apply. Oh yeah, you'll find the interviews either very tough or very easy. (Folks who are really good at what they do find the interviews easy. Those who are not, find them correspondingly tough or "unfair"). There are way less idiots in TW (India) compared to almost any company in Bangalore I know of (Google excluded), but there ARE a couple and if you face them in an interview that's your bad luck. Just move on.
In a nutshell, I will **not** reccomend people I don't know (It is amazing how many people ask me to do this). Just for context, I have reccomended exactly one person to TW (needless to say he is very very good) in the last 5 years (hi Sheroy!).
I left TW almost 3 years ago and have no inside information (and if I did I wouldn't share it with people I don't know). If you *have* worked with me in any capacity, please feel free to ping me and I can talk to you about whether TW would be a good fit for you (you'll have to buy me dinner/beer).
PS: the Thoughtworks India recruiting page is here.
I would like to point to the recruiting pages for the other offices , but some moron of a web developer has changed the Thoughtworks Home Page so it redirects to a "Select Country" page (wtf!). So I can't be bothered to find all of them and point to them, but in general, go the appropriate country's hiring page and apply online.
Wednesday, May 23, 2007
FAQ (from my mail-box) #1 What are development costs in Bangalore?
[context] I get all sorts of questions in my email every day. I try to answer all my mail but I am getting tired of answering the same questions again and again. So I am going to post these common answers here and not answer by mail anymore [/context].
The minimum cost of a developer(aka a "coding body") in Bangalore is about 20-25 $/hour. This is the rough rate charged by Wipro/Tcs/other "outsourced enterprise" bottom feeder companies, for a "standard" development project. Of course most of these projects are seriously overstaffed, but that's a different issue. The hard part here is getting a good team who can deliver good code vs process documents or whatever, but at 20-25 $/hr you will get a pool of candidates.
If you need *really good* developers (the situation for folks who are trying to optimize time to market or trying to do something unusual, say a startup (vs crank out umpteen jsp pages or make minor bugfixes to a legacy app or whatever), the cost (in Bangalore) is 40 $ +. How much that "+" represents depends on a lot of factors. I've seen rates of upto 200$/hr for truly exceptional coders/projects, but that's (very very) rare. 40 $ is a good baseline.
It is VERY VERY hard to find good developers in Bangalore, just as is true elsewhere in the world. So the ability/willingness to pay the above rates does NOT guarantee you good developers. 95% of the software "industry" in Bangalore is staffed by people who shouldn't be coding. Think carefully before you spend your money in "outsourcing".
Bangalore is one of the most expensive cities (if not the most expensive city) in India. If you can find good developers in less expensive parts of India, like say Trivandrum or Bhubaneshwar you can expect to pay about 25$/hr for a really good developer and about 15$/hr for a "coding body" type. The density of good developers is much lower in such small cities, but if you can find good people, good for you.
Ok that's one question I don't have to answer by mail anymore.
Sunday, May 20, 2007
Back In Bangalore - A Ramble
After some travel (and more to come soon) I am back in Bangalore. On Saturday, I went to the Thoughtworks "MasterClass" conference. Overall this year's MC was an improvement over its predecessors, because it focussed on people who actually code on a daily basis and instead of high flown abstractions about "agile" etc , the talks were very focussed and drew on their expriences. Less "consultant speak" and more "programmer speak". Nice.
Pramod Sadalage demonstrated database refactoring. Vivek Prahlad,, author of Frankenstein, gave a competent lecture about Evolutionary Testing. Srihari Srinivasan described how his team had created a mini language ( I won't use the over abused "DSL" -- to quote Alan parsons from a comment he made on reddit "It seems anyone with 2 minutes ruby experience calls a method with a inline map, and no brackets, and calls it a "DSL" " :-) ) and then build some IDE like screens around the language. The interesting thingwas that instead of the usual ruby DSL fanboy froth, this was a very sober presentation about an "external DSL" with a proper grammar, parser etc. There was a bit of "reinventing compilers" flavour to the talk but I enjoyed it nonetheless.
Overall fairly interesting and the organization of the conference was top notch.
I thought the presentations were somewhat basic , but I was not obviously part of the intended audience. To illustrate, Vivek asked the crowd how many people had *heard of* Selenium and about 6 people (of maybe 250 or so) raised their hands! 6! Considering they are all "working professionals" that's .... scary.
I also used the conference to poll some of the best programmers in TW about what they thought of "Behaviour Driven Design". I was never very impressed with either the people or the ideas in "BDD", but Dan North seems (from his writings) like a thoughtful fellow, quite an aberration fornm the usual BDD crowd. All the people I asked, dismissed BDD with varying degrees of amusement and derision (think "that'a bull****" to "It doesn't make sense. people are just making noise").
Meanwhile here is something I thought of but can't summon the energy to do. Download JUnit, change the name of "TestCase" to "Context", the part that looks for "testXXX" methods to look for "shouldXXX" methods and "asserts" to various forms of"expect" , or.shouldDotBeDotPseudoDotEnglish methods. (With JUnit 4 one would need to hack the annotations , but the principle is the same). hey presto (almost) "BDD" on the cheap.
I've always thought "BDD" was about consultants trying to create new material out of old to write new books and get a few consulting assignments. It is good to know that most of the capable developers in TWI are equally unimpressed.
The audience questions were dumber than usual. I am not talking of questions that arise because the questioner is ignorant of the subject. Those are all right. No one knows everything. These were questions that came from not listening to what the speaker was saying. In addition, they were thinly disguised statements trying to prove that their half baked "opinions" had some technical merit. (roll eyes).
Vivek in particular handled these ultra stupid questions extremely well. His strategy (which I've noted for future use) seems to be along the order of "acknowledge the question, ignore its latent stupidity, say something useful that benefits the crowd and conclude with a "That was a good question" . I would simply have said something like "duh... is that a question or your untested opinion?" or something equally nasty.
I wish there were some kind of gathering place in Bangalore for people who actually write code, because they LIKE to write code (vs because they want to get paid). I have a suspicion not many of these idiots would attend. And the conversations would be of a higher quality.
Speaking of which, the best thing about the conference was that it enabled me to touch base with an old college mate of mine, Peter Thomas. (In college, Peter was one of the good guys while I was more .... ummm.. radical). Peter is pretty unique in that he is a manager (with an MBA from one of the top institutes in India) who gave up being a suit and is focussed on writing code. Very impressive. He is the author of JTrac and his blog makes compulsive reading. As the conference wound down, Peter I and Siddhartha hit Koshy's for some conversation over beer. We talked of code, music, wargames, etc till Siddhartha had to leave to catch his flight to Chennai.
I also managed to get a sneak peek at Thoughtworks's agile project management app, Mingle. the folks manning the booth mostly weren't developers (or at least they didn't sound like developers) so they couldn't answer some technical questions, but overall I think it's a very good attempt. If they make it free for Open Source projects (as I heard one of the TWers claim) I'll give it a whirl.
All is not sweetness and light. Now that I'm in town,I have one of those "meaning of this relationship" talks coming up with the girlfriend (a force of nature is probably a better description). Urrgh! I'll never understand women! I do NOT intend to marry anybody. do NOT! NOT!
Thanks!
(end ramble)
Friday, April 27, 2007
IIT Grads ! (necessarily) == Good Programmers Redux
When I wondered some time ago why the best programmers didn't come from the population of IIT grads,
many people claimed I had all sorts of motives (ranging from jealousy to fear) for having such "heretical" thoughts.
Now some other folks seem to offer a degree of vindication.
From the latest Outlook magazine (You can read the first page of the article here - I am not sure how long the url will be valid). For those too lazy to click on the link, an excerpt
What has triggered the discussion within the fraternity is the concern expressed by two distinguished IIT alumni about the general decline in standards of excellence at the institutes in recent years. Their remarks have questioned the calibre of students who make it into the IITs by subjecting themselves to the killing rigours of coaching factories in places like Kota and Hyderabad. The alumni seemed to conclude that these products of coaching factories—who now form, according to Wikipedia, 95 per cent of students at IITs—had a blinkered approach to education, did
not recognise new ideas and had lost the spirit of inquiry and innovation. In short, elements that had built Brand IIT over the decades had now gone missing
The first salvo was fired by Tata Steel MD and IIT Madras alumnus B. Muthuraman. Speaking at a Ruby Union meeting of the pioneer batch organized at his alma mater in January 2007, he said that tisco was "not likely to recruit" IIT graduates any longer. He based his opinion on a recent interaction he had had with a set of final year students, who he said did not even know the authors of books they were supposed to have studied. He made many other related statements suggesting that IITs thrive only on their "past reputation" and that he actually preferred other college students who were amenable to company training.
Now before the frothing-at-the-mouth defenders descend on this blog, I am not saying that IIT grads are poor programmers. What I AM saying is that in India there is no correlation between programming ability and the school of the programmer. Any company that hires only IITians AND (boolean AND - do read this sentence carefully before sending off that hate mail) hopes to recruit impressive programming talent by doing so is asking for disaster.
An IIT is *not* Stanford or MIT or CMU. Not even close. If you doubt this, first take a look at a typical PhD paper (in say Robotics) from any IIT you choose vs say Stanford. Then tell me I'm wrong. Thanks in advance.
Tuesday, April 24, 2007
Learning From Sudoku Solvers
Ron Jeffries attempts to create a sudoku solver - here, here, here, here and here. (You really ought to read these articles. They are ummm...{cough} ...err.... enlightening.)
Peter Norvig creates a Sudoku Solver.
Compare. Learn.
Update: Discussion on reddit
somewhat peripherally related but similiar (this about the bowling game) discussion
The devgrind post
Update 2:
(Oct 2009) Peter Norvig spoke about this post in Peter Seibel's book, "Coders at Work". My reaction..
Update 3:
Peter Siebel author of "Coders at Work" weighs in. Some gems there.
"One thing I noticed, reading through Jeffries’s blog posts, was that he got fixated on the problem of how to represent a Sudoku board. He immediately started writing tests of the low-level details of a few functions for manipulating a data structure representing the 9×9 Sudoku board and a few functions for getting at the rows, columns, and boxes of the board. (“Boxes” are what Sudoku players call the 3×3 squares subsquares of the 9×9 board.)
Then he basically wandered around for the rest of his five blog postings fiddling with the representation, making it more “object oriented” and then fixing up the tests to work with the new representation and so on until eventually, it seems, he just got bored and gave up, having made only one minor stab at the problem of actually solving puzzles.
I suspect, having done a small amount of TDD myself, that this is actually a pattern that arises when a programmer tries to apply TDD to a problem they just don’t know how to solve. If I was a high-priced consultant/trainer like Jeffries, I’d probably give this pattern a pithy name like “Going in Circles Means You Don’t Know What You’re Doing”.
.....
(Norvig has) 7 definitions in 12 lines of code and he’s done with data representation. I’m not sure how much code Jeffries ended up with. In his fourth installment he had about 81 lines devoted to providing slightly less functionality than Norvig provided in the code we just looked at. In the fifth (and mercifully final) installment, he started adding classes and subclasses and moving things around but never presented all the code again. Safe to say it ended up quite a lot more than 12 lines; if he’s lucky it stayed under 120.
" Siebel's post is worth reading in its entirety.
Update 4:
Andrew Dalke's Problems with TDD (and the comments, some by eminent TDD proponents) reveal TDD's feet of clay.
Peter Norvig creates a Sudoku Solver.
Compare. Learn.
Update: Discussion on reddit
somewhat peripherally related but similiar (this about the bowling game) discussion
The devgrind post
Update 2:
(Oct 2009) Peter Norvig spoke about this post in Peter Seibel's book, "Coders at Work". My reaction..
Update 3:
Peter Siebel author of "Coders at Work" weighs in. Some gems there.
"One thing I noticed, reading through Jeffries’s blog posts, was that he got fixated on the problem of how to represent a Sudoku board. He immediately started writing tests of the low-level details of a few functions for manipulating a data structure representing the 9×9 Sudoku board and a few functions for getting at the rows, columns, and boxes of the board. (“Boxes” are what Sudoku players call the 3×3 squares subsquares of the 9×9 board.)
Then he basically wandered around for the rest of his five blog postings fiddling with the representation, making it more “object oriented” and then fixing up the tests to work with the new representation and so on until eventually, it seems, he just got bored and gave up, having made only one minor stab at the problem of actually solving puzzles.
I suspect, having done a small amount of TDD myself, that this is actually a pattern that arises when a programmer tries to apply TDD to a problem they just don’t know how to solve. If I was a high-priced consultant/trainer like Jeffries, I’d probably give this pattern a pithy name like “Going in Circles Means You Don’t Know What You’re Doing”.
.....
(Norvig has) 7 definitions in 12 lines of code and he’s done with data representation. I’m not sure how much code Jeffries ended up with. In his fourth installment he had about 81 lines devoted to providing slightly less functionality than Norvig provided in the code we just looked at. In the fifth (and mercifully final) installment, he started adding classes and subclasses and moving things around but never presented all the code again. Safe to say it ended up quite a lot more than 12 lines; if he’s lucky it stayed under 120.
" Siebel's post is worth reading in its entirety.
Update 4:
Andrew Dalke's Problems with TDD (and the comments, some by eminent TDD proponents) reveal TDD's feet of clay.
Thursday, April 19, 2007
Restored Comments
A quick perusal of blogspot's comment moderation page showed me that some comments were pending. Generally I get a notification in my gmail account, but for some reason these didn't make it.
Sorry.
All the comments have been restored. They are scattered across many posts. The best was Ryan Cooper's comment on "If Toyota outsourced .. ".
Ryan, I agree with most of what you say. I still think the Poppendieck's books are worthless. But reasonable people can disagree.
:-)
Sunday, April 15, 2007
Asok's Own Country
Recently, a friend (we'll call him M) invited me to his company's annual day party. First the CEO made a speech about how they (the folks who work at the company) were "creators of history and not just passengers". People clapped. Then the party proper started.
Well, sorta kinda. The Mistress of Ceremonies declared that "the bar is now open". One small problem though. You couldn't just walk up to the bar and get a beer. First you had to locate a "coupon distributor", get a "beer coupon" and then walk over to the bar and hand over the coupon and the bartender would hand you a beer. If you wanted another beer, you had to rejoin the line. (I am NOT kidding. This really happened. I was there, as were 200 or so others, so I have plenty of witnesses).
M, (by now thoroughly embarassed) joined the long line, and after inching forward for about 20 minutes, arrived at the head of a line and asked for "two coupons please". The person dispensing the precious scraps of paper. The Person Behind the Counter -PBC from now-, took a long and incredulous look and then said frostily "Only one coupon per head. sir".
M: "so, if a party of four want beers,all four have to line up and get their beers" PBC: "That's right" M: "ok... if they want another beer, they need to join the line again." PBC: "That's right sir!" M: "All four of them" PBC (beaming) : "That's right, sir! Here is your beer coupon" M(handing it back): "Do me a favor friend, Have a beer on me" (walks away).Creators of History? :-)
Sunday, April 08, 2007
Scribes and Programmers
A long time ago, there weren't too many people who knew how to write. So if John Ancient wanted something written he would visit the local scribe and pay a fee. I am not sure if the scribes ever formed a guild but I wouldn't be too surprised.
These days, if Joe Modern wants a program written, he needs to hire a programmer (or a bunch of programmers) who'll translate his needs into the appropriate incantations.
Imagine a world where a majority of people know programming - perhaps not enough to write an operating system kernel but enough to write a basic Rails application - say a ToDoList application. (I did say "imagine"). How would programmers evolve?
I think they will become largely "post technical" - a term used, sometimes pejoratively, to describe developers who've moved away from code-centric jobs. The term is mostly applied to folks who go on to become managers, an idea which is looked down upon by some developers.
In a world where most folks could program, post technicalism would be the norm. A large chunk of present day programming jobs would simply disappear. You can't get a job these days if you "know all 26 letters of the English alphabet and can form grammatically correct sentences in English", which is the level at which a large majority of "professional" developers "program". Knowledge of writing is required but not sufficient for a paying job today. A doctor needs to know how to write but he also needs to know much much more. Musicians, biologists, teachers - all could do with a basic knowledge of programming. Perhaps basic programming skill should be taught just like reading and writing are. Then the idea of writing a quick script to generate a graph from a database wouldn't be some kind of exotic skill , but a basic competence expected from educated people.
Would this disappearance (or submergence below the awareness level) of programming skills be a bad thing? Not really. Technological progress has rendered many jobs obsolete over the centuries and humanity has coped very well.
Also, there would still be a need for people having extremely high levels of programming ability, just as there are professions that need extremely high levels of writing/communication ability - think copywriters or diplomats. The folks who focus on algorithms and networks and compilers and other 'deep programming' would probably survive just fine.
Of course the writing analogy can't be stretched too far. Documents are created by one person or a few people at most, over fairly short periods of time. Most significant programming projects involve large groups of people working on the same codebase for significant amounts of time, sometimes decades. The main challenges (as measured in terms of completion and impact of the project) are about people issues - how to hire them, how to retain them, how to make them work together.
And this organizational difficulty of managing large groups of people and getting them to build something coherent is the space in which, at present, many snake oil vendors (think "lean " or agile") thrive. The presence of snake oil is often an indicator of a fundamental and intractable problem. So even if a large number of people knew how to program, the organizational aspects will need hands on resolution. Thus the "project manager" type person would be alive and well. The VB/j2ee/dotNet folks are the ones who'd disappear.
But is the "manager dude" the only evolutionary path available to code jocks? I think not. For example, the world of science and engineering (modulo software "engineering") would still be open. Yes, there would need to be a lot of study - mathematics and statistics and the sciences and particular engineering domains - you won't be able to grab a book called "Java X.Y in 24 hours" and get a well paying job. People wouldn't be able to make money doing the equivalent of writing other people's letters for them. But I suspect there will be a lot of fascinating problems to solve, even in our imaginary world.
Even in a world where everyone codes, the "path of the suit" would still remain the Dark Side. You would still need to think long and hard and try to balance gain and loss before setting out on that path.
Subscribe to:
Posts (Atom)