软件开发者的专业性

最近又重温了下《代码整洁之道》,里面提到软件开发工程师的‘专业性’。关于这个‘专业性’书中有详细的阐述。对于这点我结合书中的知识和实践经验也有了一些自己的理解。所以写了篇文章阐述我对软件开发工程师‘专业性’的一些理解。
一个专业的软件开发工程师应该是怎样的,我觉得应该专业的软件开发工程师具备三种能力或者说特质。

  1. 需要有满足岗位需求的专业能力,在平时的工作中追求卓越。
  2. 对于产品或者说其它需求提出者,给出可信的预期。
  3. 让自己调整到且维持最佳的工作状态。

下面进一步阐述这三点。

1. 需要有满足岗位需求的专业能力,在平时的工作中追求卓越。

能够熟练运用工作中需求的各种语言、框架、技术,实现业务人员提出的功能需求。这是软件开发工程师最基本的职业需求。但是交付的成果质量有好有差,特别是在软件开发领域中,这个质量的差距可以很大。而对自己的交付的成果负责,保证其高质量,即易用、易维护、易扩展、少出错甚至不出错等等条件。即追求卓越。
要做到卓越、甚至完美,很难。

对于项目开发中遇到的一些问题,基于过往的经验和自己的思考判断发掘到其本质。找到本质的问题之后,就需要寻找合适的编程思想或者理论。然后在实际开发中应用对应的编程思想或者理论,解决这种本质性的问题。

比如说一个很常见的情况,现在后端开发很多都是采用Controller-Service-DAO架构,业务简单的时候还可以处理,但是业务一复杂起来,就会出现很多问题。比如说就算注意编程规范,但是代码还是很难看懂、也很难拓展和维护。

这个时候专业的开发者就会基于过往的经验和理论知识对这种情况进行分析。

通过分析后发现问题的根源在于Controller-Service-DAO架构把业务逻辑都聚合在Service层,在Service层中原本应该归属在一起的业务逻辑被切割、分散在代码的各处。这种逻辑的分散让代码变得难以看懂、难以维护。
那么该如何有效的聚合这些逻辑呢?这个时候就需要使用到DDD的理论,通过有效的建模方法把业务逻辑聚集到对应的领域模型上。

寻找问题-》发掘本质问题-》寻找解决方案-》在实际开发中寻找解决方案

专业的开发者应该通过不断重复上述流程,让自己交付速度更快、交付的成果质量更高。

而为了支撑这个过程,就需要两项能力。即归纳、演绎的能力 。

归纳

对于常出现的问题,能够归纳其共性,或者说其本质问题,再针对这种本质问题行研究。

比方说上面的代码看不懂、难以维护,系统中很多个地方的代码都会出现这个问题,面对这些问题的时候,摒弃不重要的细枝末节,捉住最根本的核心问题:业务逻辑的破碎。
要做到这点,就需要归纳的能力。

演绎

对一个理论和思想,能够把其落实到具体的工作中、落实到具体的细节开发中。

比如对于高内聚-低耦合这个思想,在系统架构设计上实施就是对于系统中各个组件功能的合理划分,把握好组件之间关联。落实到编程设计中就是管理好各个类、各个代码文件之间的职责划分。落实到一个文件中就是合理的变量声明、适当的方法结构和方法间调用顺序设计。

2.给出可信的预期

项目安排通常需要开发人员给出可信的预估结果,以便做计划。

预估结果有两种,一种是概率分布的形式,比如说这个功能,最好什么的情况下3天就可以交付,最差的情况下10天才能交付,平均交付时间大概为5天。大部分时候给出一个概率估计,因为软件开发过程中出现预期之外的事情是常态,大部分时候只能给出一个概率估计。

一种是承诺,承诺是明确且固定的,比如我会在5天之后交付功能。

因为软件开发本身就是充满不定性的,很容易意料之外的事情。所以专业的开发人员很少给出承诺,只要觉得有一丝的不确定就不会做出承诺。

然而很常见的一种情况是在产品人员的恳求和诱导下,开发人员做出一种模棱两可的承诺。比如说一个功能,产品经理请求5个工作日后交付,但是开发人员估算估算至少7天以上。这个时候产品经理就会恳求和诱导开发人员,让他说出 ‘我试试看能不能在5天之内交付’、‘我尽力5天之内交付,然后产品经理就可以用5天之内可以交付为基础来进行进一步的规划‘这样模棱两可的承诺。而专业的开发人员对这种情况会明确的说‘不’。

这种模棱两可的承诺看起来好像化解了双方的矛盾,但实际是隐藏了问题。为了实现这个‘承诺‘,开发人员可能需要昼夜加班,不顾质量的完成任务,就算如此可能到了约定期限也无法完成任务,软件开发中出现意外时常态,而对质量的漠视会大大加强意外出现的可能性。结果有两种,到了期限,开发人员勉强完成了任务,交付了一个勉强完成任务但是质量很差的成果。后一种情况,开发人员拼尽全力,到了截至日期还是没有完成任务。后一种情况不用说,两个人会为了推锅而相互职责,最后开发人员可能还得加班加点的完成已延期的任务。
前一种情况看起来皆大欢喜,业务人员成功的按照计划发布,开发人员拿到了加班费和一两句慰藉。但是有两个问题,第一赶出来的成果质量没有保证,其中有很多坑,后续可能(甚至是必然)会花费几倍于原先的开发时间修复其中的问题。

如果是第二种情况,这次表面的成功会让产品人员都过于乐观,忽视实际的情况,把这种高速的产出速度当作常态,后面就会每次都用这样的速度来做安排,于是加班就成了常态。但是这实际上就是赌博,这次赌成功了,下次赌成功了,但是能保证次次都成功吗? 一次失败就可能付出惨痛的代价,客户和上级的责备,绩效的扣除。

所以,这种在不确定的情况下做出‘承诺‘是一种很不专业的表现,本质上是对自己和项目的不负责。

要做到给出可信的预期,就需要有两点能力。

第一是要有科学的估算方法, 《代码整洁之道》中介绍PERT、规划扑克、关联估计等等估算方法,具体要使用那种方法,就要结合实际的开发场景、、团队情况、项目特性等等因素做出选择。一般来说新手容易给出过于乐观的估算,而拥有更多的开发经验、使用合适的估算方法可以给出更加合适的估算结果。

第二就是开发人员如果对业务有深入的理解,在一开始开发的时候就针对后续可能的需求留下相应的扩展点,那么后续业务提出需求的时候其实可以很快交付成果,有时只需要一两个小时就能完成所要的功能。这很考验开发者的专业能力以及对业务需求的理解深度,如果兼具这两者,那么很多时候后续的需求只需要做少数的开发工作即可。所以从这个角度上来讲,越专业的开发人员就会在越多的情况下提供承诺。

3.让自己处于最佳的工作状态

软件开发的时候需要使用到大脑,而身体问题或者心理问题会干扰大脑的思维运作,让大脑思维的变得迟缓、低效、容易出错,创造力也会被压制。

所以一个专业的开发人员,需要保持自己的身体健康,保持心态平稳。让自己工作的时候处于最佳状态,高质量、高效率的完成任务。同时也要避免使大脑处于焦虑、紧张的因素,减少打断思维的情况发生。

比如说,常态化的加班以及过长的工作时间会让工作时间的大脑处于焦虑、紧张的状态,也会损害自己的身体。长此以往,工作的时候大脑就会处于一种疲乏的状态,难以保证高质量和高效率的工作。 当然短期的加班是可以接受的,因为这种情况不会对身心造成比较大的影响。专业的开发人员应该拒绝常态化的长时间工作。

要让自己处于最佳的工作状态。还有地点就是对工作环境的挑选。如果一份工作有需要经常加班、工作环境恶劣、需要经常开会等等这些严重干扰自己工作状态等等因素,那么专业的开发者就应该做出改变-要么改善或者去除这些因素,要么换一份工作。

总结

想成为一名专业的开发人员并不容易,这里只讲了三点,但是都是很难做的。把任何一件事做好都不容易。是选择追求专业还是归于平庸?我想这是每个软件行业从业者都应该认真思考的一个问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值