本周进度平缓。首先我发现自己还是一个喜欢夜间工作的人。也只有夜间工作才能更好的达成心流。其次,本周的也相对轻松很多,更多的是在做决定和学一些模型比较简单的知识。
业务代码 vs 基础代码
上周提到写业务代码和基础代码的差别。这周进一步思考:
- 业务代码的复杂度更多在于抽象层级和项目的广度,在于如何去抽象一个事物的逻辑、采用合适的设计模式和架构。在持续维护一个项目的过程中,我们还要做好各种自动化集成,并且持续保证代码质量。
- 基础代码其实也涉及到这样一个完整的过程。但是由于基础代码的特性,这里的抽象层级会更加贴近机器的语义。并发、内存缓存管理和数据结构会对抽象产生相当大的影响。很多领域 specific 的模型在这里也会极大的影响系统的呈现。基础代码的细微改动可能造成相当大的影响,在我接触到的大型项目中,在可持续集成的时候会对测试有相当大的要求、在面向生产环境发布的时候也会变得极其复杂。
软件的工程质量深究起来有非常多可以提的东西,若要提升,完整的经历一遍必不可少。当然,真实世界的实践是很复杂的,在从 0 到 1 和从 1 到 100 的过程中会侧重于很多不同的问题。
C++ 和 Rust
作为一个从 Rust 反过来学习现代 C++ 的人,我觉得很多地方都有一种“先入为主”的快感,尤其是在内存管理这一块。但是现代 C++ 的设计其实很大程度上是 zero-cost abstraction 的思想和 OO 的碰撞,再加上历史包袱,所以有各种 implicit / explicit 的奇怪规则去阻止你理解一个特性
怎样去写好一个 C++ 代码,我觉得是有迹可循的。
把时间当作朋友
这周看了我总觉得一个人呆久了,有时候很容易 lost track of your surroundings。自己预想的生活和现实产生了越来越大的 gap,预期管理的测不准区间越来越大。在那个无论做什么都是成长的时期,生活总是有一个又一个的盼头等着我。但是那个奢侈的高涨期已然过去,我最后还是落入一个越来越糟糕的年代,很难提醒自己时间的意义是什么。
我觉得长期换 base 工作给我的启示有点像是这样的:生活的本质是带着镣铐跳舞,一边接受毒打一遍享受生活,一边一头扎进这个世界最冰冷的一面。Breaking change 可以来,但是世界与人达成平衡的一个要义,就是变化应该是自然的。我们紧随着世界的时间线跑动,然后又熄灭。
我突然又怀念起那种反骨的“数码朋克”的人。他们的内核总是很强大,能把一切东西解构成那么吓人的东西然后赋予意义,然后一整个拼起来,生活的一切枯燥的玩意儿在他们的眼里立即有模有样。这么看来这些人天生是有点做网红的潜质的。