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

发布了 874 篇内容, 共 604.4 次阅读, 收获喜欢 2671 次。

关注

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

Flutter 开发从 0 到 1(一)需求与准备

吴小龙同学

flutter ios android 跨平台

目标检测-darknet 之模型初始化

Dreamer

极客大学架构师训练营第一期第八周总结

睡不着摇一摇

架构师一期

JVM真香系列:图解垃圾回收器

田维常

JVM 垃圾回收

java是如何调用native方法?hotspot源码分析必会技能

诸葛小猿

Java jdk JVM jni hotspot

架构师训练营第 8 周学习总结

netspecial

极客大学架构师训练营

python+requests进行get、post方法接口测试

测试人生路

Python 接口测试

腾讯强推Redis成长手册!原理+应用+集群+拓展+源码五飞

小Q

Java redis 学习 架构 面试

C++的智能指针你了解吗?

良知犹存

c++

架构师训练营 - 第四周学习总结

joshuamai

第八章作业

alpha

极客大学架构师训练营

我用 Python 找出了删除我微信的所有人并将他们自动化删除了

Python小二

Python 微信

Flutter 开发从 0 到 1(二)框架与网络

吴小龙同学

flutter ios android 跨平台

架构师训练营 - 第四周课后练习

joshuamai

如何正确的关闭线程池

Rayjun

Java 线程池

【JAVA】TreeSet, LinkedHashSet和HashSet差异对比

笑春风

架构师训练营第1期 - week08 - 作业

lucian

极客大学架构师训练营

基于f2从零实现移动端可视化编辑器

徐小夕

Java H5 数据可视化 h5编辑器 H5制作

作业-第4周

arcyao

架构师训练营第 8 周作业

netspecial

极客大学架构师训练营

《Web应用安全权威指南》.pdf

田维常

在线IDE开发入门之从零实现一个在线代码编辑器

徐小夕

Java ide H5 H5制作 代码编辑器

你以为只是简单的排序?(一)

书旅

数据结构与算法 Go 语言

面试官最常用小心思:说说你的项目并发量多大?负载均衡怎么做?

小Q

Java Linux 学习 面试 并发

【可下载】2020年底收官!为大家整理了物联网行业全面研究报告、行业洞察、白皮书……

IoT云工坊

人工智能 大数据 5G 物联网 智能家居

第四周作业

Jack

极客大学 - 架构师培训 -ch3 作业

bing5tui3

极客大学架构师训练营

作业-第4周总结

arcyao

架构师训练营第 1 期 - 第八周总结

Todd-Lee

极客大学架构师训练营

ARTS Week14

丽子

极客时间 - 架构师一期 - 第八周作业

_

极客大学架构师训练营 第八周作业

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