以下內容來(lái)源: 公眾號 findyi
我們看武俠大片,經(jīng)常有那種本來(lái)可以練就絕世武功的大蝦。
陰差陽(yáng)錯練的走火入魔。
一開(kāi)始還可以硬撐,還能打敗一些蝦兵蟹將。
遇見(jiàn)真正的高手,這些大蝦們立馬就敗下陣來(lái)。
其實(shí)程序員的職業(yè)生涯,如同練功一般。
先學(xué)馬步,再學(xué)輕功,最后用氣功各種殺怪制敵。
這個(gè)過(guò)程中,很多程序員一不小心走火入魔了。
時(shí)間一長(cháng),不僅內力毫無(wú)長(cháng)進(jìn)、甚至連已經(jīng)會(huì )的招式也慢慢荒廢。
今天和大家聊聊蹩足程序員和優(yōu)秀程序員的差距。
— 1 —
復制粘貼哥
不少程序員喜好復制網(wǎng)上的各種實(shí)現。
又或者扒拉同事的代碼功能,原封不動(dòng)的粘貼過(guò)來(lái)。
他們長(cháng)期靠著(zhù)復制粘貼行走于程序江湖。
運氣好的時(shí)候,快速弄完上線(xiàn)居然還沒(méi)有Bug。
運氣不好的時(shí)候呢?編譯問(wèn)題就夠吃一壺了。
更絕的是不少復制的錯誤代碼一直伴隨著(zhù)線(xiàn)上系統的整個(gè)生命周期。
曾經(jīng)有兩個(gè)巨頭公司,扯皮打官司。
原因是某巨頭指責另一家抄襲代碼。
巨頭的證據很充分,反編譯對手的代碼后,發(fā)現了完全一致的注釋彩蛋。
不用懷疑,這一定是「復制粘貼程序員」的卓絕貢獻。
在商業(yè)大戰的關(guān)鍵時(shí)刻,給競爭對手遞了把好刀子。
這類(lèi)程序員還有一個(gè)特點(diǎn):喜好吹噓自己碼代碼能力一流,諸如一天能寫(xiě)2000行!
其實(shí)做過(guò)程序員的都知道,正兒八經(jīng)一天幾百行代碼,基本就是極限了。
但是「復制粘貼程序員」可就不一樣了。
幾分鐘2000行都不是不可能的事。
甚至一天給你干出上萬(wàn)行代碼,也不在話(huà)下。
洋哥為什么這么清楚?
吃他們的虧,真不少。
以至于最后形成了條件反射,面試程序員的時(shí)候,我都會(huì )問(wèn)一句:請問(wèn)你一天能寫(xiě)多少行代碼呀?
回答明顯不靠譜的,一律PASS...!
這還讓我養成了一個(gè)習慣,只要是程序員崗位,甭管你多高級。
手寫(xiě)一段算法代碼是必須的,完全寫(xiě)不出來(lái)也PASS。
除了對團隊的危害,長(cháng)期依賴(lài)「復制粘貼」的程序員,個(gè)人成長(cháng)也會(huì )受到極大影響。
用這種方式來(lái)實(shí)現功能就像鴉片一般,會(huì )上癮。
別人絞盡腦汁寫(xiě)一天,他5分鐘就搞定了,你說(shuō)爽不爽?
長(cháng)期舒爽的代價(jià)是失去裸編程能力、代碼結構化能力、分析能力,進(jìn)而失去了職場(chǎng)競爭力。
讓他寫(xiě)一個(gè)冒泡算法的實(shí)現,他都需要去網(wǎng)上搬救兵。
遇見(jiàn)沒(méi)有現成代碼能搞定的工程,直接傻眼。
— 2 —
輪子哥
每個(gè)程序員在成長(cháng)初期,都會(huì )經(jīng)歷過(guò)造輪子的階段。
我們學(xué)習編碼的時(shí)候,都會(huì )照書(shū)上的示范造一個(gè)又一個(gè)的小輪子。
我們學(xué)習某些新技術(shù),拿到源碼拆解重寫(xiě)的過(guò)程,也是在造輪子。
這些「無(wú)用勞動(dòng)」讓我們真正掌握了編碼的精髓,這是拆解-重建-掌握的過(guò)程。
多年前,拿到google的大量源碼,我也是照貓畫(huà)虎,挨個(gè)功能實(shí)現一遍。
但不少程序員在做業(yè)務(wù)的過(guò)程中,瘋狂造輪子,這就是很大問(wèn)題了。
在業(yè)務(wù)開(kāi)發(fā)中,明知道你做的組件或功能不可能比已經(jīng)存在的組件做得更好,卻仍然堅持要做,并應用到業(yè)務(wù)中。
簡(jiǎn)單點(diǎn)說(shuō):業(yè)界已經(jīng)有公認的軟件或者庫了,卻還要自己實(shí)現一個(gè)勉強運行的山寨版。
每個(gè)造輪子的程序員都有自己“不得不造”的理由。比如:
遇見(jiàn)這樣的程序員,滿(mǎn)足了他自己,坑了一個(gè)團隊。
尤其是在互聯(lián)網(wǎng)行業(yè),時(shí)間就是商機、迭代速度就是擊敗對手的武器。
更別提有人放著(zhù)圓形的輪子不用,非造出個(gè)方形輪子,直接導致翻車(chē)。
很多時(shí)候,造輪子程序員其實(shí)是在拿團隊的資源,提升自己。
在我看來(lái),這是一種高級摸魚(yú)行為,但危害程度遠大于低級摸魚(yú)。
公司和老板都不是傻子,識破后,輪子程序員也就失去了在公司的發(fā)展前景。
最可怕的是那種進(jìn)化到架構師的輪子程序員,搖身一變成為輪子架構師。
那么這種危害就從一個(gè)工程團隊擴大到整個(gè)公司。
比如曾經(jīng)帶過(guò)的一個(gè)輪子架構師,不顧業(yè)務(wù)發(fā)展的階段和公司體量,上來(lái)就要設計一個(gè)類(lèi)KFK的日志系統。
不讓他做,還會(huì )跟你分析各種KFK的硬傷。
無(wú)論是輪子程序員還是輪子架構師,如果不改變瘋狂造輪子的習慣,被淘汰只是時(shí)間問(wèn)題。
— 3 —
布道哥
技術(shù)布道師本身是個(gè)很高大的職業(yè)。
很多公司的CTO同時(shí)也擔任技術(shù)布道的工作。
這是個(gè)對技術(shù)深度理解和溝通能力都有極高要求的崗位。
很遺憾的是,不少程序員代碼寫(xiě)的無(wú)比蹩足、溝通能力也很一般,但偏偏喜歡上了布道的感覺(jué)。
用了點(diǎn)新技術(shù)就急不可耐的到處宣傳,資深同事忽悠不了,就去忽悠剛入職的小年輕。
又或者是手撕產(chǎn)品經(jīng)理的時(shí)候,不自覺(jué)的蹦出各種聽(tīng)不懂的技術(shù)名稱(chēng),還假模假樣的給人解釋技術(shù)細節。
業(yè)內出現了新的語(yǔ)言,他們一定會(huì )急吼吼的去學(xué)習。
剛寫(xiě)了個(gè)'Hellow World”,就急不可耐的到處宣稱(chēng)掌握了這門(mén)語(yǔ)言的精髓和真理。
他們經(jīng)常號稱(chēng)掌握10種編程語(yǔ)言,且對每一種語(yǔ)言的優(yōu)缺點(diǎn)都能分析的頭頭是道。
你讓他們在工程中應用起來(lái)?那是不可能的,他們只負責布道。
一般來(lái)說(shuō),團隊里有一個(gè)這種類(lèi)型的工程師,就夠吃一壺了。
要是有好幾個(gè),他們還會(huì )抱團進(jìn)行學(xué)習交流,甚至組織研討會(huì )。
各種新技術(shù)、新名詞、新動(dòng)向,在他們這,都被安排的明明白白的。
但絕不產(chǎn)生任何業(yè)務(wù)價(jià)值!
— 4 —
優(yōu)秀程序員
三類(lèi)蹩足程序員就說(shuō)完了。
程序員行業(yè)有一個(gè)特點(diǎn):優(yōu)秀程序員的產(chǎn)出是普通程序員的好多倍,甚至是10倍!
這是因為編程不是一門(mén)「線(xiàn)性科學(xué)」,而是一門(mén)「非線(xiàn)性科學(xué)」。
「線(xiàn)性科學(xué)」,比如跑步的速度就是,世界冠軍的速度也不可能是普通人的10倍?!阜蔷€(xiàn)性科學(xué)」是指很多種因素交匯在一起,極大增加了系統的復雜度。
而蹩足的程序員實(shí)際上還有副作用,不少團隊光是處理前人埋下的坑,就耗費了全部精力。
成為優(yōu)秀程序員不易,我們首先要避開(kāi)「復制粘貼」、「造輪子」、「布道」這三個(gè)陷阱。
進(jìn)一步,我們要做到以下7點(diǎn):
1.具備裸編程能力
處理程序實(shí)際實(shí)現部分的子任務(wù),實(shí)現函數或者算法之類(lèi)的能力。
聽(tīng)起來(lái)很簡(jiǎn)單對吧?實(shí)際上很多程序員缺失這樣的能力。
2.具備強悍的調試能力
調試能力某種程度上比編碼能力更重要。查找和解決BUG會(huì )占用程序員大量的時(shí)間。
查找BUG產(chǎn)生的根源不是一件簡(jiǎn)單的事情,需要整體的分析和經(jīng)驗的沉淀,同時(shí)還需要對各種調試工具熟練應用。
3.追求簡(jiǎn)悅
代碼的注釋是否恰到好處、函數模塊和類(lèi)的結構是否能讓其他人直接秒懂、架構的設計是否足夠清晰等等,都屬于程序員追求簡(jiǎn)約的范疇。
4.準確預計工期的能力
老板想了個(gè)idea授意產(chǎn)品經(jīng)理估工期。產(chǎn)品經(jīng)理原型都沒(méi)畫(huà)出來(lái),只有個(gè)大概想法,就找技術(shù)排工期。
這個(gè)時(shí)候,技術(shù)的內心大概多了幾道菜式:清蒸產(chǎn)品經(jīng)理、紅燒產(chǎn)品總監、油炸CTO。
其實(shí)準確預測技術(shù)工期是程序員一項非常重要的能力。
為什么這么說(shuō)?只有具備這項能力,才能讓開(kāi)發(fā)工作游刃有余、可進(jìn)可退。
5.理解底層系統原理
比如數據結構、網(wǎng)絡(luò )協(xié)議、操作系統相關(guān)知識,等等。
程序的很多問(wèn)題都是源于對計算機工作原理的誤解,即使是使用高級語(yǔ)言開(kāi)發(fā)的程序也一樣。
另外,一些更偏應用層的架構或框架,基礎一定是更底層的系統。
6.嚴格把控關(guān)鍵設計
無(wú)論是大的系統還是小的模塊,一定都有最關(guān)鍵的功能。要在最關(guān)鍵功能上投入大量設計時(shí)間,才能規避開(kāi)發(fā)過(guò)程中的各種坑。
7.拒絕完美主義
完美主義包含兩種情況,一種是追求極致性能的工程師文化、還有一種是個(gè)人性格使然。無(wú)論哪一種,過(guò)分追求完美都會(huì )對業(yè)務(wù)交付產(chǎn)生影響。
程序員之間的差距,恐怕要比人類(lèi)和猿猴之間的差距,還要大。
程序員讀者朋友們,留言說(shuō)說(shuō)你是哪類(lèi)程序員吧?
聯(lián)系客服