作者(author):
這是關於一位有激情的年輕開發者的、幾乎真實的故事。在2023年年末,他開始在一家小公司上班,這家公司有他想要的一切:豐厚的薪水、使用他鍾情的程式語言,處理複雜性和搭建架構。
這並不是該年輕開發者的首次工作經歷。但是他的第乙個專案已經被證明是有問題的。當時,他認為功能從來不會改變。但是他錯了,每次修改功能都需要一次徹底的重構,引發了bug以及大量時間的浪費。他甚至嘗試過編寫測試之類的、有效的方式。不過他的測試需要維護、編寫所需時間、甚至更多執行的時間。
對於每個年輕的開發者,他在成長過程中總是聽到有經驗的開發者說到的「當心!過早優化是萬惡之源!」、「編寫測試!測試!測試!」。或許他只是在重構乙個微小的實用程式方法,而這時有經驗的開發者將走過來、以嚴厲的表情警告說「你沒有做過早優化,對吧?」、或「你在寫測試,是嗎?」。
但是所有這些警告都被忽視了。因為年輕開發者不理解過早優化為什麼是萬惡之源、也不理解測試應該是正確的。根據他自己的經驗,他知道下面的需求從長期看是不合理的(因為它們可能有修改),編寫測試就是在浪費時間。
「我究竟為什麼每次都必須重寫我的**?我究竟為什麼必須在當下編寫**、隨後再重構,我什麼時候能夠編寫世界上最好的**?還有,我究竟為什麼不得不用我所有的時間來編寫沒用的測試?」這就是年輕開發者的疑惑。
一天,年輕開發者開始著手乙個新專案。他決定無視有經驗開發者的警告;為了應對每次需求變化,他期望每塊**是快速的、可配置的和健壯的。需求清晰了,不過他要做得更好。比如,當有個功能,生成以大寫『s』結尾的產品**時,他建立乙個配置物件,這樣結尾的字母就可以通過配置來修改,通過配置還可以決定這個字母應該是大寫還是小寫。當需求說明需要一些校驗時,他就建立乙個龐大的校驗器,不僅包含需求要求的,還有很多沒要求的。
在編寫了專案的核心之後,一種完美的感覺充滿了年輕開發者的全身。「那個有經驗的開發者是錯誤的!」年輕開發者看著自己的傑作得意地說。他夜以繼日地工作,認為數週後就可以發布產品了。
光陰荏苒……
一天,客戶告知他們乙個bug。有經驗的開發者看到這個bug,對顯示器上出現的情況保留著厭惡:年輕開發者看到了大教堂,而有經驗開發者看到的是貧民窟;年輕開發者看到了模式,而有經驗開發者看到的是乙個充斥著class的複雜網路;年輕開發者看到了比光速還快的**,而有經驗開發者看到的是不必要的複雜演算法。他不想碰這些**,因此他讓這個年輕的開發者去修復自己的bug。
其他人不認為年輕開發者的**是優美的,只有這個想法讓他感到失望。他充滿憤怒地開啟了專案……才發現**對於他來說,也是費解的!**背後沒有清晰的意義。「這就是我不打算再使用這門語言的原因,語法太糟糕了」,往往是年輕開發者的第一反應。但是他在內心深處知道,這不是真正的問題。真正的問題是他。
一天結束的時候,bug修復好了,卻產生了另乙個bug,這是那一天之後發現的。每次修復都在影響著專案內部的瘦弱的平衡,就像亮白色衣服上的一小塊黑色補丁。
此時這個年輕的開發者絕望了,他的大教堂開始搖晃,他感到離崩塌不遠了。年輕開發者自問,「或許我不是這份工作的合適人選。為什麼我不能編寫恰當的**呢?」帶著沮喪和憤怒的交織心情,年輕的開發者開啟了有經驗開發者維護的專案。
他看到的**讓他感到吃驚:**有注釋和測試,易於閱讀。和他最初開始寫的**沒有太多區別,有一些清晰的例外:沒有可擴充套件的配置,每行**都被測試了,每個方法都取著有意義的名字、且簡短(最多10行**),只做必要的,每個檔案只包含了能夠嚴格做本質工作的方法。
在這個憂鬱的時刻,有經驗開發者來到了年輕開發者身邊,和他挨得很近,開始重構引起所有bug的**。
他們一起工作了數天,有時候,有經驗開發者寫**,而年輕開發者**有經驗開發者如何解決問題;另些場合,年輕開發者寫**,而有經驗開發者在旁邊監督。
數天後,一次新的部署標誌著bug已被修復。引起bug的小部分**,現在可以被測試了、易於閱讀了,也很穩定。有經驗開發者看著年輕開發者說:「你現在明白了嗎?」
年輕開發者點了點頭,他現在明白了。完美的關鍵不是**將來,而是編寫容易修改、測試(這樣修改就不會引發其它bug了)以及只需滿足當前需求的**。當他意識到這一點時,他注意到他正在變化,正在變成差不多有經驗的開發者。
年輕開發者問,「我們現在能夠重構整個專案嗎?」
有經驗開發者乾脆地答道,「當然不可以!沒有預算」
年輕開發者問,「但是,如果其它bug出現了,該怎麼辦?」
有經驗開發者答道,「我們將找個 freelancer 來修復」
然後,這個差不多有經驗的開發者開始編寫優秀的**,準備學習另外的經驗。不過這是另外乙個故事了。
— end —
譯文:《年輕開發者的那些傷心事 》| 臘八粥
蘋果開發者賬號那些事兒(一)
正如前言所述,如果你是找一篇如何申請蘋果開發者賬號的hoto教程,那麼不耽誤你的寶貴時間了,馬上關閉本頁面。如果你是想看我扯一下關於蘋果開發者賬號那些事兒,那你可以放鬆下接著往下看,從這一篇開始接下來幾篇文章,我將完整的介紹蘋果開發者賬號體系!個人計畫只需要填寫個人資訊並通過蘋果審核即可,公司計畫需...
優秀的開發者 vs 糟糕的開發者
優秀的開發者是乙個藝術家,乙個享受創作過程的工匠。糟糕的開發者只將自己當作負責產生 的碼農。優秀的開發者了解客戶的問題。糟糕的開發者只了解手頭的技術問題。優秀的開發者會不斷努力去理解 為什麼 然後去實現,同時能夠把握大局。糟糕的開發者專注於構建類 方法和配置檔案,而不理會大局。糟糕優秀的開發者了解產...
優秀的開發者 vs 差的開發者
如果你認為使用 優秀 和 差 來區分開發者不妥的話,也可以將這些看作是初級開發者和資深開發者之間的區別。但無論如何,多看看其他的優秀開發者 或資深開發者 是如何做的,對於自身技能 工作方式的提公升有很大的幫助。優秀的開發者是乙個藝術家,乙個享受創作過程的工匠。差的開發者只將自己當作負責產生 的碼農。...