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

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?

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

作者系列文章延伸阅读:

  • 程序员造轮子的正确姿势

  • 微前端如何落地?

  • 前端代码的整洁之道

  • 无代码编程时代下,程序员要失业了?

  • 更多精彩文章,可关注作者 CSDN 博客:https://phodal.blog.csdn.net/

作者简介:黄峰达(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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1382587.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

旗帜鲜明地反对“码而优则仕”

点击上方 "编程技术圈"关注, 星标或置顶一起成长 后台回复“大礼包”有惊喜礼包! 每日英文 Real strong men are not those without tears,but those running in tears. 真正的强者,不是没有眼泪的人,而是含着眼泪奔跑的人。 每日…

微软GitHub旗帜鲜明抵制996!

作者 | 伍杏玲 出品 | CSDN(ID:CSDNnews) 自3月27日996.ICU话题诞生以来,已引发国内外持续不断地关注和热议。国内大佬忙着发声,主流浏览器忙着屏蔽项目的GitHub地址。 而马云几天前谈的“996成功论”,被图…

我的世界java什么村民卖地图_教程/村民交易大厅

此条目的(部分)内容需要翻译。 你可以帮助我们来翻译此条目,但请勿使用机器翻译。 这篇教程将教你如何建造一个村民交易大厅。 主条目:交易 村民交易大厅要求最大限度地增加易于达到的村民数量,也要求提供一个快速遗弃并替换不需要的村民的途径。 村民交易大厅中有三个部分:…

旗帜鲜明的反对基因编辑婴儿!

阅读本文大概需要 3.3 分钟。 昨天的新闻,相信大家都知道了,媒体报道称世界首例免疫艾滋病的基因编辑婴儿在中国诞生,这事引起大家激烈的讨论,后台很多人问我对这件事是什么看法,我不是生物医学领域内的科学家&#xf…

攻防世界web刷题

web新手区 view_sourcerobotsbackupcookiedisabled_buttonweak authsimple_phpget_postxff_refererwebshellcommand_execution view_source 打开源代码发现答案就在这里 robots 查看robots.txt文件 发现flag文件并打开 backup 网站存在备份文件,常见的备份文件…

程序员与你共观世界杯:Javascript 简易绘制世界杯旗帜(含足球元素)

引言:2022年是世界杯赛事年,世界杯是一项非常受全世界欢迎的大赛事,一到世界杯赛事期间,各大平台热搜就一直是世界杯相关的话题,在这期间,即使你不了解足球,也能耳濡目染,因为身边到…

初学RenderMonkey做一面旗帜飘动的效果

这几天在捣鼓一个游戏 骑马与砍杀 不知道有没有人玩过。官方出了个shader包,可以自定义shader,于是就开始学起来了,学了一点,简单的实现了一直想弄的动态世界。这期间一直在用RenderMonkey开发(貌似停止更新了,会不会有…

攻防世界ctf题目easyupload做题笔记。

刚刷完upload-labs靶场,做做ctf题目,发现自己掌握的知识并不牢固。做了半天没有解出来,最后还是看别人的题解做出来的。写下做题过程,也就是wp吧。为了方便以后复习巩固。 本题的主要考点为利用fastcgi的.user.ini特性进行任意命…

我的世界java太卡了怎么办_我的世界服务器太卡怎么办 MC服务器优化攻略

我的世界很多玩家都有自己的服务器,但是很多玩家并不知道怎么优化和维护服务器,从而导致服务器很卡,今天小编为大家带来的是我的世界服务器优化攻略,还不知道怎么优化服务器的小伙伴不要错过哦。 系统的选择 (网页后台可以跳过本段)关于系统的选择,Linux类系统(Centos、Re…

我的世界1.14刷雪机java版_我的世界全自动刷雪机图文攻略 手把手教你刷雪机怎么做...

:原标题: 我的世界刷雪机怎么做?我的世界全自动刷雪机做法是什么?想必对于各位初入我的世界的小伙伴来说有些困难,接下来我们一起来看看我的世界全自动刷雪机做法吧。 【需要的材料提前准备】 橡木楼梯、南瓜、雪块、橙色羊毛、红石中继器、…

我的世界显示java过老_你在《我的世界》中做过哪些蠢事?玩家:误把“java”看成了jave...

本期内容 玩到现在,我们在Minecraft中获得了很多的乐趣,并将其作为一种信仰来对待,只要有人对这款游戏做了人神共愤的事,便会群起而攻之。不过在一开始的探索过程中,我们或多或少做过一些“蠢事”,其中有些…

我的世界java版本试玩_我的世界Minecraft Java版17w49a发布

我的世界Minecraft Java版17w49a发。每周快照是Minecraft的测试机制,主要用于下一个正式版的特性预览。然而,每周快照主要用于新特性展示,通常存在大量漏洞。因此对于普通玩家建议仅做测试尝鲜用。使用测试版打开存档前请务必备份。适用于正式…

我的世界java刷雪机_我的世界全自动刷雪机图文攻略

我的世界刷雪机怎么做?我的世界全自动刷雪机做法是什么?想必对于各位初入我的世界的小伙伴来说有些困难,接下来我们一起来看看我的世界全自动刷雪机做法吧。 【需要的材料提前准备】 橡木楼梯、南瓜、雪块、橙色羊毛、红石中继器、拉杆、活塞、箱子、橡木木板、漏…

JAVA爬酷狗音乐

先说一下爬取的思路 1,随便打开一首能波的歌播放,找到它的播放地址: https://wwwapi.kugou.com/yy/index.php?rplay/getdata&hash42447823290E80FD5318E8A195A169DD&album_id28687022 多播放几首发现只要hash和album_id不同就能播放…

python爬虫:爬取酷狗音乐榜单中的音乐信息并存储到MySQL(附源码)

目录 具体思路代码部分获取歌曲名称和歌手获取歌曲播放页的url获取音乐下载地址将获取到的音乐信息添加到MySQL中 完整代码 获取酷狗音乐榜单中的音乐信息,这里我以“网络红歌榜”为例 获取榜单中的 “音乐名称”,“歌手”,“音乐下载地址”&…

KeePass CVE-2023-32784:进程内存转储检测

KeePass CVE-2023-32784:进程内存转储检测 KeePass 是一种流行的开源密码管理器,可以在 Windows、Mac 或 Linux 上运行。该漏洞允许从正在运行的进程的内存中以明文形式提取主密钥。主密钥将允许攻击者访问所有存储的凭据 强烈建议更新到KeePass 2.54以…

Python爬虫之爬取酷狗音乐歌曲

Python爬虫之爬取酷狗音乐歌曲 1.安装第三方库 在Python的语言库中, 分为Python标准库和Python的第三方库. Python标准库是在你安装Python的时候已经包含在了安装目录下, 而Python第三方库需要使用Python的包管理pip来安装. 在本次代码中, 我们需要用到request库. requests翻…

(统计学习方法|李航)第四章 朴素贝叶斯算法——贝叶斯估计

贝叶斯估计方法: 计算男女时只有两个值,所以K2 贝叶斯估计就是拉普拉斯平滑 估计方法:为什么叫做贝叶斯估计呢? 例题: 重新回顾以下朴素贝叶斯: 对他求导,求出最大值 得到了色i他的估计值&…

数据归一化:优化数据处理的必备技巧

文章目录 🍀引言🍀数据归一化的概念🍀数据归一化的应用🍀数据归一化的注意事项与实践建议🍀代码演示🍀在sklearn中使用归一化🍀结语 🍀引言 在当今数据驱动的时代,数据的…

制造业为什么要建设数字化供应链

数字化让越来越多的人走向了线上的世界,让那些拥有线上产品或提供线上服务的企业提供了更多流量。 但与此同时,传统制造业遭受了沉重的打击,考虑到防疫要求,很多工厂长期处于人手不足的状态,生产制造效率大幅降低&…