什么是软件工程

什么是软件工程?它跟一般的计算机学科有什么不同?BarryBoehm的定义是:运用现代科学技术知识来设计并构造计算机程序及为开发、运行和维护这些程序所必需的相关文件资料。可见软件工程更多注重的是软件的开发而非硬件的维护、修理等,它是计算机学科重要的一部分。
《构建之法:先代软件工程》(以下简称《构建》)一书中提到,软件工程这一专业,尤其是大学生,其师生关系是健身教练和健身员的那类关系。我个人理解的软件工程,其开发和学习的流程大多是学习一个框架,在了解到某某语言或者某某工具的使用方法后熟练运用并掌握,结合自己的智慧开发出面向实际应用的软件程序。很多人说现在的网络这么发达,网上的资料这么多,什么不可以在网上学?为什么不可以自学?在这里结合我自己的亲身体会,现代的软件工程基本开发应用,大多都是英文界面的,对于一般的大学生而言理解和掌握有着相当大的难度,完全掌握所需要花费的时间肯定远远比课堂授业要多得多。举个很简单的例子,Visual C++作为基础的C++语言开发平台,若单纯靠自学掌握其基本开发流程并熟练应用所需时间必然很长,当然快速自学并掌握一门语言框架并开发是每一个程序员都应该具备的基本素质,这里暂且只针对尚在学习的学生。手把手教导比之自己独自钻研显然是前者更具效率,因为早已有前人开辟好了道路。为什么说健身教练和健身员的关系比较符合软件工程专业的师生关系呢?首先教练得有真才实学,那是一眼能够看得出来的,所以学员才会拜师教练门下,学到自己想要的东西。需求和能力这两方面因素就体现出来了。正如《构建》中所言,师生关系中老师掌握着学生的绩点和毕业证,是老师占据着主动,而非顾客和商家那种单纯的交易关系。所以,学习软件工程,从心态上就要明确一点:抱着学习的目的踏入软件工程的行业。

软件工程的几个阶段

《构建》一书将软件工程划分为了几个阶段:
1.学习基本知识的玩具阶段
2.作为爱好者的气球阶段
3.作为行业先驱者的莱特兄弟飞机阶段
4.作为成熟专业人士的民航阶段
简要阐述一下个人对这些阶段的观点:处于玩具阶段,应当做的是积累最基本的知识,掌握行业的基本运作模式,决定今后发展的方向。就像是一个飞机的模型,所有的飞机都是从模型阶段开始设计、萌芽的。
处于气球阶段,了解了基本的知识,一部分能够坚持下来的人或多或少都对这门行业产生了兴趣,亦或者热爱,萌生了动力。这是基础实践经验的积累阶段,用历史的角度而来,相当于“资本主义原始积累阶段”,后续的独立开发、团队协作、项目经验等等实践经验大多来源于此。
处于莱特兄弟飞行阶段,相当于已经有了丰沛的技术经验、实战经验的积累,个人认为这是所有阶段中最为提现软件工程价值的阶段——开拓与创新。将经验汇集,创新出属于自己的东西,这正是软件工程最重要的创新精神。
处于民航阶段,拥有了属于自己的东西,最后便是将这些运用于实际生产建设、商业运用中。一切理论和实践都脱离不了生产建设,这是最后的也是最现实的阶段。

软件工程的特性

软件工程的特性诸如特殊性易变性之类的《构建》一书中有提过,这里就不再赘述,只谈及个人的理解:软件工程是一门复杂的学科,同时也是团结性和独立性兼具的学科。作为软件工程的从业者,个人必须具备独立学习和独立开发的能力,这需要相当强的自学能力;同时需要从业者具备一定的团队协作能力。软件的开发在实际应用阶段,不可避免地需要面对工程量的问题,不可避免地需要面对团队协作的问题。有个经典的调侃“程序员最讨厌不写注释的人,同时每个程序员又都是不写注释的人”,小小的几行注释涉及到的是整个团队的协同工作效率,影响到的是整个团队的效率与进度。
前面有提过,软件工程是面向实际的,虽然程序员操作的是代码层,可实际呈现出来,展现给需求者的是实际应用层的表现效果,涉及到UI涉及、前端后端、网页设计等等,这些都是从业者需要考虑到的问题,不论身处软件开发的哪一环,最终的成果都是实际应用层的表现效果。这需要从业者具有良好的沟通能力、具有服从性或指挥性,同时需要学会排查疏漏——对于程序员而言,最难受的莫过于修bug了。
我个人针对《构建》一书,产生了更多的见解:软件工程还应该具有时效性:
我认为软件工程具有很强的时效性,也许对现在而言非常流行的一门框架、一门语言,在你潜心学习,完全掌握并且走上社会寻求工作岗位的时候,就已经被时代所淘汰了。框架语言的更新换代速度是十分迅速的,前一年我们还在学校学习Android 7.0的开发,当我们走上工作岗位的时候,Android 9.0的框架或许都已经过时了。正因为其时效性,软件工程从业者需要有独到的眼光,选择属于自己、适合自己的道路。

软件工程的前景

针对软件工程的学习,故《构建》中关于实际团队、社会协作等方面的内容暂不赘述,前面提到了软件工程从业者所需要的品质、提到了软件工程道路阶段性、提到了软件工程的性质,下面则是个人理解的软件工程行业的前景。
都说21世纪是生物化学的世纪,我个人的观点有点不同:无论各行各业,即便是农业生产,都离不开软件工程。现代化发展如此迅速,软件工程走进了各行各业,方方面面。软件工程是面向对象、解决实际问题的行业,只要有问题,就存在需求,那就有软件工程行业的身影。从长远角度来看,软件工程从业者在未来势必会身处生产建设的各个角落。生物化学解决的是全人类的问题,但它只需要一小部分人;软件工程解决的也是全人类的问题,但它需要的是很多的人。从历史的角度上可以发现,人类的进步就是自动化的进步,以至于工业革命以来人类的生产力大幅度上升,软件工程乃至整个计算机行业,作为实现自动化的学科,势必会在未来发挥出更大的价值。而就当下而言,国内专业的人才待遇普遍偏高。

中国薪酬网整理的2018年应届大学生专业收入排行数据显示,软件工程行业在当下具有非常强的竞争力,就眼下国内相关的人才需求仍然有很大的缺口,软件工程行业的就业前景不言而喻。

从《构建之法:现代软件工程》走进软件工程的学习相关推荐

  1. 现代软件工程的《构建之法》

    要想了解世界,就必须亲自来打造它. -- 帕韦泽(Cesare Pavese) 国庆假日期间,我重读了邹欣老师的<构建之法>一书.我从事软件行业相关工作超过15年,每每在被问到给在校计算机 ...

  2. 【构建之法教学项目】一个简单的基于C#的电子商务系统演练场景的代码示例...

    电子商务平台,是一个历史悠久而又充满挑战的行业,他和社交一起成为中国互联网市场的两极.电子商务系统是一个非常复杂的系统,他实现了人与物.人与人的链接,同时也需要大量的技术来支撑,实现系统的高可用.这些 ...

  3. ----初读《构建之法》的疑虑

    项目 内容 这个作业属于哪个课程 任课教师博客主页链接 这个作业的要求在哪里 作业链接地址 课程学习目标 (1)学习博客园软件开发者学习社区使用技巧和经验.(2)了解Github的基本操作. 本次作业 ...

  4. 构建之法现代软件工程(第五次)

    构建之法现代软件工程(第五次) 这周我阅读了<构建之法>第六第七章 敏捷开发的原则: (1)尽早并持续地交付有价值的软件以满足顾客的需求: (2)敏捷流程欢迎需求的变化,并利用这种变化来提 ...

  5. 快速通读《现代软件工程——构建之法》

    在快速通读<现代软件工程--构建之法>后,我有如下问题: Q1:第一章通过形象的例子告诉我们什么是软件工程,介绍了软件工程的各个阶段,对软件工程的概念及它的特性做了较为生动而详细的介绍,那 ...

  6. 读《现代软件工程--构建之法》所思

    1.软件的开发过程中,如果软件的诸多特点组合,会不会造成不可控制的局面产生,比如:复杂性.不可见性.不可预见性.易变性.非连续性等特点结合,程序会不会变得像病毒程序一样,再次具有隐蔽性.传染性.触发性 ...

  7. 软件工程-构建之法 团队

    软件工程-构建之法 团队 团队名称:yousa_team 团队宣言:认真做事 团队博客:http://www.cnblogs.com/yousa-team/ 团队队长:王天宁 队长博客链接:http: ...

  8. 浅读《构建之法:现代软件工程》有感

    读完邹欣老师的<构建之法>绪论之后,感觉对软件工程有了大概的了解,软件工程可以说是把系统的.有序的.可量化的方法应用到软件的开发.营运和维护管理上的过程,是一个复杂.需要长期经营的过程:软 ...

  9. 《构建之法》学习总结1——软件工程概论,团队组织及管理,开发流程

    写在前面: 这是我作为一个软件工程专业学生的第一篇个人技术博客,虽然我接下来的人生中还会有无数像这样的博客,但这是一个开始,接下来我将会从一个软件工程专业的大学生向一个合格的程序元转变.说实话现在,这 ...

最新文章

  1. 一文详解Camera-IMU内外参标定原理
  2. OpenSession与getCurrentSession的区别
  3. 使用sealos安装K8S集群时,需确保节点的swap是关闭的
  4. TypeScript 里的枚举类型 enum
  5. nssl1338-逃亡路径【最短路计数,bfs】
  6. mybatis转义反斜杠_MyBatis Plus like模糊查询特殊字符_、\、%
  7. 字符串替换方法的优劣
  8. [BBS]搭建开源论坛之Jforum搭配开源CKEDITOR
  9. 农村女人与城市女人的差别
  10. Swift语法3.03(类型Types)
  11. netty 图解_Netty工作原理架构图
  12. 如何找到最快的DNS服务器!!
  13. funcode黄金矿工(提高篇)
  14. Chrome浏览器离线安装包下载
  15. php 漏洞扫描 rsas,绿盟--漏洞扫描系统NSFOCUS-RSAS-S-v5.0
  16. python打印网页成pdf_html – 在chrome-python 2.7中自动打印/保存网页为pdf
  17. 团队管理那点破事!OKR绩效、核心人才、面试、技术分享、研发流程....
  18. 【记录贴】AD21将元素复制到KeepOutLayer层的方法
  19. zippo蚀刻计算机键盘,【图片】蚀刻机自己填漆【zippo吧】_百度贴吧
  20. Linux 系统安装

热门文章

  1. kafka-eagle工具安装部署
  2. windows11 文件夹打开慢解决方法推荐
  3. HDA codec相关(2) - verbtable相关
  4. 社交媒体,不是双刃剑
  5. 基于OpenCV的交通标志识别
  6. 结对编程项目:带UI的小初高数学学习软件——感想及领悟
  7. CV未来,路在何方?李飞飞指路!
  8. c语言调用graphviz_C语言 使用graphviz绘制自定义BGL图
  9. STM32F1与STM32CubeIDE快速入门-USB虚拟串口(CDC)
  10. CDocument::OnOpenDocument