编程的思想性——议编程与“武功”的一致性
目录
一、缘起
最近做了一件事情,将写好的scala程序中稍显混乱和不雅的代码进行了重构(系列博客见http://www.cnblogs.com/shoufengwei/p/5619419.html),当然重构的过程其实不仅是对代码的整理,也是对自己已掌握知识的整理的过程,也可以让我们明白以前未掌握的或者比较模糊的知识。
比如关于扩展方法的使用。之前采用的是Helper类的方法,重构时改用了扩展方法。创建Helper类基本上没有使用scala中牛逼的类型系统(实际是因为不懂),泛型也只是偶尔用了一下。在重构的过程中,考虑能否尽量多的使用泛型使得代码尽量复用。过程中虽然也碰到了一些问题,最终也基本通过各种途径达到了目标。在总结此次重构的过程中,我发现自己对scala中的泛型以及类型知之甚少,于是开始在网上搜索相关资料,搜索到了王宏江的博客,咋一见,就像获得了九阳真经一样,沉溺其中无法自拔,就引起了本篇故事。
二、缘生
其几十篇博客详细讲解了scala语言以及函数式编程。用了一周多时间将其概略读完,颠覆了我对scala以及函数式编程乃至编程的认识。正像其在博客中说的,大部分人都是在像使用java那样使用scala,而我之前主要在使用C#,也学习过java,所以我是彻彻底底的在像使用C#那样使用scala,当然现在来看C#的“用”也是最低级的“用”,从Helper类的使用也可见一斑。
学习了王宏江的博客之后更加明白了自己的无知,感到自己才在编程的海洋中朝着彼岸游了几米,确实有一种醍醐灌顶、顿悟的感觉,以前看待编程语言就是一个个的特性加一个个功能函数,所以真的是在“用”语言编程,进行的是功能语句的堆积,顶多再加一些技巧,只要实现功能就好。而现在能够开始通过一个个的特性以及功能函数看到其背后蕴藏的思维逻辑以及数学知识等(这一点还远远不够),感觉自己才真正的开始迈向编程的大门。苦苦思索数日,我感觉其实编程就跟武侠小说中的“武功”是一样一样的。
三、缘由
非科班出身的我,一开始完全是出于兴趣和无所事事以及工作需要开始编程(详情请见我的奋斗——从印刷工人到地理信息大数据系统程序员)。刚开始的编程就是去记那些语言中的方法、特性等,反复写、反复用。有点像是郭靖吧,虽然资质平平,但是勤能补拙,最后也取得了一定效果,基本掌握了各种语言的Hello World。
直到看完王宏江的博客才顿悟,编程真的不仅仅是一个个函数,而应该是最后的心法即融会贯通,看透一招一式背后蕴藏的内涵,就像杨过一样,在学会了各门派武功的招式之后,最后由于姑姑的离去独自思索,悟出了黯然销魂掌,成为一代大侠。当然还有近代的李小龙,李小龙对武术的贡献也绝非其满身肌肉以及漂亮的招式,其与同时代武术大师的不同就在于将哲学融入到武术当中,创立了截拳道,使得咏春拳不仅仅是那简简单单的招式,有了背后的哲学逻辑。再比如太极,只要稍加练习都能够挥那么一两下,而真正的背后哲理又有几人明白呢?
当然我觉得学习编程的过程依然应该是从招法开始,只有熟悉并掌握了足够多的招法你才能去理解背后的那些东西,所谓的量变到质变。李小龙如果没有之前对传统咏春拳的练习也不可能会悟出这些背后的哲理。在练习招法到一定程度的时候就要开始去尝试学习理论,研究背后的哲理,哪怕自己当时不明白,通过一定时间的积累一定会有顿悟的一天。古代私塾先生教书也是一个很好的例子。而我完全是自学,没有人指导,完全靠着自己的摸索,所以之前缺乏了理论和背后逻辑的学习,这次通过学习王宏江的博客感觉慢慢的入了门了。
再比如以前老听到大牛这个词,当时觉得大牛就是那些能把语言的所有方法都记住所有特性都清楚以及精通各种框架等等的这类人,现在想来完全不是,所谓大牛应该是那些具有思想性的人,不局限于一招一式一个函数,而是能够将这些一招一式融会贯通,看到背后的思想。就比如段誉,虽然只会六脉神剑,但是谁能说最后的段誉不是一个大侠呢?
四、缘中
所谓缘中,非终也,而是想表达路漫漫其修远兮,这条艰辛的道路才走了一点点。更何况本文开始写的时候就比较犹豫,酝酿了好几天,因为只是一个感悟,还完全没有达到这种境界,不免给人一种冒充大牛的感觉。不过这应该是我编程生涯的一个转折点,从一招一式到心法的转折,将其记录下来也好。本文说的不一定正确,仅为个人感悟,欢迎各位大牛批评指正!