程式設計15年,如何才能成不了高手?
導讀:總是會有人問我這樣一個問題,如何學習程式設計?我從來沒有正面回答過這個問題。我都是會推薦他們去知乎或者百度貼吧去問一下,因為那裡大牛的密度比較高。我不是大牛,所以,不好回答這個問題。
但是總有人不死心啊,總是問個不停,覺得我孬好做了這麼多年程式設計師,總得有點經驗吧,我想了一下,成功的經驗真沒有,失敗的教訓可以說一說。雖然說失敗是成功之母(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資料工具箱:標準庫、第三方庫和外部工具都在這裡了
Q: 你覺得你是一個失敗的程式設計師嗎?
歡迎留言與大家分享
覺得不錯,請把這篇文章分享給你的朋友
轉載 / 投稿請聯絡:baiyu@hzbook.com
更多精彩,請在後臺點選“歷史文章”檢視
相關文章
- 那些程式設計高手是如何練成的?程式設計
- iOS程式設計師如何成為程式設計高手,並以此創業iOS程式設計師創業
- 心目中的程式設計高手程式設計
- Lisp 永遠成不了程式設計主流語言 vs Lisp 神話之路Lisp程式設計
- 十大程式設計演算法助程式設計師走上高手之路演算法程式設計師
- Python怎麼下載安裝 如何才能學好Python程式設計Python程式設計
- 面對一個Bug,高手程式設計師是如何解決問題的?程式設計師
- 程式設計師節只有程式設計師才能看懂的祝福語程式設計師
- 技術領導力 程式設計師如何才能帶團隊 文摘 (一)程式設計師
- 阿里雲又要擴招5000人,程式設計師該如何才能進大廠阿里程式設計師
- Java程式設計師如何高效學習,才能加快成為架構師的步伐Java程式設計師架構
- 程式設計師如何才能快速高效閱讀文件,方法全部都在這裡了!!!程式設計師
- 轉行學Java,如何才能成為年薪50萬的Java程式設計師呢?Java程式設計師
- 25歲的程式設計師,如何做才能在35歲時不焦慮程式設計師
- UI設計師面試如何操作才能獲得高薪UI面試高薪
- 從初學者到程式設計高手,幾種必學的程式語言程式設計
- 程式設計師該怎麼做,才能成為coding王者?程式設計師
- 學Java程式設計難不難?怎麼才能學好?Java程式設計
- 學習者的窘境:程式設計師如何有效學習才能有成就感程式設計師
- 只有程式設計師才能讀懂的三國演義(一)程式設計師
- 只有程式設計師才能讀懂的三國演義(二)程式設計師
- 程式設計師如何獲取新程式設計技能程式設計師
- 結構化資料儲存,如何設計才能滿足需求?
- 如何自學程式設計?程式設計
- 跨專業轉行的程式設計師,怎樣才能拿高薪?程式設計師高薪
- 領域驅動設計(DDD)高手養成記
- 風變程式設計:緊跟時代腳步,才能穩定發展程式設計
- 程式設計師如何寫出好程式碼?程式設計師
- 10 早期計算機如何程式設計計算機程式設計
- 12 在谷歌如何程式設計谷歌程式設計
- 程式設計師如何跳級程式設計師
- 少兒程式設計如何入手?程式設計
- 程式設計師天天 CURD,怎麼才能成長,職業發展的思考 ?程式設計師
- 如何從初級程式設計師變成高階程式設計師?程式設計師
- 如果今天沒有API介面,今天的程式設計師如何程式設計?API程式設計師
- Phil O’Connor談如何才能僱傭到優秀的遊戲設計師遊戲設計師
- 程式設計師如何克服焦慮?程式設計師
- 小孩子如何學程式設計程式設計