一個畢業一年程式設計師的感悟

這裡寫圖片描述
前一段看到朋友圈裡的學弟學妹們開始晒畢業照,這一晃據我畢業也一年多了。走出了校園,工作了一年,見得多了,體會和感觸也隨之變多。所以,又開始習慣性地覆盤過去的一段經歷,用現在不成熟的想法去回顧之前更不成熟的想法,哈哈。


挑出我認為比較重要的四點感受來說吧。

一.理論知識的重要性

這個問題,我在畢業半年之後就意識到了。經常聽到有人說“學校裡的知識都是過時的,沒用的,工作中頂多也就能用到10%”。我承認這句話在某些角度上有一定的道理,但我認為理論知識並非無用,學好理論其實是很必要的。

我來告訴你為什麼。首先我們來分析一下宣揚“無用論”的那些人。我猜大部分應該都是對行業理解不深的開發小白或者是普通的開發人員,這些人可能剛剛工作沒幾年,覺得自己從零基礎到能開發出一些模組就已經很滿足了,覺得程式設計不過如此;還有那些可能是計算機專業出身,但是畢業後卻從事不相關的行業的那些人,茶餘飯後可能調侃一下專業無用論。

後者我就不說了,那其他行業確實用不到計算機理論知識。但對於前者,在我看來,混日子或者滿足於現狀的人居多吧。如果他們不改變自己認知,很難在這個行業走得長遠,程式設計師中年危機瞭解一下?真正牛逼的人,理論基礎一定很強!

最簡單驗證我的觀點的方法就是,大家去招聘網站看看大公司開發崗的招聘要求就知道了。很多崗位明確要求,計算機理論基礎紮實、資料結構與演算法基礎紮實。再結合往年BAT校招情況,哪個技術崗不考察基礎知識的?據我在BAT工作的同學說,這樣的行業巨頭,無論是校招和社招,在面試時技術知識都會作為重點考察內容,尤其是校招。
這裡寫圖片描述
我本科是CS專業,雖然我不是學院的學霸,但我專業課的成績還算是中上游。一開始工作的時候,我也覺得以前學的專業知識對工作好像沒多大幫助。但是越往後,理論基礎帶給我的優勢就逐漸突顯出來。

這裡我舉幾個例子。不瞭解計算機組成原理的人,在工作日常可能就分不清CPU、記憶體、硬碟等硬體相關的內容。經常碰見有的開發人員,明明花了4、5千買了一臺新筆記本,但是開發用起來還是很卡,結果是因為記憶體僅有4G;在編碼日常,就拿Java來說,有關物件的引用,實際上就是C中的指標的概念。如果不清楚計算機記憶體工作原理,就很難理解引用這個概念;同理對於不瞭解作業系統原理的人,可能就很難理解多執行緒;不瞭解網路原理的人,可能就不清楚ip、埠、http協議之間的關係等。

培訓行業之所以這麼火爆,是因為單純論程式設計技能,經過培訓或者大量練習,的確可以做到快速上手。但培訓機構很少會將有關計算機理論方面的知識,而這也是需要長期學習積累的。所以很多人反映從事開發幾年了,到某一時間點就感覺總也提升不上去,遇到了瓶頸,其實絕大部分原因就是基礎欠缺造成的。

當我認識到這個問題後,這半年來我開始針對性地複習相關基礎知識。雖然有些理論學起來枯燥乏味,甚至感覺沒什麼用,但是一旦理解了其道理,再來看眼前的工程,感覺就完全不一樣了。

二.解決問題能力的重要性

工作中,對於沒遇到過的問題,會不會往往不要緊,擁有解決問題的能力是最關鍵的。那什麼是解決問題的能力?就是當問題發生的時候,能夠用科學的、高效的方法,迅速解決它。我的一位領導說過一句讓我印象非常深刻的話——“當出現問題時,不要找100個藉口證明它的困難性,而是要找100個方法去全力以赴解決”。

剛入行的時候,每天要花大量時間在基礎的編碼任務上。但越往後,編碼本身往往不再是難點,遇到問題並解決才是工作的重點。沒有人會知道所有的問題的答案,就算他知道,那每天還會有各種各樣未知問題的產生。所以評判一個工程師它牛逼與否,除了看他懂得多少以外,還要看他解決問題的能力,是否能又快又好地解決問題。

拿我個人來說吧,本科畢業一年,從事開發工作兩年。我也不是那種每天都瘋狂學習的人,大學四年也不敢說自己積累了多少,所以要論知識和經驗,我要學習的東西還有很多。但是,這並不影響我現在從事的工作。雖然經常遇到難點,但迅速通過各種資源學習、整合解決遇到問題,是我參加工作以來一點點不斷在提升的能力。我可以自信的說,只要不是超出我能力範圍太大,交給我的任務或者遇到的問題,我都可以找到辦法解決,儘管在這之前我不會。

而且現在,對於開發人與來說,程式設計似乎越來越簡單了。工程中遇到的大部分問題,其實早就有人遇到過了。網際網路時代,各類技術部落格論壇平臺的內容越來越多,還有強大的“同性交友網”Github等開源社群,以及各種技術交流群社群等,我們很容易就能在網路上找到我們想要的解決方案。所以,對於現在的程式設計師來說,解決問題的能力其中一大主要部分其實是檢索能力。掌握了高效的搜尋能力,幾乎可以解決70%的問題。這裡就不展開說了,以後有時間我再整理一些我總結的搜尋技巧。

所以說,如果你擁有強大的解決問題的能力,那你的競爭力就會變得非常高。從校招就可以看出來,為什麼現在網際網路公司動輒能給應屆生開出20W、30W甚至更高年薪,難道是現在應屆生都懂得多麼?說白了,每屆應屆生畢業時的水平都是差不多的,企業心裡都有數。但企業投資的不是應屆生本身,還是那句話,會不會不要緊,是否具有學習能力和解決問題能力是企業所看重的。

同理,在面試中,面試官除了考察面試者知識技能積累情況,也會重點考察邏輯思維,其實就是解決問題的能力。有時候面試官的問題,沒什麼標準答案或者就是超綱的問題,以此來模擬遇到問題的情況,來觀察面試者如何應對。有關面試相關的感悟,我會另寫一篇來詳細說。
這裡寫圖片描述
各家網際網路公司的給應屆生的薪資概況

三.學歷的重要性

要說我目前的遺憾之一,就是沒有在本科結束後去讀研究生。當然,只是遺憾,我並不後悔我的選擇。我之所以這麼說,就是因為我覺得學歷往往很重要,但也絕不是百分百的重要。

在某知名匿名交流社群,經常會看到抱怨HR只認學歷的帖子,什麼非985、211簡歷不看、專科靠邊站等,抨擊中國的學歷社會多麼不公平,這樣的帖子很多,下面的評論也是說什麼的都有。其中我覺得挺有意思的評論是“別人寒窗苦讀12年考上名校和你隨隨便便考個專科,如果能在畢業時同等待遇,那你認為公平麼?”

如果單純認為高學歷等於懂得多,那就容易產生抱怨情緒——你看,雖然我學歷不高,但通過這麼多年的努力,見得也多了,懂得也不少,還非要拿個高學歷去證明一下麼?這其實就是對學歷的一種誤解,高學歷背後的重要性其實有很多點,我簡單和大家扒一扒。

1.工作優勢。有的工作只要985/211本碩的學生,這是硬傷。這裡有人一定跟我說,985、211裡也有混子,身邊某某某普通學校出校混得比重本好的言論。沒錯,我承認,你說得都對。我還可以告訴你,馬雲還是杭州師範大學畢業的呢,然後呢?這個世界上,總有人用個別例子去硬懟大概率事件,或者總痴心妄想小概率事件會發生在自己身上。事實證明,985、211裡大部分學生的各項能力要比普通學校學生強,所以優秀的企業,肯定會擇優挑選名校學生。儘管其他學校也有牛逼的人,但相比於篩選劣質簡歷的人力成本,企業寧可漏掉他們。試想你是一個知名公司的HR,每天收到上千上萬份簡歷,你會有時間一個一個分析低學歷者的簡歷判斷他們的能力麼?

2.在攻讀高學歷的過程,會培養並提升解決問題的能力、科學思維的方式。這也是我前面提到的,這種能力是很具有核心競爭力的。論智力水平,絕大部分人先天情況都差不多。所以這種後天訓練出來的思維能力,會讓一個人在人群中脫穎而出,而且一個人是思維高度,往往決定一個人能走多遠。

3.人脈優勢。人往高處走,水往低處流。其實很多人忽略了高學歷的潛在價值,就是你會結實一群大概率未來都會發展不錯的人,你們會成為同學朋友,這是你人生中寶貴的個人財富。這比財富10年之後,會越來越值錢。大家看看那些知名企業的高管就知道了,很多都是名校出身,再看看他們身邊的合作伙伴或者同事,也大多是名校出身。身處於這樣的圈子,圈子就是價值。

所以不要只認為人家高學歷只不過是多讀了幾年書。一紙文憑確實只是一張紙,那張紙的價值是有限的,但是背後隱藏著的價值,如果利用好了,就是無限的。所以,之所以有人讀了幾年研究生還不如本科生、專科生,實際上就是沒有利用好隱藏價值。

不過我還是那句話,學歷往往很重要,但也絕不是百分百的重要。我是普通學校本科出身,但我也拿著一份還算不錯的薪水,沒有比名校出身的差太多,我身邊有很多優秀的同學,也沒有名校光環,但也照樣在大廠混的如魚得水。當然了,這同時也要付出更多的努力,才有可能跟名校出身的人站在同一高度。你可以認為這是雞湯,但我想說的是沒有理由會阻礙你變得牛逼。按照之前我說的思路,所以如果你能夠通過其他方式獲得那些隱藏價值,學歷的重要性會一定程度被弱化。正所謂彎道超車,機會總是會有的。

四.堅持寫作的重要性

我從去年畢業開始,正式在CSDN上寫部落格,主要以技術為主,記錄、整理工作中遇到的問題的解決方案以及學習筆記。看我朋友圈的朋友可能會知道,前幾天我發了一個部落格訪客截圖,開博一年多以來,訪客超過10W ,排名3W 。這也是算是對我一年以來堅持寫作的非常重要的一次鼓勵吧。
這裡寫圖片描述

為什麼說要堅持寫作?

1.逼著自己把知識學透。之前也提到了,開發這個領域,程式設計師每天的主要工作就是學習和解決問題。如何驗證自己有沒有真正掌握學到的知識?大家可以類比一下學生時代,同學之間互相輔導。有時候明明自己可以解一道題,但是給別人講的時候講不明白。這其實就說明自己沒有完全掌握這道題,如果你能給給別人講明白你學到的東西,就說明你掌握了所學的內容。而工作中,一般也不會有給別人當面講課這樣的機會,所以通過工作筆記、部落格、公眾號等方式分享個人學習心得、整理學習內容、傳授經驗就是最方便的講述方式。我的體會最深的就是,每次自己學習的時候,碰到不好理解的、困難的內容,如果抱著要寫成部落格給別人看的心態,就能逼著自己把它學會,原因很簡單——我不想在部落格上胡說八道誤導別人。

2.鍛鍊自己的邏輯能力、表達能力。有時候就算自己真的掌握了某個技能,但是依舊沒辦法給別人講清楚。這就說明自身的邏輯能力和表達能力還有欠缺。經常聽外行的人評價程式設計師話不多、社交少,這正恰恰說明了大部分理工科出身的程式設計師的弱點——不善於表達交流,而這也是很多人遇到瓶頸的障礙之一。雖然你做了很多,但是別人不知道啊。因此我認為,一個真正出色的工程師,一定是善於表達的,他不光自己會做,還要有邏輯地講出來、幫助其他人一起成長,這才是出色工程師應該具備的能力之一。騰訊馬化騰、微信張小龍、小米雷軍、百度李彥巨集、360周鴻禕就是很好的例子。

3.寫作可以提高工作、學習效率。不止一次,我的同事問我一些技術問題,恰巧這些問題我以前遇到過,花費了一定的時間去解決並整理成部落格,這時候我就可以直接把部落格地址發給他,這樣就節省了很多時間。同時,通過記錄自己學習過的知識,也極大地方便了日後的複習,避免了很多重複篩選資訊的時間,而且自己整理的內容也是最適合自己的。

4.建立個人品牌,擴大影響力。評價一個程式設計師牛不牛標準有哪些,學歷高?薪資高?職級高?大廠出身?GitHub上有萬個Stars專案?要我說,有知名個人品牌的程式設計師就很牛逼。經常看到有人在社群抱怨自己不是名校出身,學歷不高,又沒有大公司工作經驗,找工作困難,能力得不到認可。而學歷、學校、過去的工作經驗都是已經板上釘釘的事,再怎麼抱怨也沒用。但這些可都不是阻礙自己建立個人品牌的理由。我們應該感謝這個時代,我們幾乎沒有成本就可以在各個平臺上建立個人賬戶,發表自己的觀點和內容。如果能有個百萬級訪問量的部落格、或者運營一個有幾十萬粉絲的個人公眾號,我相信就算你沒有名校名企光環,也一樣可以得到其他人、其他公司的青睞。誰會拒絕一個有影響力的人呢?

所以,寫作幾乎是一件有利無害的事。當然了,我反對為了寫部落格而寫部落格。寫的亂七八糟有頭無尾不說,排版混亂或者乾脆扔一堆程式碼在上面,沒有註釋沒有自己的講解,甚至不經稽核把錯誤的內容發表出來,這種部落格不光浪費自己的時間,更耽誤其他人寶貴的時間。所以我一直堅持原創,堅持質量為主,拒絕衝量,拒絕抄襲,我也相信我的文字隨著時間的積累,會給帶給我巨大的價值。


以上是我畢業一年以來的思考與總結,其實還有很多其他“重要性”,有時間再跟大家分享。一年僅是個節點,未來還有很長的路要走。時刻保持清醒,不斷思考,堅持總結與覆盤。最後,如果你喜歡我的分享,覺得有幫助的話,給個讚唄,哈哈。


本文同步發表於我的個人公眾號【小碼叨叨】,來聽馬叨叨的日常叨叨,打消你一切對程式猿的誤解。喜歡的朋友可以掃碼關注哦~
這裡寫圖片描述