编程的思想性——议编程与“武功”的一致性

一、缘起

       最近做了一件事情,将写好的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。

       直到看完王宏江的博客才顿悟,编程真的不仅仅是一个个函数,而应该是最后的心法即融会贯通,看透一招一式背后蕴藏的内涵,就像杨过一样,在学会了各门派武功的招式之后,最后由于姑姑的离去独自思索,悟出了黯然销魂掌,成为一代大侠。当然还有近代的李小龙,李小龙对武术的贡献也绝非其满身肌肉以及漂亮的招式,其与同时代武术大师的不同就在于将哲学融入到武术当中,创立了截拳道,使得咏春拳不仅仅是那简简单单的招式,有了背后的哲学逻辑。再比如太极,只要稍加练习都能够挥那么一两下,而真正的背后哲理又有几人明白呢?

       当然我觉得学习编程的过程依然应该是从招法开始,只有熟悉并掌握了足够多的招法你才能去理解背后的那些东西,所谓的量变到质变。李小龙如果没有之前对传统咏春拳的练习也不可能会悟出这些背后的哲理。在练习招法到一定程度的时候就要开始去尝试学习理论,研究背后的哲理,哪怕自己当时不明白,通过一定时间的积累一定会有顿悟的一天。古代私塾先生教书也是一个很好的例子。而我完全是自学,没有人指导,完全靠着自己的摸索,所以之前缺乏了理论和背后逻辑的学习,这次通过学习王宏江的博客感觉慢慢的入了门了。

       再比如以前老听到大牛这个词,当时觉得大牛就是那些能把语言的所有方法都记住所有特性都清楚以及精通各种框架等等的这类人,现在想来完全不是,所谓大牛应该是那些具有思想性的人,不局限于一招一式一个函数,而是能够将这些一招一式融会贯通,看到背后的思想。就比如段誉,虽然只会六脉神剑,但是谁能说最后的段誉不是一个大侠呢?

四、缘中

       所谓缘中,非终也,而是想表达路漫漫其修远兮,这条艰辛的道路才走了一点点。更何况本文开始写的时候就比较犹豫,酝酿了好几天,因为只是一个感悟,还完全没有达到这种境界,不免给人一种冒充大牛的感觉。不过这应该是我编程生涯的一个转折点,从一招一式到心法的转折,将其记录下来也好。本文说的不一定正确,仅为个人感悟,欢迎各位大牛批评指正!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏码洞

码农群英传连载(一) —— Go 语言之父 Rob Pike

近几年来在计算机语言排行榜上成长最快的语言就是 Go 语言。它勇往直前势如破竹,从几年前的 50 名之外快速跃进前十的宝座,而且还在马不停蹄向上攀登。

12430
来自专栏Java学习网

给初学编程的人的新年干货

给初学编程的人的新年干货 一、这多东西啥时候能学完? 现在IT新技术日新月异。就常用编程语言而言,有c/c++、汇编、java,c#、Python等;操作系统...

28890
来自专栏编程

有效的学习C语言,易懂,趣味,实用的成长之路

学好C语言的秘诀就是1234:“一字真言,两种态度,三个框架,四项注意”。 各位看官,学好C语言,其实只需一个字,那就是“编”。 学习C语言,乃至学习所有的语言...

35260
来自专栏程序人生

如何从零开始学一门程序语言?

今天一大早排队挂号给孩子看病,耽搁了,现在才发。 说实话,『能花钱的,就不要花时间』是篇即兴之作,本该随着时间被有限的听众渐渐淡忘。但没想到前有 @老赵 微博转...

35860
来自专栏zhisheng

给编程初学者的干货:“秘籍”学好一本就不易

一、这多东西啥时候能学完? 现在IT新技术日新月异。就常用编程语言而言,有c/c++、汇编、java,c#、Python等;操作系统平台有Unix/Linux,...

36990
来自专栏闵开慧

给程序入门者的一点建议

Java自学之道(一) 给程序入门者的一点建议     在书场上看到很多有关Java的书籍,但这就像进了瓜地里挑瓜挑的眼花,很多人不知道自己到底该选那本书好。很...

31860
来自专栏C语言及其他语言

给所有初学编程的人的干货

现在IT新技术日新月异。就常用编程语言而言,有C/C++、汇编、Java,C#、Python等;

12620
来自专栏老九学堂

给所有初学编程的人的干货

现在IT新技术日新月异。就常用编程语言而言,有c/c++、汇编、java,c#、Python等; 操作系统平台有unix /linux,windows系列; 开...

35590
来自专栏程序员互动联盟

为什么C++是最难学的编程语言?

很多已经做了几年的C++程序员已经很自信觉得这门编程语言算是熟悉阶段了,但是当重新对这门语言来个彻底大扫除的时候发现,又有新的语法出现,最糟糕的是之前掌握的很多...

30130
来自专栏java一日一条

2014最热门、最具争议的10个Java话题

2014年对于Java来说是令人兴奋的一年,万一你不幸错过了在过去一年中Java发生的那些翻天覆地的变化和关于Java的在线争论,也没有关系,接下来将为你呈上2...

6110

扫码关注云+社区

领取腾讯云代金券