注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

笑遍世界@网易博客

明天还会在路上……

 
 
 

日志

 
 
关于我

Stay hungry, stay foolish. 工作用脑,生活用心! 走过山重水复,必然迎来柳暗花明! 受苦的人没有悲观的权利,远征的人没有流泪的资格。 Live each day as if we should die tomorrow.

网易考拉推荐
 
 

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

2010-02-20 00:21:10|  分类: 软件使用 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
这几天看了大牛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.

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

  评论这张
 
阅读(605)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017