Christian Neukirchen wrote:
> James Britt <james.britt / gmail.com> writes:
> 

>>
>>Machine code or bust.
> 
> 
> Once you *know* how a linked list/hash/sort/Delegate/Flyweight works,
> you can use the existing version.  It's always been like that, no?

Yes.  One could use Ruby to show how various built-in features work, 
then use the Ruby version.  Students would know the essentials of linked 
lists, etc., and could then move on to using the built-in stuff.

Arguing that this may involve too much hand-waving means moving further 
down the abstraction layers; the demarcation point, though, may be 
arbitrary.  At what point do you say, That's too much low-level detail?

(For the previous poster: Why is it OK to use, say, C to write data 
structures?  Doesn't that obscure how something is built (registers, 
memory allocation, instruction pointers, etc.) )

A later post by Matthew Smillie raised some good questions, particularly 
regarding what it is that students should be learning.  For vocational 
training, maybe the copious Java APIs would be best, or C# and WinForms.

But to prepare people to make best use of current computational 
technology, how much geeky detail is right?   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.

Much like taking a driver's ed. course does not make you a mechanic, 
knowing how to assemble lines of code to run without errors and produce 
correct results does not make you a programmer (except in some loose 
populist sense).   It means you can get from one place to another 
without crashing.  Maybe that's enough.

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.

Teach aesthetics, not engineering.

-- 
James Britt

"I never dispute another person's delusions, just their facts."
  - Len Bullard