学习编程我们是否要深刻研究语法特性

昨天和YuMS、zjs两位大神参加CCF的Hackthon比赛,做了一个健康主题的chrome插件,在评委那反响貌似不错,因为拿了第一名。

从做Android应用,做网站,最后到决定做一款chrome浏览器插件,我觉得我们作出了极其正确的选择,这一前期决定瞬间让我们摆脱了和其他队伍相比技术不足的问题,全程说白了只需要一种技术就是javascript,不用管乱七八糟的UI,不用管Android各种API,也不用研究这个那个的数据库。最后以一个非常娱乐性的产品,凭借功能的最大完整度(至少我这么想),拿下No.1。

扯远了,回到主题,谈谈学习某一门编程语言是否要深究其语法。

首先,从自然语言角度来说,语法是必要的。但是自然语言的运用存在太多非正式的场合。我一直相信我们和美国人真正交流的话,蹩脚的英文他们一定可以理解,就像我可以理解苍老师在微博发的各种蹩脚的中文一样。在这些语境下,语法显得那么无足轻重,只要不是词不达意,大致我们就明白什么意思了。

编程语言,其实也是一门语言,专业角度来说,我们用编程语言和计算机交流,计算机在理解我们所表达的意思时是要经过一系列分析的,比如词法分析、语法分析、语义分析…这就是编译的流程。这里很重要的一点是计算机的理解过程不同于人类的理解过程,他们是很严格的,不允许任何语法的歧义与模糊。

下面想谈一下我这次想法的重点。

像我们去做各个在线编程OJ比赛时候,他们一般要求C/C++什么的,这些算法比赛说句实话实现程序和是否精通一门语言关系不大,主要是数学问题。真正每次用到的C/C++知识不及书中的1/10语法特性。

但是软件开发的时候就不同了。昨天做编程马拉松的项目的时候,我写了一套功能合并给YuMS,出现了bug,需要修改。分析了bug所在,回过头来我看自己的代码想要改,却下不去手。YuMS问我:「这代码是你自己写的么?」。我笑了,确实是我自己写的,js嘛,我也会一点,不过也仅局限于一点而已,比刚入门的同学们牛逼那么一点。可是当我邦邦邦写完一大段后,我却不太能看的懂了。

js,我会写个变量,写个函数,搞个数组,处理一个JSON,对我来说,使用这些语法就像我说英语一样,我构成了一句我想说的话,然后把我的话分词,每个词翻译成英语,在把每个英语单词按某种顺序组合起来,仅此而已。对于js,我不会自由的实现一个闭包,不会创建对象(这个可能和我没对象有关)……说白了就是我其实不太懂js的语法,或者说根本不掌握他的精髓所在,我当他是C去写。东拼西凑,构建出那么一大段功能,可以有用,但是甩出去,回过头来我基本就看不懂了,无法修复bug,无法做优化,无法代码重构。我不了解js高手们写代码所应有的风格,或者一些标准,或者一些特性的tricks,寸步难行。

我当时在想,要是写python,我一定可以在我力所能及的角度让他尽可能的优雅,我可以不断的代码重构,优化性能,提升可读性,或者有可能第一次交付就已经是0 bug了。

英语熟练的孩子和外国妹纸交流的时候一定是自信心爆棚的流畅,而像我这种英文水平半调子的,和外国老太太说话都很难开口,一出口就各种错,即使我学过我表达所需要的所有单词。

所以要做一个坚定的Python党,哈哈。很庆幸当初我被Pythonic这一词所吸引而去探索Python的各种语法特性,至今我的收藏夹里面还有一个链接是Python的pep 8。如果你是Python迷不可能不知道pep 8 — Style Guide for Python Code,这是python社区官方的python编程规范,大致就是你想pythonic,第一步就是你写程序要遵循这些基本道理,否则你每天import this一百次你也读不懂那首python的哲学诗。

好了我说完了,天天刷OJ的筒子们其实应该有空沉下心研究一下C/C++这个博大精深的语言,毕竟工作是软件工程的概念,而不是实现算法的那一个函数,实现优雅的代码永远比思考复杂的算法来的有效和必要(这句话有待商榷,总之有点道理,有人说「写代码就是为了给别人看的,顺便在机器上可以执行。」)。

Coding的时候心情很重要,当我把python代码从500行重构到200行且非常好看的时候,我就会去水人人刷微博了,因为一会回来的时候,我一定能看懂我之前写的是什么。

Tags : ,

One thought on “学习编程我们是否要深刻研究语法特性”

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Click the right image To submit your comment: