開個貼子,記錄這件有意思的事情!+ ?" ]/ T+ I! }# ~" G3 u" l; Z* b
9 c9 ^8 a$ X6 t
背景:$ V3 h$ i/ j" o6 S3 @6 G& C
沖突一:想學習,卻找不到好工具' l7 O( ?# \. d1 H. P9 L* }) ^6 l
今年春節遇上了疫情,我宅在家里,處于“失業”狀態,作為有志青年,不想每天刷劇、刷抖音,想著裝一下B,提高一下英語水平。
. Q( j6 m2 V* \; {; q- Z" M, J
$ z" U# e* L5 C, |6 l5 C8 x$ k于是,在朋友圈瘋狂的廣告洗腦下,我下載了幾個當時很火的App,很認真地投入學習。
3 p; t( ?& g, T7 n8 A然并卵,使用了一段時間之后,發現效果不太理想:首先,這些App記單詞過程太過于復雜,很多都提供了多種助記的方法,除了常規的詞根詞綴、聯想記憶以外,還有圖片記憶、電影情節記憶、思維導圖記憶等,這樣的好處是當時很容易記住單詞,壞處就是忘得也很容易,大量的助記材料無形中增加了記憶的工作量,增加了記憶的負擔,從而偏離了記單詞的初衷;其次,練聽力的功能普遍都是提供新概念英語或者VOA、BBC、TED等聽力材料,對于基礎不好的我,感覺在聽天書;" t; w& u2 J! f2 M) s
難道就沒有一款適合我這種菜鳥的App嗎?8 o1 F I) Z- u Z( M& V# g5 J
一個大膽的想法出現在我腦海里:自己開發一個App。, d" ]: l2 R: `! A% | f) k2 c. z& G
1 |9 h0 J; _! Q. N: O沖突二:計劃自己開發,卻不是專業人士
" B( W$ }# Q7 n [1 O為什么說這個想法大膽呢?因為我雖然是一名搞技術的工程師,但僅限于機械行業的。我所接受的完整編程教育僅是在大學期間的《C語言程序設計》。所以對事情一無所知,嚴重缺乏相關知識儲備,除了大膽,我也不知道怎么來形容這個想法了。* V: P' J$ @1 Z" \, a0 [( d
但有句古話叫無知者無畏,而且作為理工男,我始終相信任何問題都有辦法解決,只要你能夠把問題描述得足夠清楚。$ K: `, a! K- \. Z! I! F! B7 n
因此這個想法一出現,我立馬覺得應該去試試,結果怎樣不重要,起碼先行動起來。
3 N6 y& Q8 i/ |7 E- b) J& `' M- q$ Q2 R8 g" s, D4 ]
行動:; G) j% j# O! j5 S* r
先把問題描述清楚,我的目標是開發一個學英語的App,這款App應該功能簡單,不能太過復雜。把它分解成兩個問題: @$ ~' ]8 S+ z' S9 y# m7 [
1-怎樣開發一個App?
, |; Y# F1 G6 {2-應該具備什么功能才能用來學英語?3 M! t* |/ C6 f+ `' [
3 f1 s0 L6 M" X$ Y
先來思考第一個問題:怎么開發一個App?
/ B% p; O% j2 Y$ |/ f" c0 N) K我把問題進行細分:' {: A( I6 u5 q6 `
1- 什么是App?
O( n: C0 H, _/ s' R/ N; k2- 需要哪些知識儲備?
! D5 Z# G8 _# {$ P3- 如何做?需要什么工具?
, x* ?3 N/ a% h4- 有沒有簡單的方法實現?1 h/ B9 A: Q0 E, b
經過一番搜索、學習、請教、記錄和總結,這些問題漸漸有了答案。
* ^4 a& k& `# w/ p8 P. r8 b& i! o. c8 h! J! y) S
1-what:什么是App?6 z& t- [3 i6 v8 p, b
App是應用application的簡稱,我這里說的App是指手機端的App。
( ~" C7 Y- v3 z# ~' ^ ]根據開發模式,目前的手機App可分為3種類型:原生、H5、Hybrid。它們有各自的優劣勢:
! H1 f; O1 o% Q5 B2 W2 g 類別5 |7 }: y1 q7 `8 V+ e
| 概述2 H; i& t- y; ~. Y; c' W
| 優勢0 r5 H$ q0 Y# O" q2 ]
| 劣勢) D' M2 g z6 C/ ?
| 原生應用 (Native; w4 K4 ~& A5 e4 ?
App)' q# `- Z8 o1 |( X, y. V# g9 }( ~
| 原生App就是利用Andriod、ios平臺官方的開發語言、開發類庫、工具進行開發。比如安卓的java語言,ios的Swift語言。在應用性能上和交互體驗上應該是最好的.1 U2 c; j. M/ {9 z7 `* y
| 1-可以訪問手機所有功能、可實現功能最齊全;
0 T' I k$ L% }9 Y' U. m( y2-運行速度快、性能高,絕佳的用戶體驗;8 u4 u9 D+ ]# k. s8 _
3-支持大量圖形和動畫。不卡,反應快;& _% S, ~3 r+ \9 M; ^
4-比較快捷的使用設備端提供的接口,處理速度上有優勢;
) K0 m1 x- P% H) Y& ] | 1-開發成本高、周期長,Android和ios都需要單獨的開發;
2 C8 W! l5 ^2 z& [0 j& _! ]2-更新版本需要重新下載安裝包;8 D- t) W& |2 u" U% U: @$ U/ E- r$ p
| H5應用 (Web App)
* P# y; A7 p3 W& j | 用普通web開發語言開發的,通過瀏覽器運行。
7 q( I; v5 h. I8 x) J/ @ | 1-使用web語言,開發門檻低、周期短;; A2 t# b3 S7 p
2-支持多種瀏覽器,兼容性好;
% B9 u1 ~: s, m" G, u. a3-免安裝,使用瀏覽器打開,更新無需用戶參與;
" w9 {# `# C) p6 R. T' o" p | 1-對聯網要求高,離線不能承載太多東西;. j8 d5 Q' F1 M4 M% Q9 Y: p! F
2-功能有限;
9 ]7 `, }9 Y) m4 p# {9 S0 c3-運行速度慢,頁面不能承載太多東西;6 f) I* L# _( W2 w$ B
4-圖片和動畫支持性不高;' r; J7 i( Z4 a, |' u
5-體驗感不如原生和混合App;! M7 v& o0 F/ o0 v4 q
| 混合版應用 (Hybrid, r% {9 }& L& M
App)
. J5 ]& z( j2 @) n4 ]. S' ~" J | 既利用了原生APP開發技術還利用了HTML5開發技術,是原生和HTML5技術的混合應用。混合比例不限。目前市面上流行的小程序和快應用就是采用Hybrid技術。
% P) y9 U5 O& J; k3 }" T, y | 1-運行速度比Web App快,可調用部分設備端口;4 A# w9 c, l" B5 u
2-開發周期比原生App短;; F! K( G% r5 ?5 t- ~+ n
3-可以跨平臺,Android和ios不需要單獨的開發;
6 I2 E/ e ^6 y. a4-免安裝,打開就能用,更新無需用戶參與;5 e& }% h# P; U! r# P1 i
| 1-功能接口受限于原生App的支持程度;+ {+ L; ]% {; q. Z9 t: @
2-體驗感優于Web App,但差于原生App;
# k$ F' w! R4 R* r | 1 l; f' Z! r: L
/ B" G* f# X( x; N
* q. m8 g+ K9 D" f: v+ b3 n' a5 `2-why:需要哪些知識儲備?
2 v! O9 i+ h- Y* rApp開發的流程大概分為幾個階段:需求分析-->架構設計-->后端開發-->前端開發-->測試。每個階段都需要相應的知識。* w; V- B' ~, Z+ ]; ~' i3 _. F
& _& j0 g S2 x8 d' u2 `0 e3 \( j' T% q9 `& [6 z& S
需求分析:; i) q+ |+ ?/ Q/ d
需求分析也稱為軟件需求分析,是開發人員經過深入細致的調研和分析,準確理解用戶和項目的功能、性能、可靠性等具體要求,將用戶非形式的需求表述轉化為完整的需求定義,從而確定系統必須做什么的過程。這是軟件工程專業的相關知識。( b/ d+ P! R0 Y4 a* O7 q6 x$ F+ E2 Y
, R+ S8 e7 f" K$ @& T2 `0 E3 S ~* `
; h5 s* E% m2 f& Z架構設計:
; x: u; a6 g! j5 y. x需要架構設計是將客戶的需求轉換為規范的開發計劃及文本,并制定這個項目的總體架構,指導整個開發團隊完成這個計劃。架構設計是軟件設計過程的早期階段,它把需求分析和設計流程連接在一起。需要對開發技術(包括前端和后端)有深入的了解。# m9 E# M6 d k4 m" _9 Z: u4 v
. Y7 K3 L& }4 N3 B9 L1 s" P5 Z5 f0 o' ^$ u& e: k
' C" l8 n" G$ e$ q- O
后端開發:2 Q" k6 P7 k% }" I; h
后端是指服務器相關的統稱,包含服務器、數據庫。
8 P0 K# J5 ^/ V+ z1 y服務器搭建與開發,常用語言和工具:Nginx、Java、Shell、Python、PHP、node.js等;
. K! @5 ?7 @& @4 H& w3 ^數據庫開發,常用知識:關系型數據庫mySQL,非關系型數據庫MongoDB;
m" X; f* i3 U6 t8 R/ e+ m! J+ m# h& ?5 h9 j( w
* f! ~, n- R5 M( V) i6 g. ]
% o2 @' I1 D2 n
前端開發:6 ^: a+ T" j0 K/ U5 i3 \
前端是手機端的開發,包括UI界面、響應邏輯、數據的請求。
3 A# Z3 o8 }5 n前端三大基礎技術:HTML5、CSS、JavaScript;# c* ` n* o8 ~% f
流行的前端框架:Angular、vue.js、React;
& [# ^$ X) E! X' |$ p0 H, L原生App開發語言:Swift(iOS平臺);Java(Android平臺);
# w, |& l+ K" i
; l W, j1 D5 d) N2 C- V+ f1 w9 J. c j! [( t5 G& J! {) j2 w z
1 g! A; B& X$ a( B9 n! v3 r; N, u5 M
測試:
1 @/ L) X9 L+ B d3 b包括功能測試、性能測試、壓力測試等。
' z* ^5 T% z8 m) F* b) _% P
1 }) l5 N& H* e/ I% [: W E l/ n' ?
% ^( B9 ^0 _3 D7 p- v% ~& P u3-how:怎么做?需要用到什么工具?
: o: j% O/ \: b看書、看視頻教程、看開發文檔、模仿實踐;
/ b4 ~/ ^9 j4 a基本上各種語言都有各自的開發工具(IDE),學到哪個就用哪個。& j% W5 U. r$ d0 {: Y$ r9 ^
* I! z- `' u4 Z
4-how good:有沒有簡單的方法實現?4 j# E l: p! w- Q* y
隨著了解的越深入,越發現這個事情沒有想象中那么簡單。這是一個系統工程,涉及太多的知識,需要不同崗位的人配合,就好比開發一臺設備,需要機械工程師、電氣工程師、工藝工程師、采購工程師等一起合作才能完成。
5 e0 L- B" y/ [3 f3 e8 D難道一個人就真的不可能完成?我開始動搖,直到后來看到了“全棧開發”這個名詞,眼前一亮,信心立馬恢復。全棧開發是指一個人搞掂前端和后端。隨著技術的發展,市面上有很多現成的框架,借助這些框架來實現一個小項目這個可能還是有的。6 I6 o. w+ `# g; `2 P2 o9 F8 |, e
4 i# T# s, C2 g. R; i那么接下來就是確定開發的模式:
+ S! j: m: s* Q1 \% O. j3 v首先排除開發原生應用,難度實在太大,不符合我的情況。只能在H5和Hybrid之間選擇,H5是門檻最低的,但我預計后期會用到手機攝像頭和話筒這些硬件,這些是H5的劣勢。那么目前看來Hybrid是最合適的選擇,而且此時微信小程序開始火起來,各種開發教程和案例都豐富起來。于是,我最終確定做微信小程序。后來,微信小程序推出了云開發,媽呀,我感動得快要哭了,騰訊真的太照顧我了,這樣又幫我解決了后端開發的問題。9 c& B" F. T9 z3 f/ K
關于開發的問題,確定開發模式后,剩下的就是惡補微信小程序的相關知識。9 H' |' I3 }2 V9 D7 t5 |6 K5 Y
7 x% I. K7 ~ E! N! D* s, o第二個問題是APP應該具備什么功能才能用來學英語?后面繼續記錄。。。。
; u: U% `- E9 N0 L- W# N
: `7 {6 X0 r6 L* K3 x |