On 6/12/06, James Britt <james.britt / gmail.com> wrote: > Do people *really* need to know the differences among various sorting algorithms? I'm > inclined to think that one cannot call oneself a programmer without some reasonable > knowledge of sorting, searching, various machine architectures, networking basics; well, > basically the stuff one gets from a CS degree. [ snip ] > Does the average coder need to know how to write a search algorithm or build a linked > list? Perhaps students should first be taught good taste; there seems to be less and > less need to solve the low-level problems. They're done. The issue now is how to best > take available tools and make good, clean choices, both in the problems to solve and > how the solutions are executed. James, I think that your conclusion here is correct: there should be a focus on using the best tools available to complete the current task. However, might I suggest that there is still much value in focusing on the traditional CS fare, even for "the average coder"? Although it may not be important to know the intimate details of implementing, say a bubble-sort vs. a merge-sort, I would contend that it *is* important to know what makes each one (in)efficient and under what circumstances. Someone learning to code should learn O(n) notation so that they know how to compare different algorithms--even one's of their own creation. Is it important to know you are using an array rather than a linked-list? I think so. Even if you don't know how they are built, you should know which one to use. Which is better if I need to do many insertions to the middle of the list? Of course, we CS types take this sort of thing for granted because we understand the concepts, even when we aren't required to implement them. In fact, my thought here is that the most important stuff really is the theory: algorithms & data structures, not any particular language. Students should probably be encouraged to write things out as pseudo-code before anything else. You don't need a computer to write an algorithm. Just ask Euclid =) Consequently, I think this is one thing scheme (lisp in general) has going for it. There isn't really much syntax to learn at all. You have atoms, lists, and function calls but not much else (well, macros, but I'll leave that one alone). -- Lou.