返回信息流## 问题
我有个观点,一门编程语言在程序员中的的流行程度,跟这门语言容易上手的程度正相关。想讨论一下,这个观点对不对,有多少坑没考虑到。
## 上下文
+ 程序员,指在IT公司里写代码的程序员,他们在面对一个新问题时,可以有很多编程语言供选择,我想讨论的是他们会根据编程语言的什么侧面去做这个选择。
+ 这里的程序员不包括那种作秀的编程科普的受众。
+ 这里的程序员包括需要编程的科学家,虽然我认为他们编程的目的是支撑他们主业的数据,而不是软件产品。
+ 流行程度,单指使用人数的净比例,同时包括这个比例随时间的变化趋势。
+ 这里的流行程度,不考虑在一个小圈子里程序员对它的忠诚度。
## 逻辑
我是这么想的,一门语言越是容易上手,新程序员就会越容易在遇到问题时选择它,然后用得越来越熟。等到新程序员变成了骨干的时候,他们用的语言自然也就成为了手下人要用的主要语言,而之前的主要语言,因为比较难学难用,就会被驱赶进历史的角落,逐渐演化成小众的语言,甚至消失。
就算是之前主要的语言是难学难用的语言,新程序员加入时也会对其有离心力,只要有一个机会可以做选择,新程序员就会抛弃难学难用的语言,转而使用易学易用的语言。
当然,这是个迭代过程,所有的语言都会这样一代一代地被迭代,各领风骚,总的趋势就是“最流行语言”这把交椅总是换更容易上手的语言来坐。
想听听大家都是怎么想的,随便喷,言之有物就好。
这是一条镜像帖。来源:北邮人论坛 / cpp / #91426同步于 2016/4/30
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
[讨论]一门编程语言上手容易程度会决定语言的流行程度吗?
clangpp
2016/4/30镜像同步36 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
【 在 clangpp 的大作中提到: 】
: ## 问题
: 我有个观点,一门编程语言在程序员中的的流行程度,跟这门语言容易上手的程度正相关。想讨论一下,这个观点对不对,有多少坑没考虑到。
:
: ...................
现在比较流行的语言里……比较新的就是Swift Go C#这样的?
容易上手吗……和更早的语言没有特别大的区别吧……
暖神您好,我现在大二,大一的时候学过c语言,自学了javase的视频。马上大三找实习了想确定自己以后的方向,调研了下觉得自己感兴趣的方向有两个,一个是javaee做网页以后可以去前端,另一个是c++以后做什么还不知道,可能c接触的比较多,所以想学c++。然后数学功底还凑合正在学算法导论,现在比较困惑的是学完算导后,该往哪个方向继续努力。本来打算入门c++的,但是看了您的一些帖子好像不太建议学c++,所以想问下我这种情况怎么选择比较好?
另外,您说的Python我没有正式学,只是对几个别人写好的程序改改正则表达式什么的,满足需求就放一边了。
【 在 nuanyangyang 的大作中提到: 】
: 会
: 【 在 dxy 的大作中提到: 】
: : @nuanyangyang
:
【 在 clangpp 的大作中提到: 】
: ## 问题
: 我有个观点,一门编程语言在程序员中的的流行程度,跟这门语言容易上手的程度正相关。想讨论一下,这个观点对不对,有多少坑没考虑到。
有关系。所谓“人生苦短,我用Python”就是这个意思。Ruby也是强调对程序员友好。这两个语言目前都相当地流行。
: 我是这么想的,一门语言越是容易上手,新程序员就会越容易在遇到问题时选择它,然后用得越来越熟。
是这样的。每个语言之所以流行,背后都有很多原因,可以说每个语言背后都有一个故事。起码,有不少语言(但不是所有的语言)的流行的原因是因为易用。
比如C语言。有了C语言,程序员就可以使用高级语言来进行字符串处理这种不需要用汇编这种低级语言来做的事。(嗯,没错,当C出现的时候,人们对C的态度就像今天大家对Python的态度一样)
比如Python,初始于Guido不满意ABC语言,自己设计了一个脚本语言。这个脚本语言在他的办公室里流行了起来。然后逐渐走出他的办公室,成为世界著名的语言。又因为Python开发团队特别注重文档(这一点比Ruby好得多),Python变得越来越流行,而且有越来越多的贡献者。
: 等到新程序员变成了骨干的时候,他们用的语言自然也就成为了手下人要用的主要语言,而之前的主要语言,因为比较难学难用,就会被驱赶进历史的角落,逐渐演化成小众的语言,甚至消失。
这……这需要相当漫长的时间,比如20年,30年,甚至40年。虽然不确定,但我觉得C/C++目前仍然有生命力,是因为很多主流的项目在使用这些语言,而后来的贡献者为了做贡献,或者为了重用他们的成果,也就选用了C/C++。(当然,C/C++还有一些特点,目前还没有语言可以替代)但我觉得,Perl和Pascal似乎没有存活下来,继续作为主流语言存在。
: 就算是之前主要的语言是难学难用的语言,新程序员加入时也会对其有离心力,只要有一个机会可以做选择,新程序员就会抛弃难学难用的语言,转而使用易学易用的语言。
会的。我觉得Perl属于这种例子。我反正Perl没学完,就开始用Python来做所有本来想用Perl做的事情了。
: 当然,这是个迭代过程,所有的语言都会这样一代一代地被迭代,各领风骚,总的趋势就是“最流行语言”这把交椅总是换更容易上手的语言来坐。
是的,每个语言流行都有一个原因。除了“易用”以外,还有别的原因,比如,某些语言总有一些独特的特性,不可替代。
比如Java。Java是目前少有的能把多线程做得很好的语言。虽然“线程”的概念在60年代就已经出现了,但POSIX Thread却是1995年才发布。难怪《APUE》第一版对“线程”只字不提,因为第一版是1993年出版的。最初,Java的线程是green thread,即使现在,Thread类里还有个yield方法,是那个时代的遗产。Java1.5(2001年)开始,修改了memory model,成为全世界第一个有memory model的语言。memory model明确地规定了不同的线程并发地读写共享内存时可以看到的值,比如,Java 1.5可以完全保证,下面线程2如果看到y==2,一定会看到x==1。
int x=0;
volatile int y=0;
线程1 {
x = 1; y = 2;
}
线程2 {
int r1 = y;
if (r1 == 2) {
int r2 = x; System.out.println(r2); // 一定是1
}
}
而别的语言(比如C/C++)仍然在依赖编译器提供的私有扩展,或者用汇编手动加barrier。而另外一些语言(比如Python/Ruby)至今仍然在使用global interpreter lock,完全禁止多个线程同时运行。JavaScript是严格的单线程的(但很多人还是很喜欢node.js,应该是看中了v8的的JIT编译器了吧),Lua的thread其实是coroutine,Racket目前有很多种多线程模型,但没有一个特别优雅。
Erlang也是为多线程而设计的语言。虽然它的解释器运行速度并不快,但对于大规模的网络程序,它的message passing模式的线程间通信(Erlang称之为进程)其实非常高效,而且远远比Java或者“C/C++加上系统接口”的共享内存模式容易使用(其实Java也可以使用BlockingQueue的,也很高效)。Go语言也引入了Erlang的线程间通信。
所以,现在编程语言看似这么多,一到做某个特定的事情(比如多线程),其实没有多少种选择。
新的语言一般会引入一些新的比较易用的特性。比如2000年代脚本语言特别流行,应该是因为大家厌恶了静态类型语言的啰嗦吧。2000年代末到但2010年代出现了很多语言,几乎都有类型推导(比如Scala, C#, Go, Rust, Swift,但类型推导在70年代的ML语言和80年代的Haskell里就有了),应该是人们还是意识到脚本语言的性能问题吧。现在可以写出既简练又安全又高效的程序,可以说语言也总是在进步。