第五章 年輕的時候,我們該如何選擇 不要偷懶,也不要耍機靈

總是希望能夠把自己經曆過的一些事分享出來,把走過的彎路告訴後邊的人。有些痛苦和迷茫,你自己回過頭來覺得很珍貴,其實隻是你自己不願意承認那些苦都白受了而已。

先說下我自己。小時候,我有嚴重的小兒多動症,後來考進了“985”。畢業後先去了一家國企科研單位,後來去了一家世界500強的公司,一直幹到現在。

我從大學開始接觸編程,到現在正好是十年,中間斷過,後來又繼續從事編程工作。

做任何事情,最關鍵的是先入門,從事編程工作也是一樣,那麽做編程到底到了哪個地步才算入門呢?所謂的入門,是你進了一家公司,然後開始給人家幹活,並且能夠提供合格的交付件,這就算入門了。我的目的是在你一行代碼還沒寫的時候,給你一些建議。

不管在任何企業,厲害的人應該是主動地幫企業改進流程,給企業降低成本,提高效率,當然要實現這個目標非常難。最高的境界就是你改進了流程,企業終於不需要你了,把你開了,當然這是開玩笑的話。任何能做到提高整體效率、降低成本的人,都是企業的寶貴資產,做程序員也一樣。因為我是做程序員的,所以,我就寫寫如何做程序。我想我寫程序的心得,不管從事什麽職業和行業,都會有價值的。

我們分成幾個話題來討論:

一、做程序員如何入門

如果你一行代碼都沒寫過就想當程序員,我覺得你勇氣可嘉,不過也可以試試,其實思路是一樣的,就是使勁地敲代碼。你可以搞個編譯工具,找一本程序的入門書。學習C語言可以選擇譚浩強的書,學習J**A可以選 《瘋狂J**A講義》,千萬別碰什麽《J**A編程思想》之類,寫代碼不需要思想。你可以把上邊的每一個例子都敲一遍,然後運行一遍,千萬不要偷懶,也不要耍機靈,一個例子都別落下,而且必須是全部運行通過了。當你把一本書上的例子和習題全部運行完了,這本編程書30%的知識就是你自己的了。

然後,你需要繼續敲代碼,不要去做那種複雜的算法題,先把基本的東西做熟練,直到你翻開任何一頁,給你指一下,你不看人家原來寫的是什麽,直接把那段代碼自己敲出來,這本書就是你的了。如果做到這一步,這門語言的道路上,你已經行走了50%了。

然後,你需要繼續敲代碼,找點稍微複雜點的算法題,但是別找太複雜的。如果你的資質和我一樣平庸,就先多找些習題,千萬別搞大躍進,一道一道地做,至於定什麽具體目標,大概如下:

1. 菜鳥級的程序員,累計敲了一萬行的代碼,能夠不看書編碼了;

2. 能夠給公司幹活的程序員,累計敲了五萬行的代碼,但是寫代碼的速度比較慢,調試的時候也比較慢;

3. 老手級的程序員,累計寫了五十萬行的代碼,寫起代碼瘋了似的,半天就可以寫兩千行,五遍以內運行通過的人。

你可能覺得我在亂說,其實並不是。比如,怎麽篩選出優秀的飛行員呢?就是要看這個駕駛員安全駕駛了一千個小時還是一萬個小時。

跑步圈討論今年的訓練水平,就按照跑了多少公裏衡量。程序員編碼也是有硬指標的,硬指標達不到,你就沒辦法建立那種神經元之間的硬鏈接,也就沒法做到收放自如。不要迷茫,不要鬱悶,還沒寫夠五萬行,你找不到如何編碼的感覺是正常的,就像你初中之前寫出來的作文跟智障寫的似的。多練,總錯不了。

我大學老師和我一樣,都是平常人,但是他成就很高,他像一個布爾什維克一樣要求自己。他每天寫代碼,寫文章,每天工作十二個小時,每天也跑步一個小時。他說其實編碼和寫文章這倆事是一回事,你得不斷地寫,才會有感覺,才不會出錯。你寫得少,沒法下筆成章,寫出來的東西別人讀起來困難,你自己的想法也傳達不出去。不信的話,你自己試試,寫一段話或者一篇文字。如果好幾年不寫,你就能感受到再寫東西有多別扭。

編碼也一樣,當你達不到累計編碼五萬行這個硬指標的時候,你是難以做得嫻熟的。當你進了公司,上司讓你寫個程序,實現個小功能,你立刻就虛了。就跟讓你寫一篇小短文似的,根本傳達不出來你想表達的。但是如果你像我這樣笨鳥多練,最起碼可以寫出很長的有價值的文字。

最後聊一句關於編碼的語言。有人問,我是先學C語言呢還是J**A呢?還是Python?我推薦J**A,因為J**A應用範圍廣,學了它以後容易找工作,先學了J**A,以後轉寫Android或者Python也容易。那學習C語言呢?我不太推薦C語言,因為用得比較少。

至於算法結構,我不太建議學。因為當你進了公司,基本上你這輩子都不用自己實現一個雙鏈表。如果你說你要去個高級公司,要去寫庫函數,那就需要你自己去專研或者請教更厲害的人。

二、關於數學

有人問,我數學不好,能當碼農嗎?這個我思考了很久,我認為是沒問題的。但不確定,萬一是我自己的認識有局限呢。後來我給阿裏巴巴、騰訊、百度的小夥伴都打了電話谘詢了下,答案果不其然,總結起來一句話:除非你做算法相關的,否則學很高深的數學沒太大用,月薪三萬以下的編碼工作,初中數學水平就夠了。

三、關於年齡

我被問得最多的問題是,我今年××歲了,還可以改行做程序員嗎?說實話,我認識不少三十五歲以上改行當碼農的,這個行業門檻低,前途也不錯,你要是不確定自己適不適合,按照我之前寫的,看看自己能不能寫完第一個階段的一萬行代碼。如果你寫完了,看看能不能寫到五萬行,如果能寫到,你確實適合搞這個。這些需要多長時間完成?事實上你要是合適的話,很快就完成了;不合適的話,估計這輩子都達不到,寫幾行就忘記這回事了。