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