软件工程师成长

2020-11-07 61

看到别人的文章有感

参考链接https://mp.weixin.qq.com/s/hiRMgOAZQEftUecqYvYr2Q

从三个大的方向展开:学习我周围的人在做的事情、学习良好的思维习惯、获取新的思考工具。

  1. 学习我周围的人在做的事情
     了解其他人的工作的上下文。这使得我可以更好地进行沟通。以正确的方式构思事物的作用是很强大的。这帮助我明白了自己有多么重要,以及我可以利用哪些杠杆来提高效率。

  2. 学习良好的思维习惯

    1. 善于思考
    2. 提高日常工作效率的策略
      • 开会一定要做出决定或着有下一步行动,否则不要离开会议
      • 决定事情由谁完成。没有负责人的事情很少被完成的。
      • 记录项目期间做出的决策。
  3. 获取新的思考工具和思维模型

    1. 采用了及时处理的方法。eg:软件项目炸了,迷茫,读到了 领域驱动设计。下一步拿来尝试。

    2. 收集非常有意思想法的网站,eg:阅读 Hacker News国内第三方版 上的文章

    3. 获取新的思考工具

    4. 学习新的不同语言。学习 lisp 的另一种方言比学习 C++03、一种函数式编程语言、一种动态类型语言和一种 lisp 的好处要小得多

  4. 保护你的空闲

    • 当我在做新事情时,我会花时间了解我正在工作的系统,以及与之密切相关的事情。如果事情太多了,我会尽可能多地学习。每次我重温系统,都想了解更多东西。
  5. 问问题

 我们通常很不擅长问问题。或者是因为我们害怕这些问题会让我们显得很愚蠢,所以我们根本就不问这些问题,或者我们扯很多废话来问这些问题来避免我们显得很愚蠢,而不是学习更多东西。
 问题是,在你找出答案之前,你无法判断一个问题是否愚蠢。我回避这个问题的方法是声明我会问很多问题。这让我得以解脱,从底层开始修补我认知上的漏洞。积极的团队文化会对此有帮助。

 例如,以下是我学习打包软件的过程:

 问:什么是软件包?
 答:那是被打包到一起,可以被安装到系统上的代码。

 问:为什么我需要软件包?
 答:它们提供了一种一致的方法,可以将你所需的所有文件放在正确的位置。没有它们,东西很容易一团糟。你需要确保每个文件都在它该在的地方,设置了系统路径,并且依赖包可用。

 问:软件包与我可以在自己的系统上安装的应用程序有什么不同?
 答:想法很相似!Windows 安装包像是一个包管理器,能够帮助安装应用程序。类似地,DPKG 和 rpm 包有点儿像.exe文件,可以安装在 Linux 系统上。你可以借助于apt和yum包管理器,它们有点儿像 Windows 安装包。

 问:我明白了。所以 python 中的setup.py如何转换成一个dpkg?那是如何工作的?
 答:我们有一个 python-debhelper,运行setup.py来进行转换。

 答:哦,真有趣!你是怎么知道的?
 答:debian/rules文件包含如何创建一个dpkg的说明。我看了它就弄明白了。

然后我就知道,我该自己看看这个文档了。我有足够的细节来理解大纲。事实证明,这并没有我想的那么简单,问这个问题也不蠢。

这是我养成的一个思维习惯,而且你可以经常问一些好问题。大多数问题都是依赖上下文的,但是我有一个比较喜欢的一般性问题。

这就是:你是如何发现 X 的?

当我问了一些都弄西,并且他们回答之后,我问的下一件事就是他们是如何知道的?这能帮助我下次自己解决问题。我做了上面的问答,让我了解了debian/rules文件以及它是如何工作的。

  1. 发现困惑
     真正地找出哪里出了问题
    (但是关于硬件方面,很多时候还是找专业的来吧233333)

  2. 担当责任
     它教会了我一些重要的习惯:经常跟进,而且如果你负责一项任务,那么推进这项任务就是你的责任。不要在其位不谋其政,而是要真正把事情做好:不管是授权做还是自己做。

这也强化了一个原始习惯:珍惜惊讶。惊讶是一种你的预期与实际发生的匹配的衡量。这是 改变你的思维 的一个绝佳机会。

  1. 拥抱担忧

 好吧,最后一个故事。去年,我参与了一个失败的边缘项目。在那个项目中,我学了一种新语言、一种新的做事方式并且测试了一种产品假设。在那个项目中坚持下来真是出人意料的艰难——每次我想起那个项目都会感到害怕。

 这种强烈的感受是我无法忽视的。它使我开始注意同样的微妙感受,特别是在工作中的。每当我遇到一项艰巨的任务并且我还不知道如何去做的时候,这种感受就会悄悄地回来。“啊,这要怎么搞?我完全没有头绪。”

 我已经学会去拥抱这种感觉。这令我兴奋。这会告诉我将要学习什么东西。到目前为止,我已经开始 在我的人体日志中 跟踪这种感受——“我这周感到害怕了吗?”如果很多周的结果都是“否”,那我就过得太舒适了。

  1. 增加细微的差别

层次 1 是理解函数或 API 是做什么的。

层次 2 是理解它是如何实现的。

层次 3 是理解它为什么是那样实现的。

对于设计良好的 API 和你不想深入学习的东西,级别 1 就可以了。

总结:

  • 不要写你不理解的代码

  • 尽可能优先学习(我选择在写项目之前达到层次 1 理解)

  • 为将来的你保留上下文

  • 对你的团队的代码达到 2-3 的理解层次

  • 代码审核有助于让你的思维模型保持与时俱进

  1. 测试

总结:

  • 对于优化问题,测量而不是假设。

  • 拥有一个干净的预发布环境。容器化非常酷。

  • 优化零假阳性/测试陷阱
    编写并不是你真正想测的东西的测试是非常容易的。例如,遍历数据库游标并检查值?好吧,如果 iterator 什么都没有返回,你的测试不检查任何东西都能够通过。

这些都是假阳性,它们给了你一种错误的自信感。我如何修补这些呢?好吧,我首先要在代码评审时额外认真。其次,测试这个问题的肯定触发的方法是让你的测试失败。我将等于换成了不等于。如果它仍然通过了,那我就发现了一个问题。这就是我最近开始做的事情,一旦我发现了我的第一个假阳性测试。