《左耳听风》-ARTS-打卡记录-第25周

坚持不懈是一句正确的废话。前段时间,我在我的读者群中发起了一个名为 ARTS 的活动。每人每周写一个 ARTS:Algorithm 是一道算法题,Review 是读一篇英文文章,Technique/Tips 是分享一个小技术,Share 是分享一个观点。我希望大家可以坚持一年,但是我也相信,能够坚持下来的人一定很少,绝大多数人都是虎头蛇尾的,但是我依然相信会有人坚持下来的。
——陈皓《左耳听风》98 | 高效学习:深度,归纳和坚持实践

Algorithm

Review

Beware the Share (7/97)
当心共享

It was my first project at the company. I’d just finished my degree and was anxious to(急于) prove myself, staying late every day going through the existing code. As I worked through my first feature I took extra care to put in place(实施) everything I had learned — commenting, logging, pulling out(提取) shared code into libraries where possible, the works. The code review that I had felt so ready for came as a rude awakening(觉醒) — reuse was frowned(皱眉) upon!
那是我在公司的第一个项目.当时我刚完成自己的学位,急于证明自己.每天都待到很晚去看已有的代码.当我干完我第一个特性,我格外小心地去实施我学到的每样东西–注释,日志,尽可能将共享的代码提取到库中.我感觉准备的很好的代码评审成为了一个猛然的觉醒,原来重用不那么受欢迎.

How could this be? All through college reuse was held up(举起,提出,支持) as the epitome(缩影,摘要) of quality software engineering. All the articles I had read, the textbooks, the seasoned(经验丰富的,老练的) software professionals who taught me. Was it all wrong?
怎么会这样呢?学校都会说重用是高质量工程的的一个缩影.所有我读过的文章,课本,以及教过我的老练的软件专家都这样认为.是他们都错了吗?
It turns out that I was missing something critical.
最后证明我错过了一些至关重要的东西.
Context.
上下文.
The fact that two wildly(非常) different parts of the system performed some logic in the same way meant less than I thought. Up until I had pulled out those libraries of shared code, these parts were not dependent on each other. Each could evolve independently. Each could change its logic to suit the needs of the system’s changing business environment. Those four lines of similar code were accidental — a temporal(临时的) anomaly(异常,a-表示否定,再比如anonymous,无名的,匿名的;asynchronous,异步的), a coincidence(巧合,一致,同时存在). That is, until I came along.
系统中两个截然不同的部分以相同的方式执行一些逻辑,这个事实没有我想象的那么重要.在我将他们提取出来作为共享库之前,这些部分是相互独立的,每部分可以独自演化.每部分可以改变自身的逻辑来适应系统变化的商业环境的需要.这四行类似的代码是意外–临时的反常现象,巧合.在我出现之前都是这样.
The libraries of shared code I created tied the shoelaces of each foot to each other. Steps by one business domain could not be made without first synchronizing with the other. Maintenance costs in those independent functions used to be negligible, but the common library required an order of magnitude more testing.

While I’d decreased the absolute number of lines of code in the system, I had increased the number of dependencies. The context of these dependencies is critical — had they been localized, it may have been justified and had some positive value. When these dependencies aren’t held in check, their tendrils entangle the larger concerns of the system even though the code itself looks just fine.

These mistakes are insidious in that, at their core, they sound like a good idea. When applied in the right context, these techniques are valuable. In the wrong context, they increase cost rather than value. When coming into an existing code base with no knowledge of the context where the various parts will be used, I’m much more careful these days about what is shared.

Beware the share. Check your context. Only then, proceed.

By Udi Dahan

Tips

1.选择看到错误时多查一步,比如看到指针的值为0调用崩溃的问题,不要着急去汇报.而是看下为何为0,是没有初始化,还是被别的地方改成0了.
2.总是把出参当做入参,出参是被赋值方. 如果不知道这个函数怎么用,选择全局搜索下它使用的场景,而非自己盲目去试
3.利用日志找问题时,对于分支程序,优先选择打印外层的分支

Share

《左耳听风》-ARTS-打卡记录-第二十五周相关推荐

  1. 《左耳听风》-ARTS-打卡记录-第十二周

    Algorithm 350. 两个数组的交集 II 这次查看了官方的做法,原来采用了哈希表的方法,真是很巧妙啊. class Solution { public:vector<int> i ...

  2. 《左耳听风》-ARTS-打卡记录-第十四周

    之前的文章地址:<左耳听风>-ARTS-打卡记录-第十三周 - 心媛意码 - 博客园 Algorithm 冒泡法 好久没写了,找个简单的先续上,习惯坚持住. #include<ios ...

  3. Dimple在左耳听风 ARTS打卡(第四期)

    打卡给人的感觉就是每周都有一个压力在身上,有无数双眼睛盯着你,看着你,鼓励着你,激励着你,你想不去做,就会有负罪感.这都还是被动的学习,等到真正的领悟到主动学习,那打卡,就只是一个形式罢了.我打卡,我 ...

  4. 《左耳听风》-ARTS-打卡记录-第九周

    Algorithm 680. 验证回文字符串 Ⅱ 我看leetcode这个题的难度为:简单,但却花了我好长时间,做的结果性能一般,被虐的生无可恋. 最开始采用的方法是脑子里最先蹦出来的,其实功能上没有 ...

  5. 《左耳听风》-ARTS-打卡记录-第七周

    Algorithm 反转字符串中的元音字符 题目: 编写一个函数,以字符串作为输入,反转该字符串中的元音字母.示例 1:输入: "hello" 输出: "holle&qu ...

  6. C语言编程>第二十五周 ① 给定程序中,函数fun的功能是:在形参s所指字符串中的每个非数字字符之后插入一个“*”号。

    例题:给定程序中,函数fun的功能是:在形参s所指字符串中的每个非数字字符之后插入一个"*"号. 例如,形参s所指的字符串为:albc45sdtg56f,则执行结果为:a*1b*c ...

  7. C语言编程>第二十五周 ② 下列程序中,函数fun的功能是:将大写字母转换为对应小写字母之后的第五个字母,若为小写字母为v~z,使小写字母的值减21,转换后的小写字母作为函数值返回。

    例题:下列程序中,函数fun的功能是:将大写字母转换为对应小写字母之后的第五个字母,若为小写字母为v-z,使小写字母的值减21,转换后的小写字母作为函数值返回. 例如,若形参是字母A,则转换为小写字母 ...

  8. C语言编程>第二十五周 ⑤ 下列给定程序的功能是:读入一个英文文本行,将其中每个单词的第一个字母改成大写,然后输出此文本行(这里的 “单词”是指由空格隔开的字符串)。

    例题:下列给定程序的功能是:读入一个英文文本行,将其中每个单词的第一个字母改成大写,然后输出此文本行(这里的 "单词"是指由空格隔开的字符串). 例如,若输入 "good ...

  9. C语言编程>第二十五周 ③ 下列给定程序中,函数fun的功能是:根据输入的三个边长(整型值),判断能否构成三角形;构成的是等边三角形,还是等腰三角形。若能构成等边三角形函数返回3,若能构成……

    例题:下列给定程序中,函数fun的功能是:根据输入的三个边长(整型值),判断能否构成三角形:构成的是等边三角形,还是等腰三角形.若能构成等边三角形函数返回3,若能构成等腰三角形函数返回2,若能构成三角 ...

最新文章

  1. VC++设置Release模式下允许调试代码
  2. flyway配置mysql_SpringBoot 中的Flyway配置
  3. python opencv生成 html5 支持的mp4
  4. 动态库在线更新导致coredump的问题
  5. 微信朋友圈删除后服务器还有吗,删了的朋友圈还可以找回来吗
  6. 前端学习(2013)vue之电商管理系统电商系统之监听on-success事件
  7. 前端学习(1657):前端系列实战课程之文字输入框实现思路
  8. [Swift]八大排序算法(八):基数排序
  9. BugkuCTF-MISC题telnet
  10. 定义一个函数模板,要求返回两个值中的较小值。
  11. Python排序算法---冒泡排序
  12. HackerRank Shashank and List
  13. PHP URL参数获取方式的四种例子
  14. [整理]充分发挥FireWork功能,实现超酷多级下拉菜单,爆强!
  15. php实现ps修图,ps皮肤处理精修方法
  16. java一般用来开发什么_Java能做什么
  17. 12月21诛仙服务器维护,【12月31日】全服停机更新维护公告
  18. 2021强网杯全国网络安全挑战赛Writeup
  19. Qt撤销回/撤框架:QUndoCommand
  20. 意外收获:如何将中文转成拼音

热门文章

  1. java——java删除指定文件或文件夹
  2. 苹果审核被拒1.1和5.0
  3. 过孔为什么不能打焊盘上?我就想打,怎么办?
  4. Dubbo的原理,面试常见问题
  5. GeoJson Style
  6. 通过VM虚拟机安装linux系统(centos版本)
  7. TensorFlow-SSD测试代码梳理
  8. 1.1需求调研(一) - 需求调研的目的
  9. Samba文件服务器
  10. pytorch 复现 FCN模型详细代码教程