这学期的c++课程结束了,也做了四个辣鸡系统,一个学生成绩管理系统,一个ATM机管路系统,一个通讯录系统,一个图书管理系统。

通过这几个系统自己也慢慢摸索出来一些写系统的方法,技巧和心得,通过这篇播客记录一下。

首先,我们必须要明确的一件事就是我们要做什么事,要完成哪些功能,然后列出需要开发系统的各个功能模块,在考虑我该如何实现这些功能,这些功能需要用到哪些数据。

把所有功能都列出来以后,分配每个功能要完成的工作,如何把这些功能都联系起来,建立起一个大致的框架。还记得第一次写系统,做的是学生成绩管理系统,自己是用结构体做的,自己感觉这些功能用结构体完全就够了。

现在想想当时实现的就一个功能,数据也是只要一个结构体就行。结构体是值类型,类是引用类型。而且结构体成员不能从继承自其他类或结构体,也不能被其他类或结构体继承,然而类可以。结构体成员不能在声明时赋值初始值,类可以。不能为结构体提供无参构造函数(类中如果提供了自定义构造函数,就不会再提供默认无参构造函数。)结构体在自定义构造函数中必须为所有成员赋值。结构使用栈存储,而类使用堆存储,栈的空间相对较小.但是存储在栈中的数据访问效率相对较高.堆的空间相对较大.但是存储在堆中的数据的访问效率相对较低。最最最重要的一点就是结构体是公有的,而类默认私有的,类内的数据只能被类内成员访问,这样就保证了程序的私密性和安全性。

在做系统前,心中一定要有一个明确的框架,每周的作业我都是在周五下午开始写,因为周五的课FLS会讲大半节课关于本周作业要怎么做,具体实现哪些功能,听完这些心中也就有谱了,做起来也不会像一个无头苍蝇一样,但是以后这些事情就要自己去做,自己去贴近生活实际去考虑。不能想到什么写什么,写出来一些没有的功能,浪费内存和时间。

我现在学到的c++只能算是最最最基本入门的知识,c++很繁琐,做系统肯定会遇到很多自己没接触的方面,需求是无限的,我不能去逃避他,遇到不会的地方就不去解决或者换一种方式,书籍是人类进步的阶梯,对系统开发人员尤其如此。书籍是学习知识的最有效途径,不要过多地指望在做系统时能遇到可以帮你的人,并不厌其烦地教你。对于看书,个人经验是:千万别买国内那帮人出的书!我买的那些书,100%全部后悔了,无一本例外。更气愤的是,这些书在二手市场的地摊上都很难卖掉。“拥有书籍并不表示拥有知识;拥有知识并不表示拥有技能;拥有技能并不表示拥有文化;拥有文化并不表示拥有智慧。”只有将书本变成的自己智慧,才算是真正拥有了它。只有不断学习才能完善自己,做系统本就是一个无止境的事情,想把所有的知识都学会根本就是一件不现实的事情,就像以后工作的话,在学校学到的东西根本不够用,客户有什么需求我们不能不去满足,只能去学习,做系统也是遇到无法解决的地方就去学习,这样不仅解决了问题还能学到知识,两全其美,何乐而不为。

然后就是养成总结与反思的习惯,并有意识地记录日常工作成果,形成自己的个人代码风格、解决某类问题的通用系统体系结构、甚至进化为框架。有、无经验的一个显著区别是:无经验者完成任何任务时都从头开始,而有经验者往往通过重组自己的可复用模块、类库来解决问题。这并不是说,所有可复用的东西都必须自己实现,别人成熟的通过测试的成果也可以收集、整理、集成到自己的知识库中。

在测试方面的话,一定要用真实数据,因为我们做系统不能仅仅当做一个作业,要把他当做要给别人去用的,只有真实数据才能测试出来一些隐藏的bug,发现程序的不足从而改正。测试的工作量永远不会比写代码小,我写代码和测试都是三七开,代码好实现,重点就是找bug。在测试的过程中不要把程序都写完了再去测试,这样看似工作量减少了,一旦出错根本找不到哪里错了,每次写完一个类就去测试一下,写完一个功能就去测试一下,而且要多种情况测试。一定要养成分段测试的好习惯。

提高软件知识和技术只是问题的表面,本质是要提高自己认识问题、分析问题、解决问题的思想高度。软件专业知识的很多方法和原理,可以很容易地延伸、应用到生活的其它方面。知识是无限的,掌握方法与思维才是最重要的。