程序员为什么应该旗帜鲜明地反对“最佳实践”?

012c08b07abae54669fbf704118ae5c3.gif

让第一个版本的系统混乱一点,或许是件好事。

834be886ca97b633f8728e9cf3f782ba.jpeg

作者 | 黄峰达,CSDN 博客专家 Phodal

责编 | 唐小引

头图 | 作者绘制并授权 CSDN 使用

出品 | CSDN(ID:CSDNnews)

最近,我在设计、开发、维护一个基于『文档代码化』思想的平台。因为丰富的 markdown 经验和文档化系统的设计经验,我在这个系统中实施了很多过去的一些想法。系统工作得很好,但是代码却显得一片混乱。而,我突然觉得这是一件好事。

509b23e93a59df9649db4e2b439ce5f3.png

最佳实践很浪费时间

对于敏捷开发来说,我只采纳了持续集成和持续部署的思想,即提交代码便发布到 GitHub Pages。但是,这也浪费了我很多的时间,而且我觉得没有必要,因为我已经有一个本地可以部署的脚本。我只需要在本地运行一下 deploy,那么就会在本地构建,并部署到服务器上。然而,为了最佳实践的理念,我还是花了半天的时间,研究了一下 GitHub Action,然后让它实现自动部署。

系统的 UI 采用的 Angular 框架,因为我懒得搭建脚手架,而且我还有一些先前的代码可以复用。所以,我 copy / paste 大量的代码,这些代码大部分都是没有测试覆盖的。是的,你很少看到我的开源项目是没有测试覆盖的 —— 毕竟写单元测试也是要花时间的。过去,我们统计过一个相关的数据,在我们日常的开发中,我们差不多有 1/5 的时间花在了单元测试。所以,一周下来,我差不多一天的时间在写测试这件事上。

7a23fae10d3c188726dccfbad0cec01a.png

一个问题,三种方法实现

如开头所说,整个系统的核心是一个基于 markdown 的多功能渲染引擎。这部分的组件可以让你用 markdown:

  • 画出条形图、雷达图、思维导图

  • 画出甘特图

  • 画出特定的四象限

  • 调用 Web Components

  • ……

而为了实现这个功能,一共有三套不同的机制,当然了对于写 markdown 的人来说,它们是无感知的。这三种方法分别有:

  • 创建占位符,渲染完成后,替换占位符;

  • 直接生成最后要渲染的 HTML;

  • 生成一个 ID,在渲染的过程中,根据 ID 替换元素。

所以,整个过程就相当于,是解决一个问题有三个方法,然后我都用了这三种方法。

f9c093e0547987086435e586edf37960.png

起初,我只想创建个原型

起初,我只是想创建一个简单的系统,它只是一个简单的原型。而后,随着越来越多想法的产出,我创建了一个足够复杂的系统。所以,我起初设计的一系列要素都失效了。

我还有一堆糟糕的 SCSS 要管理,因为第一个版本设计的 CSS 体系,无法适用于新的架构。整个系统围绕在 markdown render 上,而这个 render 有大量的样式,就好像早期的多核 CPU 架构,只有一个 CPU 在工作,毕竟有大量的工作。

随着系统越来越复杂,我开始需要一个文档系统来管理这个文档系统,以便告诉我自己:系统里有什么功能?

6cf30fa78bbcd8bfbf621f51a3bf99f3.png

一片混乱,真的很爽

是的,现在,现在虽然看上去界面很美观,功能也很强大。就好多是我们看到的其它软件系统一样,但是内部真的是一片混乱。如果你习惯了这样的系统的代码,那么你可能觉得这不是一个问题。

但是,我习惯了在项目中引用各种最佳实践。看了这样一个系统,觉得非常的爽 —— 大部分系统就是这样的:同样的时间压力之下,我做得也就那样。虽然,我的手速可能比大部分人还快,实现的功能可能更多。但是,这些都是无关紧要的。

如果没有充足的时间改善,我们的系统都变得一片混乱。没有符合未来变化的设计,更何况你可能没有时间设计。

ef63b314fd72b7aa5d2ae95875dd7b74.png

好了,是时候重构

所以,经历了一系列的过程之后,我决定挑个合适的时候重建这个系统。

  • 开始重写之前的 markdown converter。

  • 将 markdown render 所有相关的组件提取为框架。

  • 重写系统。

于是,我们就出现了第二个系统,它设计良好。它的灵感都来自于我们在做第一个系统中的感受。如果没有来自于我们第一个系统的经验,我们无法设计出第二个系统。

980d87ab24dc132490e27169b797152e.png

经验:快速验证概念,创造业务价值

事实上,我们在市面上看到的大部分系统,都是以如此的方式演进的:

  • 第一个系统,赚了钱,创造了价值,但是缺少各种最佳实践,生存周期短。

  • 第二个系统,设计良好,包含了各种实践,生存周期变长,但是慢慢变得臃肿。

而我们的第二个系统很快将变成一个臃肿而缓慢的系统。

『第三个系统』由那些为 『第二个系统』 所累的人们创建。—— 《Linux/Unix 设计思想》

没有新系统,哪来的 KPI?

感谢您的支持,祝您生活愉快,觉得赞同的朋友可以点个「在看」!

作者系列文章延伸阅读:

作者简介:黄峰达(Phodal),ThoughtWorks Senior Consultant,CSDN 博客专家。长期活跃于 GitHub、CSDN,专注于物联网和前端领域。出版著作《自己动手设计物联网》,以及《Growth:全栈增长工程师指南》等六本电子书,并译有《物联网实战指南》。

【END】

c07d6cf9bc956e59024f9fdc1f6e96dc.jpeg

更多精彩推荐

☞联合国为何 Pick 腾讯?

☞京东:网传通过 Bug 抢茅台是假消息;罗永浩回应带货价格非「全网最低」;Rust 文档团队解散 | 极客头条

☞红外光抗疫、成功预测新基建,投资 280 家企业的光学博士到底是谁?

☞前端机器学习:识别人脸,并在脸颊上画草莓

瑞幸咖啡自曝虚假交易 22 亿,App 反冲 TOP 1

在Kubernetes上部署一个简单的、类PaaS的平台,原来这么容易!

旷视提双边分支网络BBN:攻坚长尾分布的现实世界任务 | CVPR 2020 Oral

2020年,这20个大家都认识的加密交易所过得怎么样?

cd6aee82ecebe6e22aa33cc141761933.png

你点的每个“在看”,我都认真当成了喜欢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值