Thursday, July 13, 2006

Advanced programming?

You may wonder why my blog posts are drifting towards the technical side... You see, I cannot help it! All these days, I was caught up in social and philosophical ideologies so much that I was beginning to forget my techie roots. Actually, this blog was not supposed to be a medium for my tech musings, but I do hope my "technical revival" won't hurt, at least for the moment...

Most programmers (I safely assume) start their programming course with an introduction to the C programming language. C, as a language, is short and concise, and is known for its bag-load of tips-n-tricks, quirks and pitfalls, as any programmer should tell you. In fact, many people (notably educationists) argue that a first-hand course in programming should be in a scripting language (such as Python) and not in C. However, that is another story altogether :^)

I remember back in college, for our annual technical symposium (called "Bits 'n Bytes"), we used to have a programming contest called "Confusy", which was about writing the most horribly confusing program you could... No wonder people used to prefer C!

A common misconception in my computing (a.k.a. engineering) fraternity is what people call advanced programming. Most people think that advanced programming is when you make generous use of cryptic features provided by the programming language at hand.

Programmers generally have a tendency to prove their mettle and superiority over other fellow programmers. Their philosophy is quite simple: for you to be doing advanced programming, you should make your programs intimidating, overly confusing and incomprehensible to everyone else. If people cannot understand your programs, they think of you as a programming guru.

Actually, I don't think so...

To me, advanced programming is a different thing altogether. In fact, advanced programming is more about programming design than programming implementation. It is about expressing your ideas and abstractions in the most clear and concise manner; it is about clean design; when your design is flawless, it shows in the code...

People who are in two minds can read The Art of Unix programming by Eric Raymond for a decent explanation of how this concept cam to be one of the central themes of the Unix philosophy (see the sidebar of my blog for the link).

As Leonardo da Vinci has well said: "Simplicity is the ultimate sophistication". Advanced programming should be all about simplicity. It should strive to unravel mysteries from the code, rather than weaving mysteries into it. In fact, good programming, in many cases, decomposes complex programming constructs into a sequence of simpler constructs.

Please understand that I am not against learning the so-called "advanced" features of any language. Notions of what constitutes "advanced" features vary from person to person, and indeed, from language to language. With reference to C, it may be C's rich operator set or the low-level programming features provided by C (not to mention pointers). These are not advanced features per se; they merely provide you the flexibility to express your abstractions in a more powerful way...

Wednesday, July 12, 2006

The changing face of computer science

People seem to have different ideas about computer science. To some, it is all about algorithms and data structures, while others swear by operating systems and networking. For me, computer science is more of formalizing abstractions through research and analysis. It is (or rather, should be) a healthy mix of various disciplines that have to do with computing.

I was recently going through the essay The Art of Unix Programming by Eric Raymond. The history of Unix, described in vivid detail by Eric, makes fascinating reading. Also worth reading is the origins and history of the hacker culture which grew hand-in-hand with the Unix culture.

A point worth pondering over is the relatively dismal state of computer science research in today's world. Traditionally, computer science has been nurtured in academia; the best of radical ideas and groundbreaking technologies in the computing arena have been bred in universities and technology institutes. Computing concepts in industry that seem so obvious today have evolved through years of dedicated and focussed research in the likes of MIT and Carnegie-Mellon.

It is quite true that computer industry (commercialization, in other words) is the dominant face of the computer science phenomenon today. But that should not be a lame excuse for the stagnation in computer science research. And as almost everyone knows, long-term intellectual stagnation is not good for society.

For the most part, we ourselves are to blame. Salaries for computer professionals are growing more lucrative day by day, and the demand is also there. People freshly out of college think of getting high-pay jobs and settling down into the rhythm of their professional life. After all, who wants to keep "withering" in academics?

Thursday, July 06, 2006

B R O A D B A N D in Goa

Broadband has finally made inroads in Goa, making its presence felt in supposedly rural and semi-urban areas. From the dismal days of DoT (Department of Telecommunications) to Sancharnet's long-standing dialup plans, Internet connectivity in Goa seems to have got a face lift, thanks to Bharat Sanchar Nigam Limited (BSNL)!

People seem to be going for BSNL over other private players in the broadband arena, like Sify, Tata Indicom, AirTel and Reliance. At least, that's what the situation seems to be here in Bangalore. I'm not sure how much of a presence these private players have in Goa...

A few days back, there was a lot of discussion on the ILUG-Goa mailing list regarding ADSL broadband configuration in GNU/Linux. Those folks also seem to be quite fascinated by the Huawei modem that BSNL offers as a part of their package! :-)

Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 2.5 License.