七周七语言读后感

###Gains[0]###

得Jolt奖的书都很NB,毋庸置疑。只算是比较认真的读了一遍,书中的自习题都没做过(估计做了就真要用七周了),周末断断续续在读,被喷了好几次zhuangbility了(去满记甜品也在看、starbucks也在看),用了N周总算是看完了。

作者也很NB,不但能玩转这么多种语言,而且还能直接找到好几种语言的作者直接交流,段位略高。书中对每种语言的介绍也很厉害,从语法基础到核心竞争力再到drawback一气呵成,所以基本上每种语言都可以流畅的在两个小时左右读完。

写书厉害的大牛才是真大牛,反过来,如果你不能很好的表达你对技术的理解,那么你一定不是真大牛

###Gains[1]### 就我现阶段的理解——语言的核心在于——1.范式 2.等号 3.集合

为了凑段数,我要分开来写。

###Gains[2]### 范式

原来只是觉得paradigm这个单词看起来很帅,具体的意思理解的不多,大概知道什么面向过程面向对象这都是些范式。看完7langsin7wk,又认识了一种范式,叫做函数式编程。函数式编程,从社区来看已经火的一塌糊涂了,大有要革了OOP命的意思。77中介绍了Haskell等4门函数式编程的语言,看了以后确实有耳目一新的感觉,相比OOP,函数式编程在并发方面确实有先天的优势,有时候代码的表达性(好像有点不太好理解,talk in code就是——map看起来比foreach + if清晰太多了)也比传统的OOP高出一大截。

那是否OOP真要被革命了呢?

余以为不然,回到这段开头那两个字——范式。范式就是编程语言的基因,那是写在骨子里的东西,是一门语言不自觉就会流露出的东西。比如OOP,就是要在驾驭大型项目的时候把开发成本降到最低,什么继承多态,那都是表皮,追求开发效率才是OOP这种范式的真谛。函数式编程范式的真谛呢?在实际工作用到的长得最FP的也就javascript了,我能理解到最深的——也就是天生的严谨性(FP的祖先是Lisp,嗯,就是这样)所带来的整洁性和清晰性。

所以不同范式只是不同基因,没有人会纠结白人是不是会被黑人革命了(好像某种奇怪的笑话),不是吗?

多说一句,是不是多范式的语言就像多种基因的杂交一样品种会好呢?这要看你认不认为KG(Kevin Garnett)很厉害了,我是觉得很厉害。

###Gains[3]### 等号

有人说非程序员和程序员的差距就在于,有些人的=是=,另一些人的=是==。

而编程语言里的=其实也有不同的,一类是assign,另一类是match。后一类的等号也是我在看77的时候见识到的、“原来还可以这么玩儿”的编程语言的奇妙特性。具体的例子可以看书,反正在看了书中用prolog解“地图着色”问题的例子以后,我是彻底被震撼了。

可能把等号作为编程语言的核心要素显得有点夸大了,但我认为这跟范式一样,是“under the skin”的东西之一。

因为合一也好模式匹配也好,都可以用重新定义的运算符来搞(比如====),那为什么prolog之类的语言还是用了传统程序员心中最熟悉不过的=来做不是赋值的事情?不妥协!有些语言就不是为了迎合大部分程序员或者要用作工业生产而存在的

###Gains[4]### 集合

我敢说,一个只用过list.add的程序员就肯定会被 take 5 [1,3,5 ... ] 这样的语法所震撼的。

没有语言不处理集合,一个语言对集合的支持程度,多少能说明它的亲和度(就算是语法糖,也是一种态度,装亲和也是亲和的一种嘛)

###Gain[5]### C

说完了以上三点,不自觉就想到C了。C的范式不流行不闪亮,C的等号朴实无华(赋值地址还十分恐怖),C的集合只能呵呵。

C除了帮谭浩强老师卖书以外一无是处?

非也,存在的即是合理的,每种语言都有他自己的价值,就跟范型差不多一个意思,每种语言必然有个born to be的意义。

“除C以外,没有另外一种代码可以表示内存。”以防你用C++和C#中unsafe之类的东西反驳我,我把这句话修改为——“除C以外,没有另外一种语言的代码和内存有如此亲密的关系”

###Gains[6]### 我喜欢的语言——就是最没节操的那一种——什么范式好就去支持什么范式,怎么操作简单就能怎么操作。

语言虽然不是所有,但是会严重的影响生活质量,从这个角度考虑,还是最喜欢C#和ruby