编码之道(三):编码的困境,失衡的价值

2021-08-12 11:35:59 浏览数 (1)

学习一个现代编程语言,简单!

用学会的语言,编码出能运行的代码,容易!!

一个团队,用代码去打造一个高质量易于维护的产品,突然就变难了!!!

这究竟是为什么?

本周,继续阐述自己对编码之道的分析与理解,这是第三篇,本系列其它文章为:

  1. 编码之道(一):程序员的"圣经"
  2. 编码之道(二):软件的价值

编码之困

写出可运行的代码,这个基本上没有程序员做不到。那一群人,把自己写的代码结合起来,构建成一个高质量的产品,却突然一下子变的很难了。

原因在于:

编码是一个人的事,而项目或产品则是一群人的事情

在数学上的等式是:1 1=2

而团队合作我们期望的是:1 1>2

但实际上一群人的工作实际情况是:1 1<2

一群人编码这个事究竟有多难,从我们行业中一些非常著名的书上就可以得知了

  • 《人件》:这本书用整本书在告诉我们,成功的关键最重要的是人,而不是语言,技术或框架
  • 《敏捷整洁之道》:为什么会有敏捷软件开发的理念出现,这本书中就告诉了我们答案,因为软件开发实在问题太多了,太差了,一群优秀的程序员跑到雪鸟镇上去讨论怎么办才好,于是诞生了敏捷软件开发的理念
  • 《软件开发的本质论》:一本编码哲学的书,一步一步引导我们思考如何才能把编码这件事做好,想做好很大程度也上依赖技术之外的事。

类似的书挺多的。

所以,我也提出一点我的看法吧,我认为,导致编码出现困境的一个最主要的原因在于:

对业务价值与技术价值的认知与重视程度出现了偏差与失衡

以技术为维度来分类

编码并不单纯是技术上的事,这个想必所有程序员都是承认的。

在编码的世界是,如果以技术这个维度来区分人群,很明显有两个人群:

  • 技术人员:这类人群是懂技术,负责用技术实现功能的人群,诸如开发人员,架构师等就属于这一类人群。
  • 非技术人员:这类人群并不太懂技术,如管理者,产品或客户等

如我上一篇文章所讲,软件的价值是由业务价值与技术价值构成。

那以此继续推论,如果编码能保障业务价值与技术价值,那当然软件的价值,也就是质量就会有所保证了。

但现在可能大多是:

对业务价值的重视与保障程度远胜于对技术价值的重视与保障

在上面所说的两个人群中,很显然非技术人员天然的站在业务价值一边,并且是软件干系方中有重要影响力或决策者,而更可惜的是,连很多技术人员都没有意识到技术价值的重要性,有意无意的也在伤害技术价值。

应该保持平衡的天平,失去了平衡。

失衡的价值

这源于几个原因

业务价值是可见的,技术价值是不可见的

当然可见的更易于被重视,而对于看不到的东西,理所当然的会忽略或不去考虑它。对于编码也是同样的道理,软件的功能,需求,用例,这些是实实在在可见的东西。

有决策能力的人更关心的是这些可见的功能是否如期完成,完成的功能是否与期望一致,至于背后的技术是怎么回事,所谓的维护性,灵活性,健壮性等,有多少非技术人员能"看见"这些东西。

估计只有我们技术人员能知道有这些东西的存在,对于我们,它们才有可能是『可见的』

业务价值是可衡量的,技术价值难以衡量

软件在业务上的质量,其实相对容易衡量,比如测试工作,测试提的BUG,几乎可以说绝大部分是对软件业务价值实现质量的测试。

功能点完成时间如何,完成程度如何,与需求或原型是否一致,这些是实实在在可以通过数据衡量与评判的。

而技术价值则完成不同,首先不说技术价值种类繁多,性能,可维护性,代码风格,单元测试,架构的灵活性,服务的健壮性等等众多维度的价值点。

而很多技术价值点压根没法衡量,比如,对于非技术人员来说,怎么去理解可维护性,什么样的数据或标准能证明可维护性是好的?

甚至可能有相当一部分技术人员都没法说出个评价标准。

业务价值是当下,技术价值是未来

技术人员非常容易听到的一句话可能是,以后再花时间来优化,先实现功能再说。

而大家都知道,事实是:以后等于永久,可能永远没有优化的那一天,因为新的功能或需求变更会源源不断的进来。

背后的一个事实就是: 业务价值是当下,当下是最重要的,而技术价值这种看不见摸不着的东西影响的更多不是当下,而是未来。

不好的技术,也能支撑当下的功能正常运行,它影响的可能是未来,因为会导致可维护性越来越差,但它毕竟是未来,而不是当下。

当下永远比未来更紧急,不是吗?

未来看似就意味着,还有更多的时间,但其实我们都知道,在技术价值上,并不是这么一回事,所以有个专业的词来描述这个现象:技术债务

程序员的使命

所以,呼之欲出的一个问题是,谁能保障技术价值?

当然就是我们程序员了。

所以,做为程序员,我们在职业上的最高的使命是什么,我的定义就是:

维护软件的业务价值与技术价值

而这其中,尤其以技术价值更为重要,因为它是容易被忽略,被轻视的价值。我们不可能期望那些不从事技术的参与方,能理解并主动积极的去保障技术价值,但我们有责任尽我们的能力与手段,尽量去保障技术价值。

但程序员也要切记:过犹不及

我们中一些人员,过于看中技术,反而去轻视业务价值,这其实也是一种不好的现象。

就象我说的,如同天平一样,业务价值与技术价值在天平的两端,维系他们的平衡,才是上上之策。

编码的道与术

做为程序员,想要维系技术价值,首先要掌握的能力就是:把代码写好

但是把代码写好这件事,并没有想像中的容易。

我认为要写好代码的第一件事就是:理解编码中的道与编码中的术,只有很好的理解它,才有可能真正成为一个杰出的程序员,写出好的代码。

那究竟什么是编码的道,什么是编码的术?

下一篇,我们继续聊,编码之道(四):编码的道与术

0 人点赞