All things are difficult before they are easy. 没有软件的裸机是一具僵尸,没有硬件的软件是一个幽灵。2012,专注于Linux和C语言,关注自动化、性能测试,关注开源社区和开源测试工具、方法,尝试测试团队管理!

追求神乎其技的程序设计之道(引用某大牛的标题)

上一篇 / 下一篇  2010-02-20 23:48:01 / 个人分类:日常生活

这几天看了大牛vgod的博客,主要看了其《追求神乎其技的程式设计之道》系列文章,感触颇多,也学到不少东东。
其博客是:http://blog.vgod.tw/   我是Google"Vim图解“时,无意进入该博客的(经过其他链接中转)。
vgod何人也?
牛 人也,MIT的Ph.D (Computer Science and Artificial Intelligence Lab, Massachusetts Institute of Technology ),曾经是台湾大学资讯工程系毕业的,哈哈,Information Engineering专业哦,貌似我也是这个专业的(不过是SCUT的),也真是汗啊,与这种牛人的差距真是大的没法形容了。vgod从高中学习编程,凭信息科学竞赛保送台大CSIE,在计算机科学方面的造诣非常的深。
他的《追求神乎其技的程式设计之道》目前出了十篇,主要是讲了自己的编程学习经历和心得。有“永远在变数需要被用到的最内层区块才宣告并初始化该变数”这样的程序设计经验,也有优秀软件工程师与一般软件工程师的不同这样的宽泛的话题。
现摘录其中的一些觉得说得非常好的东东写在下面:

qing 兄的两篇文章指出程式员的两种型态,一是重视演算法、资料结构、执行效率的「效率魔人」,二是重视程式架构、扩充性、弹性、可理解性的「架构狂」。这两种 人其实都很好,要完成一个伟大的软体,团队中两种人一定都要有。比较糟糕的是,有很多「第三型态人」,他们的信念只有一条:「程式只要会动就好」。第三型 态人不在乎效率,也不管架构漂不漂亮,上面要求他做什么,他就想办法东凑西凑,从Google找程式剪贴,从MSDN抓范例来用,反正只要能随便测过一个 case就能交差了。

芬兰教育成功的秘密在于「见树又见林」,这句话也是我对于如何学习最想分享的秘诀。
台 湾的教育方法是「先见树,再见林」,也就是先教你细部的方法和技术,等你都学会之后(或是硬背起来之后),出社会后就会知道为什么要学这些东西。(很多人 小时候都听过「等你长大就知道唸书有多重要」吧。可是现在比较多人毕业后反而说「我不知道之前念那么多书有什么用」)在这种体制之下,许多人在还没见到整 片森林的美景前就被一棵棵大树搞得晕头转向,痛苦万分,在不知道「学了这个可以做什么」的情况下,不管学什么都会觉得没有意义没有动力。
而 「见树又见林」的学习方式,是先找到能引起自己兴趣的目标,让自己有个理由去认真学习,之后再往细部的技术和理论去学习。我从小就很想自己写游戏,为了达 成这个目标,我就四处寻找相关的资料,慢慢的我就知道自己应该要学好一个快速的低阶语言(像是C++),如果要写绘图引擎可能还得学一点图学的理论和技 术,如果要做网路连线还得学网路相关的技术…。

上一篇谈到了优秀程式设计师的第一要件:「热情」,这一篇我想要谈我觉得热情之外最重要的能力:「思考」,特别是抽象化的思考能力。
写程式需要的思考能力第一是逻辑思考,主要其实就是用正确、清晰的逻辑表达想法而已,说来简单但要做好也是需要一定时间的训练。第二是抽象化思考,这是许多人忽略掉的一点,也是我觉得区隔一个平凡与伟大程式设计师的重要特质。
我 觉得所有的程式都可以看成一个巨大的金字塔,顶端是这个程式的最终目标,一个模煳的概念;底部是细节的程式码。而中间是一个经由不断切割与抽象化所构成的 高塔,每一个程式都是切割为许多的元件、模组,再切为更细的class和function,再来是最底下的变数与逻辑判断式。
在资讯科学这个领域,抽象化是个无穷无尽的必要行为。因为世间万物实在太多太复杂,我们只好不断把东西归类,并赋予一个名称、一个意义,经由这样的过程我们 才能用抽象的语言和符号来沟通,避免每次都要从最底层的琐碎细节开始说起。而平凡和伟大的程式设计师,我觉得他们之间的差别就在于能看到多少这个高塔中间 的分层。厉害的高手都很善于切换自己思考的高度,一下能跟你讨论高阶的系统架构设计,一下又能深入到最底下的组合语言和二进位除错。他们脑中除了有这高塔 每一层的详尽平面图,甚至也非常了解不同楼层之间的交互关系。而平凡的程式设计师大多只能专注于自己所开发的范围,对于其上的架构或其下的细节都不一定能 理清头绪,万一出现bug也会搞不清楚到底是哪一层出了错,而被完全无关的细节绊住手脚。

程式语言的地位在资讯系其实一直很卑微,大部分教授觉得这只是一个基本工具,就像螺丝起子和铁鎚一样。但我一直觉得程式语言是很重要的工具,它不只是让人用 不同语法和电脑沟通,而是让人能用完全不同的思考方式来解决问题。简单的说,我觉得程式语言就是决定思考高度的一个关键因素,而这也间接决定了写程式的能 力。

每个人都听过成功是一分的天才加上九十九分的努力,如果说天才是能想出绝妙idea的能力,那我觉得还有个关键是,要在有点子前先做过够多的努力打好基础, 等到灵光一现时才能把握住机会马上实现它。如果等到一分的天才出现时,才准备开始做九十九分的努力,那很容易就会被许多基础能力不足所带来的挫折感和障碍 所压垮。

(那些世界级的大牛)每个人在高中时少说也写过至少十万行的code。

UNIX可以说是一个非常适合程式设计师工作的天堂,UNIX的工作哲学(泛指所有UNIX like的系统,像是Linux、BSD、Mac OS X..等等)是提供许多小工具,每样小工具只做一件事,使用者可以合併使用多种工具完成复杂的工作。

最后,我用vgod博客上的一个留言来结束本文吧。
Jacqueline Says: March 12th, 2009 at 11:10 am
I wish I saw this when I was younger. Quite inspiring.

推荐给大家,也让自己向大牛学习。


TAG: Linux linux 程序设计之道 vgod

 

评分:0

我来说两句

smile665

smile665

Stay hungry, stay foolish. 得意之时谨记,一半命运还掌握在上帝手里;失意之时须知,一半命运还掌握在自己手里。

日历

« 2024-04-17  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 954882
  • 日志数: 220
  • 建立时间: 2008-11-06
  • 更新时间: 2012-10-06

RSS订阅

Open Toolbar