程式設計15年,如何才能成不了高手?

大資料v發表於2018-05-25

導讀:總是會有人問我這樣一個問題,如何學習程式設計?我從來沒有正面回答過這個問題。我都是會推薦他們去知乎或者百度貼吧去問一下,因為那裡大牛的密度比較高。我不是大牛,所以,不好回答這個問題。


但是總有人不死心啊,總是問個不停,覺得我孬好做了這麼多年程式設計師,總得有點經驗吧,我想了一下,成功的經驗真沒有,失敗的教訓可以說一說。雖然說失敗是成功之母(BTW:我並不相信這句話,我認為這就是安慰失敗者的話,畢竟人家都失敗了,總不能傷口上撒鹽,再補一刀,只好說個失敗是成功之母),還有一句話是,成功總是相似,失敗卻各不相同。反正雞湯的話,怎麼說都有道理,我只是來說說我的一些不成功的教訓吧。




01 技術高手的標準


我在這裡只說程式設計這個技術上的標準,很主觀的一個東西,只是我心目中技術高手的標準。有人如果反駁我說,我技術不好,但是家裡是拆遷戶,有的是錢;或者有人說,我技術不好,但是,我泡到了老闆的女兒,比如說,成了百度的女婿,阿里巴巴的女婿,或者騰訊的女婿,如果這幾個創始人的後代是女兒的話,其實男的也無所謂,愛情是超越性別的;或者是直接讓這幾個創始人離婚了,然後和你結婚;這種更成功,是廣義上的成功,不在我的討論範圍之內,我講的是狹義上的成功,作為一個程式設計師,在技術上取得的成功。


我覺得標準只有一個:有拿得出手的產品。只要你說出你做的軟體的名字,人家就給你起立鼓掌的那種。比如說Linus和Linux,Stallman和GNU軟體,Bill Gates和微軟,只要說一個名字,我們就能聯想到他的軟體。



以最低最低的標準,我是個徹底的失敗者,我沒有一個可以拿得出手的軟體,這也是我不敢回答大家提出的問題的主要原因,在軟體開發行業,我是個失敗者。我做的所有事情,沒有留下任何痕跡。希望大家引以為戒,成就你們自己。我就總結一下我失敗的教訓。



02 不去擁抱開源軟體


現在回想起來,在讀書的時候,我錯過了兩次加入開源社群的機會。第一次是我的導師讓我給一個機頂盒寫一些東西。當時盛大公司正在弄盛大盒子,這個概念在當時還是比較前沿的,當時就有不少公司學盛大,我導師也從一個公司搞來了一個專案,當時有個技術是想通過p2p的技術來傳輸資料,我在電臺第3期的時候,做了BTTorrent的專題,其實就是那個時候學會的。我的導師就把這個任務讓我去做。


當然了,我肯定是去找開源的程式碼去修改,因為這個是做Demo,看看方案行不行。我就找到了一個叫ctorrent的程式碼,當時還沒有github這個社群,都是在sourceforge這個社群上,當時還不用git這個軟體,大家都使用CVS這個東西。


當時ctorrent這個軟體還處於非常初級的階段,我記得當時我用的是Ubuntu 5.04,根本就執行不起來,但是當時有程式碼,我就硬著頭皮看程式碼,一邊參考bittorrent的python程式碼,一邊看下載的C語言的程式碼。很痛苦,但是老師佈置的任務,不幹也不行。



當時P2P是一個有法律風險的東西,反正我們是學校,也沒打算指望這個成功,我當時還是挺用心的,反正搞了多半年,終於能在電腦上比較流暢的跑了,下載東西沒什麼問題。因為當時碰到了很多問題,我就抱著看見棗樹,不管有棗沒棗打一杆子的態度,給當時釋出ctorrent的人寫郵件問,結果搞了好久,他竟然回覆我了。然後,一來二去,我給他的ctorrent修改了不少bug,但是,這個傢伙也對這個專案不上心,可能是他寫了這麼個東西,他也沒想到竟然有個SB天天來煩他,問東問西的,他後來還跟我說,要不這個專案轉讓給我維護算了。


我當時就覺得,我就是為了完成導師的工作,我對這個東西也沒有興趣。這件事就這樣過去了,後來,這個ctorrent我又用過幾次,再後來,又出了一個叫Enhanced CTorrent,這是個基於Ctorrent的新專案,原來的CTorrent就消失了,現在這個叫Enhanced CTorret的軟體現在還活著,我現在編譯了一份在我家裡的樹莓派上,用來下載電影。


另外一個我可以參與但是我最後放棄了的專案是GIMP,一個在Linux上的開源專案。也是學校裡的任務,做很多濾鏡,大家到處copy了一些,就是對著Photoshop上的一些收費的濾鏡copy,在GIMP上實現,學校裡有很多這種扯蛋專案,從國家坑錢。比如做自主研發的OS,做什麼會比較出成果呢,當然是影象處理軟體了,能展示出來,反而核心,是沒法展示的。


我當時因為參與了這麼一個專案,就有了一些做的還不錯的濾鏡,其實GIMP這個軟體是支援指令碼的,支援scheme這個程式語言,我當時不會,就去學習,還提交了幾個改進,我本有機會把那些濾鏡都拿出來開源的,因為,很多專案是展示完成,就算專案驗收了,程式碼就死了。但是,我沒有。


如果大家有機會接觸開源社群的話,一定要熱情的擁抱他。現在回想起來,我的C語言程式設計,都是在修改CTorrent那個軟體時候學到的,我學了Scheme那個程式語言,是在給GIMP寫指令碼的時候學會的,一門非常古老的lisp語言,我覺得,C語言和Scheme這兩門語言,是我讀書時候學到的最好的東西,大部分的課我都忘記了,這兩個,還記得。這已經快10年了,我非常後悔沒有繼續在開源軟體中混下去。




03 參與了太多無謂的爭論


感覺像宗教一樣,以前我經常維護一些程式語言,比如C語言,經常維護一些作業系統,比如Linux。現在回想起來,非常的浪費時間,也沒什麼用處,純粹就是發洩。當時是學生,對任何東西都是一知半解,除了精通如何在網上吵架以外,其實當時對C語言和C++並不懂,只是當時就會這幾個語言,別人一說不好,就得去爭論,其實沒什麼道理可言,就是增加了發貼的數量。因為我又喜歡打遊戲,而且大一開始,我就有了女朋友,很少有時間來學習技術,結果有點時間就去論壇吵架了,非常的不划算。


如果時光能倒流,我就回去扇自己兩個耳光。完全沒有必要爭論語言的優劣。學程式設計和考駕照差不多,學個C1的本,就會開各種小汽車了,只要有C1的本,不管是本田還是豐田,寶馬還是寶駿,都差不多。和程式語言一樣,汽車有一些東西是通用的。比如每個汽車都有方向盤,大部分方向盤都是圓的,每個汽車也都有剎車,都有方向燈……


主流的程式語言也有這些東西,比如都要有變數,有數學運算,有函式,有函式呼叫。這些東西,在主流的語言中,一個都不能少。這些都是語言的關鍵特徵,只要理解了變數,函式,呼叫,遞迴這些關鍵特徵,換一個程式語言,就像老司機換一個車開一開,難度不是特別大。



對初學者來說,不能追求那種新語言來學習,比如說,前兩年特別火的Rust語言,這個語言號稱能取代C++,至於行不行,暫時不討論,但是,對菜鳥是非常不友好的。因為Rust也許很厲害,但是,那是以後厲害,現在這幾年肯定不厲害,學這種語言,不如實在的學點C,Java,Python靠譜。萬一以後Rust不厲害呢,就相當於你學開車的時候,學了一個油門在方向盤上的汽車,再開其它車會崩潰的。所以,不能學那種號稱有100種新特徵的語言做為入門之選。


還是要關注語言最核心的特徵,就相當於開夏利車很穩的老司機,換個寶馬也肯定很穩。如果是新手,開啥車都不行,這不是車的問題,是自己開車能力的問題。



04 過度依賴搜尋引擎


大家應該都知道,唐朝有個詩人叫賈島,他推敲兩句詩,一句是“僧敲月下門”, 一句是“僧推月下門”,這兩句詩裡就差一個字。當時我就覺得,沒啥區別。現在如果仔細體會一下,區別還是很大的。如果是“僧敲月下門”,可能就是一個老朋友來串門,敲敲門。如果是“僧推月下門”的話,這個意境可能是怕驚動這個門裡的人,或者只是單純的回家。如果是“僧踹月下門”,可能是有仇,來報仇的。如果是“僧拆月下門”,可能是城管,來弄違章建築的。還有多,大家可以自己體會,比如“僧掛月下門”,這個是自殺了;“僧射月下門”,射門,可能這個僧是個足球愛好者,見門就射。


我覺得寫軟體也是如此,應該多推敲一下,如果不推敲,碰到問題就去stackoverflow上一通搜尋,然後複製貼上過來,當時能解決問題,但是過後可能自己也不明白了。我是這方面的典型,stackoverflow型程式設計師,一碰到問題,就想先去搜搜,結果一搜就搜了10來年,除了複製貼上的速度快了一點,其它的能力沒有隨著時間進化。寫完軟體,半個月回頭再看,就認為不可能是自己寫的,因為讀不懂了。



我想過這個事情,除了自己智商上的原因以外,還有就是工作上的原因。我在公司裡是個螺絲釘的角色,無論我做什麼,都不會影響公司的大局。


現在很多的白領,工資其實是表演費。早上9點上班,然後在辦公室裡躺屍,下午5點下班回家,這樣搞的辦公室和停屍房沒啥區別。


知道為什麼國內的IT大佬都搞人工智慧麼?深層次的原因,其實是他們發現了,找來的這些員工沒啥用,整天在辦公室裡摸魚,帶薪上班,帶薪上廁所,帶薪午睡,帶薪加班。所以這些大佬不想發錢給這些人了,極大的阻礙了公司的發展,留著沒用,丟了也不可惜。我們可以看看哪個公司喊人工智慧喊的最響,就說明這家公司上班摸魚的人越多。目前賣藥的公司喊的最響。



我也是在公司拿表演費的,心裡有點愧疚,所以我還是會給領導和同事收快遞,按摩,倒水,拍馬屁,哄他們開心,還有跳鋼管舞來讓自己顯得有用一點。各位同學,一定不能成為一個stackoverflow型程式設計師,要讓自己變的真正有用處。


如果你去的是皇家馬德里這樣的大球隊,這種球隊類似於今天Google,Microsoft這樣的公司吧。一定不能在球隊只擔任修剪草皮這樣的工作,然後還出來說你在皇馬工作。


這個世界上有很多這樣的人,尤其是公關公司或者培訓公司包裝出來的人,他們滿口的大話,又是這名牌大學的優秀畢業生,又是那名牌大學的畢業學生代表,又是在Google擔任這個,又是在Microsoft擔任那個,搞的頭銜能列印一張A4紙,唬的我這種沒有學歷,沒有能力的人一楞一楞的,但是,時間久了,也就這樣了。後來我就有免疫力了,每次想看牛人的話,我就看每天7:30的新聞聯播,前20分鐘出場的人都很牛。



05 不夠專注


我一直以來不能專注在一個領域,基本上這個也沒什麼好辦法,公司裡打工,有什麼活就幹什麼活,有什麼專案就幹什麼專案。如果接手一個專案是Java做的,只能接著用Java做,如果是PHP做的,也只能接著用PHP做。我沒那麼硬氣,不喜歡的專案不幹,也不可能說只做Python的專案,就這樣,10來年,忙東忙西的,一眨眼就過去了。


我唯一專注的一個小專案是我維護了一個Ruby On Rails做的報表軟體,非常簡單,可以給運營商裡面的小夥伴使用,在運營商裡做運營的,也很苦,有些人整天就是弄報表,這些報表還得給領導看。


其實這些東西可以用SNMP協議讀出來,然後軟體自動生成就行了,我就做了一個給他們用,原來得1天時間生成的報表,現在,點幾下滑鼠就生成了,然後就列印出來給領導簽字。功能很簡單,但是這些苦逼孩子就可以省下不少時間來玩遊戲或者上網了。這可能是我這幾年來做的唯一一個讓我覺得我還有點用處的軟體。其他的,都是到處救火。



以上,就是我沒有成為技術高手的原因,可能也不是什麼主要原因,最主要的原因可能就是蠢。希望大家聽聽就好,多向成功的人學習經驗,從我這裡也學不到什麼太多的經驗。專注於一兩個地方,不要一會兒做這個,一會兒做那個,也許幾年以後,我再反思的時候,要多加上一條,在應該好好做產品的時候,竟然去做了一個SB電臺。大家隨意聽聽就好,也別太在乎別人說什麼,路是自己走出來的。


作者:劉延棟

來源:軟體那些事兒(ID:ruanjiannaxieshier)


推薦閱讀


Bruce Eckel最新演講:調bug就是浪費生命!放棄吧!(附完整PPT)

最全Python資料工具箱:標準庫、第三方庫和外部工具都在這裡了

用《復聯3》的豆瓣評分教會你正確使用條形圖、餅圖、漏斗模型

大資料沒用?!張小龍:我們很少看統計資料!



Q: 你覺得你是一個失敗的程式設計師嗎?

歡迎留言與大家分享

覺得不錯,請把這篇文章分享給你的朋友

轉載 / 投稿請聯絡:baiyu@hzbook.com

更多精彩,請在後臺點選“歷史文章”檢視

相關文章