January 25, 2017
January 25, 2017
You might’ve already read that I’ve recently taught a university course of React Native. There was a big contraint: my part of the course was really short —I had only two days.
When I started preparing a curriculum for the course my main question was: how can I teach them how to create an application in two days? Mind you, some of the students had really basic familiarity with the JavaScript syntax, making even basic ES6 features (like destructuring and arrow functions) something new that needs to be explained. I also had to explain the main idea of React and the benefits of Functional Reactive Programming in general. I didn’t want them to just follow the steps without understanding why we’re working this way. Finally, I needed to go through an actual exercise that shows them how to combine all this together to write a useful app. All this in two sessions of three hours each. Impossible.
In the end, it turned out that university students are used to achieving impossible learning goals. The course is scored on the basis of project assignments that the students work on by themselves for two weeks. 70% of them managed to hand in a working application, most of them surpassing my expectations of what can be achieved with only two days of guided introduction and two weeks of solo work.
But I hit some quirks in React Native ecosystem itself that make it difficult to teach it in such a setting. And that’s what I wanted to share here.
I remember back in the days when I was teaching Ruby there were two questions I always dreaded:
In JavaScript we have the basic syntax that works in the browser, we have the „jQuery syntax” that’s familiar to a lot of people who dabbled in frontend stuff for a short time, and then we have all those ESX syntaxes with different levels of adoptions in different node versions. But what’s more important, with different levels of adoption in different learning materials.
Currently, there’s only one solution to that: dive deep into learning JavaScript and learn (and embrace) all of its little quirks. However, for a university student who’s writing projects in four different programimng languages just to finish one class, it’s simply not possible.
As a part-time professor, I don’t have neither the time, nor the access to configure all the machines in the classroom however I want. If anything else, it’s because other professors need to be able to conduct their own classes there as well. So the process starts in August (actually in September, nothing happens in August in Spain) with collecting the requirements for my class. Then system administrators install it and in October I can test the setup that I’ll use for my classes in December and March. Slow, but simple.
Then someone comes in November and adjusts “one small thing”. Of course, something breaks, they fix it by reinstalling stuff, but only at the computers they touched. Come December, half of my class is running different React Native versions. And then there are students who come with their own laptops running Windows, or Linux. „I already have node installed”, they say naively. Oh, if it were that simple…
Bottom line is that React Native setup is tedious, annoying, and error-prone. Definitely something you don’t want to go through by yourself when you’re just starting out. It needs either supervision of somebody who did that before, or the trained instincts of a developer who treaded such waters before and knows how to push through this drudgery.
This is you, drawing a UML diagram of a working React Native installation.
One of the big selling points of React Native is its possibility to write cross-platform code. So in order to both learn it and to be able to appreciate its possibilities you need to learn all of the following:
So, in order to write a Hello World application and to be able to judge whether this technology is something that will be useful to you, you need to at least brief familiarity with all of the above.
There isn’t really a way around it.
The first thing that came to my mind was to try to teach React Native separate from JavaScript altogether. There are some pretty good workflows and tools available using ClojureScript and they offer many advantages: simpler syntax, avoidance of JSX, no need to use special libraries to achieve immutability.
However, the main limitation would be the amount of available resources. You’d probably need to prepare a lot of those on your own to avoid explaining to students the awkward relationship with JavaScript.
Another solution to limit the amount of concepts that you have to introduce in the beginning is to use a bootstrapping framework, like Ignite. The benefit here would be that students start with an already working application that they extend to add the functionality that they need. Redux is much easier to understand when you have a usage example provided inside your own application.
Another benefit would be that it comes with a set of eslint rules that help you find your way through the quirks and traps of JavaScript syntax without running into undefined is not a method errors.
If, after reading all of the above, you still want to learn React Native, I’ll be doing teaching a course in Berlin in April. Feel free to send Brains & Beards an email to get to know more about the details.
If you liked this post, why don't you subscribe for more content? If you're as old-school as we are, you can just grab the RSS feed of this blog. Or enroll to the course described below!
Alternatively, if audio's more your thing why don't you subscribe to our podcast! We're still figuring out what it's going to be, but already quite a few episodes are waiting for you to check them out.