ARTS - 第二周

274 阅读5分钟

ARTS 源于极客时间《左耳听风》专栏组织的一个学习打卡活动,四个字母对应着四个行动准则:

  • Algorithm:每周至少做一个 leetcode 的算法题
  • Review:阅读并点评至少一篇英文技术文章
  • Tip:学习至少一个技术技巧
  • Share:分享一篇有观点和思考的技术文章

Algorithm

Add Two Numbers

复习了链表和算术(加法运算);

❌忽略了一个边界条件: 加法的结果可能会多一位的情况,digit = max{n, m} or max{n, m} + 1


Review

阅读并点评至少一篇英文技术文章

7 absolute truths I unlearned as junior developer

本周阅读了这篇文章 7 absolute truths I unlearned as junior developer, 作者是一名工作经验超过十年的程序媛,这还不包括她小时候自己在家独立编程的那段时间,她从十岁就开始编程了。

这篇文章讲述了作者自己在初级程序员阶段陷入的七个认识误区。

下面我列举几个我印象比较深的点:

每个人都写测试

作者在第一次受雇进入公司时充满期待,期待看到工业级的代码是如何生产出来的,应该有自动化部署、PR 和 Code Review 等措施以保证输出高质量的代码,她坚定的相信在工业级软件的开发中每个人都会写测试!

可实际不是如此,她第一天进入公司的时候,没有在项目里看到一行测试代码!

自己公司的技术远远落后于其他公司

只有我的公司没有写单元测试,其他公司都有,是这样吗?

作者看了很多博客和一些公司技术演讲,似乎每个人构建超复杂的、高质量、高性能的应用,而只有自己在做简单的搬运工作。


作者最终学到的:

大多数技术演讲只是在论证某个概念而不是基于具体的场景。他们的演讲通常是基于某个技术主题,这不代表公司在日常工作里使用了该技术,也不意味着他们的代码都是那么完美。演技者只是在介绍某个玩具应用,而不是对现实中的某个案例做研究,弄清楚这两者的区别很重要。

处理历史遗留问题是再正常不过的。在在很多大厂的程序员聊过之后,作者发现其实大家都在一条船上。历史代码是正常的,处理这些历史代码会比你从零开始搭建一个应用学习到更多的东西,因为它会让你接触到很多之前不了解的概念。

代码质量是最重要的

曾经,被作者 code review 是一件很残酷的事情。 她对于代码风格的要求非常挑剔,即使你只是少了一个分号,作者也会在每行都进行评论。


作者最终学到的:

Good enough is good enough. “好”代码在一定程度上是收益递减的,不需要强求写出完美的简洁代码,也不要让代码烂到难以维护。通常有部分重复和冗长的代码会更易于理解和阅读。

Architecture is more important than nitpicking. 从架构层面来看,有时为了优化一行代码,却会导致更大问题。应该专注于系统的结构而不是一小段代码。

技术债是糟糕的

每个人对技术债的定义都不一样。曾经有一段时间,作者把被她认为是糟糕的代码都认作是技术债。
正因如此,作者竭尽所能地消除这些。
她曾经花一整个周末的时间去手动消除 800 个 linting errors


作者最终学到的:

代码有些混乱或者不够干净并不等于技术债。 技术债实际上会拖慢你的前进脚步,让某些拓展和修改变得困难和易错。代码不够干净并不是太大的事情,不要花太多精力在清理这些代码上面。

拥有一些技术债是健康的。 有时我们走捷径是为了节省时间,这是以牺牲未来的时间为代价的。有部分事实意义上的技术债务型代码是可接受的,只要我们能在未来某段时间内偿还这些债务。不要把过分打磨自己的代码看得比及时交付还重要。

阅读感想

文章是在教告诉我们编写测试、追求高质量的代码是不对的吗?

显然不是,我看过有不止一个大牛说过 Code Review 对他们职业生涯发展帮助很大。有个大牛说他在 Google 工作,第一次提交代码,一段 100 行的代码,在 Code Review 中收到了 200 行的评论。

Code Review 以及编写自动化测试的重要性是不言而喻的,这在业界已经达成了共识。作者当然不是要推翻这些。

她在刚进入行业的时候有些理想主义,觉得每个人都应该写测试,追求完美的代码,这些并没有错,理想主义没有错,做一个有追求的程序员也没有错。相反,这些都是成为一个优秀程序员的必要特质。

只不过现实会有不完美,总会有各种原因导致公司目前的代码质量离自己预期的有段距离。拿人钱财替人消灾,公司雇佣我们就是为了来解决这些问题的。如果是自己的标准过于严苛了,那就根据实际情况校正自己的标准,如果是现实的情况没有达到它应该达到的标准,那就努力改进它!


Tips

学习至少一个技术技巧

Netty 学习 (构建一个简单的 CS 调用)

  • Netty 基础 API 的使用,Channel#writeAndFlush, ChannelHandlerContext#writeAndFlush
  • client 端使用自定义的 Future 实现类来获取返回的请求结果,语义性更好。
    这是我在极客时间松然老师的每日一课里学到的,详见他的代码-easyrpc

Share

分享一篇有观点和思考的技术文章

发表了一篇文章: 一次有趣的代码重构