My greatest hits

A couple of days ago, I reposted some of my old posts, those which I personally liked or which got a lot of responses. I dated them with the original date so that they don't show up in the main page. My intention was to keep all of my best blog posts at one location.

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
Here they are - a couple of my greatest hits


 

An Interview with yours truly

Yuvi Panda was misguided enough to think that I'm worth interviewing. You can find the entire interview over at his site. I've posted some of my favourite bits below. Some of my answers made me wonder - "What in hell was I thinking?" :-)

#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

In an age where the term 'hero' has lost all meaning.

James Kim

 

How to answer questions the smart way

Kathy Sierra has an awesome post on how communities grow. Her core points are around making new users feel at home and not 'slamming' anyone if they ask a stupid question.

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

In an effort to do something in life away from technology, I gave into Aarthi's arm tugging and joined guitar classes. I've trotted to classes merrily for around 3 weeks now and can now proudly play 'Mary had a little lamb', albeit with a few notes misplaced . The experience has been fascinating as this is the first time in a long time that I've learning something new.

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



The not-so-good


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