Sounds like a grim topic, doesn’t it? Let me ask you a simple question – How many of you or people you know can program if there is no Internet connection? (Google / StackOverflow etc)
Early days of programming
I have been a programmer since 1994. I used to program in Machine / Assembly / Basic / Pascal / Fortran / COBOL (still gives me the shivers) and C/C++. (Later I started coding more in dynamic programming languages and my love for Python is quite known in my close circles).
I had a brief flashback of how programming used to be:
- No computer: My initial days of programming were without a decent access to computer. I had reams of papers with programs written in C/C++ – I used to wear the hat of a programmer and then the compiler. Type the code in an editor (edit.com) save it in either 360 KB or 1.44 MB floppy disks whenever I got access to a computer and give the floppy disk (seen one?) to my teacher in school who had a PC in her home with C compiler. I used to get back the executable or the list of errors. So, this forced me to think a lot in advance since the round-trip time was very high!
- No online stuff: When I joined college in 1996, internet speed was in few bytes per seconds reaching single digit Kbps on a lucky day. All the reading was done in books. And the best time was spent in CS lab library where there used to be an amazing number of manuals from MS VC++, Borland / Turbo C/C++, Watcom C++, Keil C/C++ compilers and Unix Manuals. They had amazing amount of information and insight that is sadly being missed by many of the current generation of programmers.
- Lots of notes: I had lots of papers / notebooks filled with information – Algorithms, idioms, DOS commands, UNIX commands etc. Each problem was thoroughly worked out on paper (computer time was precious). Books were too expensive (at least for me) so I used to spend a lot of time in libraries. Spending time on the computer is very important, critical, but a small part of the whole part of doing CS.
- Slow computers: When I used to run VC++ 1.52 in 286 computers on Windows 3.1, the first pass of compiling (stdafx.cpp – yes, it dates back to 1996 or earlier!) used to take 40 mins to an hour. (It was also because it used to create Precompiled Headers of the entire AFX/MFC library for faster subsequent compiles – PCH files are still around). Again, it meant that one carefully works out things offline instead of sitting in front of a computer and cranking code. You have no idea how happy I was when Pentium Machines landed in our lab in 1999, and the entire compilation took less than two mins!
- Limited memory: When memory / CPU is limited, you are forced to come up with optimized versions of algorithms, a good grasp of algorithmics (asymptotic notation). Some of the best programmers I know thrive in these conditions. I was fortunately blessed with amazing classmates and friends with whom I had animated discussions on programming, algorithms data structures, UNIX, OS architecture etc. until the wee hours of the morning. (Fastest 8 queens, POP3 server, my own email client, multi-threaded web browser, Java WSDK 1.0 based online Testing platform and the fun problems go on).
And, my personal challenge was that I could not get into the CS division of engineering due to fierce competition in getting into this discipline. (I studied Instrumentation and Control Engineering as my major). This actually made it more interesting (and of course, challenging).
State of the current
In the last 10+ years, whenever I interview candidates, I am appalled to see the quality of new (and even experienced) CS grads who cannot solve a simple problem like identifying a prime number, searching a substring within a string and so on. Four years is a long time to spend in CS without even understanding some of the basic concepts like compilers, operating systems, programming languages, data structures etc.
I both envy and pity the current generation – they have unlimited access to computing (phones are more powerful than super computer of 1996), unlimited access to information (books, e-books, online content, blogs), new learning mechanisms etc. But, at the same time, their life has become easy. People just copy paste an error message in the browser and let Google / Stackoverflow solve the problem for them. Depth is truly lacking.
This problem is not limited to India. I have interviewed candidates for international locations as well and I find this problem everywhere.
The conditions are so right for the birth of super programmers. They don’t have any environmental challenges like in the early days. The key to becoming a super programmer is to leverage current strengths for a more in-depth understanding of the problem and not seek quick gratification.
Great startups need such super programmers who can create a prototype in a week, change the architecture overnight to see if it scales, etc. They will be the most wanted people in this domain and most prized ones too! If you are one super programmer, just mail me – I have a job (or more) for you.
Enjoy CS as a discipline, and this is a subject that can provide infinite joys in all dimensions – Mentally stimulating, financially rewarding and intellectually satisfying. So, let’s not let this great science go to its grave – all it requires is a little more hard work. The CS discipline deserves it.