We have spend three years to help university training students to learn how to programme and train our graduate.
We want to summarize our three years experience and share to more people. But it’s hard to share so many experience.So, like agile manifesto, we summarize our experience to five sentence:
Classmates over Teachers
Practice over Knowledge transfer
Mind excercise over Behaviour excercise
Immediate perception over Deductive inference
The right part is very valuable, But we prefer the left part.
Cool, isn’t it? But you don’t get it very clear, right?
Never mind, I will explain them to you one by one.
At first I try to go to university and offer them some lessons.We taught optional course, compulsory course. We taught in a big class with 200 students, in a small classroom with 30 students. We tried every kind of course that existed in University. We are so naive to believe that if we supply modern knowledge to university, students would suddenly become a good programmer.
Absolutely we are wrong. We found that good teacher, good content is important but feedback frequency is much more important then that.
In university, system separate student and teacher. They met once or twice a week. Homework is their main communication channel. And its frequency is weekly.
We think programming is a kind of handicraft. Apprenticeship model is much better than our teacher-student model.To prove that, we collect some students, we trained them two month, and they go to market. some of them was hired by ThoughtWorks. The others were hired by the other company.Every one get a pretty much better job than their school mates.
Two month vs Four years. What’s our magic?Feedback frequency. They get feedback from us in hours, from their classmates in minutes. If they need help, they would get feedback in seconds.
But what is the connection between feedback frequency and “Classmates over Teachers”?
When we try to scale our model, we met a very big barrier. Students are hundreds, we don’t have enough teachers for them.We couldn’t do it, every school couldn’t do it.
So we make students to teach students. They can give feedback each other, Sr. student can train Jr. student better than their teacher because they communicate well and know each other why they don’t understand.
We build a club, recruiting 30 students, we train them, and ask them to train their school mates.The program is running in one university in China. It’s running well for now.We will introduce this method to more school.
Speak of eduction, we would like to speak of content, making video. I have to say that content is important, but is not enough.There is a gap between known and be able to get things done.
There is only 7%~16% people finished their online course.There are so many students who read too much and practise very little.I am not taking about content is useless. Actually because there are so many people working on content, we could make our attention more focus on how to make students understand these content and change their behaviour. I am talking about only content is not enough for education. School should more focus on practice rather than knowledge transfer.
In our program, we teach less and practice more. Majority part of time, students was doing practice, only when they start to learn a new knowledge, they have half an hour to watch video or listen us to teach them. And then they were learning by doing.
When we focus on practice, and make a lot of content based on practice. Some interest thing happened. Some students did the practice all the night. They sleep at 3 o’clock, only want to resolve a problem. We were talking about gamification in education. In my opinion, gamification is not about badge and experience points. It is about practice design. Learn a little and practice as soon as possible. Meaningful description about practice make students understand how those knowledge they learn could change the world.It’s much more funny than badge and experience points.
Six months ago, we found that our students feedback loop is almost stable, couldn't be cut down. They watch video and do practice, we give them feedback after that.
We didn't satisfy. Because that means students' issue could only be found after they finishing their practice. It takes too much time. Or we can sit aside of them and watch and ask them, that would take more time. That is the bad part of only doing behaviour exercise. But all programming exercise is mind exercise, we should understand students' mind to give them feedback about mind.
So we invent this:
We taught them a new "language" that inspired by UML. It's a kind of data flow chart. Arraw part is about input and output, square part is about function or process. Actually we also use the other kind of UML chart to epress the other part of programming. Here is just a example.
The most valuable part is that we teach them that and make them use this language to express their mind before coding. So we can give them feedback before they write code.
We cut down the feedback loop and focus on their mind. It changed a lot. Make traning faster, and making improvement faster.
This part is about deliberate practice. We all know deliberate practice is a efficiency way to become a expert. But practice what is a problem. In any area, there are some thinking should be Immediate perception, some kind of intuition. For example:
1.What does 3+7 equal?
2.How do you programme to select the max number of even numbers in a collection?
3.What is the sql expression what would select the user who has specific username and password?
4.What is id expression in CSS Selector?
These should be answer Immediate without thinking. That is what we talk about Immediate perception. Maybe you think that question 1 and question 4 should be answer immediately. But question 2 and 3, that need deductive inference. My answer is no.
If you have ever read the book Thinking, Fast and Slow, you would understand my point. We have two systems in our cognitive process. System 1 is Fast, automatic, frequent, emotional, stereotypic, subconscious. System 2 is Slow, effortful, infrequent, logical, calculating, conscious.
Only we move more thinking to System 1 make them was thought fast, we could make our System 2 think about more complex problem.
So, we prepare some practices to practise immediate perception, for example, we prepare a lot of automate test case to train student learn how to map, filter, reduce collections, we call that collection calculate camp. We also prepare OR mapping camp, UI challenge camp, and so on.
These above are all my theory of cultivation of jr. programmer.I would write more articles about how to do it in action.