16年上半年在幫老師,幫外面隨便做點(diǎn)東西以便得到些生活費(fèi)養(yǎng)活自己虑粥。下半年去外面公司待了一段時(shí)間如孝,然后選擇回來幫自己做個(gè)東西,歷時(shí)三個(gè)月娩贷,獨(dú)自完成安卓及IOS版本app的開發(fā)部分第晰。
開發(fā)過程與問題
我之前沒了解過安卓和IOS開發(fā),一開始對整個(gè)項(xiàng)目也沒什么概念彬祖,腦袋中只知道要做個(gè)電商app茁瘦,中間就是遇到各種問題,后來一步一步的做下去解決掉储笑。我做的是電商app甜熔。整個(gè)過程學(xué)習(xí)占了大部分時(shí)間,修復(fù)Bug突倍,還有重構(gòu)代碼腔稀。三個(gè)月大多數(shù)時(shí)間都只做這三件事。
學(xué)習(xí)安卓羽历,看郭霖的《第一行代碼》焊虏,再看點(diǎn)極客學(xué)院的安卓視頻,這是快速做東西的號搭配秕磷∷斜眨《第一行代碼》我看了好幾遍,我買了好幾本安卓書澎嚣,這本寫的最好涂圆,我看的最多。極客學(xué)院的安卓視頻币叹,教的很淺润歉,但是時(shí)間短,所以可以在短時(shí)間內(nèi)知道一些安卓技術(shù)颈抚,然后結(jié)合第一行代碼踩衩,不同就翻閱,google就可以做東西了贩汉。
學(xué)習(xí)IOS驱富,看小碼哥的ios視頻,不懂就看匹舞。ios開發(fā)的我沒遇到好書褐鸥,關(guān)于Objective-C的,買本Objective-C的參考書就好了赐稽。
Android開發(fā)知識點(diǎn)
想要做一個(gè)完整的Android app叫榕,必須要會的東西浑侥。
- Gradle 用來對安卓項(xiàng)目打包編譯,項(xiàng)目的依賴晰绎,簽名配置等寓落。一個(gè)自動構(gòu)建工具 (必須)
- Activity,F(xiàn)ragment荞下,ViewPager伶选,ToolBar,BottomBar尖昏,Recyclerview仰税。(必須) 這些要會用,理解的越深越好 (不同的App需要的組件可能不一樣抽诉,我覺得這幾個(gè)大部分的app都會用到吧)
- Android的事件機(jī)制陨簇,事件的傳遞攔截等。
- 布局控件掸鹅,RelativeLayout塞帐,LineerLayout拦赠。一些布局的屬性都要掌握 (必須)
- 網(wǎng)絡(luò)通信(我用的是Volley)(必須巍沙,一般app都要和后臺通信吧)
- 自定義簡單的控件 (有些內(nèi)置的控件,可能無法滿足需求荷鼠,需要自己定制簡單的控件)
個(gè)人感覺會了上面的這些東西句携,做出一個(gè)App一般是足夠的。
Android可能遇到的問題
- ViewGroup和View的關(guān)系允乐,經(jīng)常出現(xiàn)childView alredy have a parent.you need to remove it's parent first.
- Fragment的生命周期要理解的很深才行矮嫉,不要以為看了google的官方文檔上面的Fragment生命周期就以為懂了,后來不斷的遇到問題牍疏,專門研究下會好點(diǎn)蠢笋。
- 布局過程也要深入了解下, 各種wrap_content,match_parent里面是怎么回事鳞陨,布局文件里面的屬性到底是怎么回事昨寞,要明白。
// 額外的工具庫厦滤,讓app變得更加強(qiáng)大
- ButterKnife援岩,這個(gè)很好用,用于綁定視圖掏导,可以少寫不少代碼
- GSON 將JSON數(shù)據(jù)轉(zhuǎn)換為JAVA的模型享怀,或?qū)⒛P娃D(zhuǎn)換為JSON數(shù)據(jù)傳輸給服務(wù)器
- EventBus 這個(gè)庫說的是可以更方便的進(jìn)行android組件之間的通信,可是我基本沒怎么用到
- SmartTabLayout 這個(gè)可以自己換成其他的庫趟咆,用于頁面滑動添瓷,增強(qiáng)版的ViewPager梅屉。
- 推送通知用的阿里的云推送
- 分享用的 ShareSDK
兩個(gè)多月,知識點(diǎn)學(xué)到了這些仰坦。這是做出一個(gè)完整的app需要的知識點(diǎn)履植。
IOS知識點(diǎn)
做完了Android開發(fā)之后,學(xué)習(xí)IOS悄晃,我的建議是先不要入門直接用Swift玫霎,當(dāng)初我也是新手,徘徊要選Objective-C還是Swift得時(shí)候妈橄,聽說Swift是更加現(xiàn)代化的工業(yè)級標(biāo)準(zhǔn)語言庶近,吸收了Python還有現(xiàn)代流行語言特性,學(xué)起來更簡單眷蚓,我就首先學(xué)習(xí)的Swift鼻种,但是新手直接用Swift會出問題的。
- Swift2.x和Swift3.x的版本不同沙热,雖然是小的不同叉钥,但對剛學(xué)的新手,會讓新手產(chǎn)生迷惑
- Xcode的版本一直在變篙贸,我按照蘋果官網(wǎng)給出的實(shí)例敲代碼都無法運(yùn)行投队,因?yàn)樘O果官網(wǎng)給的實(shí)例程序是基于Swfit2.x好Xcode7.2的。 僅僅是一些小的版本差異爵川,在Xcode8上就不能用敷鸦。這對新手都比較致命,直接打擊自信心寝贡。
- Swfit的庫并不多扒披,資料也不是很多,在我搜很多資料的時(shí)候圃泡,大部分都是Objective-C的碟案,而且從書店買的書大部分都是Objective-C的,基于Swift3.x版本的書幾乎沒有颇蜡。
- 我在用Swift的時(shí)候無法使用阿里百川的電商SDK接口价说,因?yàn)榘俅娚蘏DK用的是Objective-C開發(fā)的,大公司的IOS產(chǎn)品都是基于Objective-C開發(fā)的澡匪。
...
基于以上幾條熔任,如果新手學(xué)習(xí)IOS開發(fā),現(xiàn)在我的建議是先學(xué)Objective-C唁情,雖然會多寫幾行代碼疑苔,但是資料多,有頭緒甸鸟,Swift3.x的碰到了問題惦费,資料就很少兵迅。
做出一個(gè)IOSapp需要掌握的知識點(diǎn):
- 掌握UIViewController。
- 掌握常見的視圖薪贫,幾乎所有的視圖都是以UI開頭的恍箭,UIView,UILabel,UIButton,UIImageView,UITable,UIScrollView等等。
- 掌握幾種常見的視圖創(chuàng)建于加載的方式瞧省。從代碼創(chuàng)建會麻煩扯夭,可以從XIB文件創(chuàng)建視圖,從Xib初始化視圖和從代碼初始化視圖調(diào)用的初始化方法不同鞍匾。
- 掌握Foundation框架交洗,幾乎絕大部分代碼都要用到這個(gè)框架里的東西,里面的東西就是在我們熟悉的類型前面加上NS橡淑,代表NextStep公司的意思构拳,了解了這,記住NSString梁棠,NSArray置森,NSNumber等等就容易了。
- 掌握自動布局符糊,這個(gè)很重要凫海,會自動布局才能在不同的手機(jī)屏幕下做適配。
- Objective-C的語法知識濒蒋,剛開始會用起來比較怪盐碱,后來就好了把兔。
//額外的庫
- MJRefresh 表視圖的增強(qiáng)工具
- MJExtension 類似于Java的GSON沪伙,數(shù)據(jù)轉(zhuǎn)模型的。
- Masonry 很好用的代碼自動布局庫
- AFNetworking 網(wǎng)絡(luò)通信用的庫
- YPTabBarController 頁面滑動效果用到的
- Toast 類似于安卓的Toast县好,在屏幕的某個(gè)地方提示一條消息围橡,類似于AlertView。
如果你曾先學(xué)習(xí)的是Objective-C缕贡,那么兩個(gè)星期應(yīng)該可以做出一個(gè)IOS app翁授。一個(gè)星期用來學(xué)習(xí)Objective-C,一個(gè)星期用來動手寫代碼晾咪。
后臺
我后臺使用的是Laravel框架收擦,優(yōu)雅,簡單谍倦。主要用了Laravel的以下幾個(gè)功能
- 掌握Request
- 掌握Route塞赂,在路由文件里定義各種路由,由控制器處理
- 數(shù)據(jù)庫的控制部分昼蛀,Laravel有ORM還有普通的數(shù)據(jù)庫操作宴猾,我覺得普通的數(shù)據(jù)庫操作就夠了圆存。
- 中間件
- Laravel的View部分,這個(gè)給非技術(shù)人員寫一些頁面以便非技術(shù)人員增刪改查數(shù)據(jù)仇哆。這個(gè)要涉及前端了沦辙,好在我之前做過一段時(shí)間的前端。
Laravel是一個(gè)簡單的優(yōu)雅的后臺框架讹剔,很好用油讯,很好學(xué)。如果你的服務(wù)器用的是Nginx的話延欠,那么還要做一些額外的配置撞羽。
整個(gè)App基本上就這么多東西,歷時(shí)三個(gè)月從小白到一個(gè)人寫后臺衫冻,android 诀紊,ios端。創(chuàng)業(yè)團(tuán)隊(duì)……
Android與IOS對比
Android的官方文檔非常全隅俘,語言只有好用的Java邻奠。IOS的缺點(diǎn)是Objective-C用起來很奇怪,Swift的資料又不多为居,蘋果的官方文檔又是過時(shí)的碌宴。
Android要適配多個(gè)版本的機(jī)型,剛開始app就不兼容低版本的Android app蒙畴,后來7.0版本的App又有些不兼容……贰镣,而IOS的不管幾s基本上沒問題,除了IOS的操作系統(tǒng)版本變化膳凝,我只用了IOS 10的系統(tǒng)碑隆,其它的沒用。
Android的控件很多蹬音,用起來有些麻煩上煤,剛開始會經(jīng)常崩潰,IOS的控件只有幾個(gè)著淆,但是每個(gè)控件都封裝的很好劫狠,每個(gè)控件都提供了很多功能践磅。
我覺得IOS學(xué)起來碍讨,開發(fā)起來更容易。
但Android用起來會更廣泛信不,Java也比較通用苔埋,Android開始開源的懦砂,我覺得android做精的話,會更有趣一些。
總結(jié)
迫不得已孕惜,未畢業(yè)之際愧薛,加入一個(gè)創(chuàng)業(yè)團(tuán)隊(duì),自己又不是科班出身衫画,認(rèn)識的搞IT的又少毫炉,只能扯開膀子自己干,學(xué)了三個(gè)月的時(shí)間削罩,自己知識面上寬了不少瞄勾,解決問題的能力強(qiáng)了不少,同時(shí)也意識到了一些問題弥激。
做IT這一行进陡,知識是學(xué)不完的,絕大部分問題都是類似的微服,你愿意去找總能找到問題的解決方案趾疚,但是因?yàn)榻^大部分問題解決方式都類似,Google以蕴,StackOverFlow糙麦,所以自身的進(jìn)步只在知識點(diǎn)上,解決問題就那幾種方法丛肮。
知識是學(xué)不完的赡磅,知識也都是類似的,但知識的深度也是無止境的宝与。 有句話說過:知識的廣度和深度是相輔相成的焚廊,知識的廣度促進(jìn)你往更深的方向挖掘,知識的深度又可以讓你融匯貫通到更廣的領(lǐng)域习劫。
現(xiàn)在知識點(diǎn)不夠精是我的不足咆瘟,但我不是那種蜻蜓點(diǎn)水到處學(xué)一點(diǎn)的人,我所學(xué)的東西都有做出成品出來榜聂。而且我是短時(shí)間內(nèi)邊學(xué)邊做的搞疗。
路漫漫嗓蘑,東西做的不夠精致须肆,等于沒做,在一個(gè)創(chuàng)業(yè)公司桩皿,東西做的不好豌汇,對自己也是致命的,不完完善優(yōu)化……