1. 程式人生 > >泛談技術的成長

泛談技術的成長

國內 函數 前行 str 朋友 日誌分析 mate7 關註 做出

  上一篇記錄了在杭州的成長,大部分說的都是和同事,朋友相處的情況,然後就覺得自己忽然成長了,牛逼了;其實和同事交流過程中,更多的只是給你意見、建議,然後都需要自個兒埋頭苦幹(不知大家是否都有如此感覺)。我想大多數程序猿(媛)都和我同感吧,如果沒產生共鳴,煩請指導我一下唄。

  選擇開發,真的是一門活到老學到老的學問,關註Android動態的都知道,在2017的I/O大會上,Google正式把Kotlin轉正了,雖說和Java無縫對接,但是怎麽也得學習下才能下手吧。今天剛看了一篇文章,是在小秘圈裏看到的,叫《17位谷歌專家稱號大牛如何看待Kotlin》,大家也可以去看翻譯版,其中一位大牛就說了,快的話,上午看,下班之前就能寫了,不還是需要看麽,基於有Java基礎的,又是學習學習。之前蘋果出的swift,我也是三分鐘熱度,把文檔裏的代碼都敲了一遍,好了,Kotlin好像和swift也差不多,什麽變量、常量、類型能自動識別、不需要分號等等等等,小夥伴們,趁年輕,趕緊get起來。今天也湊巧和部門老大聊了Kotlin一下,其實對於你來說,語言只是工具而已,學習能力最重要,是吧。Android現在的趨勢就是入門門檻會偏低了,但是技術要求並不低呀,比如你想搞一個牛逼的app,還不得加班加點,各種鉆研嗎。遙想我們之前為了做app裏的推送,前任老大通了多少次宵,蘋果的APNS實現,他也是做了多少努力的;現在好了,Android在國內也要推出類似APNS的機制,那可是工信部出面,也是我們開發者的福音了。所以,技術在更新叠代,關鍵還得看學習能力。

  關註Android的大部分都知道stromzhang這個人吧,我也是他的粉,他一直強調學習能力,講他自己曾經是一位學渣,靠著後來的努力,你看,這次I/O大會他還收到Google的邀請,這就是能力在後期的體現,只能說現在是我偶像啦。記得剛到杭州公司的時候,第一周的前三天,不斷的看項目代碼,那時候是第一次進大公司,第一次看那麽多的項目代碼,忽然覺得,自己以前寫的App都不是App,最引以為傲的竟然是畢業設計,也是醉了。好在實習公司的時候,研究過JNI,在第5天的時候派上用場了。讓我參與項目,寫一個功能,期間就是和JNI交互的,興奮的我立馬投入。當初JNI在我眼裏就是c層寫一個包名_類名_方法名,然後java層調用native方法麽,結果還是too young了。和c同事對接,懵逼了,他沒這麽寫過JNI接口,我也不知道怎麽去看C代碼了,好奇怪的。而且又因為公司網咯資源有限,那就白天寫自己UI層的功能,晚上盡量早點回家,自己查資源,才發現,JNI還有動態和靜態兩種實現方式。原本以為幾天能搞定的功能,硬是用了一周。那次的經歷,就好比當頭一棒,畢業剛半年,本以為一個小功能可以更好的展現自己,卻延期了,延期啊延期,心有愧疚。

  也是機緣巧合吧,兩個月之後,項目重組,需要重新編寫一套基於native原生的app,又碰上師傅生病住院,就這樣被趕鴨子上架,楞頭青一個開始寫最重要的功能,一個基於ListView的頁面刷新,展現。上拉刷新,下拉加載,以前還沒有現在這麽多流行的庫,基本都是自己上網抄,抄這個詞用的妥不妥,我也在斟酌,我也是有付出的呀,不然怎麽做出適合項目的功能呢。之前只會寫功能簡單的ListView,現在好了,以前都是小打小鬧,現在開始要向商業化App看齊,不能隨便寫寫,於是就翻看了郭霖的博客。我對ListView的深入理解,就是看了他的那幾篇連載,知道了ListView的加載機制,跟著郭嬸看了ListView的核心代碼,懂得了ListView中的優化,瀑布流的實現。這個記憶一直伴隨著我到現在,以至於幫部門招人的時候,前幾個問題中必會有一個關於ListView加載機制,原理等等的問題,以此來判斷候選人的能力,哈哈。

  項目裏的刷新功能還包含了一個獨有的三步走機制,和iOS的同事一起討論,一起前行的。當時大家都遇到棘手的問題,Android端,我在切換文件夾的的時候,把ListView的數據刷亂了,甚至還出現重復操作的情況。這是多麽嚴重的問題,領導強力施加壓力,真的是加班加點。還好師傅及時病愈歸來 ,我跟著他一步一步查看,知道了線程的高級用法。當時的高級就是懂得了線程池的使用,函數的回調。看到這裏,大家是不是覺得可笑了,你學了這麽久的程序,竟然來線程池都才在畢業這麽久才認識,還叫他高級,我也不怕你們笑話,當初看《瘋狂Java講義》的時候見過,也打過Demo玩過,但是真正項目實踐還是在這裏才學會。還有回調功能,初學Android,還不是setOnClickListener就算把點擊事件實現了,那要是自己實現呢,比如現在MVP裏的那種事件回調讓你去刷新頁面,呵呵噠,不會。這就是我,於是又拿出書本,利用網絡資源,回頭才恍然大悟,什麽,這個回調在學Java的初步課程的時候老師不就講過了嗎,哎,還是上課不認真呀,不然怎麽可能後知後覺。段首說的重復,就是因為線程沒控制好,在切換文件夾的時候沒有做好沖突,其實加一個ID區分,進行判斷數據源的獲取就可以了,師傅找出來的,我是沒能力,那時候就崇拜他了,這就是經驗給我的震撼吧。後來新員工答辯的時候,自己定下的目標就是一年以內達到他的三分之一,那一年是成長的一年。有個小細節就是,他每天到公司都會看書,上班時間之前都是心無旁騖的看書,午休期間也會抽幾分鐘看書,然後不斷實踐,我也是深受啟發的。他就告訴我,寫程序沒有捷徑可走,只有不斷學習,不斷實踐;學習Android,就要多看源碼,人家開源的東西,你不珍惜,你學習,那還學習什麽呢。這些箴言,我會銘記永遠,也會同大夥一起分享,無論你是否是一名程序員,學習都是相同的。

  最後再講一個最近的經歷吧。大家都知道Android是有幾率在後臺被殺死的,但是前臺進程殺死的情況,不知道大家遇到過沒,我遇到過,一臺特殊的MATE7,偏偏這臺手機又是在部門大boss自己用的,怎麽辦,硬著頭皮上。為了定位他手機上前臺進程殺死的問題,我主管經常幫我頂著壓力,給我無限的時間去鉆研,和他一起詢問終端的開發,和他一起頂著烈日到辦公室現場取日誌,他還幫我不斷的調整資源,我也真的是,那段時間都想放棄了。但是,做一名失敗者算什麽,有成功的機會你不把握,還去想著失敗的事情啊。又是每天鼓勵自己,那段時間把博客園裏的內存分析文章翻了個遍,把內存分析工具都學習了一遍,並且針對日誌分析,針對報告分析,兩眼死死盯著數據不放松。收獲是什麽,收獲就是感覺自己分析的能力見長,通過工具看內存,通過adb命令看內存分配,內存升降,通過Leakcanary看內存泄漏,通過traceview分析,等等等等。不過最後定位到C層去了,原生層是沒找出原因來。這其實對我來說,是一次不成功的案例,沒有真正解決問題,只是給c層的同事一些方向。但是對我自己的能力來說,是有進步的,直到內存分析的更多知識,這又成為我後來幫項目組招人的一個必備問題,如果候選人懂得學會分析,那基本上就已經是成功一半了。

  感覺要講的還有很多,但每次都是不知不覺就寫了很大的篇幅,廢話太多,又不想刪除,肯定是給我寫下一篇的機會了。現在晚上空閑的時間增多了,寫作的時間就會相應地增加。腦子裏還有很多想寫的,比如怎麽看的書,現在我還缺少很多東西,我後悔大學沒有選修設計模式,現在都靠自己學習;想看Java看的更多,不僅僅掌握能寫App這麽簡單;想學英語,Stormzhang今天還發了篇文章,說一定要學好英語;Android也沒掌握很透徹,還有很多要學習,比如AIDL之類的。寫程序真的是一件活到老,學到老的事情,我無悔選擇這份職業,時刻保持競爭。你看,還能讓我時刻有寫作的想法,記錄下來,萬一以後對自己有非凡的用處呢。下次見吧,朋友們。

  

泛談技術的成長