《软件开发者路线图》摘录(Excerpt from software developer Roadmap)

快速学习的人们面对的主要风险之一就是变成小池里的大鱼。尽管小池塘和大鱼本身都没有错,但有必要让大鱼知道在全球的池塘网络中还有其他的池塘,这非常关键。更重要的是:大鱼还要知道巨型鱼的存在,那些体积甚至超过池塘大小的大鱼。

聪颖而且努力的学徒千万不要对自己的成功自鸣得意。在软件开发领域,超越平庸是很容易的,因为有太多的人只超出平均曲线一点点就开始满足了。你必须去追寻那些技艺精湛、学徒甚至无法想象其水平的其他团队、组织、熟练工和师傅,向他们学习,以此来抗争趋于平庸的倾向。

如果只拥有表面知识,另一种可能的后果是:你会永远意识不到自己正尝试解决的问题要么已经有了众所周知的解决方案,要么根本是不可能的(在后一种情况下,会有大量的学术论文讨论它为什么不可能,以及如何将它重新定义成一个可解决的问题)。如果浅尝辄止,你就了解不到自己所不知的东西;而不知道自己的知识边界,你也无法发现新的东西。洞穿一个问题所有层面的过程常会揭示一些来自计算机科学的基础概念。虽然计算机科学家的工作看起来不切实际,但那些能将最先进的理论运用到现实问题中的人将有能力做出其他人觉得不可思议的事情。选择一种不同的算法或数据结构,一个原本运行几个月的批处理任务将变成一件在用户松开鼠标按钮之前就已经结束了的事情。只知道 List 、 Set 和 HashMap 的人不太可能意识到他需要用 Trie 来解决自己的问题。相反,他只会觉得像最长前缀匹配( longest-prefix matching )这样的问题难得无法想象,然后要么放弃,要么去问可不可以降低这项特性的优先级。

————————

One of the main risks faced by people who learn quickly is to become a big fish in a small pond. Although there is nothing wrong with small ponds and big fish themselves, it is very important for big fish to know that there are other ponds in the global pond network. More importantly: big fish also need to know the existence of giant fish, which are even larger than the size of the pond.

An intelligent and hard-working apprentice must not be complacent about his success. In the field of software development, it is easy to go beyond mediocrity, because too many people begin to be satisfied only a little beyond the average curve. You must learn from other teams, organizations, skilled workers and masters who are skilled, apprentices and even unimaginable, so as to fight against the tendency to mediocrity.

If you only have superficial knowledge, another possible consequence is that you will never realize that the problem you are trying to solve either has a well-known solution or is impossible at all (in the latter case, there will be a large number of academic papers discussing why it is impossible and how to redefine it as a solvable problem). If you taste it, you won’t know what you don’t know; Without knowing your knowledge boundary, you can’t find new things. The process of penetrating all levels of a problem often reveals some basic concepts from computer science. Although the work of computer scientists seems impractical, those who can apply the most advanced theories to practical problems will be able to do things that others find incredible. If you choose a different algorithm or data structure, a batch task that has been running for several months will become a thing that ends before the user releases the mouse button. People who only know list, set and HashMap are unlikely to realize that they need to use trie to solve their problems. On the contrary, he will only think that problems such as longest prefix matching are hard to imagine, and then either give up or ask if he can lower the priority of this feature.