On this page:
A teaching method encompasses the principles and methods used by teachers to enable student learning. For a teaching method to be effective, it must take into account not only the nature of the subject matter, but also how students learn.
At React GraphQL Academy we train developers from all over the world who have different social and cultural backgrounds. For some of them, especially the ones with a more traditional education, our method might feel uncomfortable at first. This article is aimed to explain our method and where the value lies.
This article has two parts. The first part describes the three main categories of challenges that we’ve encountered following our teaching method. What type of developers tend to face those problems, and some tips. The second part explains the six principles of our method.
We’ve been collecting feedback since we started teaching React in May 2016 to professional developers. We’ve identified 3 main categories of problems when teaching new tech following our principles to developers worldwide.
Feedback from trainee:
There was not enough pair programming in the training, it didn’t feel it very collaborative.
We always encourage doing pair programming during our training. I start by asking who knows what pair programming is. On average more than ⅔ will raise their hands. Then I ask who believes it is good practice. Most of them will show their hands still. Then I ask, how many of you do it at work? Less than ⅓ on average will show hands. Then I say, I’ve got good news, we can all do it now. The paradox is, many people believe it's good practice, but they don’t practice it even when they have a chance.
I’ve noticed that developers who are very experienced and are not used to doing pair programming will prefer to work on the exercises on their own. Less experienced developers tend to be more willing to try. Another factor, besides the work experience, is the type of education the trainee had in the past. In my experience, trainees that come from “learn-to-code bootcamps” tend to be more comfortable with learning in collaborative environments. There is also an individual factor, how open-minded someone is towards trying new things. Whatever the case, we can encourage and motivate people to do pair programming, but in the end, it’s a personal decision.
Feedback from a trainee:
I think some sessions become too (in my opinion) instructive.
Feedback from a trainee:
I wish less guessing what would be the solution.
Discovering is how kids naturally learn. Sugata Mitra's research (video above) shows us that kids can teach themselves. If kids can do it, why shouldn't developers be able to do it too?
We believe that technology changes so quickly that it gets difficult to keep up with it. We think that the fastest and most effective way to learn is by getting the right balance between discovering by ourselves and being guided. We also believe that building software is a discovery process in itself. Therefore, one of the skills we try to promote in our training is the ability to effectively solve new problems.
Feedback from a trainee:
I wish more theory before the exercise.
Feedback from a trainee:
The split between instruction and programming was not quite right in my opinion. Ideally each 3 hour session would involve 2 hours of programming.
Some learners prefer more theory, some others prefer more time programming. The goal is not to find the right balance that works for everyone, because probably there is not such a thing. I think the point here is to communicate where our training stands so trainees can make an informed decision before joining the training if it feels the right one for them.Tips:
We want developers to code/ do as much as possible in our training. But we can’t efficiently start doing without prior knowledge. We strive to get a balance of 1 hour lecture + Q&A for every 2 hours of in-class exercises. For us in-class exercise is not only programming but also pair & group discussions, and any other activity that makes trainees interact to work on the learning objectives.
This doesn’t mean we always lecture for one hour and then after trainees work for two hours. Lectures can be broken down and intercalated with exercises.
The goal of our lectures is not to explain everything learners need to know before they do an exercise.
The goals of our lectures are:1) To set the ground for effective problem-based learning in the subsequent hands-on exercise.2) To inspire learners' curiosity, thereby fueling their motivation.
The goal of our exercises is not "doing" in the sense of practicing or repeating what was explained or shown during the lecture.
The goal of our exercises is to help learners build a mental model (knowledge) about the subject matter.
The goal of our coaches is not to lecture everything they know before the exercise.
The goal of our coaches is to make sure that learners build the right mental model by the end of the exercise.
“Learn by doing” is considered part of an approach to education called discovery learning which is very in alignment with how our academy teaches.
Pair programming is one of the best collaborative learning tools for developers. It enhances the learning experience because it forces both people to explain what they do and how, rather than just doing. This helps reduce the time a person can be blocked trying to figure something out (I have seen many developers struggling a lot before saying “I need help”), come up with different approaches, increase motivation and engagement, and consolidate new skills. By doing with others we get more input on what you are doing.
Each class on our training covers a single topic, and builds on previous classes so that we can cover increasingly specialist material as the training progresses. As such, the whole training needs to be taken as a whole, rather than as a drop-in clinic. The curriculum is designed by industry experts, to balance coverage of those topics that we think are necessary to become an expert in the field, with those extra topics that learners commonly want to learn about, or appreciate being taught.
A closed-ended problem is a problem that only has one solution leading to one answer. Closed-ended problems are easier to automate, for instance, this exercise. We think these types of problems don’t necessarily resemble the complexity of building real-world software. We use and recommend closed-ended problems to build certain foundational knowledge, but we think they are not enough for our end goal: to build developer expertise.
We believe that expertise is built effectively by solving complex problems with multiple solutions. Therefore, we prefer our trainees to work on open-ended problems. A critical success factor to this approach is that it must be assisted, and that is the case in all our training.
Coaches guide trainees to help them think of the best way to approach and solve a problem. We are focused on promoting developer self-reflection, and critical thinking as opposed to prescribing solutions. Coaches make recommendations and explain the rationale behind the recommendations, then trainees choose. Sometimes learners want a simple answer: “what should I do, A or B?”. The answer typically starts with “it depends”. One of the coaches’ key jobs is to understand trainees’ problems and to make sure trainees understand the pros & cons of each approach recommended, depending on the case.
The mentors’ role in discovery learning is critical to the success of learning outcomes. Learners must build knowledge through examples, practice and feedback.
We think that we can learn a lot from how second languages (English, Spanish, etc) are acquired in order to teach new programming languages or styles (Functional Programming, Declarative Programming, etc).
“Get it right in the end” is a technique for second language learning in the classroom. It’s the opposite of the traditional “get it right from the beginning” approach, which explicitly teaches all the rules and concepts before students start using it.
We think learning is an iterative process where we constantly refine our mental models. “Get it right in the end” is very aligned to our idea of doing as early in the learning process as possible. The way we implement this technique in our training is:
You can read more about this technique and others for second language acquisition in this book.You can also check out some of the authors' ideas in the following short video:
These are the principles that guide React GraphQL Academy, because we're passionate about teaching, and we really want developers to thrive on their learning and further career. But ultimately we try to be flexible and to take into account each of our trainees' learning needs. This is why the feedback of our training is overall very positive, and why we're becoming leaders in the market of React and GraphQL teaching. If you start a training with us, we encourage you to give us feedback: your opinion is very important! We appreciate that and will use it to evaluate changes and make improvements in our training.
Share this on:
Comments? Shoot me a tweet @alex_lobera !