【2013年9月11日 51CTO外电头条】时至今日,创建属于自己的定制化应用程序从未变得如此便捷。在网络、桌面以及移动开发智能框架的广泛普及之下,任何心态良好、认真专注且目的明确的用户都能够在几乎任何平台上建立起极具时代感且由数据驱动的应用程序。然而,一旦将话题转向编程领域,问题就会变得更复杂、更难以打理。在今天的文章中,我们就来一起探讨如何从零开始创始应用程序。
首先,先提几点注意事项:编程并不适合每个人。尽管如今编程工作已经变得比较容易上手,但大家仍然不能指望随便找几个人就能开发出世界一流、具备专业品质的应用程序。因此,在树立远大的技术抱负之前,大家需要先花几个月来深入学习一门语言及框架,这样才能踏踏实实地为未来的工作打好基础。
另外,我们创建的第一款应用程序不太可能既复杂又高效,事实上这样的成果只会出自经验丰富的开发老鸟的精心雕琢。不过只要经过严密规划与认真投入,大家仍然可以拿出一套对企业及客户切实有益的应用产品。正如我们在后文中将继续讨论的,开发是一个不断循环往复的过程,只要下决心走上这条道路、我们永远有机会对自己的应用加以改进与完善。
我们该对代码做出怎样的预期
软件开发的核心在于流程,而在代码及应用创建方面,我们的学习流程应该包含以下几个步骤:
1.选择一种语言及框架。
2.接受相关培训。
3.规划自己的应用程序。
4.开发出一套MVP(即小型可用产品)。
5.重复以上过程!
挺简单的,对吧?其实事实并不复杂。下面我们来看第一步。
选择一种编程语言
也许应用程序开发过程中最让人难以决定的,就是到底选择哪一种编程语言以及与之相对应的框架。每种语言都有自己的优势与缺点,而更让初学者感到头痛的是,根据特定语言特征实现对应编程目的的旧观念现在已经不再起效。总而言之,如今我们很难根据明确的开发目的为自己选择最合适的语言类型。举例来说,JavaScript原本是一款专门作用于浏览器的前端语言,但目前它却被广泛用于浏览器后端。
由于篇幅所限,我们无法在本文中充分评述各种语言与框架的细节信息,但希望下面这份简明扼要的清单能为大家提供一点指导:
- JavaScript – 一种针对前端/UI开发的基本脚本语言,但目前正作为后端语言而日益普及。
- Python – 一种针对桌面与Web应用的多功能语言,在脚本方面的表现也同样出色。
- PHP – 一种人气很高的Web应用服务器端语言,对以WordPress为代表的博客平台来说至关重要。
- Ruby – 一种易于学习的Web应用程序常用语言。
- Java – 专门用于Android应用程序开发的常用多功能语言。
- Objective-C – 一种以C语言为基础的通用型语言,也是iOS应用程序的核心语言。
需要强调的是,基本接受一种给定语言并不代表我们无法在开发过程中涉及其它实现方案。由于目前切实可用的多平台框架越来越多,大家完全可以利用任何一种流行语言为iPhone或者Android设备开发应用程序。在这一领域,最显著的例子就是PhoneGap——它能够将我们的HTML、CSS以及JavaScript代码编译成可以为iOS、Android或者Windows Phone所接受的本地应用。
在真正决定应用程序的主要语言之前,先要对各类不同编程语言拥有一定程度的了解。
目前,大多数应用程序开发流程存在于开发框架当中——所谓框架是指一套软件平台,用于组织代码并为应用程序提供结构,并以自动化方式处理大部分日常任务。当下比较常见的例子包括Ruby编程语言的Rails框架、JavaScript的Ember框架以及Python语言的Django框架。由于框架会从着眼于全局的角度、以实际设计原则为基础进行应用创建,因此我们必须首先掌握一定程度的脚本语言知识。也就是说,即使大家决定专注于Ruby或者Python等核心编程语言,也必须要对HTML、CSS以及JavaScript或者CoffeeScript有所了解(CoffeeScript是一种独立且比较简单的语言,能够以极佳效果将代码编译为JavaScript形式)。(通常情况下,无论实际使用的是哪种语言及框架,大家都必须掌握HTML及CSS的基础技能。)
在接触主要语言之前、先以练手的方式尝试几种其它编程语言也是不错的办法。我建议大家在Codecademy之类的学习网站上先认真阅读几篇教程文章,看看自己对哪种语言的设计思路最感兴趣。
积累一些开发经验
一旦确定了自己的学习目标,接下来就是着手进行实践培训。目前我们已经拥有不计其数的开发培训课程可供选择,形式从现场课堂到在线课程乃至指导性书籍无所不包。如果大家不知道如何选择,那么三种全用也是没问题的。
我们最好在选择老师并投入时间与金钱之前,先花点精力观看在线教学视频。Code School、Codecademy以及Treehouse等网站都提供大量关于编程语言及开发框架的资料,而且收费非常低廉。Codecademy的免费课程是我们初次接触编程而又无需花费培训预算的最佳起点。作为我个人最喜爱的网站,Treehouse为编码初学者带来极为精彩的课程与指南信息,从最基础的高级项目创建到颇为复杂的社交媒体功能应有尽有。
在面对面的教学课程方面,位于旧金山的Marakana以及位于丹佛的Pragmatic Studio都是大家学习开发技能的好选择,这两家机构提供的一周入门课程要价2500美元,具体金额取决于课程类型。一周入门课程主要专注一种编程语言或者框架,例如iOS或者Android移动平台以及Web领域的HTML 5或者Ruby on Rails。一般说来,我们会在为时一周的课程中初步积累到关于某些简单项目的开发经验,例如如何创建博客、Twitter或者待办事项应用。
相对于在线授课,现场课堂最大的优势在于允许我们提出问题并与经验丰富的开发者进行直接互动,老师们能够为大家解决入门编码者们可能面临的最大挑战。不过这里需要强调一点:这类课堂上的大部分学生都是从业已久的开发人员,他们参与课程的目的是为了提升自己的专业技能——也就是说后来者很可能跟不上这种过快的学习节奏。因此,请在正式开始学习之前花点时间,帮助自己熟悉关于语言或者框架的基础知识。
当然,更为全面的新兵训练课程也是存在的,例如Dev Bootcamp,其中每组学生都将获得长达九周的开发主题培训。不过相对较长的课时安排、有限的招生名额以及高达12000美元以上的要价让小型企业的DIY爱好者们感到有些难以承受。
大家最好能在新手程序员们实际进行生产开发之前,为他们准备一个月左右的学习时间。但即使是这样,我们也不能指望短短三十天就培养出能够“指哪打哪”的真正开发人员。相反,大家可能会在掌握了基本编程技能后,仍然弄不清楚要如何把自己的知识储备成功转化为切实可用的应用程序。
进行应用程序规划
在完成了为期数周的培训之后,大家应该已经在语言及框架的基础知识方面拥有一定程度的了解,现在就结合自己的知识进行应用程序开发规划。根据我们在课堂上、书本里以及实践指导中学到的内容,大家可以将概念与实际需求、底层数据结构以及界面设计等工作进行一一对应。
开发方法本身就是个完整的主题,而且很多专业开发人员都会以狂热的精神对其加以研究。(举例来说,我们网站的CTO就对敏捷开发概念很有话说……)但这并非毫无道理,因为错误的开发流程很可能毁掉一个本来极具潜力的好点子。在本文中,我将开发流程中的重点总结为敏捷宣言(专注于快速开发业务软件)以及针对现有业务的改进与迭代机制。不过在刚刚接触DIY编程领域时,大家没必要过分注重开发方法。先将着眼点放在建立一款切实可用的应用程序上,并依靠开发成果解决自己的实际问题,这就已经初步达到目的了。
要快速开发出一款业务应用,首先将必须考虑的因素限制在四到五项(例如图中所示的安全性、可用性、功能性以及设计性),其它项目则可在未来的迭代进程中逐一实现。
应用程序规划过程当然是越简单越好,我们不需要创建出实际成果来加以验证。首先,明确定义新应用程序的存在目的是什么。保持它的简洁性与功能性。假设“客户能够自主使用预置服务”而非“通过自助服务功能简化与客户间的互动”——前者描述的只是一种操作流程,我们完全可以在自己的手机中通过代码加以实现;而后者描述的却是一种抽象概念,缺乏明确的开发方向。
当然,大家可能希望应用程序的功能不要太过单一。为此,我们需要归纳应用程序需要处理的所有事务,并从特定用户的角度将其汇总为一份单独列表。请务必专注于操作的实际结果,而不要把精力分散到界面等相对不那么重要的方面。另外,不要过早关注细节,例如如何触控或者点击功能按钮。像“点触一个按钮以完成预约”这类描述不要出现在前期规划当中,因为这样会扼杀应用程序的发散性思路。总之,名单上要多列主干、少说废话。
清单汇总完成后,再对内容进行一次筛选。举例来说,如果第一次列出了十项重点,那么尝试将重点数量缩减为四项或者五项,并把其它内容归为在今后的迭代工作中需要考虑的条目。需要在应用中实现的重点越少,大家就能更快开发出自己的成果。
到现在,我们就该考虑如何设定设计原则了。首先为应用程序界面勾勒一份草图,思考用户在这些界面中的操作体验。我们该在开始屏幕中设定哪些元素、用以引导用户正确使用自己的产品?在经过一系列操作后,屏幕上又会显示哪些内容?大家不妨绘制出操作流程的样图,并通过简单的线框注释来指导自己的设计过程。LucidChart与Proto.io这类工具能够快速生成非常实用的模型与图表。
迭代化开发
基本规划完成之后,大家就可以开始思考如何将思路转化为切实可用的软件。一般来说,我们需要花费数个星期来研究应用程序中的各类功能性方案,再用几周时间开发出一套基础且功能有限的应用程序雏形版本。行业中一般称之为MVP,或者叫最简可用产品。它代表着一个新的起点,我们能够以此为基础通过迭代对各项功能加以完善。
随着应用程序渐具规模,大家可能希望来自外部的开发人员从客观角度检查自己的工作成果、解答开发过程中出现的问题并提供解决方案。许多自由职业型开发人员乐于为大家提供他们的专业见解,而且仅按小时收费而无需为其提供全职岗位,相信各位能从他们的专业知识中收获良多。
可以肯定的是,软件开发工作并不简单。因为如果难度不高,那么每个人都会插上一脚了。不过如果大家拥有积极的工作心态外加有效的针对性培训,并在执行过程中认真研究并加以规划,那么完全有机会通过DIY方式培养自己的技能水平、改进自己的应用程序并最终搞定整个新项目。