在经历了2个星期对Linux C的学习之后,上个星期我着手开始进行项目,项目的内容是一个功能比较简单的网络聊天软件。这次的项目总体来说比上次的学生管理系统难得多,但是反而花费的时间比上次要少一些,说明自己相比初学入门的时候更加熟练了,特别是学习期间总结出来的几个方法让我受益匪浅。在此我简单的和大家聊聊我进行项目的过程,分享一下心得和感悟。
首先是对需求进行分析。拿到项目文档的那一天上午我们进行了一场考试,所以我到下午开始才开始进行准备。首先我花了大概一天的时间进行基本框架的构思。受到教网络编程的李彦昌老师的启发,我这次进行项目设计时在笔记本上用画图的方式来辅助自己进行构思。这个项目分为服务器端和客户端两个部分,所以我将其拆成了两个大块,但同时这两个模块相互之间联系紧密,必须同时思考两者之间的数据往来状况。所以我先从两边各自的功能需求入手,再决定如何实现功能。
但是当我框架搭的差不多了,实际开始着手进行编码时我发现了一个问题,由于自己的经验不足,我无法判断自己的解决方案的可行性如何,必须通过之后的实际验证才能确定方案的可行性。所以实际上真正将方案敲定下来是周四的事情了。期间我做了大量的试验和调试,在确认最终的效果能达到我想要的了之后,我决定使用服务器端多线程——select结构,客户端使用单进程select结构来实现多用户登录功能。相比其他方案,select的好处是可以并行响应,形成一个I/O多路复用的架构,满足我多用户即时通讯的要求。但是由于我对select函数并不熟悉,上课时老师也没有着重讲,所以我又花了额外的时间在网上翻阅资料和研究别人写的代码示例,并最终在自己的项目上实现了,算是一个小小的收获。
就结果而言,最终我还是变成了像第一次做项目那样,一边构思一边写代码的状态。不过与上次不同,这次编码过程中我大量使用了伪代码,在编码写函数的过程中,先大致用伪代码搭建参数进出过程的逻辑,再用C语言替换,拜此所赐我的思路条理也更加清晰,出现bug的概率也下降了不少。我决定继续优化自己现在自己的编码风格,将好的习惯继续保持下去。
由于时间比较紧张,外加自己还不够熟练,直到周六我才完成大部分的基础功能,相比其他人做的项目,我将聊天系统整合在一个模块里,通过“@用户”的方式实现不切换窗口即可完成对目标的私聊。这是我认为自己做得比较有创意的地方。然后就是在客户端退出的时候还有点小bug,有待修复。
最后我再聊点自己的想法吧,首先是对之前同学提出的熬夜问题,我个人是不提倡熬夜的,因为在深夜进行脑力消耗大的工作一是对身体不好,二是工作效率也不高,三是还会影响第二天的状态。其次是关于动力的问题,对我来说,最大的动力莫过于有想要完成的事。我是自己心中有定好的目标才能坚持学习下去,我觉得其他的同学也可以花点时间思考一下自己想要完成的目标,强烈的愿望才是最好的动力。