励志司机锐锐|高级软件工程师成长秘诀( 九 )


就像在电子游戏中 , 你可以获得一些力量 。 这些有助于你在现实世界获得力量 。 就像在电子游戏中 , 你需要进行任务才能获得这些力量 。
下面是我发现的一些可能需要通过的任务 。
当文档不全时阅读源代码任务:阅读开源代码 。 为你正在查看的代码快速构建思维模型任务:阅读开源代码 。 拥抱恐惧任务:构建一个辅助项目 。 足够自信 , 敢于表现无知任务:克服成长之路上的第一个常见问题 。 定义自己的属于 。 让人们明确知道我在谈论什么 。 就像我几周前在《IdeaMuse》文章中提到的:“大多数时候 , 大部分人都不知道自己在谈论什么 。 ”任务:???成长路上的一些常见问题
就像工程师喜欢包含常见问题的文档一样 , 我认为人们喜欢阅读关于成长之路上常见问题的文章——我发现自己犯的错误 , 然后改正了的 。
有时候 , 我觉得我需要知道所有问题的答案
当我明白的事情越多 , 更多的人会向我问问题 。 这感觉棒极了!然而 , 肯定有一些问题我不知道答案 。 在这种情况下 , 靠着感觉并且自作聪明是一个陷阱 。 这个陷阱会阻碍我们学习 。
如果我说不知道 , 人们会停止向我问问题吗?很可能是这样的 。
而且 , 他们无论如何都会找出答案 , 因为他们也很能干和聪明 。 如果被这种问题困住是该有多愚蠢?
敢于表达无知的自信是一种超能力 。
我磨练这项技能的一个好方法是 , 当我没有什么要补充的时候 , 就说“没什么要补充的” , 而不是重复别人说的话 。 这让我感到很强大 。 我从查理芒格那里学到这个方法 。
有时 , 我会失去冷静
有时候 , 我会陷入恐慌和沮丧的状态 。 我不再理性地思考问题 , 尽可能写些垃圾来解决问题 。 添加一个调用 , 添加一个括号 , 打印一些随机的东西 , 只是让事情以某种方式可以运行 。 当我修改某个事情花费的时间超出了预期时 , 我就会开始进入这种状态 。
比如下面这个具体的例子 。 我参与对我们新构建的一个队列系统的测试 , 我想要模拟饥饿和竞争的队列消费者 。 因此 , 我决定在测试中生成几个线程 , 都运行消费者 , 这些线程将运行5秒钟 , 在队列中竞争一条消息 。 我预期只有其中一个线程会得到这条消息(这是我们实现的队列定义) 。 而且我预期这些线程都不会崩溃 。
在这个测试中 , 我给每个线程设定的join超时时间是5秒 。 这些测试不起作用 。 我尝试手动模拟 , 一切都会顺利运行 。 但是使用线程 , 有时候测试会失败 。 我想不通其中的问题 。 我尝试了所有我能做的随机的事情 。 在一个绝望的时刻 , 我重新安排了测试的顺序 。 我这样做的时候感到很有趣 , 这怎么可能有帮助呢?结果 , 第一个测试又通过了 , 而另一个之前通过的测试开始失败 。
那时候 , 我发现自己失去了冷静 , 在尝试一些没有意义的随机事件 。 我冷静下来 , 开始调查线程中在发生什么 。 结果是 , join只会等待 , 即使超时也不会终止进程 。 terminate()才是终止进程的方法 。 如果我花时间仔细阅读了文档 , 我就不会觉得那么沮丧了 。
这些线程没有被终止 , 而且这些遗落的线程会扰乱接下来的测试 。
通常 , 这种情况发生在我比较匆忙的时候 , 当我没有保护我的空闲 , 结果就是我没有将学习放在做事情之上 。 其它时候 , 是因为代码比较难 , 没有触手可得的解决办法 。
只要我注意到自己这样做 , 我就会自己从中解脱出来 。 我会从应急性的bug修复转变为策略性的bug修复 。
新鲜事物
把优化学习放在做太多事情上很容易 。 例如 , 为了尝试一种新技术而做出错误的设计决定 。 多亏了我们的团队文化 , 我能控制住自己 。 我们互相质疑彼此的决定 , 并意识到当我们没有充分的理由来解释它时 , 就会有一种潜在的欲望——我们之后再把它搞明白 。


推荐阅读