当初年轻,写Python真的是觉得很爽,看到垠神在博客疯狂diss Python的时候,我是很不服的,后来吃了苦头才知道错。
性能是一方面,但根本不是最重要的,最重要的是动态语言带来的先天缺陷。
很多人都不明白人在写代码方面往往只比猴子高级那么一点点,这也就是为什么编程语言的发展总是在加大约束(缩小错误范围)的条件下,再研究各种各样在这种强约束下的高表达力特性,典型的例子就是在写类型无关的接口的时候习惯了动态语言,也许会觉得duck typing用的要多爽有多爽,搞不懂为什么静态语言要花各种功夫去研究各种泛型特性(HKT、rank-n等等),可是不管是工程还是理论上,泛型带来的好处远远都比duck typing多的多,更利于保证程序的正确性,把某些猴子行为(名字写错、未定义使用、类型乱用等)停留在编译期,比如像go那样的垃圾语言,垠神虽然很多话都有槽点,但不影响这句话是非常客观的:go是自大狂和民科造出来的产品,奇葩得不行。
回到题目上,说实话Python真的不是特别适合做大型项目,不是说它做不了,而是不适合,大型项目都会涉及到人这个问题上,而人都是不可靠的,这方面Java要做的好一些。
集中同一回复几个争议的地方:
1.自大狂,说go爹自大狂也许激怒大家了,我对此感到非常抱歉。
2.go的语法,go的语法并不优美,当然,拿语法来喷一门语言是不具有说服力的,所以我从头到尾都没提过这个。
3.go的类型,它的类型系统真的很烂,连泛型都没有啊,作为一门现代静态语言没有泛型,很多东西表现起来是很蛋疼的,有些人还觉得用interface{}+动态反射一样把类型处理得很好,那是完全不一样的,这种方式根本就没办法在静态期处理掉一些不安全的错误。
4.go和分布式,说实在话,把分布式和go强扯到一起有点牵强啊,写分布式系统最重要的难道不是要求苛刻正确性的领域吗,大家都在研究分布式系统中如何保证一致性或者提高可用性,不多看看论文,到处听别人吹逼就觉得自己也会分布式了?
5.没有垃圾的编程语言,只有弱鸡的人,这可能是我每次在谈论编程语言最厌倦看到的话了,不要假设人这个东西有多强,人在犯错方面的天赋是无与伦比的,有点经验的程序员都会对不确定的情况充满敬畏,而糟糕的语言浑身都是不确定性,所以不要低估语言一贯的坑爹水平。
6.在编程语言方面,抱歉,有类型,真的可以为所欲为。
7.我好像被误以为是Java程序员了,其实不是,只是学的语言有杂而已,这里再多说其他语言好了。
8.Java,总的来说,Java整体是个不错的语言,特别是对于大规模的工程来说,语法罗嗦的问题其实没太大问题,IDE可以很方便做好,Java的优点也是缺点是,太中规中矩了,所以干一些特殊需求(炫技)的代码有点绊手绊脚。
9.C++,人类补丁精华啊,C++17大家都对这货有很好的期盼,concept、module、network、coroutine等诸多特性还是没能正式加入,后面20继续补丁吧,也加了一些有实际用途的constexpr if,这货在写模板代码的时候还是很有用的,C++缺点太明显了,继承自C的一些鬼畜类型,比如设计糟糕的隐式类型转换,由于补丁的问题,整体太复杂了。这里再讨论一下语言和能力的问题,能力再强的人写C++模板的时候都会为了屎一样的错误信息抓狂,不要以为他们多有高级,别问我为什么知道的:)
10.rust,和go一样,都是看到了C++的问题而做的改进,go觉得C++太复杂了,所以尽量设计的简单,结果太简单了,该有的东西没有。rust则要激进的多,长期写C++并且相对激进那帮人看到rust还是蛮兴奋的,后来他们就开始拿rust造轮子,比如链表。。。rust的很多设计都非常棒,而内存管理,我一直觉得lifetime设计是不是过于严格了,导致新手写rust的时候基本都被rustc弄到心态崩溃才能熟练对待,后期可能会有所改进吧。
11.lisp方言,就个人而言,我是非常非常喜欢s-exp的这,这才是真正简单而具有强大的表现力的语法,如果我要给自己平时写的轮子加上脚本语言,我一定首要考虑lisp。lisp方言很多,比如racket,前身plt scheme,自己写解释器学习的时候是个不错的工具,elisp,嗯,作为一门操作系统的脚本语言还是可以用的,比起辣鸡vimscript要强很多,vim党表示心痛。
12.haskell,我强烈推荐还没意识到类型系统重要性的好好学学haskell,当然,我的haskell水平十分业余,因为我老是被拐去学数学。。。
JavaScript/PHP,比Python还垃圾。。。
13.Ruby,总的来说写过一段时间的Ruby,也见识到了传说中的强大元编程能力,但是说实话我并不是很喜欢,有时候对语言本身的魔改是需要非常的谨慎的,如果是你一个人读代码那没有问题,但还是人一多就会造成各自理解的问题。
欢迎来喷,希望大家都能喷到点上。
一个程序员学习平台分享给你们,让你在实践中积累经验掌握原理。java基础、入门进阶阶段资料都有的,其中包括了学习视频、电子书、项目和面试资料,需要的可以加我的Java学习交流群:282711949。
网友评论