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






























