來自知乎的Android學習總結
阿新 • • 發佈:2019-02-17
之前寫了一篇部落格
Android學習之路 被瘋狂轉發,帶起了一陣學習Android的大風,我不曉得具體影響了多少人,但是這篇部落格已經成為Android新手學習必備的資料。很多人問我是怎麼一路過來的,姑且借這個機會說說我的故事吧。
===============================
內容有點長,大家姑且當做勵志小說來看吧,對這些經歷不感興趣的可以直接看最後“如何自學Android”部分
===============================
- 大學
目前為止可以說我的大學是我這輩子過的最爽的時期,大一開始就逃課,好點的理由是我對大學那些課程完全沒興趣,其實本質上是因為高考太壓抑了,大學之後沒人管了,開始無止境的放縱自己。毫不誇張的說大學四年上的課應該沒有逃的課多。逃課最直接的影響就是掛科,從大一掛到大三,專業課數學分析特麼每年都掛,後來聽說補考考不過要重修,還得交錢,這特麼讓家裡人知道還了得,於是發憤圖強,最終補考每門都以優秀的成績過了。
相信英語四級應該是大學必考吧,英語四級這輩子我都忘不了,我考了三次才過,每次考試說是裸考都褒獎了,大學英語全是吃高中的底子,第一次沒過,少了十幾分,第二次他媽睡覺睡過了,就沒有去考,現在想想當時的自己真是腦殘,終於在第三次勉強過了。現在想想幸虧當時過了,之後畢業找工作時英語四級是最低要求。做程式設計這行,英語真的挺重要的,大學的時候一定得想辦法把四級給過了。
現在想想大學和程式設計唯一相關的課程就是C語言了,但是對於我們專業是屬於全校公開課,最終這門課雖然考過了,但是連i++ 和++i我都弄不明白,可想而知你們應該能猜到我是怎麼過的。
由於高中就開始打籃球,大學時毫無疑問就入了學院籃球隊,而且擔任隊長,所以大一、大二過來基本就是一大半是在籃球場度過的,也是因為籃球征服了我現在的老婆。大二下學期周圍的人都在玩Dota,於是也開始了遊戲之路,籃球也基本放棄了,那時候玩的瘋狂,記得最長的一次和同學在網咖連續包夜兩星期,不過白天是回來睡覺的,不然估計早猝死在網咖了。
轉眼間大四了,這一年終於在我老婆的監督下不再掛科了,而且在畢業前的最後一次評比竟然拿到了三等獎學金,真是受寵若驚啊,後來錢也被狐朋狗友們拿去腐敗了。周圍的同學都在準備考研,我卻唯獨對考研沒興趣,自始至終都沒有為考研花過一分錢,買過一本書。後來證明我的決定是正確的,周圍的小夥伴放棄的放棄,考不上的考不上,考上的後面也沒見混的有多好,當然如果能考上好的學校還是很有幫助的。
- 畢業
三月份的時候一家IT測試培訓機構來做宣講會(具體什麼名字我就不說了,免得認為是廣告),聽完之後就說培訓之後包就業,培訓地點在大上海的最中心,當然是自費,但是可以工作之後分期付款。那時候哪知道測試是幹嘛的,更不懂IT是幹嘛的,回來就查了下這個機構確實存在,網站也有的,知道不是騙子遍決定來上海試一試。當時下定決定要來上海培訓之後,幾個狐朋狗友毫不猶豫的跟著我一起來了,總共應該是7個人,決定之後沒幾天便毅然而然的揹著大包小包來到上海,我們之中一部分是一次性付費,另一部分是分期。後來證明我們當時來上海的決定是正確的。
- 培訓之路
培訓的日子還是蠻輕鬆的,一週就上四天課,朝九晚五,畢竟大家家庭都不富裕,家裡辛苦攻讀了四年大學,畢業還要再交錢去培訓,打心裡大家都很愧疚。一開始卯足了勁要好好學習,但是堅持了沒多久就有點放鬆了,但是好歹也是都有學習的。
培訓的時候算是接觸了點程式設計吧,課程有C語言、Oracle、Linux,然後其他都是軟體測試的理論,其實都是非常基礎的東西,算是帶你入行吧,Orace就學習一些基本SQL語句,Linux就學了幾個命令,但是起碼知道原來電腦可以幹這麼多事,之前還一直以為電腦就是用來看電影、聊天、打遊戲的呢。現在回頭看給我一週的時間我可以看完整個培訓課程,但是當時的培訓週期要四個月。
- 第一份工作--SunNet
- 真正接觸程式設計
三個月的時間順利轉正,之後的某一天偶然得知公司一開發人員工資比我高2000,其實也就比我早畢業一年而已,才知道原來開發和測試工資差距這麼大,於是當時就下定決心要轉行做開發,所以說起我從測試轉行開發的原因是因為錢,一開始說因為興趣堅持下來的都是扯淡。。。
- 程式設計之路
但是web開發遠沒有學習一門語言這麼簡單,後來才知道web開發涉及到html, css, javascript, ajax, database等,範圍太廣了,於是為了效率,我只能每一項掌握住基礎,於是網上搜索找到w3school 線上教程 這個好東西,裡面的東西都是基礎的,我把教程整理到手機裡,每天上下班的地鐵上,吃飯的時候,回家的時候等等利用一切時間來學習,也是差不多大概2周的時間掌握了html, css, js的一點基礎,接下來準備正式學習.NET的時候,被我們老大知道我正在學習開發,我們老大叫Aaron,是一位典型的程式設計師,比較胖,人品超好,知道後不建議我學習.NET,說.NET出來都十來年了,已經很成熟了,很多人在學校都有.NET教程,現在學習已經比別人晚了。現在移動開發剛嶄露頭角,也沒多少人會,建議我直接學習移動開發。真是一句點醒了我啊!!
- 移動開發
這次有經驗了,知道了iPhone開發首先肯定得有一門程式語言的,瞭解到是Objective-C,於是又從公司借了一本OC的書(公司書很多,老大每月都會買來好多書,雖然看的人很少),又花了將近一週的時間來了解了基本語法,因為之前學了C#,這次沒完全看完的情況下想直接上手實踐。正打算學習的時候,才知道iOS開發必須得在mac上才可以,也就是說我得自己有臺mac電腦,雖然當時公司是有的,但是回家的時候不能繼續學習練習,肯定影響效率的,一臺mac對於當時的我簡直是奢侈品,雖然現在也依然是奢侈品,但當時根本不可能買得起。於是只有放棄iPhone開發轉向Android(後來才知道有虛擬機器這東西。。。)
- Android學習之路
那個時候的測試任務仍然很重,於是我只能擠出時間來做這個專案,基本是每晚以及週末都會自動加班來完成這個專案,現在看來那個專案真是太簡單不過了,快的話一週都不要就可以搞定了,但在當時我摸爬滾打了一個多月總算搞定了。
做完這個專案自己有了點信心,但當時自己的主要任務還是測試,自己開發的時間是少之又少,於是下定決心離職找一個專門做Android的工作。說明原因之後老大很理解,也是建議我想做開發的話就放手去找一個專門做開發的職位,這樣進步會比較快。
第一份工作能遇到我的老大Aaron,真是我的福分!
- 薄荷
12年5月中入職薄荷,你們以為我到了薄荷之後Android之路就一帆風順?錯了,路更艱難。我是薄荷入職的第一位Android工程師,薄荷在那時候只做iOS平臺的App,事實證明這種做法不可取,包括BOSS後面也親自說投資人來投資的時候一看資料這麼少,後面做了Android平臺之後使用者資料才慢慢上來,畢竟還是Android使用者基數大。
來薄荷的第一個任務是做聯想TV的一個視訊App,很蛋疼,折騰聯想的SDK,遙控器等,好歹App功能比較簡單,試用期間完成的還不錯,就這樣順利轉正了。轉正之後做了第一個Android App,叫減肥食物庫,功能與頁面全部Copy iOS版的App。這個時候一大堆沒做過的東西全部湧來了,網路庫、http、api對接、元件定製等等,那個時候沒有像現在各種資料、開源庫一大堆,公司也沒人能給指導,只有硬著頭皮慢慢來,為了能把進度趕上去,上線前夕曾經連續在公司通宵三天三夜,累了就在公司趴一會,這輩子就經歷過這一次,雖然專案最終也拖延,但總算在接受範圍之內上線,這在當時是第一個試水Android平臺的App,可惜的是上線之後表現不好,沒有達到預期的效果。
- Ruby、Rails
學習Ruby以及Rails是我目前為止遇到的最大的困難。Ruby是一種動態語言,Ruby On Rails是一種流行快速開發web的框架。學習ruby不同地方在於要學習Linux,程式碼基本全是在終端進行,沒有IDE,沒有編譯檢查,習慣各種命令列。這對於一個剛開始進行開發的人來說真的是太困難了。那個時候從內心也有抵觸,學習領悟能力也超差,我能感覺到公司領導層對我已經不是很滿意了,現在想想那時候公司沒能開除我真是得感謝我們的CTO,一個很有耐心、敢於給新人機會的人。中間遇到非常大的困難,還好得到薄荷ruby工程師小夥伴們的幫助,一直鼓勵我,遇到問題總是不厭其煩,在基礎、經驗、能力不行的情況下,我總得克服這種困難,讓別人看出我的態度。於是學習Ruby、Rails的那段時間我每天都是做最後一班公交車回去,我記得好像是11:40. 這個狀態持續一個月,包括週末,從未間斷。
這一個月我在公司的主要任務就是學習,沒有給安排任何事情,偶爾幫同事修修電腦,調下電話線,為此我非常感謝薄荷,感謝我的CTO Vincent,恐怕這在任何一家公司都不能這樣給一個人單獨的學習時間吧。一個月之後,學習的終於有點起色,開始實際做Rails專案,做後臺,寫api,雖然效率很低,程式碼很爛,但是在做Ruby的過程跟著我們CTO學了不少設計上的東西,面向物件的思想,設計模式等都在這個階段接觸的,自此我已經習慣各種終端操作,熟悉一些Linux基本命令,喜愛Ubuntu,參加了Ruby Conf 2012大會,喜歡Sublime,接觸Git,GitHub,搭建了自己的Blog。我感謝做Ruby的這段時間,他讓我接觸了不一樣的世界,心態完全變了,變得更開放,更樂於分享。
- 迴歸Android
迴歸Android開發的我一個人開發新的App,單槍匹馬,經過之前的一系列挫折,突然感覺再沒有更困難的了,一個人摸索架構、克服難題,App一推出便一直快速瘋狂的增長,目前薄荷App總使用者數已經破千萬,公司也順利融資,業務發展越來越好。
- 後話
- 總結
1. 如果你是非科班畢業想要轉行程式設計,看了我的經歷你一定很有信心與動力,我能,你一樣能,何況我中間走了這麼多彎路;
2. 如果你接觸過一些資料結構、程式語言之類的,想要學習程式設計,想題主這種,你更應該有信心,你比那些非科班的人已經多了一些基礎,你要做的只是堅定信念,堅持走下去;
3. 不要感慨上天的不公平,一路走來很悲催,走了太多的彎路,遇到了太多的困難,都是我這輩子難以忘記的坎坷,但同時我是幸運的,我的前任老大Aaron以及現任CTO都深深的影響著我後來的職業發現,我在薄荷的一些小夥伴們對我的幫助,我女朋友無數個日夜的理解與支援,上帝在給你製造坎坷的時候總會對你有些眷顧;
4. 如果你準備或已經在做開發的人員,沒有信心或動力,又或是對未來迷茫的時候,姑且當做一篇勵志小說來看,你要做的就是做好你當下在做的事,相信你的付出一定能有所收穫;
- 建議
1. 每天花1小時看書,難的不是1小時,難的在堅持;
2. 最好不要掛科,因為掛了你還是得花時間補回來;
3. 英語對程式設計來說很重要,試著習慣英語閱讀;
4. 資料結構和演算法要學好,這算是對程式設計來說最重要的課了,以後不見得能用得上,但用的時候起碼你有印象;
5. 大三或者大四一定要去實習,對於程式設計來說經驗還是比較重要的,實習經歷比你那些理論要有效的多;
6. 找個女朋友吧,不是說工作了你就找不到了,而是工作之後從事程式設計很少有時間和精力去接觸別的女孩,所以可以的話在畢業前找個可以同甘苦的女朋友吧;
7. 第一份工作很重要,因為你會受一些周圍同事、公司氛圍的影響,我為自己遇到Aaron、Vincent而感到幸運,他們倆是我目前為止最尊重的兩個人;
- 如何自學android程式設計
1. Android學習之路 前面說過我的這篇部落格是Android新手必備資料;
2. 書不在多,適合你就好,這裡推薦一本Android和兩本Java書籍吧;
《第一行程式碼》:郭霖大神的著作,我是看過郭神部落格過來的;
《Thinking In Java》:Java經典書籍,不必說;
《Effective Java》:Java進階必備書籍;
3. 有些人一開始看書也有困難,沒關係,那就去網上看視訊,結合視訊和書一起看,邊看邊敲,推薦下Mars老師視訊,包括java基礎以及Android篇都有:Java4Android.zip_免費高速下載
極客學院的視訊:Android安卓開發環境搭建
口味不同的人可去各大網站自行搜尋適合自己的教學視訊。
4. 多去混GitHub,目前最流行的開源社群,多參與開源專案,慢慢試著讀牛人們的程式碼,時機到的時候自己也可以為開源社群貢獻力量,可以這樣說在GitHub上認真混一年,比你在大學四年學的東西要多的多;
5. 關注一些Android界不錯的部落格:
我(stormzhang)的部落格:Storm's Blog
Trinea的部落格:Trinea
程式碼家的部落格: 程式碼家
6. 善於利用搜索引擎,從用Google做起,學會英文關鍵字搜尋,有問題第一時間想到去搜索而不是去請教別人;
7. 關注我的微博和微信公眾賬號,我也會在上面分享一些最新動態與技術前沿資訊,忙起來的時候偶爾會暫停,望理解,賬號均是: googdev
大家都有了以上相同的教程,但是人和人之間的區別在於:別人有顆更強大的內心,可怕的是比你聰明的人比你還要更努力!!
當你下定決心,準備前行的時候,剩下的只有堅持了。。。
===============================
我是華麗的分割線
===============================
我是很少在知乎上正經回答問題的,沒想到這個回答引起這麼多人關注,引起了很多人的共鳴,收穫了這麼多點贊,這裡針對很多人的私心以及評論做點補充吧:
1. 回答中提到了培訓之路,很多人要推薦培訓機構,其實一方面當時沒有經驗,也比較迷茫,迫不得已才去培訓試一試的,後來過來後其實培訓學不了什麼東西,我後來轉行Android完全是自學,和培訓一點關係都沒,所以不推薦去培訓,最終得靠自己;
2. 有人問我單獨開發的app是什麼,我現在公司名是薄荷科技,app也叫薄荷,你可以去各大市場搜尋“薄荷”,排名第一的應該就是,從架構到實現一直都是一個人在做,總使用者現在差不多過千萬了,當然現在已經不是一個人在開發了,現在帶領一個小團隊在做,你可以下載體驗下,不過現在依然有很多不足之處,我們一直在努力改進;
3. 文中提到我學習了很多語言,很多人比較疑問,是都需要學這些語言麼?當然不是,我是因為走了不少彎路,有些語言為了工作不得不去學的,不過後來證明學的這些東西對自己是有很大幫助的,但是如果你確定了方向建議你直奔主題,現在社會需要一門精而不是門門通的人才,現在有很多“全棧工程師”的概念,其實都是在建立在一門精的基礎上才去別的領域發展的,所以不要妄想一開始就成為“全棧”,還有如果你對當前做的事很抵觸,覺得一直糾結在功能上,但是又沒法去改變的時候,不妨竭盡全力把當前做的事做好,後面你會發現有事情做自己不知不覺總是會進步的;
4. 很多人找到我部落格,搜尋到我被Facebook邀請,具體見這篇部落格 被Facebook邀請的前因後果 , 雖然這算是對自己技術能力的一個認可吧,但是在技術上遠沒有大家想象的那麼牛逼,我一直在努力提升自己的技術,但是仍然有很多需要學習的,自己也一直在堅持學習,現在也一直想靠自己的技術來改變自己的生活,起碼不拼爹(主要是拼不了),但是後來才感覺到技術並不是一切,千萬別陷進無止境的技術坑裡,有很多事情比技術更重要,這個就等待大家自己慢慢發掘領悟吧。。。