來自Anton Zhiyanov文章:
我寫程式碼賺錢已經有 15 年了:我嘗試過其他角色--產品管理、分析、測試--但都沒有堅持下來。這些年來,我發現自己很笨。
我沒有被診斷出患有任何特殊疾病,但我的智力非常有限。我發現即使是簡單的 Leetcode 問題也很有挑戰性。閱讀有關基本共識演算法的內容會讓我頭痛欲裂。我無法真正理解程式碼庫中複雜的依賴關係。我學不會 Rust 這樣的花哨語言(我試過,但說實話,太難了)。我討厭微服務和現代前端,因為它們有太多可移動的部分,我無法一一掌握。
那我該怎麼辦呢?
我使用最簡單的主流語言(Go)和最基本的 Python。我編寫易於理解和維護的簡單程式碼(儘管有時很冗長)。我避免深度抽象,總是選擇組合而不是繼承或混合。我只在絕對必要時使用泛型。只要有可能,我更喜歡扁平資料結構。
我儘可能少地引入外部依賴性(理想情況下為零1)。我設計的模組具有清晰的 API(不是羅伯特-馬丁定義的 "清晰"),但幾乎從不將其提取為微服務。我使用 JSON-over-HTTP API,但從不使用 GraphQL。我花時間學習 SQL,並經常使用它2。我採用基本的彈性模式,如超時、斷路器和反向壓力。
我儘量少用軟體元件。理想情況下,只使用應用程式本身、SQLite 或 PostgreSQL 進行資料儲存,以及 Docker 和少量 shell 進行部署。根據需要使用 Nginx/HAProxy。無 API 閘道器、無分片、無分散式快取、無訊息佇列、無 NoSQL/NewSQL/Graph/whatever 資料庫、無服務發現、無join、無雲原生、無 FAANG 級最佳實踐。
我畫依賴關係圖和順序圖來理解遺留程式碼。我寫註釋來提醒未來的自己,為什麼某個函式要這麼做,或者為什麼某個 if 分支是必要的。我編寫文件,力求簡潔易讀。我寫例子,寫很多例子。有時甚至是互動式3。
我構建的軟體似乎還能正常執行。它不會給谷歌工程師留下深刻印象,這是肯定的。但它能很好地為使用者和企業服務。
所以,做個傻瓜對我來說也挺好。
網友:
1、這篇文章坦率地探討了作者自認在理解複雜程式設計概念方面的侷限性,儘管他已有 15 年的經驗。作者承認自己在高階演算法、依賴性和 Rust 等語言方面有困難,但他們在工作中強調簡潔性。他們使用 Go 和 Python 等主流語言,避免深層抽象,儘量減少外部依賴性,從而編寫出易於理解和維護的程式碼。作者還重視清晰的模組設計、基本的彈性模式和詳盡的文件。儘管他們的工作簡單,但他們開發的軟體卻能有效滿足使用者和業務需求,這證明了接受自身的侷限也能帶來成功。
2、考慮到其主張,本文的標題具有誤導性。所描述的所有做法並不愚蠢,它們實際上對於小規模操作來說非常聰明且有意義。到目前為止,作者在其職業生涯中從未需要設計一個服務於非常大的使用者群或具有 99.99% SLA 的系統。