reprint from:http://www.makeuseof.com/tag/6-life-habits-programming-teach-today/
成功人生所需要知道的一切重要事情,你都能从计算机编程中学到。不相信我?那就继续往下看。
当我很小开始编程之时,还只是照搬电脑杂志上前瞻性的文字和符号,以便我和哥哥能够让带有一个双软盘驱动器的旧 Franklin 64 播放一段小巧的数字曲调。当时我们还没有太多生活经验去辨别那些神秘文本。
很多年后,在高中的Pascal课程中,事情看起来开始变得不同。了解if条件语句和for循环,开始引发出沃尔特·惠特曼和罗伯特·弗罗斯特等人都引以为傲的哲学突触联系。好吧,我说的有点夸张,但是这些见解仍然很酷。
是的,我知道,它说起来是一件很令人厌烦的事情——但事实是,在代码中,在while语句、数组、方法、对象等所有这些中,蕴含着很多智慧。事实上,我学到的很多驾驭生活的能力,通常都直接来源于我对多种编程语言的研究。
许多程序员在开始编写单行代码之前很久就已经开始使用流程图。这样做的原因是,有时试图一下子编写出整个程序的感觉真的是压倒性的,尤其是当程序要完成一些非常复杂的任务时。
程序员将接受大的甚至巨大的软件项目,然后将它们分解为更好管理的更小的部分——有点像造一辆汽车,需要通过事先做每个所需组件,然后再将它们组合在 一起。每个部分都是一个(或几个)具有特定输入值或行为的集合、然后完成一些输出任务的代码块。在该模块内部,程序员将使用流程图描绘出从输入到输出的逻 辑。
流程图能够帮助你以一种可视化形式跟随这个逻辑,这远比你试图用文字把它写出来或者想当然地狂写代码来解决这一问题更加容易理解。程序员没有找出这样 的“动态”逻辑的原因是,后面的逻辑通常在很大程度上取决于你对如何处理程序中早前的逻辑做出的决定。早期决定错了,你将会把自己编入死胡同。
生活中也是如此。当你正在做一个关于如何去还清债务、买房子,或者如何处理任何其他复杂的生活状况,甚至如何管理工作中的一个项目的决策时。在你坐下 落笔绘制出在这个过程或决策中每一步的创意流程图时,所有那些看似不可逾越的任务都能够得到更好的处理。这将帮助你在每一个阶段为你所有可能的选择作出决 定,或者预测所有可能性然后追踪各种情景。就像编程,了解早期的选择会如何影响后面的结果将帮助你及早地做出更好的决策。
每当你开始编写一个脚本或程序时,第一步总是创建你的变量。在编程中,包含有很多不同类型的变量。有支持文本表示的字符串类型,支持非十进制数表示的 整数型,用于处理更大数字的双精度型或其变体,还有数组类型、结构体类型等等。我们的想法是,定义一个适用于手头任务的变量。例如,如果一个函数的输出是 一个人的名字,那么你需要的是一个字符串变量。
当你组织你的生活时也是如此,无论是你的房子还是办公室,你根据要存储事物所需空间的多少来选择空间的大小。小而透明的塑料盒用于盛放干货,一个贴好 标签的香料架盛放香料以节省空间。在办公室,你会将日常工作文档放在办公桌抽屉里,而将敏感的商业文档存放进一个锁柜中。每件物品都有合适的容器,并且都 有它适当的位置——这是组织良好生活的座右铭。
任何一个优秀的程序员最终都知道特定的代码块(或称为“函数”)可以在多个程序中重用。例如,一个将华氏温度转换成摄氏温度的函数,它可以用于你创建 的任何需要完成这一任务的程序中。这个函数是一个简单的模块,它以华氏温度为输入,然后输出对应的摄氏温度。这个函数可以包括一定行的代码,然而当你本可 以将它们保存为一个程序模块,然后再直接将其嵌入到未来任何需要它的程序中去时,你为什么非要为所编写的每一个程序都重建这些代码呢?
亨利·福特关于他著名的T型车曾经说过,“任何顾客都可以拥有一辆他想要的任意颜色的汽车,只要它是黑色的。”
原因是福特已经想出了如何组装汽车,并且如果每制造一辆新车都能够重用相同的设备(和相同的颜色漆)而无需重现该过程会让它们更快地上市。这催生了流 水作业,它彻底改变了汽车工业。同样的方式,你可以将这一原则应用到你生活中需要重复性工作的各个领域。自动化是成功的关键,所以如果你能找到方法来自动 化工作中需要重复完成的任务,——你就可以使你的一天更有效率以节省时间。
首先,阅读我们的网站自动化指导。
有时,对于一个程序员来说,只是飞速编写代码而不记录单独的事情是非常诱人的。之所以诱人是因为,任何时候你都准确地知道你想要程序做什么以及你想要 怎样去实现它。记录一个程序需要时间。你必须描述每一步怎样做以及为什么这样做。这看似毫无意义,但几个月后当你决定重用这段代码或为另一用途修改它时, 这就体现了奋力挣扎想起你的每一行代码到底是在做什么,与迅速回退去了解你逻辑背后的整个意图之间的区别。
这种细致的文档在生活中的每个领域都有帮助,从跟踪生日和纪念日,到保持日常商务交易日志以及进行这些交易的原因。随着很多决策像风中的树叶一样来来 去去,日常生活会变成每一个模糊的日子。只依靠记忆去记住你为什么出席某些会议或为什么做出某些购买的做法是幼稚且低效的。每日日记或日志对解放你的思想 去做更重要的事情有很大帮助。
一个业余程序员最常犯的错误之一是无限循环。这是一种打破循环所需的条件从未发生的情况,程序会留在循环里并且永远不会结束——这占用100%的电脑CPU资源,几乎相当于锁定了电脑,直至你终止这一过程。
业余程序员需要从中学习的教训是,每当你创建一个需要消耗大量CPU资源的循环来执行某种任务时,引入各种各样的跳出机制是非常重要的。换句话说,相 比基于一个判断你的计算结果是否超过一定值的While循环(在某些情况下它可能永远不会达到),引入一个非常基本的循环计数然后添加一个次要终止条件的 方法是更可取的。如果循环次数超过某个极大的数值,循环必须结束,而如果在一切正常的情况下,这个条件应该是永远不可能达到的。
这会如何应用到现实生活中呢?它恰恰说明,即使你认为已经有了完美的计划,事情仍然可能出错。一个例子可能是,计划了为期一周的在最美丽、放松的热带 天堂的家庭度假,不料竟会因为下了一整周的雨而结束它。生活中“退路”的理念就是,要考虑到“最坏情况”,然后想出如果它真的发生了你要如何避免或者如何 尽量去利用好它。
生活并不总是可以预测的,即使一些你认为根本不可能会出错的最周密的计划,也可以很容易地被破坏。为最糟的意外事件做好计划,这将能确保当意想不到的事情发生时你不会以彻底失败而告终。
从编程中得出的最后一个生活经验是,及时清理自己。在一个程序中,你将需要开放一个流到一个输出文件,创建一个充满数据点的大数组,以及其他一些占用 计算机内存和资源的事情。一个干净的程序,是能够及时关闭输出流并清空已经用完的数组的程序。这里的理念是,要避免写出一个带有被称为内存泄漏的常见问题 的应用程序。
例如,在一个简单的VB应用程序中,你会这样删除一个数组:
Erase ArrayDin
或像下面这样关闭一个输出文件流:
FileClose(1)
这听起来像是你在更年轻的时候可能听到妈妈说过的一些事情,对吗?打扫你的房间,把你的衣服收好,洗净你的碗。然而,更进一步,收拾好你完成手头任务 所使用的工具,不仅会使你的家和工作区整洁,它还能够留下足够的空间让你更快地完成下一个项目。把东西随意乱放只会浪费空间,而且当你之后找不到所需要的 东西时还会浪费你的时间。
事实上,你能从编程艺术中学到的生活经验并不只有这六个,还有更多。当涉及到组织、规划、制定策略和节约资源时,计算机程序员已经理解了它。你能够从 花费时间学习一门编程语言的过程中学到很多东西,而不仅仅是编程本身。事实上,这就是为什么每个孩子在学校都至少应该学会一种编程语言,因为一旦你抓住了 它的诀窍,那么它很快会变得明显,你可以在你生活的其他领域使用这些诀窍。
你从编程的世界中发现了哪些其他类似的生活经验呢?