About a year and a half ago, the company in which I worked decided to start an educational project: to prepare future programmers from college and even from school. The decision was caused both by the lack of qualified programmers in our region and by the fact that incoming graduates have to learn a lot - the education received at the university does not fully meet the current realities of the software development industry. The project is mutually beneficial both for students who have the opportunity to get acquainted with industrial programming in practice, and for a company that will receive qualified specialists in a few years.
But even more interesting was the part of the project focused on working with schoolchildren. I am directly involved in this part, so I want to talk about it.
The problem of schooling programming
Why do you need to work with students? It seems to me that the greatest success can be achieved by starting to teach students in grades 8-9 - in the future, learning is reduced. Children have time to "teach bad" school teachers of computer science, including they often discourage interest in programming, as a result there are only those who are willing to learn "not thanks, but despite" - those who, in any case, will strive to become programmers, "technicians ". Those who have less desire for this area, but very capable guys, unfortunately, are eliminated already at this stage.
The main problem of school education in programming is the lack of a systematic approach to this issue. The trouble is that the school does not teach how to solve problems using programming, not developing programs, but only
the programming language as such . School lessons are reduced, in fact, to the study of language constructions and the implementation of any tasks for these constructions, but they do not teach a much more important skill — to apply them to solve problems arising in practice. Those students who have a talent for programming learn this independently, the rest get an idea of ​​programming as “a boring and tedious lesson for nerds”.
')
But programming is not only necessary for the “elect”. In programming lessons, children learn to work with information, structure it, manage it, and these skills are vital in the growing “informational wall” of modern life. Even an approximate understanding of how a computer works, how it works and executes programs, what its capabilities and limitations are is an important skill in the current environment, when computers have penetrated literally everywhere and more and more become for an ordinary person some kind of magic ( clicked a button, and then so-oh-oh !!! "). Even if the child does not become a programmer, skills acquired during programming will be a good help for him in his future life. From computers because he will not go anywhere.
Method I. R. Dedinsky
The search for teaching methods other than modern school templates led us to a wonderful, enthusiastic person - Ilya Rudolfovich Dedinsky. He works as a senior teacher at the Moscow Physics and Technology Institute (MIPT) plus a teacher in a physics and mathematics school, and achieves tremendous successes with schoolchildren - his students are already in grades 9-11 writing programs, according to the complexity of the corresponding 3-4 courses of a technical university (!) - compilers, three-dimensional engines , model physical processes, consciously working with projects of a much larger volume than can be expected even from students. And, importantly, Ilya Rudolfovich achieves such results regularly. These are not stars, they are ordinary students (admittedly, from physical schools). As he says himself, "the technique must be judged by the middle peasants." "Stars" will always be lagging behind, alas - too. The level achieved by the main part of the group is the true indicator of the quality of the applied methodology and the work of the teacher. Examples of the achievements of his students are given on the website of Ilya Rudolfovich, in particular, this is the work of tenth-grader Ivan Shapovalov
Platform for machine-independent execution of program code with JIT compilation and teamwork of Leonid Stolyarov (9th grade), Fyodor Petryaykin (9th grade) and Nikita Uvarov (Grade 7)
Platform for a multi-agent automaton system in the style of 3D-Action .
I happened to meet with Ilya Rudolfovich, talk with him personally, and listen to the story about his “first-hand” method. Taking it as a basis, we have developed our own version of his training program based on the same principles. Unfortunately, it’s very difficult for us to use the original technique of Ilya Rudolfovich because of the lack of teaching experience. It is likely that we have not yet appreciated all of its advantages and opportunities, since Ilya Rudolfovich has been refining his training program for more than one year. I believe that with experience will come an understanding of what can be improved in our program. But, as you understand, the training program is not a thing that can be thoughtlessly copied, it needs to be understood through your own experience. The following are the principles that form the basis of our training program, as I understand them and apply them in my practice (you can familiarize yourself with the original presentation of the principles of the author's methodology on the
website of I. R. Dedinsky in the section “Basic Materials” ):
- "To teach only good." Children should immediately, from the first lesson, see in front of them correct, good goals and correct, good examples. If you do not pay attention to some things (for example, formatting the code), let them take their course, children will do it the way they "understand" themselves. Subsequently, they will have to retrain, and it is always much less productive than learning correctly from the very beginning. Therefore, at the very first lesson, children will learn how to properly use spaces and indents, and why empty lines are important, which divide the program into logical fragments. From the first classes, the notion of the quality of names is introduced, and children are required to use clear names for variables and functions.
- "To teach programming, not language." All concepts given to children are derived as a tool for solving a problem. Even not quite like this: first, the problem is formulated, it is given the opportunity to “touch” it, try to solve it with available means (as homework or with the teacher in the classroom). For example, we can draw a house on the screen (we already have such a function). Let's draw on the screen 5 houses one after another. The task can certainly be solved by calling the function 5 times. But, checking technology, we ask questions: what if 10 houses are needed? 50? 100? And if 4? And if as much as fit on the screen? Or as much as the user enters the program? Then the children are invited to discuss how this problem could be solved, and usually they themselves, with some help from the teacher, formulate the idea of ​​a cycle with varying degrees of approximation. Only then the syntax of the loop operator in the programming language chosen for learning is explained.
Sequence of tasks
The sequence of knowledge and skills obtained by children is focused on their practical use. As I wrote above, the constructions are given as a result of the problems arising in children in the process of learning. Of course, the tasks are chosen in such a way that these problems arise in a certain order - this is one of the tasks of the teacher. Tasks are selected according to the principle: the more important the skill, the earlier it is learned. Importance is understood as the frequency of use of a construct in an industrial code. That is why functions, the most important element of programming, are learned as early as possible.
One of the problems of a modern schoolchild, even a mathematically educated one, is the illusion of competence in working with a computer (everyone knows how to download music or install Skype) and at the same time fear and uncertainty about programming (“it's hard, I can never understand”). Therefore, to remove this fear, at the very first lesson, children are invited to play a business game, which at first glance has nothing to do with computers or programming
1 . During the game, participants imagine themselves as owners of an advertising agency, to which a certain customer (teacher) comes and wants to order an advertising banner. But which one he does not explain, citing fatigue, and suggests asking questions to him, from the answers to which the contract will be drawn up. Such is the veiled discussion of TK. All questions about money, installation of the banner, installation permits and so on reassures: “This is not a problem. There is money, there are permissions, it is not the first time that we hang such advertising, the workers have already been called. ” The catch is that the banner is needed
tomorrow , and its size is 100 by 400
meters . What will he do with him so huge?
Why do we need a banner (monologue of a harmful customer)
“You see, I am the owner of a large trading network, Kettle Unlimited.” We sell any dishes - from collection cups of the finest porcelain to metal teapots. I recently sold in the Emirates a set of ... millions for 50 from platinum. Now we are negotiating with China for large deliveries of inexpensive tableware. So, I open a store in your city, and it so happened that I completely forgot about advertising. The assistant fell ill, and I flew out of my head. I can't move the opening date - everything is planned out, ordered, there will be damage to reputation ... I, frankly, your competitors had this issue today, we talked a lot, drank tea, everything was very nice, but ... at the last moment they said that they have some difficulties, and they will not take the order. And I came to you. In general, we need a banner. At least one. I’m a little tired of talking with your competitors, so I don’t want to state the details of the order again, and so let's - if you want to ask or clarify something, ask, and this will be the text of our contract. "
The following are the customer's answers to the students' questions, a description of what needs to be depicted and how, etc. This is where it comes to drawing, size and timing.
If the game takes place in Moscow, then this huge banner is proposed to be stuck to the wall of a skyscraper - so it will be visible from afar. In my case, in the absence of a skyscraper, even in the project, I had to fantasize about an aerostat on which advertising would hang over the city.Who will do it?
After the unexpected answers about the size and timing of this guys come light shock. This is an important point: they will learn how important it is to find out all the details before starting work, even if they were not explicitly presented in the assignment. In fact, this is a game training for the preparation of TK. When this phase is completed, the teacher “rolls out on the scene” “secret weapon” - it turns out that the design company has a familiar artist who can draw the required banner in time. But this artist lives in the distant wilderness, and the only way to contact him is to call by phone. He's a type of harmful, you need to talk with him carefully and accurately, otherwise he will hear a little unfamiliar word - hang up and have to call again. Next comes a list of phrases that need to be spoken to: set the canvas, set the color, draw the line, etc. In fact, this is how the abstract artist (“The Dumb Artist”) and his system of commands are introduced. But not only formally, but with reference to the situation, which is perceived by the students much more naturally.
Then the children collectively “call” the “stupid artist” (whose role the teacher plays) and the team behind the team control the “artist” who performs their actions — well, or “offended” at the syntax error and hangs up, and then the dialogue begins again. In essence, this is the execution of the first program in pseudocode by the performer in the interpretation mode. After 4-5 failed attempts, the program is written.
Thus, at the very first lesson the children will learn two important points: setting the task and writing the first program. The program is written on the board, with a lot of attention being paid to indents, empty lines and spaces - something that is often lowered and so difficult to consciously teach later.
Pseudocode program ( )
100 400
25 300 75 300
25 300 50 100
50 100 75 300
65 200 40
40 180 20 80
, .
C++#include "TXLib.h"
int main()
{
txCreateWindow(100, 400);
txSetColor(TX_RED);
txLine(25, 300, 75, 300);
txLine(25, 300, 50, 100);
txLine(50, 100, 75, 300);
txSetColor(TX_GREEN);
txCircle(65, 200, 40);
txSetColor(TX_BLUE);
txLine(40, 180, 20, 80);
return 0;
}
TXLib.h (TX « ») API , Win32.
.
, — , , , . , : «, ? — . , , … , , ».
, . main 50-100 , . «» — , void DrawMan(),— . «» . . , .
, . . « », — . , «» .
— , «». «» ( ). , . , . : , , «» , . () . , .
, «», . , .
, . «» ( .h , , ). , , , . , , , (, SDK peer review).
( «»). , , , , «» . . (
: .)
— «». , , . , if , , , «» «» . if — «», , . () () .
, . , . « „“ „“ — , ».
, , , . .
( ). — 2 , — 3 (120 , ). , 8 11 . — . , 8-9 10-11 . , « » ( , «-» — ) . , — (if //), «» , «». , , , . , , , , .
, , , . . , — . , , , , — , , . , . (, , «» ) , . , , , , ( ). , , , . , : , / / / . , : , ? «» , ? — «», , , , , . , . , , . «… . — , ! , , — ». , , .
, . , , . , — , . , — .
TXLIbTXLib(pdf)« »(pdf)
1 « » « » . . . (
)