《第一行程式碼》作者郭霖:從Java程式設計師到Android開發者的第一步(圖靈訪談)
郭霖,Android軟體開發工程師。從事Android開發工作四年,有著豐富的專案實戰經驗,負責及參與開發過多款移動應用與遊戲,對Android系統架構及應用層開發有著深入的理解。2013年3月開始,在CSDN上發表Android技術相關博文,很快就獲得了大量網友的好評。短短一年時間部落格訪問量超過50萬次,評價近3000條。榮獲CSDN認證專家,並被評選為2013年CSDN年度部落格之星。2014年,他創作了《第一行程式碼——Android》一書。郭霖現就職於蝸牛移動,繼續從事Android開發工作。
問:你是如何成為一位Android開發者的?
也算是機緣巧合吧。之前我走的是Java Web方向,一次偶然的機會了解到了Android作業系統,我覺得移動領域剛剛起步,潛力很大,而且正好又是使用的Java語言,專業和我非常對口,於是我就踏上了這條路。
問:為什麼要寫《第一行程式碼——Android》這本書?它能為想要成為Android開發者的讀者們解決什麼問題?在看你的書之前,需要有什麼樣的技能和知識做基礎?
我很喜歡看書,也看過很多的技術書,寫書對於我來說算是一個紀念。至於為什麼要寫《第一行程式碼——Android》這本書,我認為基礎還是非常重要的,這本書可以很好地幫助Android初學者入門,也可以幫助有經驗的Android開發人員鞏固基礎。
寫這本書的時候我是完全站在初學者的角度上來寫的,因此只要有Java基礎就可以看。對於Java的掌握程度那當然是越熟練越好了,但最低要求是至少要懂Java的基本語法。學習Java的書籍實在是太多了,我也沒有都看過,說不上哪本好,大家還是自己找找看吧。
問:關於Android碎片化問題,你對開發者們有什麼建議?
碎片化的問題確實讓人非常頭疼,這是由於Android系統開源的特性所必然導致出現的問題。在這種問題上我不敢說我對開發者們有什麼建議,但我自己的做法就是不會為了少部分的使用者群而去編寫大量的相容性程式碼。比如說現在Android 2.x的市場已經非常少了,但有很多的軟體還是一定要去相容這些老版本的系統。我認為這種行為其實在一定程度上縱容了碎片化的產生,也變相導致Android新版本系統普及過於緩慢。當然了,沒有提供一種簡便升級系統的辦法是Android新系統無法迅速普及最主要的原因。碎片化問題即使谷歌都沒有辦法完全解決掉,我覺得作為一名普通的開發者就沒有必要去深入研究了。
問:Android 的後臺推送原理是什麼?和iOS 相比有什麼區別?
後臺推送的原理都是相同的,就是讓客戶端和伺服器保持一個長連線,當伺服器想要推送的時候,就傳送一條訊息到指定客戶端就可以了。雖說原理相同,但Android的推送要更加複雜一些,因為iOS系統中已經內建好了推送功能,只需要使用提供好的API就能簡單地完成推送功能。而Android雖說也提供了類似的GCM服務,但由於在國內使用受到很多限制,所以推送還是要自己做的。不過目前國內也有一些第三方的推送平臺,使用它們的話也可以很簡單地完成推送功能。
問:對於想要從事移動開發的程式設計師來說,iOS, Android, WP各有什麼優勢?哪個未來前景更好?
從開發語言上來講,Java和C#相對簡單,上手成本比較低,這是Android和WP的優勢。但iOS目前也推出了Swift語言,很大程度上緩解了OC上手困難的問題。從使用者群體上來講,Android和iOS基本上佔據了絕大部分的使用者群,WP的使用者群體則相對較少。從軟體的豐富程度來講,Android和iOS都擁有絕對的優勢,WP短期內並沒有趕超的勢頭。因此,未來的前景我仍然認為Android和iOS會相對較好,WP的發展情況較難預測。
問:一直以來,Android的內部功能相比於iOS都更勝一籌,比如先進的應用內分享機制、自由定製的launcher 和widget,等等,但是iOS 7 特別是 iOS 8 帶來的新特性在很大程度上趕上甚至反超 Android,你怎麼看?
我從沒認為Android系統要比iOS更勝一籌,雖說我自己是從事Android行業的,但我並不希望Android可以幹掉iOS。這兩個系統各有各的優勢,共存是非常合理的現象。至於iOS 7和8推出的新特性我認為是很正常的現象,一個系統要是永遠沒有創新,那就只能是等死。這條理論同樣適用與Android身上,所以Android也在一直進步,比如最近Android L系統的推出,在介面效果上甚至也有趕超iOS的趨勢。谷歌和蘋果都是偉大的公司,所以我不會片面的評價他們的系統到底誰比誰強。
問:你覺得Android L的最大亮點是什麼?對於開發者來說,如何適應多屏開發的趨勢?
Android L號稱是Android歷史上改變最大的一個版本,其中多數功能是系統內部的優化,比如ART執行環境、耗電性優化等。與應用層開發者相關的最主要的改變應該就是Material Design,新的UI,新的控制元件,給人耳目一新的感覺。
另外,之所以敢稱Android L是Android歷史上改變最大的一個版本,是因為從這個版本開始,Android系統就不再是僅僅應用於手機和平板上了,而是可以應用在手錶、電視和汽車上。Android L中已經建立了Android Wear、Android TV和Android Auto這幾個分支,也是為Android日後的多元化鋪路吧。至於多屏開發的問題其實是外界人把它想複雜了,Android系統發展到了今天,已經提供了太多不同尺寸螢幕適配的解決方案,相信懂Android開發的朋友們都不會受這個問題困擾的。
問:你認為移動開發人員應該學習使用者體驗設計嗎?如何入手?
所謂技多不壓身,如果你有充足的時間和精力,多去學點東西肯定是有好處的。使用者體驗設計可以在很大程式上幫助開發人員編寫出更優秀的程式,能掌握這個本領的話對自身的能力也是有很大提升的。
問:要成為Android開發高手要經過幾個階段?
這種問題我不敢回答,因為我自己也還不是一個高手。但是就我自身的成長經歷來說,首先,一定要把Java的基本功打紮實,然後就可以學習Android相關的基礎知識了(比如說看《第一行程式碼》)。接著,可以去嘗試編寫一些小軟體,這樣基本就能達到入門水準了。
自己能寫出來程式碼只能算是第一步,接著你還要能讀懂別人寫的程式碼,這是很重要的一門功夫,也是要慢慢培養的。等你掌握了這門功夫後,後面的發展方向就非常寬廣了,可以閱讀你們公司大牛寫出的程式碼,以及各種開源框架甚至是系統的原始碼,不斷充實自己。
問:對於想深入學習底層架構的同學,應該怎樣閱讀 Android 系統原始碼呢?
我覺得閱讀系統原始碼非常有必要遵循的一個原則就是抽絲剝繭、點到即止。應該認準一個功能點,然後去分析這個功能點是如何實現的。但只要去追尋主體的實現邏輯即可,千萬不要試圖去搞懂每一行程式碼都是什麼意思,那樣很容易會陷入到思維陷阱當中。因為這些龐大的系統都不是由一個人寫出來的,每一行程式碼都想搞明白,就會感覺自己是在盲人摸象,永遠也研究不透。如果只是去分析主體的實現邏輯,那麼就有比較明確的目的性,這樣閱讀原始碼會更加輕鬆,也更加有成效。
問:讀完《第一行程式碼》該如何開始下一步的晉級之路?
我覺得基礎知識掌握之後,並沒有統一的進階方向,因為你已經擁有了開發很多功能的能力,後面應該根據公司的業務需求去深入研究相關領域的技術,這個就因人而異了。但只要基本功掌握的足夠牢固,不管是什麼方向的技術,你一定都能勢如破竹地拿下的。
更多精彩,加入圖靈訪談微信!
相關文章
- 李安:從結構工程師到ruby程式設計師 - Mixin network開發者訪談系列 第一期工程師程式設計師
- 李安:從結構工程師到 Ruby 程式設計師 - Mixin Network開發者訪談系列 第一期工程師程式設計師
- 李安:從結構工程師到 Ruby 程式設計師 – Mixin Network開發者訪談系列 第一期工程師程式設計師
- Web 程式設計師開始學習遊戲開發的第一步Web程式設計師遊戲開發
- 程式設計師從0到1創業時,第一步重要的思考是什麼?程式設計師創業
- 從碼農到設計者,從單例模式入手設計程式碼單例模式
- 程式設計師的第一步,你走對了嗎?程式設計師
- 從2012到2021,從土木到程式設計師程式設計師
- 針對Java程式設計師的20個Spring MVC訪談問題Java程式設計師SpringMVC
- Java程式設計師必讀:最新流行的Java開發程式設計技術Java程式設計師
- 從執行緒到併發程式設計執行緒程式設計
- 面試Java後端開發之後想和Java程式設計師談談我的感受面試Java後端程式設計師
- 採訪一個 10 歲的程式設計師,他在 30 萬開發者群裡教程式設計程式設計師
- 程式設計漫談(二十):如何自學程式設計及Java、上手真實開發及轉行程式設計師的建議Java行程程式設計師
- Java從程式設計師到架構師其實並不難Java程式設計師架構
- 《JavaScript DOM程式設計藝術》作者談:原型程式碼與生產程式碼之間的矛盾JavaScript程式設計原型
- 《從程式設計師到領導者之間的微妙之處》程式設計師
- 協助你寫 Python,只是 AI 取代程式設計師的第一步PythonAI程式設計師
- 談談對程式設計師的管理程式設計師
- 駁“低程式碼開發取代程式設計師”論 為什麼專業開發者也需要低程式碼?程式設計師
- java程式設計師入門先學什麼開發者工具Java程式設計師
- 從設計到程式碼:探索高效的前端開發工具與實踐前端
- 好程式設計師Java教程分享Java開發工具程式設計師Java
- Android Camera 程式設計從入門到精通Android程式設計
- Java程式從開發到執行經歷過程Java
- 程式設計師自我發展之路:從態度到方法程式設計師
- 怎麼從初、中級Java程式設計師過渡到高階Java程式設計師?Java程式設計師
- 學習程式設計第一步 零基礎上手Python開發程式設計Python
- 從程式設計師的“劣根性”發散開去程式設計師
- 論跟程式設計師談話的技巧:千萬不要跟程式設計師說,你的程式碼有bug程式設計師
- 從Java程式設計師到架構師,從工程師到技術專家,迷茫之路如何點亮Java程式設計師架構工程師
- 一個程式設計師 && 作者 && 設計師的 2018 年終總結程式設計師
- 【程式設計師翻身計劃】Java高效能程式設計第一章-Java多執行緒概述程式設計師Java執行緒
- 《程式設計師修煉之道:從小工到專家》之程式碼質量程式設計師
- 程式設計師需要重新考慮無程式碼開發的原因。程式設計師
- Java 開發者的程式設計噩夢,為什麼你的程式碼總有 bug??Java程式設計
- Java 程式設計開發Java程式設計
- 程式設計師職業發展路徑圖:從菜鳥工程師到高階架構師程式設計師工程師架構
- 從前端到“錢”端,前端程式設計師的出路前端程式設計師