[译]从《孙子兵法》到软件开发

2019独角兽企业重金招聘Python工程师标准>>>

孙子兵法的原则和教诲已经在政治、商业、体育和软件开发中都得到了实际的应用。

《孙子兵法》是一本写于公元前15世纪的关于古代军事著作,并 且归因于孙子,一位中国古代军事策略家,他的理论对于东方和西方的哲学都产生了巨大的影响。

除了那个时代外,这些内容仍然包含在了很多亚洲东部军事学校的教学大纲里,并且在西方的某些军事学院里作 为推荐读物之一。

在下面的细节中,你将找到基本谋略的一个简短列表以及在《孙子兵法》中解析的技巧。他们很可能可以应用到 你在软件行业的工作中,或者任何其他行业中。

在任何战争中时间都是至关重要的

第二章 作战篇,第二段

“其用战也胜,久则钝兵挫锐,攻城则力屈,久暴师则国用不足。”

这个原则可以应用到软件开发,作为描述开发周期的长度与开发人员情绪之前关系的一条规则。

如果一组开发人员在相同的项目上工作数月,没有明确的目标也看不到明显的尽头时,他们将可能会变得沮丧并 且生产力下降。

责任自上而下。如果你的团队领导差强人意,再多有天赋的工程师也无能为力。

尽管开发人员经常独自工作(每个人都坐在电脑后面,与同伴进行有限的沟通),但这不意味着他们不需要好的领 导。项目管理者负责维持团队在正常的轨道上,确保有效的沟通和解决方案的讨论,并且领导,明显地,要定义项目 (在其他任务中)的优先级,所以他们的角色不应该被低估。如果出现某些问题也不应该是他们的责任。 想象一下对于在战役中他的单位执行任务失败的话对于军事领导会发生什么/p>

即使在开发位置上有一些坏苹果,一个团队还是可以产出伟大软件的,但是如果_项目管理者_ 本身就是坏苹果,那么 基本就是不可能了,不管这个团队有多少明星级开发人物。

第六章 虚实篇,第28段

“故其战胜不复,而应形于无穷。”

有时,当开启一个项目时,会倾向于使用我们在先前成功项目中所用到的技术系列(相同编程语言,相同类库,相 同有服务器,等)。然而,除非新项目的需求与前面的那些_完全_ 相同,否则这可能是错误的方式。

在编程的世界里,正如有大部分领域里,没有灵丹妙药(包治百病的东西)。没有一个简单的技术组合可以用于解 决全部的问题;每一种技术都各有所长,也各有所短。

当然,学习一门新的编程语言或者使用一个未知的API在最初可能是高成本的,但从长远的角度来考虑,软件的质量 会优质的而你会成为一名更好的开发人员。

第十三章 用间篇,第27段

“故惟明君贤将,能以上智为间者,必成大功。此兵之要,三军之所恃而动之。”

此短语可以解析理解为在维护阶段使用监控工具和日志类库的重要性。

忙乎有时客户并不这么想,开发并不是结束于获得一个稳定以及经过完整测试的发布版本。软件总是在不断演进,或 者通过修复bug,或者通过添加新的特性或者是提高效率。

由于并不总是能够在测试环境重现相同的场景,错误 告、日志条目和用法数据是检测bug、识别瓶颈和其他问题的基础。

团队合作与驱动力

第十章 地形篇,第24段

“故进不求名,退不避罪,唯民是保,而利于主,国之宝也。”

基本上来讲,这是古代中国“团队不分你我”的版本。相比追求个人收获,与其他人一起工作更重要。

软件开发是一项需要开发人员进行高效团队合作的复杂的活动。一位好的开发人员不是修复最多bug的那个人,不是实 现了最多特性的那个人,也不是超前完成任务的那个人;_一位好的开发人员是帮助团队完成目标的那个人。_

如果你是一位有天赋的开发人员,你需要跳出箱子来思考。这个箱子是用来预防不能胜任者乱来的。而不是为你准备的。

第三章 谋攻篇,第1段

“夫用兵之法,全国为上,破国次之;全军为上,破军次之;全旅为上,破旅次之;全卒为上,破卒次之;全伍为上,破伍次之。”

当工作在一个有大量代码库的项目时,通常会发现用错误的实践或者使用废弃类库实现的代码模块或部分。尽管可 以倾向于擦除(或者毁灭)这些代码,但出于以下几点理由最好不要这么做:

  • 遗留代码不一定是坏的,有时当考虑了其他方法和技术的话这些代码是好的。然而,老并不意味着不能工作。

  • 你可能浪费了时间去_修复仍然可以工作_ 的代码而不是修复其他更严重的问题。

  • 除非你确切知道你正在做什么,替换一段可以工作的代码意味着你面临着引入新的错误或者bug的风险。

这并不意味着短语 “如果没有坏,就不修它。” 是一个好的策略,但每一个项目都有其优先级,目标和时间约束。 所以,如果你找到了可以改进的代码,和团队的其他成员或者和项目管理者讨论一下以便知道何时优化之。

第八章,九变篇,第3段

“途有所不由,军有所不击,城有所不攻,地有所不争,君命有所不受。”

即使它没有明说,但我们可以解析此原则为对反模式的一个警告。

虽然使用反模式可以解决一个短期的问题,但你应该记住在长期上它是适得其反的。所以,不管你节省了时间, 修复了多少个bug或者对于你来说是多么的方便,避免之。

纵使这样,你还是会一次又一次地倾向使用一个反模式来解决一个紧急的任务,并对自己承诺你会当你有更多的 时间时会实现一个合适的修复,但请记住墨菲定律之一:_ “所有的事都会比你预计的时间长(All quick fixes become permanent changes)。”_

结论

尽管开发软件有别于在战争中指挥士兵或者领导一个国家,但是全部这些都是需要团队合作,杰出领导力,高效 和长期的解决方案来解决问题。

然而,《孙子兵法》并不是唯一一本包含了可以应用到软件开发的原则的书。例如还有尼科洛·马基雅维里的__《君主论》__。

事实上,这里列出了马基雅维里相关的一些引用。试着猜想一下哪些是软件开发世界中合作的原则。

  • 1、狮子不能保护自己免受陷阵之灾,狐狸不能保卫自己免受狼的追捕。所以要同时像狐狸一样识别陷阱,又要像狮子一样吓退狼。

  • 2、永远不要试图通过欺骗来赢得胜利 。

  • 3、不经历风雨,又怎能见彩虹。

  • 4、想要获得持续的成功就得要随着时代改变自身的行为。

  • 5、人们通常是以貌取人,而不是根据本质判断。人都有眼睛,但有洞察力的却很少。

  • 6、深谙将道方能 令三军。

  • 7、智慧在于知道如何辨别故障的性质,以及选择两害取其轻的。

  • 8、没有可以避免的战争;它只能推迟到你的敌人的优势。

  • 9、自然创建了为数很少的人;工业和训练则创建了很多。

————————    

文章知识点与官方知识档案匹配,可进一步学习相关知识Python入门技能树桌面应用开发Tkinter208195 人正在系统学习中 相关资源:小兵软件安装程序破解版-其它工具类资源-CSDN文库

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2016年3月2日
下一篇 2016年3月2日

相关推荐