ESL Grader is an app I made out of necessity.
I was working as an ESL teacher at a university in China, when suddenly the pandemic struck. In response to this, all teaching was moved to an online platform. Of course we should all be grateful that we have these opportunities, technology allows us to deal with unforeseen disasters in ways which would otherwise not be possible. However, there are huge differences between classroom teaching and online teaching. Long story short: the move to online teaching came with an immense increase in workload for my colleagues and I, and only kept increasing from there (this workload creep was comparative to feature creep, well-meaning curriculum developers keep finding new functions of e-learning technology, and in their enthusiasm keep adding new ways to expand the online teaching in order to provide a good learning experience to the students).
This all got to a point where I could not keep up with the weekly requirements, because there just weren’t enough hours in a week. Even worse, the exams were fast approaching and I had to make sure that each of my students was given a sufficient amount of feedback in order to succeed.
So I decided to code something to address the issue. Though when I say “code something”, I really mean “hack together as quickly as possible”, since the time constraints were those of a sinking ship.
Fortunately, I already had a good idea of what I needed the app to do from manually grading assignments beforehand:
Alright, time to code
I decided a single-page application with a form containing the categories as headers and radio buttons for the grades would be a straightforward and simple interface. After all, there’s no need to overcomplicate anything, especially when time is in short supply.
Since this first version would only have one user (me), I chose to go front-end only (no server, no “real” database like Mongo or Postgres). I did need some way to store the feedback texts, but figured a file with a JavaScript object literal would do.
The most important requirement of my app was to be able to change output (feedback) whenever the form changed. React seemed like the obvious choice here: use state for the form, then re-render whenever the form changes.
The end result looked like this:
Nothing complicated, but it worked and more importantly, it solved my problem. What normally took me several days when grading manually, I was now able to finish within a few hours!
That was my own problem solved, but I knew my colleagues were still struggling with the same problem. I immediately decided I could not keep this useful tool to myself, so the next step was to make it useful for a larger user base.
More on that in the next post!