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