Is it still important?

by Michael F. Collins, III February 04, 2009 20:39

I did a technical interview for Neudesic earlier in the week that has left me pondering the interviewee’s response a bit. It’s been bugging me so much that I decided to do a post. Normally, I wouldn’t post on the results of an interview, but this one is important because it’s on a subject that I feel very strongly about, and I’m interested in other’s opinions.

You see, my educational background is as a computer engineering/computer science major. That means that I’m educated in chemistry, physics, magnetism, electricity, electronics, differential and integral calculus, statistics, numerical analysis, differential equations, discrete math, and linear algebra, among other topics. In fact, in my career, I’ve actually used a lot of these topics, especially the mathematics when I was doing finance and retail. One subject that I’ve found a use for almost every day of my career has been data structures and algorithms.

When I do technical interviews, I like to challenge my interviewees with problems of increasing complexity. Actually, they sound complex, but if you were to apply basic computer science concepts to the problem, the problems are quite easy to solve. For example, I usually ask a question that involves sorting an array of randomly sorted data and performing a binary search of that data. I’ll usually allow the interviewee to say “sort the data,” but I’ll give them bonus points if they can say to use the QuickSort algorithm. I don’t ask anyone to write the sorting algorithm for me. To be perfectly honest, I’d have to look up the exact algorithm because I don’t keep it in my head and most frameworks provide it for you automatically. But the most important thing is that if I needed to do it, I could and I know how to find the information. However, I do expect my interviewees to know how to perform a binary search, because it’s so damned easy.

I also like to ask questions involving recursion. Recursion is such a valuable tool, especially when searching through hierarchies. I like to ask interviewees if they know the difference between an array, linked list, stack, queue, and dictionary, and what the benefits are of one over another, or how they decide whether to apply them or not to a solution. I rarely ever get to ask anyone about red-black trees or graphs, although I really want to.

This specific individual sent me an email Monday evening after his interview and told me that (paraphrasing) while the academic topics are interesting, their value is becoming less and less over time because frameworks such as .NET make them useless. The question that I’ve been struggling with is: can this be true?

Are linked lists obsolete? Do I need to have the knowledge about singly-linked lists, or circular lists? Do I need to know about the QuickSort algorithm or how to do a merge sort? Do I need to know about B-tree or B+ tree indexes, even though I’ve rarely had to ever write one myself? What about binary trees or how to implement a red-black tree? Is all of that knowledge obsolete because of the .NET framework? Do these algorithms no longer apply in the modern age of software development?

It seems to me that I don’t come across many computer science majors anymore and that’s unfortunate. I see a lot of Computer Information Systems or Management Information Systems majors, but very few actual Computer Science major. I think that it’s unfortunate. While I know and respect many with CIS or MIS degrees, I feel that it’s unfortunate that they don’t have the knowledge that is typically studied during the normal Computer Science curriculum. I also feel that it’s unfortunate that some that are graduating with CS degrees also don’t have a command of computer science theory, data structures, and algorithms. I feel unfortunate that few know or understand Big-O notation.

While I’ve never read it, I remember the title of Niklaus Wirth’s book “Algorithms + Data Structures = Programs.” That has been the mantra of my career: the application of the right algorithms with a strong set of data structures to support them.

I’m just interested in the thoughts of others. If you read this blog, tell me what you think. Am I wrong to insist on a general knowledge of computer science theory including data structures and algorithms out of modern software developers, or am I holding onto a former age of computer science and software development that is no longer applicable in the modern world?



Tags: ,

Computer Science

Comments

2/4/2009 8:52:39 PM #

Don

I have been thinking about this topic lately. I am not a CS major (political science actually), although I am a career developer. I think what the interviewee was trying to articulate is not that the classic algorithms are obsolete, but that he doesn't see how they apply to what he does as a developer.

Frameworks and modern programming paradigms have abstracted a lot of the details of what we do away but I think if you present the questions about algorithms in terms of the things developers do every day, you might be more optimistic. For instance, instead of talking about the bubble sort, ask him how he would sort an un-sorted .Net array list using C#. If he says something along the lines of using IComparer, etc, then he gets sorting.

Sometimes it's the terms that throw people off, not the concepts. Also, it has been my experience that the interviewer sometimes asks a question and the interviewee doesn't understand how the question applies (where is this question going). Clarity is key. Also, these guys are nervous as hell. Just my 2 cents.

Don United States

2/4/2009 8:58:21 PM #

michael

@ Don:

That's the thing that I don't get. I propose the question like you said. Basically, the interviewee is given an unsorted array containing the names and hire dates of 100,000 employees for a company. The company president wants to enter in some dates and find out who was hired on those dates. I give them the array, in unsorted form. All that they have to do is to show me an optimal way to find the requested record in the array.

In my opinion, the fastest is to sort the array and then do a binary search through it, which will find the correct record in a worst case 17 searches.

michael United States

2/4/2009 9:12:50 PM #

Don

@ michael:

Well, if you're putting it in .Net terms then it should be do-able for the interviewee. I have had a similar question asked of me and I said I would use the sort method of the array and IComparer. I think that is sufficient, but if you can't get that far, then maybe there is a problem.

Don United States

Powered by BlogEngine.NET 1.5.0.7
Theme by Mads Kristensen | Modified by Mooglegiant

Calendar

<<  March 2010  >>
MoTuWeThFrSaSu
22232425262728
1234567
891011121314
15161718192021
22232425262728
2930311234

View posts in large calendar

What I'm reading now


Add to Technorati Favorites

Disclaimer

The views expressed on this website/blog are the opinions of Michael F. Collins, III, and do not necessarily reflect the views of my employer.