如何快速高效地完成一個(gè)Android項(xiàng)目?

本文的內(nèi)容有別于之前文章中純技術(shù)的探討,會(huì)從業(yè)務(wù)邏輯技術(shù)、團(tuán)隊(duì)方法論的角度探討如何快速高效地完成一個(gè)Android項(xiàng)目。當(dāng)然,快速高效是有前提的,第一,本文依然是從研發(fā)的角度來談如何把控項(xiàng)目的,而這種研發(fā)人正如陳皓在《技術(shù)人員的發(fā)展之路》中提到的,需要具備高效的學(xué)習(xí)能力解決問題的能力。另外,快速需要保證質(zhì)量,沒有質(zhì)量的速度是不負(fù)責(zé)任的。

一、業(yè)務(wù)邏輯

計(jì)算機(jī)科學(xué)的核心是通過數(shù)據(jù)結(jié)構(gòu)和算法實(shí)現(xiàn)對(duì)現(xiàn)實(shí)世界的抽象,平臺(tái)是會(huì)隨著技術(shù)發(fā)展不斷變遷的,只有數(shù)據(jù)本身所描述的這種抽象才是事物永恒的本質(zhì)。作為研發(fā),筆者推薦通過數(shù)據(jù)結(jié)構(gòu)來理解業(yè)務(wù)邏輯,比如,數(shù)據(jù)庫建模需要對(duì)系統(tǒng)中所有的實(shí)體關(guān)系進(jìn)行抽象,是理解業(yè)務(wù)邏輯的核心。當(dāng)然,可能有不少App研發(fā)人對(duì)后臺(tái)的業(yè)務(wù)邏輯并不太關(guān)心,但實(shí)話講,任何依賴于平臺(tái)(Windows、Symbian、Android、iOS……)的開發(fā)者是沒有安全感的,平臺(tái)是會(huì)不斷迭代的,研發(fā)人需要去抓住那些本質(zhì)的、穩(wěn)定的計(jì)算機(jī)科學(xué)的核心知識(shí)。有點(diǎn)跑題,舉個(gè)栗子,一個(gè)進(jìn)銷存管理的Android軟件,先拋開復(fù)雜的、精細(xì)的管理流程不講,從最小可行產(chǎn)品(MVP)來說,主要會(huì)包括如下業(yè)務(wù):

  • 進(jìn)貨=選商品+加庫存;
  • 銷售=選商品+減庫存;
  • 庫存=查庫存+庫存修改(商品修改);
  • 基礎(chǔ)資料=新增/修改店鋪+新增/修改商品;
  • 報(bào)表=入出操作流水。

對(duì)于一個(gè)店鋪來講,進(jìn)貨需要選品和增加庫存量,選品的方式可能包括掃描69碼或從庫存添加(69碼最終也會(huì)對(duì)應(yīng)庫存中的SKU);銷售包含選品和減少庫存量;庫存包含增刪改查等基本操作;基礎(chǔ)資料包含店鋪信息、人員信息、設(shè)備信息等;基礎(chǔ)報(bào)表包含利潤(rùn)、進(jìn)貨明細(xì)、銷售明細(xì)、對(duì)賬等操作流水。當(dāng)然,上述業(yè)務(wù)框架僅僅是MVP,并未考慮ERP、WMS中精細(xì)化管理的各種場(chǎng)景,但對(duì)于App的研發(fā)來講,這也是最基礎(chǔ)需要了解的。

二、技術(shù)

本節(jié)將從Android開發(fā)的角度來說明在快速開發(fā)中最常用、最重要的幾點(diǎn)技術(shù):

  1. 數(shù)據(jù)結(jié)構(gòu)和算法。正如業(yè)務(wù)邏輯中講到的,數(shù)據(jù)結(jié)構(gòu)和算法是軟件技術(shù)的核心,在快速Android開發(fā)過程中,需要了解Java中的各種數(shù)據(jù)類型的實(shí)現(xiàn)及原理。比如下列問題是否了然于胸?

1、List、Queue、Stack的實(shí)現(xiàn)有哪些異同?ArrayList如何實(shí)現(xiàn)擴(kuò)容?PriorityQueue、LinkedBlockQueue的主要特性是什么?直接在循環(huán)中刪除List的元素為什么會(huì)報(bào)ConcurrentModificationException?
2、如何實(shí)現(xiàn)樹的深度遍歷、廣度遍歷?文件系統(tǒng)如何使用二叉樹建模?紅黑樹有什么特性,主要的應(yīng)用場(chǎng)景是什么?
3、Hash原理是什么?HashMap的Key有什么注意事項(xiàng)?Java中是如何解決Hash沖突的,有哪些解決Hash沖突的辦法?基于Hash沖突的攻擊是什么原理?為什么要重寫hashcode和equals方法?LinkedHashMap、TreeMap以及SortMap有什么異同,各自的應(yīng)用場(chǎng)景是什么?Map如何通過迭代器進(jìn)行遍歷?
4、如何對(duì)Collections中的元素進(jìn)行排序?Compareable和Comparator有什么區(qū)別?如何實(shí)現(xiàn)線程安全的集合類?常見的并發(fā)場(chǎng)景有哪些?閉鎖、FutureTask、信號(hào)量、柵欄等各自的應(yīng)用場(chǎng)景是什么,實(shí)現(xiàn)原理?如何將串行任務(wù)并行化?鎖的實(shí)現(xiàn)原理是什么?

  1. Android中的View、WMS及AMS的知識(shí)。如果是數(shù)據(jù)是應(yīng)用的靈魂,那么View、WMS及AMS就是應(yīng)用的外觀。因此,應(yīng)用要求良好的交互性、體驗(yàn)等,就需要深入理解View的原理及WMS的知識(shí)。比如下列常見的問題是否理解?

1、RecyclerView的使用,是否了解其與ListView的區(qū)別?RecyclerView嵌套與適配器?如何響應(yīng)Item中控件的操作?如何在RecyclerView與Activity之間通信,并實(shí)現(xiàn)數(shù)據(jù)聯(lián)動(dòng)?RecyclerView在ScrollView中的顯示需要注意什么問題?
2、自定義View需要重寫哪些方法?invalidate()和postInvalidate() 的區(qū)別及使用?如何實(shí)現(xiàn)具有動(dòng)畫效果的View?View的層次關(guān)系是什么?Android中的事件類型有哪些?事件的傳遞過程?ViewGroup和View在事件處理方面有什么異同?
3、Activity界面的層次?Window、WindowManager以及WindowManagerService之間的關(guān)系?如何通信?
4、Activity的啟動(dòng)過程如何?主線程消息隊(duì)列如何啟動(dòng)?ActivityThread與AMS如何通信?Activity在異常情況下的生命周期?如何在Service中實(shí)現(xiàn)對(duì)Activity的跨進(jìn)程回調(diào)?

需要說明的,這里提到的技術(shù)點(diǎn)并不是像面試中問到的,因?yàn)槊嬖嚂r(shí)需要探探應(yīng)試者的深度,這里主要是說明快速開發(fā)中直接使用的技術(shù),也是最需要掌握的基礎(chǔ)知識(shí)。筆者最近準(zhǔn)備寫個(gè)系列文章,從八個(gè)方面來說明對(duì)Android開發(fā)的理解,主要包括:數(shù)據(jù)結(jié)構(gòu)與算法、網(wǎng)絡(luò)通信編程、線程與并發(fā)、進(jìn)程的通信與調(diào)度、View體系及WMS、四大組件及AMS、設(shè)計(jì)模式與架構(gòu)、性能優(yōu)化與虛擬機(jī),敬請(qǐng)期待~~

三、團(tuán)隊(duì)

在需要快速高效完成項(xiàng)目的場(chǎng)景下,團(tuán)隊(duì)的溝通、協(xié)作是非常重要的。如何帶領(lǐng)一個(gè)Android開發(fā)團(tuán)隊(duì),這里列出幾個(gè)筆者認(rèn)為比較重要的點(diǎn):

  • 研發(fā)團(tuán)隊(duì)不能管理的太緊,關(guān)鍵是要制定好標(biāo)準(zhǔn),搭好框架,然后在遵循統(tǒng)一的標(biāo)準(zhǔn)下保持進(jìn)度。研發(fā)要避免過度管理,自由、開放的環(huán)境更有利于產(chǎn)品研發(fā)工作,流程、制度約束太多對(duì)創(chuàng)新無益。團(tuán)隊(duì)成員更多的是協(xié)作,而不是管理。
  • 技術(shù)團(tuán)隊(duì)Leader的工作包括:搭建穩(wěn)定、可靠的開發(fā)框架,模塊化、插件化架構(gòu),網(wǎng)絡(luò)通信請(qǐng)求回調(diào)方法,單元測(cè)試流程,技術(shù)調(diào)研,渠道包管理,產(chǎn)品、UI和測(cè)試團(tuán)隊(duì)的溝通協(xié)作,需求討論及工期安排,各種核心流程圖及文檔,Code Review,崩潰日志分析及處理等等
  • 團(tuán)隊(duì)是有人構(gòu)成的,團(tuán)隊(duì)中需要有各種不同類型的人,有擔(dān)當(dāng)、能救火的人;有遠(yuǎn)見、能防火的人;有執(zhí)行力、靠譜的人;有喜感、能活躍氛圍的人;有獨(dú)立思考、事事能提出不同意見的人……以上總總,只要是能給團(tuán)隊(duì)帶來正面影響的人,作為團(tuán)隊(duì)Leader,一定要以開放、妥協(xié)、灰度的眼光求同存異。

四、方法論

從個(gè)人的角度來講,如何在高度壓力之下完成大量的工作?不管在公司承擔(dān)重要項(xiàng)目,還是自己創(chuàng)業(yè),這都是不可避免的話題。以下談?wù)劰P者個(gè)人的體會(huì)和方法:

  1. 節(jié)奏。工作的時(shí)候要全身心投入,避免各種打擾,比如測(cè)試提的BUG,各種會(huì)議,要盡量保證工作的連續(xù)性,避免被打擾。完成了一周緊張的工作,要及時(shí)的休息,腦袋里完全拋開工作上的事情,做一些其他輕松的事情,比如筆者喜歡寫寫毛筆字、喝點(diǎn)小酒,總之,做一些與工作完全無關(guān)的事情。
  2. 計(jì)劃。凡事遇則立,不預(yù)則廢,一定要有計(jì)劃,要有明確的條理,知道今天該完成什么,明天該完成什么,進(jìn)度該怎么把控,有什么風(fēng)險(xiǎn)點(diǎn),所有的事情一定要提前定好計(jì)劃,沒有準(zhǔn)備的仗是一定打不贏的。有了計(jì)劃之后,才會(huì)工作的走向有所把控,心里才有底,面對(duì)領(lǐng)導(dǎo)、同事以及相關(guān)工作人的時(shí)候,才會(huì)有底氣,也才會(huì)有自信心。

最后,和大家分享一個(gè)經(jīng)歷和體會(huì),與本文標(biāo)題沒有直接關(guān)系,沒興趣的話可以直接跳過。
上上周末完成了一次從北京的東南到西北的徒步穿越,全程接近40公里。徒步是最簡(jiǎn)單的一種思考方式,用腳步這種最原始的方式去經(jīng)歷每一處風(fēng)景。

  • 在你到達(dá)目標(biāo)的過程中,不可能一條平坦開闊的大路走到底,還要去走很多沒人走過的小路。大路走的人多,你覺得很有安全感;小路人跡罕至,你很擔(dān)心自己走錯(cuò)。但如果你的目標(biāo)是終點(diǎn),你就勇敢的走下去吧。其實(shí)路沒有大小,只有你是否能通過此路到達(dá)目標(biāo)。
  • 如果你一開始就決定要走一條很長(zhǎng)的路,那么一開始的走左邊,還是右邊其實(shí)影響不大,到達(dá)目標(biāo)的路徑有千萬種選擇。對(duì)于一個(gè)長(zhǎng)跑選手來說,重要的是方向和節(jié)奏。只要大方向?qū)Γ?*為起點(diǎn),只要朝著西北方向,保持每小時(shí)3-5公里的節(jié)奏,目標(biāo)終能到達(dá)。
  • 人走在路上,到了中點(diǎn)的時(shí)候,可能腳下已經(jīng)起了水泡,每走一步都很疼。這正如人到中年,工作、職場(chǎng)、家人、身體已經(jīng)已經(jīng)落下很多的問題,要去解決這些問題,就會(huì)很疼。往回走,就是失敗;站在原地,就會(huì)彷徨;所以只能往前走,遇到困難,死活頂上去,保持進(jìn)步的節(jié)奏,你才可能朝目標(biāo)前進(jìn)。很多人到了中年之后開始向各種問題妥協(xié),其實(shí)就相當(dāng)于站在原地,彷徨。

以上。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容