高级软件工程学习总结

前言

在经过一个学期的高级软件工程学习中,我从《代码中的软件工程》这本书中学到了很多,逐渐了解了成为一个高级软件工程师的必经之路。首先是成为码农的基础技能(打字、编辑器使用等);然后扮演一个工程师的角色参与开发,在开发领域有了很深的理解之后,扮演架构师的角色可以在架构领域施展拳脚;最后作为行业的领头人提出了一些前言问题。所以一下我将从以角色扮演的视角总结一下我对于高级软件工程的理解。

学生阶段——掌握基础技能

作为一个码农,经常要写代码,因此写代码的相关技能显得尤为重要,打字的速度、编辑器的使用等等。VS code作为一款轻量且强大的代码编辑器,而且拥有丰富的插件系统,熟悉VS code的使用可以提升编写代码的速度。除此之外,Git、vim、正则表达式都是我们必须要掌握的内容(无论我们做什么方向的开发工作),只有提前掌握了这些基础技能才能在工作时候有余力学习新的内容,拥抱变化。

初级工程师——高效编程

在初始编程的时候,从hello world开始不断迭代调试使代码长的越来越像一个程序。写代码要小步快跑不断迭代,罗马不是一天建成的,不要期望一撮而就。
代码虽然最终是要给机器看的,但毕竟还是面向程序猿们的编程,程序猿们是要陪伴整个项目开发过程的。在编写代码的过程中,尤其是在协作开发的过程中,如果对方的代码杂乱无章,读起来都费劲,更别说还需要在此基础上进一步开发,这对程序员来说是个巨大的挑战。好的代码风格不仅易于代码的阅读和理解,还能在很大程度上减少一些不必要的语法错误。代码风格的原则是简明、无二义性、易读,最精简的是无注释,理想的状态是即便没有注释,也能通过函数、变量等的命名直接理解代码。

编写高质量代码的基本方法:

  • 通过控制结构简化代码(if else/while/switch)
  • 通过数据结构简化代码
  • 一定要有错误处理
  • 注意性能优先的代价
  • 拒绝修修补补要不断重构代码

编写代码的一个重要技术就是模块化,模块化是在软件系统设计时保持系统内各部分相对独立,以便每一个部分可以被独立地进行设计和开发。这个做法背后的基本原理是关注点的分离,分解成易解决的小问题,降低思考负担。软件设计中的模块化程度便成为了软件设计有多好的一个重要指标,一般我们使用耦合度内聚度来衡量软件模块化的程度。
模块化代码的基本写法,KISS原则、本地化外部接口、先写代码的伪结构。

模块化设计分离出来的数据结构和它的操作还有很多菜单业务上的痕迹,我们要求这一个软件模块只做一件事,也就是功能内聚,不应该涉及菜单业务功能上的东西;同样我们希望这一个软件模块与其他软件模块之间松散耦合,就需要定义简洁、清晰、明确的接口。接口就是互相联系的双方共同遵守的一种协议规范,在我们软件系统内部一般的接口方式是通过定义一组API函数来约定软件模块之间的沟通方式(利用callback函数参数使Linktable的查询接口更加通用)。

接口的基本要素:

  • 接口的目的
  • 接口的前置条件
  • 接口的协议规范(如http协议,png图片格式,json数据格式定义etc…)
  • 接口的后置条件
  • 接口的质量属性(如响应时间)

接口和耦合度之间的关系:

  • 公共耦合;当软件模块之间共享数据区或变量名的软件模块之间即是公共耦合,显然两个软件模块之间的接口定义不是通过显式的调用方式,而是隐式 的共享了数据区或变量名。
  • 数据耦合;在软件模块之间仅通过显式的调用传递基本数据类型即为数据耦合。
  • 标记耦合;在软件模块之间仅通过显式的调用传递复杂的数据结构(结构化数据)即为标记耦合,这时数据的结构成为调用双方软件模块隐含的规格约定,因此耦合度要比数据耦合高。但相比公共耦合没有经过显式的调用传递数据的方式耦合度要低。

通用接口定义的基本方法:

  • 参数化上下文(使用参数传递信息,不依赖上下文环境,即不使用闭包函数)
  • 移除前置条件(sum函数中使用数组传递参数,不再限定参数个数)
  • 简化后置条件(移除参数之间的关系,使sum返回的是数组全部元素的和)

高级工程师——软件设计

软件的生命周期分为分析、设计、实现、交付和维护五个阶段,作为软件高级工程师需要在各个阶段参与软件的开发活动:分析阶段的任务是需求分析和定义,分析阶段一般会在深入理解业务的情况下,形成业务概念原型;设计阶段分为软件架构设计和软件详细设计,前者一般和分析阶段联系紧密,一般合称为“分析与设计”;后者一般和实现阶段联系紧密,一般合称为“设计与实现”;实现阶段分为编码和测试,其中测试又涉及到单元测试、集成测试、系统测试等; 交付阶段主要是部署、交付测试和用户培训等;维护阶段一般是软件生命周期中持续时间最长的一个阶段,而且在维护阶段很可能会形成单独的项目,从而经历分析、设计、实现、交付几个阶段,最终又合并进维护阶段。
在分析阶段确定需求,用原型化或者建模的方法找出用例,用例是满足以下四个条件的业务领域内的动名词短语:
①它是不是一个业务过程?
②它是不是由某个参与者触发开始?
③它是不是显式地或隐式地终止于某个参与者?
④它是不是为某个参与者完成了有用的业务工作?

在设计阶段,使用合适的设计模式;设计模式的本质是面向对象设计原则的实际运用总结出的经验模型。目的是包容变化,即通过使用设计模式和多态等特殊机制,将变化的部分和不变的部分进行适当隔离。

实现阶段,也即大量用到我们前面提到的基础技能进行编程。

架构师——软件架构

在非常熟悉了系统的运作方式后,高级软件开发工程师可以作为软件架构师这一角色参与软件的开发。软件架构方式可以分为两部分:

  • 克隆;完整地借鉴相似项目的设计方案,甚至代码,只需要完成一些细枝末节处的修改适配工作。
  • 重构;构建软件架构模型的基本方法,通过指引我们如何进行系统分解,并在参考已有的软件架构模型的基础上逐步形成系统软件架构的一种基本建模方法。

最后

高级软件工程这一门课实际上是贯穿我们职业生涯的,无论将来从事什么样的开发工作,达到的职业高度有多高,高级软件工程这一门学问对于我们来说都是非常必要的。

  • 2
    点赞
  • 1
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论

打赏作者

ws468

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值