3月11日一个历经千辛万苦,经历九九八十一难的小怪兽诞生了,在这样一个欢腾的日子里,小怪兽决定做一个项目来犒劳下自己的诞生。
这个项目就是一个在线的结对编程的平台,因为小怪兽觉得他需要另一半来协同编程。
一、结对编程
首先我们来看一下定义:
“结对编程技术是指两位程序员肩并肩地坐在同一台电脑前合作完成同一个设计、同一个算法、同一段代码或同一组测试。”这个编程的方式,恩,不错一个人写一个人指手画脚么???
事实上,所谓的“指手画脚”并不是添乱,这种方式我们在多次大作业中已经多次使用了。我们在两个人同时写一段代码时,特别容易发现程序出现的小BUG,以及对系统数据结构认识的混淆之处,能够使得代码结构更加清晰,有效,又能够使其可读性大大加强。
结对编程要考虑的问题主要还是来源于两位程序员之间的问题,他们关系是否融洽,性格是否合得来,coding水平是否一样,工作时间能否一致?这些问题都在考虑的范围之内,这些问题解决得好与坏,直接关系到最后结对编程的效率问题。
所以说,结对编程是一把双刃剑,用好了事半功倍,用不好事倍功半。我们的平台需要做的就是尽可能的让用户体验舒适,便捷,双方和谐沟通,创造和谐社会。
二、对现有产品的分析
我们分析了codeinterview协作编程平台,在这个平台上,用户被授予不同的权限。权限分两种:读和写。拥有“读”权限的用户可以实时看到“写”用户对白板的操作结果。
主要有以下几点:
1. 我们发现,系统并不是每时每刻都在对“读”用户的界面进行更新,而是在白板被修改一部分后间歇性地更新,结合代码的特性,我们认为在产品中以行为单位进行更新是一个可用的选择。
2. 系统延迟是一个很重要的问题。Codeinterview有时的延迟会花费大量的时间。这也会使我们面临的难题。
3. 在多个“写”用户同时在对白板进行编辑时,这个协作平台并没有对多个版本进行更新,而是将不同的版本原封不动地发给“读”用户。这样的结果很letus down. 我们认为没有整合代码的功能会给协作编程大打折扣。所以我们将把重点放在整合代码上,具体内容将在随后阐述。
实际上,这个平台让我们感觉到,他是一个结对编程的工具,他能够提供一个人编写一个人阅读的功能,但是他不支持两个人同时编辑,也就是说他不需要解决冲突的问题。
三、需求分析
首先这个平台的想法,应该是为了拉近程序员的距离,使得结对编程的地理限制变得可以忽略,我们的系统需要以下几个方面的需求:
1、 网页模式,提供一个codingarea。支持多人编辑,处理好同步与冲突的问题。
2、 Codingarea的美观性,友好性。
3、 Codingarea的在线编译功能
4、 用户管理模块,好友,邀请等
5、 多人聊天,及语音聊天区域
难点:
服务器推送模式!!!
语音聊天问题!!!
编译器!!!
四、系统架构选择
我们的语言选择很早就定下来,使用java作为最基本的开发语言。
数据库的选择sqlserver和mysql都行 。
我们分析了很多完成网页服务器推送的机制:
这里最主要的就是ajax与rmi+applet这两种机制
Ajax:
据我们现在的了解,就是一个网页轮询的机制,网页定时的向服务器请求一个数据,服务器实际上是被动的给网页刷新,这样的机制也是我们最容易理解的。
百度一下,遍地都是解释,我们就不赘述了。反正这样的结构,服务器太累了。
粗略的ajax方案:采用js的window.setInterval()或者setTimeout()+XMLHttpRequest应该可以实现定时从服务期端取一定的数据!
Rmi+applet:
我们最终决定选择这样一个模式来完成我们的作品,因为这个java包中封装了通信的协议,能够在网页上完成动态的消息推送,利用applet的小程序使得网页中的codingarea更像是一个软件在电脑上跑。
这个我们小组还在学习当中,越看一些文章越发的觉得每个人的理解都不一样了,所以需要下一次会议。
其他的框架结构,例如python、JS、ruby、.net我们就不描述了,网上到处都是
同时还有一种服务器长连接的方案,这个也就不考虑了,服务器受不了的。
我们需要考虑的问题:
1、 究竟如何具体实现,我们需要先使用小程序来验证
2、 服务器的承受能力
五、团队管理
我们已经在trello中注册了我们的小组,使用svn进行代码的管理,据组内人员表示,要常常备份,有svn被用坏的血淋淋的教训,我们小组的目标就是要打倒奥特曼,我们小组的英文名:Tiny—Monster,具体的团队分工还需要开会细分。
六、目前具体任务
目前是学习阶段:
Java网页制作的学习,applet的学习,rmi的学习
下一次会议的时候,每两个人一组分享自己的资料与体会,让全组的小怪兽们了解我们要做什么,实现的具体的思路。
Svn的建立,trello上多多交流,组内聚餐!
开始对方案的可行性进行检验,写一点小程序来验证性能,以及功能。
分工:这个不能写得太具体,本组根据我们做的项目的理念,全部采用结对编程的思想,1个人的任务也会有其他人在旁边观看。
数据库的构造设计 1人
语音聊天 2人实现
Coding area 3-4人设计编写
全组进行思考完善
界面设计 1人
用户管理系统 1人
七、想法
结对编程是否需要两边同时可编辑,还是加锁只允许一个人编辑,这个要求明显有违常理,就像如果我们两个人同时按键盘编程,很明显会混乱,也没有意义。
(当然忽略某些秀恩爱的,喜欢一人敲一个字母组成一句话的)
代码逐个字看是没有意义的,为何不能逐行提交,一行一行的看明显很合理,所以关于我们的冲突机制,我们还在寻求一个更好的解决方案。
所以敬请关注,小怪兽日记(二)。
因为现在小怪兽要睡觉了。。。