Versun

对待生命,不妨大胆一点,因为我们终将失去它



行为驱动开发(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

文章:How to Get a Job Like Mine

这是一篇来自“互联网之子”亚伦·斯沃茨(Aaron Swartz)的一篇文章,讲述了他进入互联网世界的历程,以及他的成长秘诀:

  1. 要有好奇心。广泛阅读。尝试新事物。我认为,人们所说的智慧,很多都可以归结为好奇心。
  2. 对一切说 "是"。我很难说 "不",甚至到了病态的程度–无论是对项目、面试还是对朋友。因此,我尝试了很多,即使大部分都失败了,我还是做了一些事情。
  3. 假设别人也不知道自己在做什么。很多人拒绝尝试某件事情,是因为他们觉得自己对这件事了解不够,或者他们认为其他人肯定已经尝试了他们能想到的一切。其实,很少有人真正知道如何把事情做对,更少有人愿意尝试新事物,所以通常情况下,只要你尽全力去做,你就会做得很好。

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

网站:https://networkoftime.com/

很有意思的一个网站,任选2个名人,然后显示这2个人跨历史维度的联系。
比如我选择了“李小龙”和“马斯克”
它显示出联系如下:

  • 李小龙曾经和美国演员Chuck Norris一起演过电影《猛龙过江》
  • 特朗普曾经和Chuck Norris握手过
  • 马斯克也认识特朗普

所以理论上,李小龙可以通过Chuck Norris认识马斯克

-f9c26c6b.png 809 Bytes


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