前 Deepin CTO 王勇“锐评”编程语言


前 Deepin CTO 王勇近日在社交网站发布招聘信息时,提到了他们团队对于各种编程语言的丰富使用经历。

接着他本人谈论了一些关于各种编程语言的感悟,其中包括 Golang、Rust、Java、Python,甚至提到了比较小众的 Vala。下面是对他发布内容的整理。


作为曾经的 Haskeller, 说一下我对Rust的感受,语言很有力量, 但是不感冒这个语言的原因:

1. 世界上有很多业务性的逻辑是需要创造力和编程心流体验的, 而Rust编译器总是打断你方向性的思考, 强制让你关注设计阶段不重要的细节, 丧失了很多编程乐趣。

2. Rust社区的人似乎不懂得市场经济和成本概念, 一个好的软件, 不仅仅只是内存安全和绝对性能, 代码可读性, 场景适合性, 认知深刻和持续维护的软件对用户才有价值, 重写完一个软件, 证明 rust 比别的语言快和自己厉害, 马上就弃坑的软件没有价值。

3. Rust社区推崇内存的细腻控制, 有时候就和C++的开发人员一样讨厌, 把指针或者生命周期控制能力当作比较的炫耀资本, Rust更像是一种证明自己比别人厉害的工具。 我不是说Rust不好, 而是不喜欢这种认为Rust就是天下第一的思想, 什么都要用Rust重写的想法。

4. Rust的强制内存管理, 在编写复杂逻辑的时候, 编译器打断太生硬了, 导致人无法安静的思考最重要的架构设计。 Rust对于底层库或者实时性这些不需要GC或者性能苛刻的场景很适合,为了内存安全可以忍受编译器严格。 但是现实大部分场景不是都是内存安全优先的, 而是创造力和逻辑清晰优先的。

来源:Twitter

看来大家对编程语言比较感兴趣, 我分享一些编程语言的感悟, 因为Twitter字数限制, 用语难免不严谨。 ;)

1. C/C++: 我的入门语言,充满原生力量,其实指针、内存分配和释放, 用的熟练就好了, 没啥难度。 比较麻烦的是, 如果项目不是自己设计的, 逻辑比较复杂, 内存安全问题没法根治。

2. Java: 我第一份工作的语言(J2ME), 严谨, 工业质量高,天生为企业程序设计的,特别是Eclipse开创了IDE智能编程先河。 但是不自由, 特别是Linux下探索一些技术原理的时候, 什么都要先定义 Class 再创建 Object 再设计 setter/gettter, 还要考虑模式设计的时候, 不符合黑客道自由自在的精神。

3. Haskell: 当年唐凤单刀编写 Perl6 编译器, 那时候对一个人的生产力能达到多么恐怖的实力感到震惊(第一个是John Carmark, 我的偶像), 客观的说Haskell非常强, 类型推导、代码优美、高性能递归、无锁编程等极大开阔我的视野, 可惜的是这个语言的作者大部分都是科学家,生态一般, 很难找到工作。

4. Elisp: 我写了18年Elisp代码, 刷了400+Emacs插件, 用中国人的话说就是, 无招胜有招, 什么模式设计, 什么数据结构, 都不存在的。代码就是数据, 数据就是代码, Elisp最让我爽的是,你的思想就像水一样流动到键盘, 想到那写到哪, 加上Emacs实时热替换, 这才是黑客编程的心流感觉, 太爽了。

5. Python: 创建deepin的前期写了很多Python代码,只用看一本书《Python核心编程》就可以实现入门到精通。Python告诉我世间所有数据都可以用string, bool, list, tuple来组合。它从来不像其他编程语言那样宣扬宗教理念和小技巧, 核心东西就那么多, 你永远可以信赖它,完美的原型设计语言,简单实用。

6. Ruby: 喜欢看Rails作者David的博客,人生就应该像David那么精彩, 而不是躲在键盘后面攻击他人炫耀自己。Ruby语言灵活充满人情味,能够激发“铸剑”的乐趣,但是随着年龄增长,曾经满世界背包找的Ruby小技巧最后都无法对抗记忆衰退, 尊敬Ruby的小情调,但是现在我更喜欢记忆负担小的Python。

7: Vala: 很多人没有听过的语言,Deepin Terminal第一版的语言, 一个C编译器的语法糖, C#的手感, C的编译和运行速度, 第一版 Deepin Terminal 可以做到50ms内启动完毕, 通过GIR自动对接GObject库, 不用手动绑定, Deepin Terminal几千行代码量, Github居然统计我是国内写Vala代码最多的人(囧)

8. Golang: 公司主力语言, Python手感, 性能足够好, 适当的GC比较适合业务逻辑编写, 不会像Ruby那样内存爆炸重写, 性能也比Python快太多了, 可惜错误处理真的是丑啊, 大公司的好处是背书和资源厉害, 坏处是一些小细节就不听社区的反馈,而语法完美的语言生态发展缺钱, 也许这就月有阴晴圆缺。

9. OCamel: 函数式编程, 但是没有Haskell那么‘纯粹’, 也提供OOP的东西, 自己研究一下玩一下还挺好玩, 但是我想分享的是, 函数式编程在列表处理的时候非常简洁好看,但是我们不能拿着函数式语言的锤子到处去找函数式场景的钉子, 好看的衣服穿一穿可以, 但是有时候也要下田处理一些脏活。

10: JavaScript: 可能是世界上拥有程序员数量最多的语言, 客观的说, 这个语言没啥规范或者规范一直在变, 变的都是语法这种无聊的事情。 至从V8和npm出来以后,你别说,众多程序员鄙视的语言,好脏好乱好热闹的生态就比好山好水好无聊的世界好很多,有时候感叹,代码优雅比不上人多力量大啊。

11. CoffeeScript: 2013年的时候,我们一帮底层C++程序员魔改了浏览器引擎, 用 CoffeeScript写Linux桌面前端,语法优美, F12调试界面CSS, 好爽啊。 但是后面微软大佬们发力做了 TypeScript 以后, CoffeeScript这种语言就淡出人们的视野了。

12: TypeScript: 如果你羡慕JavaScript轮子生态, 有生产力, 但是又鄙视JavaScript的混乱语法和标准, 必须尝试TypeScript, 基本上是大前端的标配, 像我这种野生程序员, 不用太偏向语言派系之间的纯洁理念, 架构好才是真的好, 大部分代码都会被重构删除的,因为你的认知在不断提升。

13: Lua: 用过一年Mac, 针对 Hammerspoon 写了一些配置, Lua真的是快啊, 语言超级简洁, 机器码指令很少,效率很高,性能贼快贼快啊, 为啥Emacs比不上Neovim, 就是Lua比Elisp转速高太多, 但是这个语言不支持Native Thread, 所以通用型天赋受限制, 再强IPC数据传输都比不上线程访问内存速度快呀。

14: Swift: 梦中语言, 兼顾简洁、性能和优美的语言, 设计的非常好, 但是对于我这种Emacs程序员, 写代码一定是键盘流, 但是Mac一定要用它那个图形IDE写代码我受不了啊, 可惜了。 传说Swift的语言作者也是 Rust 作者, 所以Rust的一些细节审美还是可以的。

15: Rust: 这门语言非常好,综合实力很强,我每天都感谢上苍 rg/fd 这两个工具节省我太多时间了, Rust性能和无GC的设计真的没的说, 最适合命令行工具、底层库, 减少世界多少内存安全漏洞呀。 我不喜欢它编译器话太多, 强迫我关心内存安全, 因为原型设计阶段根本不用关心内存安全, 没心情就不想写。

16: Common Lisp: Emacs粉丝,研究了一段时间, 还是Lisp那味, 到处都是括号和自由的味道, 而且性能和库生态要比 Elisp 好太多了。 但是日常工作和学习都没有实践的机会, 还是回到了 Elisp, 虽然精通Elisp没人要, 但是最起码Elisp下班还可以写点Emacs插件提升我工作效率, Common Lisp不知道能干啥。

17: Shell: 在构建deepin的时候用的多, 虽然没有Python优美, 但是是最佳胶水语言呀, 为啥? 因为你构建操作系统的时候, 有可能 Python 解释器和很多库还没有移植到新的芯片上, 这时候只能用Shell脚本。客观的说, 我Shell用的不是很好, 佩服那些Shell代码一屏一屏写, 一次搞对的系统架构大牛们。

18: QML: 写Qt应用的时候撸过一段时间, 结构化写界面比Qt Layout/Gtk Box快多了。 但是不看好, 因为真正界面结构编程最好的是JavaScript/CSS, 同时 QML 底层是OpenGL强制渲染, 如果硬件不是自己做(比如嵌入式), QML的性能很差, 因为Linux的显卡驱动质量太差, 不, 太差是侮辱‘太差’这个词。

19: CSS: 其实不算一门语言, 但是作为前端最重要的技术, 我很多年都坚持手写CSS。 很多底层开发的人员鄙视做前端界面的。但是客观的说, CSS精通真的非常难, 代码写好, 用户体验要好, 控件性能还要好, 没有艺术和计算机交叉能力, 还真的做不好这件事情。

20: Scheme: 和Common Lisp一样, 是比Elisp更完美的Lisp语言, 核心非常小巧, 设计很好, 最佳的Lisp教学语言。 可惜的是, 比 Common Lisp以及Elisp还要小众, 建议大家从学习的目的去学习Lisp思想, 其他就算了, 工作和爱好都用不上它。

最后我想分享的是,为什么要学习很多语言?

因为我们可以学习各种语言的设计思想和看问题角度,我们会因为“Wow, 还可以这样” 来提升我们的认知,这才是价值。

而不是我学习了世界最好的语言, 你们都是xxx , 世界是混沌的, 语言只是工具, 我们不能拿着锤子到处去攻击别人炫耀自己, 那样其实很傻

来源:Twitter


相關推薦

2023-10-16

继“移除 TypeScript”后,Ruby on Rails 作者 DHH 近日又在公开场合发表了一番“暴论”——称最快的打包工具就是没有打包 (No Build),有了 HTTP/2 以及浏览器原生支持 ES Modules ,前端根本不需要构建。 在上周举办的 Rails World

2023-09-22

据技术都能四世同堂,凭什么开发 30 岁就要被干掉? deepin 正式官宣已实现大模型能力接入,多款自研应用软件实现智能化升级。 统信软件高级副总经理、CTO张磊表示:“目前UOS AI实现了国内外主流大模型的能力接入,并封

2022-11-15

刚刚正式掌管 Twitter 不久的马斯克对公司进行了大刀阔斧的裁员,从他今天发表的推文来看,很显然他对此决策颇为满意,直言“Twitter 越来越充满活力”。 但与此同时,马斯克旁敲侧击地对 Twitter 的开发团队“批判”了一番

2022-05-19

创无限”——打造立足中国面向全球的桌面系统根社区 deepin 线上发布会成功举办。 会上,统信软件宣布,将以深度(deepin)社区为基础,建设立足中国、面向全球的桌面操作系统根社区,打造中国桌面操作系统的根系统。资

2022-11-11

Alpha 版本,这是 V23 的阶段性版本。公告写道,设计上,deepin V23 基于最新的“行云设计”理念,从UI 界面、交互体验上,为用户呈现崭新视界;功能上,积极响应社区用户反馈的需求,开发并集成许多实用功能,满足用户在更

2023-09-05

deepin-IDE 目前支持 C++、C、Java、Python、JavasSript 五种主流编程语言;内置语言服务器协议(LSP)、调试适配器协议(DAP);支持主流版本控制系统 Git、SVN;支持常用构建工具 Cmake、Maven、Ninja、Gradle 等。 功能界面预览 语言

2022-09-19

deepin 宣布了自研的全新通用目的编程语言:Unilang,其仓库提供了文档和作为参考实现的解释器。 deepin 表示,目前桌面应用开发虽然有许多选项,例如 Qt、Electron、PySide 和 Flutter 等。但它们存在各自的优势和不足。 据介绍,

2023-11-09

前不久深度科技旗下deepin社区发布了自己的 IDE:deepin-IDE,得到了全网用户尤其是开源社区用户的广泛关注,目前在 GitHub(https://github.com/linuxdeepin/deepin-unioncode)仓库的 star 数量已经达到 600 多个,说明大家的热情还是很高涨的

2022-10-13

页面甚至被不同国家的几十名开发者自发翻译成了不同的语言版本。 “用好 Git 很难: 很容易就犯错了,然后想自己弥补犯下的错,简直太难了。查阅 Git 文档简直就像是个先有鸡还是先有蛋的问题,你得知道你要的是啥 

2023-09-20

deepin V23 Beta2 昨天(2023年9月18日)发布了。 发布公告写道,deepin V23 Beta2 对上一版本存在的问题进行了修复,修复问题单450+,并进一步优化功能体验,包括新内核电源续航提升30%、采用白盒方案优化秘钥环弹窗问题、优化版深

2023-08-01

术进行了解读。 文心一言是百度自主研制的知识增强大语言模型,首先从数万亿数据和数千亿知识中融合学习得到预训练大模型,在此基础上采用有监督精调、人类反馈的强化学习和提示等技术,并具备知识增强、检索增强和

2023-12-05

内容来源 :deepin社区 deepin(深度)社区11月总览 11月,有 1084位小伙伴加入了deepin开源社区大家庭,目前共有论坛伙伴148,891位 11月deepin系统版本共升级4次,修复bug共13个,功能新增19个 在11月,FVP正式支持deepin V23 ,deepi

2022-12-09

,开发并集成了大量实用功能。 镜像下载:https://cdimage.deepin.com/releases/20.8/deepin-desktop-community-20.8-amd64.iso 下面介绍一下新版本的功能: 深度之家 新增社区自研信息聚合型应用“深度之家”,V1.0.0 阶段实现了对社区GitHub、Wi

2023-07-06

deepin 开发团队宣布,在已发布的 deepin V23 beta 版本中,目前已正式适配 Apple Mac mini M1。 团队说道,尽管已经能够实现在 Mac Mini M1 上正常启动 deepin 系统,但还没有达到可以日常使用的阶段,存在着诸多适配问题。例如:系统缺