01| 为什么要学习软件工程
引言
按理论上来说,我已经系统的 学习过软件工程这门课了。
但实际上,我一点也不理解 软件工程 这个标题的含义,甚至无法准确的描述软件,或者是工程的含义;我相信很多的同学跟我一样,仍然犯迷糊,因此我试图通过分享学习宝玉前辈的《软件工程之美》的一点心得,来帮助所有看到本篇文章的朋友。(或者是自己学习用,因为我只是个小菜鸡)
一、没有学习软件工程而出现的问题
花费较多的时间去学习各种技术栈,我称之为 下沉;
在下沉的过程中,我们不断点亮新的技能点,这是一个很愉快的过程,但同时也是很危险的,正如潜水员不断下潜,也在离海平面越来越远,离海平面越远,就越容易失去对方向和计划的把握。
学习是为工作而服务,点亮新的技能点也是为了解决所接手的开发任务,那为什么,我们在工作的时候,会产生 明明我很努力,很认真,很有激情的,花200%的心血去完成开发任务,却收效甚微,或者频频出错,从而导致自己加班加点,信心受挫,给公司造成损失 的情况?
我们在实际工作中,常常遇到很多问题,比如:
- 开发时没有分析没有设计,上手就写,后期难维护,加班熬夜去填“坑”;(开发前不分析思考)
- 缺少理论指导,遇到新项目不能举一反三,工作很平庸;(开发时不能融会贯通)
- 遇到需求变更这种事,除了抱怨两句客户,只能闷头做,无力反抗;(无法良好的应对需求变更)
- 做项目没计划性,想到哪做到哪,总是延期,比其他同事做的慢;(无计划,无组织,无效率)
- 不知道如何与团队协作,职业发展遇到瓶颈,无法得到晋升。(职业生涯上升遭遇阻塞)
那么,科班出身的程序员是否与我有同样问题?像微软、阿里等这些大厂的程序员,他们又是怎样协调完成好那么庞大的项目?我这个“野路子”程序员面临的问题,他们又是怎么分工协作解决的?
软件工程可以解开这些困惑。
二、软件工程
软件工程:软件项目的开发其实是一个工程,整个开发过程是可以有效组织起来的;对于开发过程的各个阶段,已经有很多解决问题的最佳实践,有很多方法来帮助我们高效完成任务;我们还可以借助工具来协助管理,提升开发效率。
于我而言,学习软件工程,使我区分出了 术 与 道 的概念。
- 术:各种技术栈;
- 道:站在工程,项目的角度去思考问题的出现,解决,本源。
软件工程将应用于软件开发的整个历史。(即以前,现在,未来都需要软件工程)。
你会发现,无论你是什么岗位,只要你从事软件开发相关领域,都绕不开“软件工程”,因为现代软件项目开发,多多少少都离不开软件工程知识的应用。想象下在日常工作中,不管你用什么开发语言,不管是前端和后端:
- 你接到一个开发任务,如果想开发出客户想要的功能,你是不是先要做需求分析;
- 你接手一个复杂的、大的功能模块,是不是先要做设计,才能把复杂的拆成简单的,才能让大家一起分工去开发;
- 你完成一个功能模块,如果要保证质量,是不是需要写一些测试代码,还要做一些功能测试;
- 还有日常用的那些工具,像源代码管理、Bug 跟踪。
而这些内容,都是软件工程相关的知识,和你用什么语言无关。
换言之,这就是经典的价值,为什么说我们要学经典,因为经典就是这个行业最为本质的东西。你顺着这个逻辑想,就知道为什么大学的计算机专业要设计数据结构、算法、操作系统、软件工程这样的课程了。
技术更新迭代速度确实很快,难以把握,更难以预测,但是软件开发背后的逻辑却万变不离其宗。你只有掌握了这些逻辑,才能步步为营,不被快速发展的软件开发行业所淘汰。因为你脑袋里装有软件开发的战略,相对于赤手空拳、盲打莽撞的人来说,你更能在未来获得先机。