读程序员之禅

写在之前

如需转载,请注明出处。如有侵权或者其他问题,烦请指正。

作为一个工科院校的工科生,科研、学习中经常需要编写、开发程序,并且大多数的人在离开这所学校的时候,会继续从事相关方面的职业。所以,在一次浏览图书馆的时候,无意之中接触到了这本书《程序员之禅》,并本着了解前人在职业之中所遇到的问题,寻找职业之路的灯塔的目的,决定了这本书的进一步深入了解。

《程序员之禅》的作者是Christian,是一名德国程序员老兵,深谙程序员的喜怒哀乐。他原本是一名牙科技师,因为德国的医改政策,丢掉了工作。失业之后成为一名公务员,并自学了编程。在经过一些项目之后,在一个伟大的公司成为一名实习生,待遇却不及一名初级的程序员。生活需要他努力工作才能有一定的收入,这段时间他早上6点起床,去做白天公司的工作,下午6点回家做一些承接的项目以赚到外快。完成培训之后,不料该公司却破产了。此时,他仍然是身无分文,好不容易找到一家大咨询公司并签了约。因为该公司的项目又在异地,每周往返就需要12小时。项目混乱不堪,在清理代码的时候,一不小心就会破坏代码,所以工作的时候需要精神高度紧张。大量开发者离开了公司。两年之后项目组换到了离家近的地方,但是生活并没有因此变得好起来,反而更加早出晚归了。疯狂编程的后遗症就是晚上做梦的时候都会在编写代码。早上5点,醒了,他尝试坐下来,使自己的大脑停止思考一会,没过多久就安静下来了。以此,作者开始禅修之路。Christian的内心发生了一些改变,禅修之花绽放。他开了自己的公司,重新控制了自己的生活,不再自怜自艾,,能够心平气和对待所有事情。

最初的禅来源于佛教。作者提出的禅则是来源与禅宗和生活,这是一种生活态度和生活方式。在物欲横流的今天,禅对于所有的程序员有着特殊的意义。

禅,是正思维的做事方式。所谓正思维,就是行事保持善念,灭除嗔怒,不夹杂私念,不应该冷酷地或者攻击性得对待他人或者伤害他人。思维方式影响一个人的行为。当带着攻击性的思维编程时,引入错误的风险就大大增加,消极情绪在编程的时候也在大脑中运作。所以思维不正的时候,应该先解决问题,再继续工作。

禅,是正定的工作方式。有时候工作的时候会有邮件,或者微信信息,抑或是和同事愉快的聊天,最终也可能因此导致需要一直待到晚上8点才能改完工作。有了正定,就可以更好地设定事务的优先顺序。保持专注力也是气禅的一种修炼,降低思维的混乱度,专注于事物的核心,心无旁骛。编写代码的时候更是需要如此全力以赴,电子邮件是工作中的一部分,但显然不是最重要的。不过,工作的时候同事的打扰可能在所难免,这个时候可以预先沟通,和大家在这个专注时间段达成一致。并且保持自己的这种做法,避免电子邮件、微信上的沟通,否则团队成员可能会不高兴,也不会尊重这个专注时间段。

禅,是一种正精进的状态。任何人的内心可能会遇到侵略,但一个人的一天是美好的还是糟糕的完全取决于个人。保持正精进的状态,我们应该抛弃消极的心理。努力保持对自己内心的控制。拥有一个纯净的内心,工作的时候就不会把心情带入其中。编写的程序,正确率也会提高。

禅,是一种正念的思想。正念,是认识自己的身体、思想、感情以及外物,看清自己的能力以及周围事物的变化。当我们清楚地知道自己的能力范围,可以申请一个合理的项目的时间,不必因为低估难度而在后期经常加班。工作的时候,有时候会感到疲倦。如果无视身体的信号,最终会导致疾病甚至过劳死。意识到自己的欲望和情绪,认识自己的身体和心灵,有助于在工作中时刻保持高效的状态,一旦身体发出信号,及时调整。如果觉得累,就需要晚上保证睡眠,,中午午休的时候尽可能腾出时间打个盹。

禅,是苦修。禅,不是独自在房间中修行,这不是仅靠大脑就能完成的修习。工作、生活的每一秒钟,都是禅修。作为程序员,需要活在当下,不断充实完善自己,并且时刻保持一个初学者心态,向别人学习,及时掌握新技术和新思维才能保证不会被逐渐淘汰。

在阅读这本书的时候,会让自己和周围的世界感到安宁,从而能够更加高效地学习。

最后附上程序员之禅的10条法则,是作者的原生态的凝练,远比我的解读更加精彩。

http://geek.csdn.net/news/detail/35777

程序员是一份特别辛苦的职业,也是一个承受各种压力的群体。每周6天工作,无休止的加班,甚至过劳死,程序员的身心健康面临很大的问题。禅是另一种生活方式,在物欲横流的今天,禅对于程序员有着特殊的意义和价值。

几百年前,禅宗大师开示众生:该说“不”时且开口,生命掌握在你手中。

今天依然如此。禅修并非史蒂夫•乔布斯这样的业界精英的专利,你也可以。禅修并非只能在周末进行,任何时候都行,甚至是现在,是的,就在此刻,从程序员禅的10条法则开始。

1、专注

禅修程序员一旦开始工作,就应该全力以赴,做到最好。请不要同时展开多项工作。一次仅做一事就好。一心多用不会让效率更高,只会使你应接不暇。超负荷工作会让人疲惫不堪、容易出错,而且在不同的工作之间频繁切换也会浪费时间。这是条通用的建议,不仅仅适用于编程工作。

泽木兴道禅师教诲:若需睡觉,尽管睡。当决定休息的时候,不要再去想软件的事,尽管睡觉。要是打算编程,就尽管去编,不要再做白日梦,专注它。一旦你疲倦不堪而无法编程,你就需要睡觉了。即使是以一心多用出名的Stephan Uhrenbacher,也会决定进行单线程式的工作。我有和Setphan类似的体会,于是自己写了一个时间跟踪工具—Time & Bill。我的目标是方便地跟踪时间消耗,包括像打电话这样的小事。现在,每日伊始我会创建几个秒表,鼠标一点就可以跟踪时间的使用。起初惨不忍睹,有时我在一项工作上只花了几分钟就转到另一项工作上。现在我做得好多了。与番茄工作法类似,我计划了几个时段,努力保持专注,其间不闲聊,不睡觉,不去查看AppStore上好玩的新游戏。

2、心无杂念

在动手编程之前,你需要清空头脑,摒弃一切杂念。如果你有什么麻烦事,不要让它影响你。在大多数情况下,烦恼会自行消失。如果杂念太多,无法驱除,就暂且不要工作。一定努力清除它们。而你一旦开始工作,请暂且忘记身外的世界。

邮件列表中有令人兴奋的内容?别管它,你可以晚些时候再兴奋。关掉所有会占据你头脑的垃圾程序:推特、脸书和电邮。你甚至应该将手机设为静音并放进口袋里。或许你会说这条规则类似于第1条“专注”,然而这条中还应有一个限制:在工作前或午餐时不要使用这些工具。这些东东把你连接到花花世界,带来新的烦恼或耗精力玩意儿。

设想一下,当清晨醒来时,通常你的头脑会很清醒。如果不然,可以做些运动(我喜欢长跑)。等你感到神清气爽了,请尽所能立马开展工作。工作结束后,你才可以去想那些乱七八糟的东西。当历经繁忙而充实的一个工作日后,你会发现原来那些东西其实并非多么有趣。推特、脸书之类会消耗我们大量的精力,别以为只要分把钟,绝非如此。

你懂的!

3、初学者心态(虚怀若谷)

别忘了自己还是初学者的那些日子。或者如果你目前就是个初学者,请坚守这份新人情怀。你所学到的远远不够。如果你已经是个专家了,不妨每天也把自己当成初学者。坚持以初学者的心态来对待技术问题,这样你就能更容易去接受那些让软件更好的修改,不落俗套。即使那些经历不如你的人也可能会提出一些好主意。有哪一个软件的两次构建方法会完全相同呢?即使你去复制(仿制)软件,建构过程也不会完全相同。

4、无我

一些程序员存在的大问题是:过于自我。但其实,我们没有时间过于自我,没有时间成为一个摇滚明星。

谁能决定你的编程水平呢?你自己?不是。别人?可能吧。你可以拿苹果跟香蕉比吗?不能。你是个个体。你无法将整个自己与他人去比较,只能说某些方面的比较。

有个技能有啥可自豪的?你擅长Java?酷,别人是不如你,但他擅长打保龄球,你行吗?Java比保龄球更重要吗?恐怕要视具体情况而定。你可能因为Java赚得多一些,但别人可能从生活中获得了更多的乐趣,因为他有一群保龄球友。

你真的对自己是个极客感到自豪吗?过于自我的程序员容易固步自封。请保持谦虚,向他人学习,不管他是个老手,还是菜鸟。

泽木兴道禅师教诲:“你并不重要。”

自己想想。

5、不要设置职业目标

如果你总是想得到些什么以至于忽略了当下的生活,你已经输了。对于工作,全力以赴即可,别去管将来很长一段时间后才可能达成的目标。

难道拼命工作20年,就是为了成为公司股东?为什么不能因为乐趣而勤奋工作呢?如果真心喜欢,即使辛苦也会乐在其中。“一日不作,一日不食”,禅宗如是说。

没有必要等到20年后再去寻找快乐。即使不是公司股东,即使没有保时捷跑车,现在的你也能拥有快乐。天有不测风云,你可能突然大病一场,可能被解雇,也可能会面临油尽灯枯(如果你遵循了所有这些忠告,我猜这种可能性会大大降低)。

除非这些不好的事情发生,否则只管尽力去工作,并乐在其中。没有理由去和同事攀比收入,也没有理由对未得到的高薪职位耿耿于怀。

毕竟,所得终将会来。你将收获美好的回忆,或许还有个好职位—以及那精彩的20年。每一天都是美好的。

如果某天你认为在公司工作已毫无乐趣可言,请果断离开。千万不要待在夺走你生活之乐的公司。当然,这要在发达国家才现实,因为这里的人完全可以自由跳槽。如果你正生活在这样的优越环境中,果断下决心吧。尽管离开,无怨无悔。时间不可轻易浪费—生命无常,或许明天它就会消逝。

如果你没有设定职业目标,转身离开将会容易很多。

6、敏事慎言

如果没有什么要说的,就不要去浪费同事的时间。这样做并不会让你看上去懦弱无能。在每天的工作中,尽量不要去无端惹人心烦。试想一下,要是每个人都努力做到,那将是一个多么好的工作环境啊?虽然有时这是不可能的,但请努力做到,你会喜欢的。

如果你不过于自我,就很容易做到谨言,只关注当讲之事。不要把你的“个人经验”变成了“自负”。永远记住:你是一位初学者。如果他人有好主意,请保持随喜心。

7、正念、观照、觉察

是的,你正在工作。但与此同时,你也在呼吸,在生活。即使工作再忙再累,也要倾听身体发出的信号。你要知道哪些东西对你是有好处的,所有的,包括像食物等生活必需品。要关心自己及周围环境中一切,毕竟,你所喝之水就来自于周边这条河流。记住,你是为自己而生的—一个人生来,也将一个人死去。即使没有你,地球依旧转动。

请避免在你不喜欢的那种环境下工作。如果某类无偿工作已经让你毫无乐趣可言,而且又剥夺了你的睡眠时间,那就拒绝它。放下所有那些让你不快乐的事情。你以为无偿工作只停留在理想中吗?想一想那些在空闲时间编写开源软件的人。要是你曾订阅过某个开源项目的邮件列表,你就会知道那儿有多少激烈争论(至少有时如此)。如果你觉得它没有什么乐趣,就不要再做了。我认识不少人,他们在自己不喜欢的开源环境中依旧贡献着。利用Time & Bill软件,我再次跟踪了自己在开源项目上花的时间,结果真是令人惊讶。我在那儿浪费了大量的时间,尤其是在许多自己不太喜欢的项目上。

鉴于此,有些人认为只有当有空闲时间,晚上有Xbox玩、有啤酒喝才会快乐。偶尔为之这尚且算是个好主意,但未必在人生的每时每刻这都算是“乐趣”。如果你能避免不喜欢的环境,请避开它们。话说回来,有时我们确实需要做一些无趣的事。例如,手工将经理给的Excel电子表格数据复制/粘贴到phpMyAdmin中。这可能要花上几天,而且无聊至极。这种事没有乐趣可言,但有时你确实需要去做。你总不能因为被分配一个乏味的任务就辞职。禅僧也不羞于他们的工作。他们凌晨3点起床(有时早一些,有时晚一些,取决于僧院),然后即开始静坐和劳动(他们甚至将劳作当作禅修的一部分)。或者清扫厕所,或者料理菜园。如果是一名火头僧,还要做饭。无论做什么,他们都一心一意。没有痛苦,乐在其中。对他们而言,每一秒都是生命中宝贵的一刻,逝去即永不再回,即便是在扫厕所时。

换言之:停止抱怨,如果你需要复制/粘贴Excel,做就是了。无须为这样的事情心神不宁,一切都会过去,就让自己成为最好的Excel复制/粘贴者吧。

要是你在工作中心脏病发作,有人也许会说:“是的,他真是一个勤劳的员工,甚至在晚上为我免费加班”。没有人可以指引你去另一个世界,最后一步是由我们自己走的。你无法拿这个世界中的任何东西与另一个世界进行交换。在生命中的每一秒你都要多多保重。如果你死了,人也就没了,一切成空。但如果你还活着,你就是活生生的一个人。没有时间可以浪费。

在禅宗中,“观照”是一个重要的词汇,并且我认为在各种佛教宗派中都是如此。我无法用言语来表达这个词所要表达的一切内容。要理解“观照”的方方面面含义是很难的。也许用“觉察”这个词更好把握一些。每时每刻,你都要觉察自己的所作所为。在你的一生中必须保持正念,否则就是在浪费时间。当然,究竟该怎么做,完全取决于你自己。勉力为之。

8、做自己的老板

是的,某人付你薪水,告诉你需要做什么。而且他还可以解雇你。但这都不是你放弃自己的生活,成为工作狂的理由。总之,老板对你没有控制权。你甚至也可以怀疑你对自己有无控制权—打住,不要走火入魔。

回到谈老板。如果你一味纵容的话,老板可以让你的生活变得老糟糕。但是有一个解决办法。如果他要你做一些恶心或有违个人道德底线的事情,你大可说“不”。这会有什么后果?最坏的结果无非是被他开除。那又如何?如果你生在发达国家,如果你是一个程序员(要是你正在阅读这些文字,你大概跑不了),你会找到另一份工作。

我并非说对将CSV数据转换为HTML格式之类的任务说“不”。我指的是,一周工作80小时,导致你精神崩溃;你的孩子需要你的照料时;或者仅仅因为老板不喜欢谁就要你开掉他;又或者身为一名咨询师,却受雇为核电厂或坦克开发软件(有些人可能会说为核电企业工作好极了,但这违背了我的道德底线,这里只是举例而已),等等这些,你大可以说“不”。

9、玩物养志

程序员不止是一个程序员。你应该尝试一些跟计算机无关的事情。在你的闲余时间,可以扬帆出海,去钓鱼或潜水,或者静坐冥想,练练武术,吹吹尺八。不管你做什么,都要尽情尽意,就像在工作时间那般投入。认真去做。爱好不仅仅是爱好,它也展示了你究竟是怎样的一个人。不要被任何说爱好不重要的人蒙骗。现在我们有能力拥有爱好。我已经录制多张CD,还写了几本科幻小说(后者尚未出版,我还得多加练习)。这些事情塑造了今天的我,并最终导致我参禅,写成本书。近来我时常练习禅宗尺八,它在我日常生活中占据重要的地位。

10、淡泊宁静

花朵再美也不过是一朵花而已,并无特别之处。而你,是一名程序员,也许很优秀,那也没什么特别的。你、我以及生活在这个星球上的其他人,都没什么两样。

你需要吃喝拉撒。当然,你还需要睡觉。很久以后你终究难免一死,你拥有的一切全都会失去。很久以后,甚至金字塔都会消失。你知道建造金字塔的人们的名字吗?好吧,就算你知道,但这很重要吗?一点都不。金字塔伫立在那儿,或者不伫立在那儿,有什么特别的呢?

这同样适用于你的软件。银行用你开发的软件赚钱,当你离开后,没有人会再记得你。这本来也没什么错,只不过时间流逝,逝者如斯矣。不应该对此感到烦恼。如果你遵循了上面的9条规则,就会明白:那个优秀、有趣的项目已经过去了。现在,是时候继续前行专注他事了。

公司因为财务问题关闭了,没什么大不了的,生活仍将继续。Xbox、汽车等并非不可或缺。这个星球上的大多数人还很贫困,他们不关心Xbox,得到食物甚至只是饮水都会让他们快乐不已。

那么,为什么你是特别的?因为你命好出生在一个发达国家?因为你可以编写代码?不,没有什么特别之处。请放弃“我执”,自由自在地生活,享受花儿的美色和馨香。当冬天来临时,不必伤心难过;等春天回归,亦不必欣喜若狂。不过乃四季交替,顺其自然就好。请记住这一点,尤其在有人拒绝你的求职申请时。没有哪家公司是如此特别,值得你非要得到它的青睐。

你可能感兴趣的:(读程序员之禅)