前言

最近在github上搜索牛x的typescript项目,以印证我的一些想法,无意中发现一个仓库里放了一篇王垠的文章,读过之后引起了兴趣。之后找到了这个家伙的博客,一口气把他的博客全部读完了。在他的博客里我感觉像打开了编程的一个新世界,虽然他的文章里基本上没有代码。

编程里的宗教


这个说法在王垠的多篇博客里都有出现过. 在他的眼里所有的编程语言都有问题,因为他写过大部分编程语言的解释器和编译器。所以,很多关于“PHP是世界上最好的编程语言”之类的宗教争论,在他看来是极其可笑的。

所有的语言抽象出来之后,都是各种“语言特性”的组合:

  • 变量定义
  • 算术运算
  • for 循环语句,while 循环语句
  • 函数定义,函数调用
  • 递归
  • 静态类型系统
  • 类型推导
  • lambda 函数
  • 面向对象
  • 垃圾回收
  • 指针算术
  • goto 语句

掌握了这些抽象出来的“语言特性”,就能撑握所有的编程语言。之前我一直对所学所用编程语言外的语言心存恐惧,觉得会很难学会,但是明白了这个道理之后,我突然觉得我似乎一下子掌握了所有的编程语言。

当然这只是我的一种喜悦的感(错)觉(觉),但是在把自己目前所用编程语言的官方手册和上面的“语言特性”,一一对印过之后,现在, 我真的很有信心在1~2天内掌握一门新的编程语言。

另一个宗教的说法,是关于设计模式的。在王垠的博客里,多次提到他写的代码精巧简单,对那些大公司(google)将他的代码里加入各种factory,visitor,非常不满。似乎在他的世界里,模式都是些垃圾。

因为我没有写过大型的项目,我指的是超过10万行代码的那种,我真的没有体验到设计模式对我的编程有带来什么好处。仅用过的模式,就只有单例模式,订阅模式,工厂模式。而且我也一直深以为耻,对那些精通各种模式的大神,也是佩服的五体投地。

然而直相是什么呢?设计模式是垃圾,还是编程必用的技能?在我看来,一切都是工具。数学,编程语言,IDE,包括设计模式,都是为我服务的。如果项目很小,基本上不会扩展,那么完全没有必要遵守什么狗屁的模式,如果项目很大,而且肯定需要扩展,那么设计模式估计是有用的(我没有这样的经验,仅凭猜测)。

不用模式,并不代码我的代码里没有用心设计,我也会努力思考,让我的代码的结构趋向于低耦合,高内聚,趋向于简单明了,趋向于不用写注释。这里刷新一下认知,这个规则并不指的是class之间,而是所的有实体之间,在javascript里就是对象,因为它除了对象就没有其它的东西了。

精通一门语言与掌握多门语言


王垠对精通于一门语言有些不屑。对于他来说,有这样的想示不奇怪。对于一个能写各种编程解释器的人来说,精通一门语言必定是无聊之极的。但是对于我来说,精通一门语言是我谋生的手段,虽然无聊,也必需要去学习。

对于目前typescript的特性,我可以说是精通了,谋生已经没有问题了。但是这个工具已经不够用了,我现在希望能够掌握机器学习,并用这个工具来做一些有趣的和有意义的事情。目前做游戏开发,虽然有趣,但是找不到意义在那里,而且有趣真是个快消品。

我不以掌握多门语言为荣,也不以只精通一门语言为荣,这些都不是现实的本质,而只是找到现实本质的工具而以,如果一把刀能解决问题,我为什么还要练习射箭呢?现在这把刀解决不了问题了,所以我只能选择练习射箭。python也是一门很有趣的语言吧。

儿童什么时候开始编程


百度了一下,一些以专家表达方式的答案为7岁。我表示怀疑,编程当中最基本的能力为抽象能力,我儿子3岁,基实在2岁半的时候,我指着一颗树,告诉他:“这是树”,然后他就看到其它品种的树,他就知道,它也是树。你看,已经抽象成class了。关于四则运算,我记得我是学前班就会了,也就5岁左右。 我觉得只要以他们能理解的方式去表达,4~5岁就可以开始学习编程了。但是难度也在这里,所有的编程语言都是成人发明的,而且都是以成人的语言表达方式去表达的,4~5岁的年纪对于这种表达肯定理解不了。如果能解决这个问题,儿童编程教育这应当是一个有潜力的市场。