【笔记】读卡马克《Parallel Implementations》

【笔记】读卡马克《Parallel Implementations》

在浏览知乎的一个讨论: 《入职后发现项目组代码异常混乱,是去是留?》, 顾露同学的回答中提到了这篇文章,所以就追根溯源去读了一下. 因为原博客《AltDevBlogADay》已经关闭了, 可以从这里看到全文。

摘抄文中比较有意思的几段:

>

I used to Code Fearlessly all the time, tearing up everything whenever I had a thought about a better way of doing something. There was even a bit of pride there — “I’m not afraid to suffer consequences in the quest to Do The Right Thing!” Of course, to be honest, the consequences usually fell on a more junior programmer who had to deal with an irate developer that had something unexpectedly stop working when I tore up the code to make it “better”.

卡马克一贯的态度: "Code Fearlessly", "Do The Right Thing", 并且不惧承担随之(重构、甚至重写)而来的风险

>

What I try to do nowadays is to implement new ideas in parallel with the old ones, rather than mutating the existing code. This allows easy and honest comparison between them, and makes it trivial to go back to the old reliable path when the spiffy new one starts showing flaws. The difference between changing a console variable to get a different behavior versus running an old exe, let alone reverting code changes and rebuilding, is significant.

卡马克的方法论:并行实现重构/重写的新代码。如果站在服务器的角度衍生来看,新/老接口同时发布(灰度发布), 线上采集真实数据做对比验证, 出了问题回滚也容易,直接替换接口。 有兴趣的可以读下《什么是灰度发布?》

当然, 这里有个默认前置: 是要有合理的软工设计, 接口清晰,足够SRP和ISP。

>

If the task you are working on can be expressed as a pure function that simply processes input parameters into a return structure, it is easy to switch it out for different implementations. If it is a system that maintains internal state or has multiple entry points, you have to be a bit more careful about switching it in and out. If it is a gnarly mess with lots of internal callouts to other systems to maintain parallel state changes, then you have some cleanup to do before trying a parallel implementation.

如果是一个内部状态复杂的系统/服务, 或者与其他的系统有各种调用依赖, 那么,首先得把服务本身梳理清楚,才能继续开搞。这里反面说明了上面提到的默认前置。

系统为什么会复杂? 大部分都可以归结为四个字:“历史原因”, 原始设计跟不上需求变化时就会出现。所以, 在工程敏捷迭代的同时, 一方面不要吝啬给代码重构花时间, 另一方面,还需要Coder坚持正向的价值观(BGM: 再次响起卡马克的原话,"Code Fearlessly", "Do the Right Thing")

>

There are two general classes of parallel implementations I work with: The reference implementation, which is much smaller and simpler, but will be maintained continuously, and the experimental implementation, where you expect one version to “win” and consign the other implementation to source control in a couple weeks after you have some confidence that it is both fully functional and a real improvement.

这段是卡马克关于实现 Parallel Implementations 的具体方法阐述, 类似的方法和手段在《重构》这本书中讲的比较多.

读者结语:卡马克推荐的 Parallel Implementations 作为代码重构的方式, 在软件工程中是相当有效的, 在 Parallel 的阶段可以充分验证可行性,减少大部分风险,值得学习和使用。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏轮子工厂

Linux系统的前世今生

上世纪六十年代,人们还在用批处理计算机,也就是一次性给一批任务到计算机,然后等待结果,中途不能和计算机进行交互,而且准备作业需要耗费大量时间。于是1965年,贝...

11620
来自专栏华章科技

39个史诗级奇葩代码注释,程序不会崩,但程序员会

StackOverflow 上有一个类似的问题,问大家见过哪些超秀的注释,不少程序员纷纷吐槽自己见过的那些逆天注释,我们一起来围观一下。

19910
来自专栏企鹅号快讯

什么样的密码才是安全的?

什么样的密码才是安全的?相信这样的老生常谈你已经听腻了:密码设置得长一些,混合数字字母符号,避免任何可能容易联系到你本身的密码。但现实是在街头调查中大多数人并没...

20160
来自专栏带你撸出一手好代码

做人肉代码翻译器是什么感受?

程序员编码的常规流程是通过大脑把将要实现的功能切分成一个个逻辑单元,使用编程语言将这些逻辑单元实现并组织在一起,积少成多, 形成电脑软件 缺乏经验的程序员可能...

39780
来自专栏JavaEdge

epoll和selectepoll和select

39990
来自专栏牛客网

成都-阿里Java研发工程师面经

11号去成都参加阿里面试,网上预约的3点,两点半就到了,刚签完到马上就喊去面试。经历了一面二面和HR面。 一面 1.介绍一下你的项目,说一下哪个项目印象最深 ...

44280
来自专栏SDNLAB

SDN实战团分享(二十五):博科SDN控制器BSC介绍

首先 BSC与 ODL 的本质一样,同样的内核软件,同样的架构。我们下面看这张图说明一下BSC控制器和ODL控制器的关系: ? 下面蓝色的部分就是ODL的实质,...

36570
来自专栏刺客博客

测评:KVMLA: 月付4刀 / 1GB内存 / 20GBHDD / 400GB流量 / 新加坡klayer

Pzea是美国KLAYER LLC旗下专门负责国际业务订单的品牌,建立于2012年因至今未正式命名所以默认取域名pzea.com的Pzea做称呼。 支持支付宝...

15020
来自专栏Python专栏

从《红色警戒:复兴》论MongoDB设计模式的重要性

17640
来自专栏云加头条

智能云上手指南:如何接入腾讯云的自然语言处理能力?

本文将为广大云开发者介绍如何介入腾讯开放的自然语言处理能力,即文智自然语言处理。

83400

扫码关注云+社区

领取腾讯云代金券