软件系统工程师主要做什么(软件项目工程师主要是干什么的),新营销网红网本栏目通过数据整理汇集了软件系统工程师主要做什么(软件项目工程师主要是干什么的)相关信息,下面一起看看。

  张淼老师积累了多年的软件工程能力经验。这个话题他之前也分享过很多次,整体内容都有修改和调整。

  张博士毕业后在清华待了12年,主要做网络研究。2006年离开清华,进入该行业。他先做了六年的用户产品研发,后于2012年加入百度。一直在做网络基础设施相关的开发工作,主要是内部服务,在运维部和系统部做BFE平台研发。2020年6月转入外服,现在做BFE的商业推广。2018年1月至2021年10月,兼任百度公司代码规范委员会主席。

  以下内容主要分为三个部分,都是围绕工程能力展开的。第一,讲清楚为什么要重视工程能力;第二,解释什么是工程能力;第三,谈谈如何提高工程能力。

  为什么要提高工程能力?

  这个话题这两年受到很大关注,和现在形势的变化有很大关系。第一个重要情况是行业竞争加剧,很多所谓的蓝海或者非常空白的领域已经不存在了。大家都在同一个领域竞争,竞争非常激烈;成本大幅增加。现在相比美国,中国软件工程师的成本并没有那么大。根据之前的沟通,中国的软件工程师成本已经超过英国,和美国没有太大的区别。产业升级。以前,大多数互联网公司都做ToC互联网,但现在许多公司都转向ToB,ToB对软件研发的要求;d或工程能力发生了很大变化。

  另外发现了一些现象,现在很多互联网公司都在加班。去年996。ICU也出现了。圈子外的人不知道是什么意思。圈内人都知道,每天9点上班,9点下班,一周工作6天,最后累到进ICU重症监护室。今年,我们也发现了一些变化。很多公司开始响应国家号召,减少工作时间,尽量避免六天工作制。但是减少时间后,如何保证工作产出呢?其实要看我们的工程能力。

  我也观察到一个现象,很多从业者写代码写了很久,甚至超过8-10年,但很多都是错的。换句话说,软件工程师就是所谓的青春饭。为什么?其实跟从业者的素质有关系。所以上面的表格需要我们中国的软件工程师去更新迭代。

   003010这本书讨论了中国经济如何转型升级。在这个大趋势下,IT从业者或者中国的软件工程师也要考虑这个问题,就是这四个字“转型升级”。

  什么是工程能力?

  很多人都意识到要提高自己的工程能力,但是什么能力呢?如果没有正确的认识,可能无从下手。有人认为工程能力就是写好代码。诚然,我们很多软件工程师每天关注的,或者平时学习的,只是写代码而已。

  但是今天我想表达的观点是,工程能力不只是写好代码那么简单,也不是有人写好代码那么简单。体现了团队的整体素质。软件工程师大部分是理工科毕业的,人文好像对软件工作没什么帮助。但是,经过20多年的软件研发,我深刻认识到,工程不仅是一门自然科学,也是一门人文社会科学。

  所以从业者有必要关注那些非技术方面的东西,你会发现你工作中很多时间不是花在琢磨技术上,而是很多时间可能涉及到沟通等非技术因素,这些因素对我们包括项目管理都有非常非常大的影响。这些似乎与技术没有直接关系,但对研发有着巨大的影响。项目或工程能力。

  工程能力的定义来自《经济新动能》,这是百度的一个内部文件。写于2019年底。在那个时候,为了提高工程能力,有必要有一个文件来准确地解释什么是工程能力。最后,我们写了这样一句话:利用系统化的能力,在保证质量的前提下,以更高的效率,向客户和用户持续交付有价值的软件或服务。这句话可以分解为以下五点:第一,研发的目的;d是提供价值;第二,质量第一;第三,持续传递价值;第四,系统科学使用;第五,不断提高研发水平;效率。

  软件开发的目的是提供价值。

  业内的现象是,很多从事软件研发的学生;d习惯从技术角度思考问题,更喜欢研究复杂的技术。简单的技术觉得它们没意思,没有兴趣去做。这就造成了我们花费大量的精力在复杂的技术上,却对社会毫无价值。所以下面是我的看法。我们在工作中使用的手段,包括技术设计、编码等技术,都只是手段,不是目的。所以我们不要因为在做的过程中用了太多的手段而忘记了我们的目的。

  在软件项目策划阶段,需要从客户需求或者商业价值的角度来考虑这个问题,而不是在你完全写好之后。另外,要树立成本意识,要考虑投入产出比。做一个项目,应该是盈利的,而不是最终利润小于成本,造成亏损。这是刚刚提到的第一点。软件应该能够提供价值。

  东方的品质。com第一。

  这一点经常被忽视。当项目处于紧急状态时,我们会在时间和质量之间做出权衡,牺牲质量,降低对质量的要求。然后质量也在《百度软件工程能力定义》讨论。第一条先说质量。

  这是作者说的。无论质量如何定义,客户都不会容忍低质量的产品。即使质量很差也要按时交付产品,这在政治上似乎是正确的,但这是短视的。从中长期来看,这是自杀。质量一定是第一位的,没有权衡的余地。非常清楚。当我们用这篇文章来衡量我们的实际工作时,我们会发现很多团队实际上都在做这样的事情。

  那么我们该怎么办呢?

  一、对于所有项目,首先需要明确质量要求。质量不是绝对的,在各种情况下,质量要求可能如下

  所不同。所以我们到底做到什么样的质量,这是需要在项目初期定义清楚。

  第二,在质量方面不能妥协。前面提到我们的软件要交付提供价值,如果是低质量的软件无法提供价值,整个研发活动就变得没有意义了。

  第三点,我们也需要平衡质量和交付时间的关系,不是降低质量,要提高技术水平,通过技术手段更高效率、更低成本的保障质量,比如说我们可以用自动回归 ,甚至用 AI ,用这些高技术来保证质量。

  第四,高质量的软件一定是设计出来的,而不是靠后边测试、运维保证的,这些都已经很晚了。所以我们在设计阶段,就应该保证软件设计的质量,这是非常关键的。

  实现软件价值的持续交付

  观察到很多现象,即项目执行过程当中的前紧后松状态,前边非常投入,花了很多资源,等软件研发出来之后,后边软件没有人关注了,会发现设计文档腐烂、代码没有人维护。原因是我们没有对软件整个生命周期与价值输出有清晰的认识,我们只做了短期准备,我们觉得软件开发完就结束了。

  所以第一点要提升认识,认识到软件开发与维护都是长周期的,一个软件甚至可以运行 10、20 年。在这样的认识基础上,需要综合考虑全周期的研发成本问题,而不是只考虑开始的时候很快的,最后成本非常高。要做好长期维护的准备,而且要持续进行改进,一个软件是逐步通过长期迭代、长期优化产生出来的。

  这一点也非常非常重要。我们可以看到的现象是什么?在中国软件很多从业者是缺乏对软件开发 的深入学习。我曾经做过调研,很多从业者看过真正的软件工程的书籍,不超过两本,甚至有些人没看过,比如说我看到一些列表,某个语言的用法,比如说某些网络知识,这些都不是专业的软件工程的书籍,我们可以看到在中国软件复用比例是非常之低的。

  所以这一点我们首先要认识到,软件工程本身是一个非常专业的方向,软件诞生已经超过半世纪,这些 甚至在上世纪 90 年代已经出现很多成熟的 ,但是非常遗憾的是中国很多从业者,对这些 都还没有充分的掌握。

  另外,我们也要基于现在优秀的基础设施高速迭代,现在出现了像云原生思想,包括很多设施已经云化,这些对我们是非常有帮助的。还有软件复用能力,建立可复用的软件。

  使用系统化和科学的

  是否使用科学的 ,效率差距是非常大的,可能差 10 倍、100 倍,甚至从零到一,你用这些正规 ,有些软件就可以搞定,如果你没有掌握系统科学的 ,这样复杂度的软件你可能根本搞不定。所以掌握科学 ,对我们驾驭大型软件是非常重要的。

  谈到系统科学 ,我引申一下,我们需要坚持软件开发的原则,很多从业者在现实中,我发现很容易屈服于各种外部力量,比如说一个领导怎么怎么说,或者说他的需求方怎么怎么说,或者周围人怎么怎么说,就很容易做出很扭曲的行为。这个原因是什么呢?我思考一下,因为很多从业者并不知道软件研发的基本原则,一个人当他心里没有原则的时候很容易屈服于外界压力,所以我们需要坚持软件开发的原则。

  这里讲到什么是原则,原则是工作的准则,而且它代表了很多的集体智慧。在《软件的 201 原则》里提到了很多重要的原则,我们这儿列了一下,比如说质量第一,先确定问题,再写需求,没有文档的设计不是设计。

  像这样的原则都非常重要,但是你仔细想,在现实工作当中很多团队、很多人在工作当中,不断的打破这些原则,这恰恰是造成我们工作非常低效重要的原因。这里面我写了:没有原则就会随意妥协,结果就是低效、低质的工作。

  这也是百度这些同学为什么在过去两年很努力在推这本书《软件开发 201 个原则》,这是 1995 年出版的非常经典的软件工程书籍,这里面提到很多重要的原则,这本书上个月已经正式出版,我们发现很多开发者对这本书评价非常高。

  但是我也看到很多人对这些原则嗤之以鼻,甚至看不懂,有些人对这本书评价非常低,这一点是非常令人痛心,明明不知道这些原则,当把这些原则告诉他的时候也没有任何感觉,这一点我是非常遗憾的。

  持续提升研发效率

  研发效率绝对不是一天可以见成的,甚至永无止境。发现很多管理者对业务目标非常关注,但是对软件研发的能力并没有持续关注。这是一个非常大的误区。所以提升效率、提升人效,应该是一个软件研发团队一直需要追求的目标,应该去想一想我们今天是怎么做软件的,一年两年之后,我们怎么能够更好的做软件,会有什么变化。

  软件工程能力提升,该怎么做?

  在百度的软件工程能力定义里,工程能力的素质中的个人能力素质,包括团队的能力素质,以及公司的能力素质。个人能力素质包括需求的把握、系统设计,这两个主要是关于前面的设计阶段。编码能力、项目管理,还有运维能力,这是软件后期上线运维,以及产品意识、客户服务意识、安全意识、质量意识,还有沟通能力。对一个个体来说,这些是非常重要的工程能力。

  这里想强调一点,对于工程能力来说,人是根本。我认为人的要素是最为关键的。这里面有一个说法,为什么使用同样工具的人,为什么你的效率只有别人的 N 分之一。

  而且对一个优秀的人来说,他只使用一般的工具,他工作的产出会远远超过一般的人使用优秀的工具。还有一个很重要的趋势是什么呢?小规模优秀工程师团队,要远远超过大规模一般工程师团队。

  这是为什么呢?因为对一个大的团队来说,沟通成本是非常高的,团队内沟通成本是随着人的数量呈指数级上升。所以这方面由于现在软件工具提升,包括各种云平台的出现,实际上把效能变的更大了,一个小的团队可以做非常非常多的事情。

  对于一个优秀产品,一定是来自于优秀的人与团队的,一定不是来自一个一般的团队。我也曾经讲过,软件是人类智慧的结晶,优秀的智慧结晶一定是来自优秀的人与团队。所以我的建议是软件研发主管或者 Leader,多投一些精力培养团队成员。

  从个人素质来讲,我经常简化为三点:代码、文档、项目管理。这三者当中的排序,我个人认为项目管理是高于文档、高于代码,这可能跟很多人的认识会不一样,很多工程师认为代码是最重要,90%甚至 95%以上的软件工程师是忽视项目管理的,没有掌握正规的 。

  首先从代码说起,要求非常清楚,要能写出让别人很容易看懂的代码,这个要求好像非常低,但是其实很多人是做不到的。这里面我引用的是 Python 的非常好的一句话,第一句话是优美比丑陋好,你的显示比隐示更好。其实 Python 语言,很多人没有关注到这里面讲到的东西,所以我们代码应该是写的要尽量简单、尽量优美,要尽量使用简单的 。

  所以写好代码 也很简单,我这边列了五点:

  第一,合理的模块划分。很多同学模块划分有很严重的问题,导致未来软件维护非常困难,也非常难以复用。

  第二,清晰的函数定义。别看函数这么简单,我发现很多同学对函数语义定义并不清楚。

  第三,短小清晰的代码段落。如果我们想想很多同学写出的代码几百行没有任何一行空行、注释。

  第四,准确的命名,强调一下,漂亮代码要具备一定的语文基础,写代码和写文章一样。

  第五,清晰的注释,确实应该讲很多人的代码里面,几乎看不到任何一行注释。

  此外,认真的代码评审,是提升代码质量最好的 ,同时也是传播编程 最好的 。但是非常遗憾,在中国互联网行业还有很多团队没有真正执行代码评审。

  真正的软件工程师在软件上的追求:差一个空格都不行。我们离这个目标还很远。

  工程能力提升的第二点:文档

  我们需要大家重视文档,文档的忽视确实受到了所谓“敏捷”运动的影响,因为很多人对敏捷有错误的认识,似乎很多人的概念里,敏捷就是不写文档。但是我今年确实对敏捷做了一些研究,敏捷运动当时的起源是应对上世纪 80 年代或者是 90 年代非常重视文档要求,做一个项目要写非常非常多文档,文档已经成为工作的负载。所以敏捷思想提出要少写一点文档,是说少写一点,而不是不写,不知道在中国怎么传成敏捷就是不写项目文档。

  在《软件开发 2.0》的书里面明确提出,没有文档的设计,不是设计。所以现实当中很多软件工程师没有做设计,直接就是扑上去写代码,这件事情是非常荒谬的,在其他行业都会去写设计文档,再投入生产,而在我们这个行业,都没有写任何文档,就做完了,开始编码,所以这件事情非常荒谬。

  另外一个角度大家要认识到为什么要写好项目文档,因为在整个项目过程当中我们有超过 50%的时间是用来沟通的,所以沟通效率会极大影响研发的效率。文档的目的是什么呢?我认为,第一点提升沟通的效率,通过一个清晰的文档,可以极大提升沟通效率。第二是提升对思考过程的管理。你在整个设计过程当中,我们把文档作为一种设计工具,用来整理思想。

  所以从这个角度出发,我们很多人关于文档是作为最后存档方式的一种认识,是非常错误的。这里面我写了两句话,第一,不会写文档就等于你不会做设计。第二,不会写文档就无法成为高级工程师。

  所以很多人的天花板是非常明确,可能写了 8-10 年的代码,但是你不会写文档,所以至今仍然无法跃升成为高级软件工程师。

  怎么才能写好文档?第一,用户思维。比如说写需求文档,要从用户角度想问题,而不是从内部实践角度。

  第二,准确的概念定义。这跟刚才讲代码命名有一点类似,命名代表了概念,在文档里面也同样面临着概念的问题。

  第三,要有清晰准确的逻辑,这一点也非常重要。

  第四,可能大家一般没有关注到,就是规范的表达方式。无论是用文字还是图表,我确实在工作当中会说,某某同学请你不要再使用你的方言。很多人确实没有使用规范的方式,他用自己看懂的方式表达,别人理解起来很困难。

  第五,一定要有研究和思考能力,我们在工作当中都在不知不觉做着研究,研究就是定义问题、分析问题、解决问题。

  第六,严谨科学态度,很多同学写文档有很多的问号、不清楚的地方都留下来,这样的话保留之后进入下一阶段,这样做的系统是经不起历史与时间的检验。

  第七,要认真和充分的设计评审,很多团队在代码评审上做的不好,应该在文档评审上做的更差,很多文档可能没有人看,直接通过了。所以这里面现在是 7 点,似乎好像很简单,如果能把这些做到,我们一定可以产出非常高质量的项目文档。

  软件工程师主要做什么

  印度尼西亚属于哪个洲(地跨两大洲国家到底“算”哪个洲)

  印度尼西亚属于哪个洲(地跨两大洲国家到底“算”哪个洲)

  dnf拍卖行优惠券(DNF:26号代币券能领了)

  经典电视剧排行榜(十年前十大爆火剧)

  网络小说排行(起点排名前20的完本小说)

  swf文件怎么打开(swf文件丢失了怎么办)

  网页游戏人气排行(6月端游网吧排行榜)

  日本奶粉(中日毒奶粉案对比)

  笔记本电池激活(笔记本电脑充电指南)

  太阳镜品牌(15款太阳眼镜测评)

  隔夜利率(隔夜利率跌破1.3% )

  好看的玄幻小说完结的(8本已完结爽文向剑修玄幻小说)

  更多软件系统工程师主要做什么(软件项目工程师主要是干什么的)相关信息请关注本文章,本文仅仅做为展示!