Sriram Krishnan (Moved to http://www.sriramkrishnan.com/blog)

Search. Usability. Virtual machines.Geek stuff

<December 2008>
SuMoTuWeThFrSa
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910


Navigation

Subscriptions

News

Link blog
Technorati Profile
The Blogs I read
Creative Commons Licence
This work is licensed under a Creative Commons License.


Monday, January 03, 2005 - Posts

Why Joel is wrong (or) Advice for *Indian* Computer Science Students

Joel has just written this fascinating article(http://www.joelonsoftware.com/articles/CollegeAdvice.html) on what CS students should and shouldn't be doing. I'm pretty ignorant when it comes to the American education system - so a lot of those things (like the ability to select individual papers) aren't applicable here in India. But I still found a lot I agree - and disagree with. Instead of Joel's advice, I would advice would-be programmers to read the other web pages on similar topics which are way better like Eric Raymond's How to be a hacker and Paul Graham's writing.

The scary thing is that Joel is one of the most famous names in the software development world and has one of the most widely read weblogs ever. Me, on the other hand,I'm just a 21 year old student who is just taking his baby steps in the computer world. So the probability of him being right and be being totally wrong is very high :-) - but still, in the grand tradition of blogs everywhere, I couldn't resist adding my own 2 cents.

One small anecdote (and I guess he's talking about incidents like this in the 1st para).

Around 2-3 months ago, I was in the midst of a big dilemma on whether to join some firm or start off with my 'own thing' - like Robert McLaws for example. I didn't know whom to turn to - so I typed out a long mail to Joel himself, writing several paras of what I felt were the pros and cons of doing such a thing. I soon got a reply from the man himself. He made a very valid point - he said that this is an individual decision and since I had written this out clearly, I probably had a good idea of what I needed to do. He was right - and I soon figured out that if I freelanced right now, I would shoot myself in the foot. This goes for this blog post - you have to decide for yourself what's best for you as a coder.

Without further ado,my little essay on where Joel is off the mark. All the other sections (like the one on studying micro economics and programming intensive courses) are right on the money.

Learn C before graduating

I'm guessing what Joel really meant here is 'Also learn C before graduating'. I'm not here to start a language war - but I'm of the firm opinion that knowing one language alone would never make you a great programmer. Of course, there are exceptions - Dave Cutler and Linus Torvalds may know only one language (I don't know this for sure - but let's assume that) - but then not everyone can be like them,can we?

For the rest of us unfortunate mortals, learning different languages affects the way you think about programming. If you are good at C/C++/ VB/Java, I would strongly suggest you learn to code in Python or Ruby (or any other dynamically typed language). Now, you don't have to code in it full time. You don't even have to use it for any project. But learn it - and learn to code the way that language was supposed to be coded in.

That means,if you code in Python , you would cringe like I do every time you write a 'for' loop in one of the traditional languages.You would soon understand why things like 'map' are cool - and even if you choose to use C/C++/whatever later on, you'll be a better programmer nonetheless. And if you grok things like continuations, you'll be a way better programmer :-)

At this point, Kaushik would argue that C and C++ are better as they are much closer to the hardware - and give better performance.He is right - and I'm not telling you that you should start coding in Python full time. Its like learning French-  you may never use it. But learning it would improve you understanding of all languages.

Also, learn Lisp or Scheme. Note that I didn't say any functional language (like Haskell or OCaml). In my personal experience, people don't have too many problems with the concept of functions as first class citizens. But once they see the parentheses-riddled,macro-filled code of Lisp and Scheme, they choke.

I know ..for I did.

 Despite the best efforts of one of my closest friends,I just couldn't 'grok' Lisp though I was writing small programs.I just couldn't understand Paul Graham's mind bending macros.

But one fine morning, I just got it. Just like that. And then everything made sense. You may hate those parentheses(I still do),but learn it, for god's sake.[1] You'll thank me at the end.

But getting back to the topic, don't worry about grokking Lisp. You would grok it just like you grokked pointers. You do know pointers ,don't you?

Which leads me to another topic - C pointers. Joel wrote an article some time back where he spoke about how he looks for people who know C pointers well - and I have to say, I reluctantly agree. Understanding pointers also helps with Lisp - you would soon realize that there is no spoon..err..list. Just a bunch of cells (cons) with the first part containing the value (the car) and the second part(the cdr) containing the pointer to the next cell..and so on.

Here's a short,incomplete list of what I think you should learn from each language (in no particular order)

C - Pointers. How everything is just a bit of memory.Why Duff's device works.
C++ - Polymorphism, v-table stuff, templates, how the STL works
Python -Why Python is the one true way <grin>. Why simplicity is good. Dynamic typing.Meta classes.List comprehensions and generators.And the zen of Python
Ruby - Iterators (which other languages call streams). Continuations (I find them easier than Scheme's call-with-current-continuation).
Haskell - What functional programming is. Easier and cleaner here than in Lisp. Monads.
C Omega - I'm pretty impressed with this.When you code in this, you'll never want to write SQL or XML in any other language again
The Lisp dialects: Read SICP atleast once and understand it.Macros. How it helps when your code is data.Read Paul Graham's 'On Lisp' and explain it to me :-)
XSL: Frankly,nothing teaches you XML as well as coding in XSL for some time -even a little bit. Once you climb that curve, you are prepared for anything.
Perl: Regular expressions. Why strings and string processing is important. The advantages of having more than one way to do any particular task

Note that I didn't add languages like C# or VB.NET(or even Java) in which I write a lot of code. Though these are great languages in their own right, there isn't much that I've learned from C# or VB.NET (except maybe attributes). Which is probably a good thing when you're trying to get programmers to adopt your platform.

Never underestimate how big a deal your GPA is

Nonsense.

Now, I don't have the GPA system in my college(we have a straight forward marks system) - but I have to disagree. I don't think marks count at all - and if recruiters are going to consider marks for non-CS related courses, I think they're hurting themselves.

I wish every major Indian IT services company(Infosys, Wipro, HCL, Polaris, TCS,CTS,etc) understand this. Perhaps an anecdote would make this clearer. Around 6 months ago, I was helping classmates prepare for an interview with one of the companies I just mentioned. All of a sudden, another student approached me and asked me to write her a program which people were being asked in their interviews. "Sure", I said"What do you want me to write for you?", expecting some really tough question."Could you write me a program which uses a..err..one of those things..err..functions..to find the greatest of 3 numbers".

Seems that this was one of the coding questions students were struggling with. And these students have great academic records - the only problem being they don't know how to code. In fact, most of them hate computers. And the real sad part? This particular girl got hired.

I could put up with that - but what I really couldn't put up with was the fact that a close friend of mine who was deemed 'not eligible' for the interview because he has failed an exam in the past.'Not eligible' though he is a real hacker and can probably write a Bittorrent client in his sleep.

The argument that HR people would get overwhelmed otherwise and they need some sort of filter is nonsense. If this is tough, then how come people like Yahoo, Google, Trilogy and Microsoft get the best people out of Indian colleges? Recruiters need to start looking for quality rather than quantity. And please stop putting people through those nonsensical 'aptitude' tests.

Sometime back, I had criticized Microsoft for adopting a similar policy for recruitment and recruiting exclusively only from certain colleges. No longer. Today, you can get an interview at Microsoft if you're good enough - and your academics and your college no longer matter. Now, I have reservations with their interview process (I feel that smart people don't get through sometimes - read Adam Barr's book for a better account) but this is a huge improvement from the past where very few people could actually land an interview.

Frankly,if these Indian companies don't learn to recognize quality, they would be in deep trouble as soon as the outsourcing boom ends.

Sridhar had this advice for me after reading Joel's article[2]

After reading that GPA part, I concluded that this advice is not for geeks, hackers .. but for the majority of students population, who will get bread for java coding :) So do not bother..

If any Indian CS students are reading this and are in the mood for some advice, I suggest you put away your books and break out an editor/IDE and start typing. Download Python/Ruby/Common Lisp/Scheme/whatever. Put away that Harry Potter book and read Don Knuth or SICP or Tannenbaum. Read Rob Pike..learn how to write 'good code'.Learn what test-driven development is.

But for god's sake..start coding for fun! If you don't enjoy it,you're in the wrong profession.

Notes:

1.Female hacker friend: Lisp is too good to be male. It has to be female.
Me: Has to be. Look at all the curves

Oh well..guess I really don't have a career in comedy.

2.Though Sridhar mentions Java, the argument holds true for all those VB/C# programmers who can't go beyond drag-dropping a few data controls

posted Monday, January 03, 2005 9:45 PM by sriram

Deepak's new blog

Deepak Gulati,probably one of Microsoft India's most popular (and most geeky) evangelists as well as being one of the best people I've ever met has started a techie blog. For those of you who follow his other blog, you know why Deepak is probably Microsoft's resident expert on western classical music and photography (not to mention restaurants in Bangalore).

Deepak is the biggest localization/Unicode geek I've ever met - he can type in Tamil/Hindi and a zillion other languages faster than most people can type English. And the embarrassing bit? Deepak is so good at languages so though he's not a native, he can read Tamil quicker than I can - though I'm a native.

If you want to catch the man behind the photos, check out the videos on http://channel9.msdn.com/India.

posted Monday, January 03, 2005 8:17 PM by sriram

Caustictech's latest rant

I don't link to much in my blog but this was too good to pass up. I agree so much with this guy (Warning: A lot of foul language). Especially the bit about MSDN. Yes - it may be the best out there and nobody else may have anything close to it. But some of the examples ..they really drive a man crazy.

And he's right on about the blogosphere

"...contrary to popular belief, being a blogger does not make you part of some ultra-cool, underground, elite, technical cult of uber-geeks. if you were a dork before...well...i hate to break it to you, but...you're still a dork. "

And in the comments (censorship is mine)

"Every time I think about **** like this I wish they would put people like Raymond Chen in charge of the direction and focus of Microsoft. People who are truly commited to making ****work right and not the next shiny object until the current objects work like they should. Innovators not salesmen and marketing dorks. "

When I was at TechEd, I heard a Microsoft employee complaining of how no one knows what a smart client means.It took me some time to figure out that even I didn't know what a smart client was..and I'm someone who follows the Microsoft world a great deal. For a long,long time, the word 'smart client'  conjured up images of mobile phones and PDAs (with the SmartPhone and the like) - and I'm sure I was not alone in this. But guess what - I was totally wrong. Smart clients are nothing but applications that run after being downloaded by ClickOnce or something similar. The reasoning - the browser is dumb and these things are smart. Gee!

And I can't help but chuckle when I see something like this right after the announcement that eBay has ditched Passport once and for all.I run a .NET group at MSN groups (www.cnugstudent.net) - and there hasn't been a single day when I haven't cursed MSN Groups. I've lost count of the number of times when someone couldn't sign up because they got confused - they thought that to join a .NET group, they need a .NET id - which they didn't have. What would you think if you ( a .NET newbie) wanted to sign up at a .NET group..and got asked for your *.NET* Passport?

And don't even get me started on .NET Alerts. I had to check it out last year for the Imagine Cup - and to my shock, its all COM -interop. There is very little '.NET' alerts.

And for the name .NET itself. Did Microsoft really have to get such a un-searchable name? I mean - don't they know that more than a few sites end with the letters '.NET'? I can't count the number of times I had to search for some .NET related info and I didn't get decent results because of this.

 

posted Monday, January 03, 2005 8:01 PM by sriram




Powered by Dot Net Junkies, by Telligent Systems