Ten times

I've never taken a computer science class. My programming career started instead at an English conversation school in Japan, with questions I shouldn't have needed to ask.

I taught at AEON, one of the big conversation school chains. Part of the job was counseling: sit down with a student and work through the standard list. What are your goals? Why are you studying English? Which textbooks have you finished?

I quickly found out that most of my students had been coming to the school for years. Five, six, sometimes ten. Every new teacher had asked them the same questions, and the industry burned through teachers fast. It did them no real harm to answer one more time, but it felt unprofessional to me. The school already knew all of this. I should have walked in knowing it too, and used the time to ask deeper questions instead of proving I knew nothing. Which, to be fair, I did.

The school did keep records. There was a computer running Lotus Notes, in Japanese, built for the Japanese staff. Nobody intended for the foreign teachers to use it. Whatever a departing teacher knew about a student walked out the door with them.

So I set out to change that, knowing nothing about programming either. I asked beginner questions on a forum called JavaRanch (it lives on today as CodeRanch) and strangers patiently answered them. I wrote the program in NetBeans, which around 2009 was about the friendliest way for a beginner to build a desktop app that could run on both Mac and Windows. In plain English, NetBeans was a program for writing programs. It gave you an editor for Java code, autocomplete, error highlighting, a button that compiled and ran your work, and visual tools for dragging windows and buttons into place.

In January 2010 I presented the finished Student Database to the school. It had editors for students, teachers, classes, and prospective students. Counseling notes, self-study programs, TOEIC scores, and level checks on AEON's eleven-step scale all lived in one place. Reports exported to Excel or PDF, and the whole interface switched between English and Japanese. A new teacher could open a single report and read a student's entire history before their first lesson. You can see the full presentation here.

A slide from the Student Database presentation showing the app's main window with a language dropdown set to English, buttons for six editors, and a smaller Japanese version of the same window.
One slide from the deck I presented to the school in January 2010.

After the desktop app, I wanted to learn web programming, so I started researching what language to pick. I kept reading good things about Ruby on Rails. Ruby came from Japan, and I was living in Japan. Ruby read like English, which mattered to someone who had never studied computer science. And Rails had a reputation for making web development easy. Sold.

I paid for Michael Hartl's Ruby on Rails Tutorial, the de facto way to learn Rails back then. It walked you through building a Twitter clone, which felt legitimate because early Twitter really did run on Rails. The first time through, I understood nothing. I cut and pasted my way to the end, and the app worked anyway, and that was empowering. The second time through, I understood maybe five percent. So I went again. And again. Somewhere around the tenth pass, it started to make sense.

The cover of Michael Hartl's Ruby on Rails Tutorial, second edition.
The tutorial I went through ten times.

Once it did, I could finally stop rebuilding Twitter and start bending the code toward what I actually had in my mind: an application for tracking student progress. That application became the early foundation of BiFluent, the first startup I ever worked on.

I've still never taken a computer science class. What I had was a problem that bothered me every day, strangers on a forum who answered beginner questions, and the patience to repeat something I didn't understand until it stuck. The understanding arrived long after the working software did. Nobody seemed to mind the order.