時至今日,創建屬于自己的定制化應用程序從未變得如此便捷。在網絡、桌面以及移動開發智能框架的廣泛普及之下,任何心態良好、認真專注且目的明確的用戶都能夠在幾乎任何平臺上建立起極具時代感且由數據驅動的應用程序。然而,一旦將話題轉向編程領域,問題就會變得更復雜、更難以打理。在今天的文章中,我們就來一起探討如何從零開始創始應用程序。
首先,先提幾點注意事項:編程并不適合每個人。盡管如今編程工作已經變得比較容易上手,但大家仍然不能指望隨便找幾個人就能開發出世界一流、具備專業品質的應用程序。因此,在樹立遠大的技術抱負之前,大家需要先花幾個月來深入學習一門語言及框架,這樣才能踏踏實實地為未來的工作打好基礎。
另外,我們創建的第一款應用程序不太可能既復雜又高效,事實上這樣的成果只會出自經驗豐富的開發老鳥的精心雕琢。不過只要經過嚴密規劃與認真投入,大家仍然可以拿出一套對企業及客戶切實有益的應用產品。正如我們在后文中將繼續討論的,開發是一個不斷循環往復的過程,只要下決心走上這條道路、我們永遠有機會對自己的應用加以改進與完善。
我們該對代碼做出怎樣的預期
軟件開發的核心在于流程,而在代碼及應用創建方面,我們的學習流程應該包含以下幾個步驟:
1.選擇一種語言及框架。
2.接受相關培訓。
3.規劃自己的應用程序。
4.開發出一套MVP(即小型可用產品)。
5.重復以上過程!
挺簡單的,對吧?其實事實并不復雜。下面我們來看第一步。
選擇一種編程語言
也許應用程序開發過程中最讓人難以決定的,就是到底選擇哪一種編程語言以及與之相對應的框架。每種語言都有自己的優勢與缺點,而更讓初學者感到頭痛的是,根據特定語言特征實現對應編程目的的舊觀念現在已經不再起效??偠灾缃裎覀兒茈y根據明確的開發目的為自己選擇最合適的語言類型。舉例來說,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方式培養自己的技能水平、改進自己的應用程序并最終搞定整個新項目.