> 文档中心 > 一次自主产品研发的经历

一次自主产品研发的经历

    历经几个月,我的中国象棋网络对弈app终于完工了。看着完成的作品,我内心有一种成就感,也有一些遗憾。
    从事软件开发多年,主要都是为公司的项目做开发,很少自己策划一个产品来开发。十多年前,曾经开发过一个手机游戏<>,还卖给了一个游戏运营商,在移动的百宝箱上架。这一次,刚好有空闲时间,我决定开发一个网络版的网络游戏,体验一下产品的开发过程,运用一下自己最近使用的技术。思忖良久,最终我决定开发android手机版的中国象棋网络对弈软件。
    所谓麻雀虽小,五脏俱全。这个产品涉及的技术还比较多,开发过程也遇到些问题。在此,和大家一起分享一下本人的一些感悟,希望对开发者有所启发和帮助。

                                                      希望总是美好的                         
    进度比我预期的久,功能也被简化了许多。但是,终于完成了。
    进度慢最主要的原因,还是所使用的开发技术、工具不熟悉,有些甚至是现学现用。
    我做项目经理时,有好多项目都是因为使用了新技术,造成了延期。使用新技术有许多不确定性,由于不熟悉,需要经常查资料,会造成效率低;新技术可能会存在一些缺陷,发现缺陷、解决缺陷所花的时间,都是不能确定的;甚至最糟糕的情况是,由于新技术存在的致命缺陷,会使它必须被舍弃,从而造成整个项目的严重延期。
    功能简化了许多。开始的时候,我是想着能把地图做上去,把玩家的位置显示出来。可是看看现在做出来的效果,只有一个简单的用户列表,真是有点简陋啊,呵呵。对弈的逻辑过程都做好了,可是没有限制棋子的走棋规则。没有晦棋、也没有时间限制等等。

                                                   完工总比半途而废强
    不过,最终还是能用了。这是因为我开发的顺序,是先做核心功能,先搭构架。所以,目前主要的框架都有了。10多年前,我曾经看过UML有关的书籍。书中,“用例驱动架构、迭代式开发”的模式,深深地触动了我。我后续的很多项目,都沿用了这一开发过程的思想,很多项目都取得了成功。我这个产品也沿用了这一思想,在有限的时间内,基本架构搭建完毕,基本功能已经具备。
    项目的三要素是时间、质量、成本。很多时候,我们都要在这三者中进行抉择。有的开发者说,我做的是一个实验产品,没有时间限制。这样的话,他的产品很可能就做不出来。因为没有了明确的时间目标,人很容易失去方向,很容易懒散,特别是遇到困难的时候。对于不紧急的项目,时间可以规划得松一些,但是也必须有时间点,否则就很可能夭折。
    我做这个产品,基本是一种兴趣,利用的是空闲时间。因为我是一个自由职业者,如果有项目,必须优先完成项目。没有项目的时候,才有时间继续这个产品。所以,能够把这个产品上线,也是一种坚持的结果。虽然这个产品看起来还是有点简陋。
    我初步规划是2021年12月底完成,由于时间和技术的原因,未能完工,计划推迟到2022年2月底。后面又推迟到4月底,才终于完工。每次,我都尽量按照计划的时间完成。发现不能按时完成,又重新调整计划。有了计划就有了目标,它象大海中的灯塔,指引着你前进。

                                                                  新技术的抉择
      在项目开发过程中,新技术的使用是需要谨慎对待的。如果使用得当,新技术将会提高开发效率。当前,开源产品的使用,是个普遍的趋势。对于我这个产品,客户端的交互是个需要考虑的问题。起初,我是想让两个客户端直接建立连接。然而,客户端通常是不能直接连入的,而且不经过服务器,对于重连等机制也不好实现。所以,还是考虑客户端都和服务器连接,由服务器转发的模式。但是,如果使用http模式,每次发数据都连接,这样效率太低,对于需要传递走棋数据不太合适。所以,用web socket比较合适。起初,是想着自己实现服务器的转发。但是,在查阅web socket资料时,发现stomp协议的相关资料。如果使用了stomp协议,客户端之间的交互就会变得简单。在服务端,spring对stomp协议有良好的支持。在客户端,也有支持java script的开源产品。因此,就打算使用stomp协议。
    不幸的是,使用开源产品的问题暴露出来。实际测试中,服务端很顺利接收到客户端的信息,但是客户端总是接收不到服务端的信息。开始,觉得是自己使用的问题。但是,无论如何尝试都不行。不得已,只得去查客户端stomp模块的java script代码。经过调试,终于发现了一个分割符号的解析问题。
    这一番调试,花费了不少的时间。但是,stomp协议的使用,大大简化了客户端之间的交互代码,还是很值得的。
    开发语言的熟悉程度也是需要衡量的。对于我这样一个习惯了c/c++、java语言的程序员,使用java script,还是非常不习惯。java和java script其实是非常不同的语言。从c++过渡到java,我没感觉有很大的差异性。但是从java到java script,简直是和一个从未接触过开发语言的小白也区别不大。
 
                                                  专业的人做专业的事
    对于一个初级的软件开发者,往往只能用一种语言,开发一个模块。他很难从软件产品或者项目出发,选则合适的开发语言和工具。
    对于一个资深的软件开发者,他往往能够根据产品或者项目的需要,选择合适的开发语言和工具。而且,他还需要考虑整个系统的架构、成熟的相关功能模块等技术问题。这些,需要开发者具有丰富的经验,还需要具有快速掌握新技术的能力。
    然而,在开发环境确定的情况下,对于一个功能模块的开发,语言和工具的熟练程度就成为关键因素。这个时候,你是一个资深的开发者还是一个初级开发者,就不重要了。熟练程度成为了关键因素。
    对于这个产品来说,我使用java script 开发前端界面,就是很痛苦的事情。在正常的项目开发中,不应该使用一个资深的开发者用他不擅长的语言或者技术做开发。
    然而,在实际的项目中,由于人员的配置问题,这种高能低用的情况还是会出现的。有些是人员变动,有些情况是做一些演示产品。资深的软件开发人员,通常对新技术的掌握更迅速,能更快地进入工作状态。当然,不应该长期使用一个资深的开发者做他不擅长的开发工作。

                                                            应用开发的演变与未来
    最初做软件开发的时候,正是管理软件风行的时候。一个客户端软件加一个数据库,构成了软件系统的主体。foxpro、powerbuilder、delphi、visual c++都盛行一时。那时开发的软件,都是给专业人员用的,什么财务管理、仓库管理等。典型特征是在一个局域网内,用的人不多,最多也就几十人。  随着互联网的兴起,越来越多的人使用软件。客户端往往是几百上千人,甚至上万人。像现在的QQ、微信,都是几亿人在用。两层结构的模式,由于是直接连接数据库,而数据库的连接数量有限,所以客户端的数量有限,不能再符合需要;而且两层模式中,没有对客户端的接入控制,一些服务端的控制功能也不好实现。于是,三层模式出现了。三层模式和两层模式最大的不同,是有一个中间层。中间层是在服务器端的一个应用软件,中间层可以控制客户端的接入、可以方便地扩展服务。三层模式很容易就扩展成多层模式。
    在三层结构出现的早期阶段,还没有很多的基础框架可选用,甚至连基础的网络传输都需要自己开发。那时候,做一个成熟的三层结构的分布式应用软件,需要很高超的技术。中间层的功能是复杂的,为了能够使应用开发人员集中于本身业务逻辑的开发,中间件就诞生了。中间件实现了服务器的基础架构功能,因此它的选择和使用就非常关键。web应用是典型的三层模式,web server就相当于是一个中间件。其实除了web server,还有其他的中间件,例如银行常使用的tuxedo。如今,随着软件技术的发展。越来越多的框架、功能模块可供使用,开发的效率越来越高。而如今的web server , 除了可以为浏览器提供服务外,还可以为别的应用提供服务。web server由于应用广泛,已经有许多架构提供基础系统功能的支持,例如面向java的j2ee、微软的.net框架。所以,很多非浏览器的应用,也使用web server 作为中间件。
    软件行业的发展,都是为了服务于生产和生活。社会化大生产,需要分工和协作,软件行业也不例外。软件应用开发,是连接软件和其他行业的纽带。如同汽车需要很多零部件进行组装一样,软件应用开发需要选用合适的工具,将不同层次的模块组装起来,构建自己的应用。因此,开发团队的技术领导,必须拥有系统而全面的软件知识,才能在各种工具和模块间进行选择,带领团队进行高效地开发。
    我这次开发的中国象棋游戏,服务端也选用了web server。由于对j2ee架构比较熟悉,选用了tomcat作为web server。使用spring 框架简化前后端的数据交互、使用了基于web socket的stomp协议简化客户端的数据交互。
    我的前端是手机android app。由于是个游戏,涉及一些界面效果的实现,所以前端使用什么工具开发是我需要抉择的。如果不使用游戏引擎,完全用android 自己的开发包,是可以实现的。但是一些特效则不容易实现。而目前手机的游戏开发工具比较流行的是cocos creator 和 unity,都集成了开发环境和游戏引擎。这两个游戏工具都能支持android、苹果、windows等多个平台,都支持3D。但是cocos 是免费的,对手机的支持也比较好,整个工具也比较小。综合考虑,我决定选择cocos。从实际的开发过程来看,游戏引擎的界面刷新框架简化了界面的刷新控制;各种控件方便的组合设计,使图象定位、布局以及事件处理实现起来都很简单。由于时间有限,各种特效还未加入到游戏中。
   
 
                                                        专业的广度和深度

我做自由职业者已经快5年了。刚开始的时候,准备接一些和c/c++相关的项目,但是类似的项目很少。所以,我调整了自己的目标。java我向来是自已有研究的。因此,我决定转向java的相关开发。包括j2ee架构的web server 应用服务开发和android平台的手机开发。java相关开发的文档是很齐全的,只要你英语过关,官网就有很多资料。
    作为一个自由职业者,做事有了很大的自主性。这些年来,因为项目需要,我尝试使用过.net , qt ;阅读修改过vlc(VideoLAN)的源代码;开发过微信平台上的小程序。这些,丰富了自身的知识体系,增强了把握新技术的能力,开拓了设计思路。但是,学习、使用新知识降低了开发效率,从盈利的角度并不合算。今后,我将主要专注于j2ee架构的服务器的开发,android应用的开发。也就是这个中国象棋软件需要的技术。

附:我的android 中国象棋app下载地址:http://106.13.200.243:8080/chesscard/chesscard.apk
    有兴趣的朋友可以下载安装,试玩一下。

 
 
 

  

歌词网