Android开发初期之后怎么提升?怎么才能叫精通?方向在哪?
先mark一下,好多人我發(fā)現(xiàn)始終停留在兩三年的水平上沒有突破。
另外還有一個(gè)誤區(qū)就是越底層越牛逼
第三個(gè)就是,我認(rèn)識(shí)的大部分所謂的做過rom開發(fā)的對(duì)framework的熟悉程度遠(yuǎn)不如我一個(gè)一直做應(yīng)用的,大概是見木不見林,始終在那一個(gè)小角落里修修補(bǔ)補(bǔ),不會(huì)橫向,也沒有縱向延伸。另外這里很重要的一點(diǎn)是基礎(chǔ),比如你是否有*nix基礎(chǔ),可以幫你快速理解很多東西
晚上有時(shí)間的話把這三塊展開說一下
---------------------分割線,這么多評(píng)論,壓力好大-----------------------
首先第一個(gè)問題:為什么很多人會(huì)一直停留在兩三年的水平上,而后一直在重復(fù)以往的經(jīng)驗(yàn)?
我認(rèn)為最主要的一點(diǎn)就是主觀能動(dòng)性,或者說興趣,如果你對(duì)Android開發(fā)沒有太大的興趣,那么還是盡早換方向吧。有了興趣,然后就是要有一個(gè)比較正確的鉆研路線,不要這也搞那也抓,最后什么都沒精通又好像什么知道。一個(gè)很好的例子就是我用過很多庫啊
我覺得一個(gè)比較好的路線是,把日常開發(fā)常用的各種系統(tǒng)庫,開源庫,代碼好好研究一遍,比如我用了butternife就要了解背后的apt,以及apt衍生出來的一系列庫比如Hugo。當(dāng)然這大部分情況是初級(jí)進(jìn)階的第一步。這個(gè)階段應(yīng)該是盡量很好的用技術(shù)完成業(yè)務(wù)需求。
第二個(gè)階段,我覺得可以嘗試去了解Android Framework比較細(xì)節(jié)的一些東西,比如activity啟動(dòng)流程,順便分析清除Activity stack的管理,比如了解Android的資源加載機(jī)制,順便了解aapt是如何打包Android資源的;又比如Java的類加載機(jī)制,這里配合資源的加載機(jī)制,很自然的就可以去了解Android的hotpatch機(jī)制,插件化的實(shí)現(xiàn),開一些這方便的開源庫或者自己擼一個(gè)也就自然而然。這里我比較推薦
@Gityuan 同學(xué)的一系列博客,分析Android各種源碼很不錯(cuò)。這個(gè)階段你可以用技術(shù)反哺業(yè)務(wù),比如插件化和hotpatch就可以讓業(yè)務(wù)更加靈活。第三個(gè)階段,橫向擴(kuò)展,到這個(gè)階段并不是說比第二個(gè)階段更加高級(jí)了,而是對(duì)第二個(gè)階段的一些補(bǔ)充,比如你是不是可以了解一下web開發(fā),這樣做hybrid開發(fā)的時(shí)候就會(huì)更順手。是不是要了解一下這么火爆的ReactNative&Weex技術(shù),甚至可以把他們的一些思想拿過來自己用,比如我司內(nèi)部就有很多項(xiàng)目是用了JSCore和CssLayout來實(shí)現(xiàn)一些更輕量的動(dòng)態(tài)化技術(shù)的。正如科學(xué)領(lǐng)域很多重大貢獻(xiàn)都是在交叉學(xué)科領(lǐng)域出現(xiàn)的。技術(shù)上到了這個(gè)階段甚至可以做到技術(shù)影響業(yè)務(wù),技術(shù)驅(qū)動(dòng)業(yè)務(wù)。
第二個(gè)問題:技術(shù)越底層越牛逼么?
其實(shí)大部分技術(shù)都是為了滿足業(yè)務(wù)需求,我認(rèn)為這種場景下,是能越好的反哺驅(qū)動(dòng)技術(shù)才越牛逼,和底層不底層沒關(guān)系。比如你app做的非常牛逼,交互和性能非常好,直接帶動(dòng)業(yè)務(wù)飛速發(fā)展,我覺得你并比能做底層人差,術(shù)業(yè)有專攻,以你的態(tài)度和能力,即使去做底層開發(fā),也是沒有問題的。
第三個(gè)就是為什么很多做rom的反而對(duì)Framework不是很熟悉
我覺得這個(gè)和第一個(gè)問題有些重復(fù),興趣是很大的原因。另外一個(gè)問題就是,如果沒有*nix的編程基礎(chǔ),底層的一些東西比如binder機(jī)制,比如runloop可能會(huì)有一些吃力。這里服務(wù)端的同學(xué)可能會(huì)有一些優(yōu)勢(shì),他們對(duì)rpc和一些系統(tǒng)調(diào)用相對(duì)熟悉一些,這也是為什么很多后端轉(zhuǎn)到Android的同學(xué)可以快速精通。
------啰啰嗦嗦寫這么多,請(qǐng)大家來拍磚-------
------最后,我再加一條廣告-----
蝦米音樂Android在招人,如果你想來和我們一起打造一個(gè)有情懷的產(chǎn)品,那么歡迎您來杭州加入我們的團(tuán)隊(duì)。(好多同學(xué)在私信我要求,大概說一下是招P6+,P7的)
是的,我們正在努力,為了打造一個(gè)精品。
請(qǐng)私信或者微信聯(lián)系我 編輯于 2016-09-25 田元 Android學(xué)習(xí)群:156562475,已開源nono-android
我猜你這個(gè)階段是把大部分demo都能跑通了吧,常見的控件也會(huì)了吧。
但是,你現(xiàn)在還是會(huì)的太少了。
就是會(huì)用Linearlayout/relativelayout/button/textview/edittext/imageview(的很少一部分屬性)來畫一些簡單的界面了吧。
就是會(huì)用activity/fragment(的生命周期這么少的知識(shí))來讓ui在手機(jī)里面顯示出來了吧。
就是會(huì)用asynctask(這么簡單的一個(gè)過時(shí)的類)來網(wǎng)絡(luò)請(qǐng)求了吧。
就是會(huì)繼承了個(gè)Application類來接幾個(gè)第三方服務(wù)(幾行代碼就接入)了吧。
就是會(huì)用個(gè)broadcast(估計(jì)只會(huì)最基本的顯式廣播,排隊(duì)廣播,粘性廣播啥的都不會(huì)用)了吧。
就是會(huì)ListView+BaseAdapter+ViewHolder(總共不到10個(gè)重載的方法)或者recycleview+adapter(估計(jì)不會(huì)自定義layoutmanager,估計(jì)沒才過itemanim的坑)來展示數(shù)據(jù)了吧。
這總共就多大一點(diǎn)知識(shí)啊,學(xué)的這些東西內(nèi)容這么少,不迷茫才怪。
如果我說屈你了。
好。你說你比這強(qiáng)。
都會(huì)自定義控件(總共就measure draw layout這三個(gè)方法)了,還會(huì)volley(代碼寫的一堆callback hell),還會(huì)sqllite(這玩意沒多大用,也是死東西)勒,還會(huì)xml里面定義動(dòng)畫(就平移 反轉(zhuǎn) 透明 旋轉(zhuǎn) 屬性這幾種)勒,甚至你還會(huì)eventbus(別說只會(huì)onEventMainThread哦),你還會(huì)rxjava(學(xué)過函數(shù)式語言的都感覺這沒啥)。
你說你還追新,md控件玩的溜的很,toolbar(兼容到4.4的沉浸式狀態(tài)欄會(huì)用不?)會(huì)用,drawerlayout會(huì)用(碰到過與surfaceview沖突的情況不?),還會(huì)用coordlayout+collapsinglayout+recycleview來做隱藏額頭(知道那個(gè)collapsinglayout中的mode是干啥的不,自定義behavor會(huì)不?:)
這些都會(huì)了不?
啥,你都會(huì)了?再留個(gè)作業(yè)。
APP里面的main在哪?
別的桌面應(yīng)用框架像Qt,人家顯示控件都要new一個(gè)window,那咱app的這個(gè)渲染控件的window在哪new的,咋讓咱屏幕聽話跟著畫的?
咱手機(jī)這么多傳感器,那傳感器數(shù)據(jù)咋來到咱app的?
那manifest在咱手機(jī)里面咋滾輪的,發(fā)生了啥,系統(tǒng)咋處理的?
我在美團(tuán)里面能打開支付婊的支付界面,這在咱手機(jī)里面發(fā)生了啥?
多花時(shí)間吧,花大把大把的。 編輯于 2016-03-19 MagiLu Android 開發(fā)?話題的優(yōu)秀回答者 在上一家公司當(dāng)過一段時(shí)間的Android面試官,發(fā)現(xiàn)很多“精通”Android的候選人簡歷上都會(huì)寫使用過XX開源庫并引以為傲,如果在面試的時(shí)候沒有問到這些有的還會(huì)對(duì)我提出質(zhì)疑。拜托,這就叫精通了?這真的很有挑戰(zhàn)性么?
怎么樣算一名優(yōu)秀的程序員?我認(rèn)為最基本的要求是有高效的產(chǎn)出。回到Android上,一名優(yōu)秀或者題主說的精通Android的程序員也應(yīng)如此,高效的產(chǎn)出高質(zhì)量代碼,迅速解決開發(fā)中存在的BUG,對(duì)于需求提出合理的解決方案,不間斷的學(xué)習(xí)和分享。而精通的開端,就是從一個(gè)使用者,變成創(chuàng)造者。輪子誰都會(huì)滾,而造輪子的,才值得尊敬。
那怎么成為精通Android的開發(fā)者?看,寫,思考,總結(jié),交流,這條路沒有捷徑。我認(rèn)為精通Android的開發(fā)者至少需要具有扎實(shí)的C++/Java基本功,微機(jī),網(wǎng)絡(luò)通信,數(shù)據(jù)結(jié)構(gòu)和算法基礎(chǔ),熟悉Android的大部分組件,常用開源庫,豐富的Debug,適配經(jīng)驗(yàn)以及持續(xù)的學(xué)習(xí)能力。 編輯于 2015-02-28 耿銳 Senior Android Developer@Sydney
很多人都提供了非常不錯(cuò)的答案,我也是受益匪淺,謝謝各位。
但是我覺得很多排名靠前的答案都給我感覺,思路太中國式了,像中國的考試一樣,追求難題,追求窮盡真理。比如
@陳昱全 里面提到的那個(gè)面試,比如 @田元 提高的app 的main在哪兒。我不是說這些沒用,或者不重要,但是我想這些知識(shí)點(diǎn)可能對(duì)于一個(gè)初學(xué)者進(jìn)階的人來說,就算查到了答案,也理解不了。所以說一下我對(duì)這個(gè)問題的看法,只求拋磚引玉。第一個(gè)建議,對(duì)于一個(gè)junior developer,如果想往上走,在強(qiáng)化知識(shí)體系的之前,我往往建議先完善自己在debug tools上的經(jīng)驗(yàn)。
比如:
網(wǎng)絡(luò)debug tools: Charles, mitmproxy, Stetho
內(nèi)存泄露:Memory Analyser, Leak Canary
Overdraw: 手機(jī)上的Drawing Settings, AVD Manager/Layout, Stetho
數(shù)據(jù)庫和cache: Stetho,SqliteManager
還有最原始的,利用logcat打log,分析log并且知道各種參數(shù),比如-v time顯示時(shí)間,-s做filter等等
中國有句古話,工欲善其事,必先利其器。將各種debug工具掌握好,有利于更快地從Junior level提高上來。
第二個(gè)建議,提高自我表達(dá)能力。我在面試facebook的時(shí)候(別問細(xì)節(jié)了,沒過),有一個(gè)題目很有意思,來說一個(gè)你比較了解的工具或者api,whatever什么玩意都可以,看你能否有邏輯地、準(zhǔn)確地將某lib的整個(gè)框架描述清楚,比如優(yōu)缺點(diǎn),比如運(yùn)行流程和坑。在這里面,ABCD的某個(gè)環(huán)節(jié)中,你可以說你在B上內(nèi)部邏輯不清楚,但是input 和output一定要說出來,如果能說出limitaion就更好了。
這項(xiàng)能力的好處是,“準(zhǔn)確而有邏輯地表達(dá)”往往需要清晰的頭腦、豐富的知識(shí)儲(chǔ)備,這項(xiàng)訓(xùn)練在programming中是非常有好處的,我發(fā)現(xiàn)凡是口頭表達(dá)邏輯很清晰的人,編程coding邏輯感也非常強(qiáng)。有好的邏輯思維的人,成長是極快的。
第三個(gè)建議,如果追求精通,不要一上來就追求對(duì)整個(gè)Android的精通,要先追求模塊的精通。有些人強(qiáng)于寫googlemap,有些人對(duì)Volley庫極為熟悉甚至被merge過很多pr,有些人可能對(duì)動(dòng)畫非常了解,甚至有些人專門研究android相機(jī)保存圖片等。其實(shí)等你很熟悉一兩個(gè)模塊后,你會(huì)發(fā)現(xiàn)其他的東西很容易觸類旁通,就算不看代碼,猜也猜得到。
第四,提高英語能力。以前在國內(nèi)只用baidu,后來出國了之后用英語才發(fā)現(xiàn),簡直是多長了一個(gè)腦子的感覺,高質(zhì)量的文章比比皆是。所以如果英語好,在IT skill上的進(jìn)步可能會(huì)快好幾倍,真的不夸張。
最后,不要被面試官嚇到,他的問題肯定是經(jīng)過準(zhǔn)備的,沒準(zhǔn)他比你早知道不了幾天這個(gè)問題的答案并且從來沒在真正項(xiàng)目上apply過。不知道就說不知道,不過我一般會(huì)建議在不知道的問題上猜一下,并非瞎猜,只是告訴他“這個(gè)問題我確實(shí)沒研究過,不過以我對(duì)android的了解看,應(yīng)該是哪兒哪兒的問題或者應(yīng)該是由于某種機(jī)制產(chǎn)生的”,目的就是顯示我對(duì)android很了解,很有信心。因?yàn)檎l都不可能在工作中不查看新的東西,只用舊知識(shí)的公司應(yīng)該是不存在的。
最后再次感謝 @陳昱全 和 @田元 ,二位說的很多問題我也不懂,趕緊去查一查,多謝! 發(fā)布于 2016-03-21 知乎用戶我們先來對(duì)問題分解一下:
Android 開發(fā) :
分成成
1. "開發(fā)" 一般的開發(fā)技能
2. "移動(dòng)應(yīng)用開發(fā)" 移動(dòng)應(yīng)用開發(fā)相關(guān)概念思想
3. "Android 開發(fā)" 特指與 Android 開發(fā)直接相關(guān)知識(shí)技能
正如你可能所想的那樣,這樣的問題不像1 + 1等于2那樣,有一個(gè)簡單確切的答案.
真正答案因人而異. 下面我以自己幾年的Android 開發(fā)經(jīng)驗(yàn),與你分享一二.
就按我上面所分解的幾個(gè)方面來說一說:
一: 開發(fā)技能
你可以看成是一般的編程技能
這方面你可以從?
編程語言的熟練掌握
面向過程編程思想
面向?qū)ο蟮乃枷?br /> 函數(shù)式編程思想
設(shè)計(jì)模式
算法與數(shù)據(jù)結(jié)構(gòu)
網(wǎng)絡(luò)編程,TCP/IP 協(xié)議
重構(gòu)?
版本管理(Git 等)
等方面的檢查和提高自己
更詳細(xì)的技能樹,請(qǐng)自己搜索
二: 移動(dòng)應(yīng)用開發(fā)
你可以看成是 App 開發(fā)
估計(jì)這可能是你更感興趣的
這方面你可以從: MVC 這成三個(gè)方面來對(duì)照檢查下
M: 數(shù)據(jù)層?
移動(dòng)應(yīng)用數(shù)據(jù)結(jié)構(gòu)特點(diǎn)
數(shù)據(jù)存儲(chǔ) :SQLite數(shù)據(jù)庫,文件存儲(chǔ)
數(shù)據(jù)格式: XML 格式,JSON格式 序列化與反序列化
數(shù)據(jù)查詢: 移動(dòng)應(yīng)用一般數(shù)據(jù)庫主要是 用SQLite
(說回來,單是 SQLite 數(shù)據(jù)庫,就可以花不少時(shí)間來深入學(xué)習(xí)下,
因?yàn)閷?duì)一個(gè)應(yīng)用來說,數(shù)據(jù)基本是核心)
V: 視圖層
移動(dòng)應(yīng)用界面特點(diǎn)
移動(dòng)應(yīng)用構(gòu)建界面常用方法
移動(dòng)應(yīng)用交互特點(diǎn)
移動(dòng)應(yīng)用動(dòng)畫
系統(tǒng) UI 系統(tǒng)特點(diǎn),優(yōu)點(diǎn),缺點(diǎn)及局限
C: 控制層
移動(dòng)應(yīng)用控制層特點(diǎn)
控制層的生命周期
多線程,UI 線程,后臺(tái)線程
再加一層:
E: 事件層
事件處理,觸控事件,手勢(shì),事件響應(yīng)鏈
三: Android 開發(fā)
工具篇 - 工欲善其事,必先利其器
Android Studio 掌握用得怎么樣了?
Adb 及相關(guān)工具會(huì)用嗎?
Gradle 構(gòu)建系統(tǒng)呢?
文檔篇 - 看 Android 官方是怎么定義開發(fā)各種技能的.
相信常看 Android 開發(fā)者官方網(wǎng)站,你會(huì)收益良多,我下面寫的也不必看了.
系統(tǒng)篇?
Android 多線程編程,異步編程特點(diǎn) - Loop,Handler,IntentService,Broadcast
,MessageQueue
Android UI 框架特點(diǎn),優(yōu)勢(shì)和不足
然后你再按 MVC 將 Android 各部分再分析分析,總結(jié)總結(jié).
從操作系統(tǒng)層面去學(xué)習(xí),不要僅限于應(yīng)用層開發(fā),開放的系統(tǒng)源代碼方便學(xué)習(xí)。
從框架設(shè)計(jì)逐步走到代碼實(shí)現(xiàn),應(yīng)用層過后,可以學(xué)習(xí)內(nèi)核,驅(qū)動(dòng),虛擬機(jī),開源庫,框架層再回到應(yīng)用層,每個(gè)階段回味一下,就會(huì)體會(huì)到進(jìn)階的感覺—酸爽。 發(fā)布于 2015-03-09 黃福林 熱愛手機(jī)/Android開發(fā)者/終身混跡科技數(shù)碼圈 參考 杰克沃頓大神 發(fā)布于 2016-03-30 知乎用戶這兩天面試也一直在跟來面試的兩個(gè)有三年工作經(jīng)驗(yàn)的程序員聊這個(gè)問題。
你的程序要實(shí)現(xiàn)某個(gè)要求的功能并不是太難,尤其是一般生活中用的App,游戲另說。
但是要把你的App做的別人一看就覺得好看好用,那是非常非常困難的。
這兩個(gè)人一個(gè)iOS一個(gè)安卓,給我看的是同一個(gè)應(yīng)用(是的,來自同一家公司),在把手機(jī)遞給我的時(shí)候兩個(gè)人都說了同樣一句話:界面有點(diǎn)丑。
界面丑當(dāng)然是產(chǎn)品經(jīng)理和UI、UE的問題,但是,程序員的問題也是顯而易見的,你為什么要做一個(gè)自己都覺得很丑的應(yīng)用?還把這個(gè)當(dāng)成面試的敲門磚?而且我跟他們強(qiáng)調(diào),當(dāng)時(shí)UI做出來的設(shè)計(jì)稿一定比你這個(gè)成品要漂亮,不然不可能通過老板的審核,而且水平再差的UI隨便畫個(gè)界面出來也不至于難看成這樣。肯定是你們?cè)谧龅臅r(shí)候丟失了細(xì)節(jié),而后產(chǎn)品經(jīng)理和老板都無可奈何,因?yàn)槟銈冋f做不到他們就沒辦法。好的應(yīng)用的第一個(gè)必要條件,就是要讓用戶第一眼能夠接受它,你們手機(jī)里那些自己覺得很好用,天天用的應(yīng)用,有哪個(gè)完全是因?yàn)楣δ懿豢商娲淌芩y看難用的界面的?(網(wǎng)銀App除外)
而要做到一個(gè)能做出漂亮的界面,細(xì)致的動(dòng)畫,流暢的交互的應(yīng)用,對(duì)程序員的考驗(yàn)是非常非常大的,對(duì)安卓開發(fā)人員更甚。以前我花了兩個(gè)星期的時(shí)間想模仿出Cal這個(gè)應(yīng)用頂部那個(gè)日歷的各種滑動(dòng)效果,最終只能模仿出7成,還差的那3成在功能上是一模一樣的,但在細(xì)膩和流暢上就始終差那么一大截。 編輯于 2015-03-06 Lazy 菜鳥安卓猿。 我做安卓時(shí)間不是很長,項(xiàng)目中用到了很多別人的框架,但是都不知道其根本原理,我覺得應(yīng)該要知其所以然。然后自己這一套框架。 發(fā)布于 2015-03-01 知乎用戶 自己寫一個(gè)SlidingMenu或者Universal-Image-Loader試試 發(fā)布于 2015-03-14 Tinker題主提出了三個(gè)問題:
1. Android開發(fā)初期之后怎么提升?- 把 Google 的 Samples 全部跑一邊
- 閱讀 Samples 的源碼以及 Samples 給的控件的源碼
- 了解所有的 Android 控件的繼承關(guān)系,盡量都背下來。是的,你沒看錯(cuò),背下來。繼承關(guān)系的了解有助于你解決后面開發(fā)中遇到的難題。
我看了下
@田元 的回答,他說的那些東西,Google Samples 全都提供了。他說的學(xué)習(xí)方式,我從文中看到推崇多學(xué),但都限于用法的學(xué)習(xí)。
如果一直追求于用法的學(xué)習(xí),一生都會(huì)被無休止的學(xué)習(xí)困擾,奔命于學(xué)習(xí)。
我個(gè)人還是建議多看看源碼。尤其是基礎(chǔ)的父類源碼。新出的東西看看繼承關(guān)系,翻一遍源碼即可。
(如對(duì) @田元 的回答理解有誤,望指正。)
比如說新出的 Toolbar 繼承于 ViewGroup,如果多次閱讀過 ViewGroup 的源碼。對(duì)于新出的 Toolbar 只需看一遍源碼便知如何使用。如果熟悉了 ViewGroup,然后閱讀 Toolbar 的源碼(源碼兩千多行,基于前面的基礎(chǔ),大部分代碼都無需仔細(xì)閱讀了),2 個(gè)小時(shí)不到就能完全掌握 Toolbar。
還有
@田元 所說的 CollapsingToolbarLayout、NestedScrollView 繼承于 FrameLayout。如果你對(duì) FrameLayout 熟悉了,這些新出的 View 掌握速度將快的無法想象。再次建議,跑 Samples,多閱讀源碼,背下繼承關(guān)系。
2. 怎么才能叫精通?
私認(rèn)為,你要是能回答小白提的任何 Android 問題,你都能對(duì)答如流就是精通。
:)
不要小瞧小白提問方式以及問題。
我組織了一個(gè)?『技術(shù)學(xué)習(xí)小組』,里面很多人問我 Android 問題,我有一大半沒辦法直接答出來。
然而我做了六年 Android 開發(fā)了。
3. 方向在哪?
題主問得什么方向?著實(shí)沒看懂題主的問意。
======= 補(bǔ)充點(diǎn)我解決 Android 難題的思路
關(guān)于解決 Android 難題的思路,我很贊成
@智靖遠(yuǎn) 的答案。我的路子基本跟他說的一致,略有差異,接下來我補(bǔ)充下我的思路。寫 Android App 有一個(gè) BUG 發(fā)生時(shí),我的流程是這樣的:
能力還不夠答這個(gè)題目,還是嘗試答一下,我用我自己得例子來說明下。兩個(gè)例子。
1,數(shù)據(jù)庫索引優(yōu)化
以前做一個(gè)項(xiàng)目數(shù)據(jù)量很大,然后想做優(yōu)化,一頓加索引然后發(fā)現(xiàn)反而更慢了,于是乎去研究下發(fā)現(xiàn)聯(lián)合索引更快索引超過5個(gè)后明顯變慢,也更適合層級(jí)遞進(jìn)查詢,但是原理不知,于是乎去了解索引的原理設(shè)計(jì),從而讓自己有能力下次去避免這個(gè)問題或者做的更好。
2,一次面試
記得handler和looper得模式經(jīng)典面試題,人人都能淺談下。那么你知道sendmessagedelay如何實(shí)現(xiàn)的,handler得生命周期如何,跨線程是如何通信的等等。當(dāng)詳細(xì)問下去的時(shí)候很多人是不知道得。很多人會(huì)知道handler生命周期長做靜態(tài)內(nèi)部類加索引用,但是你知道為什么嗎?我當(dāng)時(shí)就是一問三不知,回去趕緊查看源碼了解管道,epoll模型等。
我本身對(duì)安卓開發(fā)一知半解,但是也算親眼見證了幾個(gè)大牛(不僅限于安卓)的成長,所以給一點(diǎn)我所知道的辦法。
1。面臨一個(gè)解決不了的問題的時(shí)候,最初階段放棄百度,放棄google搜索。盡量做到只依靠安卓官方文檔。
搜索引擎是一個(gè)黑匣子,問他“xx問題應(yīng)該怎么解決”,它會(huì)忽略掉一切中間的思考,分析,解決流程,給出最后的答案。?
其結(jié)果就是,使用答案的人基本上不可能理解“為什么這么去做”,只知道“可以這么做”。 就像一個(gè)沒學(xué)過加減法,只會(huì)用計(jì)算器的收銀員,有計(jì)算器能工作,但是恐怕沒有心算的快。復(fù)雜的問題如果計(jì)算器不會(huì)算,他也不會(huì)。
等到通過基本的文檔自己找到了思路和方案,再去看看有沒有別人寫好的第三方的東西,或者成熟的方案,再和自己的東西印證。?
這要花很多的時(shí)間,會(huì)比別人慢,會(huì)把別人休息的時(shí)間用來加班。 但是大牛如果是睡覺打游戲就能養(yǎng)成的,這個(gè)問題也不會(huì)出現(xiàn)了對(duì)不。
2。安卓系統(tǒng)源代碼要常備。跟蹤代碼時(shí)候,盡可能跟到系統(tǒng)的層面,越深越好。至少sdk要進(jìn)去。
不了解sdk的代碼,自己就很難寫出同級(jí)的代碼。好代碼看的多了,自然自己的水準(zhǔn)也會(huì)提高。熟讀唐詩三百首嘛。
3。如果代碼沒有按預(yù)期的去動(dòng)作,不要第一時(shí)間想著去解決這個(gè)現(xiàn)象,而是要追究為什么會(huì)發(fā)生這個(gè)現(xiàn)象。?
比如程序崩潰了,加個(gè)try catch自然解決了這個(gè)問題。但是這么做就太糟了。
自然要問問,為什么會(huì)出現(xiàn)這個(gè)exception?底層的返回null了,上層沒處理。哦,加個(gè)判斷就好了。這樣好一點(diǎn),但是仍然很糟。 底層為什么會(huì)返回null?如果null是合法的返回,文檔里有沒有約定?如果沒有約定,文檔有問題,如果約定了,代碼有問題。更主要的是,其他地方是不是犯了同樣的錯(cuò)誤?我是不是存在“不注意文檔約定”或者“寫文檔時(shí)候忘記約定”這樣的問題?
到這個(gè)地方,才真的對(duì)自己的成長有所幫助。大牛也是一步一步走上來的。
4。多把自己知道的東西教給別人。 比如寫一些知識(shí)和技巧跟大家分享,或者召集一個(gè)公司內(nèi)的小培訓(xùn)。
這樣做的好處有兩個(gè)。?
第一自己得到了鍛煉。把知識(shí)系統(tǒng)化總結(jié),對(duì)自己是一個(gè)回顧,整理,沉淀的過程。這個(gè)過程中可能會(huì)找到自己尚欠缺的地方,也可能會(huì)被別人的提問啟發(fā)。?
第二是能逐步樹立自己的地位感,成為大牛也是一個(gè)正向激勵(lì)的過程,往往是牛人越來越牛,普通人越來越普通……
工作中很多任務(wù)是使用已經(jīng)知道的東西來做。時(shí)間長了就會(huì)覺得都是重復(fù)勞動(dòng)。
可是真的是這樣嗎?我所熟知的方法,就是最好的方法了嗎?是否有更優(yōu)雅高效的方式?答案是一定有,沒有最好,只有更好。功能上覺得已經(jīng)實(shí)現(xiàn)好了就提高效率,效率已經(jīng)很高了就改善結(jié)構(gòu),結(jié)構(gòu)優(yōu)化清晰了就試試分析有沒有未來可能的需求變更,能不能應(yīng)用設(shè)計(jì)模式,等一圈都走下來,回過頭一看,原來功能上還不夠完美啊。
? ? 本文轉(zhuǎn)自 一點(diǎn)點(diǎn)征服 ? 博客園博客,原文鏈接:http://www.cnblogs.com/ldq2016/p/6611725.html,如需轉(zhuǎn)載請(qǐng)自行聯(lián)系原作者
總結(jié)
以上是生活随笔為你收集整理的Android开发初期之后怎么提升?怎么才能叫精通?方向在哪?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: bs84c12引脚_HOLTEK推出BS
- 下一篇: android sina oauth2.