Monday, June 14, 2010

Beautiful quote

"What I cannot create, I do not understand."  - Richard Feynman

Probably my favorite aspects of programming is that it (usually) forces you to understand what you are doing.  There is something special about the feeling you get when you understand an idea so completely you can teach it to a computer.  The first time I can remember feeling this was when I wrote a toy implementation of the simplex algorithm for linear programming.  The first time I read the description I found it really hard to follow.  Only after writing down the types of the operations, and slowly decoding the natural language into code did I feel like I really understood what was going on.  Then it seemed like such a simple idea I was amazed I initially found it so difficult.

Note that the contrapositive is "What I understand, I can create."  Unfortunately, this does not rule out creating without understanding.  I occasionally take algorithms out of books without understanding them completely.  While they usually work as expected, I forget how the program works almost immediately, and learn next to nothing from the experience.  It is only through debugging that I gain any understanding of how the program works.  Needless to say, this is an incredibly inefficient way to learn.

No comments:

Post a Comment