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.