笔者只用过java和C#,js只是看了点皮毛。对于ruby,python,go,lisp等网络上常见的语言一窍不通。并且,限制于个人能力,对java和C#的认识也并没有很深刻。
想请对编程比较有功底的同志说说自己对各种语言的理解,包括他们的优劣。发表观点时,请尽量具体。
抛砖引玉
1.java的编程效率不是很高,特别是相对于C#来说。比如,C#中可以使用lambda表达式优雅实现的功能,在java中必须要写大量的,繁复的代码才能完成,且可读性较低。GUI编程更不用说,vs的窗体设计器相对eclipse或者intelliJ idea的窗体设计器要先进一个时代。
2.java的开发工具和vs相比有较大差距。之前java开发时使用eclipse,现在改用intelliJ idea,后者相对前者有较大幅度的提升。但是相对vs,还是有一些差距。比如在开发中时常遇到版本管理工具出问题。代码部署不及时(eclipse也有此问题)。
3.java编程感觉不好,不爽。感觉java不会为程序员考虑,比如C#和android的库中都有 string.isnullorempty()类似的函数,但是java中就没有,实现此功能必须if("".equauls(var) || var == null)。类似的地方还有很多。相对地,C#就提供了相当多的语法糖类的机制,将编程变得更加简单和高效,对程序员也更加友好。
更新
1.想把题目修改成“谈谈你对自己熟悉的编程语言的理解”,无奈segmentfault不支持修改问题的标题。其实我只是想让您说一下自己对比较熟悉的编程语言的理解(在语言层面上、具体地说明),并且在这些谈论中,能让人对编程语言有更加深刻的理解。
2.本题的目的并不是想在众多编程语言中进行比较,选出谁最牛逼。可能由于我的原因(在我举的例子中,不自觉的将java和C#相比,其实,我的初衷只是在比较中说明问题而已),但是请接下来回答的同志们了解这一点。
3.有些同志谈到了语言生态层面,并且见解相当独到和深刻,但其实,题主更想看到一些语言层面上的东西。
看来题主不太喜欢java。只要看我的用户名就知道了,我是java粉。题主在字里行间都流露出对C#的赞美之词,难道题主不知道“PHP是世界上最好的语言”这个真理吗?
________________________________________
你只要说出1个java的缺点,我就可以说出来10个C#的缺点,但是这样的争论完全是浪费时间。
我很同意题主的观点,单论语言层面,C#可以甩java几条街。如果同易用性来讲,windows也可以甩linux几条街。甚至,在浩如烟海、成百上千的android机中,肯定有几款在iphone之上。
就好比我们相亲时,第一感觉肯定是被外貌所吸引,“大波、浪”只是我们做出选择的一个方面,但不是唯一。
我可以以java粉的身份告诉你:在企业开发领域,java是当之无愧的王者,微软为C#烧了那么多钱都无法撼动,难道ruby、PHP可以?哪怕是最火的nodejs,在web领域可以和java抗衡,而且java也已经败了,但是在企业开发领域,java是最好的,没有之一
java就如同iOS,如同*nux。也许java有很多缺点,IDE不如VS,易用性不如PHP,异步不如nodejs,但是,企业依然选择它,因为他不仅仅是语言,而是一整个生态系统。
1024核配32G内存的android就算比iphone快100倍,我依然认为iOS是最好的手机操作系统,是因为他的整个生态系统,而不仅仅是一部手机。
虽然PHP是世界上最好的语言,但是java有世界上最好的生态(目前)。
---------------- 2014年10月18日17:22:16 更新------------
看到你又补充了问题,“就语言层面”来讲,一般是:越是后开发的语言,越优雅。比如C# 比java优雅,PHP比perl优雅,而且,各种语言也都在相互借鉴。
如果java不够优雅,可以试试Scala。不过C#不够优雅,可以试试F#。不过JavaScript不够优雅,可以试试CoffeeScript。
再者:没有不优雅的语言,只有不优雅的程序员。
一个伐木工每天用斧头伐木,后来他听光头强说,电锯比较好用,不仅省力,而且快。
于是他买了电锯,抡圆了朝着树干砍去,……于是他哭着说,童话里都是骗人的。
不是电锯不好用,而是他不会用。
有人说LISP优雅,那么写个操作系统试试。有人说C优雅,那么用C做个网站试试。
哪些说C#优雅的,把VS关了,打开st、vim写个网站出来试试。
Lisp(系)
各种思想的老祖宗。据说越像lisp的语言越牛逼(误)
学术价值宇宙第一,实用价值较低,不明觉厉
C
可以做任何用处,但最大的用处还是写写操作系统和编译器之类的,一般人用起来只能添乱。重剑无锋,大巧不工
工程性0,lisp度0,底层亲和型100%
宇宙主流语言中年纪最大的语言
C++
为了让一般人也有饭吃,从C衍生的变种。写C需要一群高手,但C++只要一个高手把架子搭稳,一般市民也能写代码啦。写代码能谈得上是“工程”了
问题是搭架子的人如果水平不够,或者一般市民不听那个人的,那也是一场灾难。
宇宙中特性最多的语言
Java
为了让半瓶水也能搭出能用的架子,工程性点到满还有些溢出,派生出了邪教“设计模式真理教”“OO拯救世界教”“全家都是接口党”等
由于邪教干扰,老东家不利索,新东家坑爹等等天灾人祸,原本应当更伟大的全领域语言在桌面GUI方面只有IDE方面所向披靡,服务端方面只有企业应用半壁江山。所幸天无绝人之路,老乡的谷哥把认他为义子,放进了安卓中,顿时前景又光明了起来
宇宙中最适合煮咖啡的语言
ObjC
不怎么了解,展示了肾教淫威的语言
但从语言角度来说,完全躺在一个干爹怀里是很不好的征兆
宇宙中开发环境最贵的语言
Python
大法好。独树一帜的语法,巧妙的设计,文武双全。小可以随手作脚本,大可以承载大型工程。漂亮的数据结构和模块系统。
可惜版本分裂得厉害,进入3以后就没有以后了
宇宙中最关心空格的语言
Ruby
小清新。独树另一帜的语法,另一种巧妙的设计。据说实现需求速度飞快。
magic就是那种看上去无比优雅风骚性感,实际工业开发的时候发现千人千面,难以查错难以维护的风格,ruby以此为荣,所以我觉得始终摆脱不了玩具语言
不得不提到的是gem体系引领了第一波github的狂欢
宇宙中名字最高贵的语言
Javascript
平淡无奇的语法中蕴含了不亚于ruby的“Lisp度”或者说元编程能力,但没人能想到真正使Javascript爆发的是原因来自于他non-block的天性。这个为异步而生的语言被Node选中,成为了完美的异步服务端脚本语言。
没有namespace的JS通过“每个库把自己的依赖库重复装在自己目录里”的方式,暴力解决了依赖冲突的千古问题。然后又恰逢HTML5迎面而来,于是天时地利人和,顺势成为社区最火的语言,github trending保持占领一半位置
不过没逃过“灵活”的语言的通病:难以调试、维护、查错。需要lead programmer严格把控整体风格。
宇宙中“我会JS”涵义最丰富的语言
PHP
全宇宙最好的语言
主流语言中唯一主动聚焦于单个场景的语言。“克制”是PHP语言设计的不二法门,早年主要参照C和Perl,有限地借鉴perl的特性,没有让整个语言都 “动态掉”,5.0后开始注重工程性,大致借鉴Java,也是一步一个脚印,慢慢地借鉴,抄一行,停下来改自己三行,融会贯通以后再继续抄。
于是现在的PHP恰好站在一个非常平衡的位置,同时兼具一定的动态能力和较高的工程性,动如Laravel让人感叹RoR再世,静如Symfony、ZF让人以为回到了Java的世界。
从不参与讨论编程语言,闲来没事,吐吐槽吧。
工作以后我也是使用C#,对C和C++还是有割舍不去的情怀。现在主要的语言已经是javascript,java没有用过,php也稍微有了解。
C#从语言层面上还是非常优秀的,企业里面"微软粉"都喜欢。说到IDE,以前觉得vs各种牛逼,现在觉得vs就是内存杀手,功能臃肿,恨不得不用。windows从实用角度是很好,但是如果作为服务器真是对它恨的无语,对windows的态度也逐渐转移到编程语言的平台上。现在只用C#做一些后台接口实现,表现层全部都是其他技术。只恨自己没办法完全抛弃windows。
java没用过,从语言角度无法判断。但是单从跨平台和生态上肯定是绝佳选择,因为开源和linux的整个生态系统都比windows要好。
C\C++由于执行机制与现代语言完全不同,只用在一些偏底层的东西开发上,对程序员素质要求十分高,包括内存管理,操作系统的很多细节,跨平台能力等等。我只在以前玩单片机的时候使用过。
javascript作为脚本语言还是非常好用的,虽然有很多的坑,但是有些地方比静态语言好用很多,像你说的String.IsNullOrEmpty(),一个if(!a)就搞定了。不过对于node.js,我还是很怀疑(node粉勿喷),所谓的异步编程,只是提高了单台服务器的并发能力,而非处理速度,所以要慎重考虑,勿随大流。
php是为web开发而生的,用过之后直观的感受是太好用了,各种复杂的功能,只要一个函数调用就搞定了。比如在处理请求时请求其他的url,直接用curl,用C#和java写的话茫茫多的代码。
python、ruby之流也有很多死忠粉,本人也用过一点点,觉得吧还是很方便的,都差不多,各有千秋吧。感触是编译器和解释器真的是越来越智能了。
最后,个人认为,单纯讨论语言是没意义的。选择一种技术要考虑很多方面的因素,比如人员现有能力、素质、学习成本和时间、试用范围。
C#的优点: c#是一个很不错的语言, 比起java简洁,方便. lambda写出来的代码简单,容易阅读和理解,真的很不错. vs也为c#加分不少. vs的智能提示比起idea和eclipse好太多了,流畅, 超快的反应,打字多快都能响应过来. 可以用空格来选中备选的项目. tab可以生成事件方法. 感觉vs经常能猜对你想要打的代码. (vs对c#的支持很完美, 对html感觉没有idea(webstorm)好). 我一直在用c#, 然后去学java, 被开发工具折腾得吐血, 再加上java的语法没c#简洁, 学习的过程很难受.
c#也有缺点:
1. .net4.5不支持xp. 多次要求客户用win7,无奈xp还是比win7多. .net4.5的特性想用也用不了. 只有转向服务器开发了.
2. 在linux使用c#不方便. 虽有mono, 但不看好前景. (之所以要用linux, 是因为打算使用云服务)
3. c#绑定在微软的平台上, 开发个网站都要使用复杂的iis, 比起nodejs和go构建一个web server只用几行代码就做出来. 才意识c#被束缚了.
4. c#开发多线程复杂了. APM,EAP,TAP,TPL 也就是后两个比较方便, 无奈xp不支持, 使用得不多. 后来看到go的channel才发觉, 多线程原来可以这么简单. 就跑去学go了. (当然我的多线程水平还是很低的,这里只是个人感受.)
我也就是写写小程序的水平, 也不知道企业开发是什么样子. 就是觉得c#使用起上来比较顺手, 只是受限于微软不能全部发挥出来.
凑个热闹, 在会编程之前就一直在考虑怎么选一门喜欢的编程语言用一辈子, 一直在关心这个问题.
目前我基本上是写 CoffeeScript, 学了点 Go, 另外学过一些会语法却不能写东西的编程语言.
我在微博上做新闻搜集的事情, 所以一直不停在关心社区编程, 积累了一些看法,
参照 O'reilly 提供的这份图表, 很多关于编程语言的理念显得清晰一些:
http://cdn.oreillystatic.com/news/graphics/prog_lang_poster.pdf
工程与理论
从最初编程语言发明, 上世纪六十年代, 就有理论派工程派鲜明的区别,
现在还有生命力的主要是 Fortran 和 Lisp 两个方面, 如果把 C 归类到 Fortran 就是 C 跟 Lisp,
沿着 Lisp 发展的主要是 Common Lisp 跟 Scheme, 还有从 ML 发展而来的语言, 特别是 Haskell.
到 Haskell, 函数式编程的理念非常鲜明, 代码就像是在写数学当中的函数,
而 C 之类的语言, 大致可以说是命令式编程, 大部分的语句都从状态操作, 特别比如赋值
当然 Haskell 作为编程语言也是要处理状态的, 只是用了高级的抽象做了复杂的封装, 叫做 Monad
Lisp 虽然好一些, 但是很久以来函数式编程语言依然是研究人员才惯用的语言
函数式编程的研究当中有很多理论上很赞的技术, 比如递归, 惰性计算, 并行计算, 类型推断
甚至 Haskell 跟 Lisp 的代码在观感上都比 C 风格的语言漂亮一些, 严谨的缩进, 繁多的符号
而这些特性慢慢也开始进入到流行的编程语言当中, 比如 CoffeeScript, Swift 当中
Fortran 一脉的编程语言也一直在改变着, 我对 Fortran 了解不多
舞台上主要是 C, 还有面向对象的鼻祖 Smalltalk, 到后边还有 Java 的流行
命令式的代码相对容易学习, 相对函数式语言来说性能又高, 已经成了主流
问题也存在, 比如 Java 缺乏函数是语言那样的灵活性, 开发工具复杂(我不写 Java)
另外的问题就是依靠维护状态, 代码的抽象程度不那么高, 写 C 代码并不轻松
脚本语言
九十年代以前发生了很多事, 可以看到有很多编程语言, 不过对我们这代人不熟悉
九十年代以后 PC 市场快速增长, Linux 社区发展, 机器性能大幅提升
脚本语言跟着 Web 很快推广, 做服务端的 Ruby, Python, PHP, 前端的 JavaScript
脚本语言性能差但是很廉价地吸收了多种编程语言的优点, 比如函数式编程, 消息机制, 自动 GC 等等
更重要因为简单易学, 同时集合多种编程范式, 带了巨大的编程效率的提升弥补了性能的差距
从最初简单的区分现在已经发展出大量的语言, 而且语言特性的组合也多重多样
比如从 C 而来的 Go 支持 Lisp 函数作为一等公民, 支持一些类型推断, 像 Lua 的多返回值
JavaScript 模仿了 Java 的语法, Scheme 的函数式编程, Self 对象系统
而 JVM 和 JavaScript 也能作为汇编级别的语句, 其他语言编译到目标来运行
Lua 和 JavaScript 应用在 Smalltalk 和 Self 研究当中的 JIT 技术对动态类型进行性能的优化
Lisp 方言比如 Clojure, 编译后在 JVM 和 JavaScript 的平台上运行等等
编程语言的功能主要是将计算机的计算和存储能力作为资源, 通过语言提供给开发者
而这门槛将被人群和公司驱使而越降越低, 甚至到人人都能写能干点事情的程序的程度
特定的领域除外, 通用的编程语言都会有比如自推断类型, 自动 GC 之类功能
数据结构趋向接近, 支持函数一等公民, 支持对象或者接口, 呈现出更多的统一和智能
脚本语言之外, 还会有图形化工具等等出现, 进一步降低门槛
喜好
在这样的情景下, 加上我个人的喜好, 我倾向于选择更灵活的编程语言, 最低成本做更多事情
后边说的语言大部分我没深入学习过, 而且也不考虑实际开发需要和社区如何
我认同技术是人类的延伸的想法, 认为编程语言是大脑的思维和语言的延伸,
那么我对很多的语言会带有比较明显的好恶, 下面是我接触较多的一些语言
• JavaScript
出了名的语法设计存在大量的坑, 早期没有经过深思熟虑, 更没有预见后来的发展
作为一门弱类型的脚本语言, 支持的功能和数据类型不那么多, 被怀疑构建大应用的能力
我做单页面应用当中确实感到做大项目有些难以维护的混乱在里边
另外比如 ES6 之前语言自身不实现的模块化机制, Generator, 简直让人抓狂
JavaScript 优点是模仿 Scheme 实现了函数一等公民, 而且也能胜任 Web 复杂的脚本和异步逻辑
Prototype 模型作为比 class 更灵活的方案能够模拟 class, 因此也能模拟面向对象编程
当然脚本语言的简单使得 JavaScript 非常容易上手和在浏览器当中的看到成效
支持多种编程泛型也给了更多的选择的余地, 模拟函数式或者面向对象都可以
• Lua
每当觉得 JavaScript 设计得不好都会对比下 Lua, Lua 是脚本语言当中以严谨著称的.
不过听说 Lua 主要是在游戏领域发挥效果的, 社区发展和调试工具不如 JavaScript
Lua 语言实现在编程语言设计当中都可以作为教学的例子, 语言极为精简
语言的核心, 数据结构, 基于原型编程等等, 和 JavaScript 有很多的相似性
• CoffeeScript
我个人对 JavaScript 繁琐的语法感到非常难受, 而 CoffeeScript 无疑是最主流一个改善的方案
CoffeeScript 的语法主要来自 Ruby, 也有不少 Haskell 语法的特征, 但功能还是 JavaScript
这样做的好处是想有 JavaScript 完善生态圈的同时得到了一门漂亮的精简的编程语言
• C
很重要, 但太底层了, 我想要做应用, 很不情愿付出巨大的代价去深入 C
做图形的应用, 很重要的是架构层面的 MVC 设计, 以及界面的设计
我更情愿认为 C 是特定领域比如编程语言, 操作系统, 互联网底层架构需要的语言
• Go
Go 相对于 C 在开发流程, 语言特性, 数据类型, 语法这些方面做了巨大的改进
就像 Rob Pike 说的, 这是适合构建云平台的语言. 而且 Go 在工程上真的非常棒
Swift 的做法我感到是认同了 Go 对编程语言做的那些激进的改变
对我来说重要的一点是 Go 使得静态类型的开发效率和体验更接近脚本语言了, 更适合应用
另外 Go 去掉了从 C 语言延续近三十年的无谓的分号, 我真的很赞成
Go 的 CSP 并发模型, 还有基于 Interface 的整个编程范式, 两点挺特别的
其他主流编程语言很少这样做, 但是, Go 的作者都是大神, 语言也渐渐主流, 这也够了
我认为 Go 是非常值得学会并且以后在工作当中应用的一门语言
最近听说 Go 因为可以用于 Docker 编程而被 Docker 带来大量人气, 算是好消息
• Swift
语法非常赞的编程语言. Playground 的设计更是让人眼前一亮
原先 Playground 的设计出于的是编程状态的不可见性这个问题, Swift 在这里做的很棒
还有细节上 Optional Type 处理, 或者其他的语法细节, 做的很漂亮
不过目前局限在 iOS 开发, 另外也受限于 XCode 跨平台的问题, 只能说保持关注
• Java
很成功, 但是从一开始接触 Java, 就被语言的僵化吓住了, 而且开发工具很臃肿
比如我写很小的应用, 我在 Web 平台上写 HTML, 写 DOM 操作搞定了, 很简单,
换成 Java 我需要考虑各种事情, 甚至学习面向对象什么样, 开发工具什么样, 天呐
• Clojure, CloureScript
能算是 Lisp 社区目前最潮流的的语言吧, JVM 方面了解不多不说了
ClojureScript 的话, 最近因为 Om 框架开始多上心了, 因为函数式编程思想有明确实用的地方了
React 当中带来了函数式编程当中 Immutable Data Structure 很赞的实用的例子
同时 ClojureScript 当中丰富的函数也让我觉得比 JavaScript 更能胜任 React 的编程方式
Clojure 语言的设计是很棒的, 我非常想学习这么语言, 而且关注了许久
对我来说缺点是 Clojure 整个对 Java 依赖太重了, 我有点玩不转
而且其中源自 Lisp 的那么多特性也有些晦涩, 学习的门槛实在不低...
目前基于 Clojure 的创新很多, 比如 LightTable, 我在 Twitter 上关注的作者很有远见
• Haskell
目前我心目中最漂亮的编程语言, 看到 Haskell 代码会觉得现在写的东西真低端啊
Haskell 当中有纯函数的限制, 所有状态操作都用 Monad 封装, 让我非常难学会
但是从数据转化方面来说, Haskell 对于列表等等的处理非常非常优雅
Haskell 当初是为了研究编程专门发明的, 语法继承了 ML 等等语言
现在和 Lisp 一样, Haskell 出现了大量的 DSL, 或者说方言, 都显得非常学术化
其中一门方言是 Elm, 是跑在网页上的 Funtional Reactive Programming 的试验
我不清楚怎么说, 但是其中先进的图形界面开发的理念我深深感到多年后会成为取代现在的开发方式
而 Haskell 语言也是, 她的很多特性突然会出现在编程语言的新闻当中, 比如类型推断, Monad
总之是非常重要的一门编程语言, 即便用不起来, 学了还是有收获
因为我从事iOS和Android开发,所以我最熟悉的编程语言是C++,Java,objC(Swift还没开始用),此外还写过一些C,Assembly和Ruby。下面逐一说一下我对这几门语言的看法。
• Assembly
写汇编就像是不带翻译跟计算机硬件(经过一定程度抽象的硬件)直接对话,计算机硬件不会因为翻译失误而曲解你的意思,你让寄存器,内存和IO端口做什么, 它们就老老实实照着做,每个bit都在掌控之中。学习汇编语言能让你看透各种花哨的高级语言,它们终归要被翻译成汇编语言。
汇编语言其实可以大致上理解成就是CPU指令集,它表征着CPU可以命令硬件做些什么,用汇编语言写的程序不能在不同指令集的CPU之间移植。
• C
C语言解决的就是这个在不同指令集CPU之间移植的问题,用C写程序虽然也要操作内存,但是并不是直接操作内存上的每个bit,你不清楚你的变量会被存在具体哪个内存地址,也不清楚有哪些寄存器,它们在算数和逻辑运算中起了什么作用,这就把程序员从硬件差异中解放了出来。不过C程序还是要针对不同的软硬件平台(软件指操作系统,其本身一般也是C写的)进行编译的,否则跑不起来。这就意味着C程序编写的时候虽然可以很大程度上忽略软硬件平台差异,却要在每次移植到新平台上时都要重新编译。此外由于C需要覆盖太多参差不齐的平台,从各式各样的单片机到各式各样的电脑,决定了其抽象层次还较低,还掺杂着一定程度的平台相关的东西,因而保证不了同一份代码在任何平台上都编译通过。
• C++
C++兼容了绝大多数C的语法,但类型检查更严格,不像C一样对变量声明的位置做严格要求,引入了面向对象机制和类库,有诸如运算符重载等语法糖,可读性比C强也更易于编写和维护。C++既继承了C强大的底层操作特性,又被赋予了教科书式的面向对象机制。它特性繁多,有其他面向对象语言鲜见的多继承,有耐人寻味的对值传递与引用传递入木三分的区分以及const关键字,等等。C++就像是一把瑞士军刀,或者像是一个工具箱,它为你提供尽可能多的工具,多到让不熟悉它的人无所适从,让懂得如何使用它的人如鱼得水。C++的种种特性使得它非常适合用来编写底层数据结构,算法,库等,是系统软件开发以及数学模型构建等的强大武器库,被誉为工业级编程语言。
• objC
与C++一样,objC设计原则之一是兼容C,但是它在跨平台上较C/C++相去甚远,虽然最初并非由苹果开发,却已实质上沦为苹果一家的专用语言。这门语言的优点不多,我只想到两点。一个是可读性强,读起来就像是读英文,如果方法命名得当无需注释。另一个是傍上了苹果,苹果的MacOSX和iOS平台的应用框架就是用该语言写的。如果你从事Mac或iOS开发,objC有天然的优势。在苹果平台上唯一能撼动objC地位的,恐怕就是苹果自家推出的 Swift了。
• Java
这是一门中规中矩的面向对象编程语言,对设计模式的条条框框提供语言级别的支持,使用Java开发软件就像是用钢筋水泥砖瓦盖楼一样,它与C++一样被冠以“工业级”的称谓,但更多时候与Java一同提及的是“企业级”。与C/C++/objC等纯粹的编译型语言不同,Java的编译很不彻底,实际上是编译为一种跑在Java虚拟机上的中间代码,Java编译器只针对Java虚拟机进行编译,而具体的平台细节交给虚拟机去填平,这使得凡是安装了Java虚拟机的地方都可以跑Java而无需重新编译,这是比C/C++/objC更高一级的抽象,因而论语言级别的话,Java是比这三种语言高级的语言。C#与 Java大同小异,可以认为就是微软版的Java。
• Ruby
这是一门非常花哨非常灵活非常俏皮的语言,它虽然号称是彻底的面向对象语言,风格上以及面向对象机制上却与主流面向对象语言大相径庭,相比于主流面向对象语言,它显得太不严肃了。Ruby最大的特色是metaprogramming(译为“元编程”),连类这种主流面向对象语言中作为对象模板的东西,在 Ruby里都可以在运行时被随意修改,Ruby是一个很讲究平等的语言,没有什么是神圣的,一切对象(包括类,闭包等)在作为Ruby的公民这一点上都是平权的,这或许是它宣称面向对象很彻底的理由。Ruby的特性也非常丰富,实现同一种功能可以有多种写法(据说Python正相反),写Ruby就像是捏橡皮泥或者玩一个可以被随意拧成各种形状的气球,你甚至可以基于Ruby创作出新的语言,Ruby的一大用途就是编写DSL(domain specific language)。
Ruby的强项是去除重复的代码,比如某些方面类似的方法可以批量定义和删改。作为解释型语言,Ruby也被称为是一种脚本语言,虽然它的设计初衷并非只是用来写脚本,但是它的确非常适合用来写脚本,可以让繁冗的批量处理数据和文件等任务变得更易于编写。
虽然Ruby出名是因为Rails,但是Ruby语言本身远比这个用它写的框架有韵味的多。
• 觉得坑就不要去用eclipse。除了启动慢,耗内存,一卡一卡之外,我身边的程序员吐槽“拿它debug相当于给它debug”。 intelij的智能提示比vs不知道高到哪里去了,就连衍生的android studio也跟着好用了。当然,就连netbeans也比eclipse好用不知道多少倍。
• java的坑不少,特别是只有它和c语言不能用双等号比较字符串。但是它毕竟相比起c++来说已经填了不少的坑。同样,c#比它晚些时间被创造,填的坑更多,现存的坑更少。而java由于历史包袱不能轻易得改动某些api,这也属于正常现象。
https://segmentfault.com/q/1010000000727790