My greatest hits
What I did not know was that Blogger puts old items on your feed - so everyone got a dose of my old posts again. What was even more surprising was that
- People mailed me questions thinking they were new posts. Nothing in them suggested that they were very, very old.
- One of the posts got on reddit and sent me a ton of traffic. Which is ironic since it had already made a round through reddit when it was originally posted.
- Tyranny of the geeks. I had originally written this two years ago as a response to Adam Bosworth, a rant on the elitism of geeks. When I woke up the morning after, I saw that this post was all over the tech blogosphere. Better than that, Tim Bray himself dropped in and left a comment (I had taken potshots at XML). Unfortunately, I don't have the original comments. No amount of looking through the Wayback Machine helped. The funny thing is how this article is as relevant today as it was 2 years ago.
- Lisp is Sin. This post got me a ton of traffic from Reddit last time. Better yet, it got me lunch with Don Box :). When I was in Redmond, I desperately wanted to meet Don but I had no idea how to approach him. I remembered that he had linked to this mail. Wasting no time, I shot him a mail saying "Hey, I'm the Lisp is Sin guy. Want to have lunch?".
Don is one of the smartest people I've met. I spent the whole lunch trying to keep up with what he was saying. It was a humbling experience :-)
An Interview with yours truly
#Begin excerpt - go to Yuvi's site for the complete version
Tell us about your College Life.
It was awful. Seriously though, I now think that I wasted too much of my time and energy worrying about things like exams and college. When I recently went back to college for my convocation, I told my HOD that the only useful time I had spent in college was the time I had bunked and stayed at home.
If you’re a geek or a creative person, I would urge you - spend time on what you’re good at and what you like doing. Spend time drawing or writing or coding. Don’t spoil your health too much by killing yourself for your exams
When you reach 12th standard and all throughout college, people will always tell you “This is the most important exam of your life”. That is nonsense - no one at Microsoft has ever asked me how much marks I have got
What matters is what I did in my spare time in school and college. I liked to play around on my computer - and that’s what has helped me
I spent a lot of time learning subjects I hated and that were useless to me. School was better in that there wasn’t the pressure we had in college (except for 10th and 12th public exams). The best part about school was the culturals I attended. I got over my fear of the public, of strangers. The public speaking I did then helps me till this date.
If I could go back in time, I would tell myself before the 10th exams “Don’t worry about it - no one will ask you about this even 2 months from now”
I would tell myself before the 12th exams “Don’t kill yourself. Don’t spoil your health. It’s not worth it. No one cares”
I would tell myself “Spend more time having fun. Go play more. Spend more time on your computer. Spend more time dreaming. Spend more time idling away time. Spend more time reading good books (not related to studies)
Spend more time discovering yourself.
And finally, spend more time not growing up.
To the young students out in Schools, what is your advice on becoming a good Developer?
Being a programmer is hard. It means days, weeks of debugging the same problem. It means having to constantly relearn your tools and your materials. Compared to doctors, the human body doesn’t spout new limbs every decade or so, does it? But, you get new programming languages, new operating systems, new tools and technologies almost every day.
So don’t do it unless you love it. Please don’t take up computers because it is fashionable or because it is an easy way to make money. Take up computers because you love it at a very deep level.
Be curious. Poke around your machine. Try to understand programming at all levels. Know how to make a button spin. Know how Windows allocates the memory for that button and the data structures involved.
Code for fun. Write programs that *you* will use. Write programs that your friends will use. And then write more. The more code you’ll write, the better you’ll get. Read good code. You’ll learn a lot.
Read good books. ‘Structure and Interpretation of Computer Programs’ and almost all of Tannenbaum’s books are must reads.
Code more. Learn a new programming language atleast every 6 months.
Remember this - no other profession can create so much with so little. You can’t create an iPod or a Ferrari or even a small pencil from your bedroom. You can create an operating system though
Try everything - atleast once
Eric S Raymond and Peter Norvig have written great articles on similar lines. I would strongly recommend you to find them and follow them.
What first hooked you on to computers?
This is quite an interesting story. Until 12th standard or so (sometime in 1999), I had never touched or used a computer apart from a few DOS commands we used to learn by rote for our exams. I had wanted to be a writer or get into graphics and animation.
My life changed one day in 12th grade when my Computer Science teacher summoned me during a lunch break. It turned out that there was an unknown institute (called Comp-U-Learn) that was doing a free, promotional “Introduction to Computers” course. Guessing that it couldn’t hurt (and it was free after all), I trotted happily to this computer institute where we learnt things like how to create a folder, how to draw in Paint and so on.
One incident there changed me forever. One particular class, we were being taught how to copy-paste and the instructor happened to say ‘Please right-click on the ‘My Computer’ icon on the desktop’. Puzzled, I shot up my hand and eagerly asked ‘Sir, where is the desktop?’
Everyone in the class, including the instructor, burst out laughing.
I was hurt. In an almost cinematic fashion, I vowed to myself then that no one would ever laugh at me regarding computers again.
The ‘course’ was for 15 days and the institute wanted students to sign up for an additional 30 day course on C/C++.
I was the only student who signed up for the additional course. Since I was the only guy around, the bunched me with a bunch of older people who were studying Java and I got introduced to wonders like ‘import java.awt.*” and so on.
I finished 12th standard and the day after my TNPCEE engineering entrance exams, my dad bought me a computer. It was a P3, 850 MHz machine with an astounding 256 MB of RAM.
I was hooked throughout the holidays. I spent the entire holidays writing code in VB6 and have been coding ever since…
Why do I love computers so much? I’m really not sure. I think it has something to do with the sense of creating something, molding something from nothingness into a work of beauty. I tell my non-programmer friends that one of the greatest pleasures of life is seeing something finally work correctly, to track down that last pesky bug.
I’m also seduced by the idea of so many people using code that I’ve written. How many artists get to mass deliver?#End Excerpt - you can find the rest at Yuvi's site
A true hero
How to answer questions the smart way
Her post is interesting as it contradicts completely another famous article on a similar topic - Eric S Raymond on 'How to Ask Questions the Smart Way'. I've seen ESR's article linked to a lot and I have a lot of issues with the general attitude of the article - it is never ok to tell someone to 'RTFM' or 'STFW'. It's not tough to type out the answer and gently nudge them to look at the manual the next time.
Personally, I've been guilty of this on a lot of mailing lists, both within Microsoft and outside. A bad habit I would really like to fix :(
Highway blues
Highways through my brain
When I had to learn a new programming language or a new source control system, I had years of experience to draw on. I knew the core concepts and my brain could put together the building blocks of past knowledge in place quick enough ('Ah..so that's how you resolve a merge conflict' or 'Ah..that's how you do write an anonymous function'). When I had to learn something relatively alien such as continuations, I could still break it down to concepts I knew ('restores the call stack and environment and stuff'). Once I understood the ingredient components, I could grok the bigger picture and draw better analogies. When I explain continuations to Lisp/Scheme-virgins, I open the conversation by saying "Imagine if you could time travel in your program, back to a point in the past". I usually get raised eyebrows and eventual understanding.
Music, on the other hand, is a different beast altogether. I have no past history to draw on, no 'building blocks' that I understand. There was also a physical component involved - my hands have no 'motor memory' and no instinct to speak of.
As a result, it has been a painful experience so far. I described it to someone thus - It's like a painfully slow interpreter. Your brain reads in the source (in the form of musical notation. But that notation is useless for you when it comes to actually creating the sound. So you convert it mentally into the fret (an instruction in a form your processor likes) and the string you play on. This is the slowest and most error prone part. Then comes the part where your brain tells your hand "Hey, dumbo. Go hold that string there and strum here". At which point your hand-eye co-ordination kicks in since you don't have this down instinctively yet and you (hopefully) go play the right note.
Whew.
Learning something new is tough. To draw upon an analogy from First, break all the rules,your brain pathways are like deserted gravel roads and you're trying to force a lot of traffic through those roads.
Sriram learns to code
I was having a conversation with someone at work of how people learn to code. It works differently for different people. For me, for the longest time in school, I just couldn't understand even the simplest GW-BASIC program. I had problems with fundamental concepts. For example, what was this variable thing that you could assign stuff to and read from later? What was this subroutine you could call and then resume execution from the next line? Looking back now, I can't fathom why I couldn't understand those concepts but I remember how opaque they seemed to me. This is a lesson that the Visual Basic team at Microsoft goes around telling people - there are a lot of people who can't understand a lot of things about programming. Don't ignore them.
The next thing I struggled to understand was OOPs. I'm not talking the zen preached by CLOS or by Alan Kay and Smalltalkers. I'm talking the variant that is taught in high schools. This typically goes something like this. "Java doesn't have multiple inheritance - but you can simulate multiple inheritance using interfaces. What is an interface? It is a kind of class which you can't instantiate". "Huh??". For a long time, I just didn't understand what interfaces were good for, until one fine day, the word 'contract' popped up into my head and I've never been lost ever since. Of course, I eventually wound up in Python land where you learn that interfaces and types are bad. Even if the BDFL likes them ;-).
Pointers. Four years ago, I mailed someone and stated that I would never ever understand pointers. But eventually wound up grokking them a year or so later, once someone took all those silly C pointer books away from me and taught me how simple a pointer really is to understand.
Why is all this interesting?
Looking back, at some point I seem to have crossed a milestone - one after which I could understand any new technology thrown at me with relative ease. Or I would atleast have a frame of reference to try and understand it in. At Visual Studio, our users haven't often crossed that bridge. Not that they're dumb and I'm smart - in a lot of cases, they're just not interested in learning to program. We spend a lot of time to make sure features don't make new users go "Huh?".
But I've digressed.
It is fascinating to watch my own brain going through the pain of learning something from scratch. It took care of some of the ego I've built up over the years. Nothing can be as humbling as being in a class where people sound like Joe Satriani and here you are in a corner, trying to make sure Mary's lamb gets a mention.
Definitely humbling.
Updated - changed title to something that Aarthi preferred
Backups on Amazon S3

Inspired by this account from Jeremy Zawodny, I've moved to using Amazon S3 for all my backup needs.
Why did I do this?
I have around 7 GB of 'stuff'. Everyone has this cruft that accumulates over the years - code, mail, photos, etc. Most of it is of little value but you don't want to throw it away. I usually access this from multiple machines - my work laptop, my office dev boxes and my home computer. It's a pain in the rear to keep them all in sync.
I use SyncToy to keep them all in sync but that was a patchy solution - I needed a long term backup solution, especially given that I don't live in a 'permanent address' right now.
How I used S3
After reading Jeremy's account, I went and signed up for a AWS account and used my credit card to get into the S3 billing system. After that, it was a simple matter of using s3sync and a batch file to upload all the data I cared about to Amazon's machines.
The good
- Great billing and pricing scheme.
- Great API - which has lead to an explosion of tools
- Accessible through multiple mechanisms - Http, Bittorrent,etc
- The ability to put ACLs at very granular level. This combined with the last point means that I can expose one photo alone to the whole world and give people a URL to get to it
The not-so-good
- Inherently non-hierarchial structure means that every tool writer has his or her own idea of how a filesystem should be mapped onto the objects and key/value system. This leads to each tool being incompatible with every other tool out there. If you want to get your content easily, you might be limited to using the tool you used to upload your content in the first place.
- No resume for broken upload operations. Since upload bandwidth is limited on most broadband connections, this is a major pain. I have a 1 GB PST file which I still haven't managed to upload even after multiple attempts. Yes, I know I can split it up but that's besides the point
Archives
November 2004 January 2006 June 2006 July 2006 August 2006 September 2006 October 2006 November 2006 December 2006 January 2007 February 2007 March 2007 April 2007 May 2007 June 2007 July 2007 August 2007 September 2007 October 2007 December 2007 January 2008 February 2008 March 2008