我的技術成長之路

何時夕發表於2018-10-14

本文首發於微信公眾號——世界上有意思的事,搬運轉載請註明出處,否則將追究版權責任。微訊號:a1018998632,交流qq群:859640274

最近發了一個專題 從零開始仿寫一個抖音App 承蒙大家的關注閱讀量也挺多了。所以在群裡的同志們“鼓動”我寫一篇成長和技術路線的文章,以饗讀者。注意本文只是給在技術路上迷茫的人一個指引,大牛的話其實完全不必看:)

一、我為啥能寫這篇文章

看到這篇文章的人第一個反應肯定就是:這人是誰,為啥能給我指引,他很牛逼嗎?所以我先列舉一下我的現狀,這樣可以給比我能力弱一點的人一些指引。當然比我牛的大佬我也希望能在評論區給我一些指引。

  • 1.目前本科畢業已經有4個月了吧,我本科是浙江杭州的一個普通一本(雙非)。去年春招的時候在中國有贊實習過半年java 開發,錯過秋招之後今年春招投了幾個大廠,也收穫了幾個大廠 offer,最終選擇的目前公司的薪資福利還算不錯,看了今年19屆的各種 offer show 感覺還是比一般大廠的白菜高一些的。
  • 2.從開始寫文章到現在已經有兩年多的時間了,目前的成績也還算不錯。寫了三十幾篇文章總計11萬字,各個平臺上的粉絲數接近3k,點贊數接近4k,閱讀量有十五萬左右
  • 3.github 上有三十多個 repository,總計 start 也有1k 了。上過幾次 github 的 developers 和 repo 的熱門。
  • 4.最近簡書也有找我商量出版書籍的事情,不知道最終能不能成吧。但這也是對我的能力的一種肯定。

上面就是我目前的狀態了,如果大家覺得能力比我弱那麼一丟丟的話,那麼還是可以繼續把文章看下去的,應該會對你有所幫助。

二、基本面

我們在新聞中常常能看見基本面這個詞,在我看來基本面對於一個人的成長來說就是他的性格與習慣。一個好的基本面能讓一個人有持續成長的動力。這一章我就來簡單說說這方面的東西吧。

  • 1.大家可以先想想自己堅持過最長的事情是什麼,堅持這件事情是各種文章中老生常談的東西。我這裡就給它補充我的兩個例子好了:1.我堅持看**科幻世界(當初三體三部曲就是在這本雜誌上連載的)**這本雜誌有9年了。2.我堅持夜跑有3、4年的時間,畢業後荒廢了半年,最近又重新開始跑了。補充這兩個例子其實是為了說明:堅持做某件事情其實在潛移默化中會讓你的性格和精神發生某種變化,這個變化能對其他各種事情產生正向的影響。比如我去年的時候花費了一個多月的時間整個翻譯了 Fresco 的原始碼,這就是以前的堅持給當時的我帶來的影響。又比如我一直寫部落格也是以前的堅持帶來的影響。當然你被堅持影響的事情後來也會成為堅持的一部分然後對後面的更多事情產生影響,這是一個正向的迴圈。這就是我要說的第一個基本面:堅持
  • 2.大家再想想自己上一次抬頭看星星是多久以前?我們都知道有一句話叫:仰望星空,腳踏實地。前面的堅持就是腳踏實地的部分,而我這裡要說的仰望星空部分就是說要有好奇心(求知慾、探索精神等等)。或許是因為年輕,或許是因為科幻小說看多了,我的腦子裡總會冒出各種奇奇怪怪的想法。在技術方面的表現就是常常去了解各種各樣的技術,希望搞懂它們的內在原理。大學四年我因為好奇心接觸的東西有很多:android、java後臺、cv影象處理、深度學習、前端、vr遊戲等等。我當然也不是隻停留在表面玩玩 Hello world,大家可以看看我的歷史文章,其中好幾個技術我都寫成過部落格。這裡我想要表達的就是做技術就要保持對技術的好奇,這樣才能持續的進步。這就是我要說的第二個基本面:好奇心

三、技術路線

扯了上面扯了這麼多,接下來我開始說一下我之後的技術路線和計劃吧。下面是我整理的思維導圖,我接下來會結合這個圖來講解我自己制定的成長計劃。

我的技術成長之路.png

  • 1.首先說說我技術上的目標吧,我的目標分為近、中、遠三個層次:
    • 1.近:指的是一年以內。我的目標是幹好自己的本行工作 android,同時吃透公司中 android 相關的各種技術,然後有目標的學習公司中有關音視訊的技術(目前有許可權接觸)。
    • 2.中:指的是兩三年內。我的目標是慢慢開始接觸公司中的音視訊開發,同時吃透公司中音視訊相關的技術,然後有目標的學習公司中的關於影象視訊方面的各種演算法(目前沒有許可權接觸)。
    • 3.遠:三年之後,估計我會跳槽或者與靠譜的人一起創業啥的,此時我的目標是成長為T型人才,能擔任起技術負責人的角色,不再侷限於某種技術。
  • 2.再說說我個人的定位吧,首先我們常常會聽見大家會將演算法工程區分開來,我自認為在這兩個之中在我在工程這邊的優勢更大一些,雖然我對演算法也挺感興趣但是畢竟比不上各種paper拿到手軟的碩士博士。這個時候我的定位就是瞭解演算法的工程型程式設計師,這樣能讓我在兩邊都各有優勢。
  • 3.最後就是技術路線了,前面說了我的技術目標,這樣一來我的技術路線就比較好理解了。
    • 1.思維導圖中的路線分三個等級:紅色(需要了解原始碼原理,或者精讀書籍)、藍色(需要會使用)、灰色(只需瞭解)
    • 2.首先是 android 方面,這也是我最近在做的事情:
      • 1.架構分 mvc、mvp、mvvm:mvc 已經腐朽、mvp 是目前各大廠商使用的主流框架,不過大多公司不會遵循 mvp 的原始設計而是進行合適的魔改、mvvm 中的 databinding 2015年就出來了但是現在還是上不了檯面,剩下的幾個是這兩年 google 推薦的架構框架,標紅的是可以被整合到 mvp 中去的,所以值得學習。
      • 2.資料庫分為兩大類:sqlite 與 realm(一個效能比較好的移動端資料庫)。因為 realm 是 c++ 實現的所以並不需要去特別的瞭解其原理只需會用即可。sqlite 中又有許許多多的 orm 這裡面以 greenDao 和 room 效能最佳。room 似乎用的人不多,所以去了解 greenDao 的原理即可。
      • 3.網路這邊:目前 retrofit + okhttp 是絕對的王者所以必須瞭解其中原理。socket 是網路庫的基石會用即可,當然這裡面涉及到的計算機網路知識還是需要了解原理的。volley 這東西非常老的專案中應該還會使用,在我這邊不作要求。
      • 4.程式碼生成:這東西用好了可以做大量有意思的東西,android端的 aop 就可以用這些技術來實現,不過也不需要了解其原理,會用就行。
      • 5.動態框架中 flutter 目前看來有稱王的趨勢,所以不僅要會用,還需要了解其原理。而其他兩個東西估計是打不過 flutter 了,不學也罷。
      • 6.圖片處理框架中:Fresco 以效能強、功能多、定製性強著稱。glide、Picasso等等以輕量,侵入性弱著稱。像短視訊這種場景,在圖片處理方面的需求很多,自然是使用 Fresco 而且需瞭解其原理。
      • 7.序列化與反序列化中:json 是老牌霸主。但 protobuf 的效能極強,又有 google 背書。所以兩個都不能拉下。
      • 8.剩下的日誌、kotlin、外掛化、推送、im 等等就不一一列舉的,這些都是需要了解其內在原理,這樣才能在自己寫輪子或者基於開源元件定製輪子的時候不出紕漏。
    • 2.接下來是音視訊方面:這些裡面的東西大多也是我需要學習的,所以可以與讀者一同成長
      • 1.音視訊的基本原理與概念是必須知道的東西,這裡隨意列了兩個東西,更具體的也許要等我學習之後再進行補充了。
      • 2.c++ 是進入音視訊領域的敲門磚,不瞭解你連程式碼都看不懂,所以這裡列了三本書可以按順序觀看
      • 3.雷宵驊的部落格,雷宵驊是個大牛級別的人物,可惜英年早逝。他的部落格一定要去看。
      • 4.FFmpeg 也是一個難啃但是必須啃的骨頭,這裡列了兩本書和一個類庫,紅色優先順序。
      • 5.protobuf前面說了就不再贅述。OpenGL 與 OpenSL 這兩個技術只需會用即可。
      • 6.最後就是 gpuImage 和 grafika 了。這兩一個是基於 OpenGL 的封裝庫,一個是 google 開源的 android 端圖形影象處理專案,都必須去看原始碼瞭解原理。
    • 3.然後是後端技術:這裡的話沒有興趣的同學其實可以不去了解,這裡只是我的個人喜好。因為我也實習過半年的 java 後臺,所以後端我也比較熟悉,可以閒著沒事玩玩,擴充擴充。
      • 1.rpc 是微服務架構的前提,各種大廠都出過自己的 rpc 架構。我在這篇文章中分析過這些東西,有興趣可以去看看。我這裡列的紅色優先順序都是與 python 相關,原因是 python 在深度學習中非常有用,而且在寫後臺方面也能快速迭代。
      • 2.資料庫和訊息佇列是兩個在後端非常常用的技術,這裡我只將他們列到了會用的範圍,因為並沒有太多的時間去了解他們的技術原理。
      • 3.服務治理這方面瞭解即可
    • 4.接下來到了演算法方面:其實音視訊的深了之後自然而然的會需要用到各種演算法,包括視訊特效,視訊渲染,人臉識別,美顏瘦臉等等等等。
      • 1.影象處理,這一塊我在畢業設計的時候做過,還是挺有意思的。Opencv就能解決大多數這方面的需求了,如果能再看一看《數字影象處理》這本書,你將會別的更加完美:)。
      • 2.深度學習。這一塊我也在畢設中用到過,其實這裡對數學知識要求有點高,真的有興趣的同學可以按順序把前面三本書看完,然後學學 python 和 c++ (這也是我前面學這兩個語言的原因之一)。最後看一下 cs231n 的視訊進行實戰。如果此時還滿足不了你的話,就可以去看前沿論文了。我自己的目標也是隻要能復現論文就行。
      • 3.推薦演算法的話瞭解就行。
    • 5.最後一個東西是 linux/unix:這裡面的東西我覺得還是挺重要的,雖然你不需要去了解原理,但是如果你不會用 shell 和 vim 的話。前面我列舉的很多東西你將學的舉步維艱。所以花幾個週末去學學吧,比起編碼還是簡單的,學不會的原因可能只是因為你不願跳出舒適區。

四、尾巴

上面這些就是我今天要聊的東西了,希望能對大家有所幫助。另外希望大家能持續關注我的從零開始仿寫一個抖音App這一系列文章,因為這個專案就是我學習各種知識之後的練手之地,關注了之後大家就能與我一起成長了:)。

不販賣焦慮,也不標題黨。分享一些這個世界上有意思的事情。題材包括且不限於:科幻、科學、科技、網際網路、程式設計師、計算機程式設計。下面是我的微信公眾號:世界上有意思的事,乾貨多多等你來看。

世界上有意思的事

相關文章