关于编程的思考
0 条评论前言
最近在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岁的年纪对于这种表达肯定理解不了。如果能解决这个问题,儿童编程教育这应当是一个有潜力的市场。