My life

My first love is programming. The joy of creating a program and having it perform a task is magical. As a kid, I used to break open toys when they moved around and made me curious. We were financially poor during my childhood. Dad was into fixing electrical equipment and he used to bring home all kinds of fancy toys and gadgets that others wanted fixed. We couldn't keep them of course, but I could play with them for sometime. I had my own toys anyway including LEGO bricks, a lot of 3 volt DC parts, model planes and other stuff. The first time I used a computer was when I was about 9 years old. Dad arranged to have me visit one of his friends at his startup to play games on a computer. It was an 8088 IBM PC clone and I played games on its CGA 320×200×4-color display. It was awesome. I remember playing Sopwith and a Space Invaders clone called Space Commander on it. I wanted a computer of my own and we couldn't afford one, but I got really hooked to computers then.

In class 8, my school introduced computer science as an extra subject for those who were willing to pay extra. Those who couldn't afford it could play sports instead. We had high-end PCs for India—this was 1990 and these machines were 8088 and 80286 powered, with 20MB hard disks and 1.44 inch floppy drives. I joined a 2-month summer school where we learned GW-BASIC and the DOS way of the world. Not everyone agrees GW-BASIC is ideal, but I got so involved that I read through the entire GW-BASIC manual and other books on PC hardware programming. I also topped that course, which was surprising to my parents as my school grades were unsatisfactory. We drew circles, rectangles and various other geometric shapes and did trigonometry exercises. This one time when I visited mum's office—she made architectural drawings—her manager asked me to do a simulation of strength of materials for a bridge. I did the simulation, but when loaded, it curved way too much (I had no knowledge of DPI back then). After the summer was over, we couldn't afford computer classes anymore, so I used to sneak into the lab when nobody was looking, and got rapped on the knuckles in the process by the lab attendant (so many times that I can give suggestions on picking a good stick). One day the principal was taking a stroll and I approached him with a full program for a game that I had written over the weekend, and asked to be allowed into the lab. These were days when computer time was expensive and you wrote your entire program on paper, and executed it in your head, made sure everything worked before you hit the lab. He agreed and I had access then onwards.

GW-BASIC was still all I knew about in that world. Didn't even know C existed. One day I was browsing an electronics magazine in the school library and saw a very beautiful image, with a program listing next to it. They called it the Mandelbrot set. So I borrowed that magazine and tried to figure out what the program did (it was written in C and I didn't even know what a compiler was, let alone have access to a C compiler). But it was possible to follow the mathematics and the pixel plot calls. I wrote a GW-BASIC program for it and it look a whole day to draw a 320×200×4-color image (took ages in the inner lake especially). But it was great fun to watch it plot the set pixel by pixel. One day during this time, I was at my family's restaurant when a customer talked to me about computers. He remarked that something called BSD was a great operating system. He was going to give me floppies with it but I didn't get them eventually. I had no place to install it anyway. It was during this time that I also got interested in 8086 assembly language, for various reasons. I was reading in many places that it increased performance by a factor of many times. It also provided better access to the hardware, and I could use assembled subroutines in GW-BASIC with BLOAD for very fast screen drawing (the Norton utilities provided ample encouragement with their fancy animated dialogs). So I asked my parents to get me a book and we got The Peter Norton programmer's guide to the IBM-PC by Peter Norton. Again I read about several things which I didn't know existed. But I didn't have any tools (like an assembler, or even a proper fullscreen editor) to try out programs! It was during this time that I joined a course by BCIT. The course itself was stupid, but one of my teachers was not.. he was about 4–5 years older than me and was friendly, and he was good at assembly language. He gave me copies of TASM and Norton editor which was a superb full-screen editor, and also taught me many tricks of the trade. It's amazing how much effect the people you meet have on your life. Learning assembly also has a profound effect. You learn everything that a machine has to offer; instructions, data types, binary algorithms and tricks, memory addressing, interrupts and traps, I/O with various chipsets, how operating systems work under the hood, disassembling and learning how viruses work, etc. And more importantly, you learn about the limits and how to work around them. I also got this book called Microprocessors and Interfacing by Douglas Hall which described the chipsets and peripheral internals in an 8086 based computer in detail (schematics, interfacing and programming).

John Walker says that some books empower you in such a way that they change your life. I was lucky to read many such books, but one thing that changed everything was Jurassic Park (the movie), that was released in the year schooling was complete. Computer graphics, UNIX and genetics were all portrayed in the movie. I was 14 years old at that time and took a keen interest in computer graphics and UNIX. Various things happened around that period. In 1993, I first came across Linux in a computer magazine that we had just subscribed to at home. There were some screenshots of X and OpenLook. After reading that article, I wanted to know how a UNIX worked and got myself the first edition of Operating Systems: Design and Implementation by Andrew S. Tannenbaum (that textbook with MINIX source code). I couldn't find a computer with a UNIX, didn't know how to use a UNIX, but learned about the design of a UNIX operating system and how MINIX implemented it.

To be completed.