Rote Memorization

RoteMemorization is currently an often-neglected part of a complete education, especially for those seeking degrees in computer science. Professors usually speak of it in a tone that positively drips with disgust - "Oh, that's just RoteMemorization," they say. But even elementary schools, where you would think such stuff would be the foundation of future knowledge, disdain RoteMemorization, because it begins to get too clearly into "right answers and wrong answers", and therefore it poses a risk to the self-esteem of the students.

To that I say, nothing ventured, nothing gained. While it is certainly true that you cannot learn everything by RoteMemorization, it is also true that RoteMemorization can provide you with thousands of details which, once you have learned, you will not have to look up. And what could be more beneficial for your self-esteem than that?

When you learn a foreign language, for example, the most important thing you probably need is vocabulary, which is learnable by RoteMemorization. If you know 5000 words in a language but no syntax, you will be able to travel to a foreign country and talk like a three-year-old, and make yourself generally understood. You may then be able to discover syntax by "immersion". But if all you know is the abstract syntax and how to conjugate the verb "to be", you won't be able to say anything, even though you might be able to diagram the sentences of the natives perfectly. It is much harder to pick up vocabulary by "immersion" than grammar. (Now I disagree with this slightly; see LearningForeignLanguages.)

But too many language courses concentrate on grammar and conjugation and declension. Important skills, to be sure, but it might be better to start by memorizing some pre-conjugated words, so you will recognize their alternate forms, and then learn conjugation slightly later.

A programming language is somewhat analogous to a human language. It has a syntax and a vocabulary. Language developers have begun to focus on syntax, and language courses often tend to concentrate on syntax, but the vocabulary in a programming environment is more important; it is the means by which you get things done in the machine. (The vocabulary of functions you can call. I'm not talking about reserved words; those are syntactical.) You need to know the abstract concepts of such things as windows and sockets and dynamic-link libraries, but when you program, you also need to know the particulars. Do you know what function to call to create a window? What are its parameters? Do you know how to load a dynamic library? Do you know what compiler switches to use to create one? Do you know how to open a TCP server socket that waits on a port? How to set its timeout? (Answers vary from platform to platform.)

A programmer who had rote-memorized all the commonly-used functions in her environment would be a master of that environment. She could open up a text editor and start typing, and produce a working program with minimal consultation of the online help - only when an error occurred or when she did something unusual would she need the help. She would program much more quickly than someone who knows all these abstract concepts, but not the means by which to put them to use.

There need to be courses that foster this sort of memorization. They would probably be easy, but students who could learn that stuff would gain the ability to express these programs without having to look stuff up every couple of words.

In the meantime, if you want to learn something by RoteMemorization, you will have to teach yourself. My way to do it is to write "cheat sheets". They are short and cover some specific set of words. I use them, but the more I use them the less I need to, because I begin to remember. If I never start to remember, then I must not be using it very often and it must not be very important anyway. -- EdwardKiser

Whoa: your cheat-sheet practice isn't rote memorization - it's putting together an easy reference, then depending on use of each chunk of information to fix it in your memory. This is a good way to learn, but it's antithetical to rote memorization. The way I learned foreign languages, we didn't sit trying to memorize vocabulary words out of context: we learned a few, had to use them a little, then learned some more; occasionally, we had to use some older words to keep them in our memory. There's apparently a bunch of empirical evidence for this as a teaching technique; the Pimsleur tapes rely on it extensively.

Every time you learned a few words, you did that by RoteMemorization. I take your point to be that R.M. is only a part of the learning process. If you memorize information without using it, you promote an "in one ear and out the other" effect. This is true.

My point was that R.M. is not a part of learning that can be left out. Also, I think that revisiting data on a cheat sheet leads to RoteMemorization "by accident"; I don't think it's antithetical to it at all. Antithetical to memorize-and-forget, though, it is.


On the other hand, syntactic knowledge grows combinatorially where vocab grows only linearly. It's best to design software to minimize the amount of rote memorization its users need.

This is one advantage of object orientation. If sockets, files and windows all use similar protocols (e.g. "open", "close") then programmers have less rote memorization to do. This is beneficial even if the classes are not polymorphically substitutable.

What do you do when you define a function or an object? You convert a bunch of syntax into a new vocabulary word, which you then use instead of the original syntax. What if this has been done for you? The number of distinct vocabulary words may be increasing linearly, but you shouldn't assume that they are all of equal scope.


Well, this happens to be of great personal interest to me at the moment, because I've just moved to Japan and am dealing with exactly these issues as I learn Japanese. I agree that the "cheat sheet" isn't rote memorization as one generally knows it; that's memorization through frequent use. To my mind, if you've memorized something by rote, it's because you've made an effort to remember it outside of normal use.

I used quite to disagree with the concept of rote memorization as far as programming goes, and to this day I still look up the simplest things in the Java API using JavaDoc. (But perhaps, in part, it's because there's such a useful tool as JavaDoc available that I feel I can do this.) I'll admit I've wasted a noticeable amount of time here and there rewriting stuff that was already available somewhere in the Java API but that I didn't know about. On the other hand, it's easy to argue that it's not rote memorization I needed; I just needed to read through all of the classes in particular packages once. If I know that a method exists, I can always find the name in the JavaDoc when my memory fails me. So, given a tool like JavaDoc, is rote memorization of the fact that you get an int from an Integer via the intValue() method really all that useful?

The syntax vs vocabulary thing is more complex than it seems, I think. Perhaps this is more due to Japanese being the kind of language it is, but I find the most useful thing is memorizing "patterns" which include both syntax and vocabulary. If I know how to say "is that my umbrella?" and "this beer is good", I can derive from that "is this my beer?" and "that umbrella is good", and a lot of other obvious combinations. Add more pattern sentences, and there's the expected exponential expansion of what you can say. -- CurtSampson


EditText of this page (last edited November 15, 2006) or FindPage with title or text search