IT is not happening… June 12, 2012Posted by Akash in Life as it goes.
Yes, you read it correctly. IT is not happening and by “IT” I mean Information Technology. But perhaps I need to explain what I mean by “happening”. Well, I mean it’s not working or it’s not functioning as it should work or function. Still confused? Ok ‘lemme’ elaborate.
In the last 30 years, technological advancement has been tremendous. In fact, ‘tremendous’ is an understatement. And when it comes to Information technology, reality has probably exceeded science fiction. I mean who else thought back in 1980s that machine learning algorithm will be driving a real car in the streets in the next 30 years? And a handheld mobile device under 400g will receive and transmit lossless radio signals at 900Mhz and capture photos at 12 Mega Pixels (yes, MP stands for mega pixels in case you don’t know) and capture and record 1080 pixel high definition video at 30 frames per sec with continuous auto focus mode and sync them in cloud and share them in social networks? I suppose the most hyper-imaginative-science-fiction-writer-on-LSD-overdose wouldn’t have imagined that back in 1980s when transistors were still being created in centimeter long tin containers.
But the truth is – we did this. We did not do this to remind the skeptics that truth is stranger than fiction is stranger than science fiction. But we did this because we were destined to do this. And there are many other things that we did. Isaac Asimov would have dubbed them “holy shit”. But as it goes, now I get an SMS next second I pay a restaurant bill using my credit card and book my train tickets to travel from Jalpaiguri, a small town in India to Kolkata while sitting in my Singapore office and I play poker with a Brazilian resident while resting in Japamala sea resorts amidst South China Sea.
All these are possible because of advancement in Information Technology. But I still say, “IT” is not happening.
Let’s look back to good old days of my college years when I, like many others, was fascinated with computers. At that time, all we knew were some magnificent stories about computers. Stories as simple as, “computers can do anything”, as fascinating as “Computer can send mails electronically across the globe” and as challenging as “computers can do calculations that human can’t” (Off course I am exaggerating but that’s not too wrong if you consider complex integrals that can only be solved numerically). All these stories painted a God like picture of computer in my mind and I wondered about the brilliance of people who were otherwise known as “computer engineers”. And then came the enlightened moment of my life when I got the chance to sit in front of such a machine.
Now from this point on, different people have different stories to share. For some of us, it’s a story of shattered dreams as we found out that computers can’t do anything of its own and the hard reality is – it’s we, human, who tell computers what to do in exact painstaking way. For obvious reasons, it was embarrassing for some of us to find out that computers are actually the stupidest thing in the world and you need to perform some hugely complicated, painful and grueling tasks (formally known as “programming”) in order to make them work for you.
Fortunately for me, things were much easier to accept. This is because even before my hand touched such a real computer, I was introduced to computer programming – off course theoretically – using only paper and pen. I wrote my first “If Then Else” in paper days before I got the opportunity to type it in the keyboard. And I debugged my first “for loop” in mind than through a debugger. I still remember moving my head in clockwise fashion and incrementing the loop counter in my memory while reading through the written lines of programming code.
While I never loved computer for its “intelligence”, I never hated it for its “stupidity” – for it allowed me to program it in my terms. The more I realized the power of programming, the more fascinated I became with it. I was playing “god” then. I learnt C programming language and tried and solved all the problems that were known to me at that time – starting from permutation of letters in a word to creating graphical computer games. Off course all these things were done in much sub-optimal nasty ways as I was yet to get introduced to the subjects such as algorithm design, data structures etc. But I was completely onto it.
And then “Internet” happened to me!
I don’t know how many of you still remember the screeching annoying sound of a 56kbps modem when it tried to connect to the exchange via telephone line. After about 4/5 minutes of wait it used to show a terminal asking you to logon. And that terminal changed my life – as I discovered my first buffer overflow attack through that terminal. In fact, it was never really an attack, as I was never able to compromise the system (I didn’t even know what a stack buffer meant at that time); however, I did crash the system many times by creating my own fuzzers (again, without realizing that those are called fuzzers). I will come to this point later but for the time being let’s continue our discussion on Internet.
Internet did 2 things to me. It deprived me from night’s sleep and introduced me to some bizarre and wacky subjects that I never knew before. Sex with horse, Internet Relay Chats (for those who don’t know, IRC is not same as Yahoo’s chat room), 2600 etc. are some of the craziest things that I came to know only because of Internet. Admittedly Internet was costly in those earlier days. And coming from a middle-class family, it was not easy for me to stay connected as long as I wanted. I remember it used to cost Rs. 26 to surf Internet for an hour then. Since I wanted to stay connected at least during the entire day, I did a simple math – I needed to find a job that will allow me to spend 26 X 12 X 30 = Rs. 9360 on telephone bill every month!
Anyway, once in Internet, I soon discovered that my little computer is not the only place for me to program. It’s just a doorway to uncountable number of other computers out there for me to reach up to. I started learning things automatically – HTML, DHTML, CGI (I know some people are chuckling at this point, good old days :)), setting up IIS server (remember it was there in Windows 98? You had to install using Add-Remove Windows Component?) and then I started learning C++. In the beginning C++ appeared to me as boring odd stuffs. I just could not understand why someone would want to do simple things in such complex ways.
About the same time, I was trying to create a first-person-shooter (FPS) type computer game using C. But despite of my ardent, sincere effort, I was failing miserably. I had already written around 10k lines of code and my program was not doing much at that point. I realized I would have to write another 15k/20k lines to make it perform even the minimal things that I wanted my game to do and when I would finish adding another 10K lines, my code would be simply impossible to scroll-through or debug. The code was simply getting unmanageable and I was getting impatient.
At that time, what I was doing was, writing separate event handlers for all the visual renderings. So for example, I had separate set of codes to render a bullet patch in left wall and right wall. And it was soon becoming impossible to codify all the events (e.g. firing of a bullet) and object (e.g. walls, roof or a flower vase inside the room) association in C. And I asked myself, “How do they (game writers) do it”? And “God” answered, “They use object-oriented-programming language, you fool!”
And all the boring C++ stuffs that I read before started to make sense to me. Inheritance, over-loading, polymorphism – “Oh my my! I am feeling high”! The object-event association issue that generated 10K lines of C code earlier could have now been done by simply creating a generic “objects” class and creating all the real life objects e.g. walls and roofs inherited from the generic class. And then I can attach methods like “changeColorOnGunFire()” in the base class and voila! You are back in business well under 1K lines of code. Not to mention, I was heavily dependent on call-back mechanism, but that’s not an OOP concept anyway. (Now I know some experts there are raising their eyebrows for solving this problem based on inheritance but at that time I was not aware of anything better and concepts such as classes with virtual methods for subtyping were completely unknown to me)
I don’t think you learn OOP programming. You are just forced to do it. And then you discover it, and finally it happens to you. And if it did not happen to you and you were asked to learn OOP (to pass some exam), I feel pity for you.