《软件工程》学习收获

本文探讨了软件工程的重要性,强调了良好的编程习惯和工具的使用,如VSCode、Git和Vim。通过实际编程项目,作者倡导从小功能开始迭代开发,并介绍了需求分析、软件设计方法,如用例和建模。文章还提到了软件危机,指出尽管有多种应对策略,但挑战仍然存在。
摘要由CSDN通过智能技术生成

       曾经以为写程序是一个很简单而随意的事情。学习这门课程第收获是,知道了软件工程其实涉及很多高深的理论,一个经过优秀设计的软件比没有经过设计的而言要高效、优雅、严谨得多。所以,作为一个优秀程序员必须要学习软件工程。程序的不断复杂化导致了软件危机的发生,使得人们不得不探索新的解决方法。经过老师的讲解,理解了软件工程,就是一套用于软件的团队开发,以提高软件质量和程序员工作效率为目的的规范。

上了这门课,我的收获总结如下:

工欲善其事,必先利其器

     磨刀不误砍柴工,想要做一个合格的程序员,必须先把开发工具先学会,以便提高生产效率。vscode是一个轻量且强大的代码编辑器,具有丰富的插件生态系统。VS Code专注于开发者“最常用”的功能:编辑器+代码理解+版本控制+远程开发+调试。这是一个非常节制而平衡的选择,专注于开发者“最常用”的功能,同时在产品的形式上力求简洁高效。Git,是目前世界上最先进的分布式版本控制系统。vim是从vi发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用

工程化的编程实战

     UML三巨头之一的Ivar Jacobson曾说“银弹不存在,我们需要的仅仅是明智的软件开发方法( smart software development ),软件必须从一个小的可运行的 skinny system 开始,逐渐充实生长称为 full-fledge 的成熟系统。” 我们就采用这个思路,从 hello world 开始不断迭代调试使代码长的越来越像一个命令行的菜单小程序。写代码要小步快跑不断迭代,罗马不是一天建成的,不要期望一撮而就另外需要说明的是,做实际项目并不鼓励一开始就从头开始写代码,而是找已有的类似项目做对比分析,对开源代码做逆向工程和再工程,对项目有深刻理解的基础上,再考虑是从头构建还是维护一个已有的项目来达成目标。

代码的风格分成三重境界

一是规范整洁。遵守常规语言规范,合理使用空格、空行、缩进、注释等

二是逻辑清晰。没有代码冗余、重复,让人清晰明了的命名规则。做到逻辑清晰不仅要求程序员的编程能力,更重要的是提高设计能力,选用合适的设计模式、软件架构风格可以有效改善代码的逻辑结构,会让代码简洁清晰;

三是优雅。优雅的代码是设计的艺术,是编码的艺术,是编程的最高追求

从需求分析到软件设计

      需求就是对用户期望的软件行为的表述 获取需求就是需求分析师通过关注用户的期望和需要,从而获得用户期望的软件行为,然后对其进行表述的工作需求分析是在获取需求的基础上进一步对软件涉及的对象或实体的状态、特征和行为进行准确描述或建模的工作。原型化方法(Prototyping)和建模的方法(Modeling)是整理需求的两类基本方法原型化方法可以很好地整理出用户接口方式(UI,User Interface),比如界面布局和交互操作过程建模的方法可以快速给出有关事件发生顺序或活动同步约束的问题,能够在逻辑上形成模型来整顿繁杂的需求细节用例(Use Case)的核心概念中首先它是一个业务过程(business process),经过逻辑整理抽象出来的一个业务过程,这是用例的实质。什么是业务过程?在待开发软件所处的业务领域内完成特定业务任务(business task)的一系列活动就是业务过程。面向对象方法本身也引入了不是软件所固有的一些复杂性,试图以坚实的科学模型基础来建构软件世界的努力逐渐重新走入经验主义的巢臼。比如设计模式就是典型的经验模型;再比如最新的一些语言特性融合了面向过程编程的优点以及函数式编程的优点;甚至软件开发方法也走向了颇具工匠精神的思路,不断迭代和重构来优化软件设计以及代码结构。这些都让我们重新审视将抽象的对象作为认识软件的基础是否根基牢固

软件危机和软件过程

       软件危机的困境依然没有从根本上找到解决方法。从复杂系统研究的结果看,人类过去的科学理性范式没有能力处理应对多个独立变量相互作用的复杂系统,而大型软件系统就是高维度复杂系统,人类的理性力量无法有效跟踪分析高维度复杂系统的概念完整性和一致性。换句话说,基于规则的编程模型,找不到解决软件危机的杀手锏(银弹)。为了应对软件危机,首先想到的是通过简化和抽象的方法“就事论事”地处理软件本身的问题,从而诞生了结构化程序设计、面向对象分析和设计、模块化方法、设计模式、软件架构等一系列技术。这些技术确实在一定程度上缓解了软件危机的表现,这些技术本质上都是通过对软件本身的抽象来有效管控软件的复杂性。但在大型复杂软件系统中,这些技术依然力有不逮。行有不得,反求诸己。难以为复杂软件建立完整且一致的抽象概念模型,这一本质问题显现出来后,逐渐认识到相对于软件本身的管理这一局部问题,项目管理上的全局问题是更为主要的矛盾,于是开始反思软件开发过程本身,因此将软件过程改进纳入到应对软件危机的视野中,从而提出了各种软件生命周期模型及软件过程改进方法,以PSP和TSP的基本方法为支撑的CMM/CMMI软件成熟度模型最具有代表性

参考资料软件工程: 《代码中的软件工程》一书的配套ppt和源代码

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值