行为驱动开发(BDD) |
2024-12-24 |
今天才知道除了测试驱动开发(TDD)外,还有一个行为驱动开发(BDD),主要用于测试软件的预期行为。
在TDD中,单元测试主要测试具体的代码实现,更注重底层的测试,而BDD则从业务行为上进行测试,更注重高层次的行为测试。
目前最流行的BDD框架应该 Cucumber, 它的作者也参与了Ruby著名的测试框架RSpec的开发,
所以Ruby可以说是Cucumber的发源地,我最近在写Ruby的测试用例时,发现其自由度非常高,而且很符合思考逻辑。
Cucumber目前也支持几乎所有的主流编程语言,其语法具有很强的可读性,很贴近业务需求
特殊的 Git hash |
2024-12-23 |
今天AI写了一段神奇的代码:
parent = commit.parents[0] if commit.parents else self.repo.tree("4b825dc642cb6eb9a060e54bf8d69288fbee4904")
功能是获取某个git提交的上一个提交,如果没有则返回4b825dc642cb6eb9a060e54bf8d69288fbee4904
提交。
刚开始看到硬编码的hash以为又是ai乱写的,所以询问了下ai,才得知:
-
4b825dc642cb6eb9a060e54bf8d69288fbee4904
是一个特殊的 Git hash,代表一个空树(empty tree) - 这个 hash 是固定的,在所有 Git 仓库中都是一样的
- 当我们需要比较第一个 commit 的变更时,就需要和这个空树比较,因为第一个 commit 之前没有任何内容
我在本地的多个git repo中测试了,还真是一个有效的hash,均返回空,神奇
多做,少做 |
2024-12-19 |
多做自己认为对的事情,少做别人认为对的事情。
多做自己想做的事情,少做别人想让你做的事情。
多做会犯错的事情,少做一定不会错的事情。
多做没做过的事情,少做熟悉的事情。
多做能让自己开心的事情,少做能让别人开心的事情
多做奇怪的事情,少做正常的事情
多做不敢做的事情,少做没有压力的事情
如何实现人生中最伟大的复出 |
2024-12-19 |
文章: How To Make The Greatest Comeback Of Your Life
挺浓的一篇鸡汤,但味道还不错:
你一心只想成为医生、律师、艺术家、设计师、工程师或其他任何自我限制的身份,这些身份影响了你的认知和学习。
你没有按照自己的意愿去探索、失败、发现和建设, 没有发展出自由个体的独特特质
问题是,你还在寻找 "唯一真正的道路"。
我来告诉你,根本就没有。
如果有的话,我们早就找到了,每个人都会变得富有、快乐和健康。但现实并非如此。事情永远不会总是幸福的。为什么呢?因为没有悲伤,快乐就没有意义。没有手臂,手就不存在。物理、生物、心理和精神层面都包含这种模式。缺一不可当你去度假时,最终,也许在两三周后,你会觉得度假很平常。你会觉得无聊。这不再是 "度假"了。这是正常的生活。你想回去工作。你想做一些事情,任何事情,只是有点新奇和有趣。你的心灵渴望平衡,但不是普通意义上的平淡而悲惨的生活。你的心灵渴望对比
说了这么多,只想说一件事:因为你害怕犯错,所以你没有达到自己的目标。
错误是大自然的指南针。
如果说没有悲伤就没有快乐,那么没有失败就没有成功。
非常认可!就像软件一样,一个软件只有出现bug才能继续完善,不断成长。
当你意识到自己不想要什么,并朝着另一个方向努力时,你想要的生活就会变得更加清晰
你需要有自己的目标,而你只有对自己的现状感到绝对厌倦,并摒弃你所认为的一切,才能产生这些目标。
AI驱动的Git提交助手: aicmt |
2024-12-18 |
这是我新开发的命令行小工具:aicmt
一个AI驱动的Git提交助手,不仅能自动生成提交信息,还能自动分析代码变更,并根据最佳实践将其拆分为多个结构良好的提交。
功能特点
- 智能变更拆分:不同于传统的提交信息生成器,aicmt能分析您的代码变更,并按照Git最佳实践自动拆分为多个逻辑清晰的提交
- 灵活控制:您可以让AI决定提交数量,也可以自行指定想要的提交数量
- 专注编码:自由地进行所有代码修改,将提交组织工作交给AI处理 – 在编码时无需担心如何完美地进行原子提交
演示:
开发的初衷:每次修改大量代码后,都要花费很多时间去手动筛选并提交不同的commit,比如修复了好几个bug和很多文档更新,往常都是要手动分成2个提交,很麻烦,所以就萌生了使用AI来自动分析变动的代码,然后自动拆分提交
开发过程:总共花了2天左右,使用Replit Agent和Windsurf面向Chat编程的,所有代码都是由claude-3.5-sonnet生成,我只负责审核代码和删除代码。
开发感受:Replit Agent适合0到1的开发,可以非常快的出原型,但不适合后续的修改和返工,代码容易混乱,所以需要搭配Windsurf进行后续的功能修改和完善
如何找到像我这样的工作 |
2024-12-13 |
这是一篇来自“互联网之子”亚伦·斯沃茨(Aaron Swartz)的一篇文章,讲述了他进入互联网世界的历程,以及他的成长秘诀:
- 要有好奇心。广泛阅读。尝试新事物。我认为,人们所说的智慧,很多都可以归结为好奇心。
- 对一切说 "是"。我很难说 "不",甚至到了病态的程度–无论是对项目、面试还是对朋友。因此,我尝试了很多,即使大部分都失败了,我还是做了一些事情。
- 假设别人也不知道自己在做什么。很多人拒绝尝试某件事情,是因为他们觉得自己对这件事了解不够,或者他们认为其他人肯定已经尝试了他们能想到的一切。其实,很少有人真正知道如何把事情做对,更少有人愿意尝试新事物,所以通常情况下,只要你尽全力去做,你就会做得很好。
70% 的问题:人工智能辅助编码的真相 |
2024-12-12 |
文章:The 70% problem: Hard truths about AI-assisted coding
很不错的一篇文章,描述了目前的人工智能辅助编码的现状:
AI可以快速的完成 70% 的编程目标,但最后的 30% 却是一个痛苦的打地鼠游戏过程。
以下是我摘抄的观点,很有参考/思考价值
如果你刚刚开始人工智能辅助开发,我有以下建议:
- 从小事做起
将人工智能用于孤立、明确的任务
审查生成的每一行代码
逐步建立更大的功能- 保持模块化
将所有内容分解成重点突出的小文件
组件之间保持清晰的接口
记录模块边界- 相信自己的经验
利用人工智能加速而非取代您的判断力
生成的代码感觉不对的问题
保持工程标准
目前我的经验是,先写测试,然后再写功能代码,这样可以在审核每行代码之前,快速检查AI生成的代码是否正确,可以节省很多时间。(面向测试/用例编程)
2025 年,最有效率的团队可能是会:
- 为人工智能代理设定明确的界限和准则
- 建立强大的架构模式,让代理可以在其中工作
- 在人类和人工智能能力之间建立有效的反馈回路
- 在利用人工智能自主性的同时保持人工监督
人工智能并没有让我们的软件变得更好,因为软件质量(或许)从来都不是主要受限于编码速度。软件开发的难点–理解需求、设计可维护的系统、处理边缘情况、确保安全和性能–仍然需要人类的判断。
人工智能能让我们更快地进行迭代和实验,通过更快速的探索,有可能找到更好的解决方案。但前提是我们必须保持工程纪律,并将人工智能作为一种工具,而不是良好软件实践的替代品。请记住我们的目标不是更快地编写更多代码。而是要构建更好的软件。
中国完成 塔克拉玛干沙漠 大型绿化带 |
2024-12-10 |
新闻:China Completes Massive Green Belt Around Taklamakan Desert
塔克拉玛干沙漠是中国最大的沙漠,也是世界第二大流动沙漠,中国花费了46年的时间(1978年开始),在沙漠边缘种植各种抗旱树种,将沙漠围起来,防止扩张,非常伟大。
时间网络 |
2024-12-09 |
很有意思的一个网站,任选2个名人,然后显示这2个人跨历史维度的联系。
比如我选择了“李小龙”和“马斯克”
它显示出联系如下:
- 李小龙曾经和美国演员Chuck Norris一起演过电影《猛龙过江》
- 特朗普曾经和Chuck Norris握手过
- 马斯克也认识特朗普
所以理论上,李小龙可以通过Chuck Norris认识马斯克

2025年7周7种语言 |
2024-12-06 |
文章:https://matt.blwt.io/post/7-languages-in-7-weeks-for-2025/
2025年的学习计划可以开始咯,文章介绍了7种值得花一周去学习使用的语言和理由:
Python、TypeScript、Go、Gleam、Zig、Racket 和 Odin