程序員的心理疾病
由于程序員工作的性質(zhì),他們長(zhǎng)期以來(lái)受到的所謂“黑客”式的“熏陶”,形成了一種行業(yè)性的心理疾病;剂诉@種病的人對(duì)于很多新入行的人,甚至一些外行人士造成了持續(xù)的傷害。慢慢的,這些不幸的受害者也形成了“條件反射”,進(jìn)而成為了這個(gè)心理變態(tài)的系統(tǒng)的一部分,導(dǎo)致越來(lái)越多的人,越來(lái)越快的變成“怪胎”。這是一件可怕的事情,所以我覺(jué)得有必要警醒一下。
這里我就簡(jiǎn)單的把我所觀察到的一些癥狀總結(jié)一下,希望作為對(duì)于 IT 業(yè)界人士的警示,有則改之,無(wú)則加勉。也希望為遇到類似問(wèn)題的新手和外行人士提供一些精神上的支持,以免他們也成為這個(gè)系統(tǒng)的一部分。
無(wú)自知之明
由于程序員的工作最近幾年比較容易找,工資還不錯(cuò),所以很多程序員往往只看到自己的肚臍眼,看不到自己在整個(gè)社會(huì)里的位置其實(shí)并不是那么的關(guān)鍵和重要。很多程序員除了自己會(huì)的那點(diǎn)東西,幾乎對(duì)其它領(lǐng)域和事情完全不感興趣,看不起其他人。這就是為什么我的前同事 TJ 作為一個(gè)資深的天體物理學(xué)家,在一個(gè)軟件公司里面那么卑微。貌似會(huì)寫(xiě)點(diǎn) node.js,iOS 軟件的人都可以對(duì)他趾高氣昂的樣子,而其實(shí)這些東西的價(jià)值哪里可能跟 TJ 知道的物理知識(shí)相提并論。很多科學(xué)家其實(shí)都可以輕而易舉的掌握程序員知道的那點(diǎn)東西,有人卻認(rèn)定了他們不是這個(gè)專業(yè)的,不懂我們的東西,或者故意把問(wèn)題搞復(fù)雜,讓他們弄不明白。
COBOL 在那么靠前的位置我覺(jué)得是用來(lái)搞笑的,不過(guò)你大致看到了很多 IT 技術(shù)在真正的科學(xué)家眼里的價(jià)值和它們的有效期。
如果力學(xué)工程師犯了錯(cuò)誤,飛機(jī)會(huì)墜毀;如果結(jié)構(gòu)工程師犯了錯(cuò)誤,大橋會(huì)垮塌;可是如果軟件工程師犯了錯(cuò)誤,大不了網(wǎng)站掛掉一小時(shí),重啟一下貌似又好了。所以所謂“軟件工程師”,由于門檻太低,他們的工作嚴(yán)謹(jǐn)程度,其實(shí)是沒(méi)法和力學(xué)工程,結(jié)構(gòu)工程等真正的工程師相提并論的。實(shí)際上“軟件工程”這個(gè)名詞根本就是扯淡的,軟件工程師也不能被叫做“工程師”。跟其他的工程不一樣,軟件工程并不是建立在科學(xué)的基礎(chǔ)上的—計(jì)算機(jī)科學(xué)其實(shí)不是科學(xué)。
垃圾當(dāng)寶貝
按照 Dijkstra 的說(shuō)法,“軟件工程”是窮途末路的領(lǐng)域,因?yàn)樗哪繕?biāo)是:如果我不會(huì)寫(xiě)程序的話,怎么樣才能寫(xiě)出程序?
為了達(dá)到這個(gè)愚蠢的目的,很多人開(kāi)始兜售各種像減肥藥一樣的東西。面向?qū)ο蠓椒ǎ浖?ldquo;重用”,設(shè)計(jì)模式,關(guān)系式數(shù)據(jù)庫(kù),NoSQL,大數(shù)據(jù)…… 沒(méi)完沒(méi)了。只要是有錢人發(fā)布的東西,神馬垃圾都能被吹捧上天。Facebook 給 PHP 做了個(gè)編譯器,可以編譯成 C++,還做了個(gè) VM,多么了不起啊!其實(shí)那種東西就是我們?cè)?Indiana 第一堂課就寫(xiě)過(guò)的,只不過(guò)我們是把比 PHP 好很多的語(yǔ)言翻譯成 C。我們根本不想給 PHP 那么垃圾的語(yǔ)言做什么編譯器,讓垃圾繼續(xù)存活下去并不能證明我們的價(jià)值。
其實(shí)軟件里面有少數(shù)永恒的珍寶,可惜很少有人理解和尊重它們的價(jià)值。這在其它的工程領(lǐng)域看來(lái)是不可思議的,然而這卻是事實(shí)。由于沒(méi)有科學(xué)作為理論的基礎(chǔ),沒(méi)有實(shí)驗(yàn)作為檢驗(yàn)它們的標(biāo)準(zhǔn),軟件行業(yè)的很多東西就像現(xiàn)代藝術(shù)一樣,丑陋無(wú)比的垃圾還能擺在外表堂皇的“現(xiàn)代藝術(shù)博物館”里面,被人當(dāng)成傳世大作一樣膜拜。
為了凸顯自己根本不存在的價(jià)值,又提出一些新的“理念”,就像有些現(xiàn)代藝術(shù)家一樣,說(shuō)“藝術(shù)的目的不是為了美,而是為了自由。”哦,這就是為什么你們可以自由地把那些讓人反胃的東西放在博物館里,還要買門票才能參觀?
宗教斗爭(zhēng)
當(dāng)然了因?yàn)闆](méi)有實(shí)質(zhì)的技術(shù),為了爭(zhēng)奪市場(chǎng)和利益,各種軟件的理念就開(kāi)始互相傾軋。一會(huì)兒說(shuō)軟件危機(jī)啦,面向?qū)ο蠓椒▉?lái)拯救你們!一會(huì)兒又提出設(shè)計(jì)模式。過(guò)了一會(huì)兒又有人說(shuō)這些設(shè)計(jì)模式里面有些模式是“反模式”,然后又有人把函數(shù)式編程包裝起來(lái),說(shuō)是面向?qū)ο缶幊痰目诵,一?huì)兒是關(guān)系式數(shù)據(jù)庫(kù),一會(huì)兒是 NoSQL,一會(huì)兒是 web,一會(huì)兒是 cloud,一會(huì)兒又是 mobile…… 每個(gè)東西都喜歡把自己說(shuō)成是未來(lái)的希望。
這就是為什么有人說(shuō)在軟件行業(yè)里需要不停地“學(xué)習(xí)”,因?yàn)椴粩嗟赜腥藶榱酥圃煨碌睦砟疃圃煨碌睦砟睢T谶@樣一個(gè)行業(yè)里,你會(huì)很難找到一個(gè)只把程序語(yǔ)言或者技術(shù)當(dāng)成是工具的人。如果有人問(wèn)你對(duì)某個(gè)語(yǔ)言或者技術(shù)的評(píng)價(jià),是非常尷尬甚至危險(xiǎn)的事情,所以最可靠的辦法就是不做評(píng)論,什么都不要說(shuō)。
引難為豪
在 IT 行業(yè)里批評(píng)一個(gè)技術(shù)難用,是一件非常容易傷自尊的'事情,因?yàn)榱ⅠR會(huì)有人噼里啪啦打出一些稀奇古怪的命令或者一大篇代碼,說(shuō):就是這么簡(jiǎn)單!然后你就發(fā)現(xiàn),這些人完全不明白什么叫做設(shè)計(jì),他們以自己能用最快的速度繞過(guò)各種前人的設(shè)計(jì)失誤為豪,很多程序員甚至以自己打字快為豪。
往往也就是這些自詡打字快的人喜歡使用過(guò)度復(fù)雜的方法來(lái)解決問(wèn)題。我可以告訴你,我打字的速度是相當(dāng)之慢的。我大量的使用鼠標(biāo),方向鍵,而且把 Emacs 里最常用的功能都盡量綁到 F 功能鍵上,這樣我就可以用一個(gè)指頭啟動(dòng)一個(gè)功能。Dan Friedman 的打字速度就更慢,而且他經(jīng)常故意使用“一指禪”。為什么呢?因?yàn)槲覀儗?xiě)出來(lái)的代碼非常精辟,幾乎不帶多余的垃圾,所以根本不需要打很快。
當(dāng)遇到這樣引難為豪的人,我的經(jīng)驗(yàn)是,千萬(wàn)不要恭維他們。你必須嘲笑這些東西的設(shè)計(jì),并且指出它們的失誤之處,否則你不但助長(zhǎng)了這些人的氣焰,讓這種風(fēng)氣繼續(xù)延續(xù)下去,而且將來(lái)自己的自尊也難保了。很可惜,并不是每個(gè)人都有這種勇氣把這些話說(shuō)出來(lái),這就造成了今天的局面,紛繁復(fù)雜的垃圾充斥著世界。
愛(ài)因斯坦說(shuō),你需要很多的天才和非常大的勇氣,才能追求到簡(jiǎn)單。非常大的勇氣…… 也許就是這個(gè)意思。
不知從什么時(shí)候開(kāi)始,人們開(kāi)始引用 Eric Raymond 的一篇叫做《提問(wèn)的藝術(shù)》的文章,這篇文章后來(lái)就成為了對(duì)提問(wèn)者沒(méi)禮貌的借口。由于這篇文章的誤導(dǎo),當(dāng)你希望同事能給你一個(gè)手把手的演示的時(shí)候,他們往往會(huì)丟給你一篇不知道什么時(shí)候?qū)懙奈臋n,讓你自己去讀,仿佛文檔就可以代替人之間的直接互動(dòng)。況且不說(shuō)這文檔可能已經(jīng)過(guò)時(shí),里面有很多地方已經(jīng)不符合最新的設(shè)計(jì),而這意味著在潛意識(shí)里,他們覺(jué)得高你一等。
對(duì)于這種現(xiàn)象有一個(gè)專門的詞匯,叫做 RTFM(Read The Fucking Manual):
在 IRC 的聊天室里,由于隔著網(wǎng)絡(luò)的屏障,這種對(duì)提問(wèn)者沒(méi)禮貌的現(xiàn)象就更加囂張。我曾經(jīng)有幾次去 Java 的聊天室問(wèn)一些貌似基礎(chǔ),而其實(shí)很深入的語(yǔ)言設(shè)計(jì)問(wèn)題,結(jié)果沒(méi)有一次不是以收到像“去讀 API!”這樣的回答而結(jié)束。API 誰(shuí)不會(huì)讀,然而我需要的是一個(gè)有血有肉的人對(duì)此的理解。所以后來(lái)我根本不去 IRC 這種地方了,因?yàn)槟抢锩鎸?duì)你打字的基本上已經(jīng)不是人類了。他們覺(jué)得你問(wèn)問(wèn)題浪費(fèi)了他們的時(shí)間,好像他們一天到晚泡在 IRC 里面就是在做什么正事似的。不想回答問(wèn)題,不開(kāi)口還不行嗎。后來(lái)你發(fā)現(xiàn),原來(lái)在 IRC 里面訓(xùn)斥新手就是這些人唯一的樂(lè)趣,所以其實(shí)他們是非開(kāi)口說(shuō)話不可的。然而這次他們遇到的卻不是個(gè)新手,而是一個(gè)可以把 Java 整個(gè)造出來(lái)的人。
像 Haskell 之類的聊天室貌似稍微友好一點(diǎn),然而后來(lái)你發(fā)現(xiàn)他們顯得友好是有所企圖的。因?yàn)楫?dāng)時(shí) Haskell 還沒(méi)有很多人用,他們需要吸引新手,所以竭盡所能的誘導(dǎo)他們。而一旦它用戶稍微多了一點(diǎn),有聲勢(shì)了,就有人開(kāi)始居高臨下,成為專家一樣的人物。他們就開(kāi)始寫(xiě)書(shū),然后就開(kāi)始牛氣哄哄的了。然后你就會(huì)發(fā)現(xiàn)當(dāng)對(duì) Haskell 的設(shè)計(jì)提出異議的時(shí)候,這些“id”們是多么的不友好,有理也說(shuō)不清。所以最后你發(fā)現(xiàn),其實(shí)所有語(yǔ)言的所謂“社區(qū)”都一個(gè)德行。如果 Haskell 有一天像 Java 一樣如日中天(當(dāng)然不大可能),肯定對(duì)大部分問(wèn)題的答案也就是“去讀API!”其實(shí)它已經(jīng)在向這一步發(fā)展了。
不得不指出,《提問(wèn)的藝術(shù)》等介紹“黑客文化”的文章對(duì)于這種現(xiàn)象的出現(xiàn)有著極大的責(zé)任。說(shuō)穿了,寫(xiě)這些文章的人一般都是 Unix 的跟屁蟲(chóng)。這種文章試圖抹去人類文明幾千年來(lái)傳承的文化,而重新給“禮貌”做出定義。其結(jié)果是,人類的文明因?yàn)檫@些文章,在程序員的世界里倒退了幾十甚至幾百年。很多外行人人不喜歡跟程序員說(shuō)話,叫他們是 nerd,就是這個(gè)原因。
不要提問(wèn),不要謙虛,不要恭維
跟上面的癥狀相似,程序員世界里的一條重要的潛規(guī)則是:只有菜鳥(niǎo)才會(huì)問(wèn)問(wèn)題。所以如果你有任何機(jī)會(huì)可以自己得到答案,就不要試圖向人“請(qǐng)教”,尤其不要顯得好奇,否則你就會(huì)被認(rèn)為是菜鳥(niǎo)。我有幾次不恥下問(wèn)的經(jīng)歷,最后導(dǎo)致了我被人當(dāng)成菜鳥(niǎo)。我只是覺(jué)得那問(wèn)題有趣,也許能夠啟發(fā)我設(shè)計(jì)自己的東西,所以吃飯時(shí)覺(jué)得是個(gè)話題可以說(shuō)一下,結(jié)果呢就有人忙著鄙視你,那么小的問(wèn)題都沒(méi)搞清楚。正確的態(tài)度應(yīng)該是誠(chéng)實(shí),直接,見(jiàn)慣不驚,那有什么大不了的,我什么沒(méi)見(jiàn)過(guò),我很懷疑。
隨之而來(lái)的引論就是:不要謙虛!那些“職場(chǎng)經(jīng)驗(yàn)”之類的文章告訴你的進(jìn)入新的公司工作,要謙虛好問(wèn),對(duì) IT 公司是不管用的。有的大 IT 公司有所謂的“文化”,比如叫你要“humble”,其實(shí)只是用來(lái)貶低你價(jià)值的借口。他們只是想讓你安于“本分”,做一些微不足道,不能發(fā)揮你才能的工作?纯茨切┙心阋 humble 的人,他們 humble 嗎?所以跟江湖一樣,在 IT 公司里面一件很重要的事情是,亮出自己的寶劍和絕招,給人下馬威。介紹自己的東西一定要自豪,這就是世界上最好的,無(wú)敵的,沒(méi)有其他人能做到!不能有任何保留。不要像科學(xué)家一樣介紹自己技術(shù)的局限性,否則隨之而來(lái)的就是有些人對(duì)你價(jià)值的懷疑和對(duì)你自信心的打擊。
另外要注意的是對(duì)于別人介紹的東西,不要輕易地表?yè)P(yáng)或者點(diǎn)頭,否則有人就更有氣勢(shì)了。你要問(wèn)這樣的問(wèn)題:這里面有什么新的東西嗎?這個(gè)事情,另外一種技術(shù)早就能做了啊,沒(méi)覺(jué)得有什么了不起。
以語(yǔ)言取人
你的軟件是什么語(yǔ)言寫(xiě)的,告訴別人的時(shí)候是千萬(wàn)要小心的,不到萬(wàn)不得已最好不要說(shuō)。因?yàn)槭邪司,?duì)方會(huì)立即在心里對(duì)你的軟件的價(jià)值做出判斷,光憑你用的是什么語(yǔ)言。
很多程序員都以自己會(huì)用最近流行的一些新語(yǔ)言為豪,以為有了它們自己就成了更好的程序員。他們看不到,用新的語(yǔ)言并不能讓他們成為更好的程序員。其實(shí)最厲害的程序員無(wú)論用什么語(yǔ)言都能寫(xiě)出很好的代碼。在他們的頭腦里其實(shí)只有一種很簡(jiǎn)單的語(yǔ)言,他們首先用這種語(yǔ)言把問(wèn)題建模出來(lái),然后根據(jù)實(shí)際需要“翻譯”成最后的代碼。這種在頭腦里的建模過(guò)程的價(jià)值,是很難用他最后用語(yǔ)言的優(yōu)劣來(lái)衡量的。
有時(shí)候高明的程序員用一個(gè)語(yǔ)言并不是因?yàn)樗粫?huì)用那種語(yǔ)言,而是其他的原因。他們的頭腦里有著萬(wàn)變不離其宗的理念,可以讓他們立即掌握幾乎任何語(yǔ)言或者工具,所以他們對(duì)所謂的“新語(yǔ)言”都不以為然。可是很多人誤以為他們不愿意學(xué)習(xí)“新東西”,從而從心里鄙視他們。其實(shí)計(jì)算機(jī)的世界里哪里有很多新的東西,只不過(guò)是有人給同樣的東西起了很多不同的名字而已。如果連這樣的程序員都不能理解你的技術(shù),就說(shuō)明你的技術(shù)設(shè)計(jì)有問(wèn)題,而不是他們有問(wèn)題。就像 Seymour Cray 說(shuō)的,我只能理解簡(jiǎn)單的東西,如果它太復(fù)雜了,我是不能理解的。
早些年的時(shí)候,大家都認(rèn)為招募某種特定語(yǔ)言的程序員是一種浮淺的做法,很多公司看重的都是解決問(wèn)題的能力?墒墙┠晡野l(fā)現(xiàn)這些浮淺的做法越來(lái)越普遍?梢哉f(shuō)現(xiàn)在像 Google 這樣的公司面試員工的方式和態(tài)度,其實(shí)還不如八年前我的第一份國(guó)內(nèi)工作。而這種現(xiàn)象在使用 Python,Ruby,JavaScript 等“流行語(yǔ)言”的公司里就更為普遍。
跟屁蟲(chóng)
有些程序員對(duì)新手和同事是那么的不友好,然而對(duì)大牛們拍馬屁的功夫可真是出類拔萃。我剛到舊金山的幾個(gè)月有時(shí)候參加一些程序語(yǔ)言的“meetup”,后來(lái)我發(fā)現(xiàn)這種 meetup 都是宗教氣氛非常濃厚的地方,跟傳銷大會(huì)差不多。Scala 的 meetup 里面的人幾乎全都對(duì) Scala 和 Martin Odersky 頂禮膜拜,甚至把 Rod Johnson 請(qǐng)來(lái)說(shuō)一堆胡話。Clojure 的,當(dāng)然基本上把 Rich Hickey 當(dāng)成神,甚至稱他為“二十一世紀(jì)最重要的思想家之一”。各種 talk 總是宣揚(yáng),哇,我們用 Scala/Clojure 做出了多么了不起的東西云云,其實(shí)只不過(guò)是在向你兜售減肥藥。
很多人喜歡做這些新的語(yǔ)言和技術(shù)的“evangelist”,盡顯各種馬屁神功,然后就開(kāi)始寫(xiě)書(shū),寫(xiě) blog,…… 目的就是成為這個(gè)“領(lǐng)域”的第一批專家。這就難怪了,再垃圾的語(yǔ)言也有一大批人來(lái)鼓吹。因?yàn)檫@些沒(méi)真本事的人,隨便把一個(gè)東西捧上天都有自己的好處。
由于受到這些“先知”的影響,有些人開(kāi)始在他們自己的公司里“布道”。比如有人在 Python 的 meetup 集會(huì)時(shí)告訴我,他試圖在自己的小組里推 Python,可是一些老頑固一定要用 Java,認(rèn)為 Java 才是王道。很鄙夷不高興的樣子。我并不認(rèn)為 Java 是很好的語(yǔ)言,然而 Python 也好不到哪去。它們?cè)谖已劾镏徊贿^(guò)是臨時(shí)拿來(lái)用一下的工具,可是我仍然能用它們寫(xiě)出一流的代碼。
看到這些宗教性質(zhì)的聚會(huì),我終于理解了一些地區(qū)是如何被從一個(gè)國(guó)家分裂出去,最后淪落為另外一個(gè)國(guó)家殖民地的。最早的時(shí)候,一般是派傳教士過(guò)去“傳經(jīng)”,然后就煽動(dòng)一小部分人起來(lái)造反。到后來(lái)就可以名正言順的以“保護(hù)傳教士”,“保護(hù)宗教自由”,“維持和平”等理由把軍艦開(kāi)到別人家門口……
【程序員的心理疾病】相關(guān)文章:
留守兒童的心理疾病07-16
怎樣正確的對(duì)待心理疾病11-21
兒童的心理疾病及其判斷07-14
兒童的心理疾病有哪些07-02
兒童最常見(jiàn)的心理疾病06-30
心理疾病會(huì)有哪些癥狀10-14
兒童的重大心理疾病是什么07-30
兒童的心理疾病有哪些危害07-21
兒童心理疾病的測(cè)驗(yàn)07-16