Connecting all my dots..
Does this title ring a bell? If not, do read this lecture by the greatest pirate of Silicon Valley.
Egoistic Electronics student [Year 1994]
Despite all the hype, I couldn't let myself into believing Information technology to be a mainstream engineering subject. So, I opted for Electronics and Communications. That sounded more like a real engineering.
The D-Day - Software engineer born [Year 1997]
During the fag end of my graduation, ironically, not surprisingly though, I was already worshipping software. Like God, it was intangible and omnipresent.
Jack of all trades, master of none [Year 1998]
I could jabber a mouthful on every tech topic under the sun. I used to attend every technical conference and memorize all the jargons and acronyms. With a bit of exaggeration, I could say I was a talking Wikipedia.
The new age programmer [Year 1999]
I was disillusioned with bleeding edge technologies. One fine day, I emerged out of this vicious cycle of learning, unlearning and that is when I decided to focus on the core. It was the time when I read all the classics and wrote some really elegant code. I was surprised to find good books from Microsoft press. Here is a piece of advise - Instead of reading coupling and cohesion theory from Pressman, learn them from code complete. Pick and read any book written by the greats like Plauger, Kernighan, Gerald Weinberg, Knuth.
Over-engineering syndrome [Year 2k]
Now, the new age programmer built palaces even when all it needed was a doghouse. This was the undesirable side effect I had because of over-reading object oriented literature. I painfully read all the books by Booch, Rambaugh and Jacobson. I religiously applied OO techniques with almost no discretion. I read all the design patterns and frameworks and wrote some lightweight ones myself. Layers of inefficiency were being built into the product in the name of abstraction. These premature abstractions soon to be covered up by something known as refactoring. First of all, there is a huge learning curve in learning any framework. Asking developers to throw away your bad framework is unpardonable.
Analysis paralysis Escapade [Year 2k2]
I understood the power of prototyping in discovering the unknowns. I realized that designing a good framework requires domain expertise. It is probably not a good idea to generalize when requirements are still evolving. I was forced to make prototypes. We all try to reuse prototype code. That is such a bad idea. The purpose of prototype is to gain insight, understand the problem. You probably will ignore what I am saying. Even if you understand, convincing your manager is a daunting task. Why will your manager listen to you when the industry didn't pay attention to views of Fred Brooks. Way back in seventies he was screaming in his classic Mythical Man month - "plan to throw one away; you will, anyhow"! Oh by the way, PoC (Proof of Concept) and prototype are one and the same.
Both theory and practice are of utmost importance. Striking a good balance between them is critical. What I found to be very fruitful is learning technology through its evolution and building nuts and bolts by trial and error. I felt that it is easier to explain a complex concept by walking through its evolution. I applied this technique in a Mobile IP article for Dr.Dobb's.
Inclination towards open source [Year 2k3]
I could feel the pulse for the open source, its economics, politics and geography. I have started contributing some pieces of code to Apache projects. I wonder why Apache HTTP server was the last C project from ASF. Why have they become a big bad Java house? I see lot of over engineering happening in open source projects too. In spite of that there is so much learning just by lurking over developer mailing lists. There is a gold mine of code in Source forge waiting to be discovered.
Where do I go from here? [Year 2k6]
Write a decent open source product? Prepare myself to become an entrepreneur?
