chen57

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

0
阅读(3240)

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


对软件工程的理解及学习软件工程(C编码实践篇)的心得:


        2个月的课程结束了,大家什么感受?大概以后也能自信地鼻孔朝天,不可一世?大概凡是软件开发用得到的地方,必用软件工程的理论解释一番来显示自己的博学?哈哈,开玩笑的,不过这也侧面说明了软件工程之于软件开发人员的作用。

        本专业并不是计算机,也不是软件工程。自动化的我,阴差阳错的来到了软件工程专业,似乎也没什么坏处,软件工程这门课听起来很是高大上。在我眼里,凡是有课涉及工程二字,那必是高深莫测,也必是从全局来看问题的,应该说是战略上的统观。果然,听课的时候,切切实实的听到了务虚这个词语,比喻的也实在是贴切。理论学得好,不如实践来得快,纯粹的务虚总是不会有什么大的长进。不敢妄言有什么境界的提高,像是习武之人修了一门很厉害的内功心法一样,像张无忌的九阳真经?不过话说回来,学完这门课,感觉自己的思维倒是发生了挺大的变化,无论是对自己代码的风格上的改变,还是自己在看待事物、分解问题的思想。说真的,这门课学起来还是蛮痛苦的,全都是概念,而自己对这些概念又没有概念。像是打游戏的时候,被人带到了很高的级别,突然没人带,然后自己手足无措,甚至打不过比自己level低的小怪兽?


        软件工程的思想,大概是把软当作一种工程来做,像正规的工程项目一样,是正规军的做法。而不是说自己在家里拿个瓦刀就来修墙,这是小作坊,是没有全局的策略的。我们考虑的是代码的可读性,代码的可重用性,代码的内聚耦合性,代码的接口是否友好,代码的可维护性等等。这些东西其实是一个软件开发人员的基本功的,只不过很少被人如此看重,所谓的软件行业门槛低,随便学个语言就能开发代码了。

        所以呢,软件工程,就是把我们自己武装成正规军。


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


        总结下,就是说,我们用软件工程的思想,重构了之前裸奔的代码,哈哈。



实验报告lists:

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

https://www.shiyanlou.com/courses/reports/1243989

本次实验的主要目的是让我们对实验环境linux有一个简单的认识,比如vim的使用,具体的用法还是需要自己多多的学习和体会。再比如git的工具等。


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

https://www.shiyanlou.com/courses/reports/1244521

本次实验学习的内容主要集中在代码风格上:如缩进、命名、注释等。

代码风格的原则:简明、易读、无二义性。


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

https://www.shiyanlou.com/courses/reports/1245606

本次实验,将主要的业务操作和数据、操作分开,一定程度地体现了模块化设计的思想,只不过,模块间拆分的程度不是很高,算不上完美的模块化设计,以后的coding中还要仔细的体会,多应用这样的思想,将分层做到机制。


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

https://www.shiyanlou.com/courses/reports/1246341

本次实验的目的在于模块化设计的核心思想,可以从很多方面看到软件工程思想的应用,如前面提到过的不和陌生人讲话啊,KISS原则,简洁的代码风格等等。 实验只是教会我们方法,在实际的代码编写中,要有意识的应用带这些原则,才能让自己的开发更高效,也才能让自己的团队走得更远。


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

https://www.shiyanlou.com/courses/reports/1246973

本次实验沿用了之前的模块化思想和基本的代码内容。通过这次学习,加深了对链表的认识。此外,通过这次学习认识到callback函数的作用,不过这不是一个很简单的东西,要多加应用才能用的好。回调函数是一个通过指针调用的函数,即在被调用者执行的过程中,又去执行调用者代码段的过程逻辑,在本次试验中,初步了解了这种函数的优点,程序可以在运行时,通过登记不同的回调函数,来决定、改变中间函数的行为。这就比简单的函数调用要灵活太多了。


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

本次实验了解多线程的概念,理解了函数的可重入性(reentrant)与线程安全的关系。


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

https://www.shiyanlou.com/courses/reports/1248173

通过这次的实验,实现了对Menu设计为一个可重用的子系统。并且使得menu可以执行带参数的指令。并且增加了自己对makefile这种自动化编译工具的认识,真的是太神奇了,可以减少自己很多的工作量,以后做的工作大概要向这一方面靠齐了,加油。


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

        学习完软件工程,最大的收获是很近距离的接触到了高大上的思想,从思想层面上武装了自己的代码。在自己的编码过程中应用这些思想,有时候会有强迫症的感觉,如哪一行空格的数目不对,运算符与操作数之间没有空格,接口似乎设计的不够好,每次推翻重来还是觉得不好,要崩溃了。

        此外,自己看问题的眼光发生了变化,以前自己总是天天把自己当做一个程序员,做的真的是纯粹写代码的工作,现在则是也把自己当作一个真正的用户,从用户的角度去理解自己的代码,去构造自己代码的框架。很简单,以前的自己是功能至上,只要把功能做出来了,管你呢。现在编码的时候,会考虑到会不会自己拿到这个软件的时候也不知道怎么用?会做出很多习惯用户使用的改进,如提示信息要全,但不能太过。要做到易于使用。而且现在也会考虑到以后自己来看这个代码会不会看得懂,学会了加上注释;考虑到自己以后会不会把这个代码整体拿来使用,会利用重用性;考虑到以后是团队的工作,我会把这个代码的接口做的更好,利于同伴使用,也更好维护……

        总之,自己思考的方式已经发生了变化。我已经不是昨天的我!


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

        这个问题确实很难回答,非要说遗憾吗,那么我可以说是由于自己的漫不经心,对理论部分的知识并没有十分的在意吗?确实太多概念性的东西,自己也不愿意去拿起书慢慢的看。而且以前对这个知识领域可以说是前所未闻,项目自然的也没做过,有很多特别需要理解的抽象的概念,没有自己特别的感悟,难以理解,就是像听天书一样,于自己也没啥大的用处。

        学习之前的期待特别大,希望学完这门课,自己能窥探到软件工程的一点点道义,然而学完之后,发现大多数时候自己还是云里雾里,这大概是我最大的遗憾吧。


以上。