I have been teaching university programming since 2000. Once I was a green teacher who was afraid to go to students, because you had to look smart, know everything, be able to answer tricky questions. Then I realized that the set of tricky questions is limited and, listening to them year after year, I knew the answers to all such questions. But the story is not about that.
In addition to teaching, I myself was actively engaged in (and doing) programming. And teaching at the university for me is now a hobby, which in material terms is more likely to be unprofitable, because For the time I spend on students, I would earn more than the university pays me. But this is not about this story either.
And I want to share how, in my opinion, it is worthwhile to build learning programming.
I do not know how in other universities, but in our programming they teach this way. There are theoretical lectures where they talk about programming languages and basic algorithms and data structures (sorting, linked lists, stacks, queues, etc., etc.) There are practical classes where students perform the same laboratory work. They are usually from 3 to 5 per semester. It seems to be all right. There is a theory and there is practice. Learn and gain experience. But, in my opinion, the practice is not quite the same. Each student is cooked in his porridge, writes small projects and very little experience is gained.
')
And now to the essence of the post! I got a group of very intelligent students. Ever since school days, they knew how to program well. And I decided with them to abandon the classical approach. Then they studied in the first year. I suggested that they should not do laboratory work, but develop one large joint project. Some of them refused and began to make ordinary labs, and most agreed. I suggested that they write a client-server application for organizing mathematical calculations (matrix multiplication, symbolic differentiation, etc.) The server will contain mathematics, and the client is just a visual interface for defining input data and displaying the result. There is one server, but there can be a lot of clients. Communication via TCP / IP. I remind you - these were first-year students. The result was not the best, but the prototype even worked! Let him work with errors and even fall, but, in my opinion, it was a worthy result!
A year has passed. The guys moved to the second course. Teaching programming continues. They were no longer surprised when I suggested developing a joint project instead of boring laboratories. This time was the next project. It was necessary to develop a platform for the competition of virtual robots. Those. was a maze (high-rise). The robots had a weapon. He developed his own programming language (turned out to be very similar to Pascal) to define the logic of the behavior of robots. Robot algorithms were poured onto the server. Started engine. And on client applications the battle of robots was visualized. This is only a superficial description of the problem. I want to show that the project was far from trivial.
And then the work began to boil. At first we collectively made up the TZ. I set up Mediawiki for the guys. There they edited the TK. Then the implementation went. Actively used SVN. OpenGL graphics. An programming language interpreter was developed to define the behavior of robots (by the way, one of the students did it alone). In the process of development, leaders emerged who most actively made decisions on architecture. Sometimes it came almost to a fight. Periodically more active "kicked" those who slowed down with the implementation of their part. I just caught the buzz, watching this process. This experience is much more useful than laboratory work written alone. I want to note that the guys really were sensible, and they would have spent an order of magnitude less time on performing laboratory work than on participating in a joint project. But they also liked it.
To be honest, I also spent much more time and effort on this group than if I conducted practical training in the usual way.
And what next, you ask? And then the guys showed themselves as follows. Three of the group put together a team (another team member did not study with me) and reached the international final of the
Microsoft Imagine Cup (not this year). Two of them are already working in the USA. I really want to believe that my experiment with teaching is at least a bit, but it helped them to achieve such a result.
What about me? I now do not teach programming in the first courses and I no longer do such experiments. And, probably, in vain. If this post is read by teachers of programming - think about it ... Maybe it is worthwhile sometimes to move away from the classical canons?
Conclusion: It is always more pleasant and easier to gain knowledge and experience if the process is interesting. I do not argue that initially sensible students came across to me. But I personally watched how smart guys do laboratory work in a couple of hours, just to get credit. Do not invest in the process of the soul and the experience gained is close to zero. If you are a teacher and you see a spark in the eyes of students - do not let it fade away!
PS It is possible that my students recognized themselves in this post. Several years have passed, and I could confuse something. Feel free to write me - I will correct.