传统的应用程序开发流程包括集思广益、形成想法、验证、功能选择、设计迭代,以及最后的开发工作,这一连串的事件通常需要至少一个月的时间才能完成。这一次,我们决定在一天之内便完成从想法到应用开发的过程。当然,我们在20小时内所创建的应用程序虽然功能丰富,但其设计、安全性和可靠性还远远不及发行版的质量。本文除了记录我们的经验以外,还希望能够为那些长期以来一直有想法却迟迟未开展应用程序开发工作的朋友提供动力。
犯罪预警应用的开发时间表
第0~2小时
我在一个周日的下午一点与Sivamani会面。在见面之前,我们已经大概讨论过要开发一个iOS应用程序,帮助人们避免成为犯罪的受害者。我们一直以来都是攻击和破坏行为的受害者,所以希望建立一个预警系统,能够在人们无意进入犯罪高发区时通知他们。我们决定由该应用监控用户的位置,显示其对位置危险等级的评估,并列出该地区最常见的罪行。这样,用户能够避免汽车受损和人身攻击的危险。通过所提供的犯罪报告热点图以及定位系统,用户还能够根据自身的判断来调整地图上的热点。在前两个小时结束时,我们已经列出了想要的所有功能,并确保我们意见一致。
第2~5小时
我们中的两个人开始在线下收集原始数据,大约花费一个小时确定了几个数据源。这些数据源包括纵火、抢劫、攻击、蓄意破坏和性犯罪报告。使用Semantics3的Web收集程序,我们能够在半个小时内掌握数据,随后再用半个小时整理数据并将数据移植到SQL上。我们决定先专注于加州地区,因为这一天的目标是启动产品并使之正常运行,而不深入其他工作内容。同时,Sivamani开始启动iOS应用程序的基础架构工作,我也开始着手API方面的工作。
第5~9小时
API会接收来自应用程序的经度和纬度坐标,并返回该地点“危险等级”评估、该评估中的“置信度”以及进行评估所使用的原始数据的节流清单。我需要花费数个小时用Restify和Sequelize搭建一个MySQL ORM基本服务器,确保代码保留异步调用需要再花费两个小时。
同时,Vinoth已经使用JavaScript实现了一个算法,该算法考虑了每个罪行的地点和性质以及与该数据相关的源数据,其中包括罪行发生的日期和时间。Sivamani已完成了应用程序大部分功能的架构,包括定期轮询GPS和设计要显示罪行统计和详情内容的页面。该应用程序能够与我们为测试所建立的模拟静态API进行通信。
第9~14小时
我们本可以通过SQL查询的内嵌移动Haversian距离功能实现地理搜索,但显然,这不是长久之计。因此,我们改用Sphinx search,在唯一可用的Node-Sphinx连接器Limestone上努力了数小时后,终于使Sphinx地理搜索运行起来(支持地理搜索的Limestone代码很快将启动,目前的版本无法提供足够的支持)。
同时,Vinoth致力于将来自多个源的数据合并在一起,尤其是合并性犯罪和与一般犯罪的数据。然后,他将聚集算法合并到Node服务器,调整JSON响应以满足应用程序的要求,最后得到并调用API。此时,Sivamani已经完成了应用程序的地图和显示详细内容的视图,并使之与API协同工作。
第14~20小时
同时,Sivamani想到了一个有趣的功能。因为儿童很容易不慎进入危险区域,并且不可能想到用预警应用程序获取信息,因此他添加了一个“儿童模式”。从本质上来说,该应用程序将在孩子处于危险时自动向孩子的两个紧急联络人发送短信。Sivamani通过集成Hoiio API来实现这个功能,不久后,他调整了该应用程序的图形和色彩,并添加了精巧的修饰。
当Vinoth优化了API和测试算法时,我决定开始编写Android应用程序。我以前已经编写了多个应用程序,这些应用程序都需要多个地理位置和映射;因此,使用我以前编写的一些代码,便能够搭建基本框架。此后,我着手于快速复制Sivamani在iOS上所进行的工作。在第20个小时的最后,完成了Android应用程序,虽然里面没有Sivamani所集成的一些很酷的功能。
显示用户所在位置的危险等级
要点
心动不如行动!应用程序的开发在一开始就是件非常繁重的任务。开展工作的一个好方法就是开始编写代码。建立起整个基本框架是当务之急。 在开始这一天的工作之前,我们对Node.js API、Sphinx搜索、iOS地理位置、SMS API等不甚了解,但现在我们已经比较熟悉这些概念,足以设置该功能的知情期限以及进行熟练的功能选择。
在开始编写代码之前需要考虑好你的基本设计方案。繁杂的设计将很难修改,并且通常会造成代码冗余。
在创建应用程序时记下该功能的“待办事项”清单。这包括不属于最小工作原型类别的其他功能或安全/设计/可扩展性/跨设备考虑事项。例如,我已经写下在下一个迭代过程中为Android应用程序构建九格地图。
如果你的应用程序依靠预生成的数据,则专注于子集而不是试图立刻准备好所有数据。首先要整合最棘手的数据集,其次再整合次要的。这种开发模式可能不适用于所有类型应用程序的开发,特别是那些图形密集型应用程序,因此请运用自己的判断力来识别我们的经验和你的需求之间的相似之处。
本文作者Chandrasekhar来自一个为开发者提供移动数据解决方案的团队Semantics3,其网站为semantics3.com