I would like to find a programming language that makes programming easier. And I have seen dozens that claimed to have that effect. But it seems to me that at best they work like placebo—they make programming appear easier, which encourages students to give it a try.
Seems to me that most of these projects are based on cheap analogies. Let me explain… Imagine that you are in a business of publishing scientific literature, and then someone tell you: “Why don’t you publish a children’s book? There is a big market out there.” Problem is, you have never seen any children’s book. You are aware that those books must be different from books for adults, so you make a research. You discover that successful children books use big letters and big colorful pictures. Great! So you take Wittgenstein’s Tractatus Logico-Philosophicus, triple the font size, insert pictures of cute kittens, and the book is ready. However, despite having all signs of a successful children’s book, children are not enjoying it.
Essentially, you can’t remove programming from programming. You could give people a game editor and call it a programming language, and that would be a nice first step, but if you want to go further, editor is not enough. Or you can give them a package “editor + programming language”, and they will use the editor part, and complain that the other part is too difficult.
I feel that there is something missing in programming education. Generally, if you want to teach a skill, you have to divide it into smaller skills and teach them separately. If that’s not enough, break the subskills to even smaller subskills, and at some point it becomes easy. But we probably don’t know how to break the programming skill correctly. There are some subskills—probably so trivial to us experienced programmers that they seem invisible—that we fail to teach them. Some people luckily get it anyway, and those become successful programmers, and some people don’t get it and cannot move further. I am thinking about things like “expecting the same result when you do the same thing”. Another prerequisite is algebra: if one does not understand that substituting “X” in “X^2” by “A+1″ makes “(A+1)^2”, how are they supposed to substitute parts of program with function calls? Etc.
It would be great to teach programming by tools like Light Bot. We would just need more of them, in a smooth sequence from simplest to more difficult.
Also I think that easy programming language cannot be a substitute for knowledge of programming. Of course we should prefer better tools to worse tools. But we should also accept that some amount of initial knowledge is required, and cannot be avoided by using a better tool. Analogy: If you don’t understand anything about mathematics, then your problem cannot be solved by having a more user-friendly calculator. You should first learn some mathematics, and only then search for the most user-friendly calculator available.
Another prerequisite is algebra: if one does not understand that substituting “X” in “X²” by “A+1” makes “(A+1)²”, how are they supposed to substitute parts of program with function calls?
This alone is enough to get my upvote. I often struggle to explain that programming is a form of math (or at least, that it needs math). One typical answer goes like
When you are designing algorithms, sure, but these days we’re mostly plugging libraries together.
My suffocation and stuttering (refusing to change one’s mind in the face of compelling sounding arguments tends to do that) squash any attempt at a proper rebuttal. But now, I have one:
Using function calls? I hope for your sake that you get that pesky mathematical concept of “substitution”.
It would be great to teach programming by tools like Light Bot. We would just need more of them, in a smooth sequence from simplest to more difficult.
There is a Lighbot implementation on the iPad (under different) name. It’s a nice app, but boredom sets in pretty fast (at least for my kids). What is needed is a common “building block” language for many interesting environments, teaching higher levels of abstraction.
What is needed is a common “building block” language for many interesting environments, teaching higher levels of abstraction.
One language, many environments—exactly. People remember by repeating, so completing 10 levels is not enough, but completing 1000 levels in the same environment would be boring.
You can practice the same concept, e.g. a while-loop, by letting a robot walk towards the wall, or cooking the cake until it is ready. You can practice a for-loop by collecting 3 apples in the garden or walking 3 blocks away on the map of the town. All you need is different environments with different sets of primitives and one editor with environment-independent commands.
I would like to find a programming language that makes programming easier. And I have seen dozens that claimed to have that effect. But it seems to me that at best they work like placebo—they make programming appear easier, which encourages students to give it a try.
Seems to me that most of these projects are based on cheap analogies. Let me explain… Imagine that you are in a business of publishing scientific literature, and then someone tell you: “Why don’t you publish a children’s book? There is a big market out there.” Problem is, you have never seen any children’s book. You are aware that those books must be different from books for adults, so you make a research. You discover that successful children books use big letters and big colorful pictures. Great! So you take Wittgenstein’s Tractatus Logico-Philosophicus, triple the font size, insert pictures of cute kittens, and the book is ready. However, despite having all signs of a successful children’s book, children are not enjoying it.
Essentially, you can’t remove programming from programming. You could give people a game editor and call it a programming language, and that would be a nice first step, but if you want to go further, editor is not enough. Or you can give them a package “editor + programming language”, and they will use the editor part, and complain that the other part is too difficult.
I feel that there is something missing in programming education. Generally, if you want to teach a skill, you have to divide it into smaller skills and teach them separately. If that’s not enough, break the subskills to even smaller subskills, and at some point it becomes easy. But we probably don’t know how to break the programming skill correctly. There are some subskills—probably so trivial to us experienced programmers that they seem invisible—that we fail to teach them. Some people luckily get it anyway, and those become successful programmers, and some people don’t get it and cannot move further. I am thinking about things like “expecting the same result when you do the same thing”. Another prerequisite is algebra: if one does not understand that substituting “X” in “X^2” by “A+1″ makes “(A+1)^2”, how are they supposed to substitute parts of program with function calls? Etc.
It would be great to teach programming by tools like Light Bot. We would just need more of them, in a smooth sequence from simplest to more difficult.
Also I think that easy programming language cannot be a substitute for knowledge of programming. Of course we should prefer better tools to worse tools. But we should also accept that some amount of initial knowledge is required, and cannot be avoided by using a better tool. Analogy: If you don’t understand anything about mathematics, then your problem cannot be solved by having a more user-friendly calculator. You should first learn some mathematics, and only then search for the most user-friendly calculator available.
This alone is enough to get my upvote. I often struggle to explain that programming is a form of math (or at least, that it needs math). One typical answer goes like
My suffocation and stuttering (refusing to change one’s mind in the face of compelling sounding arguments tends to do that) squash any attempt at a proper rebuttal. But now, I have one:
There is a Lighbot implementation on the iPad (under different) name. It’s a nice app, but boredom sets in pretty fast (at least for my kids). What is needed is a common “building block” language for many interesting environments, teaching higher levels of abstraction.
One language, many environments—exactly. People remember by repeating, so completing 10 levels is not enough, but completing 1000 levels in the same environment would be boring.
You can practice the same concept, e.g. a while-loop, by letting a robot walk towards the wall, or cooking the cake until it is ready. You can practice a for-loop by collecting 3 apples in the garden or walking 3 blocks away on the map of the town. All you need is different environments with different sets of primitives and one editor with environment-independent commands.