1. 程式人生 > >專訪任玉剛:從菜鳥到資深工程師的進階之路

專訪任玉剛:從菜鳥到資深工程師的進階之路

任玉剛,百度公司Android資深工程師,《Android開發藝術探索》作者,熱愛分享和開源,常年活躍在CSDNGithub。除此之外,他還是CSDN部落格專家,2014十大部落格之星。從一名菜鳥演變為資深工程師,在他看來,也有自己的辛酸歷程,儘管他已成為一名資深工程師,但他仍然不敢自稱為“高手”,因為技術是無止境的,對技術應該抱有一顆敬畏的心理。


任玉剛,百度公司Android資深工程師

CSDN:請先自我介紹下,目前的工作領域以及公司。

任玉剛:大家好,我是任玉剛(微博),是一名Android程式設計師,目前我在百度公司參與百度手機衛士的開發工作。我時常活躍在CSDNGithub

上面。

CSDN:從最初的Android菜鳥到如今的Android高手,這一路走來你有哪些辛酸歷程?給你最大的感悟是什麼?

任玉剛:雖然我在Android開發技術領域有了一些自己的理解,但是仍然不敢自稱為“高手”,因為技術是無止境的,我們對技術應該抱有一顆敬畏的心理。

目前我從事Android開發工作已經有3年了,和大多數Android開發者一樣,我也是一步一步過來的。尤其是我12年剛接觸Android開發時,由於缺乏專業的指導,整個學習過程基本上都是以摸索為主,這個階段就會感覺進步很慢,甚至有時候還會犯一些比較低階的錯誤,比如曾經用View去post一個runnable,然後在run方法中做耗時的操作。這種摸索的學習方式在一年後有了改善,畢竟摸爬滾打了一年,我也漸漸有了自己的學習方式和心得體會,就這樣持續努力地學習著,到目前為止可以算是對Android應用開發有了一個不錯的理解吧。

如果問我這三年的學習生涯中最大的感悟是什麼,那我想說:“應該是學習路線和技術書籍的缺乏吧“。為什麼這麼說呢?

首先說學習路線。Android開發給人的感覺是門檻很低,因此有不少人會說Android很簡單,實際上Android開發即簡單也不簡單。簡單是因為它入門快、上手簡單,不簡單是因為Android的知識點比較瑣碎,如何從瑣碎的知識點中理解Android的本質並形成一個完整的知識體系,這是不簡單的。相信不少開發者會有這種感覺,那就是覺得Android的好多知識點自己都懂,但是又不是特別懂,這點在面試中體現地比較明顯,“我做應用開發完全沒問題,但是大公司的技術面試卻很容易失敗”這種感覺相信很多人都會有,這就是碎片化的知識未形成一個完整的體系的表現。如何對Android建立全面的理解?這需要一種有效的學習方式,在學習過程中需要知道哪些知識點需要深挖、哪些知識點需要融會貫通、哪些知識點了解即可。有關Android學習路線這是一個深入的話題,並且有可能沒有最佳的學習路線,因人而異。我結合自己在Android應用層的學習過程,描述了一個適合我自己的學習路線,大家可以適當參考下:

http://blog.csdn.net/singwhatiwanna/article/details/49560409

然後說一下技術書籍。如果大家看了上面的那篇Android學習路線,就會發現那上面提到的很多知識點都有一定的難度,並且也沒有相應的書籍去專門介紹這些知識點,我曾經翻遍了圖書館的Android書籍,也沒有找到一本書有講述View的滑動衝突這方面的內容。所幸的是國內的Android技術圈比較活躍,網路上會有一些比較不錯的技術文章可以供開發者提高Android開發水平,但美中不足的是,不少技術文章都比較零散並且也沒有那麼全面。這個時候一本好的技術書籍,它的作用無非是巨大的。

CSDN:為何想到寫《Android開發藝術探索》這本書?契機是什麼?

任玉剛:相信很多人已經閱讀過《Android開發藝術探索》並且也很理解我寫這本書的初衷,因為我在前言中做了詳細的描述。我在前面有提到,國內的Android開發者在提高的過程中缺乏合適的學習路線和技術書籍,主要是市面上入門書籍太多了,但是我們不否認入門書籍為Android技術普及所做的巨大貢獻,然而僅僅通過入門書籍的確無法進一步提高開發者的技術水平。為了讓Android開發者更好地提升自己的技術,於是我寫了這本書,讀過書的朋友都知道,書中很多知識點都是新穎的、網路上無法搜尋到的。

從內容上來說,《Android開發藝術探索》是一本Android進階類書籍,採用理論、原始碼和實踐相結合的方式來闡述高水準的Android應用開發要點。書中從三個方面來組織內容。第一,介紹Android開發者不容易掌握的一些知識點;第二,結合Android原始碼和應用層開發過程,融會貫通,介紹一些比較深入的知識點;第三,介紹一些核心技術和Android的效能優化思想。可以看到,書中通篇幾乎沒有入門知識,更加側重於Android知識的體系化和系統工作機制的分析,通過這本書的學習可以極大地提高開發者的Android技術水平,從而更加高效地成為高階開發者。

有很多讀者和我反饋,說這本書適合面試,很多公司的一些看起來很難的面試問題書中都有提及。但是我寫這本書的目的不是為了讓大家更好地面試,而是更好地提高技術從而成為高階工程師。

CSDN:寫這本書期間有沒有遇到過困難,又是如何克服的?

任玉剛:寫書的過程是艱辛的,遇到最大的困難就是難以堅持。由於白天需要上班,晚上有時候還有加班,因此寫書的時間就只有週末和每天晚上下班後了。大概書寫到第4章的時候,有時候寫著寫著就會突然覺得好難受,壓力好大的感覺,但是想到這本書對廣大Android開發者的意義,想到我寫這本書的初衷,我就會覺得這件事必須堅持下來,很多時候我們缺乏的就是堅持。回想起寫書的過程的確很辛苦,但是書出版後我收到了很多讀者對我的反饋,其中最多的反饋就是類似於“謝謝你寫了這本書,讓我很多知識點都豁然開朗”這種了,我很欣慰,總算心願得以完成。可能有人說,寫書是為了賺錢,這個瞭解的人都知道,通過寫技術書籍來賺錢其實是不划算的。就我來說,寫這本書的目的是為了更好地提高Android開發者的技術水平,同時傳播我的技術,我是一個熱愛開源、熱愛分享的Android程式設計師。

CSDN:在你看來,Android開發者在學習過程中最棘手的問題是什麼?

任玉剛:其實棘手的問題有很多,這裡列舉幾個,比如自定義View、滑動衝突、IPC、原始碼閱讀等等,Android開發者都深有體會,自定義View算是一個比較難的話題了,滑動衝突就更不用說了,很多開發者都搞不清楚如何處理滑動衝突。IPC的話主要是指AIDL和Binder相關的一些東西,這個在Android開發中真的很重要,至於原始碼閱讀這個就更難了,很多人估計會覺得無從下手,其實這些都是可以理解的,因為它的確有難度,但是它們都是可以克服的。

自定義View和滑動衝突其實歸根結底就是View相關的東西,把諸如View的滑動、事件分發以及View的底層工作原理搞懂,自定義View和滑動衝突就可以很好地解決了。

這裡再說一下原始碼閱讀的事。首先要學會下載原始碼,推薦的下載方式是從Google的源中把整個aosp的mirror都下載回來(大約80G,需翻牆),然後想看哪個版本就checkout哪個版本,還可以體驗下編譯原始碼的過程,這個事情看起來複雜,其實做起來很簡單,大家可以嘗試下。原始碼下載回來後,就可以閱讀了,怎麼閱讀呢?給兩個建議,第一:不要糾結太多的程式碼細節,第二:選擇一個自己感興趣的入口看下去。很多人一上去看原始碼就糾結程式碼細節,Android原始碼是非常複雜的,糾結細節只會讓自己望而卻步,糾結多了就“走火入魔”了。因此看原始碼前期主要以整體流程為主,儘量把系統的工作機制搞懂。為什麼要選擇一個入口看下去呢?因為Android原始碼很龐大,從哪裡開始呢?我的建議是找一個自己感興趣的入口,比如Activity的啟動過程,從startActivity方法看下去,直到底層的AMS。

再強調下,閱讀Android原始碼是一個合格的Android工程師必須要掌握的技能,不閱讀原始碼是不可能理解系統的工作原理的,不理解工作原理就無法真正地提升技術水平。

相關推薦

專訪資深工程師

任玉剛,百度公司Android資深工程師,《Android開發藝術探索》作者,熱愛分享和開源,常年活躍在CSDN和Github。除此之外,他還是CSDN部落格專家,2014十大部落格之星。從一名菜鳥演變為資深工程師,在他看來,也有自己的辛酸歷程,儘管他已成為一名資深工程師

大數據新手的0基礎學習路線,到高手的成長

ges ESS 對數 建數據庫 大數據處理 數據處理 tps 並且 路線 大數據作為一個新興的熱門行業,吸引了很多人,但是對於大數據新手來說,按照什麽路線去學習,才能夠學習好大數據,實現從大數據菜鳥到高手的轉變。這是很多想要學習大數據的朋友們想要了解的。 今天我們就來和大家

慕課 零到一spark(一)

1.RDD RDD是spark特有的資料模型,談到RDD就會提到什麼彈性分散式資料集,什麼有向無環圖,本文暫時不去展開這些高深概念。 (0)隨便找個點理解以下 最重要的記住,RRD是不可變的,也就是說,已有的RDD不能被修改或者更新,但可以從已有的RDD轉化成一個新的RDD. 上面的

推薦書單2.0測試工程師

18年年初,寫過一篇部落格:推薦書單1.0:測試工程師成長之路。裡面包含了軟體測試基礎方法論、UI自動化測試、效能測試、python、協議、資料庫、中介軟體、泛產品經理相關的一些書單。 今年我也算看了一些書,型別比較雜,散文小說、雞湯、邏輯思維、社科等等型別,技術類的大概佔比一半左右,其中中介軟體和後臺相關

滴滴技術專家讓你的職業迷茫哪來回哪去

今天給大家推薦的是《Android開發藝術探索》的作者(滴滴技術專家)任玉剛老師的直播課,感興趣的同學可以通過文末的方式參與本次活動(喜歡的同學歡迎轉發)。 我是任玉剛, 我來我想說。 01   收到過無數同學的私信, 給他們鼓勵,卻解不了他們的迷茫。 程式設計師的苦味,我們一口口嘗過。 不同的人

後端成長到架構

有不少初學者問到,我想學習後端,但是又不知道該怎麼學,所以我決定把這幾年的經驗和經歷整理成一篇文章,分析後端的路該怎麼走,先說明下面僅僅是個人心得,也許與外面的理論有所不同。(文章最後面會附上學習路線地圖和一些自己看過的書籍) 後端任務其實是實現接收輸入響應輸出 後端初接觸 後端首先需要學習的是html

【讀書】王興權變大咖的高效學習方法

過程 pan 1-1 == mil ros 聊天 交流 ref 【博客導航】 【讀書導航】 鏈接 羅友霸王課搜索 王興權:從菜鳥變大咖的高效學習方法(一、二、三) 筆記 學習白皮書,通論,抄書,編書,抄寫目錄,按目錄結構編寫書。3~6個月,深究一本

《jmeter入門到系列》

ext spa 解決 jmeter 目錄 簡單 blank 則表達式 jmeter使用 jmeter是我從事軟件測試工作以來接觸的第一個測試工具,也是耗費時間精力最多的一個工具,當然,學習jmeter過程中,由於知識儲備不夠,也順帶學習了很多其他相關的一些知識。 一直有個想

Java美[到高手演變]系列博文閱讀導航

隨著博文越來越多,為部落格新增一個導航很有必要!本部落格將相繼開通Java、CloudFoundry、Linux、Ruby等專欄,都會設立目錄,希望讀者朋友們能更加方便的閱讀!在閱讀的過程中有任何問題,請聯絡:egg。QQ群:169480361(請在本博文下面留言,驗證資訊為

的Xamarin.Forms前行——按鈕的按下擡起事件的監控(可擴展至其他事件)

override 點擊 names div prot tco nco nbsp 容易 提問:監控按鈕的點擊事件,可以通過按鈕的Click事件,或者Command綁定,那麽如何監控按鈕的按下與擡起,或者移動,長按,雙擊等事件? 解決方法:各個平臺自定義渲染依賴註入. 共享項目

的Xamarin.Forms前行——實現按鈕的字體圖標(可擴展)

方法 所有 blank render 背景圖片 list cer 元素 ren 在實際的APP中,帶有圖標的按鈕用到地方還是蠻多的,字體圖標往往能更快更生動的傳達信息,並且相對於背景圖片,字體圖標也有著絕對的優勢,所以實現按鈕的字體圖標是值得嘗試的. 實現方法:各平臺自定義

0到1,從無到有八年阿里Python開發工程師

如果你只能選讀一門程式語言,那麼除了 Python,還是 Python。     小編有個在阿里工作的朋友,這兩天和他在聊Python的發展,其實Python已經在不知不覺中發生了非常大的改變。Python這門語言十分高效,只要是和自動化有關係的,它可以發揮出巨

阿里雲喻義十年牧碼,碼農走向工程師的進化

有人會問,碼農和工程師有區別嗎?有什麼區別?相信每個人都有不同的理解。 “你敲下的每一行程式碼,你想過他會如何在計算機上執行嗎?你想過你的這一行程式碼會產生多少cache miss嗎?你想過你的這

程式設計師的成長(五)——說說2015年,暢談一下2016年

時間從不等人,一晃半年多的時間沒有寫博文了,實在慚愧。今天特別的清閒,簡單的說一說2015,暢談一下2016。 2015年上半年一直瘋狂的寫程式碼,做專案,雖然當時每天感覺有點累,但是每天都有新的收穫和進步,每一步都很踏實。從15年6月份開始出來工作,在國企單

android—— AsyncTask的使用

        這個方法中的所有程式碼都會在子執行緒中執行, 我們應該在這裡去處理所有的耗時任 務。任務一旦完成就可以通過 return 語句來將任務的執行結果返回,如果 AsyncTask 的 第三個泛型引數指定的是 Void,就可以不返回任務執行結果。注意,在這個方法中是不 可以進行 UI 操作的,如果

java----職業的銳變

背景      看題目就知道,沒什麼乾貨。其實就是分享下職業道路過程的各個選擇和如何填坑。希望後進的同行閒暇時可以看到此文,會對自己的職業方向有一定的判斷。    關於選擇什麼語言方向比較好。網上已經有很多爭論了,說實在,如果能有這樣的精力去猜測和判斷,應該去選擇抄股

一個的資料結構學習(棧篇)

棧的基本操作如下: 相關結構體: typedef int status; typedef struct { SElemType *base; //在棧建立之前和銷燬之後,base的值為NULL SElemType *top; //棧

安卓-RelativeLayout(相對佈局)

1.android:layout_alignParentLeft="true"//父佈局中左對齊2.android:layout_alignParentRighf="true"//父佈局中右對齊3.an

程式設計---正在努力

  本教程的目的是告訴你如何使用ATL建立一個COM伺服器,並使用Visual C++和Visual Basic程式來分別呼叫這個伺服器。我並不想深入探討COM的細節,也不想讓你深陷於IDL之中。這一教程只是為VC++的新手程式設計師設計的,告訴他們利用ATL來建立一個COM

程式設計師的成長(二)——時間都去哪兒了

距離我的上篇部落格菜鳥程式設計師的成長之路(一)已經過去六個月的時間,又到了總結收穫的季節。在漫長的六個月裡,發生的了很多的事。殘存在大腦中的記憶(不是腦殘),已經不能將我帶回到去年的九月份,想問自己一句:時間都去哪兒了? 翻閱點點滴滴的筆記回憶這六個月,一切又都歷歷在目。通過時間軸,請您跟我一起回憶過去的