在这近两个月里的时间里,耗费了几乎所有周末的时间来做项目开发。现在项目开发已经完成,我所得到的一些感想在这与大家一同分享。
在项目开发伊始,我们就确定了总体的设计框架。本以为这样事情就完成了大半,以为有了大概的框架,我们往里面添加东西就行了,事实证明确实是我想多了。比如,在GUI交互这一块,要怎么实现GUI之间的通信,要怎么添加网络接口给GUI,客户端要怎么与GUI实现交互,客户端要怎么实现消息的同步发送等。一个整体的框架根本解决不了所有问题,其中的细节问题多到让我们难以想象。当然,最后我们还是解决了这其中的大部分,只是花费的时间超出了我们的预期。由这不得不想到,软件工程学的重要性。假想我们一开始就直接编码,期望在编码的过程中实现我们期望的过程,那么这么多细节要考虑,前前后后要进行的调试的次数可想而知。相反,如果采用软件工程的思想——先仔细设计再实现,来进行项目开发,那么很多问题可以提升到整体的层面来考虑,对于诸多的细节问题在设计阶段就想好恰当的解决方案,不至于在编码过程中顾此失彼,还得反过头来重新设计,使得项目开发时间大大延长。
这次项目开发也看到了自己的很多不足。我是大二转专业到计算机系的,由于正在补修《离散数学》、《数据结构》这两门课,整体的学习情况有点难以兼顾。而且,在真正参与项目开发之后,我才明白离散数学和数据结构这两门课的重要性。这两门课重要在不是它们能够提供多少实用的公式应用在我们的工程中,而是这两门课能够培养我们将现实世界的实体转化成计算机可计算的逻辑实体的能力,同时能够站在计算机科学的角度,为工程的实现提供可靠的解决方案。比如在服务器用户消息转发功能中,采用的数据结构为图。图的键为对方用户的ID,值为对应客户端的socker实例,格式化的消息传入服务器,可通过头部的ID查找对方用户的socket,进而实现消息的转发过程,这样的例子还有很多。这就是计算机科学美的地方,那些数据结构外表看起来复杂、晦涩,但是这几乎是现实世界各种实体、数据最简洁的逻辑表达,它给予了我们在逻辑层面的视角,将问题的来龙去脉看得清清楚楚,现实问题由繁化简,为我们设计解决方案提供了极大的帮助。虽然软件工程这门专业强调的是计算机技术的应用,但是我觉得这种编程的思想,简单来说就是分析问题、解决问题的能力,对于所有计算机行业的从业人员来说都极其可贵,这也是真正的软件工程师与IT民工的区分标识。所以对我来说,这次项目开发结束之后,我不再想去钻研web开发、数据库等等,而是应该好好静下心来,重新回到计算机科学最开始的地方,从离散数学、数据结构重新开始,扎扎实实地打好自己的基础,重新迈入计算机科学的大门。
以上。