「ArchSummit·深圳」人工智能如何促进工业和制造领域的智能化转型? >>> 了解详情
写点什么

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

  • 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:3111709
用户头像
赵钰莹 InfoQ 主编

发布了 863 篇内容, 共 591.2 次阅读, 收获喜欢 2666 次。

关注

评论 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
回复
没有更多了
发现更多内容

我敢说,这个版本的斗地主你肯定没玩过?

华为云开发者联盟

命令行 游戏 斗地主

USDT跑分承兑系统开发,区块链支付平台搭建

介绍

剑心

学习

两年Java工作经验涨到23K,这究竟是怎么做到的?

Java架构师迁哥

开源决策树工具xDecision简介

赫杰辉

决策树 可视化 简化代码

端-边-云全面协同创新 英特尔携手百度共推产业智能化升级

E科讯

区块链技术与我们的生活将并存

CECBC

区块链 数字经济

如何让知识图谱告诉你“故障根因”

华为云开发者联盟

华为云 知识图谱 图谱

彻底理解JavaScript执行上下文

Walker

Java 大前端 this指针 函数执行

用Go-Guardian写一个Golang的可扩展的身份认证

朱亚光

微服务 身份认证 Go 语言

我写了一个TypeScript虚拟机。

渔子长

Java typescript 大前端 deno Node

在Ubuntu 20.04 搭建 Django 开发环境 以及 快速构建一个简单的 Blog

Matrix Chan

Python django 后端 Ubuntu20.04

Mysql学习笔记:分库分表(sharding)

马迪奥

MySQL Sharding

滴滴基于 Flink 的实时数仓建设实践

Apache Flink

flink

Netty之旅三:Netty服务端启动源码分析,一梭子带走!

一枝花算不算浪漫

Netty

云图说 | 华为云GPU共享型AI容器,让你用得起,用得好,用的放心

华为云开发者联盟

gpu caffe

知识点总结

Acker飏

拥抱K8S系列-07-部署K8S集群(Rancher)

张无忌

Kubernetes rancher

区块链合约层是一种自动执行的数字协议

CECBC

区块链 智能合约

不懂 ZooKeeper?没关系,这一篇给你讲的明明白白

大头星

区块链技术最重要价值所在

CECBC

区块链 数字经济 互联网革命

Mysql学习笔记:InnoDB索引结构浅析

马迪奥

MySQL 索引结构 innodb

如何正确设置Java.home

谷鱼

@所有人 Flink Forward Asia 2020 向您发出议题征集邀请!

Apache Flink

flink

LeetCode题解:206. 反转链表,双指针,JavaScript,详细注释

Lee Chen

大前端 LeetCode

解Bug之路-记一次JVM堆外内存泄露Bug的查找

无毁的湖光

Linux JVM heap memory GC Linux Kenel

架构师期末作业

傻傻的帅

区块链交易系统开发,期货合约平台搭建

SpringBoot写后端接口,看这一篇就够了!

华为云开发者联盟

后端 swagger pringboot

服务质量分析:腾讯会议&腾讯云Elasticsearch玩出了怎样的新操作?

腾讯云大数据

大数据

所见即所得的用户增长技术背后是如何实现的

代立冬

大数据 用户增长 用户增长技术 ad-hoc技术

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