Ravi Mohan's Blog

Thursday, March 17, 2005

Levelling up in Math land

(Edited on Feb 4 2011), This entry is correct but is now obsolete.I rewrote this with more detail here. Please use that instead.

Concrete Mathematics is a fine book. But in the very first there is a bit of handwaving that goes on to eventually get seemingly magical and the novice who is using the book for self study (iow, someone like me ) can get lost very easily .

A good example is the "solving a rcurrence by the repertoire method " explanation on pages 12 - 15 ). A margin note by a student (an excellent idea to include these) warns us "Beware . authors expect us to figure out the idea of the repertoire method by seat-of-the-pant examples instead of giving us a top down presentation " .

Unfortunately that doesn't help a reader to figure out what is going on and how to use the "repertoire method " to solve a recurrence . I've been banging my head against this for a few hours and i think i found out how the repertoire method works . here it is .

I will use the same recurrence the authors use .

Recurrence R =

f(1) = alpha
f(2n) = 2 * f(n) + beta for all n greater than or equal to 1
f(2n + 1 ) = 2 * f(n) + gamma for all n greater than or equal to 1
to solve a recurrence using the repertoire method ,

step 1
make sure that the recurence is expressible as a sum of parameters multplied by functions of n

the above recurrence can be transforemd to f(n) = A(n)*alpha + B(n)*beta +C(n)* gamma (this is done on page 13 of the book so i don't repeat it here)

where A, B and C are functions on n and alpha beta and gamma are constants

step 2
p times , where p is the number of parameters (in the above case, alpha, beta and gamma so p = 3 ) *assume* that f(n) = a simple function of n and solve using the original recurrence to get an equation . eg: in the above recurrence there are three parameters , alpha , beta and gamma

so say
f(n) = 2^m, --> Eq(1) (EDITED on Feb 4, 2011 - This is actually proved by induction in the book so this guess for the value of f(n) , but this guess does work in providing the value of A(n) better than proving it by induction)
f(n) = 1 -->Eq(2) and
f(n) = n -->Eq(3) be your assumed functions .

solving R with Eq(1) gives A(n)= 2^m --> Eq(4)
Solving R with Eq(2) gives A(n) - B(n) -C(n) = 1 -->Eq(5)
and solving R with Eq(3) gives A(n) + C(n) = n --> Eq(6)

step 3
solving these 3 equations (eqs 4,5 and 6) gives us the values of the coefficients .

A(n) = 2^m
B(n) = 2^m -1 - l (the last is the letter "ell" )
and C(n) = l (the letter ell)
thus the closed form of the recurrence is

A(n) alpha + B(n) beta + C(n) gamma = 2^m * alpha + (2^m - 1 -l) * beta + l*gamma

now the question is how can we be sure that we guess the "right" functions in step 2 ? how do we know that f(n) = 1 is a "good " guess ?

the answer is that if you guess "wrong" you won't be able to solve for that equation and will end up with an impossible equality .

and that is how the repertoire method works!

happy repertoiring

Monday, March 07, 2005

None So Blind... The Agile India Conference Experience Report Part 2

Thanks to problems setting up the laptop I missed Brett's presentation. I listened to Mridul's talk on "Kernel Programming + Agile" and then it was my turn . We grabbed some lunch and then went to see if we could attend some seminars . Unfortunately all of the presentations in the afternoon were boring as hell . Most were about "combining waterfall and agile" Apparently there was a talk earlier in the morning about a "wagile" methodology . If you, the reader, just fell off your chair or threw up , you can imagine my reaction.

I think God is having His revenge on me for generally being disrespectful and specifically for using a Dilbert Cartoon as a presentation aide. when i looked at all those PHB types drone on and on about "waterfall and agile are complementary " , i felt i was inside a Dilbert strip . I think a lot of clueless managers in Bangalore have latched on to the "latest buzzword" and are busy "optimizing" (bwaaa ha ha !! this is a private joke . i actually met a (totally dilbertian) manager who said "my main skill is optimizing" if you mention this to Abey or me, we'll fall around in hysterics ) and "combining" it with whatever outmoded nonsense they know about "managing software teams" .

It is very frustrating to see how much traction this stupid idea is getting in Bangalore amongst people who don't want to change how they or their companies function but want to be "agile" so they can fool their clients into giving them more money.

I have said so before and i will say it again .

The primary facilitating factor for "going agile" is a culture that respects no hierarchy but that of competence and maintains an atmosphere of total openess and trust.

now how many companies in Bangalore work like this ? 3 ? 5 ? you get the idea .

In the evening the organizers asked me to be on a panel on "distributed agile " . There was this person on the panel (who shall remain nameless) who claimed that his "whole life is agile" (!!! ) and then went on to proclaim a lot of "waterfall " ideas (eg:" 'novices ' should have their yahoo messengers monitored by a 'senior' developer to make sure they don't say anything "dangerous" to a client" ).I have never heard such nonsense in my life . I really lost my cool and did what i could to rip his arguments apart.

The audience loved it :-D .

An artist sketching the panel drew me in a furious, scowling figure. If i can get a copy of the drawing from Manoj Bharadwaj i will certainly put it up here .

Because one of my friends was leaving Bangalore , i missed the second day of the conference .

too bad, because i was looking forward to hear Fred George, Dakshinamurthy Karra ,Simon Harris(author of Simian), Henry Jacob and Luke Barret speak .The last two seem to be focussed on Interaction Design in an agile fashion. Alas it was not to be .

All in all it is wonderful that such conferences are happening in India . If the Agile India Society can just keep going we may see many more such events .On the other hand it may just wither and die.

we'll see .

Sunday, March 06, 2005

Slide, Slide on the wall... The Agile India Conference Experience Report Part 1

I attended (and spoke at) the Agile India Conference. My speech about applying XP to a large AI classifier system I am working on was well received . I used slides only to represent visualisation of complex data (and one for a dilbert cartoon).

I think most people use slides because
  1. they need to structure their thoughts as they create their speech,
  2. they can "lean on" the slides,use them as a psychological crutch while on stage,to take away some of the stress associated with speaking
  3. that is the only way they know how to make a presentation. That is how they learned to do it

Though i was a fairly good speaker and debater in college ,soon after i got into the software "industry" (note the quotes) i fell into the habit of creating and using slides for presentations. Recently i read this , this and this .

I also noticed that the very best speakers , even in the software field, (example Martin Fowler ) do not use slides .

ok so here was a chance to face an audience without any shields again after many years . The surprising thing was how powerful the hold of PowerPoint was. Though,years ago, i had spoken to large audiences before, without slides,or even notes, now it felt very strange to do so without PowerPoint guarding my back !! this was scary !

anyway , an intial awkwardness aside, the speech went off fine . The best compliment was given by a student volunteer (the conference was held at the PESIT Engineering College) who declared that he was able to follow the talk easily, though it was about a highly technical topic.

Vivek Singh , whom i respect tremendously, even while disagreeing with him about most things , was there and he didn't throw his shoes at me . .

So i guess it all turned out fine .Thanks to the talk, I met a lot of interesting people , including a person who writes browsers for mobile phones .We had a very interesting conversation.

And i will never use PowerPoint again . What i need is something that would allow me to outline the structure of a speech as i am speaking, annotate it with audience questions(as recorded audio ? ), connecting links etc .A cross between an outliner,a multi media blogging tool and a brain map .. hmmm time to fire up squeak.

More about the conference in the next entry .

Thursday, January 20, 2005

Mathematics An Epiphany

Today morning , I was at the Centre of Artificial Intelligence Research staring rather stupidly at a page covered with strange squiggles and cryptic sigils . I had gone there to "gather requirements" and the person in charge dropped a couple of papers from the IEEE transactions on Machine Intelligence on the table and proceeded to talk in a language that brought back faint memories of drowsy classrooms from oh so long ago .

Sample sentence = "To solve the problem defined in expression (1), a single unconstrained problem equivalent to expression(1) is obtained by defining the augmented Lagrangian function denoted by phi ".

doh...

After ten minutes or so of this, i put up my hand and said "what does that mean in English? i didn't understand anything". My friend Mridul caught on and both of us asked increasingly dumb questions till the scientist gave up the struggle and patiently explained the math to us term by term translating into English and into a 2 dimensional diagram . I was very skeptical that i would ever understand anything but ever so slowly the squiggles resolved into a stunning set of ideas laying out a new way to do machine learning. After few hours, we were nodding along, even chipping in at various points with ideas that made sense . I had gone from skepticism to bemusement to fascination to awe.

It is hard to state this bluntly but i came out of that meeting convinced that a programmer who doesn't know math is somehow crippled(so is a mathematician who can't program, but that is another story). The power of those equations ,drawing down a whole set of tremendously complex abstractions into clean lines of force that thrummed with power , and seized even our bumbling thoughts and flung them unceremoniously into a world of bewildering possiblities, seemed to have affected Mridul too.

The first thing he said after the meeting was "Damn ! we should learn math.If we could wield it the way these scientists do, we could create so many fantastic programs ".

We had a long discussion over lunch on what we had perceived and distilled it down to these basic points.
  1. the combination of deep mathematical skill and expert level programming ability would be the ultimate "level up"
  2. the first step in mastering math is be to learn to read the notation. just like learning the syntax of a new programming language
  3. the second is to grasp the reality expressed by the notation at a gut level , like understanding the paradigm and patterns lying underneath a programming language , like ,say ,beginning to grok "oo"
  4. the third is to use that understanding to create new possibilities
  5. the fourth is to use a programming language to embody and refine those possibilities , thus creating programs that do what has never been done before.

Strange .In one day, I have gone from hating mathematics to bedazzled wonder and a craving to learn .

Life is so wonderful .

Tuesday, January 18, 2005

RunAwayScreaming

I came across Run Away Screaming

so.... having nothing better to do .. i wrote

When they sell you as cheap Indians
Then tell you "you are   cool"
And Power is for Caucasians
And the PM is a bigger fool
You want to RunAwayScreaming....

When they tell you "we do XP"
And tell you "bill more hours"
And ship code that is buggy
To folks in Ivory Towers
You want to RunAwayScreaming....

When you ask for a laptop
And they form a Committee
And talk and argue till they drop
About if you are worthy
you want to RunAwayScreaming....

when for every new situation
someone makes complex laws
and a PHB fascination
becomes the latest  Cause
you want to RunAwayScreaming....

When body count is the Holy Grail
And "suck up" the success path
More Process leads to  "How to scale"
and Logic invokes wrath
you want to RunAwayScreaming....

yes it sucks!! i know .

but this is my blog and i can write what I want ! so there!

Monday, November 22, 2004

Back To The Seventies

Sergei Dmitriev wrote an article on his blog about what he calls Language Oriented Programming. Sergei claims "It is time to begin the next technology revolution in software development, and the shape of this revolution is becoming more and more clear. The next programming paradigm is nearly upon us." Unfortunately the rest of the essay is not very successful in establishing this claim.

What he seems to establish is that languages like Java and C# are inadequate for serious programming and makes the developer jump through hoops to get things done and results in lots of verbiage.

Fair Enough. The rest of the article explains a series of necessary languages and the tools required for manipulating them . Brian Selinsky rebuts this line of thinking in his blog .

Brian has two objections.

First , he says that custom languages are difficult to understand because they introduce new concepts which have to be understood by the reader. I think he is partly right.Writing new languages for every minor concept change would end up with weird code. If some set of concepts is better expressed as a library , in frozen languages like Java that is a better option.

But on the other hand one does need languages that reflect the underlying concepts. Using an object based library to do what SQL does well, for example is stupid. (I have participated in a project in which the chief designer went object crazy and reinvented database concepts as an object library . Believe me it is really no fun) .

On the other hand when you do need to "build a language to reflect the domain" the best way to do this is with Lisp Macros .(Doubters should read Paul Graham's On Lisp ).The good thing about macros is the the full power of your lisp environment is available at all points of time.one does not need to rebuild tools for each language defined.

Brian goes on to say "It's quite possible that languages like Lisp failed to become popular (beyond a small community) partially because they encourage programmers to write domain-specific languages. This has a tendency to fragment the community into groups that have trouble communicating (a tower of babel effect). " This is simply not true . The failure of Lisp to "take over the world" has many reasons but this is the first time i've heard that the macro facility was the reason . These minor quibbles aside ,I agree totally with Brian. Asking the typical "enterprise and J2ee expert " programmer to hack macros (or for that matter to use "Language Oriented Programming" to define new languages) is a sure invitation to disaster but this is because you macros are a power tool. You wouldn't ask someone whose driving experience is limited to tricycles to drive a ferrari would you ?

Inventing a whole tool chain to re invent what was essentially complete in the seventies seems suboptimal to me.In other words , learn lisp first . If you have a lot of time on your hands write a lisp library that can call into java and use objects defined in java libraries. That will give you "Language Oriented Programming" (oh nonot another buzz word) without a "technology revolution" .

Friday, April 02, 2004

Spells and Software

How hard is the software you write ? Most "business" software is more a matter of repeating endlessly minor variations on a fairly simple theme. Most "product" software consists of fixing an endless stream of bugs.

But if one goes beyond the "normal " part of software (and sometimes one does need to write those endless jsp pages or whatever to put bread on the table - been there, done that ) one sees an endless panorama of exciting, mind blowing software that waits to be written. Most of us software developers are so buried in the soporific details of our "day jobs" that we soon forget the wonder that brought us into software.

My epiphany occured whan i was about 10. I had never seen a computer but one of my cousins had a small "Space Invaders" portable game. I couldn't believe that somone had actually WRITTEN it for me to play.

Software is the nearest thing to magic in the 21st century.

Your thoughts, converted into arcane spell like languages move money, machinery and people to do all sorts of wonderful things. And as with magic, there are Master Wizards and Spell Crafters who extend the frontiers of the art. There are tomes of knowledge which are freely available but remain cryptic "until the student is ready". And of course there are frauds and charlatans(no i did NOT mean "managers"! I actually know a few GOOD managers!All two of them :-P ) . See all the nonsense happening in the name of "test first" or "Extreme Programming" for example.

A few people can spout the jargon. Almost nobody can CODE test first.

Here is an example of some software that I think has a touch of magic about it.The folks at the Cortex brought us Clover and now they are going to bring us fisheye! I hope they make a ton of money off their lovely products.

The best advice I have ever recieved on the subject came from Martin Fowler . I was feeling fairly gloomy about "everyone is fairly happy with the status quo " , when Martin said "Why do you care what everyone else does ? If no one does cool things, there's all the more left for you to do".

A light bulb licked on in that instant inside my mind and has never gone off. These days I don't care anymore that I am an Aging Overweight Indian "software professional" . I can write code .And I can dream.

And in the midst of all the CMM ISO madness no one can take that away from me .

So i am learning LISP , running my own consultancy, planning my Ph D ,learning to play the blues.. All the "weariness of the heart" has dropped away and life is crammed full of interesting things to do and code to craft.

All because a Master Wizard , perhaps unknowingly, passed on a spell to me (and I freely pass it to you ).Four words.

What do YOU care?

Tuesday, March 16, 2004

The Fowler Effect and The Thief's justification

One of my friends said " You thoughtworkers , (conveniently ignoring the fact that I am no longer a Thoughtworker) always point at Martin Fowler and say 'See how cool he is. Aren't I cool too?' ".

Though this was intended as a joke, there is a kernel of truth to this.

And it is not about Thoughtworks( which is one of the finest companies in the world. I advise any non thoughtworker reading this blog to consider working at Thoughtworks for a year or two.You'll meet some very high calibre peple and learn an incredible amount about how to write good code)

I have seen people from Lucent and even IBM Global Services (!!) and Wipro (!!!) and God Forbid, TCS , walk around with their noses in the air .

There are a few Indians , thoughtworkers and others , who stand on their own feet, technically and otherwise . But there is also a tendency to "derive" one's own coolness from a company, a co worker etc , which I think is shameful .

On a related thread, yesterday I was speaking to a friend who was in a moral dilemma which was all about being attracted to ,what we in our college days used to call an an AMG (Another Man's Girl). To a degree the attraction was reciprocated and my friend was in a dilemma as to proceed further or not.

In my usual brutally direct fashion,I pointed out that the solution to poverty is not theft . You can't steal another man's girl just because you don't have one (or more :-P ) of your own.

Back to the Fowler Effect .If you are poor in "coolness" the solution is not to steal a bit of Martin's , but to generate some of your own !

In general I think what one ought to do is to strive to reach the levels of excellence exemplified by the person(s) you admire. That is not only personally fulfilling, it is also a fitting tribute to your idol.

Besides it puts the "coolness" where it belongs - inside you .

So, yes, I want to be known for my technical skills . Yes I want to speak at OOPSLA someday. I want to write books . And Martin Fowler has been and remains a BIG inspiration, as a person who has "walked the walk". And Thoughtworks has been very educational . But I don't want ANY respect for having worked in Thoughtworks or having worked with Martin . Just react what I do and who I am and I am more than happy. Having said that, I WILL dedicate the first book I publish to Martin and Thoughtworks!

Tuesday, February 03, 2004

A Tale Of Three Movies

The last few days saw me in the grip of a flu/fever/cough infection that drew my temperature up and enthusiasm down.

So the moment i showed some signs of living to fight another day, I thought i would go and see a movie to revive my spirits. So then I and a friend went off to see Master and Commander - The Far Side Of The World - apretty decent movie about British warship and its battles with a French enemy. More than the naval action though , the story is about the men who sail the ship and fight and die for her. So i was feeling fairly satisfied when I was persuaded to see one more movie and unluckily for me i chose Pooja Bhatt's latest movie called "Paap" (that's "Sin" for you non hindi speakers).

I would strongly urge foriegners who are looking to "understand India " to see this incredibly stupid film. For, in understanding Bollywood's inanities , you would get a glimpse into the hopelessly muddled psyche of the metro dwelling Indian.

First of all if the plot sound somewhat familair, it should be. The script is a rip off Of "Witness"(by Peter Weir, starring HArrison Ford). The hero John Abraham, looks suitably bewildered at various points in the film, but the heroine(Udita Goswami ) who is apparently trying to portray a "Virginal Yet Sensual Indian Woman Tempted By Forbidden Desire" falls flat.She apparently has some lama's trick whereby she can withstand the cold , because she is often shown jumping into freezing lakes with very little on. Jeez just make a soft porn film on something and just be done with it . If Pooja Bhatt wants some direction on how to do this in a "socially relevant" fashion , she should talk to Mira Nair. Spare us the horrendous pseudo philosphy.Mix in a lot of comical lamas and impropable dangling plot threads and you have some idea of what this hopeless movie is like . The best part of the whole experience was the audience , who were rolling in the aisles, laughing at the various "profound " moments in the film.

You know you'd better quit directing when you cook up a scene with "young girl quoting poetry to handsome hunk and hunk falling in love" and the audience is in splits and hooting at the nonsense on screen. As Stephen King once said " Horror and Comedy are the hardest genres to get right. Unless you do it right your horror becomes comedy and your comedy beomes horror". Well, in Pooja's hands Romance becomes rib ticking comedy and the "forbidden desire" motif looks like a couple suffering from simultaneous epilepsy.

Just to remove the bad taste, I put on a DVD of Sholay - a movie made in the 70's and arguably the best movie ever made in Hindi. After the horror of Paap, Sholay was pure bliss. A simple story well told .

A Pity Indian film makers never learn from their few successes.

Monday, January 05, 2004

Software@India

I am beginning to despair of serious design level software development work ever coming to India. The (profit = number of bodies * x $$) paradigm ensures that most work coming to India is of the "here is a framework and here is how you do X. Now do 100 of these. Thank you " type .Of course the framework design happens in the USA .

The same for management . Except a few people who run their own companies or are the CTO/CFO level, most "project management" in India seems to consist of taking orders from higher ups in the USA and "motivating" the technical folks.

So amidst all the rising euphoria about India being the next software destination I am pretty cynical about the whole "our jobs are going to India" clamor i hear from my American friends.

Believe me you folks are better off without these jobs. Go do something interesting with your lives ...

It is not that we don't have talented people in India. But most people i know work at a fraction of their potential. I would guess the reasons are a combination of the Great Indian Laidback Attitude and a lack of opportunity and initiative.

i'm depressed . :-(

Thursday, December 18, 2003

The Thinking Programmer

I was reading Edward de Bono 's Serious Creativity yesterday. The key insight that occured to me is that deBono discusses "thinking tools" which are formal structure one uses for thinking through a problem or focus area.

Later i wrote some code for the Ruby port of HotDraw (implementing double buffering to eliminate the nasty flicker when Figures move on the DrawingView). When iwrote a test and then wrote teh supporting code, it struck me!

Programming is thinking too.

You "think in" a programming paradigm/language combination instead of in a human language but is is still thinking. And every one of deBono's thinking tools should be applicable to programming. .

And when you are programming without needing to think, then you are basically doing "manual labor".

I need to investigate this idea further ...

And today , I am doing some really dumb XML->XSL->PDF transformations,inspecting the finished doc visually to make sure that every dot is where its is supposed to be.Yes i know someone needs to do it but it'snot really very exciting work(to say the least).

Yuck, back to work....

Thursday, December 11, 2003

The Five Levels Of Programming

Just a mental exercise to distinguish multiple "levels" of programmers.

Some of the observations are India and Bangalore specific but the various "types" should beidentifiable everywhere.

Level 1 : the Novice/the Charlatan At the very bottom we have the "great unwashed hordes" - people who studied computer science because "they said that's the best way to get a job" ".The focus for these people are to get into "better " companies (where "better" is defined as "bigger") and move up the career ladder to become a manager as soon as possible.This is the person who seriously believes in iso 9000/cmm level 5 etc as "improving productivity". .On the brighter side this level also include s a lot of people just out of school and who love to program. and are eager to change the world.

Level 2 : the expert This is the guy who knows everything aboout one particular piece of technology . It could be jsp, weblogic,C++ /the PIC microcontroller/whatever. This is the guy who'll tell you what's happening when a particular problem occurs with the technology he is an expert in.("oh just go to a config file foo and change blah to baz" ).Unfortunately in India, even this level of expertise is pretty thin on the ground. Not surprising when you see that most "IT" jobs don't want really intelligent people. (A friend's HR Manager actually asked him to select the "less talented people" when he conducted interviews beacuse the "hacker types won't like our company". Not very surprising when you get a job because you are cheap(er) than because you are good.) The distinguishing characterisitic of the expert is when people in his team /company say " hmm That's a difficult problem let's call in Mr.x "

Level 3 : The Thinker People at this level think about what they are doing and ask a great number of intelligent questions. Most often they use the simple "why" and other "dumb questions" to investigate . This stage is also marked with growing dissatisfaction about the state of the world and a feeling of "I could do better than that " when they see a piece of sub optimal code/design. (This is similair to how a lot of writers start their careers - they read some tripe and say to themselves "this idiot got published? Why I could do better.").In my experience though a lot of otherwise excellent people "freeze" at this stage and never complete the leap across the chasm that separates them from

Level 4:The Hacker This is the person who has gone beyond wishing to actually writing some code , or perhaps writing a book about what he knows.What distinguishes him from a true guru is that his expertise is narrower in scope and he often does not redefine software programming (or a sub area thereof). The charcteristic that distinguishes hime from the "lower" level is that he is well known within his area of expertise. A good example of this type of person are the tech leads of open source projects like Hibernate or the author of a book like "Regular Expressions".These are true "bearers of light".

Level 5:The Guru These are the Martin Fowlers, the Peter Norvigs , the Stallmans and the Torvalds, the von Rossums and the Larry Walls. What they do profoundly changes the world of programming and influences how the rest of the world programs.

'Nuff said

Wednesday, November 19, 2003

What If You Couldn't Program?

I think this is a question every programmer needs to ask himself. Suppose for a moment that you got hit by a cosmic ray that removed the "programmer muscle" from your cerebrum.What would you do ? Let me see... I hate marketing so that takes out a whole slew of professions. Practically anything would require extensive retraining / re certifications.A bit too old too back to school. I got it! I will be a writer! the kind that tells stories... Once upon a time there was a whole country of people who were "hackers" but most of them wanted to move on and become Project Managers .... sounds familiar somehow......

Wednesday, October 29, 2003

A long road

I just did a thought experiment on what one would need to know be a guru in programming and how long it would take.

Of course that raises the question of what it means to say someone is a guru ?

And how does one measure someone's "degree of guruhood" ?

To keep things simple, I chose books as the unit of measurement because it is simpler to measure knowledge that way. If a person has mastered the content of book X, where book X is one of many books a guru has to master (remember books are being used as units of knowledge) then he is that far ahead in being a guru.

Going further I estimated how long it would take Joe Programmer(ok ok , me) to master a book, multiplying the number of chapters in the book with a number of " ideal days " required to finish one chapter.

As my first topic of mastery i selected compilers . I would expect a compiler guru to have mastered the content of (at least)
  1. Programming Language processors in Java (or any other "newbie" book) -- 10 ideal days
  2. Essentials of Programming Languages -- 48 ideal days
  3. Lisp in Small Pieces -- 32 ideal days
  4. A Retargetable C Compiler : Design and Implementation -- 36 ideal days
  5. Advanced Compiler Design and Implementation -- 36 ideal days
giving a total of 162 ideal days .multiplying by a factor of 3 that gives me 162 *3 = 486 real days.

And that is just compilers.

which means it would take Joe Programmer almost one year and 3 months of full time work to become a compiler guru!

No wonder we don't have to many of those around!

Thursday, October 09, 2003

Ruby vs Scheme vs Java ... and the winner is ..

Well the loser is java .

Some context

Martin Fowler was kind enough to send me some ruby code he had written to generate his website. Since I didn't know anything about Ruby, I had to learn it fast in order to understand what the code was doing. I learn best by doing. So the moment I understood a little bit of what he was trying to do , I immediately wrote it out in Scheme, language i did know.Later I tried writing it out in java , just to see how much of a difference there really was in code size.

The java code came to about 300 lines , the ruby code had about 70 lines and the scheme code had around 20.The scheme code "cheats" a bit bacause i used a tree walker macro i have been working on for sometime.Since a macro "expands" at runtime, the scheme code when fully expanded would be about 50 odd lines ...Also I am sure the ruby code could be much shorter but i am a novice @ Ruby Programming ! Eclipse was Java's key advantage, but on a code base this small, an ide is not too important. More than "number of lines" both the scheme and ruby code were very clear and the java code had lots of casts,enumerations, iterators etc. which put a barrier between your mind and the code. I didn't really believe it when Paul Graham said "Succinctness is Power" but I am slowly veering around to this view, even though i still don't think macros are the best ways to provide succinctness .

If Ruby or Scheme or Lisp ever get the kind of awesome refactoring and debugging support Java gets from eclipse,software would be much more fun. That reminds me i need to look into how exactly Eclipse plugins work .....

More importantly, I learnt a number of things from Martin's code.

First, keep it simple.Where i would have used XPATH to navigate an xml tree, Martin used simple recursive tree descent.Lesson learned == Don't use a library just because it's there.

Second, when learning a new language,it is much better to modify/otherwise extend an excellent piece of code rather than start with "Hello World". You get to pick up the idioms (and other "good practices" of the language )faster this way For eg : I extended Martin's code to use a templatefile (a series of template files actualy one for the main site layout and one each for each"document type") ,instead of directly rendering to html, mainly because I can't "think in html" ! Lazy coder that i am got my friend Manoj to whip up a template "look and feel" for me and i just point at the template from my code, and i did this keeping a copy of Andy Hunt's ruby book at my side to clear any ruby road blocks.

Third, read read good code. Programmers, even the good ones don't read as much code as they should.I ,for one, have decided to read at least 10-25 lines of code a day, in addition to writing code daily.

This seems to be one of those blindingly amazing (in retrospect) ideas,that hit you over the head so hard you wonder how you never thought of it. Tomorrow, i'll add an RSS feed to the blog.I need to refactor the code a lot too .