After arriving at this point in Learning Python The Hard Way I am wondering if this is a good practice to create a list of symbols and define what they do as noted in bold below, for every programming language. This seems reasonable, and might be very useful to have when jumping between programming languages?

Is this something that programmers do or is it just a waste of effort?

Exercise 22: What Do You Know So Far? There won't be any code in this exercise or the next one, so there's no WYSS or Extra Credit either. In fact, this exercise is like one giant Extra Credit. I'm going to have you do a form of review what you have learned so far.

First, go back through every exercise you have done so far and write down every word and symbol (another name for 'character') that you have used. Make sure your list of symbols is complete.

Next to each word or symbol, write its name and what it does. If you can't find a name for a symbol in this book, then look for it online. If you do not know what a word or symbol does, then go read about it again and try using it in some code.

You may run into a few things you just can't find out or know, so just keep those on the list and be ready to look them up when you find them.

Once you have your list, spend a few days rewriting the list and double checking that it's correct. This may get boring but push through and really nail it down.

Once you have memorized the list and what they do, then you should step it up by writing out tables of symbols, their names, and what they do from memory. When you hit some you can't recall from memory, go back and memorize them again.

  • 5
    It's just an exercise to help you remember the details of Python. Programmers who remember everything about their language of choice without having to look it up are better programmers. Commented Oct 3, 2012 at 21:41
  • I'd think that at best this would only be useful for languages with a CFG
    – jk.
    Commented Oct 4, 2012 at 11:30

4 Answers 4


You could do something like this anytime you don't fully understand what you've just read. Whether you're reading Bronte's Wuthering Heights or Kuhn's The Structure of Scientific Revolutions or Beethoven's Eroica or just anything... if there are parts that you don't understand, write them down and find out what they mean. Do you get compiler warnings that you don't understand when you compile your program? Write them down along with explanations once you figure them out.

If writing down all the symbols that you don't understand in a Python program helps you, then you'll have learned something, and that's obviously good. You probably won't find most programmers doing exactly this sort of thing when they're working once they know the language because, well, they already know the language.

As you gain experience in a language, you'll think less about the individual symbols and more about the idea that a given bit of code is expressing, so a keeping a list of symbols handy is rather like keeping a words and punctuation marks handy to help you in your reading -- it's simply not necessary.


I'm not a mathematician, so having http://en.wikipedia.org/wiki/List_of_mathematical_symbols available to me is a godsend much of the time.

Likewise, I'm sure people just getting into programming, or even starting a new language may find it just as valuable as I find the above list.

Having said that, generally searching "[language] operators keywords" usually yields everything you need to know.


What? You are in software development but don't have an eidetic memory?

Actually, despite my poor attempt at humor, while few people have this talent, I believe memory is a success factor for software developers. I think being organized and writing things down can also help, but there is no substitute for rapidly processing and integrating new concepts and the picky details of the tools of our trade.

There are a lot of angles from which you can attack the problem of learning a programming language. Memorizing keywords and their meaning has merit. I find myself making flash cards more often than ever before as I need to learn new stuff at increasingly frequent intervals. If you often need to reference a book for programming language syntax, it will be difficult to compete with people who use the full range of the language by rarely need to reference its documentation.

Also, compare the problem to that of having a good vocabulary. If you hear a word used by others, you can fake it by using its context to infer its meaning, but you run a risk if you try to use it without knowing its precise meaning. You also are pretty unlikely to use a word that you don't commit to memory unless you are a thesaurus toting toastmaster. If you want to use a wide cross section of your language of choice, you will need a systematic study, perhaps including memorizing the keywords.

However, you should go further. James Coplien has a great book about idioms for C++, and there are many others with descriptions of patterns and techniques commonly used in your language. If you can't use print formatting directive or an iterator without looking it up, that may limit your day-to-day productivity.

Consider making an operational profile for yourself. What statements does your code need the most? If you use something frequently, it will probably get a lot of attention, but you may still want to focus additional time there. If there is something about your code that gets you in trouble, something that you or others consider to be a bad habit, put more attention on it (for candidates, check out refactoring smells).


Thank you Google for being so good to programmers with your search algorithms :)

There is no need to exercising and rehearsing anything related some static information, which you may get pretty easily by Googling in 5 sec. I don't imagine any fast phase software development without internet access. Having some glue on what you are searching for will definitely guide you to the right source of the information.

However, without any understanding of topic or related information that might possible lead to it, it would be madness just spend hours in-front of search engine.

  • There is the issue of fluency which Googling every time won't help with.
    – deadly
    Commented Oct 4, 2012 at 14:15

Not the answer you're looking for? Browse other questions tagged or ask your own question.