软件工程(C编码实践)学习总结及心得
徐礼超 原创作品转载请注明出处:http://www.cnblogs.com/xulichao
《软件工程(C编码实践篇)》MOOC课程http://mooc.study.163.com/course/USTC-1000002006
一、实验一:写一个Hello word小程序
主要是熟悉实验楼环境,初步了解代码规范,熟悉linux基本命令,包括cd、ls、mkdir等命令,vim基本命令,包括vi使用,一般模式、编辑模式、命令模式等模式切换,markdown的书写,包括标题、插入链接、插入图片、两次enter等。
实验报告:https://www.shiyanlou.com/courses/reports/644985
实验代码:http://git.shiyanlou.com/chaoge282/shiyanlou_cs122/src/master/lab1
二、实验二:命令行菜单小程序
实现了命令行的小程序,最主要的学习到很多代码规范,包括:
- 缩进4个空格
- 变量命名采用lowCamel风格
- 类型/类/函数名用Pascal风格
- 类型/类/变量名用名词或名词组合
- 函数名用动词或动宾短语
- 行宽小于100字符
- 括号清楚地表示逻辑优先级
- 所有{和}独占一行,且成对对齐
- 不要把多个语句和多个变量定义放在同一行
- 注释、文件名、路径等用英文ASCII字符,不要用中文和特殊字符
- 不要解释程序如何工作(How),要解释程序做什么(What),为什么这么做(Why),需要特别注意的地方
实验报告:https://www.shiyanlou.com/courses/reports/661548
三、实验三:内部模块化的命令行程序内部模块化的命令行程序
将程序内部进行模块化,设置接口,使程序更加逻辑清楚
- KISS(keep it simple and stupid)一个函数或者方法只做一件事
- Using design to frame the code 设计与实现保持一致
- Including pseuducode
- 不要和没陌生人说话
- 合理运用Control Structure和Data Structure简化代码
- 一定要有错误处理 goto 语句的用法 用数据结构简化代码
实验报告:https://www.shiyanlou.com/courses/reports/686392
实验代码:http://git.shiyanlou.com/chaoge282/shiyanlou_cs122/src/master/lab3
四、实验四:用可重用的链表模块来实现命令行菜单小程序
将数据结构抽出来独立成一个通用模块的技巧,
linktable模块与具体的数据类型无关,是一个通用的链表模块,我们要用到模块时,再具体定义数据类型。这样就可以在C语言没有泛型的情况下尽最大可能复用数据结构的代码,这是非常厉害的技巧
- 用可重用的链表模块来实现命令行菜单小程序,执行某个命令时调用一个特定的函数作为执行动作
- 链表模块的接口设计要足够通用,命令行菜单小程序的功能保持不变
- 可以将通用的Linktable模块集成到我们的menu程序中
- 接口规范
实验报告:https://www.shiyanlou.com/courses/reports/701963
实验代码:http://git.shiyanlou.com/chaoge282/shiyanlou_cs122/src/master/lab4
五、实验五:用callback增强链表模块来实现命令行菜单小程序
学习利用callback函数参数使Linktable的查询接口更加通用。
当我们向用户提供接口的时候,要学会注意接口信息的隐藏,只提供给对方必要的信息,而不能完全暴露自己的信息,以免被别人攻击,修改自己内部信息而造成不可预估的后果。
有关args的使用有点晕晕的,并没有完全理清楚其中的机制,特别是后来在testlinktable.c程序中遇到了点麻烦,由于多了一个参数,但这个参数并没有使用,所以有点怪怪的。
实验报告:https://www.shiyanlou.com/courses/reports/715603
实验代码:http://git.shiyanlou.com/chaoge282/shiyanlou_cs122/src/master/lab5
六、实验六:小测验(略)
七、实验七:将menu设计为可重用的子系统
将menu设计为可以重用的子系统,利用命令行参数argc/argv来处理命令参数,由于menu函数是提供给用户使用的,它只需要向外提供一个执行命令的方法和一个初始化方法。
Makefile,这个我是新学到的,真的很好用,程序更加有套路,编译程序更方便,相信以后会越来越多的用到,。
大概了解了函数getopt的用法,虽然基本实现了复杂命令参数,但是getopt函数里的定义的几个全局变我并不太清楚其功能,在后续的编码中,应该继续完善
- Makefile工程文件
- make == make all
- make clean 支持带参数的复杂命令的方法
实验报告:https://www.shiyanlou.com/courses/reports/748120
实验代码:http://git.shiyanlou.com/chaoge282/shiyanlou_cs122/src/master/lab7
心得体会:
历经11周,软件工程(c编码实践篇)这门课程终于圆满结束了(此处应该有掌声~)
学习完这门课,我对软件设计开发有了一个新的认识,以前总认为软件就是写程序,开发软件项目就是大家一起写程序,然后拼在一起实现最后的功能,但现在,我才知道我对软件有多么肤浅的认识,软件开发远比单单写程序来的高端,来的复杂。下面就从本实验说起。
实验是从最熟悉的hello word写起,当然,这个实验主要是让我们先了解实验环境,了解代码规范的一些基础内容,为后面的学习打基础。接着一步一步做实验,不知不觉将命令行菜单的一个小程序慢慢地变成了一个命令行的小系统,在这个过程中,尽管老师一直强调我们主要考察代码规范,可是我学到的又岂止是代码规范,还有很多能一直受用的知识,linux命令,markdown的书写,4空格缩进,变量名和函数名各种风格,{和}独占一行,且成对对齐,如何简化代码,如何保持设计与实现一致,如何设计规范的接口,如何让模块通用,如何提供皆空的同时隐藏信息,如何用makefile编译工程文件等等。。。。。这对以前只注重功能实现的我来说无疑是一个很好的学习过程和提高过程。
软件=程序+软件工程!!构建之法如是说,我深表赞同,一个好的程序我觉得不仅代码够规范,可读性够强,还要能可再利用,写程序之前应该先好好设计程序,怎么能让这个程序既实现功能,又美观,可读性强,同时以后遇到相似的问题还能继续用,现在回头想想,我们本次的实验解决的就是这个问题,在做实验的过程中老师提的要求就是在规范我们的程序设计,从一开始只是实现命令行输出功能,中间贯穿实验的代码格式和规范,到最后将menu主程序设计成接口,让其能重用,这整个过程就在改变着我们原有的程序设计思维,让我们认识到软件是高于程序的存在,真的受益匪浅!!
软件工程(C编码实践)学习总结及心得的更多相关文章
- Kafka项目实战-用户日志上报实时统计之编码实践
1.概述 本课程的视频教程地址:<Kafka实战项目之编码实践> 该课程我以用户实时上报日志案例为基础,带着大家去完成各个KPI的编码工作,实现生产模块.消费模块,数据持久化,以及应用调 ...
- ElasticSearch实战-编码实践
1.概述 前面在<ElasticSearch实战-入门>中给大家分享如何搭建这样一个集群,在完成集群的搭建后,今天给大家分享如何实现对应的业务功能模块,下面是今天的分享内容,目录如下所示: ...
- Hadoop项目实战-用户行为分析之编码实践
1.概述 本课程的视频教程地址:<用户行为分析之编码实践> 本课程以用户行为分析案例为基础,带着大家去完成对各个KPI的编码工作,以及应用调度工作,让大家通过本课程掌握Hadoop项目的编 ...
- 20145308 《网络对抗》 MAL_免杀原理及实践 学习总结
20145308 <网络对抗> MAL_免杀原理及实践 学习总结 实践内容 (1)理解免杀技术原理 (2)正确使用msf编码器,veil-evasion,自己利用shellcode编程等免 ...
- 后端开发实践系列之三——事件驱动架构(EDA)编码实践
在本系列的前两篇文章中,笔者分别讲到了后端项目的代码模板和DDD编码实践,在本文中,我将继续以编码实践的方式分享如何落地事件驱动架构. 单纯地讲事件驱动架构(Event Driven Architec ...
- 总结一下这几天学习django的心得
总结一下这几天学习django的心得 http://www.tuicool.com/articles/jMVB3e 时间 2014-01-12 11:40:11 CSDN博客 原文 http:// ...
- 20145308 《网络对抗》Web安全基础实践 学习总结
20145308 <网络对抗> Web安全基础实践 学习总结 实验内容 本实践的目标理解常用网络攻击技术的基本原理.Webgoat实践下相关实验. 基础问题回答 (1)SQL注入攻击原理, ...
- 20145308 《网络对抗》 MAL_后门应用与实践 学习总结
20145308 <网络对抗> MAL_后门应用与实践 学习总结 实践目的 使用nc实现win和Linux间的后门连接 meterpreter的应用 MSF POST的应用 知识点学习总结 ...
- 20145308 《网络对抗》 逆向及BOF基础实践 学习总结
20145308 <网络对抗> 逆向及BOF基础实践 学习总结 实践目的 通过两种方法,实现程序能够运行原本并不会被运行的代码 实践原理 利用foo函数的Bof漏洞,构造一个攻击输入字符串 ...
- 七、Kafka 用户日志上报实时统计之编码实践
一.数据生产实现 1.配置数据生产模块 项目基础配置所包含的内容,如下所示: •项目工程的文件配置 •集群连接信息配置 •开发演示 2.实现 Flume 到 Kafka 模块 实现 Flume 到 K ...
随机推荐
- 【UWP】不通过异常判断文件是否存在
从WP升到WinRT(Win8/WP8.1/UWP)后所有的文件操作都变成StorageFile和StorageFolder的方式,但是微软并没有提供判断文件是否存在的方法通常的做法我们可以通过下面方 ...
- 为什么说Babel将推动JavaScript的发展
Babel是一个转换编译器,它能将ES6转换成可以在浏览器中运行的代码.Babel由来自澳大利亚的开发者Sebastian McKenzie创建.他的目标是使Babel可以处理ES6的所有新语法,并为 ...
- HP+MYSQL网站SQL Injection攻防
WebjxCom提示:程序员们写代码的时候讲究TDD(测试驱动开发):在实现一个功能前,会先写一个测试用例,然后再编写代码使之运行通过.其实当黑客SQL Injection时,同样是一个TDD的过程: ...
- LocalDB:微软的新生代轻量级数据库
什么是LocalDB 随着SQL Server 2012的发布,LocalDB跃入我们的视线,它可以被看做是SQL Server Express的轻量级版本.LocalDB专门为开发人员创建,它非常易 ...
- Java基础复习笔记系列 三
前几节都是基础中的基础,从第三讲的笔记开始,每次笔记针对Java的一个知识块儿. Java异常处理 1.什么是异常? 异常是指运行期出的错误.比如说:除以一个0:数组越界:读取的文件不存在. 异常处 ...
- virtualenvwrapper安装使用
安装 linux和mac下安装 pip install virutalenv virtualenvwrapper windows下安装 pip install virtualenvwrapper-wi ...
- java三种实现线程的方法比较
1.继承Thread 2.实现Runnable 1和2的比较,1可以创建不同的任务,每个任务互不干扰,对于2,相当于只执行一个任务,多个任务之间互相影响,比如售票系统,每售出一张票,票数都要减1,这个 ...
- Spring MVC处理异常的4种方式
http://blog.csdn.net/ufo2910628/article/details/40399539 http://my.oschina.net/CandyDesire/blog/3333 ...
- jQuery Wookmark Load 瀑布流布局实例演示
瀑布流布局非常适合大量图片的展示,一改过去裁剪图片尺寸统一的排版,每张图片都能完全展示,并错落有致,让人眼前一亮. 版本: jQuery v1.4.3+ jQuery Wookmark Load v1 ...
- 25佳漂亮的结婚邀请 & 婚礼请柬网站设计
互联网给我们的生活带来了巨大的变化,越来越多的事情可以通过网络完成.下面向大家分享一组结婚邀请网站以及婚礼请柬网站的设计案例,如果你也正想制作这样的网站,相信这些优秀案例能够带给你很大的帮助. 您可能 ...