另類萬圣節(jié):十三種令程序員們夜不能寐的恐怖噩夢
譯文【51CTO譯文】一年一度的萬圣節(jié)即將來臨,如果大家希望讓自己的軟件開發(fā)者好友們真正感受到恐怖氣氛,那就別再搞女巫、鬼魂或者連環(huán)殺手那種俗套伎倆了——下面這些狀況絕對會把他們嚇得魂不附體。
明天又到萬圣節(jié),每年一次的恐怖盛宴再次開席,我們將從內心深處挖掘最令自己害怕的事物——當然,純粹是為了娛樂!對于大多數(shù)人來說,能讓他們感到毛骨悚然的東西還是老一套:鬼魂啦、蜘蛛啦、戴著曲棍球面具到處砍人的瘋子啦。但對于一部分特定群體,他們害怕的對象卻顯得不那么傳統(tǒng)。
舉例來說,軟件開發(fā)人員其中的一類典型——當然,其他類型的特殊群體也是有的,但技術網(wǎng)站表示對那幫家伙不感興趣。如果大家向自己身邊的開發(fā)者朋友詢問最令其害怕的事物,答案可能與女巫、黑貓或者其它一些象征陰暗死亡的東西八竿子打不著。沒錯,他們可能更畏懼鍵盤上的分號鍵壞了或者微軟的某款產品又崩潰了。在今年的萬圣節(jié)中,我們就這一話題在網(wǎng)絡論壇中征求了開發(fā)者們的觀點,而這些程序員在面對“你最可怕的噩夢是什么?”這個問題時給出了以下十三條常見答案。
互聯(lián)網(wǎng)無法回答我的問題
以Stack Exchange為代表的開發(fā)者常見問題解答網(wǎng)站已經成為技術從業(yè)者們不可或缺的重要資源儲備與依賴對象。當然,也有不少其它問答網(wǎng)站及開發(fā)者論壇能夠幫助軟件開發(fā)人員解決自己在編程過程中遇到的具體問題。但在少數(shù)情況下,開發(fā)人員可能仍會遇上那種令自己全身冰冷的可怕狀況:網(wǎng)絡上看似無窮無盡的編程知識儲備依舊沒辦法解答自己的疑問。
群眾意見: “最可怕的就是打開Stackoverflow網(wǎng)站并看到一篇其他人發(fā)布的、與自己想問的問題完全一致的帖子??植赖氖?,這篇帖子已經發(fā)布一年多了,而且根本沒人做出過回復。”Jorge Irun
“我害怕的是StackOverFlow上的最佳答案實際上并不起作用(我們也遇上過這種情況)!”Ramchand Rajasekaran
“在谷歌上搜索能解決架構難題的方法,卻發(fā)現(xiàn)找到的相關信息已經是六年之前的、描述的問題完全相同——而且就是由我自己發(fā)表的。” Steve Traugott
#p#
最重要的鍵盤按鍵損壞或者丟失了
不用說,鍵盤在程序員的日常生活當中扮演著非常重要的角色。但是,并非鍵盤上的每個按鍵對于開發(fā)人員來說都擁有或者能夠創(chuàng)造同樣的價值。一部分按鍵的使用頻率要明顯高于其它按鍵,具體情況則視編程語言的類型而定——例如在JavaScript、Perl以及Objective-C當中,分號就意義重大。程序員們還喜歡大量使用快捷鍵操作,利用這些組合來代替相對繁瑣的鍵盤、鼠標或者觸控板操作不僅能夠節(jié)省時間、也可以避免多次重復動作帶來的關節(jié)勞損。有鑒于此,我們就能想到當開發(fā)人員夢見鍵盤上一個又一個心愛的按鍵消失不見、并因此帶著一身冷汗從床上驚醒時,內心該有多么恐慌與絕望。
群眾意見: “我做過的最可怕的噩夢就是自己的分號怎么按都不起作用。” Ali Akbar
“空格鍵失靈” Vivek Patel
“正在編寫一套規(guī)模龐大的代碼項目,然后突然發(fā)現(xiàn)Control鍵沒有反應了……” Nikesh Shetty
“CTRL+Z無法正常實現(xiàn)撤消操作 :( :(“ Nirwan Dogra
#p#
互聯(lián)網(wǎng)失效——或者出現(xiàn)故障
像Stack Exchange這樣的網(wǎng)站因為故障而無法及時應答程序員們的問題是一碼事,但互聯(lián)網(wǎng)本身整體失效則是另一碼事——而且后者明顯要更加恐怖,甚至足以令人精神崩潰。畢竟除了回答問題之外,互聯(lián)網(wǎng)也塞滿了其它極具實用價值的資源,例如開源軟件以及代碼片段等等。更不用提在沒有互聯(lián)網(wǎng)的情況下,訪問遠程或者云端服務器將無法實現(xiàn)、沒辦法跟分布式團隊中的其他成員溝通甚至連最喜歡的流媒體音樂服務也用不了,這實在是一場深重的災難。因此,如果大家希望真正讓自己的編碼好友嚇一大跳,那就得找點確實震得住他們的理由——例如“互聯(lián)網(wǎng)掛了,什么網(wǎng)站都上不去了!”對了,如果朋友們因此嚇得口吐白沫,記得幫他們擦一擦。
群眾意見: “StackOverflow網(wǎng)站當前正處于停機維護當中。” Mahanthesh Shadakshari
“谷歌服務器陷入永久停機狀態(tài)。” Anonymous
“如果互聯(lián)網(wǎng)與谷歌都沒法用了,我們就只能回到過去那個閉塞而恐怖的‘黑暗時代’。我們會被困在原地,不知道在遇上特定問題之后應該如何處理。” Thoriq Firdaus
“說真的,如果互聯(lián)網(wǎng)本身崩潰了,那么開發(fā)人員們肯定會停止手頭的工作并開始閑聊家常。哦我的天哪……這太可怕了!” nanda
#p#
一個無法重現(xiàn)的嚴重漏洞
為了修復一項漏洞,軟件開發(fā)人員們首先必須有能力在開發(fā)或者測試環(huán)境中重現(xiàn)引發(fā)這一問題的狀態(tài)。接下來,大家就只能碰運氣、希望引發(fā)問題的根源能在影響到生產系統(tǒng)之前被診斷出來并在重復測試中不再出現(xiàn)。很多開發(fā)人員最害怕的就是那些看似隨機出現(xiàn)的漏洞,這類問題在可控制環(huán)境下幾乎沒辦法確切重現(xiàn)。要讓這類漏洞施展威力,大家最好是能選個最合適的時機——例如在為特別重要的客戶進行運行演示之前。相信我,如果能夠成功完成上述部署,各位的程序員朋友肯定嚇得褲子都濕了。
群眾觀點: “……漏洞平時根本不出現(xiàn),而只在當著五百多位與會者的面進行公開演示時發(fā)生。” Jeremy Friesner
“某個無法在內部環(huán)境下重現(xiàn)的藍屏問題卻在某位重要客戶的設備上反復肆虐。” Joe Wezorek
“某個只會在我自己的計算機之外出現(xiàn)的錯誤,而且僅僅發(fā)生在生產體系中——無法在測試環(huán)境內予以重現(xiàn)。” Jaimie Sirovich
“在自己本地服務器上完美運行的程序/網(wǎng)站一旦上線就開始變得極不穩(wěn)定。這給人的感覺是服務器像是無情地玩弄自己,而我們只能讓原本興奮的情緒沉入悲傷的深淵、同時卻又無能為力。” Ankur Agarwal
#p#
缺乏完善的說明文檔(或者沒有說明文檔)
想在不借助完善的說明文檔或者代碼注釋的情況下理解現(xiàn)有代碼實在是難如登天。而如果根本不存在任何說明文檔或者代碼注釋,那么內容理解的難度又會更上一層樓。上述情況不僅局限于接手自其他程序員的已編寫代碼內容,更糟糕的是他們可能是在很久之前編寫出相關片段、而且當時并沒有保留妥善的文檔記錄。這種沒有說明文檔可供參考的代碼,無論當初是由誰編寫而成的,都是一種非常恐怖的存在。
群眾意見: “最可怕的就是在沒有適當說明文檔或者某些無意義標識符不提供相關注釋的情況下對代碼進行調試。這就像是在給別人擦屁股,簡直沒法忍受。” Pratyush Kumar
“在項目中扮演繼任者的角色最可怕,面對著糟糕的注釋來解讀另一位編碼者的胡言亂語根本就是件不可能完成的任務。” Sam Brody
“最可怕的是維護十幾年前沒有說明文檔可供參考的代碼。我在處理這類工作時確實做過噩夢。” Sam Sartor
“在幾年后的其它項目中發(fā)現(xiàn)自己當初編寫的無說明代碼時,我簡直陷入了歇斯底里的狂躁狀態(tài)。‘當時我為什么要這么干?’‘這代碼真是我寫的?’這種感覺就像在自己家中迷了路。” Alok Sharma
#p#
來自地獄的管理者
任何人,包括程序員或者從事其它工作的人士,都不喜歡那種喜歡干涉份外事務或者不夠稱職的管理者。不過軟件開發(fā)人員尤其如此,他們最害怕非技術人士向他們打聽關于代碼的問題。管理者通常會夸大項目本身所能實現(xiàn)的效果,過度低估編碼工作所需要的時間并做出一些能讓程序員們在睡夢中都不斷抱怨甚至唾罵的離譜承諾。
群眾意見: “無能的高層管理人員和無知的決策者們把自己莫名其妙的討論結果強加給開發(fā)者。” randcraw
“我最怕非技術管理者,他們總認為自己有資格來插上一腳——事實上他們關于編碼的全部理解都是十幾年前的老黃歷。” Anonymous
“對我來說,最糟糕的噩夢就是那種喜歡吹毛求疵的管理者,他們總認為自己目前的職位屬于大材小用、并希望在限定時間之前滿足客戶的任何或者全部要求。這類人總把編程人員當成奴隸來看待,而切實起效的代碼應該是像孫悟空那樣憑空從石頭里蹦出來的。”Rachit Agrawal
“我最怕的是被迫對整套系統(tǒng)進行重寫……再次重寫……而且需要使用另一種語言以及完全不同于此前的工作集/框架……一次性完成而非分階段調整(即一次替換一部分,完成后再替換另一部分)……而這僅僅是因為一部分高層管理者認為自己想出的主意才是最好的、其他人的既定方針都是錯的而且需要馬上加以全盤否定。” RHSeeger
#p#
對其他開發(fā)者的代碼進行清理
軟件開發(fā)人員當然不希望處理其他人編寫出來的代碼; 歸根結底,其他程序員的代碼永遠不可能像自己親手編寫的那么出色,對吧?對于剛剛接手的朋友來說,即使是擁有良好說明文檔的第三方代碼也足夠讓他們頭痛一陣子的。只要聽說需要對其他人編寫的代碼——哪怕是幾個月前剛剛編寫完成的——進行調試、重構或者現(xiàn)代化調整,程序員們往往會出現(xiàn)強烈的不適反應,例如心律不齊——而且很明顯,這樣的決定往往并不明智。
群眾意見: “……我最怕的是老板要求我對所謂‘擁有源代碼’的項目進行重寫或者現(xiàn)代化調整,因為這種情況下‘擁有源代碼’的真實含義往往是‘它是用Fortran語言在這堆雜亂無章且數(shù)量龐大的穿孔卡片上編寫的’。” bta
“……我認為程序員可能面對的最惡劣狀況就是負責接手某位前任開發(fā)者的源代碼——而這些代碼根本沒有遵循任何標準化或者最佳實踐方案。” George Alexander
“我最怕的是被要求‘從C++代碼中找出某個與什么什么相關的漏洞,而實際可用的素材只是一大摞紙質記錄(長達20頁的代碼,約有2000行命令)而非能夠直接進行編譯、運行以及調試的代碼。 “ Giovanni Idili
“如今程序員當中的主力是那些通過‘編碼一小時’課程入行的菜鳥,而他們留下的垃圾最終還是得由我負責清理。” Chip Frank
#p#
變更項目要求
無論是采用傳統(tǒng)的瀑布式項目管理方案還是敏捷環(huán)境下以用戶為核心的實施方針,軟件開發(fā)人員最需要的就是一套清晰、可靠、穩(wěn)定且足以指導編碼進程的項目要求。但在現(xiàn)實情況下,這些要求往往會在工作推進過程中出現(xiàn)變更——有時候是出于正當理由,有時候則僅僅是因為愚蠢的項目經理、高層管理者或者客戶腦袋一熱而導致。無論如何,只要出現(xiàn)這種情況,程序員就會身陷難以擺脫的恐慌情緒當中、特別是害怕項目結束前的最后一分鐘出現(xiàn)要求調整。
群眾意見: “就在項目進入沖刺階段的前一天,通過電子郵件發(fā)來要求變更的通知。” Basav Nagur
“特別是在要求變更會對數(shù)據(jù)庫規(guī)劃產生影響的情況下,這實在比給人扭斷了脖子更難受。” Kunal Suri
“一切都已經測試完畢并準備好迎接第二天的生產環(huán)境部署,這時老板通知我們原有要求出現(xiàn)了變更、而所有工作都得在今天之內完成。” Yinso Chen
“我最怕那種不知道自己想要什么偏又喜歡定期進行要求變更的客戶,他們會盲目地指手畫腳直到技術團隊徹底崩潰。” Dave Cahill
#p#
我的代碼憑空消失了
無論開發(fā)人員在軟件編寫工作上花了多少時間,如果代碼意外消失、那么一切努力都將付之東流。源代碼可能出于各種各樣的原因而在轉眼間灰飛煙滅,包括忘記正確保存文件、某些特別惡劣(也特別殘忍)的漏洞以及命運的無情捉弄。無論是何種原因所導致,也不管開發(fā)人員多么小心謹慎,事實上程序員們一直生活在恐懼當中、害怕自己長期以來用心經營的工作成果在瞬間消失無蹤。
群眾意見: “由于突然停電或者個人疏忽而導致辛苦編寫的代碼就此丟失。”Philan James
“當大家意識到這一點時,糟糕的代碼管理習慣已經導致運行中的程序被從文件系統(tǒng)里徹底擦除(也可能還影響到了與我們工作相關的其他開發(fā)人員的編碼成果)。” Simon Hayes
“我最怕的是自己急于重啟系統(tǒng),而在面對IDE給出的‘尚有未保存的工作,您是否希望將其保存〈是〉,〈否〉’提示時忙中出錯。雖然我們的腦子里想的肯定是〈是〉,但自己的手指有時候會已經點上了〈否〉——這讓人恨不得直接把它給剁了。” Sakthi Prasad
“我最怕的是在錯誤的目錄當中輸入了rm –r *。然后就沒有然后了。“ Ayush Sekhari
#p#
IE瀏覽器
所有的程序員都有自己最畏懼、最沒自信的技術領域,但Web開發(fā)人員在這方面的感受卻更強烈也更直接——那就是對于在IE瀏覽器上構建項目的反感甚至抵觸。盡管仍然屬于目前人氣最高的瀏覽器方案之一,IE同時也成為眾多代碼編寫者的口誅筆伐對象。更糟糕的是,IE舊版本不僅問題更多、讓人抓狂的是偏偏還擁有更為龐大的用戶群體。為此,開發(fā)人員不得不將其納入支持列表,而且其支持周期往往比其它更具開發(fā)者友好特性的瀏覽器更長。我們不妨打這樣一個比方:如果《黑色星期五》電影中的殺人狂杰森想要把一隊Web開發(fā)人員嚇得魂不附體,那最好是在自己的冰球面具上貼一張IE的標志。
群眾意見: “最可怕的是:客戶使用IE瀏覽器!” Cem Kaan Kösalı
“開發(fā)人員要讓自己的Web應用程序能夠順利運行在IE 6瀏覽器上,花費的時間往往達到為Chrome或者火狐等其它現(xiàn)代瀏覽器開發(fā)應用時的四三倍以上。”Thoriq Firdaus
“我最怕的是在普通代碼已經能夠在人類已知的全部其它瀏覽器上正常運行時,仍然需要利用HTML、CSS以及JavaScript為其編寫IE 8特殊版本。” Arvind M.Raman
“我最怕的是在只安裝了IE瀏覽器的Windows環(huán)境下進行開發(fā)工作……需要處理的問題太多了……” Madhu Agrawal
#p#
受傷或者生病
編程其實并不是那種對體力要求很高的工作,但與其它大多數(shù)需要整天在電腦上敲擊的職位一樣,如果胳膊、手掌或者手指出了問題,工作也就很難順利進行了。此外,編程人員的視力與邏輯思考能力如果受到了影響,也會對日常工作造成嚴重不便??紤]到以上情況,典型的軟件開發(fā)人員自然也會在噩夢中遇到對應的狀況,即自己身體的某個或者某些部分不聽使喚、因而沒法完成開發(fā)任務。
群眾意見: “……我最怕的是手指割破了或者眼睛看不見了……那樣就沒法再寫代碼了。” Aitjcize
“我最怕自己的大腦出現(xiàn)了某種嚴重的病變,這樣我就沒辦法像原先那樣流暢地進行思考、但卻又保有自己聰明睿智時的相關記憶——簡直太痛苦了。” Daniel Super
“我最怕腕管綜合癥、肘管綜合癥以及其它任何可能讓自己沒法用手的病變。” Matt Nicolls
“早上一覺醒來卻發(fā)現(xiàn)有人在夜里把我的手指給偷走了。用胳膊肘打字真的很費勁。” Kelly Draper
#p#
我在開發(fā)中遺留的漏洞造成危害甚至奪人性命
相信沒有哪位軟件開發(fā)人員希望自己打造的成果當中存在漏洞。當然,也不是所有漏洞都會帶來惡性后果——其中一些雖然有點討厭,但卻沒什么危害。而有一些則有可能會給企業(yè)或者客戶造成經濟損失,甚至導致相關人士丟掉工作(例如需要為其負責的編程人員)。而程序員們最不想看到的就是,自己所構建的軟件方案在實際運行中給用戶帶來身體傷害甚至奪人性命。
群眾意見: “我最怕的就是自己目前正在開發(fā)的天然氣鉆機控制系統(tǒng)出現(xiàn)問題……” Kjetil Seim Haugen
“我最害怕的是自己軟件中的漏洞給其他人造成身體傷害。” Jeremy
“我能想到的最嚴重后果就是某人所編寫的交通指示燈程序沒能正常起效,由此導致的車禍則造成重大傷亡……又或者某些醫(yī)學掃描儀輻射量控制不當而致人死亡……包括某些軍事GPS系統(tǒng)錯誤地將飛行員指引到了敵方的空中火力覆蓋網(wǎng)之內……” Mark2008
“我最怕的是軟件漏洞奪人性格——這種情況之前確實發(fā)生過。” Jon Kannegaard
#p#
段錯誤
開發(fā)人員的另一大常見噩夢是在運行中發(fā)現(xiàn)段錯誤。這類錯誤通常是由內在訪問沖突所造成,即程序試圖訪問受限內存或者執(zhí)行受限操作。一般來講,這類情況下內存管理單元會向操作系統(tǒng)發(fā)出通知,而操作系統(tǒng)往往會反過來向相關進程發(fā)出通知并最終導致程序崩潰——而這無疑會令那些嘗試找到問題原因的開發(fā)人員們倍感頭痛。有鑒于此,難怪很多程序員最擔心的就是在自己的屏幕上看到這幾個字了。
群眾意見: “段錯誤是最最恐怖的噩夢!” Supratim Samantray
“除非運行調試工具,否則這類問題可能由上百種原因導致、而我們根本搞不清狀況。” Zeina Shajahan
“‘段錯誤。代碼已轉儲。’當我們不小心使用了錯誤的指針并導致這類問題時,心中像是有無數(shù)羊駝奔騰而過。” Gomathi Sunder
“任何錯誤都能由經驗豐富的程序員在幾分鐘之內修復完成,但段錯誤或者無用循環(huán)則不行……愿程序員安息!” Gaurav Jain
原文鏈接:Frightening to the core: 13 things that give programmers nightmares
核子可樂譯