无意间看到茹冰生老师写的一篇文章,受益匪浅。 本文转载自:茹冰生聊天软件开发公众号。
核心思想
人是软件开发的执行者。 流程是软件开发的系统。 技术是软件开发的本质。 三者缺一不可,但都围绕着人类的根本驱动力。
业界普遍的观点是,人、流程和技术构成了软件开发的“铁三角”。 然而,对于三者哪个更重要、哪个不太重要,一直存在很多分歧。 本文拟以此为题,从科学技术哲学的角度谈谈我的看法。
三者中,流程和技术有着深远的影响,稍后将讨论。 我们先看人:
人:软件开发的执行者
关于人在软件开发中的作用,我的第一印象是:人是软件开发的执行者。 虽然这种印象并不为很多“人文主义者”所接受,但在我看来却是中肯的。
“执行人”这个称号似乎贬低了人的作用,但事实上并非如此。 需要说明的是,执行者不仅包括被视为行业蓝领的程序员、测试人员软件开发人员,还包括被视为白领的项目经理、系统分析师、系统架构师、系统设计师等。 你没见过大大小小的各个公司前台站着的一号人物吗? 他叫什么名字? 首席执行官也是。 CEO是首席执行官,或执行总裁。 即使是行政长官,即使他是总统,他也只是一个执行者。 在公司里,从CEO到普通员工,每个人都是所谓的“劳动者”,都是公司意志的执行者。 (公司的意志就是资本的意志,这些都不属于本文的主题,不再赘述。)
同样,当讨论的领域是软件开发时,上述所有开发人员都只是软件开发的执行者,执行软件项目的意志。 软件项目的意愿是什么? 很简单的两个字——需求。 这有很大的背景。 现在的经济是市场经济,市场经济的特点就是以需求为中心。 需求是生产之母。 这是市场的铁律,也是面向市场的软件开发的铁律。 因此,一个软件项目的意志只能是需求,而在这个意志下的一切技术活动(即软件开发)只能是这个意志的执行。 那么软件开发者都是执行者。
当然,有人会说:“你太片面了,除了软件开发者之外,还有一类人——提出需求的利益相关者。他们不也是人吗?所以人不仅仅是执行者,而且还是大师!” 说到这个问题,我们首先要明确的是,我们讨论的领域是软件开发,而不是软件项目。 两者有联系,但也有区别。 对于软件开发来说,一切都是从需求开始的。 至于提出需求的人,他们只是被需求分析师视为需求的来源和沟通的对象,而不是开发的一部分。 换句话说,如果给软件开发画一个边界,那么提出需求的人都在边界之外,只有软件开发人员在边界之内,只有他们才是软件开发的人!
作为执行者,人们发挥着巨大的作用。 一切发展,离开了人软件开发人员,都是空谈。 人的素质、地位、人际关系直接决定软件开发的成败。 这样的例子还有很多,我就不一一列举了。 这里我们用军队来比喻吧。 如果把软件开发比作战斗,那么开发人员就是军队中的官兵。 无论军纪多么严格,武器多么先进,只要军官穷、士兵弱,那么军队就注定失败。 相反,游击队也能打败正规军,小米加步枪能打败飞机和大炮。 人的作用是显而易见的。
当然,再重要的人,也只是“铁三角”的一个顶点。 在软件开发中,过程是不可忽视的,因为:
过程:软件开发的结构
流程是软件开发的系统。 此言一出,就会引起不满。 过程理论家肯定会跳出来批评我的偏见。 但我依然不悔,认为这是最恰当的说法。
大部分的不满来自于“制度”二字。 在当今中国,“制度”一词带有很强的贬义。 政府部门腐败现象普遍存在,答案是:“这是制度的问题”。 造导弹的人不如卖茶叶蛋的人,他们回答:“这是制度的问题。” 中超造反,被世界杯淘汰,但答案依然是:“这是制度的问题”。 。 不管大事小事,难事容易事,出了问题,把责任归咎于制度,就万事大吉了。 不管怎样,一切出错都是系统的错,所以你是对的,我是对的。 制度不能改,也不能改(如果真要改,谁来当替罪羊?),所以错误的制度永远存在。 这是不可抗力,超出人类控制范围。
我们在这里不讨论中国的国情,只是通过这个来了解“制度”二字的分量。 其实,更简单地说,制度就是固化的规则和经验。 因为我们过去取得过成功,也吸取了一定的教训来避免失败,所以在同等情况下,制度会带来更大的成功概率并形成权威,让后来者减少扯皮,提高效率。
所以,“制度”一词不仅不是贬义词,还包含着很多褒义成分(只是被滥用了,变成了小人而已。)。 现在看软件开发中的流程,与系统的含义完全一致。 因此,合适的流程引导人们正确完成各项发展活动,一步步走向成功; 不恰当的流程会将软件开发推向无底深渊。
将过程视为软件开发的一个系统,不仅是因为两者在现象上是一致的,更重要的是我们对待它的态度也应该值得借鉴。 如今,很多开发人员在开发过程中遇到问题时,往往会将责任推卸给流程,然后感叹:“有CMM(软件过程改进的一种评价标准,其对应的方法论是RUP)”那就太好了。 ”然后项目经理不厌其烦地拍桌子喊道:“要有一个CMM!”于是,就有了一个CMM。经过一年的努力,终于通过了CMM认证,但还是遇到了开发问题仍有开发者表示:“填这么多表格太费时间了;” 我们不应该用RUP,改XP(强调快速性)就改用适应性强的软件开发方法论,美其名曰极限编程。”然后项目经理就头晕了,闭上眼睛休息,说:“那就改成XP吧。 ” 于是,他就换成了XP,谁知道还是会出问题。这个时候,开发人员并没有抱怨,因为项目失败了,项目经理也被解雇了。这不是玩笑,而是我亲眼所见的。自己的眼睛。
可见,这个过程不能被神话,更不能被滥用。 世界上没有一刀切的流程,只有因地制宜、因人而异地选择合适的流程,并在执行过程中不断改进流程,才能取得成功; 相反,我们只能失败。 ,不做他想做的事。
系统这个词真实地反映了过程在软件开发中的地位。 然而,仅有人员和流程还不够。 最后一个关键因素是:
技术:软件开发的本质
要解释技术在软件开发中的作用,我们首先要谈谈为什么会有软件开发。 软件开发,顾名思义,就是开发软件。 那个软件是什么? 可执行程序? 有利可图的产品? 两者都正确,但都不够全面。 从根本上来说,软件是技术的载体,是定制化的技术,是针对特定需求的技术应用。
显然,技术是嵌入在软件中的。 不然别人怎么会买你的软件呢? 当然,软件不仅仅包含技术,还包括开发人力成本、机械成本、时间成本等。但技术才是本质,是这个软件不同于那个软件的根本原因。
软件的竞争力不在于其规模或各种成本,而在于其功能性和非功能性特征,而在于这些功能性和非功能性特征所包含的技术。 例如,微软为什么能够主导PC操作系统市场? 不是人,不是管理,而是技术,它将图形用户界面与操作系统和Windows技术合二为一。 在微软之前,并不是没有好的图形用户界面(苹果的Macintosh是这方面的先驱),也不是没有好的操作系统(DEC、IBM等公司的Unix极其强大)。
然而,只有微软将图形用户界面技术与操作系统技术结合起来,应用到Windows上,形成了自己独特的Windows技术,从而崛起并创建了微软帝国。 更何况,当采用Dos内核的Windows 95/98无法完全满足市场需求时,微软毫不犹豫地更换了整个开发团队,采用Unix技术重新开发Windows(微软称之为NT,即新技术),所以WinNT、Win2000、WinXP等在新千年依然辉煌。 可见,Windows的发展史是技术在软件过程中的作用的最好说明。
当然,软件开发中的技术不仅指软件中沉积的技术,还包括开发技术本身。 如开发环境、管理方法、流程工具等,都是开发技术的应用领域。 可以说,软件技术和开发技术是软件开发的本质。
简而言之,在软件开发领域,人、流程和技术缺一不可。 “铁三角”三个字确实名副其实,三者缺一不可。 那么哪一项是最重要的呢? 如果我们只考虑软件开发本身,可能很难给出合适的答案,因为偏袒一物必然会误入歧途。 那么这篇文章似乎可以到这里结束了。 但字数还是不够! (哈哈,开个玩笑)那么继续思考——如果抛开软件开发的具体领域,一般意义上哪个更重要? 那么当你回到软件开发领域时,你会发现:
再论人:根本动力
人是万物之灵。 这种说法也会引起很多批评。 然而,即使是最激烈的批评者也不得不承认其中有合理的部分:正是人们的情感、认知和创造能力构建了我们所生活的人类社会。 除了情感之外,人类的认知能力和创造力也是软件开发的根本驱动力。
在软件开发中,人无处不在。 显然,软件开发的执行者是人。 那么软件开发流程是怎样的呢? 该过程由人来实施和管理。 不用说,这充其量只是执行的一部分。
这里我想讲的是这个过程本身,它是如何产生的? 这个过程并不是凭空产生的。 当流程成为一个系统时,也依赖于人们不断的创造——使用——改进——重用——再改进。 在流程改进的过程中(用现在的行话来说,这叫元流程,即元流程,流程的流程),需要的是人,是创造新流程的人,是推动新流程的人。流程的改进。 ,是人利用流程在软件开发上取得了成功!
这里要注意的一件事是这个人不是那个人。 这里的“人”不是指“铁三角”一端的人,而是指项目的开发者和软件开发的执行者。 这是所有从事软件开发领域工作的人的总和。 这个“人”并不在某个软件开发的界限之内,而是以将软件开发视为一个整体领域为前提,包括软件开发的过去、现在和未来,包括无数的软件开发和无数对软件开发的研究。 下面,这个领域的一个概念,是历史上出现过的、现在正在做的、将来会涉及到的所有开发者和研究人员的总和。 人的认知能力和创造能力在这个“人”身上得到了充分的体现。
正是这个人在最初混乱的软件开发实践中发现了软件开发流程的重要性,并逐渐创建了各种软件开发流程并用它们来秩序化软件开发;
正是这个人在使用软件开发过程的实践活动中发现了过程中的不足,并吸取教训加以改进,从而使软件开发过程更加合理有效;
正是这个人不局限于过去创造的流程,而是以扬弃的态度继续致力于软件开发,使不断演化的软件开发流程真正成为软件“铁三角”的巅峰。开发并提供软件 开发并服务人类。
我们每一位软件开发人员、每一位从事软件开发的研究人员都是这个人的一部分,他们都通过自己的活动体现出这个人的角色。 所以,我们的整体就是具体形式的他,他就是抽象形式的我们。
当然,不仅是过程,而且人在技术中的作用也是相似的。 技术作为科学与生产之间的桥梁,技术的产生、改进、普及和消亡都离不开人的推动。 因此,人是软件开发的根本驱动力。 软件开发的“铁三角”,包括作为软件开发执行者的人、软件开发系统的流程、作为软件开发本质的技术,都是以人作为根本驱动力。 作为核心。 概括起来就是“一核三顶点,缺一不可”。
那么,当我们认识到人在软件开发中的核心作用时,我们应该做什么呢? 全用以下的话作为这个问题的答案,并结束本文:
如果 A 到 Z 的得分为 1 到 26,
你的知识分数只有96分(11+14+15+23+12+5+4+7+5);
而你的努力只是得分98(8+1+18+4+23+15+18+11);
而你的态度决定了你生活的一切(1+20+20+9+20+21+4+5)。