写点什么

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

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

    阅读完需:约 9 分钟

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

AI 大模型超全落地场景&金融应用实践,8 月 16 - 19 日 FCon x AICon 大会联诀来袭、干货翻倍!

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


近几年,科班和培训出身的 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:3111800
用户头像
赵钰莹 InfoQ 主编

发布了 880 篇内容, 共 619.8 次阅读, 收获喜欢 2674 次。

关注

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

Java 集合(9)-- Vector超级详细源码解析

秦怀杂货店

Java 源码 集合 ArrayList vector

Scala语法特性(二):控制语句及函数方法

正向成长

Scala函数 Scala控制语句

Mybatis【2.1】-- 从读取流到创建SqlSession发生了什么?

秦怀杂货店

数据库 mybatis SQLSession

一次“诡异”的JVM缓存加载问题排查

AI乔治

Java 缓存 架构 JVM

常用Git命令速查手册

jiangling500

git

Mybatis【1】-- 第一个Mybatis程序

秦怀杂货店

mybatis 入门 教程

记一次 Java 服务性能优化

AI乔治

Java 架构 性能优化 高性能

Mac 安装Homebrew慢的问题解决

秦怀杂货店

Mac homebrew

Java 集合(6.1)-- Collection 和Collections什么关系?

秦怀杂货店

Java collection 集合 Collections

Java 集合(7)-- List 接口源码解析

秦怀杂货店

Java List 源码 集合 java集合使用

四周 习题与总结

水浴清风

免费图床+CDN:GitHub+jsDeliver

jiangling500

GitHub CDN 免费图床 jsDeliver

踩了一个java命令行参数顺序的坑

AI乔治

Java 架构 stream

transient关键字的作用以及几个疑问的解决

秦怀杂货店

序列化 反序列化 transient

Java反射说得透彻一些

秦怀杂货店

Java 反射 java反射

你还在使用迭代器删除集合数据,out了,Java 中函数removeIf 不香么

Geek_6f0746

Java JAVA集合 Java迭代器

HTTP2服务器推送的第一次尝试

Gopher指北

HTTP2.0 Go 语言

架构师训练营第八周作业

四夕晖

JDBC【1】-- 初级入门之增删改查

秦怀杂货店

数据库 jbdc crud

JDBC【2】-- 工作原理以及简单封装

秦怀杂货店

Java JDBC 工作原理

甲方日常 51

句子

工作 随笔杂谈 日常

线程池运用不当的一次线上事故

AI乔治

Java 架构 高并发 线程池

serialVersionUID作用是什么以及如何生成的?

秦怀杂货店

Java 序列化 serialVersionUID 反序列化

权威报告发布:京东智联云首次参评即跻身机器学习卓越表现者阵营

京东科技开发者

人工智能 云计算 供应链

Java 集合(8)-- ArrayList 源码解析

秦怀杂货店

Java 源码 集合 ArrayList

大量类加载器创建导致诡异FullGC

AI乔治

Java 架构 JVM GC

JDBC【3】-- SPI技术以及在数据库连接中的使用

秦怀杂货店

数据库 spi

Mybatis【2】-- 多个mapper文件以及namespace作用

秦怀杂货店

mybatis Mapper namespace

JVM系列-java内存模型(JMM)

诸葛小猿

JMM Java内存模型 共享变量读写

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

书旅

数据结构与算法 Go 语言

普渡科技荣登甲子光年“2020中国最具商业潜力的20家机器人Cool Vendor”

DT极客

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