开个贴子,记录这件有意思的事情!. J9 a5 o5 I" j w0 f1 J
# K* `0 Q L* q9 ]背景:
- o8 q3 n& [3 C0 m冲突一:想学习,却找不到好工具# P6 Y/ J8 F& Q3 D3 P; Q
今年春节遇上了疫情,我宅在家里,处于“失业”状态,作为有志青年,不想每天刷剧、刷抖音,想着装一下B,提高一下英语水平。4 a f# L. ?3 U* b+ Y; Z
: G, F; m% m& Q; s4 v于是,在朋友圈疯狂的广告洗脑下,我下载了几个当时很火的App,很认真地投入学习。4 B( p3 Q2 y% g* w& f7 r( | m
然并卵,使用了一段时间之后,发现效果不太理想:首先,这些App记单词过程太过于复杂,很多都提供了多种助记的方法,除了常规的词根词缀、联想记忆以外,还有图片记忆、电影情节记忆、思维导图记忆等,这样的好处是当时很容易记住单词,坏处就是忘得也很容易,大量的助记材料无形中增加了记忆的工作量,增加了记忆的负担,从而偏离了记单词的初衷;其次,练听力的功能普遍都是提供新概念英语或者VOA、BBC、TED等听力材料,对于基础不好的我,感觉在听天书;8 d% U* s; ~% G$ k- _: N
难道就没有一款适合我这种菜鸟的App吗?
, F* C: g. D2 s' s" m9 g O一个大胆的想法出现在我脑海里:自己开发一个App。; o6 c- m" J7 h' p
: A" X \$ V; N2 ^% z: Y t+ ^/ }
冲突二:计划自己开发,却不是专业人士
2 @1 k, Y% Y; P/ b0 F为什么说这个想法大胆呢?因为我虽然是一名搞技术的工程师,但仅限于机械行业的。我所接受的完整编程教育仅是在大学期间的《C语言程序设计》。所以对事情一无所知,严重缺乏相关知识储备,除了大胆,我也不知道怎么来形容这个想法了。
! D6 P8 w; I/ \3 G) V但有句古话叫无知者无畏,而且作为理工男,我始终相信任何问题都有办法解决,只要你能够把问题描述得足够清楚。/ Z1 S" R* c2 ^+ F) J% l
因此这个想法一出现,我立马觉得应该去试试,结果怎样不重要,起码先行动起来。
: R/ y, b& C( R) P& `3 c6 G. g$ P E1 F: \; J% V3 i
行动:
9 _! B4 |: G% C$ o6 g! C) K4 r; U先把问题描述清楚,我的目标是开发一个学英语的App,这款App应该功能简单,不能太过复杂。把它分解成两个问题:$ Y H, h, J# V5 J* ^& B
1-怎样开发一个App?4 I' g3 U! P; ]3 C* g
2-应该具备什么功能才能用来学英语?1 b& m9 Z. s% B6 x. p: ^6 \( N
7 \5 ~( T! H5 m. w
先来思考第一个问题:怎么开发一个App?
! q6 s" E+ x8 ~/ `我把问题进行细分:3 ^, c0 M% D( M, G
1- 什么是App? ( C3 \/ {$ w2 x. Y- E* r' q4 f8 [
2- 需要哪些知识储备?' F/ Z) R" z. |/ [
3- 如何做?需要什么工具?3 V9 H' e0 h: v7 P# E3 @
4- 有没有简单的方法实现?7 V: o9 @$ ]% ]# S+ I, q1 c! |
经过一番搜索、学习、请教、记录和总结,这些问题渐渐有了答案。& O, E+ B* W/ H0 \
% f! u( c1 g7 x5 n7 z1-what:什么是App?
, \ ^; G* p p6 y- GApp是应用application的简称,我这里说的App是指手机端的App。' }/ q' S0 y! \* A; r1 p& J
根据开发模式,目前的手机App可分为3种类型:原生、H5、Hybrid。它们有各自的优劣势:$ n X* y6 y8 N& J# p
类别
/ t. q% N( M$ l: M9 I: \( [ | 概述8 ~+ F7 q0 m3 F! c: T2 ]
| 优势5 q/ W! @* }/ i+ V$ d0 j
| 劣势- ~; G$ s$ ?3 l/ r( H5 i
| 原生应用 (Native1 h- W/ x/ K! X$ M9 Z) B
App)
% i, D/ H3 J3 f$ }" m2 d- E | 原生App就是利用Andriod、ios平台官方的开发语言、开发类库、工具进行开发。比如安卓的java语言,ios的Swift语言。在应用性能上和交互体验上应该是最好的.
9 D! z. @5 R$ u. ~5 x/ T, z! @ | 1-可以访问手机所有功能、可实现功能最齐全;
* g h7 D4 f: [4 L* n2-运行速度快、性能高,绝佳的用户体验;4 V4 n" w; Q# [. L7 Y2 w
3-支持大量图形和动画。不卡,反应快;
4 e% t% Z' E3 O4-比较快捷的使用设备端提供的接口,处理速度上有优势;
7 j% O! Z% g9 Q4 E" x | 1-开发成本高、周期长,Android和ios都需要单独的开发;
) x8 m1 K* l! d9 I2-更新版本需要重新下载安装包;
m& v9 Q, a9 d& d | H5应用 (Web App)
2 E$ H% l" S3 R1 ~# _: ^0 h | 用普通web开发语言开发的,通过浏览器运行。5 k8 v& X9 a* c% k
| 1-使用web语言,开发门槛低、周期短;
1 ^8 O2 Z. H: a/ s2-支持多种浏览器,兼容性好;1 m' U j3 o+ S% a; S5 l
3-免安装,使用浏览器打开,更新无需用户参与;
+ B$ a( W2 f% Q9 T; ~' Q& p# D+ G | 1-对联网要求高,离线不能承载太多东西;( ?/ ~! }4 m8 V' z
2-功能有限; L: e' F% M( {5 P( y
3-运行速度慢,页面不能承载太多东西;4 I' [$ A) {/ q% `
4-图片和动画支持性不高;
( H& G. \; f. G: @. {: R& ?) b2 E5-体验感不如原生和混合App;0 q+ X9 t1 \# Y6 y4 a. ]
| 混合版应用 (Hybrid* j' y3 R! i$ J% l( n0 l
App)( Z7 \2 ~! k% W8 b! J
| 既利用了原生APP开发技术还利用了HTML5开发技术,是原生和HTML5技术的混合应用。混合比例不限。目前市面上流行的小程序和快应用就是采用Hybrid技术。
2 q6 `( S- I: H | 1-运行速度比Web App快,可调用部分设备端口;
5 E0 [1 }: ~0 _2-开发周期比原生App短;
! u7 ]/ `4 I( |0 v# }3-可以跨平台,Android和ios不需要单独的开发;
7 Z* X3 Q3 U3 @4 @; J4-免安装,打开就能用,更新无需用户参与;
7 |2 A6 J, ^+ t | 1-功能接口受限于原生App的支持程度;
& A( ]9 ?/ G8 D6 S" z% M2-体验感优于Web App,但差于原生App;- |$ w# N( \* o' M& v, m0 J: O5 c
| - q Z4 c1 z6 H% g ?) J, a9 s* o
" _3 @3 Y" k/ Y& p9 ~" ~! y
- {. k8 F; V% i. p; H" k# Q' \; M2-why:需要哪些知识储备?
# v, q2 @8 Z# Y& S, v0 P9 AApp开发的流程大概分为几个阶段:需求分析-->架构设计-->后端开发-->前端开发-->测试。每个阶段都需要相应的知识。
1 P' I/ b3 V& Q. r# f' V
, M+ _5 r2 a( O) i' q- k1 q4 h5 t% x5 q5 |8 {& y. S2 c3 o0 R
需求分析:; {% z$ g( q# s
需求分析也称为软件需求分析,是开发人员经过深入细致的调研和分析,准确理解用户和项目的功能、性能、可靠性等具体要求,将用户非形式的需求表述转化为完整的需求定义,从而确定系统必须做什么的过程。这是软件工程专业的相关知识。
. G1 K' Y6 o; M8 h$ s {4 p. E3 [ y1 O5 n) K
6 G Q& ~& v. ~3 Y7 [
) e; r3 R) X; t% {/ e+ g
架构设计:
3 R: k6 E2 ~3 A! @- J3 b. F5 {需要架构设计是将客户的需求转换为规范的开发计划及文本,并制定这个项目的总体架构,指导整个开发团队完成这个计划。架构设计是软件设计过程的早期阶段,它把需求分析和设计流程连接在一起。需要对开发技术(包括前端和后端)有深入的了解。
" y6 n& o: C) u7 D; X) I* F6 z
# Y9 e2 p% x+ f6 l- J+ i$ B% [6 P( N7 @. W" x$ [, ^* Q& B! E- K5 {
6 X% J: D: b) N3 c4 ]" N) C
后端开发:8 b2 m5 i7 _( B! h: H
后端是指服务器相关的统称,包含服务器、数据库。7 W/ j' O. N& G9 Z1 f! t
服务器搭建与开发,常用语言和工具:Nginx、Java、Shell、Python、PHP、node.js等;7 t& ]$ B- M. t I( } X Z; o
数据库开发,常用知识:关系型数据库mySQL,非关系型数据库MongoDB;& {! W5 k* G2 [+ U
' M, c9 K N" ?# a5 o
V7 P! Z8 _0 J+ |6 L$ p
( E$ i. B. t# Y前端开发:7 M/ a" }' w7 A5 O7 I
前端是手机端的开发,包括UI界面、响应逻辑、数据的请求。$ f' q, L: ^8 M/ w' l
前端三大基础技术:HTML5、CSS、JavaScript;
7 n0 D1 u! H1 M# R. n( l流行的前端框架:Angular、vue.js、React;# Y1 x3 t$ Z$ M$ L( \
原生App开发语言:Swift(iOS平台);Java(Android平台);
4 F- _7 y) H2 u& z4 T! c
$ b" j4 e/ }( U
4 s3 ?6 u' J: j% D9 I
: W$ k0 }9 i- {- {$ Z6 O# \' J! m A! }$ }+ f3 j9 _# J) X4 q* l
测试:
+ u5 D" Q4 _% ?% {包括功能测试、性能测试、压力测试等。# R& U) L( {) ~) M' j0 ?
9 J/ ]* c$ e$ l8 O: V5 h& A
7 q8 [' T1 `/ S, R
0 J% \. W" M8 E* h% f* @3-how:怎么做?需要用到什么工具?
! F$ J0 Q+ d# h- w- u9 O. x看书、看视频教程、看开发文档、模仿实践;
6 ^5 Q) D8 U3 d4 O3 M基本上各种语言都有各自的开发工具(IDE),学到哪个就用哪个。
m7 ?7 R/ t4 b9 l. _
5 r! f0 u- i& ^. g* m/ e4-how good:有没有简单的方法实现?" U1 q6 |0 r6 m" I4 S
随着了解的越深入,越发现这个事情没有想象中那么简单。这是一个系统工程,涉及太多的知识,需要不同岗位的人配合,就好比开发一台设备,需要机械工程师、电气工程师、工艺工程师、采购工程师等一起合作才能完成。
2 V. r3 t6 l) m1 J! m: P0 H难道一个人就真的不可能完成?我开始动摇,直到后来看到了“全栈开发”这个名词,眼前一亮,信心立马恢复。全栈开发是指一个人搞掂前端和后端。随着技术的发展,市面上有很多现成的框架,借助这些框架来实现一个小项目这个可能还是有的。: [( [2 O! u" t
, {' N( b; c, w; B' I
那么接下来就是确定开发的模式:7 S! [5 C. k; J5 H; l* d- l0 e
首先排除开发原生应用,难度实在太大,不符合我的情况。只能在H5和Hybrid之间选择,H5是门槛最低的,但我预计后期会用到手机摄像头和话筒这些硬件,这些是H5的劣势。那么目前看来Hybrid是最合适的选择,而且此时微信小程序开始火起来,各种开发教程和案例都丰富起来。于是,我最终确定做微信小程序。后来,微信小程序推出了云开发,妈呀,我感动得快要哭了,腾讯真的太照顾我了,这样又帮我解决了后端开发的问题。
6 P) O" o7 R$ T- O2 ]关于开发的问题,确定开发模式后,剩下的就是恶补微信小程序的相关知识。
* `/ E8 x0 D! m9 _4 |9 Y
( s% f7 p- U/ [8 a1 T" O& z第二个问题是APP应该具备什么功能才能用来学英语?后面继续记录。。。。
' {& ^: x" f2 s# u
' g) Z0 o2 E8 C$ F" ?) U" C |