The Great Divide
A friend of mine, who studied Computer Science in IIT Madras [while I was in Electrical Engineering, consciously avoiding programming as much as I could] and later got a PhD in the subject told me, “You lucked out. If you had done Computer Science then, you would be in academia writing papers, not creating software.”
It was funny he said that, because once upon a time I really, badly wanted to be in academic research, proving theorems, writing papers. That is what I did for my PhD in Information Theory. Then towards the end of my PhD I had an epiphany, a religious conversion experience, if you will [for a guy who is not religious, I sure have had a lot of religious experiences!] and moved to industry. That path eventually led to software.
I agree with my friend. There is this great divide between these two worlds. I saw that when I worked on CDMA in Qualcomm. See my earlier post Two Philosophies in CDMA: A Stroll Down Memory Lane for some conclusions I reached. The interesting part of it was that I never worked on CDMA for my PhD research, even though my advisor was the leading figure in the field. It wasn’t part of any plan, CDMA seemed too practical, so I naturally gravitated to more esoteric theory [I told you I was like that]. It fit well with my world-view at that time.
And when I finally moved to industry, my not having worked on CDMA in my PhD proved to be a blessing. I could learn the practice of it unfettered by any preconceived ideas, then go back and read the academic literature, and make my own judgement. It was just coincidental that my conclusions happened to be unfavorable to academic research, and even more coincidental that my advisor was the leading figure on the academic side of it. I just called it as I saw it.
Anyway, that is just so much history, not relevant to my current passion, software. Yet, as I have gotten deeper into software, I am starting to read more of the academic Computer Science literature. I have tried hard not to let the previous history [in a different field] bias me, but to be honest, I have not been very impressed with much of the work going on in academia.
In software, abstractions and design patterns are very important. They let you solve a problem once, and use that solution in related contexts. Abstractions promote more expressive, high level software, making the job of the human programmer easier. Ultimately the purpose of programming languages is to make the human programmer more productive, allowing him or her to deliver software faster, with higher quality.
So it is natural that I find myself spending more and more of my time with programming languages. At least that’s my official excuse. The last 10 years have seen a veritable explosion of languages. Many of them have gained popularity, and the field is vibrant, with new developments like Ruby on Rails [technically a framework, not a new language, but frameworks and languages are closely related]. The productivity impact of these developments on the practicing software engineer has been enormous.
Java alone has saved untold hours to countless engineers in testing, debugging and porting software. It has made programming easier and more accessible to more people than its predecessors. Languages like Python and Ruby have continued innovating, and it is possible Ruby & Rails may deliver even more productivity.
Yet, what is the academic programming language literature talk about? Type systems, monads, category theory, … Not that there is anything wrong with studying theory, but even for someone with as much mathematical background as me, the stuff is just mind-numbing to read. In other words, a lot of it reads like my PhD thesis [there, I said it, I have let my history bias me!]
I think I know the reason: even when something can be stated simply, in plain words, academics have a preference to state it in estoeric terms. It feels good to talk a language that most mortals won’t understand, we get to feel special. It is not because the stuff cannot be stated any simpler. A lot of that comes from insecurity too. If ordinary folks can understand the stuff, may be they will realize it is not as impressive as it sounds. Frankly, most of the academic literature is not all that impressive, if you strip the jargon away and state it in plain language. And papers won’t be accepted in pretigious journals if they don’t have the requisite amount of esoteric but often useless jargon.
I know the typical paper-publishing pattern: take a simple idea, clothe it up in a lot of mathematics, make it sound as impressive as you possibly can, to the point that the simple idea is now lost in a whole mass of mathematical jargon. It is often the case that the core idea has no merit at all, in which case it is all the more important to pretty it up mathematically - that pig really needs all the lipstick you can put on it. By whatever means, the paper has to be published. How else do we get grants and PhDs and that all important tenure? I remember thinking if only the taxpayers who fund a lot of these paper-mill adventures knew where their tax dollars [and Rupees and Euros …] were going …
Religion offers interesing parallels. The old Brahminical religion emphasized Sanskrit and it was confined to the priestly class. Buddha taught his message in Pali, the language of the layman in his day. Jesus was a revolutionary. Their evangelical, universalist ideas changed the world. The academic priesthood will do well to remember that religious history. Then again, it is not exactly in the interest of the priesthood to let the layman to find out what is going on, is it?
To quote Richard Feynman
| Quote: |
| If you’re representing yourself as a scientist, then you should explain to the layman what you’re doing … |
And this from Albert Einstein
| Quote: |
| You do not really understand something unless you can explain it to your grandmother. |
I have practiced this. I have held forth on software concepts to poor unsuspecting relatives and friends, usually young cousins who won’t make a quick get away. My poor wife has been on the receiving end of more database concepts than she would care to remember. But the experience has been valuable [to me, that is]. When I find that I am not able to explain something well, that is almost always because I haven’t understood it myself.
Programming languages are not rocket science - heck, rocket science aint rocket science. The vast majority of programming languages in regular use have been created by programmers, not Computer Science Professors.