引子
最近一直在思考,作為一名軟體開發工程師,到底應該如何實現自我成長,是否有捷徑而言?其實斷斷續續有過很多思考,也有和各種年齡段的同學們做過不少交流,結合自身的經歷,有一些感悟和思考。本文可能可以適用到其他端,不過由於自己是一名 Android 開發工程師,所以就姑且從一名普通的 Android 開發工程師的角度來進行表述吧。
整篇文章可能讀下來會比較囉嗦和白話,但句句真言,字字真心,歡迎大家一起交流。整文也只代表個人觀點,同學們都可以發表自己的觀點即可。
由於感悟文字很多,所以今天來第一篇文章就是:工程師所必經的三個階段。
工程師必經的幾個階段
我認為每一名軟體開發工程師都需要必經三個階段:
- 不知道自己不知道啥
- 知道自己不知道啥
- 不知道自己知道啥
看起來很繞,但實際真實如此。
不知道自己不知道啥
對於大多數剛剛接觸到 Android 開發的學生來說,軟體開發是一片浩瀚的海洋,這是一片全新的領域,有著自己的生態圈。所以初入開發行業的學生們,完全不知道自己還有哪些是需要學習的,所以這些同學通常會陷入一個非常迷茫的階段,尤其是在校學生。
自己當初也是如此,天真的以為計算機專業就是開發遊戲,倒騰電腦的專業,所以自己就成了計算機學院的一員。上大學後,才發現和自己想象的完全不一樣,依然要學習好多的數學專業課和語言專業課,只是這個語言不再侷限於英語了,而是一些從未聽過的 C/C++、C#、Java、Python。
在學校的時候完全不知道自己應該學習什麼,只能按照教學的安排一節課一節課的學習和實踐,學校老師佈置的任務也一如既往的簡單,然而大家一片茫然,依然有很多的同學完全學不明白。努力得不到結果的感受,讓一些同學越來越厭倦去上課,越來越厭倦考試。尤其是遇到程式設計操作性科目,更是大腦一片空白。
大學階段學生們的普遍情況是,不知道社會需要怎樣的人才,需要怎樣的情況才能做一名合格的軟體開發工程師,在懵懵懂懂中就畢業了。
一部分在校學習刻苦,比較有遠見的同學在即將畢業的一年抓住了公司的實習機會,這時候他們先人一步接觸到了商業專案。會發現公司的軟體開發又是另一番景象,也許在學校學習的 Java 和 Python,但在公司卻要承擔起一名 iOS 開發的角色,於是在這裡開始了他們的二輪學習。
因為身邊有一群有經驗的導師,這時候學習起來比學校輕鬆了很多,但依然是大多數時候不知道應該學習什麼,對於自己而言,哪些是需要現在學習的,哪些是未來應該學習的。
如果這些同學足夠幸運,遇到一個優秀的 mentor,可能會輕鬆許多,應該 mentor 會授人以漁,在給你安排工作的同時,還會教給你做自己的職業規劃的方法論。
有了一個詳細的學習規劃,會輕鬆很多,自己的學習還有 mentor 的定期 review 和反饋,這時候成長起來更快。這也是為什麼我建議職業生涯初期的學生擠破頭皮也應該進入大廠的原因。
大廠通常都有足夠完善的新人成長機制,而且身邊的同學都是足夠自驅和優秀的,在這樣的環境中成長,真的是如同腳踏白雲,一飛沖天。
通常而言,職業生涯的前兩年也會一直有這樣的狀況,不清楚自己到底還有哪些知識需要學習,在完成了交代的開發任務後,就會陷入一個懷疑人生的階段,不知如何提升自己的能力。
這時候大多數同學就會靠踩坑提升自己的實力,踩一個坑記一次,有的坑記憶不夠深刻踩 3 次怎麼也夠了,但這些同學會發現,職業生涯成長非常緩慢,如果不幸,可能 10 年的開發經驗,不過是一年的經驗重複使用了 10 年而已。
學習填充
在這個階段的同學如果看的自媒體文章比較多,可能會陷入一個恐慌的階段,因為製造焦慮的文章實在是太吸引眼球了,它們是心靈雞湯,不斷地博取你的共鳴,從而消耗你的信心。
這時候,對自己要求比較高的同學就開始不斷學習,卻沒有任何規劃。他們可能會選擇看很多部落格,給自己收藏很多標籤,看到優秀的博主就趕忙關注,不關心部落格的每一篇文章的質量,而盲目地迷信權威,反正別人說的,就一定是對的,很少有自己的思考。所以只要文章涉及範圍越廣,就越容易得到別人的認可,GitHub 上的 Star 也從來不會吝嗇。而我就是這樣一個博主,早些年靠文章的數量取到了數百萬的閱讀量,在 GitHub 上也有了 12k 的 Stars。
但我之前寫的大多數文章,都是毫無知識涵養的,所以,我一度斷更了很久,雖然當初我每一篇文章都有很認真的寫。
除了部落格學習,一些同學還會選擇一些線上教學視訊網站,比如 mooc 網,網易雲課堂,騰訊課堂,扣丁課堂等。這些網站上通常都有成套的語言教學,老實說,這上面的部分課程質量確實比學校教學的更加全面一些,但知識內容真的很多,一頓學習下來少了實踐確實價效比不高。
所以一部分同學把希望寄託給了書籍。
讀書是一個好習慣,書籍也是一個好東西。很多專業性的書籍,都寫的非常好,也非常全面,因為是文字性的描述,所以相對於視訊學習起來時間成本更低。但書籍的內容質量也是良莠不齊,除去其他同學的推薦,自己很難真正感悟到書籍的內容對自己的幫助。這時候可能你就需要看一下《如何閱讀一本書》,提升自己的讀書效率。但又發現,讀書真的很難堅持。
大多數人把上面這種方式歸咎為沒有學習氛圍,無法驅使自己認真學習,加上沒有健全的交流群,沒人給自己解惑,有些書籍偏向於基礎知識的講解,根本學不到真正的實踐技術。
所以一部分同學把希望又寄託給了培訓機構和一些專注於提升能力的收費課程。
大部分知識付費的專案還是非常不錯的,比如扔物線朱凱的 HenCoder Plus,比如極客時間上的 Android 開發高手課等。但比較遺憾的是,它們可能都是為大多數人制定的,而缺乏私人定製,可能並不適合現在的你。
知道自己不知道啥
大多數人工作 3 年後,會陷入這個階段:知道自己不知道啥,明白自己的薄弱之處。
這個時候其實很好辦,因為自己知道問題出在哪裡,當然好對症下藥,剛好我也就是處於這個階段。
這個時候不管是去選錄播直播加答疑形式的 HenCoder Plus,還是付費專欄式的極客時間,都是合適的。
不過依然有其他方式。這個階段的同學最大的問題是時間不夠用,大多數這個階段的同學可能都已經瀕臨成家養家的壓力,生活中的瑣事和壓力都多了起來,工作中可能也已經成為主程,除了要完成一些技術難題的攻堅,可能還需要指導一下新人,所以一定會出現時間極度不夠使用的情況。
時間不夠是最難解決的問題,可能也是最好解決的問題。時間確實就像海綿,擠擠總是有的,即使有時候我們會出現擠不動的情況,但那一定只是一個短期狀況。
這個階段的同學最需要讀書,因為這些同學通常都已經有了自己的知識體系,也明白自己的薄弱之處在哪裡,這時候就需要做專項提升,越到這個階段,就會越發現基礎知識的重要性。很多東西,真的需要學懂本質,這也是為什麼大多數面試官都喜歡考察基礎問題,因為真的基礎才是根本,一個基礎優秀的同學從來都不會太差。
我也是最近半年通過部門開展的讀書活動才愛上了讀書,書讀百遍,其義自見是真理。很多書籍需要你反覆軟磨硬泡幾次,每一次閱讀都是一次認知的提升,而認知的提升最終會帶給你財富的變現。
我希望自己在這一個階段能產出更多有價值的文章,在這之前,我當然也需要做知識的基礎夯實,於是有了系列,掃盲。
接下來,我還會從設計模式等開始,給大家帶來一系列文章的產出。
是的,設計模式就由於武功祕籍的內功,可能大多數時候我們都用不上或者足夠理解它們,但這些招式在某些時候真的就是會讓你的程式足夠精美和安全。
我們不需要去糾結每一個設計模式的使用場景,我們只需要始終記住,設計模式就源於生活,我們不需要去背誦每一個定義,只需要弄清楚它們大概的意義即可。
不知道自己知道啥
工作很久後,不少工程師會陷入第三個階段:不知道自己知道啥。
這時候,因為大多數知識已經成為了自己的血肉,很多設計理念和架構都會讓自己覺得理所當然,但真要較真起來,可能自己也弄不清楚到底是源自於哪裡。
很多時候,這些同學會更加明白自己的不足之處在哪裡。但時間卻更不夠用了,他們大多數都已經成為了團隊的領袖,成為了隊伍的靈魂,開始負責起團隊的大小事務,不能只關注到技術本身,而要關注很多技術之外的東西,比如產品感,專案推動能力,管理能力。大多數時候,Leader 決定了團隊的天花板,一個好的 Leader 能讓團隊的天花板更高。
但非常尷尬,這個階段的同學基本都有了自己的孩子,需要拖家帶口,需要處理人情世故,很難再把技術做的足夠純粹,即使很明白自己的技術不足之處在哪裡,卻很難抽出時間去處理,因為這時候,可能軟素質的提升才是當務之急。
總結
總的來說,一名工程師都會經歷上面的三個階段,我們不能去扭轉什麼,我們唯一能做的,就是讓每個階段提前,這樣才可以讓自己的精力在技術上投入更多。