Prisig discuss several traps of not being able to attain quality. Unlike most authors, his discussion is filled with deep insight in psychology and philosophy. For example, his analysis on why human got distracted from attaining quality spot on on why I have not been doing well in my work.
There are many traps in succeeding in resolving deep technical and skill problems. The first important thing is the failure of caring. This is caused by ego, anxiety and boredom. And those are the true feelings of programmers and skillful workers in the world. We appear to be the wizards of technology. But deep down, we feel like all human beings. We are scared of the nature which can give us a problem that we cannot resolve.
Let me try to give an example, in my reading of CLRS, I find traps to many programmers and make them not able to finish the whole book. Here is the reason why many of them cannot finish the whole book or gumption traps as discussed by Prisig. That includes the following. (Mostly self-criticism btw.)
- Having fuzzy belief that CLRS is "reference book" but not an "introductory book". (How do you define "introductory" and "reference"? If you don't specify the background knowlege of a person, how do you know?")
- It's too long a book. (War and Peace in Signet Classic has 1400 pages. A typical Dickens is 500 pages. Believe it or not, people read these books and they are not necessarily literature major. )
- Having fuzzy belief that CLRS is "too mathematical" so it is "useless in real life situation" (In real life, what operation was actually not control by some kind of logical or mathematical structure?)
- They are not "smart enough" and only have a fuzzy understanding of what "smartness" means. (In fact, have you ever try to define what smartness is? Do some research, you will see how fuzzy a concept it is.)
- Caught up by one single exercise in the book. (Record the attempts of solving a problem. No one is so perfect that they can resolve all mathematical problems. Or else the twin prime problems is resolved by someone already. If you think giving up is a shame, remember that there are many people who look at the Twin Prime problem, the Goldbach conjecture, the Fermat's Last Theorem and then decide to give up and sleep. So no shame, this is just how human works. )
- Not trying to learn an algorithm as one should learn it. (Algorithm is not meant to be "read", it's meant to be "implemented". This explains why an early chapter such as Chapter 2 take some time for people to "read" it through. Because the truth is one needs to at least implement an algorithm once to get a rough understanding of its operation.)
- "I don't need to know all the algorithms from CLRS. For example, why do I read Chapter 5? I will never write a random generator in my whole life." (The reason why you want to learn algorithm is not because a particular algorithm would be used but because you want to learn the pattern on how to solve a problem. For example, binary search as a method can be used to resolve more than just searching. In general, it is a method you can operate on a range of numbers. Consider the binary insertion sort, it takes a fine understanding of binary search. For another example, random generation algorithm will make you start to wonder what probability really is. Again, it is the thinking which matters, not the proper nouns and sound byte. )
- "I tried to read the book, but the later content lost me." (That's because you haven't learnt the material in the previous chapters well enough. Try to build connection on concepts, read further reference and repeat the process.)
- It just takes too much time. (When I scrutinize my use of time, I can always find some wasteful moment I can dedicate them to study algorithms. If you did the same and have none, I have nothing to say.)
But I am confident now, my biggest weakness, algorithm, will one day become one of my biggest strength. Just like many other things such as video gaming, language learning, poker, lock picking etc.
No comments:
Post a Comment