程序员

首页 » 常识 » 问答 » 程序员修炼之道笔记一
TUhjnbcbe - 2023/9/7 23:07:00
北京白癜风医院有哪些那个好 http://www.znlvye.com/m/

这几天开始看《程序员修炼之道》,也许不少人看了书的标题,第一时间会觉得这是鸡汤一类的书。但至少以我自己的感受来看,这是很棒的书,现代人文主义不是提倡自我意识嘛,自己感觉好的就是好的。况且人家也是经过了时间和口碑的双重考验的,真心值得好好阅读。

作者在再版的序中写道:

写完《程序员修炼之道》至今已有十年。在这十年中,软件产业发生了翻天覆地的变化。……从表面上看,软件世界似乎陷入了疯狂的状态。但如果你深入繁杂表象的背后,会发现变化其实并不大。年的那些通用开发原则,在年同样有效(很可能到年还会有效)……

大师就是这样,能从繁杂的表象背后看到事物的本质。就像任正非说的:不管是不是互联网思维,你造的汽车首先应该是汽车。

书中的内容多是两位作者对多年经验的敏锐抽象和升华,对我这个只有一年多经验的程序员来说,要全部理解是不可能的,而好书也不是读一次就够的。这里就先记录一些有点感触的内容:

第一章注重实效的哲学

下面是作者在开篇提到的注重实效的程序员的特征:主要体现在处理问题、寻求解决方案时的态度、风格、哲学

1.能够超越出直接的问题去思考,总是设法把问题放在更大的语境中,设法注意更大的图景。没有这样更大的语境,你又怎能注重实效。

2.对所做的每件事负责,因为负责,注重实效的程序员不会坐视他们的项目土崩瓦解或者慢慢腐烂。

3.勇于接受变化。大多数人发现自己很难接受变化,有时是出于好的理由,有时只是因为固有的惰性。

4.拥有广泛的知识和经验基础。

5.善于交流。

从“程序员修炼之道”突然谈到“注重实效的程序员”,咋看有点突兀,但如果看看原书的标题TheProagmaticProgrammer,就不会有这种误会了。越往后看本书,越能体会到作者提到的这几个特征的必要性。处理问题、寻求方案时的态度、风格、哲学,这些对我们在软件开发中的行为是潜移默化而影响深远的。

1.我的源码让猫给吃了

a.在所有弱点中,最大的弱点就是害怕暴露弱点。

b.不管是在职业生涯、还是项目、日常工作,为你自己和你的行为负责,是注重实效的哲学的一块基石,注重实效的程序员对自己的职业生涯负责,而且不害怕承认无知或错误。即使在最好的项目中,尽管有彻底的测试、良好的文档和足够的自动化,出错是难免的事情。一旦发生这样的事情,我们要设法尽可能职业地处理他们,要诚实坦率。我们可以为自己的能力自豪,但对于自己的缺点、无知和所犯的错,我们必须诚实。

c.责任是你主动承担的东西。在作出承诺之前,尽可能的分析风险是否超出了自己的控制,对于不可能做到的事情或风险太大的事情,你有权不去负责。但如果你确实同意为某个结果负责,就应切实负起责任。但你犯错误或是判断失误是,就诚实地承认它,并设法给出各种选择。不要责备别人活别的东西,不要拼凑借口。遇到问题时,提供各种选择,不要找蹩脚的借口(Provideoptions,Don’tmakelameexecuses)

“我的源码让猫给吃了”便是一个蹩脚的借口。要做到坦然地暴露弱点,确实很难,但这是必要地,有一句很简练的话:BeHuman。我们要明白自己是普通人,而不是某种完美的物种,我们有失误、疲倦、胆怯,允许这些发生并正视这一切,同时努力成为更好的人。而说到责任,作者首先教我们的是正确评估事情的风险和自己的能力,如果风险超过了自己的控制,有权不去承担。这真是再“实效”不过了。

2.软件的熵

熵是一个物理学概念,指的是某个系统中“无序”的总量。当软件的无序性增长时,称为“软件腐烂”。而造成软件腐烂的原因主要是:开发项目时的心理(或文化)。软件开发同样受“破窗理论”影响,低劣的设计、错误的决策、糟糕的代码都是软件领域的破窗户。一旦窗户开始破裂,情况就会迅速恶化,不要对其置之不理,发现一个就修复一个,如果临时没有时间,就“用木板把它订起来”,比如注释、显示“为实现”消息,或用假数据(dummydata)加以替代。

对于这一点挺有体会,我见过有的软件,编译器给出了多个警告而置之不理。但话说回来,这又怎么处理,当看到前人留下的多个警告的时候,我们尝试过处理一下自己就近的,但马上就会觉得无助。只能小心别让自己增加更多的警告。当若干年前第一条警告出现的时候,窗户已经开始破裂,直到膨胀到无法收拾的地步。

3.足够好的软件

a.欲求更好,常会把好事变糟——李尔王

b.我们没办法做到十分完美,但可以训练自己,编写出足够好的软件,对你的用户、对未来的维护者、对你的内心安宁来说足够好。但“足够好”绝不是编写不整洁或糟糕的代码

c.如何编写出足够好的软件:

1)让用户参与权衡

软件开发过程会受到各种约束,比如市场人员有需要信守的承诺,最终用户也许已经基于交付日期制定了各种计划,公司也会有现金流方面的约束。如果无视这些约束,一味地增加新特性或一次次润饰代码,这不是有职业素养的做法。但许诺不可能兑现的承诺,为赶上最后期限而削减基本的工程内容,同样不是有职业素养的做法。

使质量成为需求问题。常常需要权衡足够好与完美,许多用户宁愿在今天用上有一些“毛边”的软件,也不愿等待一年后的多媒体版本。今天的了不起的软件常常比明天的完美软件更可取。而且让用户提前使用,他们的反馈可以把你引导向更好的解决方案。

2)知道何时止步

艺术家们会告诉你,如果你不懂得应何时止步,所有的辛苦劳作就会遭到毁坏。比如绘画,画家需要不时得后退,用批判的眼光观察自己的作品,以确定下一步,但如果你一层又一层地叠加细节,就会迷失在绘画中。程序也是这样,不要过度修饰和过于求精二损毁完好的程序。

区分完美主义与强迫症真是一件困难的事情。在现实生活中,两者都可能带来问题。还好作者提示“如果无视这些约束,一味地增加新特性或一次次润饰代码,这是不有职业素养的做法”,让我们懂得权衡并知道何时止步。同样地我想到最近发生在自己身上的一件事,遇到技术上的困难没有请教别人,耗费了很多时间才自己搞出来,这同样不是有职业素养的做法。

4.你的知识资产

a.你的知识和经验是最重要的职业财富,但它们是有时效的资产。随着你的知识价值的降低,对你的公司和客户来说,你的价值也在降低。

b.怎样经营管理知识资产,与金融资产类似:

1)定期投资。即使投资量很小,习惯自身也和总量一样重要。

2)多元化是长期成功的关键。你知道的不同的事情越多,你就越有价值。但作为底线,你需要知道你目前所用的技术的各种特性,同时不要就此止步

3)在保守的投资和高风险、高回报的投资之间取得平衡。不要把所有的技术放在一个篮子里。

4)低买高卖,以获取最大回报。在新兴技术流行之前学习它就可能和找到被低估的股票一样困难,但所得到的就和那样的股票带来的一样。

5)周期性地重新评估和平衡资产。

知识如同财富,需要用心经营,这听起来挺功利的,但对于技术性的知识来说,确实应该采纳作者的这些建议。

5.交流

交流的重要性自不必作者多说,在交流技巧方面,作者建议考虑WISDOM原则:

Whatdoyouwantthemtolearn

Whatistheirinterestinwhatyou’regottosay

Howsophisticatedarethey

Howmuchdetaildotheywant

Whomdoyouwanttoowntheinformation

Howcanyoumotivatethemtolistentoyou

总体来说,就是首先要了解交流的对象,并能够站在对方的角度想问题,同时要经常跳出事情本身来看看大局

1
查看完整版本: 程序员修炼之道笔记一