看到「学什么新语言」这个问题,推荐这本书

2021-08-21 12:45:24 +08:00
 pocarisweat

《七周七语言:理解多种编程范型》 https://book.douban.com/subject/10555435/

书里囊括了颇有代表性,但很多程序员未必了解的 7 种语言:

书的篇幅没有那么长,这些语言也未必能用在实际工作上,但一定能打开你的眼界。书里介绍的语言,和 vczh 之前推荐的几门编程语言( https://www.cnblogs.com/geniusvczh/archive/2013/04/27/3047560.html , Go 语言粉丝请不要点开这个链接!)也高度重合。

这里( https://segmentfault.com/a/1190000002944730 )还有一篇对作者的采访。他甚至后来还写了第二本书( https://book.douban.com/subject/26921107/ ),包括 Lua 、Idris 、Elm 、Elixir 等。

「语言都是工具」这话本身是没错的,但喜欢说这句话的人时常是在表达一种虚无主义的态度,即「什么语言都一样」。但锤子和螺丝刀都是工具,大概人们也不会混用它们吧?

5865 次点击
所在节点    程序员
34 条回复
echo1937
2021-08-21 13:05:41 +08:00
这本书不容易读懂
lululau
2021-08-21 13:34:15 +08:00
我推荐这些语言,排名不分先后

1. Java:用户最多的语言
2. JS: WEB 前端的核心语言
3. Ruby:通用场景下最好的语言,最好的动态类型语言
4. Python:测试、科学、AI 等特定场景下用得最多的语言
5. Go:兼顾性能和易用性的条件下,用得最多的语言
6. Rust:最好的系统级语言
7. Swift:兼顾性能和易用性的条件下,最好的语言
8. Kotlin:最好的 JVM 平台语言
9. Bash:不用说明吧
10. Zsh: 最好的 Shell
11. Haskell: 逻辑体操语言
12. C/C++:历史最悠久的,用的最多的系统级编程语言
powerman
2021-08-21 13:44:34 +08:00
语言都是工具,没说完的下半句是 趁手就好,

本来大部分场景就是什么语言都一样,你在那里搞 语言好坏分析 宗教战争,
人家都用趁手的工具把代码撸完,拿钱泡妹 喝咖啡去了。

真正的资深优秀的程序员基本上不会去讨论工具的好坏,也懒得分析这些东西,因为语言跟技术只是手段,并不是目的,大部分时候目的是为了实现功能,而当你在讨论语言优劣的时候,本就把语言优劣的争论当作一种目的了。
charlie21
2021-08-21 13:50:28 +08:00
@powerman #3 当你在讨论语言优劣的时候,也可以是讨论即将(用此语言)解决的问题,语言本身只不过是给你对此 problem 给出的 solution 提供 support, 其中有的语言可提供的 support 更好、有的语言可提供的 support 不好.

这和 “将语言优劣的争论当作一种目的” 无关,因为它仅限于此 solution 和 solution 所 targeted 的 problem
namelosw
2021-08-21 13:54:12 +08:00
> 「语言都是工具」这话本身是没错的,但喜欢说这句话的人时常是在表达一种虚无主义的态度,即「什么语言都一样」。

这种人一般都没啥见识,让他们把几个常见的靠 mutation 实现的算法从 C 翻译成 Haskell 就跪了。LeetCode 最近加了 Erlang 和 Elixir,仔细看就会发现很多题没有这俩选项,因为这些题在没有变量的语言里就不成立。

总得来说,他们觉得语言都一样是因为他们其实只用过一种语言:C*。不管是 Python C 还是 Java,都算 C*。

如果用距离来形容语言间的区别,可能 C* 在地球,Python 和 Ruby 就是在一个洲的不同国家,而 C 和 Java 分别在不同的洲。人们常用的 SQL 就在月亮上,虽然远但是里地球还很近。Haskell Prolog 之类的可能就在火星和金星,Coq 之类的可能在海王星。除此以外,显然还有很多系外行星我们不太了解。

另外《七周七语言》看完了可以去看 《 Concepts, Techniques, and Models of Computer Programming 》
namelosw
2021-08-21 13:58:47 +08:00
@powerman 那我理解你说的程序员还不够优秀。

Rob Pike 和 Martin Odersky 肯定对什么是好语言有一些看法。

就算不是语言作者,John Carmack 也会经常跳到 Racket 和 Haskell 来实验这些思想是不是更好,Linus Torvalds 会认为 C 很好,但是 C++ 不好,Rust 有待观望。
Cbdy
2021-08-21 14:01:57 +08:00
@lululau 请不要把 C 和 C++当成同一种语言,就像没有人会混淆 Java 和 JavaScript
stimw
2021-08-21 14:14:03 +08:00
@powerman #3

Linus Torvalds: “C++ is really a terrible language!” (狗头)
Lemeng
2021-08-21 14:26:28 +08:00
学语言,还要看一本书。实在没那时间,支持一下
powerman
2021-08-21 14:49:05 +08:00
@stimw

你只记住了这一句话,但是并不了解整个事情来龙去脉,本来这种事情的争论,从一开始就是一件错误的事情,后面的争论已经毫无意义,大多都是情绪化的输出。

对于 linus,他知道他的开源项目需要什么,开源这东西,很多时候 人的精力跟社区的精力有限,能处理各种问题讨论 propral 并且把项目推动下去就已经很不容易,你想想有人天天给你发邮件,跟你说 你为什么不用 C++重写一下你的 git 跟 Linux,C++不比你手里工具好用,这种蜜蜂嗡嗡的声音有多难受吗?
powerman
2021-08-21 15:00:43 +08:00
@namelosw

这些争论都只是一些毫无意义的事情,包括 linus 吐槽 C++那个事情,你如果真去看来龙去脉就知道,他也只是被那些蜜蜂嗡嗡声音搞得烦了,才下场来吐槽一波 C++,事实上现代 C 语言编程中,存在大量模仿面向对象编程的痕迹,而大家都知道 C 并不支持面向对象。

编程其实真正的重点是 业内的公认的那些最佳实践跟一些代码设计原则,个人推荐看一下 unix 的编程哲学跟代码大全,因为所有的工具跟语言都是围绕这些东西在转,如果你从职业生涯一开始就知道 软件开发的一些经典的代码原则跟实践,那么你在后续的工作成长中,你会发现很多东西是顺其自然的样子,因为业内沉淀优秀的东西都是那么回事。
zzw1998
2021-08-21 15:07:41 +08:00
看标题进来还以为是自然语言
namelosw
2021-08-21 15:37:10 +08:00
@powerman

> 被那些蜜蜂嗡嗡声音搞得烦了,才下场来吐槽一波 C++

Linus 很明确地说过,他觉得 C 好是因为 C 很简单地 map 到冯诺依曼机器的操作上,看到代码你就知道机器是怎么运行的。而 C++ 的问题是,一方面 C++ 引入的抽象让代码脱离硬件,另外一方面是这些抽象是 leaky 的,不完整的抽象会到处泄露抽象下面的东西。

所以从上面两点推理,他觉得 Rust 有潜力,很可能是因为 Rust 虽然也构建了抽象但是不那么 leaky,所以值得观望。

> 事实上现代 C 语言编程中,存在大量模仿面向对象编程的痕迹,而大家都知道 C 并不支持面向对象。

你多看一些东西,就知道这个世界除了面向对象还有很多其他优秀的东西。游戏社区有 ECS,函数式社区有代数建模。现代 C 出现很多类似 OO 的代码,是因为大部分程序员只了解 OO 。

> 业内的公认的那些最佳实践跟一些代码设计原则

作为 OO 的支柱之一的继承,本身作为 subtyping 甚至都不是一个很好的 polymorphism 。OO 社区强调 OCP 原则,其实是因为大部分 OO 语言的核心机制本身很容易破坏 OCP 。

你说的这两本书是很好,但是世界远比这两本书大。

而且…… 我举了这么多人,你只对一个人的例子做了很主观的反驳,就认为你的看法更好,不太合适吧。

"A language that doesn't affect the way you think about programming is not worth knowing." - Alan Perlis
DoctorCat
2021-08-21 16:47:15 +08:00
@powerman 认同你的观点。盲目的技术信仰假如不具备生产效率并获得实际收益,那么就没有啥实际价值。哪怕是学术上很厉害的玩意儿。
danhahaha
2021-08-21 17:03:06 +08:00
既然比作工具,那么肯定不一样,要不然发明那么多工具干嘛,还是因为不好用,所以才会有人发明新的更好用的
loading
2021-08-21 17:05:42 +08:00
这书我推荐给很多人了,但是,我本人除了封面和书名,其他我一无所知。
loading
2021-08-21 17:16:01 +08:00
@lululau #2 你给了这么多最,里面其实容得下一个 php 吧,有一说一。
aristolochic
2021-08-21 17:37:23 +08:00
好奇怪,为什么有人一看到把几个语言并列放在一起,脑子里第一时间想到的是接下来要排名列次,踩一捧一了。

> 真正的资深优秀的程序员基本上不会去讨论工具的好坏,也懒得分析这些东西
> 这些争论都只是一些毫无意义的事情

我没看出来楼主的分享中有任何形式的“讨论语言优劣”、“搞 语言好坏分析 宗教战争”,只是在说一些值得了解以扩展思路的语言,却惨遭扣上这种帽子。

就像出省出国旅游,去别的地方玩还要搞个 Benchmark/Questionary,头脑也太不活泛了吧。有那么多人,搞钱用一套方便搞钱的,自己玩用一套使用舒适的,甚至于自己看着不爽发明一套,也没见人家精神分裂。

图灵机和 Lambda 演算、Actor 和 CSP 、继承和组合、call/cc 和 Monad 、文本宏和 AST 宏……等等都能达成目的,但各有各的优势和劣势不假,长久以来各家也骂战是少数,相互吸纳才是主流。怎么别人告诉你吃苹果吃腻了可以试试我家的梨,你却要怀疑这梨有毒呢?也没一巴掌拍没你手上的苹果不让你吃啊。

毕竟还有很多人可是没见过梨的。
chenyu0532
2021-08-21 18:19:07 +08:00
不是有这么一句话吗:当你不知道学什么语言的时候就学 java
gowk
2021-08-21 21:13:59 +08:00
下面这段话我贴了好多遍了,我都贴烦了
You aren't a Go, or Rust, or Java, or Python, or JavaScript developer (unless you are writing those languages). In reality you are a developer who uses language X to solve Y problems. You can learn new languages and paradigms. Don't get stuck in the I am an X developer.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/797161

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX