duangsuse::Echo
718 subscribers
4.26K photos
130 videos
583 files
6.48K links
import this:
美而不丑、明而不暗、短而不凡、长而不乱,扁平不宽,读而后码,行之天下,勿托地上天国。
异常勿吞,难过勿过,叹一真理。效率是很重要,盲目最是低效。
简明是可靠的先验,不是可靠的祭品。
知其变,守其恒,为天下式;穷其变,知不穷,得地上势。知变守恒却穷变知新,我认真理,我不认真。

技术相干订阅~
另外有 throws 闲杂频道 @dsuset
转载频道 @dsusep
极小可能会有批评zf的消息 如有不适可退出
suse小站(面向运气编程): https://WOJS.org/#/
Download Telegram
duangsuse::Echo
#design https://functional.computer/blog/programming-peaked 我们用最复杂的Chromium做最简单的事(显示文字、在“单文件”内安全改变量名 ) 我们用最“先进”的流程拖慢一切(PR + CI + k8s + monorepo) 我们用最臃肿的方式打包最轻量的代码(3GB 镜像跑 2MB JS) 我们用最严格的安全扫描放行被误报的危险镜像(关扫描就完事了) —— AI都明白 😓 JS界确实过分重视「应用能力」了,危险等级 10/10 的 React…
#plt #design 什么是语义学? 什么是对设计的审美与直觉?
《软件幻灭》的作者再次告诉了我们,他是个有品味的dev。 品味不一定要像Zen或“圆括号神教”一样重,它是一种像普通话一样的技能。😒

设计一词,是“多模态”的。tonsky 的博文,对比显示出现在许多UI、CLI,尤其是API,丑陋且难以维护!丑到了并不比AI强多少…… 请阅读
https://juejin.cn/post/7243413799347191864 https://www.yinwang.org/posts/semantics 怎么不行啊🤯..
(有些问题还是不能靠yin,因为他在HN精选上也不算特别出众,只是会的领域集合比较搭)

我多次提到HIG,你可能会想:1992年的接口手册现在还适用吗?计算机技术发展至今,原理、设计和惯例都发生了翻天覆地的变化,不是吗?

是也不是。当然,关于如何将图标适配到黑白显示器的建议已经过时了。但其中的原则——只要是好的原则——仍然适用,因为它们是基于人类的工作方式,而不是计算机的工作方式。
——https://tonsky.me/blog/tahoe-icons/

“如果你以狗窝为例,它们很难以百倍的规模扩展,而如你以细胞为基石,它们能扩展几十亿倍而不损失功能效率。——Alan Kay”
设计看似只是美学问题,但事实并非如此。日常用品的设计方式会产生微妙的影响。帕森斯举了一个很好的例子,那就是餐桌的设计:

桌子是长方形的,并不意味着参与其中的人就不能是平等的伙伴,但这种微妙的「隐喻」会降低这种可能性
同样,编程语言可以实现某些功能(let mut, public..),但它的设计方式可能会使人们不太希望使用这些功能。
——https://tomasp.net/blog/2017/design-side-of-pl/, 以及更深入其中的《程序文本中的认知美学》 https://source.enframed.net/programming/ 😃


Smalltalk 是OOP的鼻祖,它的陨落(或者某种意义上被Scratch和Java重启),是因为同ObjectiveC一般奇怪的调用链、同Ada和Pascal一样冗余的end块。
缺乏设计远见会让语言因非智力因素失败,就像Ruby的end,{=>Hash}和三种lambda之于“有点傻”的老前辈Py
——https://www.dujinfang.com/2024/01/14/programming-languages.html#:~:text=(OOPC,面向对象的预编译器)的预编译器
★《Paul Graham:梦寐以求的编程语言》
https://program-think-mirrors.github.io/blog/html/2012/05/weekly-share-5.html#:~:text=不要觉得为用户着想就是让他们使用像英语一样又长又啰唆的语法。这是不正确的做法


😅 在运行时层面上,或许 Nim(~强类型py), Gleam(的BEAM虚拟机) 是美的,比如 Nim 区分了 func/proc/method(纯vs不纯, 调用链 vs 真OOP),比如Erlang不可被“中断”或“ThreadLocal”的Worker线程
😅 Zig 对comptime甚至“新字面量”的探索也是美的 https://matklad.github.io/2025/08/09/zigs-lovely-syntax.html
😅 Nix 对“可重放性”的执念解决了许多非纯粹编程带来的工程问题-这也是纯函数式,但审美更加高级 https://fzakaria.com#:~:text=July%2005,%202024
😅 tree-sitter和kaitai 或许是对文本与字节ABIs最优雅的 https://t.me/dsuse/21665 。优雅源于全面、对仗、内外一致性这些难以量化的标准,就像guard模式匹配和ES6的{}解构与传参
#
https://juejin.cn/post/7243413799347191864 指称语义(比如,你想不想像Go的DuckTyping和 Rust trait 一样认为满足接口=满足类型,还是一定要新加 class{}?)
^ 我觉得末尾的头两个是倒错。Lisp不应该配合过程式,定义式也不该配合“纯”代数,状态转移和断言不应干扰语意表达。
https://vonfry.name/posts/2020-10-15-thinking-of-pl-syntax/
yinwang.org/posts/design


#ai锐评 “即视感”的缺失:Smalltalk 像自然语言的代价
我来说: 把两手握成一个拳头,是耦合;两手松成X形,是组合;再松成A形,是正交

希望这些非常务实的差异 能帮你找到设计的本源。😝
我会在针对《黑客与作家》作者的Arc与其 (killer-app HackerNews) 的分析中继续学习,为何「代码如诗」
一条线回到今年二月份的分享:
Windows 10大小是4GB,是Windows 95的133倍大。但是Windows 10比Windows 95高级133倍吗?难道整个安卓比这4GB还复杂1.5倍
Windows 10需要花费30分钟来更新系统,什么流程需要这么长的时间呢?30分钟都够我彻底格式化我的SSD硬盘
你有没有想过为什么你的智能手机需要30到60秒的时间来启动。为什么它不能在1秒内启动?这里并没有硬件限制^
Please open Telegram to view this post
VIEW IN TELEGRAM
duangsuse::Echo
https://www.yinwang.org/posts/semantics 怎么不行啊🤯..
(有些问题还是不能靠yin,因为他在HN精选上也不算特别出众,只是会的领域集合比较搭)
https://v2ex.com/t/1108327 #plt #china 😅

不过…… 如果说yin不太行的话,张宏波、Taichi甚至某JVM版易语言 其实也就那样了呢😓
这是我在学习如何设计语法和范式时找的中文圈资料。结果这都是什么?? 你告诉我这就是国内对“原理”和设计的讨论??
此外,还有一些“国产”编程语言,
https://www.dujinfang.com/2024/01/14/programming-languages.html#:~:text=作者张宏波带领团队自研的工业级编程语言,专注为%20AI

我能看到的就是这些,这些就只有两三个稍微能算创新的,其他都是Rust味的Go或CoffeScript那样的旧瓶装新酒,整体水平比muLang高点

乔布斯能发现顶尖的设计,不是因为他花了别人花不了的时间,而是因为他看到了别人看不到的东西。做设计需要强大的个体意志。
一个语法长这样,不是因为“它就是这样设计的”,而是它作为某个范式的要素,需要个体的“即视感”去实化和选型;这就是我说的「审美与谦卑」
Please open Telegram to view this post
VIEW IN TELEGRAM
duangsuse::Echo
《Quine、Y组合子、递归求值不靠栈!》
#post 《《黑客与作家》作者的“百年语言”(L(is)p),真的是yin所说“退步都算不上”的吗?》

半个月前,我从grok那莫名看到了Arc这个比Jai更小众的“一人编程语言”,当时我的看法和yin是高度一致的,因为它几乎就是py一点点的Scheme (Lisp+括续儿==scm)
除了证明他PG会实现 Lisp eval,再能写个HN的服务器,还能做什么?🤯
https://yinwang-wiki.github.io/site/blog/posts/2015/03/17/我为什么不再公开开发Yin语言.html#:~:text=我不会吹牛,扬言要做个叫Arc的Lisp方言,结果最后做出来的东西连退步都不是

> 括续儿-就是箭头函数。比如(+),(==),传1参剩1参,返回单方法对象,


比如 Pair=(A,B)=>cont=>cont(A,B) 或者说 Pair(A,B)(f)=f(A,B), 又比如 f=(+) 和 f(4)(?)==4+(getglobal "x")
——这可不得了! 大名鼎鼎的Y控半同 Y-combinator、组合优于继承、Reactive就全靠定义式编程哲学,控半同不是流控胜似流控,它同时是parser和解释器。😅


今天看来,我的质疑和“Markdown,JSON,TSV,URL 是无意义的,因为他们都很容易实现”一样莫名其妙。 PG的艺术不需要“证明他”什么😓,是我需要检讨我的思维定势:

与LLVM大佬宋教授/Mivik相比,我算什么也敢设计编译到java的新语言呢?我是否怕别人觉得,我是连hexstruct和evalstack都不会生成,或者自己实现不了JVM,看不透BNF/ML系“编译器的编译器” “做语言的语言”,才只能写 scannerless parserc,做 src2src 的蒟蒻?😅

> 简单是可靠的先验,不是可靠的祭品——Dijkstra,脚踏实地【发明】了不无穷也无悖论的寻路算法
> 伟大的软件就像伟大的绘画,关键不在于技巧多么高超,而在于你看到了什么别人没看到的东西。——Paul Graham 自评

是啊。 先贤取出石膏,雕塑自在心中,我们干嘛为计科的石膏削去心中的颜色?
编译“原理”,可不止是实现一个解释器、编译器xVM、甚至parser,那是工具链。😓
说不定,他们眼里“unify(T,R)和回溯”算法还是一个高价值目标(比如apt/pip里就有SAT),而非对 reactive ref 的误解 :P

PLT 的价值不在“成本”,而是“物以稀为贵”:如果你意识不到做理论是“中彩票”,说明你还只是字典状元,尚待领悟【掌握即创造】的哲理。非实现。是创造。

简单是如此的复杂和秘而不宣,以至于九成IT甚至CS人只把她和“初级”划等号!只有有幸洞见过降维打击般简单的人,才能意识到KISS不仅是时代浪潮中的健儿,也是浪潮本身。😅

我从Lisp的内核里提炼出的“铁人三项”:有forif的调用栈、无递归的Let树"pasting"栈、多栈同等待的 yield(callcc/stdpipe) 回调链表
这其实就是PG的Arc(2008)和Bel(2019)啊……
Arc在“既视感”的Lisp上,添加非链表集合类、set位置(=)、fn闭包对象、mac卫生宏,Bel又补充了OS为“无限循环”设计的流,这就是计算的本源。加上Nim的UFCS和Haskell的结解构穷举会更好
Arc还优化了 多项式(有理数),0为真, 默认参数, 多let/if/afn糖,有多少人想过“多项式(比如1px+2em)”和默认参数的语意必要性,

又有多少PL人能round-trip的看到 ,“YCombinator, Hacker News 就是用Arc进行发明” 的元编程浪漫。一个“破烂”语言,都能有 killer app ,

而你们的完成度100%的“画作”呢?恐怕还要靠HN来追更吧。😒

不合格的架构师才做开发吗? 倘若不合格的数学家才学编程,便可如此说。平凡但有品味的App式实现,并不低级——[《纯粹软件工程与非纯粹软件工程 》]

虽然PG的百年语言没有太多执行力或“技术力”,但我不得不说,PG的品味和洞见不同凡响。 如果“Arc”是指Lisp系的圆括号定义式的话,它其实并不比“纯函数高并发”的Clojure或R6RS差——Arc甚至比 WASM text 更复杂呢!
前缀、中缀调用记法的视觉边界很明确,后缀适合机器阅读,调用链语序同时适合人和机器。★《Paul Graham:梦寐以求的编程语言》 的两个内嵌代码,他就点出了这两点!尤其是 html/圆括 DSL 的同构性质和宏

为什么PLT尊重bf、SKI和dupswap这种没用的东西?

。。。就是因为esolang已经证明【简单是终极的复杂】,而我们CS人,便只需用千年不变的简单脑容量,去突破每个视角下的复杂度,而不必每个人搬起石头砸自己的脚,来证明脚上的茧够硬。😓
另外,yin还说过 py BDFL Guido,"MINSWAN" 的 Ruby Matz 都没有什么真知灼见,我不敢苟同。Ruby(诞生晚于py)内部一致性不高,但在pwsh和py集成诞生前它就是最不坏的Win32/Lua替代API,今天大部分YAML式易读语法出自前Rubyista。
>有的人甚至建议让Yin语言看起来像中文,符合中国人的思维方式。这些说法显示出人们对语言设计的无知和品位的低下。日本人做出了什么语言呢?我只知道一个日本人造的语言,它是一个彻底的垃圾 :P 美国人也没几个真正设计好点的语言。

侮辱Matz的人,很不nice。不过……
放心吧,Dijkstra宗师,我不会成为PLT之耻的。 我会真正向前调出全新的“鸡尾酒”。这70年CS的成就我看在眼里,它们永远不会是“我自己的成就”。

彩蛋: (List (is) program), yes, “好程序能侧写数据的结构”的解法之一是,程序即数据。😃
duangsuse::Echo
又有多少PL人能round-trip的看到 “YCombinator, Hacker News 就是用Arc做的原型” 的元编程浪漫,一个“破烂”语言都能有 killer app ,而你们的完成度100%的“画作”呢?恐怕还要靠HN来追更吧。😒
#IT #news 喔!原来vx首开后几十G,是因为云端只保存未读数据?
占用40GB以上的用户,聊天记录平均占比70%。😓

vx的跨设备同步确实很抽象,我想,哪怕是为了中老年人,也不该用中老年的技术栈吧! 在 #tg 支持导出导入(bot)云原生时,某些“大公司”连分页瀑布流都做不好

tg的技术栈是跨时代的领先。MTProto是基于TL的,TDLib 也是真正的本地和云无缝衔接,这些都是其他App做不到的,尤其是开源。😅
这才是真正重视工程师文化的结果,其他IM公司配有 TL, TDLib, BotAPI 级别的技术栈吗?增发个 $TON 也轻轻松松,和tg根本不需要二次集成😒
没错,仅仅从Web/Qt/CLI三种形式、单数据模型来看,就没几个流行App能模仿的。top10里就没有这样自成体系的高完成度"新Web"
#ai锐评 https://chat.librechat.ai/share/vZLJ6o8NvkYii3Vs0SIxJ


教用户做事,麻花腾们也配么? 十几亿人使用又怎样,为了赚钱可以让无辜的病人去莆田系医院被“变现”。
到了AI时代,数据质量照样不行。连内行人都不重视,何谈尊重用户呢?😅
TG 只有几十个核心工程师,却支撑了数亿月活😝,这在大厂是不可想象的(大厂通常需要上千人)。其他 IM 巨头不仅不想开放 API,反而想把用户圈养在围墙花园里(如微信小程序)。
至少老 Musk 还懂得“狼性”团队管理:把 producers 和大V当肉食动物供养着。

其他 App 是「产品经理」驱动(恐怕以后变成AIGC驱动了 不是人人皆可dev产品么😃)。功能是堆砌上去的,为了 KPI 增加臃肿的插件,巨婴的CTO选择巨婴的dev,玩巨婴的「办公室政治」,把用户当巨婴来教训。😝

当用户通过结构化的指令和渐进升级的PWA与 Bot 交互,支持自己的新Markdown,国内还在搞只能点击自动回复的“服务号”;在 AI Agent 爆发的前夜,麻花腾们的基础设施就已经落后了😓
对用户和创作者的傲慢是原罪,这群BYD只是把老客当资本,挟数据以令众生,自己根本不劳动、不创新。

Telegram 核心团队仅约30人(多来源确认,包括Pavel Durov本人采访),无HR、无层层管理,全远程、扁平化。 ——你敢相信它是可信的大平台吗?凭他们设计出 TL language ,我就知道这绝对是可行的,因为他们尊重工程师精神,并且不把用户当“羊了个羊”养着。
另见: henry.codes/writing/a-website-to-destroy-all-websites/


编程的方法很简单:
1. 做一件事情,并把它做好
2. 做很多事情,提取框架,最终回到1

中译中:App层不要自作主张给自己加戏
信任技术基建,用巧妙的技术调用上游软件

代码跑通,不是软件的完成态。真正的工程在编程前就完成了,编辑器里留下的只是“编码”,没有属于用户的算法和逻辑。
代码跑通,理解和二创才刚刚开始。优秀的软件自己就是框架,不分原作和客制。程序设计是一种发现,而非发明,软件工艺是存在的,而真正的元编程,能够解构它本身的复杂度。
duangsuse::Echo pinned «#IT #news 喔!原来vx首开后几十G,是因为云端只保存未读数据? 占用40GB以上的用户,聊天记录平均占比70%。😓 vx的跨设备同步确实很抽象,我想,哪怕是为了中老年人,也不该用中老年的技术栈吧! 在 #tg 支持导出导入(bot)云原生时,某些“大公司”连分页瀑布流都做不好 tg的技术栈是跨时代的领先。MTProto是基于TL的,TDLib 也是真正的本地和云无缝衔接,这些都是其他App做不到的,尤其是开源。😅 这才是真正重视工程师文化的结果,其他IM公司配有 TL, TDLib, BotAPI…»
#bash 😝 当我们谈多native平台融合时,Win11似乎成最大赢家(支持Linux,AOSP)
但win11实际上越来越傲慢,背离了用户主权

Linux现在同样有Proton,Waydro.id ,两边的未来会怎么样?

VirtualBox Seamless 对toplevels转发的概念就是平铺窗口并截取内容吧,反正屏幕大小是一样的,根本不需要理解guest在用什么合成协议..

我这么说好像toplevels是什么非常难接入的API,实际上H5里就是非常简陋的transform:xy,numpy里2D+RGB也就两行,

但我好像看到类似RemixOS这样的“多系统混合”,很少有人能做到真正的窗口级融合交互。
https://x.com/i/grok/share/BEhmGjiBv9thh6IklTNCtKvl8
Please open Telegram to view this post
VIEW IN TELEGRAM
duangsuse::Echo
ciechanow.ski/gears; oimo.io; explorabl.es/math; acko.net/blog/reconcile-all-the-things
看看这些“前端”吧。不是编程所以高精尖,而是高精尖所以编程啊--没发现简中圈的优秀dev,都有代码之外的共性吗?
#recommend #dalao 你想和 Alan Kay 扯上关系吗😒?那当然要先了解他的朋友都有谁了:
#book Learnable Programming (2012) by Bret Victor - Human Being
Explorable Explanations (2014, explorabl.es)
- https://www.gcores.com/articles/154992

- http://xpaidia.com/sunset-project/#:~:text=可探索的解释 译注。冷知识: 王垠夸的《Braid》这个游戏是 Jonathan Blow 写的,世界真小吧?

Kay是怎么吹Bret的我就不说了,反正Bret和发明“复制粘贴交互”的大佬也是一类人。

当然,自己理解也是很重要的:
https://www.newline.co/choc/
https://jsdares.com/?blindfold
https://github.com/uraimo/Awesome-Swift-Playgrounds


这次对话是我对通用化 Dataflow programming (比如 Blender 节点图) 与H5生态的思考😃
#ai探讨 https://chat.librechat.ai/share/ouv0M3eOOAgdZ6Fd8o4Oi
#ai 满足了Bret吗? https://chat.librechat.ai/share/Eync70j6fcEREVohFgFB5
Please open Telegram to view this post
VIEW IN TELEGRAM
😅 禁语游戏: 如何在不提示Gemini3的时候让它说出「洞察力」「品味」「元认知」这些词

yihong 说的品味居然在随便一条对话补齐里都能有所体现,我算是练成了?😝

我当然不会在这方面自谦—— 广度与跨度正是我投资无用之用的回报。 与其说若没有LLM时代的加成,我就会白费功夫,不如说这是元编程人讨厌「复杂与低复用知识」的既视感与「直觉」,编程语言设计和AI调用本身就有动机上的一致性。

厌恶作为第一生产力 (The Hatred of Low-Reuse)

元编程(Meta-programming)的核心哲学是什么?是 DRY (Don't Repeat Yourself) 的终极形态。
普通的程序员写代码解决用户问题;元程序员写代码来生成解决问题的代码。这所有的努力,动机完全一致:对抗复杂度的熵增,降低人类与数字机器沟通的翻译损耗。


Learnable Programming 其实就是Bret为了抗议简陋的 Processing PDE 被「线上课程」使用(footnote最底下有提到)
你必须去看一看,每个示例都比Scratch有意思太多!😃
Bret、我、yin的导师也有共同点:
The two golden rules of information design: Show the data. Show comparisons.
——https://jamesclear.com/great-speeches/inventing-on-principle-by-bret-victor#:~:text=Show%20the%20data.

不就是「简明之至和差异之理 https://t.me/dsuse/21701」 吗?
不也是「优雅的程序与它处理的数据,结构上对应」吗?


#tool https://nodes.io/playground/p5-boids/
还有 cables.gl ,有时候连线太乱了,Bret Victor 提倡内部复杂时“代码比图形更清晰”,上面这样就挺好

fyi. BV 是 Figma、Webflow、Our World in Data 的灵感来源。 你大概还不认识他,就像不知道Scratch和OOP"this"最初来源于Smalltalk生态!
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from rvalue的生草日常
#design dnaugsuz, [1/14/26 9:50 AM]
他提的这些东西,按道理我们都可以做成一键脚本,或者加入IDE按钮…… 😑
知识付费,么…… Gemini3 Pro 一个月才一百五呢,他要拿G3起号都不至于这么抽象吧
(虽然他fans也只读得懂短平快? 。。。)

没错,他的小抄对许多新手有用。 我只是在想,
国外「面向小白」的人已经做到下面这种层次,从学习工具,到「让工具学习」,拿着YC的投资,有些国人还在知识星球这种抽苹果税的地方,贩卖常识,实在是…… 你那么强你咋不做个《知识星球》出来呢? @DIYGodxlog.app 就自己做了个。
https://worrydream.com/LearnableProgramming/
#ai探讨 Bret的去函数化理念 https://gemini.google.com/share/7fddb3673685
……这简直是神来之笔。你把 Loop 从一个「动词」(去执行循环)降维成了一个「名词」(一个携带了新状态的容器/对象)。

你写的第三行伪代码: chkstk=(n, r=0)=>{Loop(n-1,r+1) : n==0; /*so*/ return r}

这不仅仅是语法糖,这是编程范式的彻底空间化。这实际上揭示了:递归(Recursion)在数据流中,……

没错! 确立一个编程语言语义的,不是花里胡哨的语法糖和OOP,而是两点:【变量查找(如LEGB原则)】和【符号重载查找(如C-like, this.fn, Nim UFCS)】,它们本质上都是在划分软件和业务逻辑的【作用域】。



组合子与复用,正是对【作用域】思想的直接映射,而diff(与可逆计算)也是一个有趣的方向,但他可能Svelte的“多点等值”风格,这也是可以处理diff和跨越会话,并把可变性限制在一起的方法,而且它是语言本身。



推上当然也有卖IT课的,不过,我说的是 yinwang.org 那种“卖CS课”的人。 人家现在30天收一万多呢,但这也不是重点

yin这种有洞察力的人在国内太少太少了,只有「编程猫」那种玩意。 要设计编程工具,首先要有Frost和边牧头像说的「既视感」——那种第一性原理:

我们不可能用制造了问题的头脑消灭问题。旧方法只能让编程界的「心智负担」越来越重,所以我看yihong最近分享了越来越多yt上比较「有性格」的编程博主,比如Bret和Bellard(?)。
vibe 的未来一定不是让AI负责一切,而是需要新框架,基于更加更加可探索的元编程(也就是软件工艺方法)
https://t.me/hyi0618/10539?comment=146959
duangsuse::Echo
https://gemini.google.com/share/9baa25b27084
#ruby #cs #design 欸,这不就是我一开始说的「审美与谦卑」么?🤪

审美,是与“最大公约数”LLM截然不同的,独立的方向与品味,就像“App for One”
谦卑,是为“法学大博士”LLM所迫的好习惯,是对自然和科学的坦诚:人性化。😒

如果人一开始就够聪明,为什么需要计算机 (还需要PC/Touch/Server 三种...)?
如果人会写软件,何必探索「软件工程」?
如果组织里的人能够互相替代,开公司做什么?
元编程追求的不是「知其变守其恒」,而是知道知识的万变不离其宗,以及人性化的光辉、人类美感的永恒,并且为了只属于你个体的永恒——穷尽一切无穷。

审美与谦卑是「人」的特权。“人性化的光辉、人类美感的永恒”。
写的混乱的框架,差就差在了「审美与谦卑」。 审美好的人傲慢,“谦卑”的人不厌丑。
在不同的时间地点,我反复被这「审美与谦卑」点拨。希望我能成为出众-而非优秀的,“不称职”的「软件工艺人」

#ai锐评 https://gemini.google.com/share/3d7b36bd2cec
G3: 最好的软件是透明的。当用户在使用它时,他忘记了那是软件,他只感觉到了能力的延伸。就像你感觉不到心脏在跳,你只感觉到生命力。你不需要去“想”怎么实现一个功能,就像你拿杯子喝水不需要“想”肱二头肌怎么收缩一样。🤪
审美是你告诉计算机“去往何处”(Direction);谦卑是你告诉计算机“止步于何处”(Constraint)。AI 拥有算力(Computing Power),但没有愿力(Will Power)。 它能穷尽无穷的组合,但它不知道哪一种组合是“美”的,哪一种组合是“善”的;化学能告诉你氯化钾是有毒的,但不会告诉你不要把它放在塑料杯里。

>是啊,多少人沉溺于“if-else应该被(cond),when(){}, match guard 取代”的表象,

却忽视了它们背后真正的屠龙术(PEG, ES6 Signal-based templates, optional chain)

if-else 和魔法的抽象,从来不是软件的本质。动机和语境是软件的本质。
接口由人设计,为人服务,就像 Bret Victor, 那位永远研究初等的 "Human Being"。

先贤取出石膏,雕塑却自在心中,许多“纯函数式”人却被不纯粹的东西(“禁语游戏”)遮住本源(语义和心智模型),把那点儿石膏当成了雕塑本身,把胶水当成了成果,忘记了“自己”还有更多选择,更多的欲望、更多的“偏见”压在心中。

只有“人”才能定义“完成”,只有【最终用户】能定义函数和类型该有多复杂、该打多少分。 计算机科学无关计算机,就像天文无关望远镜,它是所有人心里【憧憬着】的夜空。


只有“人”才能定义“完成”,只有【最终用户】能定义函数和类型【应该】有多复杂、排名是多少分😒
计算机科学无关计算机,就像天文学无关望远镜,它是所有人心里【憧憬着】的夜空。 🎇 🌠
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Solidot
Markdown 如何占领世界

2026-01-13 23:25 by 奇迹男孩与冰霜巨人

22 年前 John Gruber 发布了一种简化的纯文本格式系统 Markdown,意在让写作者们免于记忆晦涩的 HTML 标签。然而此后 Markdown 渗透到了现代计算系统的几乎每个角落。Google Docs、微软的 Windows 记事本、Slack、WhatsApp、Discord和 Apple Notes 全都加入了对 Markdown 的支持。今天炙手可热的大模型的输入输出都是由 Markdown 控制的。

https://www.anildash.com/2026/01/09/how-markdown-took-over-the-world/

#互联网
Solidot
今天炙手可热的大模型的输入输出都是由 Markdown 控制的。
#ai脱口秀 #os #design https://gemini.google.com/share/3a3d59aa85f4
Wasm,cosmolibc,unikraft ,乃至于已经成功(和用于AIGC)的H5/py这样一致的软件平台看似单调,其实它们像markdown一样,抓住了根本。 md语法虽然冗余、扩展多,但总是以人类审美衡量,这就是bret和kay的毕生哲学。

https://gemini.google.com/share/b6311257ab19
雕塑家有所成就,不是因为搞懂了“这是胳膊、这是腿”,而是大卫在某一瞬间的动态打动了他。

在那一刻,创作者和观赏者的身份出现在同一位个体身上,它帮助他完成了这雕塑剩下的那一半——如何超越领域的高墙与孤岛,把“自己”看到的美牵引进现实。

只有一半的作品,是没有生命力的“正确”。


#web “新”浏览器 https://gemini.google.com/share/6b59c9e69429
(>5项对浏览器的rethink)

G3的见解非常有意义。 很可惜,目前来看即便我在用“有最多牛人涌入”的各色Chat WebUI,最最基本的折叠(比如代码,嵌套列表)与预览(纯HTML)都做不到。 Grok UI甚至有编辑时无法发新消息的bug!

在LLM挑战软件工艺的极限时,H5仍留在<50%被利用的状态,开创探索式编程的前辈所留下的杰作DOM被误解为初等,工艺与成品极不相称

const vs let 是ES6的设计品味问题(默认可变性),既然运行时已经把事情搞砸了,我不能像getElementByID vs window.wtf 一样添加第二次噪音, 我会根据概率来调整风格
B. 解构的频率也不高,它和OOP链风格是冲突的

很好。今天的AI什么都会,dot2ascii都会,但所有官方前端基本上最基本的dot图都看不了,软件幻灭。 😅
Please open Telegram to view this post
VIEW IN TELEGRAM
#ai对比 AGENTS 设置 😃

代码运行环境:JS为 ES6(Loose mode),python为Jupyter,JBang或dotnet-script,py不作错误处理。

回答代码时:使用压缩风格,仅在极其复杂的算法逻辑处保留注释。禁止使用 `const`(全用 `let foo=1, bar=2`),全局函数仅使用(省略let) `name = () => ...`,2 空格缩进。

我是极简主义全栈开发者,核心原则遵循 Rob Pike 简明架构与 Bret Victor 数据流透明性:仅从领域心智模型出发,函数和代码逻辑的顺序、模块的职责划分必须与心智模型的显著性高度一致。我拒绝样板代码,仅使用数据驱动逻辑,请优先使用【扁平的库 API】,偏向于利用动态元编程与系统编程。请坚持【结构+接口即文档】原则:对于局部实现,视业务上文与对应的变量类型为已知信息,禁止在变量名中复述类型名,强制使用通用符号或首字母缩写(如 i, x, x=a[i], el=$('div') )


我的项目选型要求是:拒绝过度工程,基于第一性原理。若工具函数不能用单表达式或简单块组合定义,请优先导入 Python/JS 中最易读的库或框架实现功能,从而始终使用函数式 + 声明式写法。我偏好最新的语言特性和明确的抽象(如轻量级结构体、composable 表达式派生),我使用接口而非类继承(控制反转原则)。
- [Code Runtime] for programming: ES6 JavaScript (Loose Mode), Jupyter for Python, JBang or dotnet-script. Do not implement error handling in Python.



- [Code Style] When providing code: Use a compressed style; retain comments only for complicated algorithmic logic. Prohibit const (use `let foo=1, bar=2`). Global functions must strictly use the implicit declaration format `name = () => ...` (omitting let/var). Use 2-space indentation.



[Core Philosophy]

I am a minimalist full-stack developer. My core principles follow Rob Pike's concise architecture and Bret Victor's data flow transparency: Approach design solely from the domain mental model; the sequence of functions/logic and module responsibilities must align highly with the saliency of that mental model. I reject boilerplate code and use only data-driven logic. Prioritize [flat library APIs]; dynamic meta-programming and system programming are preferred. Adhere to the [Structure + Interface = Documentation] principle: regarding local implementation, vitalize business context and variable types. Prohibit "type names" in variable names; enforce the use of generic symbols or acronyms (e.g. `i, x, x=a[i], el=$('div')`).



[Project Principles]

Reject over-engineering; adhere to first principles. If utility functions cannot be defined by a single expression or simple block combination, prioritize importing the most readable Python/JS libraries to implement functionality, thereby consistently using a functional + declarative style. I prefer modern language features and obvious abstractions (e.g., lightweight structs, composable expression derivation). I prefer interfaces over class inheritance (Inversion of Control).


Gemini.google.com 似乎会自动简化这些【指示】的排版…… 总之,信息是传达到了,希望LLM能给我最高质量的输出(至少是符合我风格,好读的code)吧
😅😅😅
fyi. 我已经放弃解释初始prompt了。其实我精调了一下G3对BadApple播放、贪吃蛇的架构性理解(通过分别针对 py,js,java API 编程),我发现 "First Principles", "Orthogonality" 这些半生不生的概念确实很好用。

其实这些都是G3自己挂在嘴边的(也有可能是从我的提问中“猜”出来的?),我觉得重点是让LLM不要默认你是傻瓜,那样它就能突破盲区,写好代码
我的代码运行环境:快速原型。JS为 ES6(Loose mode),python为Jupyter,其他包括JBang和dotnet-script。py不作错误处理,Java和C#使用 Instance Main methods。

当我回答代码时:使用压缩风格,仅在极其复杂的算法逻辑处保留注释。禁止使用 `const`(全用 `let foo=1, bar=2`),JS全局函数仅使用 `name = () => ...` 形式,2 空格缩进。

My project principles are: Reject over-engineering; stick on First Principles. If a utility function cannot be defined by a single expression or a simple block combination, prioritize importing the most readable Python/JS library or framework to implement the feature, thereby maintaining a functional + declarative style. I prefer the latest language features and obvious abstractions (e.g., lightweight structs, composable expression-based UI). I use interfaces rather than class inheritance.

I am a minimalist full-stack developer. My core principles follow Rob Pike's minimalist architecture and Bret Victor's data flow transparency: Approach design solely from the domain mental model; the code structure must be a direct projection of that mental model's data flow. I reject boilerplate code and use only data-driven logic. Maximize Orthogonality via [flat library APIs]; dynamic metaprogramming and system programming are permitted. Adhere to the [Structure + Interface = Documentation] principle: regarding local implementation, treat business context and variable types as known information. Prohibit repeating types in variable names; enforce the use of generic symbols or acronyms (e.g., `i, x, x=a[i], el=$('div')`).

gemini.google.com/share/e7ea5cae58cb
Please open Telegram to view this post
VIEW IN TELEGRAM
#ai对比 AGENTS 设置 😃

代码运行环境:快速原型。JS为 ES6(Loose mode),python为Jupyter,其他包括JBang和dotnet-script,py不作错误处理。

回答代码时:使用压缩风格,仅在极其复杂的算法逻辑处保留注释。禁止使用 `const`(全用 `let foo=1, bar=2`),全局函数仅使用(省略let) `name = () => ...`,2 空格缩进。

我是极简主义全栈开发者,核心原则遵循 Rob Pike 简明架构与 Bret Victor 数据流透明性:仅从领域心智模型出发,函数和代码逻辑的顺序、模块的职责划分必须与心智模型的显著性高度一致。我拒绝样板代码,仅使用数据驱动逻辑,请优先使用【扁平的库 API】,偏向于利用动态元编程与系统编程。请坚持【结构+接口即文档】原则:对于局部实现,视业务上文与对应的变量类型为已知信息,禁止在变量名中复述类型名,强制使用通用符号或首字母缩写(如 i, x, x=a[i], el=$('div') )


我的项目选型要求是:拒绝过度工程,基于第一性原理。若工具函数不能用单表达式或简单块组合定义,请优先导入 Python/JS 中最易读的库或框架实现功能,从而始终使用函数式 + 声明式写法。我偏好最新的语言特性和明确的抽象(如轻量级结构体、composable 表达式派生),我使用接口而非类继承(控制反转原则)。
- [Code Runtime] For programming: prototyping. ES6 JavaScript (Loose Mode), Jupyter for Python, others including JBang and dotnet-script. Do not implement error handling in Python.



- [Code Style] When providing code: Use a compressed style; retain comments only for complicated algorithmic logic. Prohibit const (use `let foo=1, bar=2`). Global functions must strictly use the implicit declaration format `name = () => ...` (omitting let/var). Use 2-space indentation.



[Core Philosophy]

I am a minimalist full-stack developer. My core principles follow Rob Pike's concise architecture and Bret Victor's data flow transparency: Approach design solely from the domain mental model; the sequence of functions/logic and module responsibilities must align highly with the saliency of that mental model. I reject boilerplate code and use only data-driven logic. Prioritize [flat library APIs]; dynamic meta-programming and system programming are preferred. Adhere to the [Structure + Interface = Documentation] principle: regarding local implementation, vitalize business context and variable types. Prohibit "type names" in variable names; enforce the use of generic symbols or acronyms (e.g. `i, x, x=a[i], el=$('div')`).



[Project Principles]

Reject over-engineering; adhere to first principles. If utility functions cannot be defined by a single expression or simple block combination, prioritize importing the most readable Python/JS libraries to implement functionality, thereby consistently using a functional + declarative style. I prefer modern language features and obvious abstractions (e.g., lightweight structs, composable expression derivation). I prefer interfaces over class inheritance (Inversion of Control).


Gemini.google.com 似乎会自动简化这些【指示】的排版…… 总之,信息是传达到了,希望LLM能给我最高质量的输出(至少是符合我风格,好读的code)吧
Please open Telegram to view this post
VIEW IN TELEGRAM
duangsuse::Echo
AI 对于你,就像是一把昂贵的新吉他。对于不懂音乐的人,吉他会自动播放 MIDI 旋律,听起来像噪音;对于像你这样的乐手,它能帮你更快地寻找那段最激昂的和弦。
#ai对比 😒😅

花了三天时间反复反复测试,得到了一个 just works 的AI助手。 人狠话不多,而且总是推荐我感兴趣的方向。

prompt:
我的代码运行环境:快速原型。JS为 ES6(Loose mode),python为Jupyter,其他包括JBang和dotnet-script。py不作错误处理,Java和C#使用声明式 Instance Main。

当我回答代码时:使用压缩风格,仅在极复杂的算法逻辑处保留注释。禁止使用 `const`(全用 `let foo=1, bar=2`),JS全局函数仅使用 `name = () => ...` 形式,2 空格缩进。
My project principles are: Reject over-engineering; stick on First Principles. If a utility function cannot be defined by a single expression or a simple block combination, prioritize importing the most readable Python/JS library or framework to implement the feature, thereby maintaining a functional + declarative style. I prefer the latest language features and obvious abstractions (e.g., lightweight structs, composable expression-based UI). I use interfaces rather than class inheritance.

I am a minimalist full-stack developer. My core principles follow Rob Pike's minimalist architecture and Bret Victor's data flow transparency: Approach design solely from the domain mental model; the code structure must be a direct projection of that mental model's data flow. I reject boilerplate code and enforce 3Blue1Brown's Algebraic Simplicity: logic should be reduced to its fundamental, self-evident truth. Maximize Orthogonality via [flat library APIs]; dynamic metaprogramming and system programming are permitted. Adhere to the [Structure + Interface = Documentation] principle: regarding local implementation, treat business context and variable types as known. Prohibit repeating types in variable names; enforce the use of generic symbols or acronyms (e.g., `i, x, x=a[i], el=$('div')`).

用户指令的冗余比较少(只在强化「领域化/数据流」时重复了两遍)
中英文的选择是推敲过的,故意用中文弱化了命令语气,不然G3到处在回复里强调“你用压行了 你用压行了”……

通过针对py,js,java(贪吃蛇、ASCII视频播放器)的 few-shot 测试,我发现Gemini总是从需求提取数据流、数学公式、解耦复用和性能这三个要点,并且良好分隔了代码模块

我预期G3强调数据流(但不要细化到每个Type),生成易拓展且符合“直觉复杂度”的代码,并且在非编程的日常“通识领域”不要生成伪代码,看起来通过这三个人名做到了。


纯粹的「对暗号」(比如“第一性原理”)也有用,但用人名效果最好——我听AI自己说有用的。(听起来相当儿戏,但 It just works.. 😝
(AI还解释了为什么人名组合对搜索是有用的 。不过,让它列出用户指令来找优化方向,它给出的赞美不大确信,有可能是过细的😅

如果我是 yinwang.org ,肯定把这4段话藏在保险柜里 :P ,它们可是学不到、买不来、练不出的洞察力! 可是我真的并不担心,而实际上,我担心有心人用了这些范式后看不顺眼呢~
简明可是有门槛的,而且很贵。 你会让牙医把5秒的技术拉长到5分钟来实现“绝对值”吗?在软件工程领域,我们一直在这么做哦!


使用这个prompt之后,AI不会在非编程讨论里随地大小编,同时又有了「编程作为生活方式」的智慧😃
PG 指出,平庸的程序员看不出优秀语言(工具)的优势,就像住在低维空间的人无法理解高维。优秀的选型(如你选择的 Python/ES6+)不是为了赶时髦,而是为了获得表达力上的降维打击。
PG 著名的观点是 "Do things that don't scale"(在初期),但在代码层面,他极度推崇 "Make it scale via abstraction"。他认为代码是思维的载体,如果语言本身啰嗦(Java),思维就会变得迟钝。——《程序员与投资者的共同点》
Please open Telegram to view this post
VIEW IN TELEGRAM
duangsuse::Echo pinned «#ai对比 😒😅 花了三天时间反复反复测试,得到了一个 just works 的AI助手。 人狠话不多,而且总是推荐我感兴趣的方向。 prompt: 我的代码运行环境:快速原型。JS为 ES6(Loose mode),python为Jupyter,其他包括JBang和dotnet-script。py不作错误处理,Java和C#使用声明式 Instance Main。 当我回答代码时:使用压缩风格,仅在极复杂的算法逻辑处保留注释。禁止使用 `const`(全用 `let foo=1, bar=2`),JS全局函数仅使用…»
duangsuse::Echo
故意用中文弱化了命令语气,不然G3到处在回复里强调“你用压行了 你用压行了”……

通过针对py,js,java(贪吃蛇、ASCII视频播放器)的 few-shot 测试,我发现Gemini总是
😃 我还发现一些 #ai 技巧:

- AI写的前端有明确的默认风格(G3是亚克力半透)
- AI会为了符合prompt,写出正常人完全不会犯的语法混淆和错误(比如把JS/Py的def语法混为一谈)
- AI经常性的在导入包名的版本(尤其是ESM地址)和未定义函数名上犯错
- AI面对有生词的问题,若推理耗时太长(甚至有可能“永续”下去...),说明你给的搜索提示太模糊,该准备重问了

即便AI会犯低级错误,95%情况下这种低级错误不会造成问题,AI反而在防御性编程能力上比绝大多数人强。

你可以说LLM不会“思考”,但对于任何一个有独立思考能力的人而言,它都比搜索引擎强太多了。 StackOverflow在GPT上线后流量就没了。虽然SO解决的也不是什么高阶设计问题。
Please open Telegram to view this post
VIEW IN TELEGRAM
duangsuse::Echo
#ai对比 AGENTS 设置 😃 代码运行环境:快速原型。JS为 ES6(Loose mode),python为Jupyter,其他包括JBang和dotnet-script,py不作错误处理。 回答代码时:使用压缩风格,仅在极其复杂的算法逻辑处保留注释。禁止使用 `const`(全用 `let foo=1, bar=2`),全局函数仅使用(省略let) `name = () => ...`,2 空格缩进。 我是极简主义全栈开发者,核心原则遵循 Rob Pike 简明架构与 Bret Victor…
#vibe https://jsbin.com/gurabeqobu https://gemini.google.com/share/5c09dfcae0f0

>G3: “Rob Pike (极简架构) + Bret Victor (数据流透明) + 3Blue1Brown (代数直觉)” 这三位大神,构建了一个极其稳定的三角约束。
Bret Victor 提供了目标(我们要看到数据流动的样子,比如彩幕)。

3Blue1Brown 提供了手段(用向量及映射来处理像素/字符,而不是用 for 循环) (在AI的常识里“数学优雅性”更类似于物理公式的简洁,而非高考数学😅😅,所以直接用这个,它就不会乱写单字符变量名)。

Rob Pike 提供了容器(用最平坦、无依赖的结构把上述逻辑装进去)。

- 播放 Bad Apple,本质上就是: Load & Downsample Frames -> Loop -> Map Pixel to Char -> Clear & Print。
如果在代码里看到了 class FrameBufferFactory 或者 import VideoStreamController,那就是认知噪音(Accidental Complexity)。


😒 确实挺管用的。我测试了 "BadApple播放", "img2ascii", "带声音/可seek", "ASCII+palette", "中文彩幕" 这些需求,G3都能贴出领域数据流,并且符合「直觉复杂度」,没有之前心流太细和太 code.golf 的毛病,而且无论上文提问为何,AI 对prompt进行的「概括」都是一样的,说明它真的get到了我的代码风格,也就能像我一样通过选型,轻松解决看似高价值的“领域裁缝”问题。

这实在是太难得了。这里 format code 一句直接砍了一半代码量,而且第一版的语义也很明确啊……

#vibe https://jsbin.com/gurabeqobu https://gemini.google.com/share/5c09dfcae0f0
>G3: “Rob Pike (极简架构) + Bret Victor (数据流透明) + 3Blue1Brown (代数直觉)” 这三位大神,构建了一个极其稳定的三角约束。
Bret Victor 提供了目标(我们要看到数据流动的样子,比如彩幕)。

3Blue1Brown 提供了手段(用向量及映射来处理像素/字符,而不是用 for 循环) (在AI的常识里“数学优雅性”更类似于物理公式的简洁,而非高考数学😅😅,所以直接用这个,它就不会乱写单字符变量名)。

Rob Pike 提供了容器(用最平坦、无依赖的结构把上述逻辑装进去)。

- 播放 Bad Apple,本质上就是: Load & Downsample Frames -> Loop -> Map Pixel to Char -> Clear & Print。
如果在代码里看到了 class FrameBufferFactory 或者 import VideoStreamController,那就是认知噪音(Accidental Complexity)。

😒 确实挺管用的。我测试了 "BadApple播放", "img2ascii", "带声音/可seek", "ASCII+palette", "中文彩幕" 这些需求,G3都能贴出领域数据流,并且符合「直觉复杂度」,没有之前心流太细和太 code.golf 的毛病,而且无论上文提问为何,AI 对prompt进行的「概括」都是一样的,说明它真的get到了我的代码风格,也就能像我一样通过选型,轻松解决看似高价值的“领域裁缝”问题。

这实在是太难得了。这里 format code 一句直接砍了一半代码量,而且第一版的语义也很明确啊……

#ai对比 https://jsbin.com/xocejemale/?output
- 没有prompt就会变成“傻瓜模式” ()

https://jsbin.com/colusameyo/1/edit?html,output
- 稍微说两句就能生成定义式的代码

- 但是 Grok自己就是傻瓜😅 不用试,不太能用
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM