Java 工程师、PHP 工程师都属于单一类别,真正的软件开发工程师比全栈工程师要求还多,除了基础编程语言(C、C++ 或者 Java),还要了解数据库、JavaScript、AJAX、Spring 等前沿技术,对网络工程和软件测试等也要有所涉猎。
一般来说,软件开发工程师既是软件设计师、软件架构师,也是一个优秀的程序员,可谓是门门武器皆可把玩,标准的高薪技术人才,为什么总是被爆出悲观无用论调呢?
软件质量越来越差是开发的锅吗?
一个优秀的软件开发工程师,必须对自己的产品负责。如今,一个手机就可以解决吃饭、休闲、出行、娱乐等各方面需求,只要几个 APP 就可以搞定全部,软件产品越来越多,但真正可以算得上颠覆性创新的东西却很少,基础软件的质量似乎越来越差,这个锅应该开发背吗?
随着市场对产品研发和迭代周期的要求越来越短,各种敏捷开发工具应运而生,与以往相比,同样的功能只需要很少的特定代码就可以实现,软件开发工程师花费的时间确实变少了,但对性能和用户体验的关注也在下降,这也导致大量软件流入市场,但整体质量却是在下降。
很多公司在软件开发过程中往往是需求提了改,改了提,最终开发的产品成了一堆无用代码堆积;工期一再压缩,为了赶时间,大部分软件开发工程师不得已省去设计时间,自然没工夫评估项目效益和成本,后果往往是非常痛苦的修改和更新,不同开发者之间的协作也可能影响系统其他功能,导致整个软件开发流程漏洞百出。
如何避免无用代码堆积?
当曾经向往的职业变成一日又一日的无用代码堆积,多少让开发者有些心灰意冷,虽然无法保证整个产品质量,但至少可以在代码层面下点功夫。无用代码堆积这种现象在日常软件开发中非常普遍,对于需求频繁被修改的问题,根源在于弄清楚软件开发的目的是什么,代码有没有用的最终决定者应该是用户,如果一段代码具备的功能符合用户需求,具备业务价值,那么就是有用的。
在软件开发过程中,需求变更和代码修改是很正常的事情,但这个不确定性需要在一定范围内。对此,最佳的解决方案可能是迭代开发,也叫迭代增量式开发,将整个开发周期分解为若干时间段,每隔一段固定时间就对软件进行一次小迭代,每迭代几次就进行一次全面测试和大版本更新,对开发成果进行质量评审,这个过程最重要的是听取最终用户的意见,以便及时调整优化,避免无效需求,尤其是决策者拍脑门出来的决定。
软件开发需要学习哪些技术
首先,软件开发目前涵盖的领域还是比较广泛的,不同的开发方向需要掌握不同的知识结构,开发环境和设备也有所区别,下面做一个简单的介绍:
第一:Web开发领域。Web开发是当前一个重要的开发领域,Web开发涉及到的应用领域也十分广泛,可以说有互联网的地方就有Web软件。Web开发分为前端开发和后端开发两大部分,前端开发需要学习三个基本知识,包括Html、CSS和JavaScript,其中JavaScript是重点也是难点。后端开发可以采用众多开发语言,其中比较流行的编程语言包括PHP、Java和Python。另外,Web开发还需要掌握数据库知识以及云计算平台的相关知识(IaaS、PaaS)。
第二:移动端开发。随着移动互联网的发展,目前移动端开发的任务也比较多,移动端开发集中在三个领域,分别是Android开发、iOS开发和各种小程序开发。其中Android开发需要学习Java或者kotlin语言,而iOS开发需要学习OC或者Swift,小程序开发则需要掌握其对应的开发语言,大部分小程序开发语言都属于类前端开发语言,还是比较容易掌握的。
第三:嵌入式开发领域。随着5G标准的落地应用,未来嵌入式开发领域将释放出大量的开发任务,包括大量的可穿戴设备开发等等。嵌入式开发涉及到三方面内容,分别是设备(各种传感器等)、网络和平台,编程语言通常可以从C语言开始学起。
最后,不论从事哪个领域的开发,都应该具备扎实的计算机基础知识,包括操作系统(体系结构)、计算机网络、数据库等。如果想走研发级程序员路线,一定要重视数学基础,另外需要系统的学习算法设计、数据结构和编译原理等内容。
软件开发学习小技巧
经验1:学习兴趣
只有你感兴趣的事情你才能全心全意的去做,你得「喜欢它」,不然你学它干什么,个人觉得这一点非常重要。然后要「有自信」,要相信自己有能力学好,如果你自己认为自己学不好,总是觉得这也不行,那也不行,那就你就真的学不好。
经验2:课程效率
老师的「讲解」是我们学习和掌握知识最好的途径。相对来说,老师有着更丰富的经验,对知识得难易程度和重要性有着更清楚得认识。因此,跟着老师的思路听课,是非常必要的。每天理论课,是我们必须要充分利用的,通过老师得讲解,再配合预习,可以说只要是认真听了掌握知识点绝对是不困难的。课堂不认真听课下再想搞懂不仅要花更多得时间和精力,还会影响到后面得学习,实在是得不偿失。
经验3:编写代码数量
学习编程,一定要「多写代码」,我认为看书十遍不如动手一遍。只有动手写了做了,才能真正理解程序代码中每一个关键字每一条语句的作用和程序的运行机制。只看书不写代码就像是你定义了一个接口而不去实现,这样毫无意义。
经验4:操作
最好的老师最多就是把工具放到你手里,操作还是你自己的事情,在操作的过程中,「发现不足改进」,「再不足」,「再改进」,世界上最好的程序员就是从不足到改进的过程中成长出来的。在参考别人的程序的时候,你可以剽窃别人的思想。但是绝对不要纯粹的拷贝,当你的水平越来越高,达到一个点,你所考虑的所追求的,就不再是用程序去实现一个功能,而是如何用更少的代码去把一个功能实现的更强大更灵活,那个时候你的编程技术就可以了。
经验5:交流
所谓“三人行则必有我师”,你身边的任何一个人都可以是你「学习的对象」,多于别人交流,没有人能解决所有的问题,但你解决不了的问题也许在别人那里就能得到答案。了解一下别人对同一问题的看法,对你会有很大的启发。
归根结底,软件开发是一项非常复杂的工作,为了避免过程出错,很多公司已经摸索并建立了成熟且完整的代码编写规范,包括变量命名规则、层次化设计、类和接口设计,到最后的代码 Review 都很清楚,最重要的不是会写代码,而是学会解决问题,做真正有价值的事情。
毫无疑问,软件工程开发是一项有价值且极具挑战的工作,这种价值不仅体现在工作中,很多优秀的软件产品已经对用户生活产生影响,这也是很多一线科技公司不可或缺的岗位,但价值到底有多大还要取决于做的人,如果开发者自身技艺不精,很容易弄巧成拙。
与时俱进是我们的日常需求。同样,我们需要让我们的业务组织根据最新趋势同步发展。在 IT 行业的激烈竞争中没有其他生存方法。