陳皓:給程式設計師新手的一些建議

發表於2011-07-12

原文:陳皓

前段時間因為實習生計劃花了很多時間做了實習生招聘的工作,產生的一些想法,寫在這裡。

這次招聘過程中,我發現我們在校的學生有下面的這些特點:

1)NB的專案。當說到自己做過的專案時, 我發現他們做的事都是很NB。要麼是研究Linux的底層核心,要麼是影像識別處理,要麼是推薦演算法,要麼做高效能運算,要麼做資料探勘,要麼是移動方面的協議,還有一些很高深的課題我聽不太懂的專案。這讓我想起當年我在學校裡的實習,對比起我用Java Applet 和 HTML做作業系統的教學課件,或是在公司裡用Delphi/PowerBuilder做的那些MIS系統。讓我覺得有些汗顏。

2)OK的解決問題能力。當問到演算法題時,我發現他們的問題解決能力還OK。我一般問1到2箇中低難度的演算法題和1個基本的物件導向設計的題,都不難。我相信只要在學校裡好好學習的人都應該答得出來。無非就是一些基本的演算法和基本資料結構操作的問題,和比較基礎的物件導向設計的題,說白了就是作業題。可惜的是,只有5%不到的同學能夠在不給提示的情況下答出來,70%的人可以在給一定的提示下答出來,15%左右的同學需要提示到幾乎給出答案才能答出來,還有10%的同學怎麼給提示都答不出來。

3)WTF的編碼能力。老實說,對於解演算法題,我還是比較可以接受的,因為80%左右的同學在給予提示後都能描述出解題的演算法,於是,我讓他們把這個演算法用他們最熟悉的語言寫出來。但結果讓我出乎意料,一段在解法很清楚的情況下只需要不到30行程式碼的小演算法題,只有一個人能在10分鐘幾寫完,其它的人基本所有的需要30分鐘左右(甚至40分鐘),有2、3個人居然寫不出來。有一個比較極端的case是——有個同學花了十分鐘都寫不出從一個整型陣列中找到最小的正數的程式碼。這個事讓我覺得很驚訝,難道大家在做專案的時候不程式設計嗎?

對於這種情況,我想給大家以下後一些建議:

我感到我們在校的學生正如“為什麼中國的網頁這麼爛”中所說的——他們習慣於獲取大量的知識,而從不對這些知識進行思考和總結。問題不是我們知道多少東西,問題是我們在獲取這些知識的時候會不會去思考這些知識後的東西?比如:為什麼會有這麼多經典的資料結構,陣列,連結串列,樹,雜湊表,圖這些資料結構主要用來解決什麼樣的問題,他們的優勢和劣勢是什麼?沒有思考過,就不算真正的懂,沒有思考過,你將無法應對萬變的問題,沒有思考過,你將成為書呆子。

多多實踐而不是研究。程式設計不是在實驗室做科研搞理論啊,計算機這本就是一個實踐性很強的的學科啊,這不是數學,這需要你多多的實踐啊。我們不要真以為讀的是——電腦科學(Computer Science )就是搞理論的了,這裡面需要很多很多的Engineering的工作。(我實在是很難想像,雖然有這麼多人寫一般難度的程式,居然會是那麼痛苦的事)

我在我的新浪微博(@左耳朵耗子)裡說的,我們不要以為做過專案,會寫程式,我們就是程式設計師了。如果你只是在按部就班地寫程式碼,你就是Coder,江湖叫“碼農”,不要把自己當成“碼農”,我們一定要對自己的程式碼,自己的設計不停地反思和總結,並精益求精,寫程式本來就是一件有價值的事,這就像寫篇作文人人都會寫,但並不是人人都能把文章寫好。程式設計和寫作都是一樣的,這都是在搞創作啊。想做“碼農”還是想做“程式設計師”?自己的決定。

我們的教育的確很“廢柴”,但這不是我們成為“廢柴”的原因。如果我們的學習還停留在“別人給我什麼我就學什麼”的被動學習階段,那麼你真的不懂怎麼是學習。雖然,我們的學校裡並沒有教你什麼是“Version Control”,什麼是“Coding Style”,什麼是“Refactory”,什麼是“Code Review”,什麼是“Unit Test”,也沒有告訴你一些經典的設計的和架構,等等,等等,但是這是什麼年代了?這個時代不是像我上學那時——學校機房裡上機用的電腦連記憶體和硬碟都沒有,用5寸的低密軟盤面對綠色顯示器的286時代了。我們身邊有很多很多優秀的人,網上有很多優秀的文章,書店裡也有很多不錯的書,而且我們的軟體開發日趨成熟,如果我們還學不好的話,那麼我們就是在犯罪!

最後,和大家說一下公司的實習生招聘。這個事情其實是畢業生招聘的一個組成部分,也就是說,因為我國教育的問題,再加上學生自己的問題,導致畢業生量多質次的情況很嚴重,對於公司,其很難從學校招到一個比較不錯的畢業生,這種情況已經不是新問題了,所以,也有很多公司都不招剛畢業的學生。因此,通過實習機會了解並招聘畢業生成了很多公司的畢業生招聘的手段。所以,在這裡想告訴在校的同學們,千萬不要以為實習計劃就是字面上的實習。其實,這和正式的招聘沒有什麼差別,同樣也要看你的能力的。


相關文章