Students and teachers - people are not at all alike. One wants to enjoy life, and the second constantly interfere with this. They make every six months again sit down, re-read the lectures, do not sleep for several days and inject coffee intravenously.
Of course, people are different, they are more likely to talk about stereotypes. When I was a student, I never thought that I would begin teaching, and I did not even think that I would go to graduate school and generally did not anticipate much. But it’s too boring to sit in the workplace for 8 hours a day, and then come home and push the sofa. So after all the whole life will be spent watching the next season of "Game of Thrones" or the party in the "dotku".
My experience as a teacher is modest - only 2 years. But during these 2 years, an interesting experience appeared that I wanted to share. The article turned out long and impatient can look at the very end, which shows the dry residue obtained as a result of trial and error.
How do people usually represent a university teacher? An adult, serious person, with a lot of life experience, whose authority is unshakable. This is especially felt among the teachers of the exact sciences. But a recent student does not fit this description at all. But this does not mean anything. Why not break the stereotypes and instead, with bulging eyes to look at those most tricky experiences of teachers, go their own way? Refusing to learn the best practices is a stupid idea, yet there is something in these people that needs to be learned. But there is another, the most important enemy of novelty - habits.
')
Programming is not a Math. Analysis. (ĂŹ somewhere nearby). Mathematical sciences are much more mature. Most laws are already known. Open questions are significantly less than in programming. Programming is a very dynamic field, there is no place for habits. It is too attached to something, and you just fall out of reality.
I was lucky on the 2nd year when we were taught Object-Oriented Programming our group was assigned to a young teacher. He was active, principled, perfectionist and quite competent in writing code. Instead of simply accepting the labs that work, he forced to write code, for which even now it is not a shame.
If it were not for him, we all would just know what “magic constants” are, why a return should return a variable (and not push a unary operator there), why it is impossible to write hefty constructions in while, how to work correctly with UI in Java, why in C ++ everything should be passed on a constant pointer. And in general, most of the examples on the Internet are rare bydlokod, which cannot be used in production. And this is normal, because it is an example to show the work of the code as clearly as possible without complications.
And suppose we didn’t sleep and wrote the code all night on the night of January 30-31, and on the 31st we drove the labs, this allowed our group to be much ahead of the rest of the stream.
It was not a primitive retelling of the textbook, not a non-initiative laboratory acceptance, it was just what you needed - Interesting, difficult, you understood how much you are pumping. You felt like you were starting to gain weight on steroids.
And having become a teacher, I decided to adopt the best from everyone and supplement it with my “trick”.
Attempt at writing
You come to school and you are told to forget; all the plague was taught to you by your parents; you come to the university, they tell you - forget everything that you were taught in school, you come to work, you are told - forget everything that you were taught at the university.
Let us remember what this was taught to us at work after university?
Here is a list I made about myself:
- Git
- Jira \ Redmine \ Trello
- Code review
- Dependency Injection
- Unit testing
- CI \ CD
- Work with the database (we were taught to write requests, but not to use them in Java)
- Migration DB
- ORM
But this is what lies on the surface, and if you dig deeper, the list will expand:
- Docker
- K8S
- Micro service architecture
Some of this was told, but something was not. Yes, we were told how the Post request works. On some subject told about Json. And in Java, we even worked with sockets. But everything was in isolation from real tasks. And an ordinary student, using the usual method of cramming these things, passed the exam, and then forgot, and then remembered again in pieces at work.
You can say that the students themselves are to blame. But then we can say that programmers are themselves to blame for bugs. And generally beat them with a whip and let them do it right away in a normal way.
But no, this is a reality, it is not perfect and therefore they hire testers, they are forced to write Unit-tests. If the thing is not eradicated, it remains only to adapt.
Another important point - the enthusiasm of the teacher. Many already teach by inertia. They are accustomed to: from year to year the same thing happens. But students feel it. And because without that weak motivation falls below the 0 mark. As the session approaches, this bar begins to grow. It is a pity that not all students are aware of the full depth of their position in time.
Total there are 2 global problems:
- Problem of motivation
- Irrelevance / fragmentation of knowledge provided
We will decide! Not everything was possible to the extent as planned, but ultimately it worked out.
Having come to the first lesson, I forced everyone to register on bitbucket. At that time it was the first course. The subject was called “Computer Science”. The lecturer himself said that we can talk about everything that echoes this word.
The subject suggested the implementation of a small laboratory on * nix shell. Students have long spat on how to use git. Especially console git. But it seemed to me at the end of the semester caught fire.
We created chat in VK, where I dropped articles on topics, answered questions. And it is really convenient. Do not repeat 100,500 times. And if the person did not bother to read just send a message to him.
On the subject, I decided to tell you a little about CI \ CD, Unit testing, Code review. It was difficult, you had to ask one question 1000 times - did you understand that? It was necessary to be guided by views. For the answer has always been yes. But in the eyes read a complete lack of understanding.
The couples on whom I sat down at the computer and visually showed something went far better. It seems to have written a small command on PowerShell, which closes Chrome. Trifle, but for a freshman looks like magic. At such moments, the guys became interesting.
Another condition of the lecturer - it was necessary to make presentations. I personally did not want to stretch it for the whole semester with a bunch of records about who passed and who did not.
I was followed by an offer to make the delivery of presentations centralized. We choose the time when it is convenient for everyone, we book the office for the whole Saturday \ Friday, from me pizza \ cakes \ tea \ coffee, from the presentation guys. Surprisingly, the woman with whom I agreed on the armor of the cabinet was not against it. This format guys especially went. Spend every semester 2-3 thousand not great money, and the guys remembered forever.
Stuff cones
After finishing the first course I was followed by a suggestion for the guys to try to organize themselves and write some kind of toy. And then the guys got this idea too. Unfortunately, the implementation is not. To implement our plans, the Unreal Engine was chosen. The argument is simple - it uses syntax very close to C ++, and since the guys had to study it in the next semester, if they did not write something worthwhile, then at least it would help them in the next semester.
I offered to arrange a small lecture on C ++ in an online format, and then begin to implement. The problem is that I myself am developing on .Net and have forgotten C ++ a lot. I had to remember it took time. Frankly speaking, there was not enough time to explore Unreal either. But this summer, many of the guys who responded themselves gradually began to merge. But I was dragged down by the routine: repairs in the parents' country house, the desire to enjoy the summer, the change of the company also coincided with this period, a vacation. In general, it turned out that I spent all my energy on other equally important things. The result was a few meager lectures, a couple of lines of deadly lying code, which you wouldn’t like to poke with a stick.
Impacted and distribution team. All are available at different times, someone just ignores messages, etc. In general, in order to motivate people on the Internet are needed: firstly, other means, secondly experience with a distributed team (which I don’t have), and thirdly much more enthusiasm. Well, the lack of a result is also a result. For my part, I want to say thanks to the guys, you are great, and I made conclusions and will try not to repeat mistakes.
Still, computer science is not exactly the subject that I would like to conduct. The position of the lecturer and the dean's office is very loyal, even if a student did something, he looked like a couple. In general, this is correct, the subjects are not all equally important. And the importance depends on the specialty. It would be strange to assume that the culture of speech is just as important for programmers as Mat. Analysis or OOP. Or to force students of humanities for days to pass labs in physics. But I wanted a more responsible role.
Gaining momentum
So, began classes on the PLO. As in the case of computer science, students registered on Bitbucket. But there were a couple of innovations.
Now the guys created Pull-requests and received comments on the code in response. And yes, they had 2 months to pass the first lab, until she began to meet the minimum requirements for the design of the code
We brought Trello, for each task, its own board (there were 5 of them), the name of the task is the name of the student. As a result, it turned out visually, and now the guys have an idea of ​​the task tracker, and kanban boards.
The main focus on couples was not just how to write your class. On the contrary, on how to make such an architecture so that it is easily expanded. Much attention was paid to the principles of PLO, SOLID principles. Several times I had to repeat the principle of the virtual functions.
At the beginning of the pair - a small test on previous topics. I did not give marks. It is necessary for motivation. After all, if a student writes off, it is likely that he will remember, understand, and put it in his head. Here I was helped by the fact that I myself was not so long ago in their place and I remember how it all works. In general, 5 minutes is a good thing, and for me it is more of a motivation than a method of control.
At some point, my knowledge began to end, and telling something was necessary - there was a feeling that there was still a lot of information behind it.
Okay Google, C ++ Interview Questions. Select a list for Junior. We read questions and answers. Voila, pumped themselves, pumped students.
Due to work, a certain number of pairs were missed. It was necessary to restore them, for and so the delivery was delayed. All the same pizza reception came to the rescue. We agreed that we would choose a place and time to sit down, order food, progate the whole day, thereby restoring the passes, and students in theory should receive +1 to delivered labs. I helped answer questions.
As a result, it didn’t work out quite rightly; it became problematic all day to select, they took 2 to 0.5. Not bad either, although I expected that there would be more drive. But nevertheless, it was and was not bad for 1-2 times. After all, not all the first time it turns out well, right? Ok, another little experience.
Along the way, I made the guys for +1 ball deal with Dependency Injection in C ++. I must say, some figured out. In general, students are great. Two of them even made very cool toys with a GUI interface and nice architecture. And one even figured out Qt. Ultimately, it was possible to squeeze all the students and make them pass all they need for admission to the exams. The statistics turned out quite good.
The new semester began and it began with a couple in a mitap format. The first task from the lecturer was to seed. Primitive file parser and output in CSV format.
They came, turned on the projector, and together on their knees in 1.5 hours they threw a solution, in which there was still something to be tightened up, but on the whole the frame was ready. In my opinion, students should see how it works, how to talk about it, etc. The format of the mitap is what you need. That is why students of the first-year students observed with such interest how the browser closes after the next command in the console. This is visual and interesting. As for me, this format is worth developing.
Let's sum up
This is purely my vision, it may not be true, but students liked it:
- We use Git and force it to work with branches, pull requests, etc.
- Create Trello and track tasks there. We teach students to move the task to CR, otherwise they will not watch it.
- We spend 5 minutes, they motivate students to remember, they did not know. It’s not pleasant for everyone to think, but for some it is even painful, but it is better to teach this during the semester.
- Questions for preparation == Questions for an interview at Junior position
- We force to deal with Dependency Injection, Unit-tests and other realities of modern development
- We hold mitapas on pairs. Let students repeat after the seminarist, before drawing a masterpiece, the artist must draw what others have painted hundreds of times.
- We arrange mini hackathons, buy some pizza / juice and teach students to the beautiful
- In general, we try to do everything as in life.
Something like this, I imagine learning development. And what do you think? Always open to new ideas, let's make it even better!