【為什麼我們挑選這篇文章】讓工程師崩潰的原因有千百種,但要一一列出來我也會跟著崩潰,這裡整理了 10 件最讓工程師們沮喪的事情,看看你自己或問問你的工程師朋友是不是也經歷過!(責任編輯:張瑋倫)
譯者/碼農網 – 小峰
軟體開發是一個偉大的工作——和任何其他工作一樣,它也有它的缺點。下面的10件事就是大多數工程師關於編程所無法苟同的。
對於非軟體開發人員來說,開發人員的工作看起來一定很甜蜜:很多公司都需求這方面人才,得到的報酬真的很不錯,公司給你各種有趣的福利,等等。但是真相卻是,雖然,這一切是真的,但如同任何其他的工作一樣,工程師也有那些扒拉著頭髮恨不得拔光的時刻。在軟體工程師的一生中,有許多事情可能會讓他或她沮喪不已。
基於在線討論論壇中工程師的評論和投票,我們總結了最令軟體開發人員沮喪的10件事情。如果,讀完了這些,你依然不改初衷想成為軟體開發人員,那麼別說我沒有提醒過你。
10. 硬體
軟體,如果沒有硬體供其運行的話,自然無法做任何事情。儘管一些軟體開發人員在最後依然自欺欺人地想要忽略硬體,但人力所不可避免的是,遲早,他們會在構建或除錯程式時面臨特定於硬體的問題。這就是為什麼一些工程師強烈建議新的軟體工程師熟悉運行程式碼的底層硬體和系統,以減少未來的交惡。
引用:
「任何曾經被調用來除錯數據庫服務器上的奇怪崩潰或為什麼 RAID 驅動器不能正常工作的工程師,都知道最後發現是硬體問題的話該是一種怎麼樣的痛苦。」——Steve Borthwick
「工程師討厭硬體:因為他們總是不能歸咎於硬體!」——匿名
9. 整天坐著
除非你有帶跑步機的辦公桌,否則軟體開發肯定不會是一個有氧活動。大多數工程師往往長時間地坐著,蜷縮在鍵盤上,盯著他們的電腦螢幕。雖然說坐著比站著舒服,但總是這麼坐著,坐久了就會變得很不舒服。這也是一件令人沮喪的事。
引用:
「整天坐在椅子上,兩眼緊盯螢幕。一段時間以後——首先是背部發起了抗議,接下來是頸椎喊不舒服,眼睛又酸又澀,頭疼…… 腿開始不知道怎麼安放…… 正如我試圖用健身,打太極拳,練瑜伽,學氣功,騎自行車上班來減輕久坐的痛苦——我真的忍受不了一天8+小時的久坐了。
整天被困在辦公室裡… …從太陽升起來,再到太陽下山——坐在那把蠢斃了的椅子上,任憑時光流逝。」——Markus Toman
8. 除錯
即使是最好、最精心設計的程式碼也會有 bug。所以,理所當然地,開發人員必須定期花費時間來跟蹤和修復軟體缺陷,無論是他們自己的程式碼還是別人的程式碼。儘管有些錯誤可以很快被發現和鎮壓,但總有不少 bug 特會躲貓貓,尋尋覓覓,從而耗去了許多小時的開發時間,更不要提工程師的理智何存了。
引用:
「發現一個難以重現的缺陷,在最糟糕的情況下,通過對相同片段的程式碼進行隨機通過和失敗的集成測試來表現!你會有這樣一種感覺,感覺自己可能永遠找不到那些神秘又邪惡的 bug 潛伏在程式碼何處。哎呀呀!」——Emmanuel Ngwane
「我們編寫這樣這樣大的程式(有時甚至很小),在除錯的時候,我們會鑽研得很深入,以至於忘記了原來的 bug 是什麼。」——Ayush Bhatnagar
「除錯,特別是當你正在處理涉及成千上萬行程式碼的大項目時。大多數像我這樣的極客傾向於使用投影儀除錯,因為眼睛會更舒適。」Isaac Perez
「Heisenbug(海森堡 bug)。」Awal Garg
7. 糟糕的文檔
工作於其他開發人員的程式碼令人沮喪,但如果程式碼文檔良好的話,至少會減少大量厭惡值。不幸的是,情況並非總是如此。如果軟體沒有很好的註釋或缺乏良好的書面說明它是如何工作的,那麼就需要耗費很長很長的時間來除錯、增強或集成該軟體。此外,對工程師的血壓也不利。
引用:
「最令人沮喪的事情是被雇用來工作於一個文檔糟糕的軟體。它讓那些接管項目的人步履維艱。缺乏註釋以及寫得糟透了的語義,尤其是還要面對先前的工程師留下的一堆 bug 和錯誤。」——Angel Angeles III
「理解某些白痴寫的沒有文檔和沒有註釋的程式碼。」——Abhishek Chauhan
「我,和大多數工程師一樣,在維護文檔寫得不好的程式碼上花費了更多的時間,而不是在編寫新的程式碼上。」——Walt Karas
6. 合併程式碼
開源程式碼控制系統,如 Git 或 Subversion,是一個很好的工具,因為它允許多個開發人員在同一個程式碼庫上同時工作,而無需顧忌他人。但是,最終,程式碼更改必須提交到存儲庫,而且可能會發生衝突,例如如果兩個開發人員更改了相同的文件或程式的話。
在這種情況下,這些更改必須合併在一起。有時這些合併衝突可以簡單地解決,但有的時候,並不是手到擒來那樣簡單。
引用:
「我也不喜歡合併,因為情況往往會是,你想以這種方式改變程式碼,而我想以那種方式改變程式碼,那麼我們應該如何改變程式碼?我總能找到一種方式來整合我們雙方的更改,但如果真有衝突的話,那將是一個尷尬的過程。」——Jessica Su
「合併衝突——*呀拉索,那就是地獄惡魔*。」Koustuv Sinha
5. 不切實際的期望
軟體開發人員通常被認為是相當聰明的人。不幸的是,這種觀念往往會導致老闆、項目經理和銷售人員對工程師或工程師的團隊在某個日期內可以合理生產的東西產生不切實際的期望,並對可交付的成果過度承諾。反過來,這可能導致開發人員倦怠,使工程師間瀰漫不爽不愉悅的氛圍。
引用:
「最令人沮喪的事情是,讓人們醒悟錯誤的看法——我真的不是魔法師,我的知識基礎有局限,使用可用工具在限定時間內完成的工作是一定的,以及試圖向那些從來沒有編程過的人解釋什麼是約束,真的好煩。」——Mark Miller
「你的老闆對你和你的同事有很高的期望,但沒有提供足夠的時間/資源來滿足這些期望,甚至是靠近這些期望。」——Kevin Sekin
「項目經理或業務分析師向客戶承諾給月亮,然後工程師必須這樣做,不行也得行。」——Ratnakar Sadasyula
「我喜歡這樣子,當有人問一些微不足道的事情時,就隨便拋出一個功能,而這個功能需要用幾十年時間推進 CompSci 領域來實現。」——Vladislav Zorov
4. 其他人破壞我的程式碼
每個開發人員的程式碼,在某些時候,必須與其他開發人員編寫的程式碼協同工作。無論是相同軟體片段的不同部分,第三方庫或工具,還是另一個完全不同的應用程式,沒有一個開發人員的程式碼是一座孤島。
於此產生的不幸是,這意味著在匆忙中,因為不良的溝通或者粗心大意,工程師可能會破壞另一個工程師的程式碼,從而引發緊張、壓力、以及通常還會伴隨咒罵。
引用:
「我曾經經歷過的最悲催的沮喪是與另一個人共同編寫一個程式,他改變了我們需要鏈接的庫而沒有告訴我。這意味著我對例程的調用缺少了變量或者添加了變量,甚至更糟的是,程式碼會在我沒有訪問的庫中崩潰。」——Sheri Fresonke Harper
「如果你的程式碼部分停止工作是因為其他人改變了他們的程式碼部分。那麼通常他們的函數使用了比以前更多的參數。有時,參數被完全消除或被放置在不同的文件中。」— —Jessica Su
「不斷地返回去返工你幾天前才寫的東西,原因是你寫的東西『壞掉了』(第 n 次)——由於其他人(沒有討論)在實現改變更廣泛的系統時,或者不測試或者不在乎測試失敗——你聽到的第一件事是『你的程式碼壞掉了』。」——Simon Hayes
3. 人們不明白我是做什麼的
儘管軟體開發人員的數量明顯在不斷增加,更不用說我們所使用的一切對軟體的依賴性也在增加,許多非技術人員仍然不明白軟體開發人員究竟是幹什麼的。
對於非技術人員來說,開發人員就是「技術人員」,而沒有考慮到軟體工作者和硬體工作者之間的區別。持續的誤解和錯誤的期望,特別是來自於家人和朋友的期望,真的會讓工程師抓狂。
引用:
「非技術人員似乎有一個常見的誤解——既然工程師使用電腦,那麼我們肯定知道如何修理它們;這種想當然的看法有點像——假設 Jenson Button 知道如何駕駛 F1 賽車,那麼他也一定知道如何拆卸和重新組裝一個賽車齒輪箱。」——Steve Borthwick
「是的,我以寫程式碼謀生;但是,對於列印問題或你打不開的配件或無法啟動的筆記型電腦,請恕我無能為力。除非你請我吃飯或請我喝啤酒,那麼也許我可以提供幫助。」——Phil J
「向人們解釋我不是安裝盜版操作系統和其他盜版軟體的。」——Anbalagan Jeyabalachandran
「家人和朋友認為你可以修復任何與電腦相關的東西。無論是硬體還是軟體。他們不在乎。最後他們反而會嘲笑[你]。類似於:「既然你不能修復筆記型電腦的DVD光碟,那你算什麼軟體工程師?」——Jazib Babar
「1%-2%的人知道你是做什麼的。」——YasinPekşen
2. 缺乏時間
像大多數工作一樣,製作好的軟體需要時間。不幸的是,在大多數努力中,上級管理者和/或客戶通常不願意等待很長時間,就想得到可正確實現的理想解決方案。因此,軟體開發人員常常被迫快速完成某些工作,而這可能會導致攻擊,技術債務和文檔缺乏,所有這些都可能會造成更多令人頭痛的問題,特別是對於那些將來不得不處理這些程式碼的工程師而言。
引用:
「我想辦好事情,但是快速、熟練做事方面就會產生很大的壓力。有時它是有道理的,但我感覺當前的編程/商業文化已經在這個方向上走得太遠了。」— —Tikhon Jelvis
「在我看來,匆匆忙忙編寫的程式碼我稱之為拼裝程式碼,當然我也希望產品中的程式碼我能寫得更優雅。但不妙的是,有一個恆定的時間壓力…」—— Gene Sewell
「當你做的很多事情甚至與你知道的何為良好編程實踐毫不相干的時候,但是因為快速比質量更重要,你不得不按他們要求你的那樣做。」——Jose Palala
「…時間和資金不夠用於正確的解決方案,但卻有足夠的時間和資金用於修復快速和惡劣的解決方案,一遍又一遍又一遍。」——Romi Awasthy
1. 使用其他人的程式碼
做為一個軟體開發人員,遲早,你得使用其他人寫的程式碼。無論是繼承先於你工作之人的遺留程式碼,第三方 API,還是由顧問編寫的程式碼,你都不能完全避免修復、增強和/或整合他人程式的問題。當然,這樣做會導致開發人員拔掉一些——或很多根——頭髮。
引用:
「…最糟糕的地方是,你不得不處理一些其他人的程式碼,找出來,除錯它,調整它。更糟糕的是,如果你前面的人已經離開了公司,那麼就真的只能靠你自己摸索了。」——Ratnakar Sadasyula
「試著破譯成千上萬行無註釋的程式碼。」——Simon Zhu
「我曾經多次處理過由顧問編寫的特可怕程式碼。」——Joe Samson
「另一個我認為可能非常令人沮喪的問題是第三方 API。你有時會非常依賴它們,然後你發現了一個問題或需要一個新的功能,但特定的 API 沒有給你任何源來解決這個問題,所以你需要詢問 API 的作者,期盼能有最好的結果。」——Kevin Sekin
「語言和框架 bug。你花費幾天的時間找出為什麼程式碼不工作的原因。結果卻發現不過是觸及了語言或框架上的 bug。」——John Paul Alcala
「發現找不到一個寫的程式碼不應該遠不合格的人…。」——Nani Tatiana Isobel
(譯文連結:http://www.codeceo.com/article/10-things-biggest-frustrations.html。英文原文:The terrible 10: Programmers’ biggest frustrations)
(本文經合作夥伴碼農網授權轉載,並同意 TechOrange 編寫導讀與修訂標題,原文標題為〈最令程序員沮喪的10 件事〉。)
延伸閱讀
你的絕望我懂!工程師找 Bug 時一定有過的 30 句崩潰 OS
15 項讓工程師無法專心寫程式的元凶:開會佔第一、討厭 PM 同在榜上
一個工程師 vs. 三個 PM 的工作日常:談個需求為什麼可以這麼跳針崩潰啊!
TechOrange 誠徵 社群編輯
如果你對數位行銷、Startup 趨勢、產業轉型,以及新科技議題有興趣,不怕用與眾不同的面向,去衝撞一般思維,歡迎你加入 TO。
我們希望你:
- 喜歡編輯/策展工作,認同編輯不只是寫字,而是包括採集素材、消化提出觀點,並策展的工作歷程。
- 對經營「內容」與「社群」有莫大興趣,希望參與線上/線下活動企劃與執行工作。
- 英文成績多益 800(或同等托福、雅思成績)以上,英文閱讀無礙,多益 850 以上為加分條件。
- 其他必備特質:
(1) 細心、主動、獨立思考、追求事半功倍、有問題不怕舉手。
(2) 不害怕總是在變動的工作環境與工作方式,樂於學習新工具與新鮮事。
(3) 喜歡挑戰、討厭一成不變。 - 畢業生可,具有 1~2 年網路社群相關工作經驗亦佳。
歡迎提供履歷自傳以及文字作品,寄至jobs@fusionmedium.com
來信主旨請寫明:【應徵】TechOrange +社群編輯:您的大名