和软件开发相关的一些思考
1.
虽然有一句话叫“deadline 就是第一生产力”,并且在很多人身上还挺灵验的,包括我。但是这个“灵验”,其实是不考虑质量的。
如果考虑质量的话,通常 deadline 是没有用的。这是因为,在大多数时候,对于脑力劳动者来说,所做的事情,并非是对以前工作的重复。
永远有新的状况会发生,导致 deadline 无法完成。所以,真正良性的项目开发过程,不是拼命去赶 deadline。
当然,这不意味着制定 deadline 或者制定计划没有意义。但关键是,在项目执行的过程中,需要不断地根据实际情况去调整计划。
这本质给项目管理带来了挑战。因为项目管理者需要小心地分辨:deadline 没有完成,到底是项目成员怠工?还是项目计划制定不合理?亦或者是新的,没有预估到的情况发生所导致。
这些判断,分析,对项目的把控并合理做出调整,就是有经验的项目管理者的价值。
而一刀切地使用固定的 deadline,是没有技术含量的,随便谁都能做。
在软件开发的过程中,一刀切地使用固定的 deadline,结果也一定是牺牲软件的质量。
2.
以上这一条,同样适用于很多非软件开发的脑力活动。比如学习。
给自己制定计划,每周学习多少内容;每天背多少单词;每天看多少页书;等等等等,通常都是不合理的。
合理的学习计划不是在学习之前制定出来的,而是在学习的过程中,慢慢调整出来的。
否则,一味地坚持自己最初制定的学习计划,只能牺牲学习质量。
如果你经常主动学习,尤其是有质量的学习,一定会经常调整自己的学习计划,认真审视自己最初制定的学习计划的不合理之处。
慢慢的,你就能找到自己的学习节奏,制定出越来越合理的,适合自己的学习计划。
你就变成了一个“有经验的学习者”。
我曾写过一篇文章,叫《慢增长》,也聊过这个问题。
3.
永远不要让开发者估计开发时间。大多数开发者(在我看来是所有开发者,包括我)都会高估自己的开发速度,低估软件工程的复杂程度。
所以,再一次,有经验的项目经理是非常重要的。当然,前提是有经验。
这则漫画搜索自网络,我没有找到作者信息。侵删。
4.
不同的语言,平台,框架,IDE,系统,编程范式,等等等等,他们都只是工具而已。
因为这些工具而打架,是很幼稚的。
争执到底是 Java 好还是 Python 好,到底是面向对象好还是函数式编程好;已经暴露了你是一个初级程序员。
这近乎等于是在争论:到底是十字改锥好,还是一字改锥好,亦或者是扳手更好。
关键的问题不是谁更好。实际上,我们也无法定义出到底什么是“好”。
关键问题是:你现在的项目,你现在要完成的事情,你现在要解决的问题,使用什么工具更合适。
软件行业的经典结论,就是没有银弹。
不管你对什么技术疯狂的痴迷,都应该明白,这种技术不能解决所有问题。
5.
我有些怀疑,一门心思地只做技术,不与人做“真正的沟通”,会让人越来越自大。
因为技术是一个太有掌控感的事情。计算机一定按照你写的每一行指令去运行。而计算机运行出你所期望的结果,又是一件太有成就感的事情。
这两件事情在现实世界都不太会发生:
1)没有人会永远按照你的指令去做事情,哪怕你是总统,首富,或者 CEO;
2)世界不会按照你所期望的方式运转。
所以,很多人技术做得太久,会孤芳自赏,会自大,会渐渐“丧失”理解其他人的能力。
这里说的技术,是广义的,不仅仅局限于计算机技术。
技术人员也需要多和“人”做真正的沟通,而不仅仅是和计算机做沟通。
了解不同人的想法,不同人思维的差异,可以让你更容易地去接受这个世界存在着的不同。这将让你更谦虚。
在我看来,这种谦虚,是有力量的。
众所周知,乔布斯是一个自大的人。但是,请大家看看这段影片所展现的,到底是乔布斯更自大,还是提问的技术人员更自大?
这则录像来自 1997 年,乔布斯刚刚回归苹果不久,一次开发者大会上,乔布斯对这样一个问题的回答。
“乔布斯,你是一个聪明又有影响力的人。但是很遗憾也很明显,很多时候你根本不知道自己在做什么。我希望你能用清楚的语言解释一下 Java 编程语言以及其变种是如何阐述 OpenDoc 内置的一些想法。等你说完以后,你能不能跟我们说一说你自己过去七年都干了些什么?”
我们可以说乔布斯展示出的风度,在于他视野的广阔,经历的丰富,等等等等。
但在我看来,最根本的一点,还是在于:乔布斯关注“人”。
乔布斯可能是一个自大的人,但是,他尊重他的“用户”。
而技术,总归是要为人服务的。
以上。
大家加油!:)
本文相关阅读推荐:
如果喜欢我的文章,点个”在看“吧