【哲思与实战】程序设计之道

中国的软件行业,受到东西方文化和思维影响。

我曾在【脑洞大开】《西潮》及《走向世界丛书》_苹果二的博客-CSDN博客

邀请大家一起说说自己的看法。我也在 【哲思与实战】道、法、术、势、器_苹果二的博客-CSDN博客 提到过道。

要领悟程序设计的内涵和精髓,需要进行哲学性思考,今天一起来看看,米国的程序设计师Geoffrey James在《程序设计之道》(The Tao of Programming)这本书里如何运用道这种东方的哲学体系进行深层次的思考和理解。James自己说,写这本书灵感的产生和构思的形成,得益于每天早晨太极拳练完后的那种玄妙的感觉。James在书里,用构思新颖而奇特但是蕴含了深奥道理的故事,来讨论了如下一些问题。

  • 第一篇静寂的空宇
  • 第二篇古代的大师
  • 第三篇设计
  • 第四篇编码
  • 第五篇维护
  • 第六篇管理
  • 第七篇公司里的学问
  • 第八篇硬件和软件
  • 第九篇尾声

今天我来为大家解释一些比较有趣的例子。谢谢本书的中文版译者郭海。

【哲思与实战】程序设计之道_第1张图片

图片来源:Amazon.com

详细内容可参考 The Tao of Programming

第一篇静寂的空宇

编程大师如是说: “当你有本事夺走我手中的这块水晶石时,就是你出师的时候了。”

1.1 在静寂的空宇里,一种神奇的物质形成并诞生了。它立刻便静止了,独自守候着,毫无动静,然而又处于永恒的运动之中。它是所有程序的源头,我不知道它的名字,所以我将称它为编程之道。 如果此道是完美的,那些操作系统就是完美的,如果操作系统是完美的,那么编译程序就是完美的,如果编译程序是完美的,那么应用程序就是完美的。用户满意之至--和谐便应运而生。

编程之道流逝远去,又乘着晨风而归。

优秀的应用程序设计依赖于操作系统和编译程序的良好基础,程序设计的最终目标是达到一种和谐。

第二篇古代的大师

2.2 计算机科学巨擘图灵曾经梦到他是一台机器。当他醒来时,他惊叹道: “我不知道--我是梦到了自己是台机器的图灵,还是一台梦到了自己是图灵的机器?”

2.3 一家大电脑公司的一名程序员参加了一次软件研讨会。他回来后向经理汇报说:“为其它公司工作的那些程序员都是些什么的人啊?他们行为拙劣,不顾及自己的仪表。他们的头发又长又乱,衣服又皱又旧。他们闯进我们的会客组,还在我演讲时发生粗鲁的喧闹。” 经理说:“我本不应该让你去参加这个会议。那些程序员是生活在物质世界之外的。他们认为生活是荒唐的,一种意外的巧合。他们来去自如。他们只为他们的程序而活着,无忧无虑地活着。为什么要用社会习俗来约束他们呢?他们活在此道之中。”

2.4 一个礼堂者问大师:“有位程序员,从不构思、编写文档或测试他的程序,然而所有知道他的人都认为他是世界上最棒的程序员。这是为什么呢?” 大师回答说:“那个人掌握了道。他不需要事先进行构思,当系统崩溃时,他不会因此而闷闷不乐,而是心平气和地接受整个事实。他还从编写程序说明文档的需要之中超脱了出来,不在意是否有人看他的编码。他也不需要进行测试。他的每个程序都完美无缺。宁静而优雅,程序的用途也显而易见。的的确确,他已经进入了道的神奇境界。”

影视剧里的黑客的形象通常是头发长,胡子多不朽边幅的样子。直言讲话,没有太多委婉的话语,是因为黑客们将精力投入了程序设计,看起来似乎不通世事人情,实则是太专注于自己的工作。尽力设计完美的程序。

第三篇设计

3.3 曾经有位程序员被派到 IBM 的军机大臣手下工作。军机大臣问程序员:“设计一个财务软件包,和设计一个操作系统,哪一个更容易?” “操作系统。”程序员回答说。军机大臣立刻发生一种不信任的惊叹,“与一个复杂的操作系统,一个财务软件包简直是小巫见大巫。”他说。 “并非如此,”程序员说,“在设计一个财务软件包时,编程人员是作为一个中介者在观念各异的人们之间起作用的:这个软件必须如何操作,它的报表必须是什么形式,它必须如何与税法一致,等等,一个操作系统则不为其外观所限制。当设计一个操作系统时,编程人员只要在机器与人的思维之间寻找一种最简单的和谐就可以了。这就是为什么操作系统更容易设计。” 军机大臣点点头,笑了。“说来也是。但要想检测和纠正其中的错误,哪个更容易呢?” 程序员没有回答。

设计应用软件需要思考用户体验、业务逻辑和必要的外部约束,并能充分利用计算机原理、信息处理方法和计算思维,过程是比较复杂的,需要的技能也是很全面的。

第四篇编码

编程大师如是说: “一个写得完美的程序是其自身的天堂,而一个写得糟糕的程序则是其自身的地狱。”

4.1 一个程序应当是轻盈的、灵活的,它的子程序就像一串珍珠一样连接着。它的精神和意图应该贯穿始终。在程序中,内容既不应太多,也不应太少;既不应该有不需要的循环结构,也不该有冗余的变量;既不缺乏结构性,又不过分僵化。一个程序,无论多么复杂,都应该以一个整体的方式运行。程序应以其内在的逻辑为指引,而非外在形态。 如果一个程序不能达到这些要求,它将处于一种杂乱无章的混淆不清的状态。唯一的方法就是重写这个程序。

4.4 一位项目经理手下的一名程序员正编写软件。他的手指在键盘上飞舞着,在程序的编译过程中没有出现任何错误信息。程序运行起来就像一阵和风。 “太好了!”经理高兴地大叫了起来,“你的技艺简直是完美无缺。” “技艺?”程序员说着便从他的终端机前转过身来,“我遵循的是道--所有的技艺远不能及!当我刚开始编程时,我眼前看见的是整个问题乱成一团。三年之后,我再也看不见这种一团糟的情形了。相反,我用了各种各样的子程序。但现在,我什么也看不见了。我的整个身心存在于一种无形的虚空里,我的知觉是空荡荡的。我的精神随其本能而动,不无原则计划就能自由地工作。总而言之,是我的程序自己写出了自己。诚然,有时会有一些难题。我看见那些难题向我走来,于是我放慢了速度,默默地注视着他们。然后我更改了一行编码,那些问题就烟消云散了。然后我完成程序的编译。我静静地坐着,让工作的欢心情舒畅遍布我的全身。我闭上双眼,歇息片刻,然后退出系统。” 经理说,“希望我的所有的程序员都这么聪明!”

设计和开发优雅的程序,需要减少程序的复杂度,平衡结构性和灵活性,保证程序的整体性。

第五篇维护

编程大师如是说: “即使一个程序只有三行长,总有一天它也不得不需要维护。”

5.1 一记扇经常开启的门的绞链不需要润滑油。 一条湍急的河流不会变得污浊。 无论是声音还是想法都不可能在真空中传播。 软件如果不用就会腐朽。 这世界真奇妙。

编程大师如是说: “让程序员多而经理少--然后生产效率就会高。”

程序需要经常使用并根据具体情况升级,也需要在使用中优化程序。

第六篇管理

6.1 当经理们没完没了地开会时,程序员就写些游戏玩;当财务主管们谈到季度利润时,开发用的预算马上就要被削减;当资深科学家们谈论蓝蓝的天空时,马上就会风起云涌。其实,这并不是编程之道。当经理们忠于职守时,游戏程序就会被搁置到一边;财务主管们制订出长远的计划时,和谐秩序将很快恢复;当资深科学家们着手于眼前的问题时,这些问题不久就会解决。其实,这才是编程之道。

程序设计需要企业技术管理和财务管理的规划管理和支持,以建立优秀程序设计的外部环境。

第七篇公司里的学问

7.2 在东方,有一条大鱼,比其它所有的鱼都要大。它变成了一只鸟,它的翅膀就像云朵一个布满了天空。当这只鸟飞过陆地时,它带来了“公司总部”的消息,像蜻蜓点水一样把这个消息丢在了那些程序员中间。然后这只鸟驾着风,背负蓝天,返回了家园。初学编程者惊奇地盯着那只鸟,因为他根本无法理解;平庸的程序员畏惧那只鸟的到来,因为他害怕鸟儿带来的消息;而编程大师却仍然在他的终端机前工作,因为他不知道那只鸟来了又去了。

在公司里工作,专注于程序设计的工作,不要去关心那些无关的事情。

第八篇硬件和软件

编程大师如是说: “没有风,草儿静止不动;没有软件,硬件则无所为用。”

8.4 在去硅谷的路上,硬件碰上了软件。软件说:“你是阴,我是阳。如果我们携手同路,我们 将闻名于世,并能赚大笔的钱。”于是,这一对阴和阳便一同往前走,想着怎么征服世界。不一会儿,他们遇到了固件(firmware,硬件和软件结合在一起的部件,如 IC 卡--译注),他衣衫褴褛,手里拄着根带刺的拐杖,蹒跚地走着。固件对他们说:“道存在于阴、阳之外。它默默无闻,静如止水。它不追求名誉,所以没人知道它的存在;它不追求财富,因其自身完整圆满。它存在于空间和时间之外。” 软件和硬件,自觉惭愧,掉头回家去了。

理解程序设计道的本质,有一天能体会并熟练地运用它。

第九章尾声

编程大师如是说: “现在该是你出师的时候了。”

思考实践,实践思考,有一天就能深刻体会道,并教给其他人。

设计和开发程序是一门技艺,希望我们都能到达最高境界,“技近乎道”。

你可能感兴趣的:(计算思维,软件开发,专业发展,软件开发,计算思维,职场和发展)