软件工程是什么
目录
软件工程专业
软件工程专业是什么
软件工程专业是2002年教育部新增专业,属于工学中的计算机大类,学制4年,毕业生可获得工学学士学位。
全国开设该专业的院校超过600所,毕业生规模约为每年60000人以上,规模还在不断扩大。
软件工程专业主要培养掌握计算机软件基本理论知识,熟悉软件开发和管理技术、能够在计算机软件领域中从事软件设计、开发和管理的高级人才。
和计算机科学与技术专业有什么区别
-
平行的本科专业
软件工程是和计算机科学与技术平行的一个本科专业。
在工学门类下的计算机类下,设有计算机科学与技术、软件工程、物联网工程、信息安全和数字媒体技术5个基本专业,另外还有一些特设专业。
-
培养的目标不同
软件工程与计算机科学与技术的培养目标不同。
计算机科学与技术,可以偏向科学理论方向,也可以偏向技术应用方向,对于科学理论方向基本都是高精尖的学校专业人才,大部分人还是会偏向于技术应用方向,一技在手,天下我有。两个专业开设的基础课程是比较相似的,专业课程则因各学校的培养目标的差异而有所不同,计算机科学与技术注重科学理论方向的学习、专业技术的研发,基础性相对更强;软件工程注重应用实现,其在产品研发管理方向专业性更强。
当然从技术知识上来说两个专业的毕业生都可以相互转岗,计算机科学与技术的人才可以去实现产品,对接实际产品用户,软件工程的人才也可以去专心研究一个方向的技术点或理论。
-
受众群体不同
在受众群体上,计算机科学与技术理论上面向的是计算机软件行业技术人员,为行业提供技术知识理论或底层系统,软件工程面向的是终端产品用户。
-
宏观与微观
对于产品来说,计算机科学与技术(应用方向)偏向微观,专注于点,讲究深度;软件工程偏向宏观,专注过程,讲究广度;
两个专业的课程大部分差异不大,只是在方向上不大一样,计算机科学与技术更偏向技术研究,软件工程更偏向于产品实现,对于技术知识来说两个专业都可以互相转换,没有必要深究,但最终都是为了产品,软件工程虽然自身可以在技术方面下功夫,但更注重产品研发管理,计算机科学与技术更注重理论研究及技术点的研发。
打个能理解但不是严谨的比方:联发科研发芯片,手机厂商研发手机,联发科为各大手机厂商提高提供芯片(技术点),手机厂商利用第三方芯片、散热器、屏幕、摄像头等等技术点来设计开发一款手机产品。当然手机厂商中比如华为、苹果等厂商本身有能力为手机提供一些技术点,比如系统、芯片等软硬件技术点,但苹果手机、华为手机(这里只谈华为手机方面)侧重点在手机研发、管理、营销等。这里手机厂商可以看做软件工程,联发科可以看做是计算机科学与技术,当然三星也制造自己的屏幕、芯片等硬件,甚至系统,三星也设计生产手机,所以实际上有能力的话,两者是可以相互转换的。
-
研究生
这两个专业的学生都可以报考软件工程硕士这一专业硕士研究生。目前这两个专业的就业形势都非常好,其中以软件工程更为好一些,计算机科学与技术专业的学生考研的学生多于软件工程专业的学生,软件工程专业的学生本科就业,个人能力稍强的,就业前景还是很好的。
随着深度学习、人工智能的爆发,越来越多的计算机相关人才涌入,在理论和技术研究方向,需要更多的计算机科学与技术、数学等专业的人才。
相关课程
软件工程专业要求学生掌握软件设计、开发、运行、维护、管理的相关知识,因此课程涉及软件建模与分析、软件设计与体系结构、软件质量保证与测试、软件过程与管理。
大部分院校的软件工程专业会涉及到以下相关课程:
编程语言(汇编/C/JAVA/.NET/C++/Python等)、面向对象程序设计、编译原理、离散数学、概率统计、线性代数、数据结构与算法、操作系统、计算机原理、数据库原理、网络、UML、软件质量保证与测试、软件工程、多媒体、软件项目管理、计算机英语、Linux操作系统、人机交互、嵌入式开发等课程。
不同院校课程有多有少或课程名不一样。
软件工程
什么是软件
通俗的说,软件是一个集合,是程序+数据+文档的集合。并不是大部分普通人认为的软件仅仅是程序。
PC电脑上有IE浏览器软件、360杀毒软件、QQ、百度云盘、迅雷下载、WPS办公软件、英雄联盟等等;
移动端手机上有微信、网易云音乐、高德地图、墨迹天气、邮箱、抖音、京东、知乎、美团、王者荣耀等等;
除了PC端与移动端,一些手持设备、公共场所设备、智能电器设备等智能设备,通常都会有相关软件产品,比如丰巢柜、kindle、智能冰箱、小米扫地机器、电视机盒子、银行/机场/餐厅等细分行业自助机,等等很多能有屏幕的智能设备都会有内置相应的软件产品。
程序可以通俗的理解为我们安装的在电脑/手机上的软件或App,数据可以理解为软件预置的数据、使用过程产生的用户数据等,文档面向的是内部工程团队。
软件工程是什么
软件工程是一门研究用工程化
方法构建和维护有效的、实用的和高质量的软件的学科。涉及程序设计语言、数据库、开发工具、系统平台、标准、设计模式、开发方法等方面。
软件工程包括三个要素:过程
、方法
、工具
。通俗点说就是,描述了软件开发应该是怎么样的过程,过程中的每个环节(分析、设计、开发、发布、维护等)适合采用哪些方法与解决方案,采用这些方法是否可以通过一些工具来提高每个环节的效率,降低整个软件工程生命周期的时间、资金、资源成本。
这里我们也可以看出软件工程的侧重点在于应用,在于过程管理,在于方法、工具的运用,目标就是用更小的成本、更短的时间完成更完善更符合需求的软件产品。软件工程是一个综合性的工程,是一个宏观的行业,不只局限于技术细节。
书面上的目标是在给定成本、时间的前提下,开发出具有必要性
、适用性
、有效性
、可修改性
、可靠性
、可理解性
、可维护性
、可重用性
、可移植性
、可互操作性
和满足用户需求的软件产品。
这些目标有助于提高软件产品的质量、开发效率,降低整体成本。
软件工程师
软件工程师是从事软件开发相关工作的人员的统称。工程师是一个比较泛的概念,包括软件设计、软件架构、过程管理、开发等相关岗位。每个岗位的分工不同,工作内容都与软件开发生产相关的,软件工程师是IT行业需求量最大的职位。
工作内容
- 1、指导开发工作
- 2、参与软件系统的设计、开发、测试、发布等过程
- 3、协助产品项目管理保证项目进度与质量
- 4、负责系统中主要模块、主要功能的编码实现
- 5、解决系统中的技术难题与关键问题
- 6、协调工程团队成员工作,并与其它软件工程师协同
- 7、协助或负责系统运维
软件工程发展前景
应用广泛
软件工程的应用十分广泛,近20年软件行业高速发展,主要应用于多个方面,典型的软件有IM聊天通信工具、音频视频软件、游戏软件、浏览器、图形图像工具、网络应用下载相关软件、办公阅读翻译相关软件、教育学习软件、系统工具等等
近10年互联网达到一个新的阶段,每个人都有手机,全民移动互联,而各个行业几乎都有计算机软件的应用,不论是工业、农业、国企、私企、银行、航空、政府部门等团体组织都需要有适合自己的软件应用,这些应用全面提高社会工作效率、生活效率,进一步促进经济和社会的高速发展,过去20年互联网更多的是在高新及前沿企业有广泛的应用,在传统行业仍然有很大的空间,特别是近10年的深度学习、人工智能、物联网的发展,更多的企业及传统行业更积极的拥抱互联网软件产品。
就业方向
-
软件开发
软件开发是大部分软件工程毕业生就业方向,软件开发涉及面很广泛,Web应用开发、PC应用开发、移动端应用开发、嵌入式开发、系统开发、游戏开发、数据库开发等,开发还可以细分为前端、后端、移动端、底层、数据库、网络等
-
软件测试
软件测试是软件工程过程的一个重要环节,保证软件产品质量。目前国内互联网公司逐步重视软件测试环节,越来越多的开发转到测试团队,提供更有力的测试能力。
-
数据库管理
数据库系统管理也是一项很复杂的工作,我们说软件=程序+数据+文档的集合,一般软件工程项目数据都存储在数据库,所以数据库系统管理甚至开发是软件工程中一项很重要的环节。
-
大数据分析
近10年来,随着计算机硬件及技术的发展,互联网数据的沉淀,聪明的互联网人不会让沉淀的数据一直沉睡,通过大数据分析,系统可以得到一些更有力的数据来支持决策层决策,及更好的为用户提高个性化服务。
-
人工智能
深度学习再一次激发了人工智能的全面爆发,近几年,百度、阿里、腾讯、头条等大厂在人工智能方面大量投入资源,国家层面更是主动推动5G、物联网来配合人工智能在传统行业的落地,我们认为这是互联网的第三次革命。
-
项目管理
有产品,总是会有项目管理的岗位,小企业可能由项目经理或产品经理兼职,大企业一般会有独立的项目管理的岗位/团队。
-
产品经理
在互联网产品经理的门槛低,但好的产品经理真的少。有开发基础和经验的工程师也很适合转岗产品经理,有技术沟通方面有一定优势。过去10年有很多产品经理大牛都是从工程师/开发过来,雷军最早一批的程序员与产品经理,马化腾称自己是腾讯最大的产品经理,丁磊在2010年就说自己不再定位研发工程师更像是个产品经理,周鸿祎标榜自己是产品经理的ceo之一,微信之父张小龙,这些大神早期都是开发/程序员/工程师身份。
-
系统运维
软件工程课程真没用吗
很多人觉得软件工程这门课很虚,书本里都是一些概念、知识点,字都认识,合起来一句话却不是很明白是什么意思。比如说书中提到的需求分析、建模、软件过程、开发方法、开发模型等内容,都是一些纯理论的知识,一开始读像鸡汤,怎么看都是对的,但又不知道为什么对。
但当我们正式投入软件工程开发工作后,结合自己产品项目开发经验回顾这门课时,就会发现经常遇到这样的场景:
我们收到一个需求任务,想要开发前,我们需要先做需求分析;
而当我们准备开发一个较复杂的大点的模块,开始时知道要先设计,将模块自顶而下逐步分解成小功能,对关键问题及技术难题提前研究并设计,最后团队开发成员协同分工完成开发;
在我们完成一个功能模块后,会开始编写单元测试代码,还需要测试同伴来完成一些专业的功能、性能方面的测试;
在项目开发过程中,我们的项目管理人员会进行进度的跟踪,时间与资源的实时调配,开发团队需要对代码进行日常管理比如版本分支等管理,测试团队需要对测试用例、BUG进行管理及跟踪,保证测试有序有质。
产品准备发布时,我们会去考虑代码版本、分支,灰度部署,一键分发,A/B测试等,这些都需要我们熟悉过程,采用合适的方法,运用合适的工具。
计算机技术最终都是服务于软件产品,不论使用什么编程语言,不论是前端、后端、底层、数据分析、深度学习、人工智能等层面的技术都是为了更好的生产软件产品,软件产品的实现离不开软件工程知识的应用。
我们在大学期间的软件工程课程更侧重理论,属于前人经验的书面传授,在大学期间,作为学生很难有机会参与比较完整的软件工程项目,除非到公司实习参与开发或跟随导师团队完成项目开发,否则缺少实践及问题导向意识,很难理解书中的知识,理解起来比较枯燥乏味。这有点像小朋友背诵古文一样,在小的时候只能背诵,但无法很好的理解古文的含义,过去大部分院校的软件工程专业很难提供实践方面的机会,即使有也并没有很好的告诉学生为什么需要这个实践及这个实践发作用于书本哪些知识,也不会再去结合结合实践回顾书本知识,加强深刻理解,即使有院校做到了,大部分学生都是懵的,还不知道院校的苦心,只知道学习一个开发技能努力就业。当然在毕业后再回头结合软件工程相关知识也不晚,我们觉得更好,项目更真实,根据参与的多个实际项目去理解软件工程的过程、方法、工具三要素,去理解那些是什么、为什么、怎么做,根据自身的理解形成自己的软件工程理论与方法学。
从当下考虑,学好了软件工程,你的工作可以按时保质保量完成,开发时间和成本可控。
软件工程师中年危机
青春饭、中年危机、码农、攻城狮、搬砖,这些词汇有些是自嘲调侃,而说到中年危机,程序员到30岁就开始有点焦虑,究其原因是计算机技术更新迭代太快,所有人都在追赶潮流,担心被淘汰,一个技术很可能流行个几年就淘汰了,很可能这个技术就是你最熟悉最在行的,被淘汰了就相当于你少了只手,肯定害怕。
那我们是否可以去考虑哪些技术知识不容易更新换代,或说可一直存在且可持续优化更新的,更长远的去想,在软件开发领域,有哪些知识是10年前很重要,现在仍然重要,未来可能同样重要的?哪些知识会决定你发展的高度?
相信大家心里是有答案的,无外乎就是数据结构与算法
、数据库SQL
、操作系统
、计算机网络
、编译原理
,以及软件工程
,甚至更基础的数学课程。
技术更新迭代速度再快,软件工程的过程、方法(软件开发背后的逻辑、知识体系、解决方案)却是万变不离其宗,只有工具会一直更新升级来提高软件工程的效率,降低软件工程的成本,这些过去在用,现在在用,未来还会用的知识,就是经典的价值,就是行业最为本质的东西。
虽然过程与方法万变不离其宗,并不是说他们一成不变,而是需要一切从实际出发,实事求是,理解并定义过程,根据实际情况与过程定义,采取适合的方法。
参考
如有侵权,请联系站点底部邮箱