Last week I started the experiment.
I believe in semi-automated learning of programming through problem solving. There are clear advantages of this approach: independence of practice from the teacher, good testing of solutions, clear milestones for students, ability of the approach to scale.
The fundamentals of programming in this sense are quite good: it is easy to prepare problems, there is a clear learning plan, and student progress is well understood.
Surely some structured courses for learning the language from scratch already exist. But why not do it exactly the way I like it? IMHO, a set of problems is crucial here. The devil in the details: increase in the level of problems complexity, diversity, lack of requirements in mathematical preparation, and so on. I have teaching experience (OMG, almost 20 years!), some teaching materials from my work with students of Saratov University and the desire to try!
So, experiment. Since February 20, a wonderful girl le.mur has been learning the basics of C ++ from scratch under my supervision and guidance. We agreed that she captures her impressions in a special Instagram account (subscribe, it motivates!) Lena did not study mathematics in any special way, no initial skills in programming and informatics. Every day she practices 2-4 hours. I expect, one homework should be done in 1-4 days. My plan is to minimize individual explanations, as long as it turns out.
I brazenly stole a photo from Instagram
A training plan for the near future (that is, the very beginning) looks like this:
- The concept of a variable, the simplest functions (min, max, abs), problems without conditional operators and loops.
- Conditional operator, both forms (if, if-else). Understanding of scopes of variables, nested if-s. Problems on conditional operators.
- Loop statements: while and for. Problems for the use of loops without additional constructions (that is, they are solved in one loop without nested conditionals/loops).
- Problems to use loops and conditional operators together.
- Problems to use nested loops.
Each item corresponds to one homework and it will contain 10-20 problems on this topic. Further according to the plan, arrays and strings are expected, but they have yet to be reached.
One of the first conclusions that I managed to do for myself: at the initial stage, you should not immerse yourself in unnecessary details, a simplified or incomplete understanding helps to understand the basics. For example, while Lena operates only with integer variables (type int), she always puts curly brackets after control operators, uses only logical && and ||, only approximately understands the meaning of the “using namespace std” magical spell. It seems to me that after obtaining the initial skills, it will be easier to expand understanding with types, additional operators and other details.
I hope that Lena will succeed and she will not lose her motivation to study.
And how did you learn the very basics of programming? What worked well for you?