热门标签 | HotTags
当前位置:  开发笔记 > 程序员 > 正文

【转】软件的价值

程序员最主要的一个工作就是编码,编码只是个过程而已,最终编码的目的就是产生一个能提供服务的有价值的软件。不管你负责的是后端编码,产生的是可

程序员最主要的一个工作就是编码,编码只是个过程而已,最终编码的目的就是产生一个能提供服务的有价值的软件。

 

不管你负责的是后端编码, 产生的是可部署运行的服务,或是移动端构建了一个App,也许是前端,编写了页面等,也许可能是类库或框架等。所有这些产物,如果我们用一个词来归纳它们,那就是软件

 

那做为程序员,你有没有思考过,软件究竟有什么价值?

 

为什么要谈价值

可能有些人觉得谈论软件的价值是有点多余,因为软件一定是有价值的,客户需要一个软件,肯定它能满足客户一定的需求。

 

所以这个点并无太多谈论的必要。

 

这也正是我想要写这篇文章的原因,这正是因为软件的利益方,包括客户,程序员,管理人员,公司等各方角色,在识别软件价值上都存在误差。

 

而这种误差,正在造成现在软件行业困境的一个很重要的原因。

 

我们软件行业的最大困境就是难以产生高质量易于维护的软件

 

所以我们程序员,是否能清晰的理解软件的价值,这是我们能写好代码的一个基础。

 

因为:

 

软件有看得见的价值与看不见的价值

 

而在编码中,很多问题的频繁出现的关键就在于:

 

对于软件看不见的价值,各方缺少可度量的共识

 

在这里插入图片描述

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBARF9aU1g=,size_20,color_FFFFFF,t_70,g_se,x_16

 

如上图所示,软件的价值显而易见的分两部分,一部分是各方角色可见的有共识的价值,这部分在水面上,我将其称为业务价值,而另一部分几乎是各方角色难以看见并缺少共识的价值,我将其称为技术价值

 

业务价值

看的见并且各方能有共识的价值

 

软件一定是在业务上有价值的,它一定为某些人群提供了一些服务,这些服务就会带来价值。

 

业务价值就是软件在水面上的价值,任何一个软件都通常会有自己在业务上的功能,比如电商软件是支撑网上购物的软件,股票交易软件能让人进行股票交易,这种明面上可见并且软件利益各方有共识的价值,就是可见价值。

 

几乎软件利益的方方面面,对于业务价值没有冲突与不一致,产品需求书会详尽的描述需求的细节,测试用例文档会描述如何在业务上进行测试,而项目管理的几乎所有管理的重心都是在如期实现这些业务价值及保障这些业务价值的质量上面。并且从开发到产品,客户等,对业务价值是有共识的,不存在理解上的差异。

 

业务价值也是可度量的,比如从Bug数,或是否完全满足需求,操作体验如何,以及功能在什么时间开发完成,这些都是可度量的。

 

保障业务价值如期实现及其质量当然是非常必要的,这一块的工作并无问题,问题在于软件的另一个价值,就是技术价值,这是看不见并且难以达成共识的价值,大多数编码的问题也多出现在这个上面。

 

技术价值

看不见并且各方难以达成共识的价值

 

仔细探究软件,会明白它背后有一些隐藏的不易被查觉的特性:

 

业务价值的质量,并不反馈出实现业务价值后面的实现,也就是代码的质量

软件大多是需要持续迭代或维护的,但这种特性难以直观的感受且各方缺少共识

这些特性背后反应的实质就是:软件是有技术价值的。

 

但在实际的过程中,软件的技术价值难以被重视,并且非常难以度量,导致几乎这个价值是被忽视的,而且处于被业务价值的压制,也就是决策方通常会为了看的见的业务价值去牺牲他们理解或不理解的技术价值,导致短期内看起来业务上的价值得到保障,但实际时间稍微拉长一点,就发现完全是害人害已的行为。

 

想必很多程序员陷入一些有困境的编码中,这些代码难以继续下去,代码的质量极差,修改一个BUG极易引发一堆新的BUG,添加一个新的功能需要的时间越来越难以评估及稳定下来,业务价值越来越没有保障,整个团队陷入一种恶性循环。

 

这就是软件技术价值出现问题的表现,这种情况在软件开发中非常普遍。

 

技术价值的普遍出现问题的点在于:

 

非技术人员对所谓的代码质量,可维护性缺少概念与理解,由于他们并不是直接编码的人员,但通常掌握决策权,要求这样的人群重视技术价值,实在有点强人所难了。

技术人员虽然明白技术价值,他们本身知道代码实现的是好还是坏,但通常他们不是决策者,并且普遍受进度压制,在很多情况下,他们别无选择,会选择牺牲技术价值。

技术价值几乎是难以度量的,很难用某种标准来判定技术价值的优劣,虽然有类似的性能测试或代码扫码等,但这些也几乎只能反应一个方面而已。

基于上述的原因,技术人员很多时候虽然有心,但实质对保障技术价值是无力的。

 

使用Sonar管控软件质量

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBARF9aU1g=,size_20,color_FFFFFF,t_70,g_se,x_16

 

如上图所示,我通常会用Sonar去评估分析代码,这是衡量技术价值的少有的手段之一,但它的能力也非常有限。能完整的并且可度量的评估技术价值的方式似乎难以找到。

 

一个可以想像的事实是,如果技术人员向决策者建议说:“给我两个月时间,我去重构下这份代码,让它更好,但在业务功能上完全没有任何改变”,很难想像那些决策者,也就是大多非常技术出身的人群,会如何去理解与同意这种事情。

 

也许一个他们可能的想像是:让整个团队浪费两个月时间,然后啥东西都没有?

 

软件价值

因此,我对于软件价值的定义是:

 

软件的价值是由业务价值与技术价值两部分组成的,它们相互合作与依赖,缺一不可

 

没有业务价值,再好的技术价值也是白搭,甚至变成技术人员的孤芳自赏。而没有技术价值,业务价值则完全是空中阁楼,不可能稳固与长久。

 

业务价值与技术价值,如同太极的两仪一样,它们理当同等重要。

 

因此,做为一个程序员,你必须得知道软件的价值,也明白自己对软件的价值担负何等的责任,特别是在技术价值这个方面,程序员是几乎唯一有能力保障这一块价值的群体,不可能期望产品或客户来保障这一块的价值。

 

这也是我这篇文章的目的所在。

 

编码的困境

如我在上面所总结的,软件的两种价值,即业务价值与技术价值是相互依赖与合作,才构成了软件真正的价值。

 

而在现实中,一个突出的表现是业务价值更被重视,因为它是可见的,可度量的,是各方都能理解,存在共识的价值。而与之完全相反的则是技术价值普遍受到轻视,因为它是不可见的,不可度量的,非技术人员不理解的,没有共识的价值。

 

而对技术价值的轻视成为软件各种问题频繁出现的一个很重要的原因。


推荐阅读
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • 大连微软技术社区举办《.net core始于足下》活动,获得微软赛百味和易迪斯的赞助
    九月十五日,大连微软技术社区举办了《.net core始于足下》活动,共有51人报名参加,实际到场人数为43人,还有一位专程从北京赶来的同学。活动得到了微软赛百味和易迪斯的赞助,场地也由易迪斯提供。活动中大家积极交流,取得了非常成功的效果。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 生成对抗式网络GAN及其衍生CGAN、DCGAN、WGAN、LSGAN、BEGAN介绍
    一、GAN原理介绍学习GAN的第一篇论文当然由是IanGoodfellow于2014年发表的GenerativeAdversarialNetworks(论文下载链接arxiv:[h ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 家装日记六:家具采购和瓷砖选择
    本文记录了作者进行家装的过程,包括家具采购和瓷砖选择。作者介绍了自己家的装修风格以及选择烤漆家具和红白系列的原因。作者还提到了装修风格以简约为主,不可以太花哨的要求。最后,作者提到了价格较贵的问题。 ... [详细]
  • 本文讨论了当某位排位靠前的涉众提供了一张精美的界面图片时,是否可以将其作为设计约束。同时还探讨了高质量素材和愿景之间的关系,以及老大自身的软件方法和建模技能。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 本文介绍了一些好用的搜索引擎的替代品,包括网盘搜索工具、百度网盘搜索引擎等。同时还介绍了一些笑话大全、GIF笑话图片、动态图等资源的搜索引擎。此外,还推荐了一些迅雷快传搜索和360云盘资源搜索的网盘搜索引擎。 ... [详细]
  • 【MicroServices】【Arduino】装修甲醛检测,ArduinoDart甲醛、PM2.5、温湿度、光照传感器等,数据记录于SD卡,Python数据显示,UI5前台,微服务后台……
    这篇文章介绍了一个基于Arduino的装修甲醛检测项目,使用了ArduinoDart甲醛、PM2.5、温湿度、光照传感器等硬件,并将数据记录于SD卡,使用Python进行数据显示,使用UI5进行前台设计,使用微服务进行后台开发。该项目还在不断更新中,有兴趣的可以关注作者的博客和GitHub。 ... [详细]
  • 本文研究了使用条件对抗网络进行图片到图片翻译的方法,并提出了一种通用的解决方案。通过学习输入图像到输出图像的映射和训练相应的损失函数,我们可以解决需要不同损失函数公式的问题。实验证明该方法在合成图片、重构目标和给图片着色等多个问题上都很有效。这项工作的重要发现是不再需要人为构建映射函数和损失函数,同时能够得出合理的结果。本文的研究对于图片处理、计算机图片合成和计算机视觉等领域具有重要意义。 ... [详细]
author-avatar
常叽叽_655
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有