Thursday, September 21, 2006

As the CEO of a startup in the late '90s, one of my responsibilities was to find good software engineers and programmers. Those days, a single small advertisement in a local daily would result in 8000 resumes within 3 hours. Out of these, about 500 would meet our initial selection criteria. 50 would pass our general aptitude and programming test. We would finally recruit the 10-15 good quality programmers that we needed that year. While not everyone interviewed was outstanding, most were able to answer all the basic questions and had a reasonably good grip on what they had learnt in college.

Moving on to early 2006. I was interviewing candidates for a few developer positions for my friend's startup. The situation was abyssmal. The quality of candidates who responded was extremely poor. During the interviews, the candidates were unable to answer the most trivial of questions. Many of the interviews would not have lasted more than 3 minutes, but for my inability to be rude to people so innocently unaware of their ignorance. Despite the 4 years in college working towards a BE in computer science or 3 years getting a Masters in Computer Applications, the candidates appeared blissfully ignorant of even the rudiments of programming. Basic questions to test logic and thinking elicited text-book sounding cockamamie or, worse still, blank stares. Topics such as programming, data structures and algorithms seemed to have been mechanically digested for the sole purpose of passing term-end
examinations and promptly forgotten subsequently. When I asked "Explain to me what a linked list is?", if I got an answer at all, it was usually something like "There are three kinds of linked lists, singly linked list, doubly linked lists and circularly linked lists". That's it. They knew no more about linked lists!

Over the last decade or so, I have been witness to a steady increase in the number of computer science educated candidates with absolutely zero programming skills. I dont really care who is to be blamed for the present situation, but unless we take drastic steps, developing working software is going to get increasingly difficult. For my part, I have decided to write a book on common data structures and algorithms that will help programmers connect basic concepts with their daily work... sometime later. Till then, this blog will have to do.

I will try to keep this blog light and explain the concepts as simply as I can. I will give examples from the real world wherever possible. I will leave out any references to mathematics wherever I am able explain the concepts involved without resorting to mathematics. I will avoid using bulleted lists[except in the paragraph below!] as I dont want to encourage you, the reader, to memorize the bulleted points. I will use Java as the programming language so that I can avoid all references to pesky pointers.

I would consider this blog a success, if,
1. You understand each of the data structures that I explain and will know where to use them appropriately
2. You understand each of the algorithms I cover and know why something is done the way it is.
3. You are able to identify where some of these algorithms can be applied.
4. You are able to combine these data structures and algorithms to solve the various programming tasks that you are faced with at work.

Additionally, if this blog helps you develop an interest in delving deeper into data structures and algorithms, my joy would be boundless. For those of you in whom this blog is able to infuse the passion that I have for data structures and algorithms, I will include a list of must-read books one of these days. Please feel free to read all of them, cover to cover. You will not be disappointed.

Happy programming!

1 comment:

Sundarram P V said...

ALL THE BEST!!!!!