写点什么

一个沉重的问题:软件开发到底还有价值吗?

  • 2019-02-18
  • 本文字数:2849 字

    阅读完需:约 9 分钟

一个沉重的问题:软件开发到底还有价值吗?

无论是医生、老师,还是会计,都很容易让人理解工作内容,并且这项工作在现实生活中也可以继续发挥作用,但软件开发工程师这个岗位实在是不好描述。纵观国内外不少程序员扎堆的论坛,我们总能看到与“软件开发”相关的讨论,不少网友甚至发出质疑:除了工作,软件开发是无用职业吗?


近几年,科班和培训出身的 IT 从业人员数量激增,市场几近饱和,甚至裁员风波不断,软件开发工程师仿佛被放在了裁员一线,声音少,关注度低,偶尔发出一些声响还可能是负面新闻。如果了解这个行业,就一定知道每位软件开发工程师的成长都实属不易。


Java 工程师、C++工程师、PHP 工程师都属于单一类别,真正的软件开发工程师比全栈工程师要求还多,除了基础编程语言(C、C++或者 Java),还要了解数据库、JavaScript、AJAX、Spring 等前沿技术,对网络工程和软件测试等也要有所涉猎。


一般来说,软件开发工程师既是软件设计师、软件架构师,也是一个优秀的程序员,可谓是门门武器皆可把玩,标准的高薪技术人才,为什么总是被爆出悲观无用论调呢?

软件开发是无用职业吗?

国外一位软件工程师在与众多同事聊天中总结出一句话:对大多数人而言,软件工程开发是一个除工作之外无用的职业之一,这项技能在生活中几乎用不到。不少网友跟帖调侃称,平时还可以修修电脑、重装系统、清理电脑垃圾等。调查中,大多数软件开发工程师不会详细向家人介绍自己的工作,除非有人刨根问底,也有人曾因为介绍得过于详细而被家人拉去到处修电脑。


虽然调侃成分居多,但也不免传递出一些心酸。实际上,软件开发工程师在产品生命周期中的作用非常重大,涵盖需求、设计、开发、修改、发布等多个环节,生活中也没有传说的那么无趣和无用。很多软件开发工程师擅长通过编码解决生活问题,比如编写一些软件或小程序自动运行部分重复且复杂的工作;为零售商店编写网站或者 APP,方便用户选购商品;为家居编写控制程序以达到智能目的;编写简单的日程提醒软件,以免忘记重要约会…有业内人士表态,是否有用取决于用户是否真的需要,只要需要就是软件开发工程师的价值所在。


此外,在国外一线科技公司工作的软件开发工程师,比如谷歌、苹果,薪资水平早已达到年薪 100 万人民币左右。反观国内,2010 年的软件出口规模达到 215 亿元,软件从业人员达到 72 万人,虽然如此,但人才缺口依旧巨大,尤其是高素质软件工程人才,极度短缺。


所以,这个岗位不是无用,而是顶尖人才尚未到位。

软件质量越来越差是开发的锅吗?

一个优秀的软件开发工程师,必须对自己的产品负责。如今,一个手机就可以解决吃饭、休闲、出行、娱乐等各方面需求,只要几个 APP 就可以搞定全部,软件产品越来越多,但真正可以算得上颠覆性创新的东西却很少,基础软件的质量似乎越来越差,这个锅应该开发背吗?


在 V2EX 上,某开发者深夜发表了一篇题为“底层开发性价比越来越低,基础软件的质量将会越来越差”的帖子,他表示,前半句是当前事实,后半句则是基于事实对未来的推断,也就是说,未来,基础软件的质量将会越来越差,这又从何说起呢?


他认为,现在的年轻人中只有很小一部分愿意去维护和学习前人花费数十年时间,整理出的数千万行代码,基础软件的补丁质量在逐年下降。大部分年轻人不愿意做“平行世界的守护者”,更加赞同“不重复造轮子”的说法。


随着市场对产品研发和迭代周期的要求越来越短,各种敏捷开发工具应运而生,与以往相比,同样的功能只需要很少的特定代码就可以实现,软件开发工程师花费的时间确实变少了,但对性能和用户体验的关注也在下降,这也导致大量软件流入市场,但整体质量却是在下降。


当然,不少奋斗在一线的底层开发者对此也表达了不满,认为国内尚有很多开发者重视基础软件质量,并愿意更新迭代前人编写的底层代码,只是这个群体的话语权太少,被外界听到的声音太弱。


当然,也有网友认为,这也不全是软件工程师的问题,很多公司在软件开发过程中往往是需求提了改,改了提,最终开发的产品成了一堆无用代码堆积;工期一再压缩,为了赶时间,大部分软件开发工程师不得已省去设计时间,自然没工夫评估项目效益和成本,后果往往是非常痛苦的修改和更新,不同开发者之间的协作也可能影响系统其他功能,导致整个软件开发流程漏洞百出。


因此,软件质量好坏不是单纯依靠软件开发工程师就可以解决的,这其中还涉及到多人协作,部门合作等问题,这个锅全部砸在工程师身上,也是有点痛。

如何避免无用代码堆积?

当曾经向往的职业变成一日又一日的无用代码堆积,多少让开发者有些心灰意冷,虽然无法保证整个产品质量,但至少可以在代码层面下点功夫。无用代码堆积这种现象在日常软件开发中非常普遍,对于需求频繁被修改的问题,根源在于弄清楚软件开发的目的是什么,代码有没有用的最终决定者应该是用户,如果一段代码具备的功能符合用户需求,具备业务价值,那么就是有用的。


在软件开发过程中,需求变更和代码修改是很正常的事情,但这个不确定性需要在一定范围内。对此,最佳的解决方案可能是迭代开发,也叫迭代增量式开发,将整个开发周期分解为若干时间段,每隔一段固定时间就对软件进行一次小迭代,每迭代几次就进行一次全面测试和大版本更新,对开发成果进行质量评审,这个过程最重要的是听取最终用户的意见,以便及时调整优化,避免无效需求,尤其是决策者拍脑门出来的决定。


开发之前,技术负责人务必准备好相应文档,确定好各工程师的分工,尤其是需要协同完成的部分。另外,团队尽量抽出时间和精力进行代码 Review,并以降低代码复杂度为目标,如果不同工程师之间的代码间经常互相影响,可以考虑让这类程序员负责独立开发模块,降低对整个项目的影响。


长期以来,测试在国内的重视程度并不够,一个测试团队起码应该有白盒测试、效率测试、单元测试等各类专职人员,不建议在所有功能完成之后才开始测试,最好是完成一个功能就马上交给测试,测试阶段应由测试完全掌握主动权,开发必须尊重测试人员的工作。


归根结底,软件开发是一项非常复杂的工作,为了避免过程出错,很多公司已经摸索并建立了成熟且完整的代码编写规范,包括变量命名规则、层次化设计、类和接口设计,到最后的代码 Review 都很清楚,最重要的不是会写代码,而是学会解决问题,做真正有价值的事情。


毫无疑问,软件工程开发是一项有价值且极具挑战的工作,这种价值不仅体现在工作中,很多优秀的软件产品已经对用户生活产生影响,这也是很多一线科技公司不可或缺的岗位,但价值到底有多大还要取决于做的人,如果开发者自身技艺不精,很容易弄巧成拙。


参考链接:


https://www.reddit.com/r/EngineeringStudents/comments/4cqg19/software_engineering_what_seems_to_be_useless/


https://www.perlmonks.org/?node_id=405439


https://www.zhihu.com/question/28158159


需求日新月异,挑战与成就共存,不如来看看国内外一线工程师怎样应对成长困境。2019 年 5 月 6-8 日,QCon全球软件开发大会与您相约北京国际会议中心,超 100 位国内外资深技术专家,聚焦 26+热门专题,从工程实践出发,深度剖析技术痛点,助你提升技术视野。


2019-02-18 07:3112334
用户头像
赵钰莹 极客邦科技 总编辑

发布了 897 篇内容, 共 686.8 次阅读, 收获喜欢 2696 次。

关注

评论 5 条评论

发布
用户头像
就像医生要分xx科的医生,老师也要分是数学老师,还是英语老师物理老师或是其他老师,所以软件开发工程师也要分,但是不排除软件开发工程师广义之说,就像8090年代大家谈论到程序员一样,那时候的程序员含义太广泛了
2019-10-23 21:33
回复
用户头像
很多外行人对IT行业看的只是热闹,软件架构师可以做软件工程师和设计师的事情,反过来却不行,软件工程师在IT行业里面是一个低级别且基础的职位,所以不要期望软件工程师是一个全能战士,什么都做最后必然就是什么都不精,既然是工程,肯定也不是一个工程师就能解决所有的问题,能一个人拿出来的也不太可能是多大的产品。只有团队合作,各路人马资源到位才能保证产品质量。
2019-10-23 21:06
回复
用户头像
软件架构师可以做软件工程师和设计师的事情,反过来却不行,软件工程师在IT行业里面是一个低级别且基础的职位,所以不要期望软件工程师是一个全能战士,什么都做最后必然就是什么都不精,既然是工程,肯定也不是一个工程师就能解决所有的问题,能一个人拿出来的也太可能是多大的产品。只有团队合作,各路人马资源到位才能保证产品质量。
2019-10-23 21:01
回复
用户头像
专业的软件开发公司
http://www.app-p.com
2019-08-01 11:35
回复
用户头像
软件开发公司定制-「你所不知道的」

公司实力
公司规模是一家软件开发公司最直观的实力体现,公司大小、员工人数、公司成立年限、组织结构细分等,从这些方面我们可以建立对这家软件公司最初的印象。 技术团队:一个软件开发公司的技术团队是一家软件公司的灵魂所在,项目经理、架构师、软件开发人员、美工和软件测试人员构筑一个团队,其中优秀而资深的软件开发人员则是灵魂中的灵魂,软件开发的最终效果是由程序开发人员决定的,所以要清晰了解这支技术团队的技术研发能力。对于项目的开发、测试、集成、验收是否有做专业的规划,在每个环节期间有否出具一些专业的报告和文档类文件,有否获得过一些著名的奖项,有没有发表过一些学术论文、公司是否获得一些软件开发资质,如:CMMI3级评估认证\国际权威软件企业认定证书\ISO9001质量管理体系认证证书等等、是否获得一些软著证书、是否能提供一些成功的案例。而从这些方面的资质证书是可以直接反映出广州软件开发公司的专业程度。

文章来源:https://www.it0755.com
展开
2019-08-01 11:33
回复
没有更多了
发现更多内容

【微服务测试教程】使用Python测试gRPC接口案例

和牛

测试

ApacheCon Asia 2022 启动!7场阿里云大数据+AI议题分享等你围观

阿里云大数据AI技术

人工智能 大数据

蓝海大脑高性能气象大数据平台为气象局掌握风云变幻提供助力

GPU算力

TDengine 助力西门子轻量级数字化解决方案

TDengine

数据库 tdengine 时序数据库

一些企业数据平台建设的思考

Bright

数据平台 大数据平台

语音社交系统——完善有声系统产业链

开源直播系统源码

开源源码 语音直播系统源码 语音直播系统 语音直播系统连麦

你面试十家java开发才能总结出来的面试题(建议收藏)

程序员啊叶

Java 编程 程序员 架构 java面试

58子站安居,经纪人营销管理平台登录接口加密逆向

梦想橡皮擦

Python 爬虫 7月月更

NFTScan 与 NFTPlay 在 NFT 数据领域达成战略合作

NFT Research

区块链 大数据 NFT 合作 Web3.0

完完整整地看完这个故事,你敢说还不懂Docker?

程序员啊叶

Java 编程 程序员 架构 java面试

什么是SpringMVC?工作流程是什么?九大组件有哪些?

程序员啊叶

Java 编程 程序员 架构 java面试

融云实时社区解决方案

融云 RongCloud

牛皮了!阿里面试官终于分享出了2022年最新的java面试题及答案

程序员啊叶

Java 编程 程序员 架构 java面试

一文读懂如何部署具有外部数据库的高可用 K3s

Rancher

Kubernetes k8s rancher

35道MySQL面试必问题图解,这样也太好理解了吧

程序员啊叶

Java 编程 程序员 架构 java面试

面试官:ThreadLocal使用场景有哪些?内存泄露问题如何避免?

程序员啊叶

Java 编程 程序员 架构 java面试

如何有效进行回顾会议(上)?

敏捷开发

敏捷 回顾会 项目开发

基于 MinIO 对象存储保障 Rancher 数据

Rancher

Kubernetes k8s rancher

如何在 TiDB Cloud 上使用 Databricks 进行数据分析 | TiDB Cloud 使用指南

PingCAP

TiDB

我秃了!唯一索引、普通索引我该选谁?

程序员啊叶

Java 编程 程序员 架构 java面试

分布式 hdfs-over-ftp 工具实现方案

移动云大数据

数牍 X Rust,那些不得不说的事

Jessica@数牍

联邦学习 隐私计算 数牍科技 rust开发者大会 分布式计算框架

兆骑科创创业大赛平台,活动路演,投融资对接

兆骑科创凤阁

详解Kafka分区副本分配的Bug

石臻臻的杂货铺

7月月更 签约计划第三季

围绕新市民金融聚焦差异化产品设计、智能技术提效及素养教育

易观分析

新市民金融 差异化产品设计 素养教育

看了就会的 Rainbond 入门教程

北京好雨科技有限公司

Kubernetes 云原生

10次面试9次被刷?吃透这500道大厂Java高频面试题后,怒斩offer

程序员啊叶

Java 编程 程序员 架构 java面试

这50道Java面试题看完,想不进大厂都难

王小凡

Java 程序员 面试 面试题 大厂面试

有奖活动分享:使用WordPress搭建一个专属自己的博客后最高可领取iPhone13

云端explorer

Wordpress 博客部署

活动速递| Apache Doris 性能优化实战系列直播课程初公开,诚邀您来参加!

SelectDB

数据库 性能优化 数据仓库 OLAP Doris

一个沉重的问题:软件开发到底还有价值吗?_语言 & 开发_赵钰莹_InfoQ精选文章