Article
29608 discoveries · Hand-picked discoveries from the open web, newest first.
-
程序员阅读清单:我喜欢的 100 篇技术文章(41-50)
清单 41. 《抽象泄露法则》 42. 《如何设计一个好的 API 及其重要性》 43. 《我构建软件的原则+实践“让无效状态不可表示”》 44. 《不,不是编译器的问题,从来都不是》 45. 《关于在除夕前一天换了一个洗衣机的故事》 46.《你的函数是什么颜色?》 47. 《健康的文档》 48. 《如何像人类一样做代码评审》 49. 《关于 Python 3.13 你需要了解的一切 - JIT 和 GIL》 50. 《入行 14 年,我还是觉得编程很难》 结语 程序员们也许是互联网上最爱分享的群体之一,他们不仅喜欢开源自己写的软件,也爱通过写文章来分享知识。从业以来,我阅读过大量技术文章,其中不乏一些佳作。这些佳作中,有些凭借深刻的技术洞见令我深受启发,也有些以庖丁解牛般的精湛手法解释一项技术,让我读后大呼过瘾。 作为“爱分享”的程序员中的一份子,我想当一次推荐人,将读过的好文章分享给大家。我给这个系列起名为 《程序员阅读清单:我喜欢的 100 篇技术文章》 。 受限于本人的专业与兴趣所在,清单中的文章对以下几个领域有所偏重: 程序员通识、软件工程、后端开发、技术写作、Python 语言、Go 语言 。 下面是阅读清单的第三部分,包含第 41 到 50 篇文章。 系列索引: 第一部分(1-20): 链接 第二部分(21-40): 链接 第三部分(41-50): 链接 清单 41.
Python 工匠 · ZH
-
我看见的软件设计:胖瘦客户端
kubectl apply 的故事 客户端侧 apply 客户端侧 apply 的局限性 服务端侧 apply 小结 软件设计建议 1. 善用服务端功能零成本复用、变更实时触达的特点 2. 别让服务端因客户端的定制需求过载 烤肉店故事:如何调味? 识别服务端复杂度的过载风险 3. 客户端的计算力是独特的优质资源 烤肉店故事:谁来烤肉? 善用客户端的独特资源 “自助烤肉”的弊端 结语 文末彩蛋 设计软件是一个不断产生疑问、解决疑问的过程。设计者们面对一个需求,会产生许许多多的疑问,在这些疑问中,有一个看似幼稚,却直击灵魂的小问题: “业务逻辑(复杂度)放在哪?” 项目每引入一个新功能,所增加的总复杂度几乎是确定的,但如何把这些复杂度分配到各模块中,其中的方式方法却变化无穷。 比如,一个采用“客户端/服务端”架构的软件,在增加某项业务功能时,工程师们可能会发现:它既可以(主要)放在服务端实现,也可以放在客户端实现。不同决策直接影响后续的分工模式、开发效率以及功能扩展性等方方面面。 此类场景中,一种常见的设计策略是 “瘦客户端,胖服务端” ,“胖/瘦”指的并非身材,而是组件所承担的职责多寡。采用“瘦客户端”设计,代表主要的业务逻辑均由服务端承担,客户端尽量简单。 让我们通过 kubectl apply 命令的故事,看看如何把“瘦客户端”理念应用在现实世界的软件中。 kubectl app
Python 工匠 · ZH
-
Python 的 OrderedDict 为什么有序?
一个双向链表和另一个字典 小结 有趣的细节 1. 对 weakref 的使用 2. 传入 object() 作为默认值 现在是 2025 年,网上已很少见到 Python 字典有序性的相关讨论。自从 Python 在 2018 年发布 3.7 版本,将“字典保持成员的插入序”写进语言规范后,人们已渐渐习惯有序的字典。那曾经调皮、无序的字典,早已像 2.7 版本一样成为过去,只在某些老登们忆苦思甜时被提起。 而在那个字典无法保持顺序的年代,如果我们要用到有序的字典,我们用什么?答案是: collections.OrderedDict 。 但是,随着内置字典已经有序, OrderedDict 似乎也渐渐变得不再必要。不过,截止到目前(3.14 版本)为止,它仍然存在于标准库模块 collections 中。这主要是出于以下几个原因: 保持向前兼容,已依赖其的旧代码可以保持不变; 行为不同: OrderedDict 在判断相等性时会将键顺序纳入考量,内置字典不会; 更多特性: OrderedDict 拥有 move_to_end 等方法。 >>> d OrderedDict([('a', 1), ('b', 2), ('c', 3)]) >>> d.move_to_end('a') >>> d OrderedDict([('b', 2), ('c', 3), ('a', 1)]) # 1
Python 工匠 · ZH
-
AI 编程是一种“框架”
框架的问题 1. 抽象泄露 2. 丧失控制权 认知成本:DRF 的启示 也许,该把 AI 编程当成一种库 使用 AI 类编程工具越多,我便越来越强烈地感觉到:AI 编程是一种“框架(Framework)”。 框架是每位程序员的老朋友,它通常针对特定领域所设计,能极大提升编码效率。以 REST API 服务为例,一些成熟的框架(比如 Django REST Framework )能做到仅需定义 数据模型和视图类 ,便生成一套功能完备的 CRUD API 服务。 AI 编程工具和传统框架一样,都是一种“杠杆”,它们允许人们用少量输入撬动庞大的功能。二者区别仅在于输入类型不同,框架需要代码(或配置),而 AI 仅需一句简单的自然语言提示词—— “写一个书店网站” 。 框架的问题 作为一种新型框架,“AI 编程”所带来的便利性,足以把人类从前发明过的任何一种框架按在地上摩擦,但是,框架天生所具备的问题并未消失。 1. 抽象泄露 所有框架都有一个共性,它们提供了极高级的抽象,以降低实现特定功能所需的工作量。比如,Django 的 ORM 提供了“数据模型”这层抽象,免去了手写 SQL 语言、设计数据校验等繁重工作。 但不幸的是, 抽象都会泄露 。 一名 Django 初学者编写的网站上线后,客户投诉爆表,因为列表页加载极为缓慢。此时,打开数据库监控面板,他会发现这个看似简单的页面,每访问一次
Python 工匠 · ZH
-
一份关于 AI 编程的简明行为指南
对所有人 谨记 Agent 不对代码担责 多“协作”,少“委派” 拆分你的 PR 善用 Plan 模式,多做前置探索 采纳稳定的库,优于 AI 从零实现 创建 PR 前使用 AI Review 让改动可验证,并总是验证 其他 对初级工程师 质量胜过效率 尝试手动修复 Bug 自己先动脑,在 AI 给出的方案之外寻求 其他 结语 AI 编程发展迅猛,Claude Code、Codex 等 AI Agent 已成为许多软件工程师工作时必不可少的得力助手。然而,对于如何在项目中更好地实践 AI 编程,目前仍然是一副“八仙过海,各显神通”的模样。 假如同一个团队里的工程师,在如何使用 AI 工具的“大问题”上没有达成共识,就会出现协作上的摩擦,对项目产生不良影响。 因此,本文尝试面向软件工程师群体,对 AI 编程的 推荐行为实践 做一些总结,弱化具体的工具和技巧( 比如 Spec 驱动还是不 Spec 驱动? ),着眼于更通用的方面( 比如初级工程师该 完全委派 AI Agent 修 bug 吗? )。 内容分为“对所有人”和“对初级工程师”两部分,其中“对初级工程师”部分,针对这类人群身处的特殊阶段,提供了一些量身定制的建议。 说明: 本文部分内容由 jianan、 wklken 参与共创;本文观点基于笔者所身处的工作环境总结而来,不一定完全适用于其他项目,酌情采纳; 对所有人 谨记 A
Python 工匠 · ZH
-
开发软件,或建造迷宫
前段时间,我通关了一个三十多年前的老游戏: 《塞尔达传说:织梦岛》 。 《织梦岛》是久负盛名的塞尔达传说系列的第四部作品,发售于 1993 年,平台为 Game Boy——任天堂在 1989 年推出的风靡全世界的游戏掌机。 用今天的眼光看,《织梦岛》的游戏画面简陋得吓人。举个例子,游戏的分辨率极低,仅为 160×144,换算下来像素面积不到 iPhone 17 屏幕的 1%。不过,技术过时并未过多损害游戏的可玩性。这部诞生于上世纪的作品,用极具想象力的道具和迷宫,打造出了一个引人入胜的小岛,玩起来依然妙趣横生。 正因如此,在发售后的第 26 年,《织梦岛》在任天堂最新的游戏主机 Switch 上迎来了一次重制。 为了迎合现代玩家,新版《织梦岛》完全重做了游戏画面,不再是 2D “大果粒”,而是全高清的卡通风 3D 建模。游戏操作也得到现代化升级,道具切换变得更为便捷。最重要的一点,在于新版几乎 1:1 复刻了原版的大地图和迷宫,也就是说, 在游戏性方面(迷宫、道具及探索),重制版几乎原汁原味继承了几十年前的配方。 你肯定想问:对于这样一部已三十岁高龄的换皮老游戏,玩家会买单吗?答案是肯定的。Switch 上的《织梦岛》一经推出,销量超过六百万份,直接跻身“塞尔达传说”史上销量最高的作品之一。 我相信,作为史上最成功的电子游戏之一,《织梦岛》一定可以给游戏从业者许多启发。但就像你所知
Python 工匠 · ZH
-
设计流动摩擦:AI 原生团队的核心能力
过去几年,我们讨论 AI 对软件研发的影响,最常使用的仍是个人生产力:一个功能要多久,一名开发者能同时推进多少任务,Coding Agent 能生成多少代码。AI 确实显著降低了执行成本,过去数天才能形成的初步实现,现在几个小时后就可能进入 Pull Request。
全栈应用开发:精益实践 · ZH
-
从 AGENTS.md 开始:构建 Agent 友好项目的五个步骤
最近我重新整理 [Better Harness](https://github.com/QoderAI/better-harness) 的 `references`
全栈应用开发:精益实践 · ZH
-
Agent 插件如何走向工程化:Better Harness 的五个实践
把一项能力写进 `SKILL.md`,再封装成 Agent 插件,并不难。真正困难的是,当它被不同用户、不同项目和不同 Agent
全栈应用开发:精益实践 · ZH
-
Harness Inspector:让 Agent 交付过程可观察、可检查、可追溯
最近,我们一直在尝试优化 Better Harness 的 **SKILL 自动沉淀**能力:从 Agent 的真实会话中识别重复出现的工作路径,再判断其中哪些经验值得进一步沉淀成可复用的 SKILL。真正做起来以后,我们发现这件事远比“把一段 Session 分析一遍”复杂得多。
全栈应用开发:精益实践 · ZH
-
从可编程到表现力:构建更好的 Agent 运行时重塑用户体验
最近,我重新看了 remio 在 PPT DSL 上的尝试,也注意到 OpenAI 的 **Artifact Tool**(产物工具)正逐渐演进成一套完整的专业文档运行时。
全栈应用开发:精益实践 · ZH
-
面向人机交互设计 Harness:构建以产物为中心的 Agent Loop
最近,我一直在 Better Harness 里思考编码智能体的工作闭环:用户究竟想完成什么,智能体读取了哪些上下文、执行了哪些操作,
全栈应用开发:精益实践 · ZH
-
从生成动画到可编程产物:在 Harness 中构建 Lottie 创作运行时
最近,我把 Lottie 插件的第一个版本 [0.1.0](https://qoder.com/marketplace/plugin?id=92998645-4b3b-472b-a4a7-a3f6bc133bff)
全栈应用开发:精益实践 · ZH
-
开坑!从 AI Coding 到 AI4S:新开源项目 Pero 的一次探索
PS:最近从 Qoder 离职了。原本还想继续折腾 AI Coding 和 Coding Agent 相关的开源项目,但考虑到过去的工作经历,
全栈应用开发:精益实践 · ZH
-
中美 AI 竞争的差距到底有多大?
上周五因为有 AI 新品发布的原因,我写了一篇中美 AI 竞争格局的短文,分别发 … Continue reading →
MacTalk-池建强的随想录 · ZH
-
墨问 Web 社区版本上线,本月 墨问 cli 之后的第二个发布
现在墨问有小程序版本,墨问命令行版本,还有了 Web 社区版。 https:// … Continue reading →
MacTalk-池建强的随想录 · ZH
-
想 Vibe 就别错过这个巨大的流动知识库
周末的时候我主要看书写东西,拍照徒步,周末最好给自己一种跳出圈外的机会,多思考, … Continue reading →
MacTalk-池建强的随想录 · ZH
-
CatReader 上线:重启 RSS 阅读
自从 AI 的 Vibe Coding 能力突飞猛进之后,我自己也没闲着,做了好 … Continue reading →
MacTalk-池建强的随想录 · ZH
-
谁说 ChatGPT 和 Codex 合体了?
AI 媒体现在也太能扯了,前两天看到有若干家媒体公众号说 ChatGPT 和 C … Continue reading →
MacTalk-池建强的随想录 · ZH
-
两小时用智谱 glm 5.2 实现了 CatReader 的移动微信版
昨天上午写了一篇阅读方式的改变就去出去玩了,打了一小时羽毛球,出去吃东西徒步还赶 … Continue reading →
MacTalk-池建强的随想录 · ZH
-
墨问发布第一款 Mac App:CatBar,极简 Mac 菜单栏图标管理工具
这半年来一直基于 Vibe Coding 做点产品,除了墨问本身的功能,已经发布 … Continue reading →
MacTalk-池建强的随想录 · ZH
-
微说 | 阿里确认通义千问集成至苹果智能系统
阿里巴巴发言人证实通义千问将集成至苹果智能功能中,适用于iOS、iPadOS、macOS、visionOS设备。此前网信中国公布,苹果技术开发(上海)有限公司的“Apple智能”大模型已备案,合作方包...
蚊子前端博客 · ZH