個人自學編程故事

前言

以前有人留言說想看個人所謂奮鬥史,前天的這篇調查「以產品思惟去作微信公衆號」也顯示這部分人比例還很多,今天忽然想到我在2年前在知乎回答過一個「如何自學Android編程」的問題,今天特意去從新看了一遍,2年多的時間再次看這篇文章勾起了我很多的回憶,很感謝當初的回答,記錄了我人生的一個階段,給我留下了人生一筆寶貴的財富。雖然可能有部分人看過,可是我以爲仍是有必要搬到這裏,給那些還在迷茫的人一些激勵。javascript

問題:如何自學 Android 編程?

想自學android編程,從何入手。2000年本科入學,期間學過c c++ 數據結構,以後就再也沒有用過。本人數學專業出身。求大牛們指點迷津。css

個人回答

瀉藥。我想我是有資格來回答你的問題的,我算是完全的從編程白癡一步步學習過來的。html

以前寫了一篇博客「Android學習之路」被瘋狂轉發,帶起了一陣學習Android的大風,我不曉得具體影響了多少人,可是這篇博客已經成爲Android新手學習必備的資料。不少人問我是怎麼一路過來的,姑且借這個機會說說個人故事吧。java

內容有點長,你們姑且當作勵志小說來看吧,對這些經歷不感興趣的能夠直接看最後「如何自學Android」部分。android

大學

大學上的是全國二流本科,專業主要就是數學專業。大學的總結就是:逃課、掛科、籃球、泡妞、Dota。c++

目前爲止能夠說個人大學是我這輩子過的最爽的時期,大一開始就逃課,好點的理由是我對大學那些課程徹底沒興趣,其實本質上是由於高考太壓抑了,大學以後沒人管了,開始無止境的放縱本身。絕不誇張的說大學四年上的課應該沒有逃的課多。逃課最直接的影響就是掛科,從大一掛到大三,專業課數學分析特麼每一年都掛,後來據說補考考不過要重修,還得交錢,這特麼讓家裏人知道還了得,因而發憤圖強,最終補考每門都以優秀的成績過了。程序員

相信英語四級應該是大學必考吧,英語四級這輩子我都忘不了,我考了三次才過,每次考試說是裸考都褒獎了,大學英語全是吃高中的底子,第一次沒過,少了十幾分,第二次他媽睡覺睡過了,就沒有去考,如今想一想當時的本身真是腦殘,終於在第三次勉強過了。如今想一想幸好當時過了,以後畢業找工做時英語四級是最低要求。作編程這行,英語真的挺重要的,大學的時候必定得想辦法把四級給過了。web

如今想一想大學和編程惟一相關的課程就是C語言了,可是對於咱們專業是屬於全校公開課,最終這門課雖然考過了,可是連i++ 和++i我都弄不明白,可想而知大家應該能猜到我是怎麼過的。面試

因爲高中就開始打籃球,大學時毫無疑問就入了學院籃球隊,並且擔任隊長,因此大1、大二過來基本就是一大半是在籃球場度過的,也是由於籃球征服了我如今的老婆。大二下學期周圍的人都在玩Dota,因而也開始了遊戲之路,籃球也基本放棄了,那時候玩的瘋狂,記得最長的一次和同窗在網吧連續包夜兩星期,不過白天是回來睡覺的,否則估計早猝死在網吧了。ajax

轉眼間大四了,這一年終於在我老婆的監督下再也不掛科了,並且在畢業前的最後一次評比居然拿到了三等獎學金,真是受寵若驚啊,後來錢也被狐朋狗友們拿去腐敗了。周圍的同窗都在準備考研,我卻惟獨對考研沒興趣,自始至終都沒有爲考研花過一分錢,買過一本書。後來證實個人決定是正確的,周圍的小夥伴放棄的放棄,考不上的考不上,考上的後面也沒見混的有多好,固然若是能考上好的學校仍是頗有幫助的。

畢業

又一轉眼畢業了,去參加了學校幾個招聘會也是醉了,全是沒聽過的小企業,一去參觀都是各類廠房,根本不須要任何學歷,是我的出點力均可以乾的那種,要麼就是各類電話銷售。。。那時候真的有點急了,大學四年,畢業一份像樣的工做都找不到,回去怎麼面對鄉親父老。

三月份的時候一家IT測試培訓機構來作宣講會(具體什麼名字我就不說了,省得認爲是廣告),聽完以後就說培訓以後包就業,培訓地點在大上海的最中心,固然是自費,可是能夠工做以後分期付款。那時候哪知道測試是幹嗎的,更不懂IT是幹嗎的,回來就查了下這個機構確實存在,網站也有的,知道不是騙子遍決定來上海試一試。當時下定決定要來上海培訓以後,幾個狐朋狗友絕不猶豫的跟着我一塊兒來了,總共應該是7我的,決定以後沒幾天便毅然而然的揹着大包小包來到上海,咱們之中一部分是一次性付費,另外一部分是分期。後來證實咱們當時來上海的決定是正確的。

培訓之路

這裏並非宣傳你們去培訓,只不過被工做所逼,學校很差,大學也沒學啥真本事,稍微有點出路都不會去培訓!

培訓的日子仍是蠻輕鬆的,一週就上四天課,朝九晚五,畢竟你們家庭都不富裕,家裏辛苦攻讀了四年大學,畢業還要再交錢去培訓,打內心你們都很愧疚。一開始卯足了勁要好好學習,可是堅持了沒多久就有點放鬆了,可是好歹也是都有學習的。

培訓的時候算是接觸了點編程吧,課程有C語言、Oracle、Linux,而後其餘都是軟件測試的理論,其實都是很是基礎的東西,算是帶你入行吧,Orace就學習一些基本SQL語句,Linux就學了幾個命令,可是起碼知道原來電腦能夠幹這麼多事,以前還一直覺得電腦就是用來看電影、聊天、打遊戲的呢。如今回頭看給我一週的時間我能夠看完整個培訓課程,可是當時的培訓週期要四個月。

第一份工做「SunNet」

7月份拿到畢業證書就直接來了上海,四個月的時間對於我來講實在太漫長了,我等不及了,因而在課程還有最後一個月的時候我提早出來單獨找工做,當時培訓老師說工做後的工資大可能是3500左右,我以爲我學的比別人好,因此必需要比別人高,作好了長期準備面試的過程。沒想到面試第一家就直接錄取了(後來才知道原來是公司的測試懷孕在家,急需測試),公司名叫SunNet,中文名山諾,工資4000。收到offer的時候欣喜若狂!

真正接觸編程

以後便在SunNet正式入職,工做就是測試,可是就在SunNet我才真正的接觸了什麼是編程。SunNet是一家小型外企,總部在休斯頓,上海這邊主要是研發部。研發人員總共不到10人,主要業務是以web爲主,使用語言是.NET。固然個人職責就是web測試了,工做卻是沒什麼難點,主要測試就我一個,一進來就有好幾個項目等着我測試,還好本身是數學專業,邏輯思惟能力還不錯,加加班總算能按時完成任務。

三個月的時間順利轉正,以後的某一天偶然得知公司一開發人員工資比我高2000,其實也就比我早畢業一年而已,才知道原來開發和測試工資差距這麼大,因而當時就下定決心要轉行作開發,因此提及我從測試轉行開發的緣由是由於錢,一開始說由於興趣堅持下來的都是扯淡。。。

編程之路

因爲在公司個人主要任務仍然是測試,任務也挺多,基本天天要9點能到家。下定決心以後只能利用業餘時間來學習,因爲公司主要業務是.NET,很天然我一開始學習的方向即是.NET,後來才瞭解到.NET是基於C#的,學習.NET以前必需要先學習C#,因而像公司借了一本C#學習資料,就這樣學習了大概兩週吧,還仔仔細細作了一大堆筆記。以後以爲語法學的差很少了,便又借了本.NET的書開始學習web開發。

可是web開發遠沒有學習一門語言這麼簡單,後來才知道web開發涉及到html, css, javascript, ajax, database等,範圍太廣了,因而爲了效率,我只能每一項掌握住基礎,因而網上搜索找到 w3school 在線教程 這個好東西,裏面的東西都是基礎的,我把教程整理到手機裏,天天上下班的地鐵上,吃飯的時候,回家的時候等等利用一切時間來學習,也是差很少大概2周的時間掌握了html, css, js的一點基礎,接下來準備正式學習.NET的時候,被咱們老大知道我正在學習開發,咱們老大叫Aaron,是一位典型的程序員,比較胖,人品超好,知道後不建議我學習.NET,說.NET出來都十來年了,已經很成熟了,不少人在學校都有.NET教程,如今學習已經比別人晚了。如今移動開發剛嶄露頭角,也沒多少人會,建議我直接學習移動開發。真是一句點醒了我啊!!

移動開發

聽了老大的建議,因而放棄了.NET,開始準備學習移動開發。那時候是12年初,整個移動互聯網也是剛起步階段,iPhone4仍是很是火的時候,毫無疑問我把目標鎖定在了iPhone開發上。

此次有經驗了,知道了iPhone開發首先確定得有一門編程語言的,瞭解到是Objective-C,因而又從公司借了一本OC的書(公司書不少,老大每個月都會買來好多書,雖然看的人不多),又花了將近一週的時間來了解了基本語法,由於以前學了C#,此次沒徹底看完的狀況下想直接上手實踐。正打算學習的時候,才知道iOS開發必須得在mac上才能夠,也就是說我得本身有臺mac電腦,雖然當時公司是有的,可是回家的時候不能繼續學習練習,確定影響效率的,一臺mac對於當時的我簡直是奢侈品,雖然如今也依然是奢侈品,但當時根本不可能買得起。因而只有放棄iPhone開發轉向Android(後來才知道有虛擬機這東西。。。)

Android學習之路
幾經波折,終於才肯定本身的方向,這期間已經耽誤了很多時間,走了很多彎路了,可是仍然阻擋不住我轉行開發的腳步。公司關於Android的書居然沒有,因而我本身親自買了一本Android書籍,叫「瘋狂Android講義」,做者是李剛!!不說這本書有多好吧,這本書比較厚,很是厚,因此講的一些基礎比較細,新手按照上面的徹底能夠看懂,如今不知道這本書內容更新了沒,以前內容對於如今來講有點老。這個時候應該是12年的3月份,提及來也巧,這個月公司恰好接了個移動端項目,iOS有人來作,可是公司上下沒有會Android開發的,其餘人都有本身的項目在忙,老大看出個人興趣,就問我想不想試一下,我固然欣然贊成了,只此就開始正式的邊作邊學習Android。

那個時候的測試任務仍然很重,因而我只能擠出時間來作這個項目,基本是每晚以及週末都會自動加班來完成這個項目,如今看來那個項目真是太簡單不過了,快的話一週都不要就能夠搞定了,但在當時我摸爬滾打了一個多月總算搞定了。

作完這個項目本身有了點信心,但當時本身的主要任務仍是測試,本身開發的時間是少之又少,因而下定決心離職找一個專門作Android的工做。說明緣由以後老大很理解,也是建議我想作開發的話就放手去找一個專門作開發的職位,這樣進步會比較快。

第一份工做能遇到個人老大Aaron,真是個人福分!

薄荷

12年4月底離職以後,我便開始在家裏準備面試,投簡歷,因爲本身的基礎很薄弱,以前的Android經驗也很是少,那時候說是招聘Android職位,可是不少公司面試基本全是Java內容,並且我能感覺到工做內容和Android相關的也比較少。來薄荷面試的時候感受很好,包括CTO、CEO的面試都感受不錯,果真沒幾天就收到offer,來之不易的機會,很是珍惜。

12年5月中入職薄荷,大家覺得我到了薄荷以後Android之路就一路順風?錯了,路更艱難。我是薄荷入職的第一位Android工程師,薄荷在那時候只作iOS平臺的App,事實證實這種作法不可取,包括BOSS後面也親自說投資人來投資的時候一看數據這麼少,後面作了Android平臺以後用戶數據才慢慢上來,畢竟仍是Android用戶基數大。

來薄荷的第一個任務是作聯想TV的一個視頻App,很蛋疼,折騰聯想的SDK,遙控器等,好歹App功能比較簡單,試用期間完成的還不錯,就這樣順利轉正了。轉正以後作了第一個Android App,叫減肥食物庫,功能與頁面所有Copy iOS版的App。這個時候一大堆沒作過的東西所有涌來了,網絡庫、http、api對接、組件定製等等,那個時候沒有像如今各類資料、開源庫一大堆,公司也沒人能給指導,只有硬着頭皮慢慢來,爲了能把進度遇上去,上線前夕曾經連續在公司通宵三天三夜,累了就在公司趴一會,這輩子就經歷過這一次,雖然項目最終也拖延,但總算在接受範圍以內上線,這在當時是第一個試水Android平臺的App,惋惜的是上線以後表現很差,沒有達到預期的效果。

Ruby、Rails

這個App試水錶現很差以後,公司決定暫停Android業務,主攻iOS平臺。個人位置就變得很尷尬,CTO找我談話但願我能轉作Ruby,Android業務會暫停,咱們後端的api所有是基於Ruby語言的,雖然當時內心有點不情願,可是沒辦法,爲了避免丟掉工做我只得硬着頭皮作下去,因而就開啓了個人Ruby之旅。

學習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

作ruby的這段時間非常快樂,付出了這輩子最艱辛的努力,換來了點小小成果,我喜歡ruby語言,到如今爲止都認爲ruby是最優雅的語言。可是Android在我內心一直都有一個位置,從未放棄過。直到13年5月的時候,這個時候Android份額近乎瘋狂的增加,公司不得不開始注意Android市場,因而公司打算推出Android版app,因而做爲公司惟一的Android程序員,CTO再次徵求個人意見,問我想繼續作ruby仍是作Android,雖然我更喜歡ruby語言,可是從心底我更喜歡客戶端開發,和語言無關,客戶端是用戶最能感知的一部分,作出的東西更有成就感一點,我就在等待着這個機會,這一刻我絕不猶豫的選擇繼續作Android。

迴歸Android開發的我一我的開發新的App,單槍匹馬,通過以前的一系列挫折,忽然感受再沒有更困難的了,一我的摸索架構、克服難題,App一推出便一直快速瘋狂的增加,目前薄荷App總用戶數已經破千萬,公司也順利融資,業務發展愈來愈好。

後話

因爲一我的一步步過來,我深知這其中的不易,以後本身一直堅持寫博客,除了本身的積累外,還但願幫助更多的人,因此如今大家能夠看到無論是個人GitHub,博客,微博仍是微信公衆帳號都很樂於分享,但願本身走過的這些彎路大家能少經歷,雖然最終我也到達了終點,可是若是能有直路可直達最好不過了。

總結

上面囉囉嗦嗦的敘述個人這些陳年經歷,看似和題主的問題無關,其實有很大關係:

  • 1.若是你是非科班畢業想要轉行編程,看了個人經歷你必定頗有信心與動力,我能,你同樣能,況且我中間走了這麼多彎路;

  • 2.若是你接觸過一些數據結構、編程語言之類的,想要學習編程,想題主這種,你更應該有信心,你比那些非科班的人已經多了一些基礎,你要作的只是堅決信念,堅持走下去;

  • 3.不要感慨上天的不公平,一路走來很悲催,走了太多的彎路,遇到了太多的困難,都是我這輩子難以忘記的坎坷,但同時我是幸運的,個人前任老大Aaron以及現任CTO都深深的影響着我後來的職業發現,我在薄荷的一些小夥伴們對個人幫助,我女友無數個日夜的理解與支持,上帝在給你製造坎坷的時候總會對你有些眷顧;

  • 4.若是你準備或已經在作開發的人員,沒有信心或動力,又或是對將來迷茫的時候,姑且當作一篇勵志小說來看,你要作的就是作好你當下在作的事,相信你的付出必定能有所收穫;

建議

評論裏有人說是在校生,想要給點建議,那就以一個反例的身份給出過後的一些建議吧:

  • 1.天天花1小時看書,難的不是1小時,難的在堅持;

  • 2.最好不要掛科,由於掛了你仍是得花時間補回來;

  • 3.英語對編程來講很重要,試着習慣英語閱讀;

  • 4.數據結構和算法要學好,這算是對編程來講最重要的課了,之後不見得能用得上,但用的時候起碼你有印象;

  • 5.大三或者大四必定要去實習,對於編程來講經驗仍是比較重要的,實習經歷比你那些理論要有效的多;

  • 6.找個女友吧,不是說工做了你就找不到了,而是工做以後從事編程不多有時間和精力去接觸別的女孩,因此能夠的話在畢業前找個能夠同甘苦的女友吧;

  • 7.第一份工做很重要,由於你會受一些周圍同事、公司氛圍的影響,我爲本身遇到Aaron、Vincent而感到幸運,他們倆是我目前爲止最尊重的兩我的;

如何自學Android編程

最後才應該是題主最須要的:

  • 1.「Android學習之路」前面說過個人這篇博客是Android新手必備資料;

  • 2.書不在多,適合你就好,這裏推薦一本Android和兩本Java書籍吧;

    • 「第一行代碼」:郭霖大神的著做,CSDN博客專家;

    • 「Thinking In Java」:Java經典書籍,沒必要說;

    • 「Effective Java」:Java進階必備書籍;

  • 3.有些人一開始看書也有困難,不要緊,那就去網上看視頻,結合視頻和書一塊兒看,邊看邊敲,推薦下Mars老師視頻,包括java基礎以及Android篇都有:

    • Java4Android.zip_免費高速下載

    • 極客學院的視頻

    • 慕課網的視頻
      口味不一樣的人可去各大網站自行搜索適合本身的教學視頻。

  • 4.多去混GitHub,目前最流行的開源社區,多參與開源項目,慢慢試着讀牛人們的代碼,時機到的時候本身也能夠爲開源社區貢獻力量,能夠這樣說在GitHub上認真混一年,比你在大學四年學的東西要多的多;

  • 5.關注一些Android界不錯的博客:

  • 6.善於利用搜索引擎,從用Google作起,學會英文關鍵字搜索,有問題第一時間想到去搜索而不是去請教別人;

  • 7.關注個人微信公衆號:AndroidDeveloper「googdev」,目前應該算是國內最有影響力的我的Android公衆號了,我會常常分享一些Android方面的原創乾貨,但願能繼續幹着本身喜歡的事,幫助更多的人。

你們都有了以上相同的教程,可是人和人之間的區別在於:別人有顆更強大的心裏,可怕的是比你聰明的人比你還要更努力!!

當你下定決心,準備前行的時候,剩下的只有堅持了!

相關文章
相關標籤/搜索