读行学堂 读行学堂

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

所属微专业:

图片
课程概述

本课程不提供教学服务、作业批改及证书发放!


我需要教学服务,☜请点这里!


课程概述:本课程分为三篇:C编码实践篇;OO分析与设计篇;过程与管理篇。C编码实践篇强化实践能力训练,从学生较为熟悉的编程训练入手,以范例演示基本编码规范、 No Design时的代码、经过基本Modularity (also called separation of concerns)设计的代码、writing code to make it reusable on future projects以及一些特殊的接口设计如callback函数和函数的可重入性(reentrant)及线程安全等较深入的设计问题;这是课程的第一部分C编码实践篇,重实践,形成对软件工程直观感性的认识。课程的第二部分OO分析与设计篇将OO分析与设计过程细化为可操作的步骤,包括用例建模、领域建模、对象交互建模和设计类图,由易到难逐渐涉入设计模式、软件体系结构等较深入的话题。课程的第三部分过程与管理篇才开始对软件生命周期、软件项目任务切分工作量评估、项目计划、项目管理、进度跟踪等涉及软件工程项目全局性的概念方法做一梳理。


特色:强化实践能力训练,从实践中理解软件工程的思想方法。

受众:有意向夯实工程化软件代码的工程师和初学者


安装Linux系统做实验太麻烦?No,实验楼为我们提供了Web端可访问的虚拟机,立即去看看!


学员评价


  • 选修这样独具匠心的课尚属首次——虞昬翥

  • 如果想写出高质量的代码,软件工程思想必不可少。——csxiaoyao

  • 学习这门课程彻底明白了我们为什么要学习软件工程,软件工程有什么作用以及如何用软件工程设计工程。——ahutsunshine

  • 第一次懂得了如何在真正项目中应用软件工程思想。——紫宸爱

  • 2个多月的学习,让我对程序的架构设计有了更深一步的认识,孟老师的讲解由浅入深,细致独到,从一个最简单的·HelloWorld小程序到设计复杂的可重用的命令行小程序,环环相扣循序渐进,让我明白了罗马并非一日建成的深刻道理,同时也通过课程学习到了良好的编程规范和编程习惯。 ——肥肠大表哥

  • 个人认为抽象化的相关内容是本课程中最有魅力的部分,在不断运用抽象化的思维方法实现新代码的过程中,编程能力会有很大的提升。——2016年最爱吃橙子

  • 软件工程不仅仅涉及到代码编写甚至在其中还包含着朴素的生活哲理,“小情侣抢厕所”和线程锁有内在的关系,“天王盖地虎”很好的解释了接口设计的Protocol等等不一而足。——用户234971658

  • 孟宁老师将实验设计的非常巧妙,紧扣教学与实际开发需要。线上的C语言的实验环环相扣,一步接着一步让我更好的理解了软件工程编码的思想,如何解耦,如何模块化编程等等。每次实验都有收获——用户5739161054

  • 通过对这门课程的学习以及7门经典的小实验,不仅让我掌握了如何去写一个程序,而且更是掌握了一种学习方法。就好比你要修炼一门武功,外功的修炼是基础中的基础,就好比是一门编程语言的规范及语法;但内功心法的作用更为重要,我想,孟宁老师的这门课就是在传授我们编程这门“武功”的“心法”吧。——肥肠大表哥

  • 网易云课堂的软件工程(C编码实践工程)的确是一个规范且又细致的网课,令我们初学软件工程的学生能够深入浅出的慢慢学习相关知识,并循序渐进的进行编码小实验。—— Z160414

  • 这是一门见识之课,这是一门能力之课,这是一门思维之课,这是一门奠基之课。—— 无念修心

  • 孟宁老师讲课由浅入深,注重实践,从实践中加深了我对软件工程的理解。—— lyr885

  • 软件工程作为入门课程,更多的论述的都是理论方面的知识,讲述开发过程中的各种模式,以及软件工程在现实生活中的应用,但是孟宁老师的这门课却用轻松而又容易理解的语言向我展示了什么才是真正从实践中理解软件工程这门学科,通过对于菜单程序的开发,从无到有,从有到精,一步步了解一个符合软件工程规范的程序是如何构建的,在这样的过程中对于软件工程有了更深的了解,为之后的工作奠定了基础。—— wusiluwsl_woflj

  • 软件工程是程序员的“政治课”,有非常多的理论和概念,但是孟老师的课避开了传统冗杂的理论说明,直逼主题,通过一系列的实践,让我们亲自动手写一个小工程,抓住“工程”产生的源头,有一种水到渠成的流畅感。—— 谰语者

  • 作为一个学软件的工科生,实践永远是第一位。线上课程多敲敲代码,找找BUG,永远是学习软件开发的不二法门!—— 琅嬛散仙

  • 学习了孟宁老师的的软件工程课程,我收获颇多。孟宁老师讲课由浅入深,注重实践和知识的结合。随着命令行工具的迭代,讲授的知识也一步一步深入下去。从一开始的几行的menu.c,到最后命令行工具的迭代完成,真的就像是做完了一个工程一样,给人一种成就感。 —— 返回主页 ssscorch~

  • 让人有一种“C语言如酒,品之,愈久弥香”的感觉。—— 谰语者

  • 这是门实践性很强的课程,站在岸上学不会游泳,多写多练方是王道 —— Ant-Tech

  • 最大收获是学到了模块化代码、可复用的代码和回调函数等接口设计,以及可重入函数、线程安全等较深入的设计问题。在学习本门课程之前,我从未接触过这些个设计方法,初次学习感觉很吃力,但是坚持下来后,还是觉得很有成就感。 —— Hol_2016

  • 以前总以为软件工程真的是门政治课,现在发现,确实是门政治课,只是学的人不懂其精髓罢了。—— zmlove1911

  • 每次课都是一种新的体验,每次都会感慨,原来我上次的代码还可以这样改,改成这样比以前更好用 —— zmlove1911

  • 学习软件工程最大的收获就是学会了模块化思想这一点,这对于程序员本身来讲算是一种质的飞跃,从拘泥于一小点的代码编辑跃升至站在整个工程的角度去看问题,这种收获无疑是巨大的。—— philip_wan

  • 我是一名本科非计算机非软件专业的学生,为了提升自己的软件编程技术,我选择了孟宁老师的软件工程(C编码实践篇),伴随着孟宁老师饶有兴致、通俗易懂地讲解,我学到了很多有用的知识。孟老师从一个简单的C语言菜单小程序,从最开始的搭建环境讲起,从零入门,一步步的深入,将知识点讲解的很透彻。—— lyr885

  • 可以说这是学习过的最充实一门课 —— Z160414

  • 对于我这种初踏入码农的学生来说,是受益匪浅的,孟从浅入深的线上教学不仅丰富了教学内容,也我们是一个很好的学习过程,在这里感谢孟老师的线上的精心准备,以及精彩的讲解,谢谢!—— Z160414

  • 最大的收获:对程序的设计更加感兴趣。—— 苏苏不酥~

  • 软件工程(C编码实践篇)是由中科大孟宁老师在网易云课堂上发布的一门关于学习软件工程开发思想的实践性课程,整门课程循序渐进的从一个helloworld小程序做到一个线程安全并且可重用的menu菜单系统。课程主要通过网课加实验楼实验的方式进行,课程讲解内容轻松又不失严谨性,实验简单却又极具代表性。总之,整门课程基于一个menu菜单小程序十分详细的讲解了一个程序应该如何健壮的成长。——孟繁琛

  • 这是实践性质的课程,你在听完课程后,不是单单以为自己懂了,浅尝即止,而是去实践操作,真正的是把知识学到手。——kaeleet

  • 为之则难者亦易矣,一步一个脚印,能慢慢跟着学下来,感觉很开心。——白露灼灼 

  • 我入门了。 ——菜鸟小胡

  • 本课程主张实践,有些事情没有亲身经历过,永远不知道书上总结的一些思想方法是多么的实用。所以为这门实践课点个赞 —— 夏天

  • 不敢妄言有什么境界的提高,像是习武之人修了一门很厉害的内功心法一样,像张无忌的九阳真经?不过话说回来,学完这门课,感觉自己的思维倒是发生了挺大的变化,无论是对自己代码的风格上的改变,还是自己在看待事物、分解问题的思想。说真的,这门课学起来还是蛮痛苦的,全都是概念,而自己对这些概念又没有概念。像是打游戏的时候,被人带到了很高的级别,突然没人带,然后自己手足无措,甚至打不过比自己level低的小怪兽?——chen57

  • 学完孟宁老师的这个课程,蛮多收获。从最小的一个例子开始,循序善诱,逐渐的通过一些实际的小例子把软件工程的思想糅合进去(这里我是佩服的,理论性的课程总是难以讲好),一点一点的把各种用到的概念传授给我们,不突兀,也不枯燥。作业做到最后,其实就是完成了一个工程。——chen57

  •  以前,总觉得软件工程对编程帮助不大,只是些理论知识。然而,现在,通过课程的学习,将这些理论知识真正运用到程序上,对于软件开发有了更直观的理解,连最基本的代码规范在开发中也显得非常重要,一个环节一个环节的设计开发都要做到十分细致,力求完美,毕竟,许多个90%相乘,最后也会不合格,只有力求达到100%,最后的软件质量才能更高,有更强的实用性。—— 项一庭 

  • 如老师所教的,夫事未有不生于微而成于著, 圣人之虑远故能谨其微而治之 ,众人之识近故必待其著而后救之, 治其微则用力寡而功多,救其著则竭力而不能及也。对待软件需要这样,在生活中更需要这样。—— 项一庭 

  • 这门课一方面教会了我一种抽象的思维方式,使我在以后编写程序的时候,会有意识的将程序分为若干个模块,定义接口,另一方面我也会更加注意代码的可维护性。——汪浩

  • 孟老师打破了传统软件工程书本教学的方式,而是理论与实践完美的结合起来,每个实验之间都相互关联,实验内容层层深入,实验难度逐步增加,为我们理解软件工程的思想起到了明显的作用。学习完这几周的课程,我对代码从另外一个角度有了一个全新的认识,真的受益颇多!—— xiaoer_qi

  • 自从点开了孟宁老师给的云课堂的链接,我就仿佛推开了新世界的大门。我的心路历程大概是这个样子的:原来软件是这么编的,原来软件还能这么编,最后回头再看,软件就应该这么编才对嘛!—— 问君何能尔

  • 回想起学习历程,找到了进一步提高能力的方向。最大的收获是:抽象能力的提高和模块化思想的实践。—— ___Lacii___

  • 孟老师生动形象的课程让我受益匪浅。从一个简单的实例,循序渐进地以软件工程的知识武装起来。一开始以为,写出这样的功能其实并不难,不就是if else吗。后来才渐渐明白。软件工程,并不是把功能实现了才是软件。那只是一个开始。包括之后的模块化设计、可重用模块化设计,以及可重入和线程安全的设计等等,管窥全豹,可知设计一个合格的软件系统,需要考虑后续的许多内容。——面汤

  • 上完老师的课,学到了很多东西。自己大学里学的软件工程真的就是在背政治了。给老师赞一个!——匿名

  • 我们学校开的软件工程没有实践,仅仅是为了应付考试而背了一些东西而已,在老师的课上真的学到好多东西。——nenyagg

  • 这是我看到的第一个镜头动作感如此之强的公开课视频,镜头会在演示代码时飘移,特写,演示与讲解的镜头切换流畅,个人非常喜欢老师的视频风格。——匿名

  • 学习本课程的最重要的收获是模块化的思想。因为模块化思想伴随着整个项目的开发过程,而且在开发过程中要不断的重构项目,划分成不同的模块。模块划分的好坏会决定了整个项目的开发顺序,甚至影响到开发的进度。——gongfna

  • 果然深入浅出 —— 匿名

  • 从一开始的为完成老师布置的作业而学变为出于兴趣上的主动学习,孟老师教课灵活幽默,举一反三, 清晰明了,由浅入深循序渐进,不但让我从理论上掌握软件工程,还有从不同的实例和生活出发,让理论和实践得到了很好的结合。半个个学期下来,学到了很多东西的,有很多地方是值得肯定的 。孟老师的几句话让我印象最深:“要想成为码农中的高富帅,必须要用软件工程的思想、方法、工具、规范全副武装,其中至关重要的是武装头脑!”、“好程序员和差程序员的区别在于理解能力。差劲的程序员不理解自己做的事情,优秀的程序员则相反。信不信由你,道理就是这么简单。”、“写代码要小步快跑不断迭代,罗马不是一天建成的”。——cj19950317

  • 孟宁(@孟宁V5)老师的软件工程这个课程,主要通过7次小实验,完美的向我们展现了软件工程所要注意的各个方面,深入浅出,非常精彩。——znss2015 

  • 在对软件工程(C编码实践篇)的学习之后,通过代码的编写,我深刻的了解到了一段庞大的代码是怎样生成的。在学习初期,我们只要求编写一些简单的短代码,而随着学习的深入,我们将各个短代码整合起来,形成了一段较为庞大的代码。这不正是软件工程的精髓吗?通过课程的学习,不仅了解了编码编译过程,更可贵的是加深了对于软件工程的理解。——张博雅

  • 软件工程(c编码实践篇)是一个在代码层面学习软件工程思想的好机会。——刘渊458

  • 学习不是一蹴而就的,他是一个循序渐进的过程,这过程有煎熬,也有喜悦,编程是需要多练的,只有熟练,我们才能对于我们遇到的编程问题上手起来得心应手,真的很感谢这个平台,感谢孟宁老师给我们讲解我们所不知道的领域。——孙猛sm

  • 这门课程是从基础开始一步步叠加,慢慢深入的。实验先从最熟悉的hello word写起,当然,这个实验主要是让我们先了解实验环境,了解代码规范的一些基础内容,为后面的学习打基础。接着一步一步做实验,不知不觉将命令行菜单的一个小程序慢慢地变成了一个命令行的小系统,在这个过程中,我不仅仅规范了自己的代码书写,还学到了linux命令,markdown的书写,4空格缩进,变量名和函数名各种风格,{和}独占一行,且成对对齐,如何简化代码,如何保持设计与实现一致,如何设计规范的接口,如何让模块通用,如何提供皆空的同时隐藏信息,如何用makefile编译工程文件等等。这整个过程就在改变着我们原有的程序设计思维,让我们认识到软件是高于程序的存在。真是让我受益匪浅。——296720332

  • 几次实验做下来,感觉自己的知识水平上升了一个层次,编码技能也提高了,也了解到了代码背后的设计思想,绝对是受益匪浅啊。——摩羯zuo

  • 感觉通过这2个月的学习,掌握了很多以前不知道的知识,比如linux、git版本库、模块化设计等等,也学会了坚韧不拔地完成任务。孟宁老师睿智的思想和风趣独到的见解也给我留下了深刻的印象,还想继续学习孟宁老师的linux内核分析。——古剑长刀

  • 2个月的学习,网易云课堂孟宁老师的c代码实践篇让我对程序设计有了更深一步的认识,不只是像以前一样停留在如何写代码上,并且对与软件开发设计种种都有了一定的认识和理解。比如代码规范、模块化、代码可重用性、线程安全等等。孟宁老师的几句话给我留下了尤为深刻的印象:模块化、拿来主义、不要为了通用而通用、抽象能力是程序员的核武器。感觉老师的很多话对软件开发真是一针见血。——古剑长刀

  • 历经11周,软件工程(c编码实践篇)这门课程终于圆满结束了....这整个过程就在改变着我们原有的程序设计思维,让我们认识到软件是高于程序的存在,真的受益匪浅!!—— 。ykt1442456185134 http://blog.sina.com.cn/s/blog_13ae343b60102w49c.html

  • 为期七周的软件工程(c编码实践篇)》的课程很快就要结束了,在这短短的七周里跟这孟宁老师从最简单的hello world开始写,到最后可以把一个完整产品写出来,收获颇丰。孟宁老师细心的由浅入深的介绍了关于在c编码是需要注意的一些细节,不仅教我们怎样成为一名好的软件工程师,同时教我们怎么做人。配合着科大的高级软件工程的课程学习,不仅学习到软件工程的理论,同时也可以自己动手去做。这样的方式才是学习的最佳方式。——阮鏡毓水生火热的金木土

  • 实践才是检验真理的最高标准,半学期的实践,有过为一个实验急得抓耳挠腮,也有过对于bug调试不出来而带来的挫败感,并不能说这半学期已经彻底改变了像我这样的编程渣渣,但是起码也对以后的学习,和软件工程的理解有所启发。半学期的6次实验围绕一个命令行菜单程序的设计,以及不断优化,代码不完美,甚至有不少纰漏之处,但都是自己一行行敲出来,认真调试的努力的成果——Darlynn

  • 以前接触的软件工程课程一般都是停留在理论和需求分析的层面,基本就是概念和画图,而这门课把软件工程的思想融入到真正的c代码当中,更加实用,学到的东西也更多。对初学者而言,实验的部分值得一试。——daisyle

  • 软件工程(c编码实践篇)这门课程,视频教学(理论)和实验(实践)相结合,收获颇多, 最大的收获并不是在写代码的能力上有了多么大的提高,而是知道了如何一步一步写出高质量的代码,而不是以前所追求的能运行结果正确的代码,我想这才是真正重要的。——浩子123

  • 通过学习孟宁老师的软件工程(C编码实践篇)把我从一个什么都不懂代码小白和对写代码有一些恐惧心理的人,变成了一个热爱自己写的代码(虽然目前很烂,很差),把写代码看成是一件很开心的事情,从心理感觉原来代码可以这么神奇,自己原来也可以高大上(YY中.......)。非常希望没有接触过代码层面又希望转行做一个高大上的程序猿的同学们,好好学习孟老师的这门课程,会对你有很大的帮助。——陈强

  • 我学会了将它们融会贯通,原来很多东西都是相辅相成的。正如一句程序猿江湖界的调侃一样,咱程序猿的修炼,都是外修语言,内修算法,内外兼修,天下无敌!语言和数据结构、算法,缺一不可。总之,孟宁老师开展的这门课,在我们走向神猿的道路上起到了承上启下的作用。——小明滚出去

  • 学习软件工程是一段非常享受的时光,孟宁老师讲课十分风趣,又通俗易懂;最重要的就是学习软件开发的思想,这样可以让我们在以后的工作中少走弯路,更给了我们一种思考问题的方法。——许祎

  • 受益匪浅,收获很大,在线学习敲Linux代码,然后用git命令等等,都是之前鲜有的。内容上,学习了callback函数,可重用子系统,孟老师用很多形象的比喻(其中就有一家人早上起来抢厕所的例子)。总之,孟老师的课上着不乏味,且能学到知识。——zhangweiustc

  • 孟宁讲课幽默风趣生动形象,让我受益匪浅。从一个简单的实例,循序渐进地以软件工程的知识武装起来。这里推荐孟宁老师的线上课程,让了解软件工程并不断深入。——jishuang040

  • 想成为一位优秀的人,必须付出比别人多得多的努力。在这里感谢孟宁老师给我们带来这么优秀的课程,很有程序员和老师范。——kui1992

  • 软件工程C编码实践篇中孟老师亲自录的教学视频看起来清晰易懂,对知识的讲解很生动,让复杂晦涩的代码知识变得通俗易懂。我会在以后的学习中学习孟宁老师在网易云课堂上开设的其他相关课程。——周末m

  • 软件工程(C编码实践篇)是一个非常不错的学习软件工程思想方法的实践性课程,通过一个小小的C语言项目的不断演化,体现了许多工程化的思想和方法,从而让我们更加深刻的理解软件工程理论的内涵。通过跟随模仿孟宁老师的代码实现,从无设计代码,模块化设计的 代码,到可复用的代码和回调函数等接口设计,提高了我们工程化代码的编写能力,让我们能够严格遵守代码风格规范来编写代码。总之,这门线上课程重视实践,可以使我们对软件工程有一个直观感性的认识。个人感觉学了这门课之后受益匪浅。必须点赞!!!——Henry93

  • 在学习软件工程(C编码实践篇)的过程当中,我首先感到的是欢乐,孟宁老师用他特有的幽默文笔和充满魔性的呵呵一笑让我在学习的过程中从没感到过痛苦(模仿孟宁老师的呵呵一笑)。其次是学习完整个课程让我加深了对程序员如何写代码的理解,提高了我作为一名程序员的自我修养。....这些是我们在学习其他课程当中所学不到的东西,这不是一项技能而是一种修养,作为一名合格程序员所应当具备的素养。——水果武士G卡酷瓦拉一

  • 孟老师带我们从一个简简单单的menu小菜单程序(千里之行始于足下)开始冒险,然后从menu菜单程序内部实现模块化,业务逻辑层与数据存储层的分离。然后又带我们继续设计链表接口,让链表成为提供程序结构的接口,用callback机制让用户自定义程序做具体的事,最后把把menu程序设计为引擎,以后用户需要使用,开动引擎即可实现程序的运转,让用户更加专注业务功能上。该课程一步一步的深入,但程序却越来越通用,为这课程点赞,谢谢孟老师,谢谢网易MOOC.——czhacker

  • 痛并快乐着——audir880

  • 本课程通过六次实验,打破了传统软件工程书本教学的方式,而且实验之间存在相互关联,实验内容层层深入,实验难度逐步增加。为学生理解软件工程思想起到了明显作用。——Again520 

  • 孟宁讲课幽默风趣,用具体项目等例子来总结、教授出高软的知识点。这里强烈推荐孟宁老师的线上课程,让你从C程序菜鸟华丽蜕变——iidol

  • 软件工程一直是计算机专业的必修课之一,但是,其理论化过强的特点,让很多学校的学生们把这科学成“文科”。对软件工程没有什么认识,也无法做出高水平的作品。 中国科大的孟宁老师久负盛名,这是他的MOOC软工课程的第一系列。一上来先不讲枯燥乏味的理论,先从简单的C语言开始,给予学生感性认识——什么好的软件?如何制作好的软件?好的软件代码“长”什么样? 通过这个课程,客观上更熟悉了Linux和C语言,确实地对软工有了一点感觉,非常期待接下来的课程。——lyzzzz

  • 非常感谢中国科学技术大学 孟宁老师,您幽默简洁讲解方式以及对知识点独创性地命名 让我对于某些思想记忆犹新。——lucky3626

  • 学了这门课程没有遗憾,绝对是值得学习并且能学到知识的好课程。——Jack King

  • 非常感谢孟老师精心准备的课程。大学四年里,上过几十门课,大部分老师都是照着课本、PPT将知识灌输给学生。但是从课程的安排却可以看出来孟老师是精心准备过的。不仅仅传授理论知识,还用实验课程来同步教学。通过课程的学习,自身的进步也明显可以感受到。——王浩hao


本课程被中国科学技术大学软件学院《高级软件工程》课程选用;

证书要求

合格证书: 综合评定成绩 >= 60分

预备知识

熟悉基本的C语言编程,理解基本的数据结构(比如链表)。

授课大纲

第一周

  • 课程简介

    • 识人与识别代码工程质量的类比

  • 课程实验环境准备

    • 工欲善其事必先利其器

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

第二周

  • 代码风格规范

    • 课程实验项目要求

    • 简约而不简单

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

第三周

  • 基本的模块化设计

    • Separation of Concerns

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

第四周

  • 可重用模块的接口设计

    • 天王盖地虎

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

第五周

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

    • 卧底

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

第六周

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

    • 一家人早上抢厕所

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

第七周

  • 子系统的可重用设计

    • 够用就好

    • 实验七:将menu设计为可重用的子系统

第八周

  • 代码背后的设计思想

    • 万变不离其宗


软件工程(C编码实践篇)考试

参考资料


《软件工程 - 理论与实践(第四版)》 Software Engineering: Theory and Practice (Fourth Edition),Shari Lawrence Pfleeger,Joanne M. Atlee,杨卫东译,人民邮电出版社

《人月神话》 Frederick Brooks

《人件》 Tom DeMarco

《第五项修炼》 Peter M. Senge

《黑客与画家》 Paul Graham

《构建之法——现代软件工程》邹欣

常见问题

版权声明:本课程独家授权网易云课堂发布运营,其他商业机构使用本课程需要获得授权!

所属微专业

所属系列课程

分享