千里之行,始于足下——软件工程课程总结

程欣+原创作品转载请注明出处+《软件工程(C编码实践篇)》MOOC课程作业

两个多月的软件工程课程就这么结束了,有些满足有些惆怅。满足是因为在课程中的确学到许多,收获许多;惆怅是因为学到的东西还不够多,还不够深入。这门课程给我最大的感觉,正如本文题目:千里之行,始于足下。“软件工程”四个字在我的理解中,既是一门学科,也是软件行业在从无到有、从崛起到兴盛的过程中无数人经验和智慧的总结。无论哪个领域,后人能取得更高的成就都仰赖于前人奠基,看得更远只因站在了巨人的肩膀上。

对国家社会乃至人类发展来说,计算机科学出现时间不长,却已经成为了现代社会的基石之一,而软件工程作从科学走向工程的标志性学科,已经成为了每个从业人员所必须掌握的技能。软件工程的能力直接影响着生产效率,或许这门学科并不能开拓人类知识的荒野,却能让人类已经踏足的领域更加繁荣昌盛。对个人来说,软件工程师的道路漫长曲折,但良好的开端无疑是成功的一半,一开始就能以恰当的方式朝着正确的方向前进,总能帮助新人在这条道路上走得更踏实长远。这也正是我上完这门课程的感受,这是一门见识之课,这是一门能力之课,这是一门思维之课,这是一门奠基之课。

课程有七个实验,精髓也正是在每个实验的实践当中。

实验一:写一个hello world小程序

实验一虽然简单,但主要在于熟悉shiyanlou.com提供的Linux环境以及命令行操作,同时还有以下收获:

  1. 在编辑代码的过程中学习并熟悉了vim的使用。据说vim是写代码神器,刚刚开始学习还没体会,以后继续使用的过程中再感受一下。参考资料:vim快速入门vim进阶简明手册

  2. 在提交代码的过程之学习并熟悉了git的使用。版本控制工具的使用是一个coder最基本的技能吧,没什么好说的,入门也没什么难度,何况还有全球最大同性交友社区。不过在国内环境,老师推荐coding.net,速度更好一些吧。参考资料:如何使用实验楼的“我的代码库”功能?git实战教程

  3. 在撰写实验报告的过程中学习并熟悉了Markdown格式。用起来嘛……前所未有的丝滑感受……这文档写起来颇为心旷神怡,排版虽然还是有些limitation而且本身有weakness不过总的来说不错,反正比直男审美好多了还省事儿,这才是该作为coder日常使用的东西咳咳。本报告内所使用的格式参看报告附录。参考资料:实验楼里使用Markdown的地方Markdown语法说明(详解版)Markdown 语法说明 (简体中文版) 知乎Markdown专题

实验二:命令行菜单小程序V1.0

实验二主要是关于代码规范的学习和实践,而代码规范可以分成两个部分,代码风格规范和代码实践规范。关于代码规范,内容比较杂而细,在整个课程的实践中以及其他的代码实践中慢慢去遵守,如今已经从可以遵循变为开始渐渐内化为习惯。

实验三:内部模块化的命令行菜单小程序V2.0

1. 模块化的思想

  • Seperation of concern
  • 初级程序员的第一个瓶颈:2000行代码复杂度
    程序的复杂程度超过了一般人大脑所能应对的程度
    所以需要模块化
    模块化的背后就是Seperation of concern
  • 包容变化是模块化的主要作用
    通过模块化把变化的部分放在一起
  • 软件=程序+软件工程,程序=算法+数据结构
  • 用函数指针调用一个函数
  • 面向对象中的多态机制。同一段代码在运行时会表现出不同的形态,不同的运行效果。

2. 基本的模块化写法

  • 开闭原则:对扩展是开放的,对修改是封闭的
  • 模块复用和系统复用。代码的模块可以复用,或者整个软件可以复用。
  • 抽象层级:业务逻辑层和数据存储层。业务逻辑是菜单逻辑,数据层是数据结构和数据操作。同时考虑功能性需求和非功能性需求
  • 将系统模块放在不同的源文件中,以便于对程序进行修改和维护

实验四:用可重用的链表模块来实现命令行菜单小程序V2.5

实验四主要关于模块化的思想和内容,经过了这次实验逐渐明白以前把所有东西都写成一大坨是多么丑陋难读而又混乱。同时还学到了一些今本的思想和原则:

  • 避免重复造轮子
    一些可重用的通用模块可以直接使用,不需要再写一遍(拿来主义)。
  • 防止重复include
  • 用表达式作为判断条件,不要用布尔变量做比较
  • 参数化上下文
  • 撰写开发者指南,如范例程序
  • 本地化外部接口(Localize input and output)
  • DVT(Developer Verify Test)开发者验证测试
  • 单元测试和测试驱动开发TDD
  • 定义接口,包括软件单元对外提供的服务,以及系统其他部分怎样访问这些服务
  • 接口的五个要素:Purpose,Preconditions(Assumptions) ,Protocols,Postconditions(Visible Effects) ,Quality Attributes。
  • 函数名参数返回值是接口的三个显性的要素
  • 前置条件质量属性是接口的两个隐性的要素
  • 如何把接口设计得更通用(参数化上下文信息,移除前置条件,简化后置条件)
  • 不要太具体,也不要太一般(通用)

实验五:用callback增强链表模块来实现命令行菜单小程序V2.8

实验五中学习到了CALLBACK的概念和简单用法,并在学习过程中又看了一下函数指针。CALLBACK的基本概念也不难理解,用一下就大概明白了。
对接口设计有了更多感觉。接口设计要考虑到用户可能的需求,以及接口设计应遵循的规范,要做到既合理又够用又好用,需要仔细考虑,并带入实际情景分析,比如参数的数量、内容应该怎样选取等等。
知道了原来接口信息还需要必要的隐藏,这个是以后从事开发工作需要注意的地方了。这次试验之前还没明白老师说的“防人之心不可无”到底是指什么,现在开始明白了。

实验六:函数的可重入性(reentrant)及线程安全

实验六没有具体的代码要求,以理解为主,主要是关于函数的可重入性以及线程安全的内容,在多线程程序中这一部分内容应该十分重要,也算比较靠底层的一些思想,需要对进程调度等内容有理解,真正掌握还需要靠今后的实践。

实验七:将menu设计为可重用的子系统
通过这次的实验,实现了对Menu设计为一个可重用的子系统。并且使得menu可以执行带参数的指令。并且增加了自己对makefile这种自动化编译工具的认识。

软件工程(C编码实践篇) 相关代码

在学习《软件工程(C编码实践篇)》课程中最大的收获?

工欲善其事必先利其器,每次实验之前都需要查阅许多资料,学习很多新知识,十分耗费时间,而且依然可能会有所遗漏,但总归脑子开始清楚了。浑浑噩噩跟着步骤走大抵学不到很多东西,头脑清醒思路清晰,知道自己每一步目的、途径、限制、参考,才能从更高的角度指导自己做事,心理学上的概念就是元认知(Metacognition)
实验楼这个学习平台使用体验很好,功能具足,指示清晰,使用方便,比如报告中截图这样的细节功能都考虑得很完善,对学习和效率提高很有帮助。

学习完《软件工程(C编码实践篇)》课程后您最大的遗憾是什么?

时间和精力所限,很多内容算是雨过地皮湿,还缺乏深入理解掌握,比如git,vim,makefile等工具的使用很粗浅,线程安全的内容缺乏实践等等,当然,事无巨细地掌握所有内容可能也不够现实,毕竟这门课是奠基之课,方向已经有了,功力的积累和熟练度地提升却是个长年累月地过程。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,827评论 25 707
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,637评论 18 139
  • 1 好友Y大学也没有毕业,中途退学了。她对这个专业深恶痛绝,当时她妈妈为她介绍了一个比她大10年的有钱男人。 她本...
    小萤子阅读 439评论 10 7
  • 1.报名 想学车已经很久了,现在汽车使用越来越普遍,不会开车就很不方便,开车也是一种越来越重要的技能。计划学车已经...
    遇见大兰阅读 1,204评论 3 4
  • 8月20日新月饭店的话剧演完了,我是多么想飞到上海去看一场。我一定要去长白一定要去看一场话剧一定要要到签名201...
    a7293fc00570阅读 159评论 0 0