[譯] 衝冠一怒爲代碼:論程序員與負能量

衝冠一怒爲代碼:論程序員與負能量

他們怎麼能這麼對咱們

(本文已被譯爲俄文西班牙文,十分感謝譯者們。)前端

此刻我正凝視着一段代碼。這段代碼,能夠說是我見過的最爛的代碼之一。爲了更新數據庫中的單條記錄,其做者居然把集合中的每條記錄都獲取到,更新後再爲數據庫中的每條記錄都發送一個請求 —— 而不只僅是隻操做須要更新的那一條。代碼中還有一個 map 函數,除了返回傳入的值之外別無他用。還有一些條件判斷語句,彷佛是用來檢查值相同而命名風格不一樣(駝峯風格和下劃線風格)的變量。每一次的更新操做(動輒操做每條記錄,包括沒有變更的條目),都要向消息總線發送一條消息,用以調用另外一個無服務方法,此方法爲同一個數據庫中的另外一個集合執行全部工做。我是否是還沒提到這是面向雲「服務」的「架構」中的一個無服務函數,像這樣的函數每一個環境裏都有 100 多個?android

這仍是人乾的事嗎?我把臉深深埋進手掌,禁不住邊笑邊哭出了聲。同事們都問我怎麼了,因而我向他們繪聲繪色地描述了這段 Chuck Parsley 出品的 2018 年年度 BulkDataImporter.js 最垃圾代碼榜單。每一個人聽了都同情地點頭,咱們都以爲:他們怎麼能這樣對咱們?ios

負能量:編程文化中的情緒工具

負能量是編程中的重要組成部分。負能量在多個層面上根植於咱們的文化,這是咱們分享經驗和撕逼故事(「代碼寫成這樣,你敢信?」)、表達和同情挫敗感(「皇天在上啊!怎麼能幹出這種事啊!」)、把咱們本身粉飾得更優秀(「換作是我,纔不會寫得這麼爛呢」)、甩鍋踢皮球(「咱們失敗了是由於 Chuck Parsley 的代碼爛泥扶不上牆」)或者在氛圍差勁的組織中羞辱並操縱別人(「寫代碼能不能走點心?趕忙修復你的 Bug!」)的方式。git

來自 [ProgrammerHumor](https://www.reddit.com/r/ProgrammerHumor/comments/b4jfr7/i_cant_be_the_only_one/)

對程序員這個羣體來講,負能量過重要了,由於這樣傳達價值觀最有效。當我在一個編程培訓班執教時,用適當的惡搞圖、傳聞逸事和視頻向學生灌輸行業文化是標準作法,而這些素材中最流行的主題就是圍繞程序員在外行面前的挫敗感的。想要指出哪些行爲習慣是好的、壞的、壞到家了毫不要犯的,藉助情緒工具來表達再合適不過了。應該幫助新手程序員們作好心理建設,讓他們知道他們會被非技術行業的同事以這樣那樣的方式誤解;會有朋友們來安利他們的「價值百萬」的 App 創意;會被壓在「祖傳代碼」的五指山下,任你一個筋斗 8848 光年也難以脫身。程序員

當咱們剛開始學習寫代碼時,咱們經過觀察他人對代碼的情緒反應來判斷代碼的好壞。看一看 ProgrammerHumor 版塊吧,那裏處處都是新手程序員,看看裏面的帖子你就會深切體會到這一點。許多帖子表達的幽默帶有各類各樣的負面情緒:挫敗感、悲觀、憤怒、幻滅感和傲慢等等。(若是你想見識見識真正的負能量,那就讀讀評論吧。)github

來源:[ProgrammerHumor](https://www.reddit.com/r/ProgrammerHumor/comments/b7mlgt/programmers_d/)和 [Twitter](https://twitter.com/type__error/status/1111972689609138177)

我注意到,程序員的負能量經常隨着經驗的增加而增加。當程序員仍是萌新的時候,他們不知道有什麼坎坷等着他們,因此他們躊躇滿志地邁開腳步,願意相信路途艱險只是由於他們經驗還不足、眼界還不寬,他們自信最終可以掌控一切。面試

隨着時間的流逝和學識的增加,當初的萌新如今已經可以分辨代碼的優劣。一旦進入這個階段,他們就會直接體會到工做中遇到的爛代碼帶來的挫敗感,若是他們身處於一個團體(不管是線上團體仍是一個實際團隊)中,團體中比他們資深的程序員的情緒習慣,會頻頻出如今他們身上。如今他們可以頭頭是道地分析代碼、區分代碼的優劣,這種方式讓他們顯得很「懂行」,負能量一般就是在這種過程當中積壓起來的。越是消極越是有好處:表達挫敗感能幫你輕鬆與同事打成一片、融入團隊,而且貶低爛代碼可以擡高本身,讓你表現得更加像個優秀的工程師 —— 消極地表達觀點的人一般被認爲更聰明、更能幹數據庫

這種負能量的增長並不必定是件壞事。探討編程時最主要的就是很是關注所寫的代碼的質量。代碼的質量決定了性能(不考慮硬件、網絡等因素),所以可以針對代碼表達出本身的觀點很重要。幾乎全部的關於代碼的討論均可以歸結成是對於代碼質量的評定,簡單的一句評語裏就蘊含着評價代碼質量的情感:編程

  • 「那個模塊裏有不少地方的邏輯都先後不一致,應該優先進行重要性能優化」
  • 「那個模塊寫得挺爛的,應該重構」
  • 「那個模塊狗屁不通,趕忙回爐重造吧」
  • 「那個模塊寫得真垃圾,須要修補修補」
  • 「那個模塊就是一坨屎,把它寫出來就是犯罪,Parsley 腦子裏想他喵的什麼呢」

(順便說一句,這種「情感的火花」會使開發者們用「性感」來形容代碼,這樣的形容不太應景 —— 除非你在 PornHub 上班。)後端

固然了,問題在於,人類就是一種奇怪的、搖擺不定的情緒化動物,接收表達的情緒都能改變咱們 —— 這種改變一開始是細微的,而通過漫長的歷程後,這種改變就紮根深處了。

負能量是一條曲折泥濘的下坡路

幾年前,我是一個非正式的團隊領導,爲我司面試過一位開發者。咱們很是喜歡他;他敏銳、善於發問、有技術才能,並不是常契合公司文化。我特別欣賞他的積極向上和踏實肯幹。所以咱們聘用了他。

彼時,我已經在公司任職多年,意識到了公司文化中缺少進取意識。咱們曾幾回三番想要推出一個產品,甚至在我入職前就已經失敗過好幾回,多次不成致使耗資巨大,換來的結果不過是連續挑燈夜戰、一推再推的交付日期和好歹算是能用的產品。雖然我還在盡職盡責地努力工做,但對於管理層下達的最後期限,個人懷疑態度溢於言表。每當和同事討論起代碼中某些使人生厭的部分時,我就信口開罵。

幾周後,那位新聘進來的開發者表達出了和我同樣的負能量(連罵法都如出一轍)—— 其實這本在情理之中,卻出乎我意料以外。我感受這並非他的本色表現,或者換一家文化不一樣的公司,他的舉止又該有所不一樣。但他恰恰吸取了我傳達的文化,只是爲了融入團隊。我腸子都悔青了。只由於我本身的主觀感覺,就給新員工設定了一種消極的基調,而我以爲他本不至於如此。就算那些負能量的表現並不是他的真實感覺,只是爲了體現他和同事脾氣相投,那也要怪我把惡劣的態度展現給他了。常言道,近朱者赤,近墨者黑。

來源:[Nedroid](https://nedroidcomics.tumblr.com/post/41879001445/the-internet)

負能量的陽關道和獨木橋

對於咱們如今的中級開發人員來講,能從過往經歷中得到一些智慧和經驗是一個快樂的故事:他們在編程行業的見識愈來愈廣,意識到爛代碼無處不在、如影隨形。就算在那些最早進、最注重代碼質量的公司中,爛代碼一樣存在。(並且我跟你說,現代化並不老是治癒爛代碼的良方。)

所以到後來,這些開發者開始接受這樣的事實:爛代碼註定就是軟件的一部分,而他們的工做就是優化這些爛代碼。若很多見,則無需多怪。他們採起佛繫心態,專一於如何解決擺在眼前的問題或者任務,學着如何精確評估軟件的質量狀況,並傳達給利益相關者,他們憑多年經驗,將軟件質量吹得天花亂墜。最終憑藉卓越而一向地奉獻,他們獲得了豐厚的獎勵。他們功績豐偉,故此獲得上千萬美圓的獎金,而後退休去作他們想作的事,以此度過餘生。(個人結局可千萬也要如此美滿啊!)

就像這樣

而另外一部分人則走上了一條黑暗之路。他們沒能覺悟到爛代碼是避無可避的,他們篤信爛代碼是軟件中的癰疽,他們毅然扛起大旗,勢要幹掉爛代碼。他們之因此拒絕與爛代碼安然共處,確有不少充分的理由:人們應該愈來愈聰明,不能愈來愈笨;爛代碼是對程序員的冒犯;爛代碼影響生意;消滅爛代碼能證實我是個小機靈;要是我不指出這代碼有多爛,那咱們整個公司就要破產倒閉關門大吉了。

不幸的是,因爲業務需求推着他們持續開發功能,他們無暇去操心代碼質量,因而無力去實施那些優化代碼的宏偉計劃,最終只好變成了「怨婦」。因爲他們仍是能勝任工做的,因此暫時沒被辭退,但會被髮配到公司的角落,這樣既不會打擾到別人,又能保證關鍵系統的運轉。因而他們無法得到新的開發機會,他們的技能逐漸萎縮,逐漸被業界所邊緣化。他們胸中的鬱結潰爛流膿,然後結成堅硬的痂,他們會發現本身喜歡和二十多歲的 CS 學生爭論那些他們最愛的老舊技術如何如何可行、怎麼怎麼好用 —— 以此來維持自尊。最終,他們退休了,終日對着鳥兒發脾氣泄憤。

現實狀況可能處於兩種極端之間。

有些公司在極端消極的、頗具地盤觀念的、強勢的文化氛圍下,可以發展得至關好 —— 例如迷失年代以前的微軟,這些公司每每擁有一款市場前景極好的產品並急需擴張;或者每每以命令和控制爲結構(Steve Jobs 鼎盛時期的蘋果公司),全部人都只聽一人號令,至於他們本身的見解嘛,不重要。然而,現代商業調查(如今已經成爲常識)一次次代表,要作到宏觀層面的革新和微觀層面的盡善盡美,須要頂級的創造力,而頂級的創造力來自不受高壓限制的流暢、有創造性且有條理的思路。當你擔憂同事會對你寫的每一行代碼出言不遜時,你很難開展語言驅動的、創造性的工做。

碼農「流行」文化中的負能量

現在,工程師們的態度正受到史無前例的關注。「不犯渾原則」的概念在工程組織中愈來愈常見。Twitter 上涌現了愈來愈多的奇聞軼事,說的都是人們由於沒法(不肯)忍受排外觀念和地盤觀念,而完全退出編程行業。即便是 Linus Torvalds,也爲本身多年來對其餘 Linux 開發者(老是由於 Linux 的效用性而爭吵)的敵意和斥責發表了道歉聲明

咱們的編程領域正在逐漸敞開大門,歡迎那些並不是成長於早期技術大爆炸時期的極客文化中的人們,而他們最終會成就一個嶄新的編程領域。

Linus 現在已經擯棄了過分苛刻的態度,可有些人卻仍舊對那種態度點頭稱是 —— 這些人本該對負能量的利弊深有體會。在正確性上較真卻是沒錯(就算是稱爲基本原則也不爲過),但當你問起他們爲什麼非要用帶刺傷人的方式表達消極觀點時,他們開始端起家長作派或者青春期少年的自負腔調:「他們太蠢了活該被罵」、「我得確保他們不會再犯」、「若是他們沒出錯,我也不會衝他們吼啊」等等。(關於領導者的情緒趨向會多大程度地影響開發社區,我再舉一個例子,咱們能夠看看 Ruby 社區的八字真言 MINASWAN:「Matz is nice and so we are nice」 —— Matz 是 Ruby 的創始人。)

我發現,大多數持有「幹掉傻瓜」心態的狂熱分子每每是那些深切關心代碼的質量和正確性的人,他們將身份認同創建在代碼質量上。惋惜,他們經常分不清忠言逆耳和出言刺耳。這種心態的至暗面來自於人類向他人秀優越的原始慾望,這種慾望徹底合乎人性,但毫無價值。那些不能打敗這種慾望的人,每每會陷於黑暗的困局。

來源: [ProgrammerHumor](https://www.reddit.com/r/ProgrammerHumor/comments/bcb4w3/a_meme_i_had_in_the_back_of_my_mind_for_a_while/)

編程領域正在迅速擴張,即將觸碰到其邊界 —— 非編程領域。(又或者說,編程領域包裹着非編程領域?欲知答案如何,且聽下回分解。)

隨着咱們的行業發展得愈來愈快、編程變得愈來愈平易近人,「大神」和「龍套」的差距也在迅速縮小。編程領域正在逐漸敞開大門,歡迎那些並不是成長於早期技術大爆炸時期的極客文化中的人們,而他們最終會成就一個嶄新的編程領域。而且,不管何種社會或年代,資本主義的對效率的要求終將體如今企業文化和招聘實踐中:最好的企業根本不會僱傭那些不能與他人平和地相處的人,更不用說那些待人不善的人了。

我從負能量中學到了什麼

咱們不能任由過分的負能量支配思惟和交流方式,更不能使之造成流毒,由於這對生產團隊是很危險的,也會讓企業付出高昂代價。我數不清我看過(和聽過)多少軟件項目下馬、以高昂的代價徹底重造,僅僅是由於某個受信任的開發者的一己之私見,認爲即便是一項技術、一個以前的開發者的遺留代碼或一個文件,都能表明整個項目的質量,一丁點不合格就要磨刀霍霍。散發負能量也會令人泄氣,令人際關係緊張。就由於我把 CSS 代碼寫進了錯誤的文件裏,被一位同事嚴厲地斥責,這讓我悶悶不樂,好幾天都心神渙散,我一直對此耿耿於懷。我之後也不太可能讓那種人接近個人團隊。(但誰能說得準呢?士別三日當刮目嘛。)

負能量也確實對你的健康有害

我設想的親切歡快的工做氛圍

這並非說只保留積極向上的態度,每發起一個 Pull Request 都要配上 100 億個表情符號,或者必須保持愉快的工做氛圍。(固然了,若是那就是你所但願的,那就去作吧。)負能量是編程中(也是人生中)極其重要的部分,它是表示代碼質量狀況、表達感覺以及同情同胞的方式。它表明着一我的具備發現癥結的洞察力和判斷力,它標誌着問題的嚴重程度。我經常說,當一個開發者開始從膽怯和不肯定的狀態變得勇於表達質疑時,這意味着他已經躍升到了一個新的層級。這能證實他的洞察力和對本身觀點的信心。消極的表達方式是不可能徹底避免的 —— 除非是奧威爾式的社會。

然而,負能量應該與其餘基本的人類品質相搭配,如:同情、耐心、含蓄和幽默。在必要時,你能夠告訴某人他搞砸了,但沒必要用吼叫罵人的方式。(可別小瞧這樣的方式,若是有人用徹底無感情的方式指出你徹底搞得一團糟,你也會心驚肉跳一番。)

幾年前我還在那家公司的時候,CEO 找我談話。咱們略微聊了一會項目的當前狀態,而後他問我以爲本身表現得如何。我告訴他說我以爲還不錯,項目進展順利,咱們也一直在努力,可能有些東西有所遺漏,須要着重關注一下。他說他對我在辦公室發表的某些消極觀點有所耳聞,而且其餘人也已經注意到了。他解釋說,若是我有什麼顧慮,均可以隨意向管理層傳達,但注意不要在同事間傳播。做爲公司裏一位開發領導,我必須謹言慎行,注意本身的舉止對他人的影響,無論我本身是否能意識到,個人影響力都是很大的。他很是和藹地說了這些話,最後說若是我也有同感,就應該考慮考慮自身和職業生涯的訴求是什麼。他把「好自爲之,否則就滾」的辭令表達得很是和風細雨了。我很感激他可以誠懇地知會我,讓我明白過去六個月裏,本身的態度下滑影響到了他人而不自知。

歸根結底,我來到這裏是爲了完成一項任務,大發牢騷無益於理解、評估或修復代碼。

這個例子詮釋了什麼是優秀而高效的管理,什麼是懷柔策略的力量。我意識到,當我開始徹底信任公司和其實現目標的能力後,我和他人交流的方式真的徹底不一樣了。我還意識到,就算我對正在跟進的項目持懷疑態度,也不必向同事們表達出來,這樣的消極情緒會像瘟疫通常蔓延,致使軍心不穩,順利完成項目的可能性也就更小了。正確的作法是直言不諱地向管理層反映實際狀況。若是我以爲他們沒聽進去,我還能夠瀟灑走人嘛。

後來我獲得了一個新的機會,成爲了一名正式的人力資源績效評估經理。做爲一個合格的開發經理,我更加註重本身對(持續優化的)遺留代碼表達觀點的方式。要實施改變,你必須認清現狀,但若是你陷入了哀嘆、消極怠工或任何消極反應,你將一事無成。歸根結底,我來到這裏是爲了完成一項任務,大發牢騷無益於理解、評估或修復代碼。

事實上,我越是約束我對代碼的情緒反應,我對代碼看得就越清晰透徹,心裏的混亂就會越少出現。當我用委婉的方式(「這裏可能還有些改進空間」)表達時,我和他人都開心,更能顯示出對事不對人的態度。我還意識到,經過徹底地(招人煩地?)保持理智(「你是對的,那個代碼確實至關糟糕,但咱們會改進的」),我能夠化解他人的負能量。我很期待本身能在佛系路線上走得更遠。

重要的是,我反覆不斷地參悟到一個深層次的道理:生命過短暫了,沒有時間去發火或痛苦。

來源: [xkcd #1024](https://xkcd.com/1024/)

附言:若是喜歡本文,請啪啪啪。(聽起來並不怪怪的。)若是你對我所嘗試的佛系路線感興趣,歡迎加入我司

*Chuck Parsley 屬虛構角色。若您恰巧同名,我向您道歉,我相信您是一位不寫爛代碼的優秀開發者,或者至少有志於此。若未同名,相安無事。熱愛生活吧。

若是發現譯文存在錯誤或其餘須要改進的地方,歡迎到 掘金翻譯計劃 對譯文進行修改並 PR,也可得到相應獎勵積分。文章開頭的 本文永久連接 即爲本文在 GitHub 上的 MarkDown 連接。


掘金翻譯計劃 是一個翻譯優質互聯網技術文章的社區,文章來源爲 掘金 上的英文分享文章。內容覆蓋 AndroidiOS前端後端區塊鏈產品設計人工智能等領域,想要查看更多優質譯文請持續關注 掘金翻譯計劃官方微博知乎專欄

相關文章
相關標籤/搜索