Making of a Programmer
Recently, I was reading "Coders: The making of a new tribe and the remaking of the world" by Clive Thompson to write its review for Computing Reviews. In the book, he takes the reader on a fascinating journey of the evolution of computing systems and software programmers. In one of the chapters, he tells the story of early programmers in the 50s and 60s. Mary Allen Wilkes was one of such not-so-known legends who studied philosophy and wanted to practice law but somehow landed at MIT as a software programmer to program IBM 706. As one would expect, the life of a programmer is quite different then. She has to print his program on punched cards and wait for the computer to produce results. Often, as it happens with all of us, the program would not produce the expected results and then she has to go back, try to find the problem, reprint the cards and repeat the process. Not to forget here that those days, one computer is often shared among many programmers. It was not only tiresome but also frustrating to wait for hours to be able to run the program again.
While reading it, I went back to 20 years back down the memory lane when the passion to program was brewing strong inside me. It was 1998 when I got admission to a polytechnic diploma program in Jaipur (India) to study computer science and engineering. In the first semester, among six, we had two courses with labs. That was the first time, I saw close to 15 computers together. Those computers were 386/486-based machines without hard disk and hence without any OS; we used to carry large floppy discs with DOS to use them. The lab sessions were one hour each and hence we used to get a total of two hours to write our programs, debug them, and get results from them. We were writing tiny programs (such as finding the largest among three numbers, or checking whether a given number is prime) in BASIC (using GWBASIC interpreter). Some of us were really passionate about programming like addicts and thus two hours per week was insufficient for us to explore the world of programs with infinite opportunities. We first tried to optimize our lab time with some preparation. We used to plan what we would like to do apart from our assignments and write a BASIC program on paper. It helped but still, it was not sufficient.
I was sharing a small apartment with my two friends-both amazing human beings-on the first floor of a house; the ground floor portion of the house was occupied by the landlord. There was a basement in the house (it's not so common in India) where a timber company had a warehouse along with a small office. One fine evening, while talking to one of the sons of the landlord we came to know that the timber company also has a computer! Our eyes shine like a typical idea bulb glowing over the head. We asked the landlord's son whether we can access the computer. He baffled with the idea saying that it doesn't belong to them (landlord) and if the company guys figure out, he will be in trouble. He also said that during the day time company guys are there so anyways we can’t use it. We proposed to him that we will use the computer only during night time and its purely to experiment with our programs.
There we go! We opened the office silently and spend some time programming during the late-night hours. It was rather an old computer but it was sufficient for us to try some BASIC. I don't remember now how many times we went there. Later on, both of my friends got their computer. I got my first computer in 2002/2003 which was a used machine with Intel Pentium II 288 MHz and 8 GB of hard disk :) Oh, it seems I lived in another generation.
I was fascinated with programming. I wrote many small programs to quench the thirst to learn and create. It includes a small UI control library in C++, a utility program to transfer large files (in GBs) using serial ports, and a crude IDE (an editor written from scratch along with auto-indentation support). It was immensely satisfying.
The Internet was still not very accessible at that time in 2002-2003. I used to go to a nearby cyber cafe and pay Rs 10/15 for an hour to access the super-slow Internet; such cafes used to connect 5-7 computers to the Internet using a standard telephone line and a modem. Whenever we need some information, we used to plan a visit to a cyber cafe and come back from the cafe with text/HTML pages stored on a floppy drive. It was a common case that we spend one-hour collecting information about something and upon returning home with the floppy disk, we learn that it no longer works!
At the beginning of the year 2004, I was looking for an interesting idea for my final year engineering project. I had some vague thoughts on implementing an anti-virus. However, I met a friend during those days who was looking for a programmer to implement an inventory management software for his relative. His relative had a small medical store in a busy street in Jaipur. Though there were small software vendors present in India at that time the cost of the available software solutions was on a higher side and the store owner would like to save some money by getting it done from a student. From my perspective, it was great because I knew the value of getting a real-world project. Besides, I was constantly looking for sources of income in those days and this project would help me financially. Hence, I dropped my idea of implementing an anti-virus and took up the project.
I had a couple of meetings with the shop owner to understand his expectations and desired functionality. I learned Visual Basic for it and created the first working version in a few weeks. I wanted to show him what I did but his shop was on the other corner of the city and it used to take one and a half hours to reach there by public transport (and his email account was non-existent). When I called him to fix a time to show what I made and installed the first version on his computer, I learned that he doesn't have a floppy drive or CD drive on his computer. It was a challenge that made me think about how to install the software in his machine. Finally, I took my hard disk and reached there. I opened his computer chassis, plugged in my disk as a slave, and restarted the machine. After copying the installer, I did the same in the reverse order. He saw the demo and he was kind of fine. I was happy.
The next day, I got a call from him that the software is crashed! I was expecting some bugs but didn't expect the crash too early. I went there, understood the bug, came back, fixed the problem, and went back the next day to install the fix. This happened a few times but slowly the frequency of his calls reduced and finally stopped. It was a huge learning experience for me. I understood many small things that make a big impact on the users' side.
Those were the sweet early days. A lot has changed since then for the good. The newer generation of programmers has not gone through these kinds of experiences (but probably the different ones) but these experiences made the previous generation of programmers more patient and resilient.