[quote]I’m not sure why there’s an emphasis on programming with drag and drop anyway. Mostly it’s because the language is scary enough to look at (Java is one hell of an ugly looking language compared to nice simple BASIC code). Then OOP is scary because access modifiers really don’t serve to actually help anyone. And then there’s the fact that capital letters are mysteriously treated differently to lowercase ones.
[/quote]
For formal teaching, I agree with you completely. As far as I’m concerned, the best path is to teach a traditional dialect of procedural BASIC (none of this QBasic or VBasic crud), then teach simple functional programing in C (which also can cover hardware control and the like), then teach Object Oriented development in Java. Each step in the ladder provides the perfect level of interaction for the student. i.e.:
- First learn to execute one instruction after another.
- Learn that the order of instructions matters
- Understand how quickly logic branching becomes difficult to maintain and understand
- Learn how the use of functions solves the difficulties with branching
- Learn how to produce a reusable library of code.
- Understand how functions can collide with each other as code and libraries grow.
- Understand how Objects “encapsulate” functions (hereafter termed “methods”) and provide a good solution to code reuse by resembling mini-programs.
- Learn about how Objects can allow the developer to apply code architecture which can solve issues of time to market, cost of maintenance, and division of developer responsibility.
Now if you just want them to be mathematicians, the path is much easier:
- Teach student college level math.
- Use LISP, Scheme, O’Caml, or some other “true” functional language to compute the results of mathematical formulas.
(Yes, I intentionally left out “???” and “Profit!”, so please keep those comments to yourselves. :-))
[quote]There are all sorts of things that have crept into Java to deliberately make it far harder than it needed to be. Just printing a line requires System.out.println(“Hello”); instead of print “Hello!” which is crazy.
[/quote]
FWIW, those things have not “crept” into the Java language. They were intentionally added to solve problems that are far beyond the capacity of a new student to understand.
[quote]Fix these things and you end up with something that works. Tie them in with some graphical objects which you can manipulate and you’ve got an environment which will allow people who want to learn to program to learn in safety and have fun, eg. 7yr olds.
[/quote]
I don’t think the point is to directly teach programming, but rather to get them interested. Klik 'n Play solutions can make a new programmer feel empowered, because they can produce impressive results in very little time. Contrast this to a complete programming language that takes time to understand the syntax and APIs available. The user will eventually have to do that anyway, but at least he’d feel like it’s something he wants to do and can do.
FWIW, specialized languages can also hurt new programmers. The problem is that they will feel that they have invested a great deal of time in learning a syntax and API structure, just to find out that those skills are useless for anything other than the intended task. This can actually cause new developers to stop programming, because they feel that they would need to start over if they wanted to learn another language. (Not to mention how intimidating most tool-chains are.)