对各种语言的偏见

原创 2015年07月10日 17:33:09

对各种语言的偏见

这大致是我编程语言的学习经历:

  1. 2003年学html/js
  2. 2004年开始学C
  3. 2004年学C++
  4. 2005年学汇编和C#
  5. 2007年学PHP
  6. 2009年学Python
  7. 2013年学GO,深入学了JS(JQuery,AngularJS)
  8. 2014年学Java(Android)
  9. 2015年学Scala(Spark)

我虽然没有发明一门语言,但这些语言都用在实际不小的项目中,作为使用者对他们我想说说我的偏见。

C++

我觉得C++比较恶心的东西是:

  1. 模板:这个东西真的考验智商,也可以作为装逼神器,几乎水平不怎么样的和超级大牛(万里挑一的那种)会喜欢用模板。现在我从来不用,SRS中只有SrsAutoFree和SrsProtocol用到了模板,没有办法必须得用。
  2. 运算符重载:这个东西好多人喜欢用,真的很傻逼的功能,好好的函数不用,要用奇怪的符号,严重影响可读性。
  3. 多重继承:这个也是装逼神器,SRS中还有不少多重继承,但是都是限于继承接口;类的多重继承,恶心的东西,接口的多重继承挺好用的。
  4. C++11新特性:这些新特性都是作死的东西,还嫌语法上不够么?现在这个样子已经足够可以写出难懂的代码了,还要造更多奇怪的语法。SRS坚决只用ASCII C++,也就是C++98标准。
  5. boost和poco:两个巨无霸,我勒个去,从来不敢用。一个超级功能的库,就会背离软件的核心——软件这种人造产品只能解决一部分问题而不能解决所有问题。
  6. 崩溃:各种崩溃,各种越界,如果是assert导致的还好查一点,如果是越界就真的只能靠神仙保佑能查到是哪个地方导致的。

我选择C++的原因,它了不起的地方:

  1. 类:析构和构造,以及类对于问题的简化,也就是所谓的OO,这个还是广泛应用的,就算是C中也是有各种伪造的类的方式,譬如内核的File Object。
  2. 虚函数:有些函数是虚的,也就是在某个地方不知道,但是没有关系不影响整体的逻辑,这个可以让DIP、接口、抽象基于这个技术实现,是非常有用的神器。
  3. STL:虽然STL本身是模板写的,但是这个库提供了常用的数据接口,而且性能很好,这个很赞。
  4. 高性能:SRS是服务器,用C++的唯一理由就是因为性能,C和C++编译出来的程序,性能没有什么差异,在于怎么写的了;而其他语言,譬如GO,就是好好写也达不到C++的性能。原因在于很多时候,特别是对于内存操作不可避免的业务领域,C++提供对于内存的管理,是非常强大的。

Python

我觉得Python恶心的地方包括:

  1. 性能:Python的性能真的好差,凡是有性能要求的地方,就不能用Python。居然还有个rtmplite(Python写的RTMP、RTMFP服务器),是挺轻量级的,然而有什么卵用?只能当做学习和原型。
  2. 兼容性:Python最奇葩的是,竟然Python3造出来几乎没有用,都在使用Python2,而且两个版本不兼容,我勒个去,搞什么鸡毛。
  3. 字符集:Python对中文支持不好,额,确实支持得很麻烦。GO在这一点上花了大量精力。
  4. 打包:Python打包会出各种奇葩的问题,什么cxfreeze,什么pyinstaller,挺多的就是不靠谱。

我觉得Python牛逼的地方包括:

  1. 完善:Python实现复杂的业务逻辑很方便,各种框架,数据库支持得好,稳定性好,协程库也挺好用。对于没有啥并发的复杂业务系统,Python最合适。
  2. 依赖少:Python解释器几乎在所有环境都有,所以不需要其他依赖就可以跑起来,如果打包出来,和C++一样可以不依赖系统。

GO

GO的想法真的是很好,搞一个C++和Python的结合体。我觉得GO恶心的地方是:

  1. interface{},这个是GO最傻逼的地方,一个object,非得用这么长一个表达,额外加个关键字有那么难么,搞这么长一个东西,读起来非常难以理解。
  2. 性能:其实GO的性能相当高了,但是和C++相比,还是差不少。GO难以做高性能服务器,特别是频繁操作内存的那种,譬如流媒体。

GO牛逼的地方:

  1. 几乎目标都实现了,除了上面两个不那么致命的点,所以我觉得GO确实了不起。
  2. 并发:GO的goroutine,以及多核优化,确实做得相当不错。go-sharp是一个高级反向代理,可以作为多进程SRS的反向代理。
  3. 错误:GO的panic其实有点难以理解,不过它本质上是采用了C的错误码的方式(error),不过在goroutine里面捕获致命错误(panic),这种兼顾考虑其实也不错,挺好的。
  4. 完善度:GO的库还是越来越完善,特别http都加到语言库里面了。但是GO并非解决所有问题,我觉得从这点来看,GO做得很好。
  5. 打包:GO对于编译优化,打包和部署有自己的一套,这个做得确实不错。

GO是除了C++之外,唯一有新的想法的语言,也就是GO要理解起来没有那么容易。

Scala

我见过最散漫的语法就是Scala,恶心的地方是:

  1. 混乱:语法过于灵活,水平高的人能掌握,实际上一般人都会写出火星代码,特别对于中国人来讲,没有同理心情商极低,基本上写出来的Scala代码不可读。中国人写的C都像火星文,那么严格的语法都可以糟蹋成那个样子,何况目标就是可以随便写的Scala?!

Scala比较不错的地方:

  1. 函数式:其实Scala和Python超级像,比Java确实强多了。
  2. Spark:这个大数据框架用的Spark,不学Scala也没有办法。

JS

JS是前端语言,JS垃圾的地方是:

  1. NodeJS:这种把JS作为服务器的方式,基本上是开发很快,差错很难,维护不可能。别作了,这种异步回调,而且调试不方便的东西,做服务器是什么企图啊!这是一个万能语言的典型失败例子。
  2. Nginx脚本:据说Nginx准备用JS作为服务器脚本语言,一个牛逼的服务器就要这么作死去了。FMS的脚本语言也是AS,也就是JS。服务器支持脚本语言,不过就是插上翅膀的人类,做梦能飞翔吧~

JS还是不错的,AS都是它的翻版,牛逼的地方是:

  1. JS作为Web前端,没有更好,确实做得不错了。
  2. 专业的库:JS的库从来都没有超级大的,都是很专业的库,譬如JQuery和Angular,都是鲜明的要解决一类问题。这种库确实很不错。

Use Something Good

人类固然能做到卓越,譬如李白写的诗,悟空经常说的四大名著之一金瓶梅,但是软件,特别是有用的软件,很难是一个人能做出来的。
因此软件本身最大的局限性,在于几个平常人,发挥自己的能力,做成单个人做不成的事情。关键点是:

  1. 解决部分问题,而不是全部问题。几个人或者几万个人,不可能做出一个解决所有问题的东西,那是神,而不是人要做的事情。
  2. 沟通是最大的风险。一个人写10万行代码,经历3年,在第2年时就会忘记第一年的代码是什么意思。自己和自己沟通都有巨大风险,更何况一群居心叵测的家伙写的心怀鬼胎的代码,愿神保佑我们。
  3. 用语言、团队的长处。语言也是人的作品,团队也是人构成,不同的人有不同的长处,语言也是。因此在一个项目中,应用多个语言,是一个软件系统必须要做的事情。

SRS中用到的语言是:

  1. 高性能服务器:用C++写,目前没有其他语言能搞定。(用C不如用部分C++)
  2. 高性能API:用GO写,某些并发访问很高的API。譬如实时计算系统的客户端数据。
  3. 后端服务系统:用Python写,没有并发要求,业务逻辑复杂。
  4. Spark:用Scala,大数据,目前还在计划中。
  5. JS:前端的Bootstrap和Angular,还有JQuery。

这几种语言组合起来,挺好用的。

版权声明:本文为博主原创文章,未经博主允许不得转载。

对各种语言的偏见

对各种语言的偏见 这大致是我编程语言的学习经历: 2003年学html/js2004年开始学C2004年学C++2005年学汇编和C#2007年学PHP2009年学Python2013年学...
  • wishfly
  • wishfly
  • 2016年11月16日 23:07
  • 527

自我服务偏见

自我服务偏见(self serving bais)当我们加工和自我有关的信息时,会出现一种潜在的偏见,我们一边轻易地为自已的失败开脱,一边欣然接受成功的荣耀。...
  • lttclaw_
  • lttclaw_
  • 2014年12月28日 09:33
  • 555

交易偏见--《别做正常的傻瓜》摘记2

第二章 在消费过程中,正常人往往会受到交易效用偏见的影响,从而做出欠理性的消费决策行为。 合算交易偏见 交易效用,就是商品的参考价格和商品的实际价格之间的差额的效用。通俗点说,就是合算交易偏见。...
  • wangzengdi
  • wangzengdi
  • 2015年01月25日 10:26
  • 878

不确定性下的判断:启发法和偏见

代表性: 1.对结果的先验概率不敏感 2.对样本
  • pxm2525
  • pxm2525
  • 2014年09月30日 11:52
  • 1464

第7章 证据的效力如何

是什么类型的证据,可靠吗? 证据类型:直觉、个人经历、典型案例、当事人证词、权威或专家意见、个人观察、研究报告和类比 直觉 个人经历 会出现的问题 以偏概全谬误:一个人仅根据群体中极...
  • sinat_14889231
  • sinat_14889231
  • 2016年06月13日 11:47
  • 228

人工智能学习了人类语言后为何有了种族偏见?

去年3月,微软的人工智能(AI)聊天机器人Tay(小冰的美国姊妹版)在推特上线,可以与任何@她的推特用户聊天。短短24小时后,一个甜美、礼貌的“小姑娘”竟然开始脏话连篇,甚至爆出不少种族主义和性别歧视...
  • super_marie
  • super_marie
  • 2017年04月26日 21:40
  • 107

《怪诞行为学2》读书笔记,第三章 宜家效应:为什么我们会高估自己的劳动成果?

人们易于过高地评估自己的作品,这和人性的其他方面一样,是个装有好坏两种东西的袋子。我们的任务就是尽量发掘自己的优点,避免缺点。 实验表明一旦我们制作出某种物品,事实上就会把它看得更加可爱。 根据我...
  • qwertyuj
  • qwertyuj
  • 2013年04月22日 21:07
  • 1014

如何让AI系统摆脱偏见

编者按:朱熹曾经说:“问渠哪得清如许,为有源头活水来。”在人工智能的发展大潮中,繁杂多变的现实世界无疑就是推动技术进步的源头。但由于数据不可避免地会带有人类的痕迹,它们有时也会产生一些“偏见”。如何让...
  • Y2c8YpZC15p
  • Y2c8YpZC15p
  • 2017年12月11日 00:00
  • 17

偏见地图 :美国人眼中的世界

美国人眼中的亚洲: 中国就是个沃尔玛,恩,一定是羡慕我国物产丰饶人民心灵手巧;丰田最能代表日本(强势品牌软植!日产本田已哭死在路上),朝鲜半岛上的韩国也被打上了三星的标签,至于同一半岛的朝鲜嘛……...
  • JackJia2015
  • JackJia2015
  • 2016年03月31日 09:41
  • 789

关于WordPress的五大常见误区与偏见!

原文URL:https://www.toptal.com/wordpress/debunking-wordpress-myths译文(原创作者,请勿转载!!!)早些时候,很多人都把WordPress当...
  • u012391923
  • u012391923
  • 2017年01月08日 00:56
  • 1021
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:对各种语言的偏见
举报原因:
原因补充:

(最多只允许输入30个字)