views:

132

answers:

5

I was looking at one of the job postings the other day and surprised to see this requirement. "Knowledge of standard data structures ( b-tree, linked list, hash ) and standard algorithms ( sort, merge, b-search ) "

The main requirement is .NET 3.5, C# UI Programmer though. I studied about them back in college but never got a chance to implement them.

How many of you wrote code for doing sorting or searching without using the .net classes? Why should a Sr.net developer care about these data structures and algorithms anymore with so many .net classes available?

A: 

How many? None.

The requirement (most likely from an Investment Bank) probably meant only to test scientific background of the candidates.

UPDATE

I do not know why you are bashing my answer. The question was "How many of you wrote code for doing sorting or searching without using the .net classes?" I said none. Which of you have done it and give negative only you have coded the actual algorithm yourselves. It is not about the benefit of knowing these ideas, which I favour in-depth knowledge and under the hood understanding rather than just a how-to-do-a-HelloWorld. Everyone who knows e personally would confirm this,

Aliostad
Not only did I use every single technique listed by the OP in various frameworks (.NET, Java, Cocoa, Ruby, ...) on a daily basis, I even have found the need to implement them all at one time or the other. And IMHO every *senior* developer should be able to, it's not rocket science but pure basics (with the lone exception of writing a hash algorithm needed for a hash map). And I have no degree, BTW.
DarkDust
Yes, requirement was for an investment bank.
Ken
Thanks for all the others for your opinions and replies. Each and every reply gave me a different perspective.
Ken
Yes, I know big O, implemented data structures back in college in ANSI C, took algorithms and data structures class and yes I had a Comp Sci major. I never implemented anything in .net where this knowledge was relevant. This tells me that the job posting is definitely challenging with growth potential technically. I marked @Aliostad's reply as the answer coz its closest to my question. I needed a specific answer and got it from him. I wish I could mark answer for everyone's reply. Thank you all for your time.
Ken
@Ken: "I needed a specific answer and got it from him". So, essentially, you accepted the answer that's currently lowest-voted because it told you what you wanted to hear?
nikie
@Aliostad - I work at an investment bank and my experience is the complete opposite of your statement here. We do not screen just via a checklist, we look for in-depth knowledge. A first-time screen like a phone screen might skim some of what's expected but rest assured that in-person interviews will find out the true depth of candidate's knowledge. Familiarity with commonly-used data structures is the minimum bar for entry.
Steve Townsend
I do not know why you are bashing my answer. The question was "How many of you wrote code for doing sorting or searching without using the .net classes?" I said none. Which of you have done it? It is not about the benefit of knowing these ideas, which I favour in-depth knowledge and under the hood understanding rather than just a how-to-do-a-HelloWorld.
Aliostad
+4  A: 

How will you be able to make a decision how to best solve a problem when you don't understand which tools you have at hand ? Yes, a senior programmer must of course understand those basics (and in my book, all you've listed are basics that every programmer needs to understand).

The job of a senior programmer is (also) to make decisions, especially when it comes to design. Without knowing which options you have you cannot make these decisions.

Even if you are going to "just" do only UI programming for the rest of your life you need to understand these things. For example, you need to understand what a tree is and how it works: your view hierarchy is one. You will need to sort data to represent it to your users, so you need to know which sorting algorithms are suited for the job if the data is very big, or how to transform it into appropriate structures (which ?) to make the UI snappy and/or not use huge amounts of memory.

DarkDust
completely disagree. A ui programmer doing .net work should be using Lists and Dictionaries and that is about it. They shouldn't need to know how to implement trees, and if they want to sort, they should use the .Sort method on their collection. Dealing with large datasets should happen before you get to the UI, and that should only be done as the need arises. Knowledge of the .net collection APIs is vital, knowledge of how they are implemented is totally not for UI work.
Matt Briggs
Yes, he *should* use the .NET classes, I do not advocate that he should implement them himself or anything like that. But he should *understand* the basics behind them. He should when to use an array, a set or map to get the best performance for the task at hand. And let's face it: how often does any UI programmer only deal strictly with the UI and nothing else ? When working with a MVC model, you also have to write the controller and deal with the data provided by the model. Understanding how to best do that is important. Especially for a *senior* !
DarkDust
Agree strongly. The requirements to implement such a data structure would be pretty rare (though I have found myself implementing DAWGs and tries as there is no DAWG or trie structure, and lock-free versions of those that are there, this doesn't come up very often), but a basic knowledge of the data structures is necessary to know which to use in which case. A senior wouldn't have a hope in hell of doing their job well if they didn't have that knowledge.
Jon Hanna
-1. Hollow rant. It is not talking about Design Patterns or OOP. This is b-trees and algorithms which have been implemented years ago in the framework. There is so much we can learn, better learn what we are going to use.
Aliostad
@Aliostad, how are you going to learn anything if you don't know those basics. We're not talking about some sort of obscure CS ideas (I never formally studied computer science), we're talking about the basics without which people won't know how to do a simple thing like choosing which container is the one to use in a particular case.
Jon Hanna
@DarkDust: There is a big difference between understanding how to use the .net collection libs, and how you would implement them, which is what the question was about. I would say understanding the difference between different collection types is vital, and be able to articulate when you would use one over the other is important, but again, this is a .net job, not a C job.
Matt Briggs
+2  A: 

"Knowledge of" does not have to mean "to implement". Do you know the Big "O"?

I have had to implement several of these data structures and algorithms in older languages. I've implement some in C# as an intellectual exercise. Some are not available in .NET Framework (Black/Red Tree, I think) but code is readily available on the web. Most of the time, I simply need to know is the performance BigO() = 1, n, n*m, n^2, n^m, 2^n, log n, etc.

A Sr. developer must know the performance of his data structure choice. I've seen "Sr." developers not care until the job was "complete". Such development generally does not scale.

Les
+1  A: 

This knowledge create your own professional background that helps you to solve another real-world problems. For example, knowledge of data structures helps you to choose right data structure in sertain conditions, this helps you to understand what's happens in your application and facilitate building your own applications.

Basic knowledge about O-notation also may help you choose between different data structures or algorithm implementation.

I doubt that you should have experience in creating your own data structures, but I'm sure that this knowledge even in LINQ-epoch could be helpful for you.

Sergey Teplyakov
+1  A: 

Yes, and also for a junior .Net developer. Effective developers of all levels do not need to guess whether their code will meet the requirements.

Steve Townsend