Vojtech Rinik

Hacking language learning

Posted on 2012/10/29

My English is okay. It's enough to live and work in an English-speaking country, enough to read newspaper, enough to write articles, but I can't read (good) books.

When I want to read an English book, I can't just open it and start reading, like it was in Slovak (my native language). Books contain words that you just don't normally hear in a friendly conversation.

I think a book is the most wonderful way to tell a story, so not being able to understand is very frustrating. The last time I felt this frustrated was when I was about 11, and I started playing with computers, but didn't understand the basic English in user interfaces.

Hacking learning

I feel like I'm missing something when I don't understand a word in a book. But looking up definitions each time would be quite annoying. So I'm learning words before every chapter, like this:

My reading diagram

Learning words beforehand makes reading much more enjoyable, because I get to understand everything, and I don't have to look anything up. Repeating words afterwards hopefully puts them in longer-term memory.


For reading I use my Nook. Since the book is already in digital format, I can simply convert it to a text file and play with it some more...


This is my interface. It lists words from current chapter, sorted by number of occurences in the whole book. (That's important, because you see that some words are more useful than the others.) The little histogram helps visualize the distribution, but it's not essential.

You can "ignore" a word, which means you already know it. Eventually I'll have a database of all words I know, and opening new chapter will only display the new words. (Not very likely.)

You can "learn" a word, which will store it in your database of learnt words for later use. (My own personal database of learning progress.)

The best part is clicking a word, which will trigger a learning adventure:

These are verbal and non-verbal methods of memorizing word, all put together. These methods combined could make learning much more effective.


The code is a mess, so I'll keep it to myself for now, but this is how it's implemented:

Implementation diagram