Jan 10 2025
几个月前读完了《软件设计的哲学》这本书,在结合自己多年的工作体会,对于代码的可读性,可维护性有了系统性的体会,然后基于我记录的读书笔记然后经过AI的润色,形成了这篇笔记。希望对你也有所帮助。
读完《软件设计的哲学》,感觉像经历了一次代码的“深度体检”。这本书没有讲解具体的编码技巧,而是从更高的维度帮助我们重新审视代码复杂性的问题,并提出了许多实用的建议。今天,我想结合自己的理解,分享这本书带来的启发。
什么是代码的复杂性?
简单来说,复杂性就是那些让系统难以理解和修改的因素。它不仅仅指代码的行数或逻辑深度,还包括:
- 难以理解:即便是自己写的代码,过一段时间可能也看不懂,更别提其他人。
- 修改成本高:一个小改动需要改动多个地方,甚至引发新的问题。
- 模糊的改动范围:不知道该修改哪些模块才能实现目标,或者不确定修改后是否会引发其他问题。
- 难以修复的错误:修复一个 bug 可能需要大量时间,还可能引入新的问题。
Jan 8 2025
职业生涯中接手过很多项目了,各种项目都接触过,一个对新人友好的项目一般具备如下特征:
- 完备的安装/功能文档
- 完备的技术方案,架构设计文档
- 合理的分层,清晰的代码目录结构
- 可读,可维护性高的代码
但是往往我们会忽略一个一个简单的指引性的文档:Quick Start,这个文档不需要很详细,只需要说明,如何快速上手的过程,具体的步骤链接到对应的文档即可。一般我们会在Quick Start上写明:
- 最简安装的步骤
- 主流程功能的使用
- 开发环境的搭建
- 开发注意事项
- 包含组件的架构图
- 包含代码的分层目录说明
这个文档需要由项目的负责人编写,在后续由项目的新人实践的过程中逐步完善。
当然这都是比较理想的情况,实际情况中,我们可能遇到的项目可能根本就没有文档,然后只有一个代码仓库的情况,那怎么才能快速上手呢?其实还是按照Quick Start的思路,只不过需要自己来摸索来了。
Dec 31 2024
今天是2024年的最后一天,我有这一下午的空闲时间,所以就让我来絮絮叨叨的写写我这神奇的2024年吧。
我是龙年出生的,所以2024年是我的本命年,年初的时候,老婆还有姐姐就给我准备了红内裤,红袜子。由于红袜子太过显眼了,所以这一年我的内裤都是红色的,哈哈。本命年,犯太岁,这一年工作上,心态上,都有一些变化,就让我在本命年的最后一天瞎写写吧。
我自己
我是80年代末生人,出生在一个小镇,是标准的小镇做题家。从高中开始基本就不怎么回家了,然后上大学,跑去了云南,双非一本,学的是热能与动力工程。我的同学大都找到了水电厂,火电厂的工作。工作好的去了三峡,一般就去了云南一些比较偏僻的电厂。而我呢毕业就失业了,后来找到一个海南的小电厂。工作2年后,我就来到了深圳,在躺了好几个月后,经一个亲戚的介绍到一个华为的软件外包公司学习做软件测试。
Dec 19 2024
前言
https://github.com/zhu327/pingisx
经过一个多月的开发,终于完成了使用Rust实现一个API网关的目标,通过这个项目,我基本上把Pingora的核心功能都摸透了,然后也再次加深了对APISIX的理解。总的来说PingSIX基于Pingora实现了APISIX的核心功能,是APISIX功能的一个子集。
开发这个项目本身也是为了学习Rust的使用,在开发的过程中确实也遇到了很多的问题,在ChatGPT的帮助下,这些问题得到了解决,也让我对Rust有了更深刻的理解。下面我通过4个方面来总结一下在这个项目中我的收获。
Nov 15 2024
前言
在学习Rust的过程中,我主要进行了一些小工具的练习,对Rust的内存安全性和性能优势有了初步的体会,但始终没有实现过一个完整的大型项目。最近随着Rust在高性能计算领域的应用不断拓展,尤其是Pingora等项目的发布,让我看到了Rust在网络通信领域中的潜力,也激发了我用Rust来实现一个API网关的兴趣。
在加入腾讯之前,我曾使用OpenResty和Kong进行API网关的开发工作,后来在腾讯进一步深入参与了APISix的云原生网关项目,逐步积累了关于API网关设计、实现以及性能调优方面的经验。API网关是一个兼具架构复杂度与性能要求的系统,涉及请求路由、流量控制、身份验证等多个关键模块,恰好可以充分发挥Rust的优势。因此,我决定以Rust为基础开发一个API网关,这不仅是为了提升自己的Rust技术,更希望通过此项目进一步巩固和提升在API网关方面的知识。
在具体实现中,我计划基于Pingora的设计思路,打造一个APISix网关的子集功能。我已在GitHub上发布了该项目的初始版本 https://github.com/zhu327/pingsix,目前实现了基础的standalone模式,包括基本的路由与反向代理功能。接下来,我将扩展插件定义,逐步实现一些典型的功能插件,最终目标是支持基于etcd的动态配置加载,以便适应多场景的API网关需求。