Monday, October 19, 2009

I am looking to rent a 2 BHK (2 bedroom, 2 bathroom hall kitchen) apartment (not an independent house) in Bangalore, 1200+ sq ft. I want a quiet (so no ground floor flats), well lit (surprising how many apartments in Bangalore don't have good windows) apartment (with the usual "peripherals" - power and water backup, security, gym, swimming pool etc). Oh yeah and Airtel Connectivity. Airtel is the best ISP in Bangalore but don't cover all areas equally. I can't live without the Internetz - the main reason I don't live in Trivandrum.)

If any reader of this blog is an apartment dweller and would forward me info on any "to rent" flats, I would be very grateful. Navigating the completely broken apartment rental system in Bangalore is very painful. I would rather deal directly with the owner/renter if possible and not with a middleman, though wouldn't mind paying for a really good broker. (Most are completely clueless and just waste my time).

So if you know anyone renting a nice apartment, do send an email or tweet. Thanks in advance.

PS: I am not changing my marital status (bachelor) or food habits (non vegetarian) to "qualify" for an apartment! ;-)

Update: Found an apartment that meets all my criteria (Thanks to this blog entry! Thanks Vishy! Thanks Prakash! I owe you both a beer!).

The agreement is not signed yet, but the owners seem to be very nice people so I don't anticipate much difficulty. Touch Wood.

Update 2: The rent agreement was signed today. Thanks to everyone who sent in reccomendations. Blogs are useful things after all!

Monday, September 28, 2009

"Candidate A is a great programmer. He is unbelievably fast, very creative, has a lot of knowledge. He sees a problem and has brilliant solutions at hand very quickly. He just gets it. But he is not a team player. He'll go off and do stuff his way without telling anyone. Nobody sees his code before he's done. He hates discussions. He might just ignore any decisions that were made. And you never know if he'll quit tomorrow.

Candidate B is not the most creative type. His code is acceptable but you can see his limited experience. He is still good and he certainly gets the job done but there's not much you can learn from him. But he's extremely reliable and very loyal. He's happy with any work that comes along. He's a very good team player. He will give his input but accept decisions once they're made. People enjoy working with him.

What would you do? Pass on both of them? Hire A? Hire B? Wait for somebody who is a programmer as A but as reliable as B (and risk waiting forever)?"

Paul Graham responds

"Incidentally, if you're funding rather than hiring, you generally want A. That's one reason I'd rather be an investor than a boss."

Bosses want to control (or "boss around" ) their subordinates. Funders want to maximize chances of success. These are not necessarily identical, or even congruent forces.

I was thinking of a "startup within BigCo" effort I was (briefly) part of and one of the fundamental mistakes made was that no one really acted like a founder or (more importantly) a funder.

Talented (if not particularly aggressive) people, lots of money. One Year. Lots of meetings (Oh God were there meetings! We had meetings about meetings. Meetings to report results of *other* meetings. Meetings to discuss the agenda of forthcoming meetings...).

No product. No revenue. Lots of PowerPoint.

Lots of hope.

My prediction? This effort will meander along for another year or so, produce some tiny revenue streams (eventually) and then die a quiet death. Which is a tragedy. The people involved (with a couple of exceptions) were all great and I would work with any of them again in a heartbeat. The system was self defeating.

Saturday, September 26, 2009

The blogosphere is ablaze with"duct tapers" vs "agilists". As usual, there isn't much logic behind all the fiery arguments.

This is what happened. Peter Seibel interviewed Jamie Zawinski about how he built the original Mozilla browser for his *great* book Coders at Work. In it, Jamie was scathing about design pattern cultists who kept waving the "Gang of Four" book around and having intense discussions about the "right" pattern and so on, but couldn't write good code to save their lives (Sounds like some people we encounter today? Read on!). Joel Spolsky, writing a review of the book took a dig at what he saw as the successors of the design patterns cultists - people who write books and attend conferences etc and wave different books around.

Robert Martin, one of the chaps who signed the Agile "Manifesto" wrote a very logic lite, but moderate(for him), article juxtaposing "Duct Tape programmers" against what he calls "Clean Code" programmers. A few more bloggers took their lead from him and blew this artificial dichotomy between "shipping" coders and "clean coders" into a full fledged blog war about (as usual) nothing much.

The first thing to note is that this is a storm in a teacup. For all the fury on blogs and twitter, essentially people who really write great code and ship continue to do that, not paying any attention to these passing fads.

Software has, from the time it became important enough to build businesses round, always had flaky methodologies and people who try to sell them.

Just in my experience, first there were the "OO will save the world" hypesters, including the design patterns evangelists - this was the crowd Jamie encountered. Then there was RUP, then XP, then agile, now "lean software".

The common pattern in all these fads (and a quick way to recognize these things as fads) is to realize that the set of people who try to sell methodologies and the set of people who are brilliant programmers, product designers and so on are completely disjoint.

Do a thought experiment. Think about some brilliant programmers you know, the "change the world with code they write" type folks. For me these are people like Peter Norvig and John Carmack and Paul Graham and Linus Torvalds. You may have other heroes.

Can you imagine these people peddling agile? Just try envisioning it. Linus Torvalds trying to become a Scrum Master?

Your mind will melt down.

Think about people who've designed world changing products. (Jonathan Ives who designed the IPod for example) Do these people peddle methodologies or act as methodology consultants? Does Steve Jobs do this? Would Warren Buffet do this?

Here is the secret. Nobody who is really good at programming/product design/marketing/business (or anything) will demean himself by trying to make money telling other people how to do what they are good at. They'd rather do whatever it is they are best in the world at. World Champions may become coaches when they are old and tired and broken down, not when they can still play and win.

The standard defence is "but, but, but we are coaches. Even Tiger Woods has a coach, Coaches aren't necessarily the best players".

Yes in some fields coaches have value. The interesting thing is that it is Tiger Woods chooses a coach, and validates his coaches' skill by becoming the best golf player in the world, not the other way round.

When Linus Torvalds hires Uncle Bob to educate him about how to write Kernel Code better, or Tim Sweeney hires Ron Jeffries to help him design the next Unreal Engine, then then yeah they are "coaches". The fact is, sports doesn't map to software all that well in this aspect.

The best programmers don't hire "agilists" or "RUP Experts" or "Six Sigma Black belts" or whatever as coaches. If they have design issues to thrash out they talk to other brilliant developers. Brilliant product designers might talk to other brilliant product designers.

Fact of the matter is, "agile coaches"(and other methodology vendors) are hired by some combination of mediocre corporations, mediocre managers, and mediocre teams. Agile in particular rose in the enterprise world and that is where its focus (rightly) remains. So yes, if you work in the enterprise world, you sometimes get stuck with such "coaches" and get caught up in the latest methodology fads. It is just something that goes with the job. You might even want to become such a "coach" figure than muck around with some 10 year old accounting module from hell. It is an easier life. More power to you.

Now I'll tell you how to shut up an agile (or any other methodology evangelist). From my comment on Luke Halliwell's blog post, "the Agile Disease"),

"The problem with agile is not “consultants” per se but “consultants” who have no credibility building and delivering great software.

For Games, when John Carmack or Tim Sweeney advocate agile for game studios, I’ll listen.

When its someone who has no product we can judge, advocates a methodology that failed in its very first project, where it originated (spare me the redefinitions of “failure” If the client kicked the team out that is “failure” enough for me) that is a different kettle of fish entirely.

Next time an “agile consultant” pitches for your money, ask him to show you code he has written that made a substantial change in your domain.

“I wrote/ led-the-team-that created Doom/Unreal/World of Warcraft” is acceptable.

“Oh yeah I created this uber cool enterprise system which you can’t look at and I don’t have any open source code, but I know how to write clean code and to “lead” teams, cross my heart” isn’t.""

The key sentence is this,

"Next time an “agile consultant” pitches for your money, ask him to show you code he has written that made a substantial change in your domain."

The fact is no agile consultant today has written any world changing code,nor have they designed any world changing products (Imagine the guy who designed the IPod peddling a product design methodology for a living) or built or run any world changing companies.

The "coach" argument is dismissed easily too. If they are coaches, are their clients brilliant programmers? (this is where the Tiger Woods analogy falls down) It is always some El Crapola enterprise project *manager* who hires a methodology coach, never a great programmer, or team of great programmers (Do you think when Paul Graham, Robert T Morris and Trevor Blackwell were working on ViaWeb, they needed an "agile coach"?) .

Coming back to the Jwz-Spolsky-Uncle Bob tangle, just think of who among these three is trying to sell you something. Jamie doesn't sell anything (well I think he sells drinks and entertainment at his club/bar/whatever but he doesn't sell anything programming related). Spolsky sells a Bug Database. Uncle Bob sells Training Courses (via his company Object Mentor).

Now there is nothing wrong with selling anything in a capitalist world. But there is a motto every buyer should live by, Caveat Emptor- Buyer Beware. It is upto you to be on the defense against snake oil salesmen (of whatever category) and it is up to you to ensure you don't spend money on being "coached" to become a good developer by people who aren't themselves great developers.

TDD vs Duct Tape is a false dichotomy. There can be great design and code without TDD (or even unit tests) and rigorous TDD can result in terrible, ultra brittle codebases. (Private joke for ThoughtWorkers of a specific era - anyone seen "Class FieldedBusinessObject " recently?! Those were the days!).

TDD as a "design methodology" has no legs (See an agile "guru" struggle to write a Sudoku Solver). Having unit tests helps in regression testing and maintenance. That's it. If you need unit tests to "design" you aren't a great designer of software. Sorry. Sad but true.

Every fad eventually dissipates and sometimes they leave behind (very small) nuggets of value. The "everything should be modelled with Objects" fad passed (remember all the books from Booch and Rumbaugh and Iverson about how to do Object design?). Design Patterns are almost dead as a movement. Agile is facing a backlash (and will die soon enough).

Will there be other as yet unimagined fads (and associated methodology consultant/certification types) who'll replace agile? Of course. As long as fools with money are willing to be "coached" into improving their programming ability, there will be demand for such fraudsters and where there is demand, there will be supply. Whether you should be part of this supply/demand equation, and at what cost to your soul, you have to decide.

Let all these distractions and squabbles flow by. Focus on doing good work (however you define good work). Learn from people who are really good in your chosen field. Shut out the babbling of the methodology vendors and consultants.

So if you are a programmer trying to get better, just write the best code you know how. Then get better. Listen to people who are better programmers than you (Read "Coders At Work"!). Ignore the fads.

Update: jwz's reaction to this whole fiasco "It's such a strange article, in that it's mostly favorable to my point of view but with such a breathless amazement to it, like he's just discovered an actual unicorn or something. "Look, everybody! Here's a hacker who actually accomplished things and yet he doesn't fetishize the latest fads that I and all of my friends make our living writing about!"

[1] What makes the book "Coders At Work" awesome and a book every programmer should read, in my opinion, is that the author interviews great programmers, not random fad vendors. There is a lot of wisdom in the book.

If he ever writes "Methodology Vendors at Work" how many people will buy a copy? ;-)

Friday, September 18, 2009

My friend and ex-colleague (from my days at ThoughtWorks) was in India recently to speak at the CodeChef conderence, an invite only geek conference organized by Naresh Jain (another friend and ex-colleague from TW ! Did I mention I have awesome friends?) and has put his slides on "Releasing to Production Every Week" online.

Unfortunately I wasn't around when he was in Bangalore, but since he has put his slides online, (imo,) everyone in the business of producing software should take a look. (That is deploying *to production* every week btw). Owen is a brilliant, thoughtful developer, and it shows (e.g, see this blog entry).

Sunday, September 13, 2009

People I worked with in Intuit will understand why I am rolling on the ground laughing and wiping tears of mirth. (especially those who attended the very first "generate ideas for GBD" meeting).

And there was this one manager who smirked when I said that Mint.com was a big threat to Intuit and that Intuit would eventually have to pay big money to acquire them, if the "startup within the company" efforts proceeded on their existing trajectory.

Now who's the chump boyo? :-P

Don't get me wrong. Intuit had (and has) a lot of very nice people working for it, but it is hardly the most congenial environment for "startups".

My (politically incorrect now doubt) opinion is that this is a *good* thing. Large companies with entrenched bureaucracies can be many things but the one thing they can't be is innovative. They *should* innovate by acquiring startups who do. In that sense this is a great deal. Intuit has the money. Mint.com has the people with the tech chops. Win Win.

*If* handled correctly (big if) an Intuit backed Mint.com (however it is branded tomorrow) could be fearsome. But, as I said, it is a big if.

From the WallStreet Journal.

"Intuit plans to rewrite its Quicken Online software to be powered by Mint's technology."

Slava Pestov just added Advanced Floating Point support to Factor. A very impressive piece of work. As someone who works with large datasets and machine learning algorithms, I've been bitten by weird floating point "features" of many mainstream languages (For those who don't know how important FP is, take a look at "How java Floating Point Hurts Everyone" (warning pdf) - an old paper but a good one, to get some background).

Anyway, this got me to thinking of who (among language implementors) I am most impressed by and I came up with the people working on GHC (I think mostly Simon Peyton Jones, I could be wrong), Slava Pestov (Factor) and Rich Hickey (Clojure). All these implementations have this mind bending quality that if you read the source for a while, you'll *always* learn something new. The Lua implementation has this quality too.

In the second bucket (the "average") come the various Ruby implementations (and Python). yes you can learn stuff by reading the code, but it is mostly "ho hum"Ruby is a weird case. The JRuby and Rubinius implementations in particular, have some clever ideas and have very bright people leading their efforts (as Slava pointed out on Twitter), but the original MRI implementation is so, for lack of beter words, brain dead, that *on the average*, Ruby implementation quality is only so so. (This is probably an unfair characterization but hey I was *tweeting*! You expect a reasoned thesis?!)

If you want to see an undead zombie of a language (in terms of the suckiness of the implementation), look at PHP (the language sucks too but that is another rant).

NB: I am talking of the quality of the *implementation* of languages here, not the design of the language, though the two are often correlated.

Friday, September 11, 2009

Once upon a time, I wrote this blog entry. Peter Norvig references it (indirectly) in his interview in Peter Seibel's great new book "Coders At Work".

"Seibel: Though your job now doesn’t entail a lot of programming you still write programs for the essays on your web site. When you’re writing these little programs, how do you approach it?

Norvig: I think one of the most important things is being able to keep everything in your head at once. If you can do that you have a much better chance of being successful. That makes a small program easier. For a bigger program, you need extra tools to be able to handle that. It’s also important to know what you’re doing. When I wrote my Sudoku Solver, some bloggers commented on that.

They said, “Look at the contrast—here’s Norvig’s Sudoku thing and then there’s this other guy, whose name I’ve forgotten, one of these test-driven design gurus. He starts off and he says, “Well, I’m going to do Sudoku and I’m going to have this class and first thing I’m going to do is write a bunch of tests.” But then henever got anywhere. He had five different blog posts and in each one he wrote a little bit more and wrote lots of tests but he never got anything working because he didn’t know how to solve the problem. I actually knew—from AI—that, well, there’s this field of constraint propagation—I know how that works. There’s this field of recursive search—I know how that works. And I could see, right from the start, you put these two together, and you could solve this Sudoku thing. He didn’t know that so he was sort of blundering in the dark even though all his code “worked” because he had all these test cases.

Then bloggers were arguing back and forth about what this means. I don’t think it means much of anything—I think test-driven design is great. I do that a lot more than I used to do. But you can test all you want and if you don’t know how to approach the problem, you’re not going to get a solution.

Seibel: So then the question is, how should he have known that? Should he have gone and gotten a PhD and specialized in artificial intelligence? You can’t know every algorithm. These days you have Google, but finding the right approach to a problem is a little different than finding a web framework.

Norvig: How do you know what you don’t know?Seibel: Exactly.

Norvig: So I guess it’s two parts. One is to recognize that maybe there is a known solution to this. You could say, “Well, nobody could possibly know how to do this, so just exploring randomly is as good as everything else.” That’s one possibility. The other possibility is, “Well, probably somebody does know how to do this. I just don’t know what the words are for it, so Ihave to discover those.” I guess that’s partly just intuition and saying, “It seems like the kind of thing that should be in the body of knowledge from AI.” And then you have to figure out, how do I find it? And probably he could’ve done a search on Sudoku and found it that way. Maybe he thought that was cheating. I don’t know

.Seibel: So let’s say that is cheating—say you were the first person ever to try and solve Sudoku. The techniques that you ended up using would still have been out there waiting to be applied.

Norvig: Let’s say I wanted to solve some problem in biology. I wouldn’t know what the best algorithms were for doing gene sequencing or whatever. But I’d have a pretty good idea that there were such algorithms. Then I could start looking around. At another level, some of these things are pretty fundamental—if you don’t know what dynamic programming is, then you’re at a severe disadvantage. It’s going to come up time and timeagain. If you don’t know this idea of search in general—that you can make a choice and backtrack when you don’t need it. These are all ideas from the ’60s. It was only a few years into programming that people discovered these things. It seems like that’s the type of thing that everyone should know. Some things that were discovered last year, not everybody should know.

Seibel: So should programmers go back and read all the old papers?Norvig: No, because there are lots of false starts and lots of mergers where two different fields develop completely different technology and terminology, and then they discover they were really doing the same thing. I think you’d rather have a story from the modern point of view rather than have to follow all the steps. But you should have them. I don’t know what the best books are for that since I picked it up the hard way, piecemeal."

Dr. Norvig is a much nicer (and wiser) person than I am. I (completely) agree with him that bloggers' blather (including mine) doesn't mean much and TDD is great as one (vs the only) tool in one's arsenal.

That said, I still think many so called "agile" "gurus" can't program for nuts, as Jeffries so amply demonstrates. It is hypocrisy of the first order that people who don't know how to program well advise the rest of us how to. The "agile" movement brimmeth over with such pseudo programmer snake oil salesmen.

"These are all ideas from the ’60s. It was only a few years into programming that people discovered these things. It seems like that’s the type of thing that everyone should know."

"Should know" is correct. It is also true that most "developers" wouldn't know Dynamic Programming if it showed up at the front door and slapped them silly.

One reason for this is that most "enterprise" programming uses essentially two data structures, the List and the Hashtable and most language implementations provide default implementations of these. And a lot of "programmers" do this all their lives and think they are cool because they drank the latest/greatest shiny methodology Kool Aid. And these folks get the "gurus" they deserve!

"Seibel: What about the idea of using tests to drive design?

Norvig: I see tests more as a way of correcting errors rather than as a way of design. This extreme approach of saying, “Well, the first thing you do is write a test that says I get the right answer at the end,” and then you run it and see that it fails, and then you say, “What do I need next?”—that doesn’t seem like the right way to design something to me."

heh! heh!

Anyway, it is great that something I wrote got reflected, however indirectly, in this great book.

Coders at Work is a great book with legendary programmers talking in great detail about many aspects of programming. It is very interesting how Peter Seibel (the author) has captured each "voice" so perfectly. Every programmer should read this book, *especially* if you are stuck in a sucky job writing leasing systems (or accounting systems or whatever).

"What power would Hell have if those imprisoned there were not able to dream of Heaven?" as the Dream King says in Neil Gaiman's "The Sandman", but even at the cost of granting Hell some power, do dream of Heaven, say I, for that way lies eventual redemption.

This book provides a glimpse of what programming looks like for people who are already "in heaven".

"Seibel: What about books? Are there particular computer-science or programming books that everyone should read?

Zawinski: I actually haven’t read very many of those. The one Ialways recommend is Structure and Interpretation of Computer Programs, which a lot of people are afraid of because it’s Lispy, but I think does a really good job of teaching programming without teaching a language. I think a lot of introductory-level stuff focuses on syntax and I definitely saw that in the classes I had in high school and in the intro classes at Carnegie-Mellon during my brief time there.This is not teaching people to program; this is teaching people where the semicolon goes. That seems like the kind of thing that’s going to scare people away from it more than anything, because that’s not the interesting part. Not even to someone who knows what they’re doing.

There was another book—what was it called?—about debugging, written by someone from Microsoft. It was about how to use asserts effectively. I remember thinking that was a really good book, not because I learned anything from it, but because it was the book you wish your idiot coworker had read.

Then there was another book that everybody thought was the greatest thing ever in that same period—Design Patterns—which I just thought was crap. It was just like, programming via cut and paste. Rather than thinking through your task you looked through the recipebook and found something that maybe, kinda, sorta felt like it, and then just aped it. That’s not programming; that’s a coloring book. But a lot of people seemed to love it. Then in meetings they’d be tossing around all this terminology they got out of that book. Like, the inverse, reverse, double-back-flip pattern—whatever. Oh, you mean a loop? OK."

heh heh!

This book is really good and I am sitting here and reading this instead of working (and I have a LOT of work to do). I'll do a full review later, but if you are any kind of programmer just go buy it already.

"Average" could be interpreted different ways - "dumb" (either absolutely or relative to alpha coders you do have), "low energy" (due to lack of time to focus on programming/ wanting to go home after 8 hours of work/ whatver), "low experience" (hire people with no programming experience), etc etc.

But all said and done, if you are going to need many average programmers on your project *before* you make (decent amounts of) money, then the decision to use Java (or C# or whatever the "mainstream" language is) is probably justified.

The question is a bit more subtle than it looks and has some circular reasoning baked in, but it serves to encapsulate all the reasons people select Java as a main programming language in a startup and can probably serve as a rule of thumb simplifying approximation.

The bigger question is what exactly does it mean for a startup to depend on "average" programmers, (I can't think of a convincing example of such a software startup, but I am sure they exist somewhere) but that is a question for another day!

Thursday, July 23, 2009

For context, see the two previous blog posts on this topic :- part 1, part 2

I was talking to yet another friend who is building a startup on the side (while holding down a 9 to 5 job) and after discussing his idea a bit I asked him the question "So why are you using java, given that you have very little time to work on your startup idea?" and after backing through the usual "problems" with more powerful languages, ("support", scalability etc - see the anonymous comments on my earlier blog entries on this topic) he said (paraphrased)

"I guess the final reason is somewhat depressing. I would have definitely used Scala if I were say 5 years younger :P. I am starting to feel that little bit of laziness when it comes to researching and learning things" .

This was a great eye opener for me because my friend is a *good* programmer and not in the least "managerial".

First, I am kind of unusual (some would say crazy, ;-)) in that I am still enthusiastic as I was ten years ago (or more than I was 10 years ago) about all things technical. I am perfectly happy reading a technical paper, or some source code or a technical book on the bus, in the train, waiting for lunch, in bed before sleeping and so on.

Second, I think nothing of working 2 days flat out and then crashing for 12 hours or working nights for a few months.

Third, I don't have a wife and kids who (rightly) require attention (the girl friend is used to my crazy ways and very undemanding, bless her kind soul). I don't have to feed the kids and send them to college so a 9 to 5 job isn't the necessary evil that it is to most folks.

So (in matters relating to programming) I am still 20 years old in my head, with the whole world wide open and full of possibilities, while other people my age have to do what they can in the *very* limited time they have. Given this, upgrading to the latest greatest language/toolkit/ os/ whatever may have a lesser priority than would be apparent to someone like me. My conceptual mistake is to extend my "mindset" to others. (yes once realized this is a obviously stupid idea!)

So maybe one of the reasons some programmers choose java for a startup is that they are of an age where there simply isn't the time or energy to constantly upgrade. You are very productive with Java through sheer experience and the time or energy to master a completely new ecosystem is simply not there.

Which has some consequences of course - in that such a programmer can often be outcoded by a kid whose innate brilliance and energy I enough to make up for the (relatively) old man's wisdom and experience.

Which maybe why, historically, most of the technically ground breaking software startups have been founded by brilliant teenagers who can hack.

Wednesday, July 22, 2009

When I last worked at MegaCorp, I would be in the office by 6.30 in the morning and leave by about 3.30 in the afternoon. This was non negotiable and part of the agreement I made with the company. I could work[1] productively for about three hours before the day's meetings and "manager work" started and the rest of the day usually went downhill very fast. I had some dim sense of "preserving my sanity"as a reason for doing this and it worked very well in this regard, but I could never explain clearly why this worked so well.

Now I know. Paul Graham writes an excellent essay on the different notions of scheduling for managers and "makers". A must read for both managers and programmers.

[1] At MegaCorp "work" had strange meanings - it was mostly measured in the degree you sucked up to your superiors (I am not being condescending here. I watched several masters of this art who would apply a frightening degree of focus on "managing upwards". Very educational but very scary), and how many meetings you attended. By God, did we have meetings. One of the reasons I left (not the most important one!) was that we started to have meetings about meetings and I came out of these dispirited and demoralized and completely drained.

Tuesday, July 21, 2009

In my last blog entry I had asked the question "Why do startups use Java (vs more powerful languages - Clojure, Scala etc - on the JVM, or other languages like Haskell or Erlang)?"

I had the opportunity to talk to a couple of ex-colleagues who are working on their startup (which, I predict will be *astoundingly* successful - these are very intelligent, well funded, capable -even the"business" guys is a good programmer - guys with some cool software) and I asked them this question and the answer was " (1) we find it hard enough to get good programmers. Adding a requirement for an unusual language will narrow the field (2) we don't have the time to train people. People should come on board ready to code. Unusual languages make this more difficult".

Both are thoughtful responses. I have some thoughts on these, but they will have to wait for another blog entry. Just throwing it out here for anyone interested.

Saturday, July 18, 2009

I can't imagine what competitive advantage using Java (or C#) to create a startup provides these days. I can see why the JVM is sometimes a good idea. But java?

The only advantage Java provides *these* days over something like Clojure or Scala (or Python or even a c + scripting language combination depending on domain, let alone more powerful languages) is that you can be sure an average dumbo "programmer" hired off the street won't run away screaming when introduced to the code base. But if you are a software *startup* (vs big, fat and slow MegaCorp), why would you want to hire "average" (we'll be kind here) programmers?

I mean if you need a lot of libraries, use a better language on the JVM. If you need only a few, use the most powerful language you know. I would have thought it was obvious.

Well I thought about it and found an answer.

Startups are not necessarily founded by great programmers (who presumably are fluent in better languages than java or C#). They are often founded by MBA/business types who bring in a programmer they know and unsurprisingly enough these are the mediocre "enterprise" type of programmer. And they reach for what they know and are comfortable with, and hey presto, yet another j2ee/dotNet startup!

for good programmers looking for interesting projects/jobs. I know people doing interesting things (startups or other interesting projects). I also happen to know some really good programmers (who are as rare in Bangalore as they are elsewhere). Sometime I am able to link the former to the latter. If I didn't have so much to do I would probably start something like "Really Cool Jobs for really cool programmers in India dot com".

And since I connect only people I know personally, I can put my credibility behind them they are able to bypass multiple levels of interviews and such. Maybe there is a business model in there somewhere? (just kidding. I have enough to do for the next 10 years and my pile of "things to do" would be just as high).

Saturday, June 27, 2009

One thing I love about blogging is how it enables me to think clearly. I wrote about how I turned down a couple of "good" projects in my last blog entry and gave some reasons. But something kept nagging at me as to why I turned down these projects.

I just realized that I turn down some projects because I don't want to be a part (*any* part, no matter how well compensated) of a mediocre project any longer. (I've had my share of mediocre projects, especially during my "outsourced enterprise" days. Been there, done that got the t-shirt -nutshell version -> life is not worth living when you spend 8+ hours a day on a sucky project).

Now I've decided to work *only* with good people on good projects, producing excellent code that provides great "customer value".

Funnily enough, I seem to have made the decision and committed to it before I was consciously aware of doing so.

Once upon a time a friend asked me to come work at his company(which will remain un named). Just as I began to turn it over in my mind, I heard myself say *very vehemently* " I'll beg on the streets before I work for [company]".

I was the one most surprised. But ...it felt right. I *will* become a beggar rather than work for that company.

And now I will never ever work on a project/company/team that doesn't make excellence a goal and way of life.

Life is too short to be mediocre. *Trying* for excellence and failing is better than compromising "successfully" with mediocrity.

Thursday, June 25, 2009

As an independent "consultant", I get to hear a lot of project ideas. Most aren't worth listening to because it is just MBA types trying to extract free labor from technical people, but once in a while you come across some projects which are good or decent but you have to turn them down anyway.

I was talking to a brilliant guy the other day who wanted me to come into his organization, take charge of his engineering team and ramp them up the effectiveness scale while simultaneously welding 6 different (java/j2ee) codebases into a single "suite". Generally when I am asked to do such "enterprise-ey" jobs, I just turn them down flat, but this guy was a very atypical manager and so I actually thought about it.

It would take on the order of two years to get the desired effect and ramping up an indifferent technical team into a top notch team is one of the hardest things in the world to do well (no matter what an "agile consultant" would tell you ;-)). After thinking about it for a bit, I decided that the opportunity costs of working two years on something like this is too high (for me). Besides, I'd rather build a new team of brilliant people than ramp up mediocre people and processes.

Yet another project I turned down recently was a healthcare project that seemed promising. Unlike the usual MBA hallucinations this idea actually had a decent business model, clients waiting to give them money, real domain expertise and so on. The problem was that neither did they want to give away equity to the technical folks who built the product nor would they pay a high enough amount of money to be worth the time and effort it would take. Their ideal deal was "we'll pay you a modest amount now (NB: this is far better than the usual "work for us for free" deals most MBAs propose) and once you've built the product, we'll raise some VC funding (In my opinion, they had a good enough idea that VC funding wouldn't be a problem even in these times) and then we'll give you a decent fee and that's it".

Unfortunately (a) the nature of the product was that it couldn't be built by your garden variety enterprise programmer(some significant algorithmic challenges to overcome and some tricky programming to pull off) and besides they'd already tried this with some "enterprise outsourcing" folks and failed badly (b) a good programmer wouldn't take on this magnitude of work without a *huge* fee or significant equity and (c) none of the founders were technical (they were doctors) and they couldn't see the sense of giving equity to someone akin to a carpenter or a mason. You don't give equity in your company to a carpenter who builds the tables in your company would you ? ;-)

Which brings me to my central point. Even in this recession, practically every company I know (the bodyshoppers - Infosys, Wipro TCS Satyam etc being the exception) is hiring (though more selectively than usual), people are still proposing projects (with funding available) to a degree where some one like me who doesn't even actively look for such projects or jobs can have the luxury of turning down what would seem very attractive terms. I know people who would kill for a two year engagement with excellent pay, which was essentially what the first project I mentioned was.

The one group of people who are really hit by the recession is people just out of college. Some really good people aren't getting entry level jobs, but I am not sure it isn't actually good for them in the long run. Working for Wipro or IBM Global or Accenture is a sure way to waste years of your life for not much return(as a few thousand people in Satyam just found out).

Somehat tangentially, one problem I see with people trying to do a startup/work as an independent consultant etc, is that very few people have any *distinctive* skills that give them a competitive advantage. Knowing J2EE or Ruby On Rails (and possibly a smattering of "agile" or "lean software" or whatever the latest fad is) makes you just like the ten million people already on the market, at least on paper. What do you know/what skills or advantages do you have that (most) other people can't compete with you?

I've been on twitter for a couple of months now and am getting tired of it already. Twittering does have its benefits, especially the need to shrinka thought to its bare essentials, but I find it detracts from my more thoughtful writing.

Of course twitter wasn't intended to replace blogs, it seems more of an "update what you ae doing" thing. And I write quite a bit of the "thoughtful stuff" on YCombinator, so the blog gets increasingly neglected.

Well, time to change(back). I am traveling in internet access-less places till about the 10th of July. Once I get back I'll put my writing on a more regular schedule.

Friday, May 22, 2009

The Indian IT "industry" has long been known for its tendency to hire people to grind through ultra grungy work that no one in the West wants to do and so is outsourced here.

As an "independent consultant", I hear all kinds of oddly structured project proposals and job offers and I am not sure if it is a trend, but over the last couple of weeks, I have been hearing about jobs with very non standard requirements - I know of a company using Erlang to do some AI-ey things, another doing Natural Language Processing with Scheme, yet another looking for people with Scala experience, and quite a few looking for strong C skills + deep algorithmic knowledge.

As I said, I am not sure this is indicative of a groundswell of good jobs, but I think it s great that *some* people are trying to move away away from crap J2EE/RoR enterprise crud (pun intended) jobs.

Sunday, May 17, 2009

And I say, good riddance to bad rubbish. This inhuman s.o.b assassinated an Indian Prime Minister, (Sinhalese) politicians, rival Sri Lankan Tamil politicians, recruited children to be cannon fodder and led thousands of his followers into death and desolation. On principle, I oppose anyone who kills innocents in the name of some holy cause of religion or ethnicity or political belief.

Parallelly in India, the voters of Tamil Nadu have voted against the pro LTTE parties and handed them a convincing defeat. It is insane for a vocal minority in Tamil Nadu or the West to ask India to interfere in the another nation's internal affairs just because some people there speak the same language as some Indian Citizens. If this kind of reasoning is valid, Pakistan's meddling in Kashmir is valid too. At best, it is a superficial activity like our own NRIs (Non resident Indians) pontificating about what policies India should adopt while working towards American citizenships. Hypocrites all!

No matter what happens in SriLanka, it is matter for *Sri Lankans* to resolve. India can use peaceful means to try influencing Sri Lanka for sure but sending the Indian Army to fight in Sri Lanka and arming/ tolerating the LTTE before that was stupidity of the first order. Sri Lanka will work out its solutions as per the wishes of the Sri Lankans.

To conclude, congratulations to the Sri Lankan Army. Now, if the Sinhalese leadership can follow military victory with a halfway decent political reform/reconciliation effort, that will be the end of this insurgency and this part of the world will have peace.

Here is to hoping the Islamic terrorists get wiped off the pages of history as well. Hopefully Osama Bin Laden and his gang of fanatics will soon hang from the lamp posts too. Then the rest of us can get on with our lives in peace.

Friday, May 15, 2009

The results to the parliament elections will be known in a couple of hours. Just a short note here to record my appreciation of how lucky I am to be living in a democracy. If I were born in China (for e.g, or North korea or Saudi Arabia ... ), I would probably have gone to the wall long ago.

Even with all its ills and the wrong people winning sometimes (e.g Mr Shashi Tharoor, an audacious carpetbagger, is leading in my home constituency as I write this. Ugh!), democracy is still the best system in the world and I am blessed to live in one!

PS:Still many things to improve. Web coverage of the elections is abysmal. The Election Commission's website crashed. They run the site on IIS/ WinXP (!!!).

My friend Peter Thomas wrote an excellent blog entry on the evolution (if zombie like undead shambling monstrosities can be said to "evolve") of the JSF "framework". If you work in enterprise programming you owe it to yourself to read this. If you don't work in enterprise software, but like horror stories, give it a quick glance. (and thank Merciful Heaven that you have better ways of putting bread on the table!).

Oh and if a so called "architect" in your organization reccomended JSF for your project, strangle him with the nearest power cable!

Sunday, May 10, 2009

I am putting together a campaign in between bouts of coding. Will probably be a while before I finish, and still haven't thought of the logistics (where to meet, how often etc) so this is more to gauge interest.

If anyone is running a group in Bangalore already, please let me know, I'd like to drop by and see how you run a (D&D or GURPS) campaign.

Friday, May 1, 2009

The RoR "community" has the tendency to break out into episodes of frenzy over the most absurd events - a "feature" I am personally grateful for, since it helps said community attract and retain a very specific type of software developer, thus keeping him away from the more pragmatic and well engineered frameworks, an unstinted blessing for the rest of us un-hip developers.

The latest kerfluffle is about a presentation someone made at a conference. (The one before that was the programmers at Twitter converting a chunk of their *own* code from Ruby to Scala - you get the idea).

Anyhoo, if you have a couple of hours to kill and/or feel strongly about feminism/free speech, Martin Fowler does a good job of extracting the main threads out of the maelstrom and clarifying the issues. The conclusions are a little shaky (especially the "win against the suits by promoting women" idea), but a brilliant job nonetheless.

So, beyond the fact that I am happy that this long dead and decaying horse is being whacked less and less as the days go by what do *I* think about the fundamental issues?

Outlook India has an article on Ministhy Dileep, a DM (District Magistrate) who has been raising hackles in the badlands of Indian politics by scrupulously enforcing the laws.

Ministhy was my batchmate at the College Of Engineering Trivandrum. Ministhy was doing her BTech in Electronics while I "studied" Industrial Engineering. (The quotes around studied == I was never in class and was always doing other .. ahh .. interesting things, while Ministhy was a model student).

Anyhow it is good to see her play such a crucial role in the functioning of our democracy.

Wednesday, April 8, 2009

Luke Halliwell wrote a nice blog entry titled "The Agile Disease" as a reaction to some Scrum "Masters" trying to "agile enable" his (games) company.

he says "The games industry is rushing headlong to Agile development methodologies just now; it’s a great source of excitement for some, with conference sessions and magazine articles left, right and centre, and “evangelists” spreading the word.

I’m sick of it. I can’t wait for the day when everyone realises how much of a fad-diet, religious-cult-inspired, money-making exercise it is for a group of consultants."

Of course this brought all the usual suspects out of the woodwork, raining down hellfire and brimstone on poor Luke for daring to question their cult. (A similair thing happened when Alex Payne moved some backend components from Ruby to Scala because (surprise surprise) Ruby turned out to be an inappropriate choice for heavy duty infrastructure code - and the *ruby* fanboi crowd crawled out of the woodwork to defend their particular illusions, but that's a post for another day).

This post is a slightly reworded form of a comment I made on his blog so here goes and makes a different point than he does.

I've written before of the phenomenon by which people who can't code for nuts set themselves up as "gurus" who make their living telling other people how to code.

What's happening when so called "scrum masters" advise game companies is a variation on the same theme - the blind trying to lead the sighted.

*Most* of these so called agile "gurus", consultants, and "masters" of various stripes have experience only in enterprise software, and even there often don't write production code on a regular basis.

Of course, most of them (Kent Beck and Robert Martin being the exceptions) don't have any code we can look at to validate their claims of excellence. And yet these folks have no shame in selling their "wisdom" to game companies.

If I wanted to learn how to make good films, I would apprentice myself to or learn from the works of directors I consider *brilliant*. Why would I pay attention to people who've never made a movie in their lives (leave alone a path breaking or massively successful movie) but still prattle on on how to make one?

If I were running a games company and I wanted advice on how to (better) develop games I'd listen to people who can claim things like "I developed or led the team that developed , Doom/Quake/Unreal/WoW, EVEOnline, Baldur's Gate ... let me tell you how I did it", NOT those who say "well yeah, once upon a time I tried to write a sudoku program - I never could get it to work with my fancy methodology but I can teach you how if you give me lots of money to be a consultant or 'agile coach' ".

When John Carmack or Tim Sweeney or Warren Spector or Peter Molyneux credit "scrum" with their success, I'll listen. (Why do I think it will be a VERY long time before this happens? ;-)).

Any moron who sat through a 2 day conference and claims "mastery" therefrom (which is what a "Scrum Master" is - Scrum Certification is the most brazen con game in the *history* of software methodology snake oil schemes) and tells hard working developers how to organize their work should be smacked silly and booted out into the street pronto.

In another set of posts, Luke stomps the "software metrics" crowd. These people aren't as visible these days (or as deranged) as the Agile Sellers, but they do lurk in dark corners. But I'll let you read Luke's blog. He is a fine writer and knows what he's speaking about.

PS: If you are an Agile Consultant trying to defend your livelihood, first send me the urls to code you've written with your cool methodology and *then* comment. As evinced above I have no patience for "codeless wonders".

If you've written a best selling ground breaking game using Agile, iow if you are someone of the calibre of Carmack or Sweeney and have used agile, *then* we have the basis of a discussion. Thanks in advance.

Update: This thread is a perfect example of some agile "gurus" (keep reading down the thread, you'll recognize the names) make perfect asses of themselves talking to games programmers. I couldn't invent this if I tried :-)

I'll be writing a detailed blog post on this later, but Shashi Tharoor, who is the Congress candidate from Thiruvananthapuram in Kerala (my home state) is, in my opinion, the worst kind of carpetbagger ever in my electoral district's history and I will not be voting for him.

He has never lived in Kerala (as far as I can make out), leave alone Thiruvananthapuram, can't speak the local language (http://ibnlive.in.com/news/tharoor-campaign-hampered-by-language-barrier/89617-37.html), has no political experience (I guess losing the fight to be the UN Secretary General *is* experience ;-)), can't stand being questioned on his beliefs (he walked out of a TV interview because he thought the crowd was "unruly") and has no distinctive ideas I can make out from his writings. Apparently his academic qualifications and his diplomatic experience, such as it is is supposed to make up for his not being able to converse with his constituents, leave alone understand them. He was imposed on this constituency as a candidate, over ruling local part sentiment by the Congress "high command" which is another strike against him in my eyes.

I am electorally neutral and I don't belong to any political party, but I'd vote for anyone but Mr.Tharoor in this election.

Any Tharoor supporters on the intarwebz please don't bring up the Obama comparison. Obama is a Harvard grad , but he also has the street smarts of a Chicago politician, superb communication skills *and* ideas of his own.

I hope and pray Mr.Tharoor goes down to a massive defeat, thus sending a signal to other would-be carpetbaggers. I'll go out on a limb here and predict that Mr T will lose badly in the 6 way contest.

Of course, India being a democracy, I can only cast *my* vote as I see fit. If the majority vote goes to him, then he becomes my MP and that is as it should be. May that day never come!

Friday, April 3, 2009

I notice I am not updating my technical blog because most of the things I want to write about need converting formulae (from Latex) to images. Yes I could use javascript to convert at display time but what I really want is a blog engine that would recognize a latex entry and automatically do the conversions before the text leaves the server. I hate WordPress (and PHP) with a passion so that isn't an option.

I have my nose well to the grindstone and have practically zero free time till September end. Then I'll probably whip out a tiny Django based blog engine with exactly the features I want and then it's good bye blogger.

An ex colleague let's call him.. uhh .. Vivek, who was my peer at MegaCorp many years ago who is presently VP of R&D at [very well known company, a variant of MegaCorp] called up a few minutes ago to see if I could help make a connection to someone he wanted to meet up professionally with. I am fairly well connected in Bangalore, having lived here more than a decade. In the chit chat that followed he asked "So what are you doing right now? " And I answered, "well I was coding when you called ...". His response was "You are still stuck coding!!!?"

My last job title had "Program Manager" in it. I've turned down multiple offers to "move up".. I am good at what I do, make more money than many "Directors" and most importantly am happy building systems (vs managing people who do).

I think it is a very *Indian* (or perhaps Asian) thing to expect good developers to "move up" to be managers or directors or Vice Presidents. We are a very hierarchical society and people are very often judged on where we are seen to be on some arbitrary hierarchy. People who work with their hands (or their keyboards) are often considered "inferior".

One of my friends who is an engineer at a Japanese automaker's Indian subsidiary told me about how the visiting Vice President (who was Japanese) rolled up his sleeves and jumped in to fix an engineering problem that had come up on the line and of the hush that fell on the factory floor with the Indian managers looking distinctly uncomfortable.

Specifically in software, when is the last time you saw someone very high in the company hierarchy do a code checkin? My last boss at MegaCorp was hired later than I was and the first thing he said to me when we met was (remember I was also a "manager" on paper), "You know, any monkey can code, but we need good managers". :-).

I think one of the main reasons is that we in India still don't have any local role models for people who made a great deal of money (or had a significant impact on the world) by writing code.

Once we have our Torvalds and Stallmans and Brins and Pages and Grahams and Norvigs "coding" won't be such a dirty word after all.

Meanwhile it is very amusing to see the contortions people go through to (a) deny that they are "just" developers or (b) "move up" to management. The lack of early stage startups doing innovative cutting edge software in India and the preponderance of "India Development Centres" (set up to grind through the crappiest work in the company) contribute to this state of affairs.

In the Indian Software Industry, *most* "managers" (or directors or .. whatever their titles are) have no real power within the company at large and their responsibility is just to implement decisions made in California or Boston or Tokyo. The most important game is "climbing the corporate ladder" and the most important subgame is "suck up to the boss". Why would anyone (who has a choice) **want** that life?

At ThoughtWorks, when I worked there, we had an inside joke.

Every technical person would call himself "Just a Developer" and there weren't any hierarchies among developers except ones of peer acknowledged competence (though I hear that things have changed and there's all kinds of intra developer hierarchy these days , based more on "years of experience" than skill levels, but that is hopefully just a rumor) .

When teams from other companies would visit us, as the round of introductions progressed, all the TW technical people would introduce themselves as "My name is ... . I am Just A Developer". Sometimes the visitors would get completely bewildered at all the "low ranking" developers attending important meetings, and hilarity resulted.

To conclude, I am "just a developer". I actively choose to be one of "those people" :-).

Thanks for your understanding. :-)

Update: The point I was trying to make is NOT that managers don't add value. Many of them don't to be sure, but many of them do. And some add very significant value, sometimes far more than an individual developer can, especially in large corporations.

my point was about how people *assume* that one wants to "move on" from being a developer or creator to someone who manages development.

Wednesday, April 1, 2009

without all the vague weirdos (SEO folks, "entrepreneurs" who have "ideas" and are looking for some developers to "join the startup"/code for free, "movie enthusiasts" etc) who throng BCB.

The idea of a devcamp is that it is an "unconference" for *developers* (hereby defined as people who work on interesting stuff, not a warm body who does J2EE/ ROR crap in the office and never breaks open an editor away from work).

In an ideal case (a) there would no hangers on, everybody would be presenting (b) there would be no "Introduction to Fad of the day" type sessions, and more "here is some code I was working on and here is what is interesting from an *experienced* programmer's pov" type sessions.

DevCamp Bangalore 2 is being held at ThoughtWorks on April 10, 2009. So if you are a good developer with some insightful code to demo, please attend. (I am not in Bangalore that weekend and so won't be attending. My experience report of last years Devcamp is here)

Tuesday, January 27, 2009

I recently watched (on YouTube) Linus Torvald's Google Talk on Git, the version control system he developed. If you are any kind of programmer, it is well worth watching. Doing some research on Git (I use Subversion, and so fall into the category of people Linus reccomends be committed to a mental asylum.) I found the following statistic very impressive.

(From Wikipedia)"The development of Git began on April 3, 2005. The project was announced on April 6, and became self-hosting as of April 7. The first merge of multiple branches was done on April 18.Torvalds achieved his performance goals; on April 29, the nascent Git was benchmarked recording patches to the Linux kernel tree at the rate of 6.7 per second. On June 16, the kernel 2.6.12 release was managed by Git."

That is *fast* development of a very complicated piece of software and serves to remind me how much of a gap there is between the best programmers and the rest of us.

I've been (re)reading "Masters of Doom" (a very nice read, whether you are a programmer or not - the book seems to be out of print and if you can't get a used copy a search of the internetz will yield a scanned pdf) and the part I find fascinating is how John Carmack grows and develops as a programmer. Working full time on enterprisey code, especially in India, serves to obscure the magic (and magicians) of programming. Which is a little odd given that most good programmers get into programming for the magic, and then end up building fugly enterprise systems for the rest of their lives!

Sunday, January 11, 2009

"What separated Satyam from rivals such as a Tata Consultancy Services Ltd or an Infosys Technologies Ltd was Raju’s preference for executives and associates who spoke the same language he did: Telugu.“For Raju, family, caste and those who could speak Telugu came first. I am not saying he was not a professional, but other things being equal, he would look at things in that order,” said a former employee of Satyam Infoway Ltd,"

Any moron who'd run a company this way (and I've heard some horror stories fromSatyam including that of a high level manager who'd always conduct a meeting in Telugu, irresepctive of if the attendees spoke Telugu or not. India has about 22 official languages and over 2000 dialects) deserves everything he gets.

Why would anyone want to work for morons like this? fwiw, My headhunter friends tell me they are seeing a flood of resumes from Satyam.

"Christianity didn't conquer Rome, Rome took over Christianity" - this is what MegaCorp is beginning to feel like.

The initial mandate from the CxO folks was to run [the division I work in] like a startup and damn the corporate bureaucracy. In the last few weeks, however the walls have been closing in and I feel more and more like I am in a division in a large and slow moving company.

Today is my birthday and I took some time off to think about what is important in life. Some of the key factors I came up with was working with good people and systems. The former holds good in MegaCorp (surprisingly enough) but the latter is very classical dysfunctional corporat-ey. Tomorrow (Monday) I'm having a discussion with the powers that be and if certain things aren't fixable, I'm going back to my startup-y/ consulting y life style, where I can focus on providing customer value and pursuing technical excellence.

Thursday, January 8, 2009

An earlier version of MegaCorp (let's call it Avalon) had extremely strong technical skills and moved very fast. Customer Focus was mediocre and this had deleterious effects. The present version (let's call it Valhalla) has very strong customer focus (it is almost religion) but extremely poor technical capabilities (to the point where the code bases and management structures are very dilbertian and would have given Avalonians heart attacks) and moves very slowly.

Avalon had almost zero politics. Valhalla is very political. Both have good people though the "goodness" is focussed differently.

I wish somewhere someone would combine technical and managerial excellence and customer focus. That said my "I am here to build good products and politics be damned" mental shield seems to serve me well, though it is beginning to fray at the edges and I find myself occasionally asking if I should be doing something else.