惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

J
Java Code Geeks
爱范儿
爱范儿
Attack and Defense Labs
Attack and Defense Labs
量子位
The GitHub Blog
The GitHub Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Scott Helme
Scott Helme
C
CXSECURITY Database RSS Feed - CXSecurity.com
博客园 - 叶小钗
C
Cybersecurity and Infrastructure Security Agency CISA
S
Securelist
S
Schneier on Security
C
Cisco Blogs
B
Blog RSS Feed
Cisco Talos Blog
Cisco Talos Blog
Last Week in AI
Last Week in AI
WordPress大学
WordPress大学
腾讯CDC
酷 壳 – CoolShell
酷 壳 – CoolShell
罗磊的独立博客
Y
Y Combinator Blog
Latest news
Latest news
T
Tailwind CSS Blog
Jina AI
Jina AI
宝玉的分享
宝玉的分享
人人都是产品经理
人人都是产品经理
C
CERT Recently Published Vulnerability Notes
D
Darknet – Hacking Tools, Hacker News & Cyber Security
L
Lohrmann on Cybersecurity
The Cloudflare Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Microsoft Security Blog
Microsoft Security Blog
H
Help Net Security
P
Palo Alto Networks Blog
V
V2EX
博客园_首页
D
Docker
T
Threat Research - Cisco Blogs
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
V
Vulnerabilities – Threatpost
月光博客
月光博客
D
DataBreaches.Net
Stack Overflow Blog
Stack Overflow Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Know Your Adversary
Know Your Adversary
L
LangChain Blog
The Hacker News
The Hacker News
K
Kaspersky official blog
The Register - Security
The Register - Security
NISL@THU
NISL@THU

0x01 byte

我在 2025 年看完的书 西班牙之行 2025 年初展望 2024 年底曼谷之行 荐书:The Blind Watchmaker 王垠传播的「自然视力恢复法」真的有用吗? 从高考志愿到职业选择 浅谈 Apple Intelligence 2024 年,我为什么开始为搜索付费 运气与努力 刷新了一下对内容审查粒度的认知 离开心动和 TapTap 如何反转一个链表? 如何高效地协作开发:一些 Google 的实践 关于 LeanCloud 被心动/TapTap 收购 small talk #3:从 IPFS 聊到 Web 的开放性 small talk #2:聊聊用 M1 芯片的新 Mac 怀念两位老师:Stan Eisenstat 和 Paul Hudak small talk #1: 聊聊你的私有云 如何在 Emacs 里做所有事 Remark Ninja: 一个简单的评论系统 Woman、man、camera、TV:如何做一个完整的深度学习应用 荐书:走出戈壁:我的中美故事 LeanCloud 开始周期性远程工作了 树莓派:用 Pi-hole 来保护隐私和过滤广告 爱国指南 我在 2019 年觉得不错的几个习惯 WeWork 的兴衰和创投的游戏 计算机专业学生该如何提高自己 怎样利用好路上的时间 荐书:Educated - 一部震撼人心的回忆录 入门 React hooks + 后端集成 荐书:Bad Blood,创业公司的谎言与欺诈 LeanCloud 的故事 — AVOS 时期 一点人生经验 👓 — 如何学英语 一点人生经验 👓 — 学好英语的重要性 Docker 和 Kubernetes 从听过到略懂:给程序员的旋风教程 加密货币与区块链(三):什么是信任 离开微信公众平台 加密货币和区块链(二):分布式共识与去中心化 加密货币和区块链(一):历史的重演 第一个程序员 Ada 的故事 写在 9/11 十五周年 快速开发聊天机器人 说说离职员工的期权 你所不知道的 Dijkstra 你所不知道的冯·诺伊曼 在 LeanCloud 看 Parse 的关闭 对透明薪酬的回顾 比 XCodeGhost 更邪恶的手段 30 年前就出现了 写给创业的技术人 如何有效地做 Code Review 为什么每个团队都需要 Code Review? 怀念我的外公 面向对象与函数式 「零和博弈」- 是语言在演变还是媒体在倒退 传统媒体和互联网 Clojure: 现实世界的 LISP 求职时的常见错误 Emacs Smart Split (旧文)也说王垠退学
编程语言之争
blog.incoming@1byte.io (江宏) · 2013-02-14 · via 0x01 byte

最近在 Clojure 的邮件列表有很多关于自己所在公司不能使用自己喜欢的语言的抱怨,由此也引发了一些争论。类似的内容在很多相对非主流的语言或技术的用户社区都不难找到,例如 Erlang,Go 和 Haskell,不久以前可能 Node 甚至 Ruby 和 Python 都算是小众的。

有人把软件设计看做一门手艺,把程序员比作工匠,所以才会有 Software Craftsmanship 这样的运动。工匠非常重视自己使用的工具,有了顺手和习惯的工具才能事半功倍,这本是无可厚非的。但作为一个公司来说,为了避免技术上过度的碎片化和重用现有资源,无法避免会在这方面做出或多或少的限制。比如我在 Google 的时间里,在线上面对用户的产品只能使用 C++ 和 Java(YouTube 等收购的产品除外),Python 基本只用于内部工具。现在 Google 发布了 Go,可能选择多了一些。在这种情况下,喜欢使用一些小众技术或语言的程序员和公司之间的矛盾就产生了。

程序设计也是一门艺术。艺术的魅力一方面在于创作中可以有众多的选择,有众多的风格和流派,无所谓对错;另一方面也在于艺术家往往乐于接受挑战,在客观条件的限制下完成看似不可能的事情。比如在米粒这样非常不适合雕刻的介质上也能做出精美的微雕作品。学习 Clojure 的价值并不在于在工作中一定要用到这门语言,而是通过理解它解决问题的方法让自己成为更好的程序员,无论实际使用的是什么语言。如果喜欢函数式编程,那么在任何语言中都可以用它,不一定要强求使用一门函数式。事实上给一门语言打上「函数式」或者「面向对象」等标签都是人为的做法,很多时候本身就是存在争议的。

拿 C++ 做例子,大多数人会说它是面向对象的语言,但它的模版部分是一个真正的纯函数式语言。我曾做的一个项目是把 Google search 的 webserver 逻辑重写,用模版和 C++ 的静态类型系统来实现对后端 RPC 复杂数据依赖的管理,让没有相互依赖的 RPC 并行进行,而存在依赖的 RPC 以正确的顺序进行。现在还记得上线时的忐忑。这件事参考了 Haskell 用强大和完备的类型系统来加强程序正确性的做法,虽然在 Haskell 里会容易和自然很多,但肯定不可能为了这个优点把很大的 code base 重写。 同一时期我的另一位同事实现了一个非常高效的 C++ continuation API,和 Scheme 的 call/CC 一样好用,只是不知道后来有没有用在生产环境里。

学一门语言重要的是理解设计者解决问题的方法,这样也许客观条件限制你不能用它的语法,但你可以用类似的方法解决类似的问题。有句话说「当你只有一个锤子的时候,你看什么都觉得像钉子」。其实了解越多的语言、技术和工具,会越觉得没有必要执着于某一个选择。可以选择的时候就选择最适合的工具,没有选择的时候也能恰当利用手上的工具用合适的方法解决问题。大家要做 artist,不要做 zealot。