Saturday, March 06, 2010

What does it take to 'know' a language?

What does it take to know a language? Okay, I’m talking about the computer languages, commanding languages that the little resistors and the capacitors in your computer understand, making them work in coordination to give you what you see on your PC. There are machine level languages that interact directly with the hardware, the languages that consist of 0’s and 1’s, that is HIGH or a LOW signal to the electrical instrument (they don’t understand anything else). Then in the hierarchy follows the low level languages that go a step further and give you mnemonics in place of the binary numbers, which are followed by the middle level language that allow you to type in a seemingly English-like syntax, and finally the high level language that have infect full English like syntax and sometimes also have graphical interfaces to help you make the one program you will be ultimately remembered for. In this level wise distribution, there are tools that help you to convert from one level to the level below it, so that ultimately the languages is feed 0’s and 1’s, that it understands. There are infecting two kinds of these tools, interpreters and compilers, the basic difference lying in the fact how the process the program to be converted, either line by line or as a whole.
Coming back to the point, I have come across many people who say ‘I know 5-6 languages’ and then they start to recite the names by rot. C++ and Java rule the roost, with PHP, C#, VB.Net following suit. I have also come across a section of people who say ‘Arre yaar, I HAVE to learn 5-6 languages. Please suggest.’ Every time, the first thing that comes to my mind is that what the hell does these people mean by learn, in both context. That is the meaning I’ll strive to find below.

I had C++ in my 11th and 12th, nothing strange about it. We studied the basics the first year around, and then jumped to some more complex things in the next year. What basics did we learn in the first year? The OO Concepts, the basic syntax and all those building blocks. Then it was the turn of things that were build on those blocks, classes and linked lists. Nothing special, just that we learned everything at a slow pace, digesting it and moving on to the next concept only when it was fully understood. Then college happened. In the first term, others were face with the task of learning what I had learned in little over 2 years, in a meager 3 months. Naturally, I excelled in the subject, as you kind of do when you have studied the same thing for over 2 years just before the start of the college. Hell, the board exams were held just 4 months back! With everything fresh in my mind, I was very comfortable with the proceedings. But then people would come to me and say, ‘Arre yaar, you know C++. It’s not hard for you, is it?’ I was stumped. I had never in my whole life boasted of the fact that I knew C++, because I don’t. The only people who can make this tall claim and get away with it are the developers who have worked with it for so long that they can speak it like their mother tongue. I have not ever made a directx program in my life, the kind that you see on your screens now. The whole Windows OS, Linux etc have been built on the same language, or its variations, with the user interface of just a line. C++ is always throwing up surprises for me, like the other day I learnt about the function that allows you direct contact with the processor. Therefore I cannot say that I know C++, rather I know a little about C++, enough to keep me floated. Although, I can safely say I know about the concepts, like abstraction, data-hiding, etc. Then again the ugly monster gears up his head. Do I know the difference between functional abstraction and the syntactical one? A few days before, if you had asked me the same question I would be lost for words. The level of knowledge I have is rudimentary, just so I can make myself merry by making a simple linked list program, a simple emulation of a queue. Why just C++ then? Over the terms, I have been exposed to a variety of languages, ranging from PHP to SQL, from HTML to C#.NET. But other than making simple programs in them, I am unable to use them to their full potential.

This again brings us back to square one. How do you ‘know’ a language? Do you know each and every pins and bolts in the languages, or you are aware of the specific information pertaining to you area of interest? Another question is begging to be heard. How much time does it take to learn the language? I recently read an article that admonished the concept of books like ‘Learn Java in 24 hours’ and others, showing in clarity the reason why the very concept of learning something that took over 3 years to make is not as simple as it is made to be. What can you do in 3 days? Let me see, first day, learn the mind boggling concepts that make even the most experienced developers think twice while answering, second day, learn the syntax, the very syntax that I’m sure you would have forgotten by the next week, owing to the lack of years of practice that makes the remembrance of the syntax next to impossible, and by the third day you are an experienced programmer in that particular language, right? No, you are infect a very ill-informed, inexperienced programmer, akin to a novice who just has been given a super bike to ride with, with nothing more than a day in rules, a day in how to ride, and one last day given the roaring bike to ride with. What do you think would be the result? An accident to be sure. When? It depends. Could be just a minute after, or the next day, but the laws of physics are sure to take notice and work their inevitable somehow the other. The entire thing could be taken out of context. I never said the wannabe biker has to be coached for years on end and then only given the bike to ride. But you have to make the rider ride a smaller bike, a bike with smaller CC and then allowed to build over it, like I the way I was taught C++. But this method also has its flaws. Like, what if the person loses the zeal to advance to the next level? What if the person is happy where he is, rushing past the landscapes at 70kms/hr? What would you do then? Give him the bike forcefully, right? But its human tendency to resist something that is thrust upon by others. So you really can’t be sure of the outcome of such an experiment. I am one of those riders, the ones who don’t graduate even after spending 2 years on the seat in case of C++.

Like I mentioned earlier, I have also tried my hand at various other languages, I say tried my hands, since all I did was learn the way the language could be written, the concepts I carried over from C++ and then I used the various code snippets, made by those well versed in the language and played with them. This enabled me to make a full fledged site complete with intra messaging, a forum, a mail feature, etc, software that catalogued your movies, getting information from the net. However, the whole thing was not just cut and paste. The initial ground had to be laid by things that were made by the masters of the game and then could a new playa like me could ply the roads, and choose what I wanted. The whole exercise taught me something, it was, how the great minds worked. Take for example, the login script I used in the website I made. I just download the whole script from the net and used (it was free to use, provided the name of the programmer was left there), I learnt the way the commenting was to be done, how the structure of the whole script was constructed, inside out, the script interacting with the database at the end of the level and the one interacting with the user was at the top.


That’s the point. The more you are practicing and getting exposed to the things in the language, the more you ‘learn’ it. The article that I was talking about earlier, the one concerning the time required to learn a language, pegged the time required to a convenient ten years. The article writer wanted the programmer to get a feel of the very skeleton of the language, to study and make use of it until the programmer is very well versed in that particular language. But the article also begs to differ, it mentions the huge risk that the developer would take if he/she decided to put all the eggs in the same basket. The language would be obsolete or the company promoting it vanish.


Whatever be the case the argument lies still unanswered. The argument of ‘knowing’, who knows the answer to that? Okay let’s look it from the point of view of the spoken languages, like English or Hindi. Everyone ‘knows’ how to speak, read and write their mother tongue but is this ‘knowing ‘ enough to make the person write poems that move the heart or does it make the person wield the pen in such a way that the world stands up and takes notice? The idea or the message that the person wants to convey can be conveyed in any language because the person knows what is to be said, he feels it in his mind. The language is just a tool to let others know about the idea and make feel the same way you do about that particular thing. Maybe, someday, I would learn the exact meaning of what it means and so, I could say to the face of the person sitting opposite to me in a room with a table in between us and my resume in his hands, that yes I know n number of languages!

No comments: