Thursday, December 10, 2009

编程学习的本质是什么?

很早之前就想写这样一篇文章, 但因为种种原因而耽搁. 今天在思考怎样学习C++时又想到了这个问题, 把它写下来, 作为我自己的一些感想.

作为一个程序员, 真得好好想想我们在学习编程的时候什么是最重要的, 到底什么才是我们追寻的本质? 是把ASP.NET、PHP、JSP、Ruby、Python、C#、Java、C++都学会? 是可以纯熟地使用VS、GTK+、Qt、wxWidgets、Tk来编写图形界面? 是学会各种框架、各种库? 是可以利用JavaScript编写出各种网页特效? 是对于各种浏览器的插件开发了然于胸? 是可以利用系统API开发出各种应用? 在我看来, 这些都不是. 诚然, 以上这些都很有用, 也很重要, 但绝不是一个优秀程序员应该不停追求的.

为什么会有人认为我掌握了这门语言就成了编程高手? 君不见你学的这门语言10年前可能根本不存在, 并且10年后也极有可能不存在. 老有人说IT界知识更新速度太快, 的确, 如果你5年停止学习, 那你在5年后多半就成了一个"废人". 但有一样东西是不会变的, 那就是大师们常说的"内功". 为什么"内功"如此重要? 看看李开复读大学的例子, 1980年李开复在哥伦比亚大学读本科时, 流行的是Pascal和C语言, 以及Fortran, 再看看今天, 除了C语言依旧傲视群雄外, 其它两个早就划归到历史的长河中去了, 只能作为那个年代的特有记忆而保留着. 而30年前李开复在学算法, 在学操作系统, 在学计算机网络, 在学计算机体系结构, 在学离散数学, 30年后的我们依旧需要学习, 依旧需要掌握. 这才是一个程序员需要以及值得追寻的本质.

刘未鹏在"你应当如何学习C++(以及编程)(rev#1)"中提到"一般性的编码实践准则,以及基本的编程能力和基本功,乃至基本的程序设计理论以及算法设计。才是真正需要花时间掌握的东西。"这些都涉及到两个字: 基本. 计算机的基本功无非是刚才说的那几样, 再加上一点数学知识, 但这在很多人眼里却只是考试的时候 (包括找工作时的笔试和面试) 用用而已. 一个真正伟大的程序员会懂得如何通过加强自己的内功, 从而把编程能力发挥到极致.

刚才的言论难免会引来一些实用主义者的辩驳, 工程上的各种新技术、新框架肯定是需要的, 某种程度上来说是要用来吃饭的, 并且也必须借助那些技术才能应用到实际中来. 但凡事都有主次, 这个领域总会不断地冒出新奇的玩意出来, 吸引着好奇的人们去尝试. 就像这个世界也总是充满了各种诱惑, 每个人都可能像海藻那样飘浮不定, 随波逐流. 不过还是有着需要我们坚持的东西. 也许在10年后, 20年后, 你会发现, 你所坚持的东西是多么得宝贵.

1 comment:

  1. 同感。
    不过Fortran并没有被划归到历史长河中去,单就我所接触到的高性能科学计算领域,Fortran应该是傲视群雄。

    ReplyDelete