徐礼超  原创作品转载请注明出处: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

实验代码:http://git.shiyanlou.com/chaoge282/shiyanlou_cs122/src/master/lab2http://git.shiyanlou.com/chaoge282/shiyanlou_cs122/src/master/lab2

三、实验三:内部模块化的命令行程序内部模块化的命令行程序

将程序内部进行模块化,设置接口,使程序更加逻辑清楚

  1. KISS(keep it simple and stupid)一个函数或者方法只做一件事
  2. Using design to frame the code 设计与实现保持一致
  3. Including pseuducode
  4. 不要和没陌生人说话
  5. 合理运用Control Structure和Data Structure简化代码
  6. 一定要有错误处理 goto 语句的用法 用数据结构简化代码

实验报告:https://www.shiyanlou.com/courses/reports/686392

实验代码:http://git.shiyanlou.com/chaoge282/shiyanlou_cs122/src/master/lab3

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

将数据结构抽出来独立成一个通用模块的技巧,linktable模块与具体的数据类型无关,是一个通用的链表模块,我们要用到模块时,再具体定义数据类型。这样就可以在C语言没有泛型的情况下尽最大可能复用数据结构的代码,这是非常厉害的技巧

  1. 用可重用的链表模块来实现命令行菜单小程序,执行某个命令时调用一个特定的函数作为执行动作
  2. 链表模块的接口设计要足够通用,命令行菜单小程序的功能保持不变
  3. 可以将通用的Linktable模块集成到我们的menu程序中
  4. 接口规范

实验报告: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工程文件
  1. make == make all
  2. 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编码实践)学习总结及心得的更多相关文章

  1. Kafka项目实战-用户日志上报实时统计之编码实践

    1.概述 本课程的视频教程地址:<Kafka实战项目之编码实践>  该课程我以用户实时上报日志案例为基础,带着大家去完成各个KPI的编码工作,实现生产模块.消费模块,数据持久化,以及应用调 ...

  2. ElasticSearch实战-编码实践

    1.概述 前面在<ElasticSearch实战-入门>中给大家分享如何搭建这样一个集群,在完成集群的搭建后,今天给大家分享如何实现对应的业务功能模块,下面是今天的分享内容,目录如下所示: ...

  3. Hadoop项目实战-用户行为分析之编码实践

    1.概述 本课程的视频教程地址:<用户行为分析之编码实践> 本课程以用户行为分析案例为基础,带着大家去完成对各个KPI的编码工作,以及应用调度工作,让大家通过本课程掌握Hadoop项目的编 ...

  4. 20145308 《网络对抗》 MAL_免杀原理及实践 学习总结

    20145308 <网络对抗> MAL_免杀原理及实践 学习总结 实践内容 (1)理解免杀技术原理 (2)正确使用msf编码器,veil-evasion,自己利用shellcode编程等免 ...

  5. 后端开发实践系列之三——事件驱动架构(EDA)编码实践

    在本系列的前两篇文章中,笔者分别讲到了后端项目的代码模板和DDD编码实践,在本文中,我将继续以编码实践的方式分享如何落地事件驱动架构. 单纯地讲事件驱动架构(Event Driven Architec ...

  6. 总结一下这几天学习django的心得

    总结一下这几天学习django的心得 http://www.tuicool.com/articles/jMVB3e 时间 2014-01-12 11:40:11  CSDN博客 原文  http:// ...

  7. 20145308 《网络对抗》Web安全基础实践 学习总结

    20145308 <网络对抗> Web安全基础实践 学习总结 实验内容 本实践的目标理解常用网络攻击技术的基本原理.Webgoat实践下相关实验. 基础问题回答 (1)SQL注入攻击原理, ...

  8. 20145308 《网络对抗》 MAL_后门应用与实践 学习总结

    20145308 <网络对抗> MAL_后门应用与实践 学习总结 实践目的 使用nc实现win和Linux间的后门连接 meterpreter的应用 MSF POST的应用 知识点学习总结 ...

  9. 20145308 《网络对抗》 逆向及BOF基础实践 学习总结

    20145308 <网络对抗> 逆向及BOF基础实践 学习总结 实践目的 通过两种方法,实现程序能够运行原本并不会被运行的代码 实践原理 利用foo函数的Bof漏洞,构造一个攻击输入字符串 ...

  10. 七、Kafka 用户日志上报实时统计之编码实践

    一.数据生产实现 1.配置数据生产模块 项目基础配置所包含的内容,如下所示: •项目工程的文件配置 •集群连接信息配置 •开发演示 2.实现 Flume 到 Kafka 模块 实现 Flume 到 K ...

随机推荐

  1. 新浪微博.Net SDK第三版源代码和示例【最后一次更新了】

    时间过得飞快,距离上次SDK更新已经3年有余.随着官方的不断跟新,老版SDK的部分接口已经不能正常使用.因此在QQ群里来吐槽的.来谩骂的朋友也开始多了起来.随着时代的发展,微博已经彻底的被微信甩开,因 ...

  2. SQL Server XML转Table

    前言 在SQL Server中有时候我们需要传人一个Table过去,然后可以在存储过程中批量更新,批量的获取相应数据. 但存储过程的参数是固定,所以这里我们可以变通的传人xml类型的参数,然后在存储过 ...

  3. 透过IL看C#:switch语句(转)

    透过IL看C# switch语句(上) 摘要: switch语句是 C#中常用的跳转语句,可以根据一个参数的不同取值执行不同的代码.本文介绍了当向 switch语句中传入不同类型的参数时,编译器为其生 ...

  4. 使用Monkey进行压力测试

    Android可以使用Monkey向应用发送一连串的随机操作,就好像把手机交给一只猴子让它任意操作一样,以此来检测应用是否健壮,是否容易出错或崩溃.操作的类型包括触屏.移动.按键等. Monkey的语 ...

  5. 【Java每日一题】20161125

    package Nov2016; import java.util.LinkedList; import java.util.List; public class Ques1125 { public ...

  6. mysql对表操作的各种语句

    创建表 create table tb_user( id int(类型)primary key(设置为主键) auto_increment (设置id自增长), 每一个字段用逗号隔开, name va ...

  7. MySQL max_allowed_packet设置及问题

    MySQL根据配置文件会限制server接受的数据包大小. 有时候大的插入和更新会被max_allowed_packet 参数限制掉,导致失败. 查看目前配置 show VARIABLES like ...

  8. [小北De编程手记] : Lesson 02 玩转 xUnit.Net 之 基本UnitTest & 数据驱动

    关于<玩转 xUnit.Net>系列文章,我想跟大家分享的不是简单的运行一下测试用例或是介绍一下标签怎么使用(这样的文章网上很多).上一篇<Lesson 01 玩转 xUnit.Ne ...

  9. ssh默认端口更改后,如何正常使用git?

    由于安全或者其它原因,我们可能会修改默认的SSH服务端口号,默认情况下,已有的git项目在pull或者push的时候会报错. 现在假设原来的项目的remote设置为git@domain.com:Pro ...

  10. Validating HTTP data with Play

    Validations ensure that the data has certain values or meets specific requirements. You can use vali ...