如何避免新入職的程式設計師痛苦和迷茫?
離去年寫的那一篇《寫給新入職的畢業生們》差不多一年時間了,這一年來成長了不少,又有了許多新的感悟和心得,在此分享給大家。
1. 如何快速的積累和提高
新入職場,老闆分配的技術方向往往都會跟自己的專業並不相關,因此,新人大都數都會有一個快速學習的過程。比如網際網路常見的R&D的方向:Android開發、iOS開發、演算法、前端、後端等等,那麼,如何才能快速地掌握一門新的技術,並且深入積累和提高呢? 這裡以Android的學習和積累為例來介紹我的經驗,其實其他方向的也可以依次類推。
(1) 首先肯定是看書/看網上教程/官網文件
例如:《Android 4 高階程式設計 第三版》,Android Developers 官網
(2) 閱讀優秀的開源專案
(3) 重複造輪子
例如: 自己獨立完成一些Android系統自帶的App應用,或者網上流行的App應用,如自定義控制元件、便籤、記事本、相簿、相機、通訊錄、音樂播放器、視訊播放器、launcher桌面等等。
在我的成長過程中,我基本上利用業餘時間把這些App應用都實現了一遍,雖然沒有系統自帶的做得完美,但是這個過程真的讓我提高非常大,掌握一門技術必須得通過實踐,程式碼寫得多了遇到的坑多了,才能真正地熟悉和掌握一門技術。
(4) 打造自己的程式碼庫
其實,無論做Android/iOS開發,還是做前端/後端的開發,其實說白了,都是基於某些作業系統平臺或者某些系統框架進行具體的業務邏輯的開發而已,要想掌握某個平臺/框架的開發,無非就是掌握並且熟悉這個平臺/框架提供的API罷了。因此,我個人認為,最有效最有價值的學習方式就是一邊學習系統的API,一邊封裝打造屬於自己的程式碼庫,在實際的專案開發過程中,你可以快速地複用自己封裝好的程式碼模組,而不用重新閱讀API文件/重新在網上搜搜xxx的實現過程。
如圖所示,這是我這幾年在Android App開發方面積累的程式碼庫,涉及到Android開發的方方面面,平時專案裡要用到那一塊,我幾乎很快就能找到已經封裝好的類可以直接使用,連老闆經常都很驚訝我的開發速度和效率。
(5) 從公司的專案中發散學習
永遠不要把自己的成長完全寄託給公司,希望新人都能認識到這一點,公司好的專案會很鍛鍊人,但是每個人在專案中都只是一顆螺絲釘,只會負責某一個模組,自己不主動去探索,沒有人會給你介紹整個系統的架構和工作原理。在我的成長過程中,一般有2個習慣,一個是搞清楚整個專案是做什麼的,有哪些模組,整個系統是如何架構和設計的?另一個習慣是從自己負責的模組開始發散,找到一個又一個興趣點利用業餘時間進行深入地學習。
舉個例子,前段時間為公司的專案開發一個簡易的視訊播放器,要求支援DLNA協議,實現MediaServer功能。由於趕進度,參考網上現有的程式碼快速完成了這個功能。在專案結束後,我又繼續利用業餘時間,深入瞭解和學習了DLNA協議和UPnP協議,發現這個協議真的很強大,不僅僅可以用於多媒體共享,還可以擴充套件開發很多基於區域網的應用,最後將此協議用到了我自己的業餘專案中去了。
(6) 獨當一面的能力
個人認為這是任何做技術的終極目標,在我的成長過程中,轉過很多方向,但是無論做哪個方向,我都會不斷地以這個標準來審問和要求自己,如果上面沒有更大的大牛在,我能否獨立搞定?為什麼沒有這個信心,哪方面還很欠缺?後面的成長過程中,則努力去彌補這塊短板。
2. 不要太浮躁
(1) 做xxxx方向有前途嗎
這是很多新人喜歡問的問題,其實任何事情都是沒有絕對的,今天很有前途的方向可能明天就會日薄西山。個人的建議是不要把自己的眼光侷限於某一特定方向,搞技術真正牛逼的不是做的哪一個方向,掌握了哪一門技術,而是在於下面的這些方方面面:
A. 程式碼編寫功底,包括程式設計規範,以及對程式語言本身的掌握程度,如對C/C++的各種特性,Java的記憶體回收,編譯連結原理等等
B. 對業務邏輯的理解能力,軟體的設計以及架構能力
C. 對系統原理的深層次的認識和理解,如:Android系統的View架構,Linux的程序通訊機制、記憶體管理機制,作業系統底層原理等等
D. 分析問題、定位問題、解決問題的能力
E. 其他等等
無論做什麼方向,都是可以不斷積累和鍛鍊這些能力的,不用太過於關注某個方向有沒有前途,個人綜合能力提高了,切換方向很快的。
(2) 跳槽、創業
因為生活的壓力,因為同學的攀比,或者因為很多很多其他因素,作為年輕的職場新人,我們永遠對薪水都是不滿意的;對於稍微比較努力一些的人,也是很容易自我滿足自我陶醉的,再加上獵頭的鼓動,導致網際網路行業的跳槽率居高不下,我不認為這是一件好事,我依然非常理想地認為是金子總會發光的,希望公司的老闆一定要捨得給那些很努力地在成長在發光發熱的員工多加點薪水,不要寒了他們的心。對於跳槽這件事,我個人覺得,要跳槽就果斷跳,不跳就踏踏實實好好學技術,千萬不要在猶豫徘徊中消極怠工,浪費了成長的大好時機。
行業內有句話,說幾個網際網路人在一起聚會,一定會聊到創業。確實如此。我也一直在關注著創業的話題,但是瞭解得越多,反而越來越平靜了,創業不可怕,可怕的是沒有認清自己的能力就盲目衝動地去創業,不是每個人都適合創業,不是每個人都有能力有實力去創業,不要被媒體天天宣傳的成功故事擾亂了心智,作為職場新人,我們還遠沒有達到獨立創業的要求和能力,我們需要沉下心來,面前最重要的事只有兩個:一是快速提高自己的技術能力,二是迅速積累財富,至少要攢到去創業時不拿一分錢工資的情況下還能撐一年甚至更多。
(3) 知其然,也要知其所依然
如今網路發達,很多功能都能在網上找到現成的程式碼參考,或者找到不錯的開源專案,站在他人的肩膀上,我們往往能夠快速地完成某些功能。但千萬不要過早地洋洋得意,記住,快速做出來是一種能力,能深入理解原理又是另一種能力,它們並不相等。
做技術不要浮於表面,得過且過,用完了某些開源庫,完成某些專案之後,一定要抽時間深入去了解底層原理,這樣才能真正得到昇華和提高。
(4) 遇到問題,不要退縮
我作為新人的時候就曾經有這個毛病,比如拿到的專案程式碼編譯不過,系統執行過程產生一些某名奇妙的崩潰,或者老闆讓我在一個很大很複雜的系統中新增/修改某個功能,這時候往往內心就會打退堂鼓,會考慮找老闆或者相關負責人幫忙一起看看。其實,遇到問題正是鍛鍊和提高自己的最好的機會,在不影響專案進度的前提下,一定不要過早地投降和認輸,沉下心來,相信自己,一層層認真地研究和分析,你一定能夠找到原因,解決問題的。
同時還需要提到的是,解決完任何一個問題,都要嘗試去總結一下,哪怕多花一點業餘時間也無妨。曾經一位老師對我說過:“真正能成大事的人,往往都是那些懂得總結和提煉的人”。對此觀點,我深表贊同,記憶猶新。
3. 做一個有職場情商的人
(1) 言簡意賅,是一種能力
老闆只想聽關鍵資訊,很多時候真的並不關心你那牛逼哄哄/困難重重的過程,不要總是講故事似的從頭到尾廢話連篇。
(2) 演講,要講乾貨
如果有機會做分享和演講,請牢記這句話,站在臺下的聽眾的角度想想,他們花這麼多時間到底想聽到什麼,如果準備分享一些廢話,就不要上臺了。
4. 打造屬於自己的名片
這是一個老生常談的話題,無外乎又要說到建立自己的部落格啊,Github啊,其實,以前我並沒有這麼深刻地認識到這一點,但是隨時社交圈子越來越大,越來越清晰地感受到擁有屬於自己的名片是一種多麼重要的事情,特別是認識一些新朋友,自己的公司名氣不大的情況下,真的很難讓對方記住你。
(1) 擁有自己的個人網站、部落格、Github
像BAT等大公司的人,不用任何部落格和Github程式碼別人都會預設認為很牛,而處在小公司的人,公司本身不能作為我們的名片,那就只好通過努力,讓個人網站、部落格、開原始碼,成為自己的名片。有了這個名片,我們才能更加容易地結實業界大牛,也能更好地被別人認可,更好地找到下一份工作。
(2) 關注行業趨勢,建立自己的評判體系
人們都喜歡有個性有觀點的人,而不喜歡人云亦云的人。對自己感興趣的行業,密切關注行業動向和趨勢,掌握最新的資訊,只要你持續在某個方面積累,並且有自己的觀點和判斷力,在朋友圈中,會自然而然地形成一種說服力,成為一個圈子內的“小專家”。這也是屬於你的名片,你一定要讓你的朋友在向別的朋友介紹你的時候,能拿出你的特點來,比如:xxxx是這方面的“專家”,平時關注挺多的,觀點很獨到等等。
5. 小結
其實還有很多很多的想法和經驗無法全部一一道來,這裡就挑出了一些自認為比較重要並且有價值的觀點分享在此,希望對職場新人的心態和發展能有所幫助。文章最後,用最近看到的一句很勵志的話作為結尾吧:“別在最能吃苦的年紀選擇了安逸”,大家一起加油,共勉。最後,歡迎大家關注我的新浪微博@盧_俊進行深入的交流、獲取最新的文章和資訊。