难吃的饭菜也是饭菜,饿了什么都会吃。
小时候听到这句话时觉得这是歪理,就是长辈用来吓唬小孩儿的。今天写代码的时候好像是突然开悟了,好像很多事儿都是这样的。我们平时工作生活中都习惯性选择自己喜好的方向,比如我就喜欢写代码,喜欢搞各种硬件,因此我觉得软件测试、软件发布很无趣,也觉得没什么技术含量。但事实真是如此吗?一个合格建筑工程师不应该仅仅是一名砖匠、木工、电工。工程师使用有工程思维优秀人才,匠人很多时候比较依靠体力,工程师则更多依靠脑力,知道工程整个生命周期需要完成的工作,明白那些工种、岗位不可或缺,那些可以兼任,那些是多余。不需要每个方面都十分精通,事实上也没有人能做到事事精通。
软件工程师也是这样,软件工程是一个系统工程,需要多方面工作一起配合才能出好的产品。因此一个软件工程师是一名拥有工程思维的高水平人才,深入理解某种开发方法论。从需求收集、需求分析、任务划分、开发周期规划、测试、发布、后期维护升级等都需有所了解,再往上推一层,需要知道需求分析的方法论,比如说用户访谈、事件风暴等,需要知道软件架构以及开发模型的的选择,是采用领域驱动模型、还是测试驱动模型,还是简单MVC三层架构等等。在往上就跟软件关系不大了,更多的是项目管理、企业文化等问题了。比如如说,企业在完成某个项目是采用那种项目管理方式,精益、敏捷等,在成本与价值之间如何做衡量的?
话题扯的有些远了,我之所以想到那句话,是因为回想起了过去的一些认识。比如:我只想安安静静的写代码,不想去做业务; 售前人员不懂技术,随便乱答应需求等等。这些都不应该是一个合格软件工程师该有的想法。在工作title上大家都是工程师,售前咨询工程师、软件开发工程师、测试工程师、运维工程师、售后支持工程师等等,出现各种乱象的原因就是大家都有自己的专长,更希望将所有事情往自己擅长领域靠,但实际上各个领域实际情况都有所不同。如果大家都只吃喜欢吃的菜,那桌子上将一片狼籍,除非刚好每一个菜都有喜欢吃它的人,但这太困难也太巧合了,所以说能遇到一个刚好合适的团队很幸运。大多数团队都与实际情况有些出入,那这个时候该怎么办?
所以需要优秀的软件工程师,他不是没有自己擅长领域,只是因为他不挑食,明白那些菜没人喜欢吃,是否可以加减的什么改善一下,实在不行可以自己吃的人(或者勇于端去倒掉)。这种思维方式与当前社会主流的个性化有些相悖,更像是干脏活累活的人,写道这里我意识到这个问题。于是开始如何将工程师和掏粪男孩区分开来,优秀的工程师不应该是不断妥协的人,而是应该结合工程实际情况,给予甲方乙方专业支持,熟练使用工程语言和自然语言转换需求,让需求各方都能更精准的表达自己的想法,在协商中稳步推进。这很理想化,也是很专业化。国外的情况我不知道,国内目前大多数企业无法达到如此的专业化,这又涉及到了很多方面的因素。
首先是教育问题,我之前在日记中写过国内的教育,那是一种服从性的训练,并非创造性的引导,导致学生毕业不知道如何从专业的角度解决问题。比如我的大学会教学一些开发技术、但是很少涉及工程领域的培养,虽然加入了CDIO教育计划,但是实际教学中换汤不换药,除了薄薄一本CDIO的书,似乎也没有什么可以与实际项目工程相关的内容,大三大四的小实习(工程实践)也就是带着大家做了一个功能不完整小网站草草了事。教学的老师也是长期脱离一线工程开发的学究,在基础理论知识上确实没的说。学校教育中工程师领域教育内容薄弱或这缺失是导致当前行业内专业化水平不高的原因。
其次是社会环境问题,国内的软件行业或者说其他行业都在很大程度上依赖政府项目,除了少有的几个互联网寡头,其他绝大多数公司都是从事政府项目开发的,如公安、水利、教育、司法、医疗等等,近几年国家整体经济情况有些萎靡,导致这些行业受损严重。这些做政府项目的公司和团队面临着一个很大的问题:用软件的人提不了需求,能提需求的人不会用软件。导致项目与实际生产活动不匹配,用的人和做的人都怨声载道,提需求的人因为屁股坐的高,根本不会听取建议,他们只喜欢张着嘴巴接上面的口水。脑子里突然出现一场景:领队看到队尾人快要渴死了,然后拿了一瓶矿泉水给乙,乙看上了这个瓶子,就让丙把水含在嘴里自己把瓶子拿走了;丙受不了诱惑把水吞进去了,然后就撒了一泡尿给丁;丁知道是尿后,直接吐在地上了,为了交差,叫来戊叫他把地上湿达达的泥巴给队尾,说这能解渴; 队尾看着那堆冒着尿骚味的泥巴骂领队不是人。这个巨大草台班子不能接受专业人士的存在,自古到今都是如此。
还有每个人的差异,几年开始做技术团队管理。那个时候就发现团队每个人的差异是导致项目失败的一个不可忽视的因素。一项工作传达下去,如果不做跟踪,最后很大概率和最初说的不是一个东西了。为了避免这个问题,就需要企业内部或者团队内部更加专业科学的流程管理,比如需求传递需要及时跟进,落实到人;设计需要评审,需要与项目整体保持一致,与架构符合等等,这个应该有专门的部门来解决,但很多企业是没有的。工程效能是我这两年才了解的领域,其实这个领域已经出现很多年了,但是因为所经历的公司都不注重这一块。
教育问题以及社会问题是国家层面的东西,我们很难让其快速发生改变,但我们要有信心未来会变得更好,在我看来历史不是像车轮那样原地打转,而是像弹簧那样盘旋上升的,虽然很多时候惊人的相似,但终究还是在某些方面向前进了一步。团队内部以及人的问题,咱们是可以快速改变并看到效果的,加强团队工程师文化建设,提升每个成员的综合素质,允许个性化发展,提倡T字型人才发展,一转多能。加强自动化建设,提高工程能效。
美食家和厨子不是没有自己喜欢吃的东西,只是因为他们OPEN,所以会接受和尝试不喜欢的饭菜。突然想到了新华爱心教育基金会理事刘利黎女士曾经对我的教诲:想要走遍世界,那就需要有能吃遍世界的嘴。