Skip to content

lzjwlt/ase

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

57 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

软件工程(C编码实践篇)学习总结

厉治军 原创作品转载请注明出处
《软件工程(C编码实践篇)》MOOC课程
http://mooc.study.163.com/course/USTC-1000002006

一、学习心得

我是一名本科专业与计算机类八竿子打不着的所谓跨考生,同时我也是网易云课堂的忠实用户,云课堂是我学习几种计算机语言的启蒙老师,考研时的专业课程如数据结构、计算机网络和操作系统等基本都是云课堂帮我带进门。
但是,软件工程这门课我在这学期之前是从未去考虑听听的。虽然现在的专业名称就是它。原因是:
软件工程是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。正如老师在课堂上曾经说过的:

程序 = 算法 + 数据结构
软件 = 程序 + 软件工程

如果你打算写一个人的代码,那是用不着软件工程的。我作为一个noob,一个人的代码都吃力,从来没有想过要写代码给别人看的。
但是感谢孟老师,感谢《软件工程(C编码实践篇)》,我才明白为什么软件工程是软件工程,而不仅仅是软件科学、软件技术。
这门课程老师教的不仅仅是写代码,更重要的是如何写出高质量的代码。通过一个最最简单的HelloWorld引起,循序渐进,伴随着孟老师通俗易懂,方式新颖的教学,从实践中理解软件工程的思想方法,深入浅出地将软件工程思想传授给我们。

二、实验报告目录

熟悉Linux实验环境

【实验一:写一个hello world小程序】
熟悉linux环境、vi的使用、cd ls dir等命令。
https://github.com/lzjustc/ase/blob/master/lab1/report.md

代码风格规范

【实验二:命令行菜单小程序V1.0】
实现了命令行的小程序,学习了许多代码规范,如驼峰命名,四空格缩进,强制使用{}等等。
https://github.com/lzjustc/ase/blob/master/lab2/report.md

基本的模块化设计

【实验三:内部模块化的命令行菜单小程序V2.0】
将程序内部设置接口进行模块化,使得程序逻辑更清楚。
https://github.com/lzjustc/ase/blob/master/lab3/report.md

可重用模块的接口设计

【实验四:用可重用的链表模块来实现命令行菜单小程序V2.5】
将数据结构和linklist模块独立出来,成为通用模块。
https://github.com/lzjustc/ase/blob/master/lab4/report.md

可重用模块的接口设计(callback函数)

【实验五:用callback增强链表模块来实现命令行菜单小程序V2.8】
利用callback函数参数使Linktable的查询接口更加通用
https://github.com/lzjustc/ase/blob/master/lab5/report.md

函数的可重入性(reentrant)及线程安全浅析

【实验六(测验):函数的可重入性(reentrant)及线程安全】
采用线上测验方式

子系统的可重用设计

【实验七:将menu设计为可重用的子系统】
将menu设计为可以重用的子系统,利用命令行参数argc/argv来处理命令参数,并使用Makefile工具来编译复杂工程。
https://github.com/lzjustc/ase/blob/master/lab7/report.md

三、收获总结(包括但不限于)

git

一款免费、开源的分布式版本控制系统,要想进入全球最大的同X交友社区的必备技能。也是本次课程使用最频繁的工具之一。

Linux环境

在学习本课程之前几乎从来没有接触过Linux系统,而课程结束后它几乎变成我的主力操作系统之一,因为完成各个实验几乎必须要用到它。

vi

在本次课程中学习了VI的一些基本用法,应用很广。

Markdown

所有的实验报告包括现在看到的都用到了它。

代码风格

学习了本课程之后,“没有风格”便不再是我的编程风格。严格使用四个空格的缩进、使用驼峰命名法,据说可以超过大部分程序员的代码质量。

模块化、接口与可重用
  • 实现高内聚、低耦合的要求。
  • KISS原则(keep It simple and stupid)
  • using design to frame the code(matching design with implementation)
  • including pseuducode(Using Pcode to design the design)
  • 不要和陌生人说话原则(防人之心不可无,害人之心不可有)
  • 合理利用控制结构、数据结构来简化代码
  • 实现错误处理和断言
系统的可重入性和线程安全

从课程前只停留在脑海阶段完成了向线程安全实践的转变,形成了初步的线程安全概念。

makefile

会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。 虽然还不会,但是通过这门课程涉猎了它的功能。

总结

在软件工程这门课程中的最大收获就是对软件工程有一个初步了解,初步形成了抽象化、模块化的编程思想,对我的代码能力有着非常大的提升。
最大的遗憾是仅仅数周的课程时间太短,许多方面都没有来得及深入学习,期待软件工程(OO分析与设计篇)软件工程(过程与管理篇) 的到来。

About

advanced software engineering, USTC

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published