程序员的武林江湖:如何修炼“内力”

程序员的武林江湖:如何修炼“内力”

一个足球评论员可能并不会踢足球,却并不妨碍在解说比赛时对某某球星的技艺评头论足。同样我也绝不敢以高明的程序员自居,而只是以类似金庸先生笔下的武林高手来阐述我对程序员的理解。

重新给程序员下个定义

按照Wikipedia的定义,程序员又称为计算机程序员(ComputerProgrammer)、开发者(Developer)、编码者(Coder)或计算机工程师(ComputerEngineer),和网络上广泛流传的码农或程序猿同义。

程序员是彻头彻尾的脑力工作者(MindWorker),怠于思考者 不能成为好的程序员。有鉴于此,类Programmer天生的就应该是Thinker的子类。就程序员所使用的思考技巧而言,Thinker的具体内涵包括逻辑(Logic)和数学(Mathematics)。作为程序员,不一定非要达到逻辑或数学领域的专业水准,而是必须具有逻辑和数学的基本素养。逻辑用来推理,数学用来培养逻辑。

程序员的思维“内力”

按照Wikipedia的定义,程序员又称为计算机程序员(ComputerProgrammer)、开发者(Developer)、编码者(Coder)或计算机工程师(ComputerEngineer),和网络上广泛流传的码农或程序猿同义。

漫长的学生生涯中,我遇到的 的数学老师是高中时的刘老师。他上课时讲过这样一段话,当面对一个数学问题,一要想的明白,二要算的准确,三要写的清楚。直到今天,这句话对于我的程序员生涯也具有很强的现实意义,能不能想的明白其实是考量一个程序员成败的至关重要的因素。

金庸的武侠小说中有一个普遍的规律,那就是武功必定以内力为根基。比如张君宝与昆仑三绝何足道在少林寺的那场经典之战中,张君宝能够“以少林拳中最平淡无奇的拳招,化解了最繁复的敌招”,始终不落下风,所恃者不过内力之浑厚尔。另外的 战例还包括少林寺小和尚虚竹VS吐蕃国师鸠摩智以及聚贤庄萧峰VS玄难。内力达到登峰造极空前绝后的 高手莫过于少林寺的扫地僧。也许风清扬是一个例外,好在我们讨论的是一般规律,所以就顾不得他了。

计算机编程所特有的思维(Thinking)就是程序员的”内力“,思维能力不济,功能再强大的编程语言也无用武之地。所以,我在这里特别强调程序员的思维艺术。

程序员的思维有一个专业术语,叫做计算思维(ComputationalThinking)。计算思维是按照计算机科学的基本概念和方法,用来理解需求、设计系统、实现编程、解决问题的思维方法。

逻辑推理(Reasoning)

逻辑推理对于程序员的重要性不言而喻,与其说逻辑推理用于程序新功能的开发,毋宁说更多的应用在程序调试修改BUG的过程中。程序调试有点类似于SherlockHolmes侦破案件的过程。

如果不知道程序运行的过程,推理就只能靠猜,那么修改BUG是非常危险的,很容易导致回退(Regression)的错误,因为这种情况下如同瞎子摸象,根本不知道自己在做什么。另外,SherlockHolmes还多次表达过这样的观点,案子越是离奇,越容易解决,因为Singularityisalmostinvariableaclue。

对程序员来讲,也不必担心奇怪的问题,奇怪本身就是线索。关键看对程序运行细节的了解程度和逻辑推理的技术水平。

分析(Analysis)

分析是上文提到的数学家所用思维方式中从一般到若干特殊情况的过程。面对一个问题,如果一下子描述不清楚或者表示不出来,可以先找出满足问题条件的几种特殊情况。通过仔细检查这几种特殊情况,求同存异,找出他们共同的规律或模式,并对这些模式或规律加以验证,就可以找出描述或表示问题的方法。这就是猜测加验证(guess-and-verify)的过程。项目需求分析时常见的应用案例分析(UseCaseAnalysis)方法,就是用一个个具体的使用案例将模糊的项目需求生动的表达出来。

分解(De







































北京治白癜风症状医院
偏方治白癜风



转载请注明:http://www.xxcyfilter.com/zyxz/852.html