怎么看待 2012 年的「编程语言之争」?
程序员文章站
2022-06-05 18:21:24
...
问题比较水了, 看到有人整理了几篇博客的看法, 最近也挺热闹:
http://www.oschina.net/question/28_63456
也许是没有看到所期待的人们站出来说些什么吧...
回答前憋忘过一下链接里几篇博客, 毕竟有些观点重复次数多了
打个广告:我收集了一些程序语言理论方面的书和函数式方面的基础书。不过大部分是仅和我的个人研究方向相关或周围人的推荐得到,其中不免有很多不合适的地方,欢迎指教。
http://book.douban.com/doulist/1373274/
http://book.douban.com/doulist/1430378/ 在没有答案的问题上说得天花乱坠是无意义的。
语言之争的娱乐性高于知识性。
所有关于这个问题有定论的答案都是不靠谱的。
所有看起来靠谱的答案又都不是针对于这个问题本身的。
综上所述,回答LZ的问题,"怎么看这次编程语言之争?",答案就是别看,因为怎么看都是在浪费生命中宝贵的时间。(我竟然浪费了这么多时间来回答这个问题,而且还看了lz提供的连接地址,收获就是知道了,@寒冬winter @庄表伟 @左耳朵耗子(陈皓) @Laruence (惠新宸)@老赵,他们都挺有闲工夫的) 语言有好坏之分吗?
没有,只有适合不适合
适合的,就是好的 语言好不好很难比较,都好。
码农在写代码的时候很多时候舒服还是难受的感觉来自于使用的是什么IDE
一个优秀的IDE可以大大缩短你写代码的时间 你成功地把战线拉到了知乎 如果希特勒老先生在世,他一定会说日尔曼民族使用的语言才是最好的语言,想用其他的?一律砸电脑。 只能说闲人太多。装13的人太多。题主请多关心些有用的东西。 C++肯定是最烂的语言,模板和基于模板的STL是最烂的特性
Objective-C不用GC的话,预想之外的异常发生时资源会失控。用GC的话就好很多,但是这个语言还是过于复杂了。OO里Smalltalk的范式(如Objective-C/COM)是overkill,Simula(如Java/C#)的范式正好
Python/Ruby真的用过很长时间的话,就知道没有想象中好。主要是版本之间和平台之间的互兼容性不够好,一段脚本写完,不到5年基本就不能在最新的系统上跑了。做脚本可以用用,做支撑系统不够 服务器:Ruby
浏览器:jQuery
游戏脚本:Lua
iOS:Object-C
Windows:C#
底层:C
以上是我个人开发时选用的语言
世界上不存在唯一一个“最好用”的语言,只有在合适的环境合适的时间选择一个合适的语言,去创造程序员最大的价值 这个问题就像问程序员哪个编辑器是最好的编辑器一样,总是会引起战争。
** C ** 显然是一门伟大的语言,它和UNIX几乎是共生的,几乎所有操作系统的开发都是基于C的,OSX的底层同样是C开发的(因为本质上就是一个UNIX)。C的问题在于它操作的颗粒度过细,缺乏像面向对象语言那种更抽象的机制来实现代码重用和封装(不要和我讲在C下如何实现面向对象,你真要做是可以的,但是代码量是很大的,如果你真实现了,差不多就是在C下实现了一个python差不多)
** Objc ** 是在C的基础上增加了一些简单的机制来实现面向对象的,不过Objc是基于消息来实现的面向对象,这和C++显然是不同的。结果就是Objc的面向对象机制比较简单易懂,苹果的OSX和IOS除了底层部分,系统的finder之类的都是用Objc的,所以在苹果的设备上进行系统开发和GUI开发,Objc是最好选择,没有其他。
如果抛开平台来说,我也认为Objc是一门比较优雅的面向对象语言。
ps:顺便说一句,很多人在讨论哪个编程语言最好的时候,其实无意中考虑的还有库,苹果为Objc提供了一个Cocoa库确实非常棒,大量使用了设计模式,而且确实做的很好(你和MFC比较就知道有多好了)
** C++ ** 这个语言我只能说除非有特殊需要,比如系统对性能要求很高,做图形图像计算等特定领域,一般还是不要碰比较好。这东西已经发展到掌握它已经变成一种负担,没有很好的掌握它而去使用它会变成一种灾难的语言。记得我高中接触C++的时候,它还是一门C+面向对象的一门比较易学的语言,但是后来引入太多的东西,语言的复杂性完全失控。所以不要轻易自虐,面向对象语言里面C++绝对是丑陋的一门(“简单就是美“ 的反面)。
** Java ** 本人对Java的学习不够深入,只能说学过,但是没有大量实际的程序开发经验。这门语言显然成为目前软件行业中非常重要的标准,面向对象语言中最流行的语言,到书店看看书架上有多少讲Java的就知道它对现在的软件行业有多少重要了。
在我看来Java的成功就是在克服或者说吸收了C++设计的教训来得到的。首先Java的语法上和早期的C++类似,基本上就是C加上一层面向对象机制,然后提供了包等机制来实现更好的封装。控制了语言的复杂性,然后提供的基于JVM的跨平台和正赶上的互联网发展浪潮让它获得了巨大成功。
此外Java的自带的库也非常丰富,所以程序员一般会对它有另外的好感。
** Python ** 这门语言是我比较喜欢的。我曾一度认为在面向对象语言中,如果论编程语言本身的语法特性,python应该是面向对象语言中语法最优雅的一门。我很大程度上是因为这个喜欢上这门语言的,另外一个原因是因为python的标准安装包提供了几乎所有常用的类库,可以满足的大多数应用。对于入门者这也算是一种福音。
最近一两年国内开始流行起来了。各种书也多了。python让我不爽的几个特点是:GIL(全局线程锁)、最近开始基于 @ 语法的那些高级特性的高级用法某种程度上破坏了语法的优雅性,内存消耗不少,调试比较麻烦。
** Ruby ** 这个不好意思 没学过!当年曾经在Ruby和Python两者直接犹豫过,那个时候市场上还没有任何关于Python和Ruby的书籍,最后选择Python而不是Ruby的原因是因为douban的存在,至少知道除了自己外还有人折腾Python,然后听说Ruby这个是个日本人折腾的,出于当年大学期间正是反日情绪高涨的时候,没有选择Ruby,不过看过一份文档,貌似Ruby对于面向对象做的比较彻底。
没有怎么深入折腾过,具体好坏我就不做评价了。
** Lua ** 学过,编过小程序,语法上没有什么特殊值得夸耀的,自称速度是解释型编程语言中最快的,然后解释器非常小(编译貌似只要一个C标准库),然后剩下的实在没什么好讲的,为游戏开发插件可能不错,然后我还知道貌似openwrt还是哪个路由器固件系统里面貌似用的Lua来做各个功能的模块。仅此而已,我觉得没什么太多惊喜。
**javascript** 浏览器上的霸主,基于宿主平台的。这两年比较火应该和Google的一个项目V8有关,是一个高性能的javascript引擎,chrome浏览器的高性能估计就是因为V8受益不少。所以开始有人折腾node.js 这个平台,mongodb里面貌似也用的javascript作为操作语言。
简单的讲: javascript语法是非常简单的,容易学,有很好的东西,也有很糟糕的玩意。
很好的东西我认为就是它特殊的对象模型(貌似学习的self语言),它的对象模型、函数模型、复合数据结构是基于统一模型的(至少从外观上是一样的,底层实现是否相同不清楚),这个特定的优势是可以将代码和对象像基本数据(浮点数,字符串)一样传递给一个函数,这个功能是非常强大的(懂行的应该知道这个特性会意味着代码可以非常灵活而强大,不懂的人估计根本不知道这个特性对编程的意义)。
很糟糕的东西我认为是基于全局对象的全局变量,还有5种表示逻辑假的常量——这是灾难。所以我认为它的语法需要被好好整理下。而且个人认为Lua和javascript不大可能成为一种通用编程语言。
下面是我目前比较喜欢的编程语言
Lisp 自己google去,我不想花费大量时间去解释这门伟大的语言——无以言表。
Lisp是一个家族,旗下有不同的衍生语言。elisp——emacs就是用这个开发的,CommonLisp 是一个通用的标准,和它相对的是一个scheme。目前发展势头比较猛的是clojure。
要解释Lisp的优势可能要花上面所有的篇幅,因为实际上这已经不是一门编程语言的优势,而是一种构建程序的方法的优势,因为它是如此与众不同,所以解释起来需要大量的篇幅。
下面粗略说几点,具体的内容先不展开
优点:
1、几乎无限的表达能力
2、几乎无限的抽象能力
3、1+2 代码重用的无穷潜力
缺点:
要掌握这门语言,就要把你原先学过的其他编程语言的所有东西都丢了,不要指望在这门语言里面去找与其他语言类似的东西。——有点欲练此功,必先自宫 的意思。因为思维方式彻底不同,脑袋不是很灵活的人会很痛苦。
http://www.oschina.net/question/28_63456
也许是没有看到所期待的人们站出来说些什么吧...
回答前憋忘过一下链接里几篇博客, 毕竟有些观点重复次数多了
回复内容:
不是专门做pl的人说讨论这些没多少意思吧?而且目前就涉及到为数不多的几种语言而已。与其花些时间讨论这些倒不如把《冒号课堂》拿出来科普科普(印象中有句话:没有最好的语言,只有最合适的语言)。如果想找个有发言权的人,我觉得可以请教王垠。打个广告:我收集了一些程序语言理论方面的书和函数式方面的基础书。不过大部分是仅和我的个人研究方向相关或周围人的推荐得到,其中不免有很多不合适的地方,欢迎指教。
http://book.douban.com/doulist/1373274/
http://book.douban.com/doulist/1430378/ 在没有答案的问题上说得天花乱坠是无意义的。
语言之争的娱乐性高于知识性。
所有关于这个问题有定论的答案都是不靠谱的。
所有看起来靠谱的答案又都不是针对于这个问题本身的。
综上所述,回答LZ的问题,"怎么看这次编程语言之争?",答案就是别看,因为怎么看都是在浪费生命中宝贵的时间。(我竟然浪费了这么多时间来回答这个问题,而且还看了lz提供的连接地址,收获就是知道了,@寒冬winter @庄表伟 @左耳朵耗子(陈皓) @Laruence (惠新宸)@老赵,他们都挺有闲工夫的) 语言有好坏之分吗?
没有,只有适合不适合
适合的,就是好的 语言好不好很难比较,都好。
码农在写代码的时候很多时候舒服还是难受的感觉来自于使用的是什么IDE
一个优秀的IDE可以大大缩短你写代码的时间 你成功地把战线拉到了知乎 如果希特勒老先生在世,他一定会说日尔曼民族使用的语言才是最好的语言,想用其他的?一律砸电脑。 只能说闲人太多。装13的人太多。题主请多关心些有用的东西。 C++肯定是最烂的语言,模板和基于模板的STL是最烂的特性
Objective-C不用GC的话,预想之外的异常发生时资源会失控。用GC的话就好很多,但是这个语言还是过于复杂了。OO里Smalltalk的范式(如Objective-C/COM)是overkill,Simula(如Java/C#)的范式正好
Python/Ruby真的用过很长时间的话,就知道没有想象中好。主要是版本之间和平台之间的互兼容性不够好,一段脚本写完,不到5年基本就不能在最新的系统上跑了。做脚本可以用用,做支撑系统不够 服务器:Ruby
浏览器:jQuery
游戏脚本:Lua
iOS:Object-C
Windows:C#
底层:C
以上是我个人开发时选用的语言
世界上不存在唯一一个“最好用”的语言,只有在合适的环境合适的时间选择一个合适的语言,去创造程序员最大的价值 这个问题就像问程序员哪个编辑器是最好的编辑器一样,总是会引起战争。
** C ** 显然是一门伟大的语言,它和UNIX几乎是共生的,几乎所有操作系统的开发都是基于C的,OSX的底层同样是C开发的(因为本质上就是一个UNIX)。C的问题在于它操作的颗粒度过细,缺乏像面向对象语言那种更抽象的机制来实现代码重用和封装(不要和我讲在C下如何实现面向对象,你真要做是可以的,但是代码量是很大的,如果你真实现了,差不多就是在C下实现了一个python差不多)
** Objc ** 是在C的基础上增加了一些简单的机制来实现面向对象的,不过Objc是基于消息来实现的面向对象,这和C++显然是不同的。结果就是Objc的面向对象机制比较简单易懂,苹果的OSX和IOS除了底层部分,系统的finder之类的都是用Objc的,所以在苹果的设备上进行系统开发和GUI开发,Objc是最好选择,没有其他。
如果抛开平台来说,我也认为Objc是一门比较优雅的面向对象语言。
ps:顺便说一句,很多人在讨论哪个编程语言最好的时候,其实无意中考虑的还有库,苹果为Objc提供了一个Cocoa库确实非常棒,大量使用了设计模式,而且确实做的很好(你和MFC比较就知道有多好了)
** C++ ** 这个语言我只能说除非有特殊需要,比如系统对性能要求很高,做图形图像计算等特定领域,一般还是不要碰比较好。这东西已经发展到掌握它已经变成一种负担,没有很好的掌握它而去使用它会变成一种灾难的语言。记得我高中接触C++的时候,它还是一门C+面向对象的一门比较易学的语言,但是后来引入太多的东西,语言的复杂性完全失控。所以不要轻易自虐,面向对象语言里面C++绝对是丑陋的一门(“简单就是美“ 的反面)。
** Java ** 本人对Java的学习不够深入,只能说学过,但是没有大量实际的程序开发经验。这门语言显然成为目前软件行业中非常重要的标准,面向对象语言中最流行的语言,到书店看看书架上有多少讲Java的就知道它对现在的软件行业有多少重要了。
在我看来Java的成功就是在克服或者说吸收了C++设计的教训来得到的。首先Java的语法上和早期的C++类似,基本上就是C加上一层面向对象机制,然后提供了包等机制来实现更好的封装。控制了语言的复杂性,然后提供的基于JVM的跨平台和正赶上的互联网发展浪潮让它获得了巨大成功。
此外Java的自带的库也非常丰富,所以程序员一般会对它有另外的好感。
** Python ** 这门语言是我比较喜欢的。我曾一度认为在面向对象语言中,如果论编程语言本身的语法特性,python应该是面向对象语言中语法最优雅的一门。我很大程度上是因为这个喜欢上这门语言的,另外一个原因是因为python的标准安装包提供了几乎所有常用的类库,可以满足的大多数应用。对于入门者这也算是一种福音。
最近一两年国内开始流行起来了。各种书也多了。python让我不爽的几个特点是:GIL(全局线程锁)、最近开始基于 @ 语法的那些高级特性的高级用法某种程度上破坏了语法的优雅性,内存消耗不少,调试比较麻烦。
** Ruby ** 这个不好意思 没学过!当年曾经在Ruby和Python两者直接犹豫过,那个时候市场上还没有任何关于Python和Ruby的书籍,最后选择Python而不是Ruby的原因是因为douban的存在,至少知道除了自己外还有人折腾Python,然后听说Ruby这个是个日本人折腾的,出于当年大学期间正是反日情绪高涨的时候,没有选择Ruby,不过看过一份文档,貌似Ruby对于面向对象做的比较彻底。
没有怎么深入折腾过,具体好坏我就不做评价了。
** Lua ** 学过,编过小程序,语法上没有什么特殊值得夸耀的,自称速度是解释型编程语言中最快的,然后解释器非常小(编译貌似只要一个C标准库),然后剩下的实在没什么好讲的,为游戏开发插件可能不错,然后我还知道貌似openwrt还是哪个路由器固件系统里面貌似用的Lua来做各个功能的模块。仅此而已,我觉得没什么太多惊喜。
**javascript** 浏览器上的霸主,基于宿主平台的。这两年比较火应该和Google的一个项目V8有关,是一个高性能的javascript引擎,chrome浏览器的高性能估计就是因为V8受益不少。所以开始有人折腾node.js 这个平台,mongodb里面貌似也用的javascript作为操作语言。
简单的讲: javascript语法是非常简单的,容易学,有很好的东西,也有很糟糕的玩意。
很好的东西我认为就是它特殊的对象模型(貌似学习的self语言),它的对象模型、函数模型、复合数据结构是基于统一模型的(至少从外观上是一样的,底层实现是否相同不清楚),这个特定的优势是可以将代码和对象像基本数据(浮点数,字符串)一样传递给一个函数,这个功能是非常强大的(懂行的应该知道这个特性会意味着代码可以非常灵活而强大,不懂的人估计根本不知道这个特性对编程的意义)。
很糟糕的东西我认为是基于全局对象的全局变量,还有5种表示逻辑假的常量——这是灾难。所以我认为它的语法需要被好好整理下。而且个人认为Lua和javascript不大可能成为一种通用编程语言。
下面是我目前比较喜欢的编程语言
Lisp 自己google去,我不想花费大量时间去解释这门伟大的语言——无以言表。
Lisp是一个家族,旗下有不同的衍生语言。elisp——emacs就是用这个开发的,CommonLisp 是一个通用的标准,和它相对的是一个scheme。目前发展势头比较猛的是clojure。
要解释Lisp的优势可能要花上面所有的篇幅,因为实际上这已经不是一门编程语言的优势,而是一种构建程序的方法的优势,因为它是如此与众不同,所以解释起来需要大量的篇幅。
下面粗略说几点,具体的内容先不展开
优点:
1、几乎无限的表达能力
2、几乎无限的抽象能力
3、1+2 代码重用的无穷潜力
缺点:
要掌握这门语言,就要把你原先学过的其他编程语言的所有东西都丢了,不要指望在这门语言里面去找与其他语言类似的东西。——有点欲练此功,必先自宫 的意思。因为思维方式彻底不同,脑袋不是很灵活的人会很痛苦。
上一篇: sql - group & having example
下一篇: PHP进程锁的有关内容