距离上一篇总结已经过去了两个月,简单来复盘下这两个月的事情吧。

技术和分享

截止这篇文章发出,今年我已经公开分享了 9 篇技术相关的内容,也在不同的领域挖了一些新的坑,等待慢慢连载补全。其中提及最多的几个关键词是:Nginx、NJS、CI、Docker、GitLab、Drone。

这些关键词分别代表着我目前在做和计划做的部分事情,那么就稍微展开其中花费精力比较多的事情来聊聊吧。

Nginx & NJS:2021 年北京智源大会的高性能方案

相比较往年使用 Node / Java / PHP 这些经典方案来提供服务,今年在一些简单的通用场景上,计划将服务提供能力下沉到服务“最前端” 的 Nginx 上,用时髦的话来讲:“NJS Serverless 在边缘计算场景中的实践”。

相同资源的情况下,可以提供更高的性能,带来更好的用户体验,依靠更低的代码量、更健壮的代码基来进一步减少开发心智负担和维护成本。类似聚合接口、基础鉴权验证、生成简单的媒体文件这类需求,完全不需要再起一套带有框架的重型武器,一个 Nginx 标准镜像,带着一百行以内的 NJS 脚本就能高效的解决问题。

并且因为服务本身无状态、低状态的特性,非常容易水平扩展,提供可观的可预期的线性增长的性能。

CI、Docker、GitLab、Drone:可用于多个外包团队的通用开发环境

在两届智源大会背后这篇文章中,我提到过我们的团队和许多非互联网公司一样,依赖外部外包协助产出、进行人力补充,在去年的项目中,前前后后大概有至少五十余外包同学参与过各种项目的开发。

外包生产对于企业组织架构的精简有好处,但是对于产品开发来说利弊一半一半,短期能够明显的降本提效、能够用人海战术来解决一些初级问题,但是长期来看,软件的交付质量、代码的可维护性以及产品最终体验上都会存在一定的问题。

使用外包进行项目开发对于雇主团队的产品文档能力、项目管理能力有了很高的要求,除此之外对于项目代码 Review 、交付验收也增加了非常多的工作量。尤其是外包团队还可能会出现因为不可控因素过程中换人、并行开发多个公司项目时间争抢、存在兼职人员只有在下班才能投入开发和进行项目沟通的情况。

在以往的项目中,我们会更多的照顾开发者的习惯,开发过程集中在开发者本地机器,同时开放测试环境机器权限给项目工程师,在交付前先在测试环境机器进行部署,部署验收基本功能没有问题之后,再进行进一步的外部仓库代码合并,在最后集成验收的时候,再进行容器封装、多机部署,集成测试。这样做保障了我们最终产品质量下限,保护了内部线上数据安全、也尽可能少的对外暴露代码,但是也造成了一个很常见的风险:延期

而导致延期的主要原因是:在开发阶段的代码,和验收时要求的规范不一致;在验收的阶段的代码,存在和开发最后提交代码不一致和暴露额外设计问题的可能性。外部人员不熟悉也不清楚雇主的要求,代码规范繁杂和过多,等同于没有规范;将外部仓库合并至内部仓库,代码由子集变成全集(内部也存在需求迭代)、代码运行环境发生变化,导致运行结果存在一些差异;集群模式下应用出现一些经典的流程控制、资源争抢问题。

对于后端接口我们可以进行测试覆盖来验证项目的正确性,但是对于前端项目,尤其是频繁变更的前端项目,如果不采取录制,而是采取编写测试用例的方式,对于交付时间和用工成本都会有一些额外的投入、能否持续落地也是一件有挑战的事情。

这类问题最烦人的不是出现问题,而是出现问题太晚了,接近项目开发末期,可能外包人力都接近释放的时间点。如果我们将验收这个阶段提前,或者说和 CI/CD 一样的理念一样,融入到整个开发阶段中呢?

如果能够让开发产物和最终上线产物除了填充数据外保持完全一致,让开发过程使用的持续构建和线上最终构建保持完全一致,让开发过程直接能够使用线上最终的域名环境和鉴权认证过程,不再去刻意区分不同。那么交付时间和质量就能够变得的相对可控。

基于此,我在将开发团队在云服务器环境和本地使用的一些云原生的工具、持续集成的功能下沉到本地,让每个参与开发的人都能够有一套分布式的离线环境来根据规则进行符合要求,和目标环境差异几乎无差异的开发,让开发过程中的产物更加贴合最终的交付产物。

阅读数据

前面提到了已经分享的内容,和进行中的计划和事情,接下来记录下副产品,阅读数据。

2021年3月初,知乎阅读量

相比较上次年末统计,知乎阅读数据增加了 14 万。

2021年3月初,网站访问数据

清洗网站数据进行统计看到今年目前已有4万独立IP进行了访问,不过不同的是今年的海外访客多了起来,或许是因为我在 GitHub 上挖的几个新“坑”吧。这里面有一些还算比较“硬核”的东西,如果后续有时间,我会整理成完整的文章。

下面分享一个有趣的数据。

来自谷歌和百度的统计的数据

我的读者多数是互联网从业者,其中使用 Ad Guard、AdBlock、uBlock Origin的用户应该不在少数,因为无论百度还是谷歌的数据中,访客人数和阅读数量都对不太上,甚至在区域数据上都会有一些差异。

2021年3月初,谷歌统计数据

2021年3月初,百度统计数据

2021年3月初,谷歌统计区域数据

2021年3月初,百度统计区域数据

团队建设

《2020岁末总结》中,关于工作、团队相关的观点目前看来依旧保持有效,故不做赘述,聊一些其他的。

提到团队建设,绕不开的话题是“人数”和“产出”,这里相对更本质的关注点是“有效人效”。之所以在人效前添加有效作为修饰,是因为我们可能会产出很多看似很多、还不错的结果,但是对于大方向、战略来说帮助不大。此外更大的规模的团队,意味着更大的责任。不论是从团队对组织上看、还是从团队管理者对团队成员上来看都是,故招聘需要慎之又慎。

如果团队当前出现了一些问题,尤其是那些看起来能靠加人来解决问题。相比较盲目的靠添加人力这种笨办法来掩盖和解决一些简单的短期的问题,不如梳理出当前团队的主要任务和值得长期投入精力去攻克的事情。“选择并保持合适的团队规模又有何不妥。”

此外,团队成员之间的信任、工作中的协作、方法论、基础效率提升反而应该更值得关注的事情,因为对于这些方面的投资不需要你打鸡血 allin 、下很大的赌注,只需要在日常过程中慢慢浸润即可持续“获取收益”。

生活相关

在这两个月里,我学会了开车,已经能够载着自己上下班了,甚至能够和妹纸一起带着猫咪们出门远行,这件事最大的好处就是我们不必再担心带毛孩子体检遇到不想拉我们的司机。等到驾驶经验再熟练一些后,或许我会考虑住远一些,让居住条件上一个台阶。

看表情我的驾驶技术很大提升空间

学车过程中有一个比较有意思的事情,在写代码的时候,我最初接受的思想之一是“防御性编程”,而汽车教练教我的方式则是“防御性驾驶”,奇妙的巧合。

在过年期间,我们和同公寓楼一个陌生的年轻程序员同学,在公寓门口遇到了一头从楼上窗户摔下来的小猫,大家七手八脚的把小猫带到了附近的宠物医院。

偶遇受伤的小猫

虽然小猫内伤很重,但是经过医生的努力,当天住院时已经安静了许多。几天后,经过手术,小猫目前已经成功出院,并由原主人带回家照料。这个事情之后,我们对出门关好窗户的认识更深刻了,你永远不知道小猫对窗外的世界有多好奇。一时的疏忽,带来的可能是一辈子的遗憾。

一番检查后住院的小猫

节后第一个现象级产品 ClubHouse 火爆了朋友圈,在朋友的帮助下,我比较早的体验到了这个软件,看着不少人沉迷于此的时候,恍惚之间感觉到了严重的“知识拣房”,或者说“信息茧房”更为贴切。

使用 Hugo 生成的阅读清单页面

为了减少这类情况的发生、多一些有长期价值的沉淀,我和几十位群友开始了读书打卡挑战,目前已经运行一个月,为了有仪式感,我还用 Hugo 生成了一个简单的“已阅书籍”页面:https://soulteary.com/reading-list/

其他

我在考虑添加一种技术分享的方式,在日常使用部分内容开放的 Wiki 进行分享,当分享内容积累到足够质量后,形成一篇有趣有料的技术文章。为此,我提交了一个新的网站备案申请,以及购置了一台年付的主机。

先写到这里吧。

–EOF