关于语言的一些思考

这几年脚本语言一直在大行其道,Python,Ruby,JavaScript等语言几乎被用到了行业的各个方面。尤其是JavaScript,在Node.js之后几乎成了统御前后端的万能语言。

然而正是在这个大背景下,也有非常多反其道而行的大公司。比如Google对JavaScript似乎一直不满意,他们想了很多办法尽可能不去用JavaScript。一开始出现了GWT,目的是把Java编译成JavaScript,后来又出了一个Dart语言。Apple也在这个时间推出了Swift,比起Objective C的各种动态特性,Swift语言本身就显得静态了许多,也严格了许多。

我虽然从业只有2年多一点,但在这些时间里面有幸涉猎了各种语言,我个人认为,对于一般公司而言,比较适合那些有静态类型检查,语法也偏静态,并且是编译型的语言做开发。这是因为,虽然脚本型语言在初期开发时有快速灵活的优势,但维护成本却非常的高,而且代码腐烂的速度也会很快。可以说“灵活”这个词,在编程语言里面接近于“坑”的代名词。

我最不喜欢脚本型语言的一点是,没有静态类型检查。这会对后期维护产生非常多的问题。因为缺少静态类型检查,所以在函数声明时无法声明参数类型,也无法声明函数返回类型,比如:

function doStuff(a, b, callback){...} 

当你看到这个函数的声明时,如果没有文档和注释,你无从得知这个函数能接收那些参数,它的返回值是什么样的。而如果有callback就更加悲剧,因为你更不知道callback里面能有什么入参。你唯一能做的就是阅读源码。

相比而言,有静态类型检查的语言就好多了。比如对等的Swift代码:

func doStuff(a:Int, b:Int, callback:(Int)->Void)->Bool {
    ...
}

虽然它的声明看起来很啰嗦,但你可以不用看函数体,甚至不用看文档(如果函数命名、变量命名很好的话)就能猜出需要传哪些类型的参数,callback会有怎么样的入参,函数将返回什么etc.

正因脚本语言没有类型检查,不用写返回类型等等特性,导致编辑器和IDE很难做错误提示,并且这些语言多是解释型语言,没有编译器的编译检测,很多错误只能通过单元测试和运行过程中才能发现。

所以我认为,脚本类的语言,对于开发者的要求非常之高。不但需要尽可能地多写单元测试,还要很好地维护文档。这对一个拥有良好习惯的编程高手来说,并不是一个大问题。但软件开发很少有一个大牛从头到尾开发一个软件,更没有一个软件从头到尾都是由一个大牛维护的。软件工程里面最不可缺少的就是程序员之间的交流合作。而对于普通公司的普通团队来说,根本不可能保证不同时期的所有的team member都是习惯良好的一流高手。而人又是有惰性的,如果一件事情可以不做,则很多人会选择尽量不做。于是用脚本类语言开发的程序渐渐地会变成一个一个大坑——因为单元测试不是强制的,所以可以不写;因为程序没有文档也能运行,所以可以不写;因为不做类型判断程序也能运行,所以就不做判断。

所以在管理一般性的团队的时候,重要的并不是怎么调动大家的灵活性进行开发,而是怎样让事情变得规范化和可控。比如多数团队都会制定一个Code Style来强制规范组员代码的风格(但由于不遵守代码规范的代码也能运行,所以经常会碰到违反的情况,这时候就需要代码审查,但是审查人也会有偷懒的时候,所以Code Style很多时候也不能完全规范化代码)。而强制性最高的,莫过于拥有类型检查的编译器了——因为如果不能通过编译器的检查,代码根本就不能运行,所以大家只能老老实实地遵守编译器规范,比如该写接口的时候写接口,该用泛型的时候用泛型,函数传参类型等等就更不在话下了。因此,这种规范较多的语言,在整体水平一般的团队中,使用起来比较方便,也更容易“横向扩展(即用较低的价格雇佣一些不完美的程序员来堆砌代码)”。

最近的一些新语言发展趋势,也证明了那些拥有静态类型检测的语言将会是业界新宠。比如Go, Scala, Swift, Dart这样的语言,看起来都非常接近,他们有静态类型检测,也偏向于静态,又增加了类型推导,从而不像Java那样啰嗦,也加了函数式编程的特性,引入新的并发模型等等。而脚本类的语言,则在产品原型开发、小型脚本编写中比较方便,在大型项目中就显得有点坑了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,347评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,435评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,509评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,611评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,837评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,987评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,730评论 0 267
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,194评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,525评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,664评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,334评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,944评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,764评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,997评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,389评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,554评论 2 349

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,792评论 25 707
  • TITLE: 编程语言乱炖 码农最大的烦恼——编程语言太多。不是我不学习,这世界变化快! 有时候还是蛮怀念十几、二...
    码园老农阅读 5,302评论 2 35
  • 昨天你来不及明天就会可惜 今天你要嫁给我 听我说手牵手我们一起走 把你一生交给我 昨天不要回头 明天要到白首 今天...
    三毛踏沙阅读 549评论 1 2
  • 关于减肥你会发现,不知道该相信谁说的话,该做什么样的事情。看完这篇文章你至少可以避免5个最常见的减肥误区! 减肥 ...
    杯子小哥阅读 225评论 0 0
  • 江湖浩荡我冒雪来访鲜衣怒马的少年一挥鞭将马蹄尽只剩山色囹圄如果清风也将参与厮杀原始的野蛮的争夺是否能够缓解风雨焦灼...
    天天向晴阅读 239评论 0 1