
TL;DR
- 專注基礎與官方文檔:以原理與一手來源為主,避免工具導向失衡。
- 多數情境下要懂業務:將技術決策映射到北極星指標與關鍵流程。
- 超前設計需可逆可觀測:命中機率、可回退、Rule of Three 與退出機制。
- AI 是加速器:規格清晰→AI 初稿→人審核→測試驗證→上線觀測的閉環。
- 以行動為中心:每週精讀、每月工程化改進、季度驗證小型試點。
如何學習
都說程序員需要持續不斷的學習才能跟上時代,這不完全對。計算機行業的新技術確實層出不窮,但絕大多數新技術都不是根本性的革新,而是逐步的演進。而且經常會出現回退,即某項新技術經過一段時間的實踐被發現方向是錯誤的。你跟得太緊,反而會被忽悠。
新技術雖然花樣百出,基礎是不太會變的,所以程序員最需要做的,是掌握基礎的底層技術。有了基礎,再學習新技術就會輕松很多,萬變不離其宗嘛。而且,你會用批判的眼光去看這項新技術解決了什麼問題,同時又引入了哪些新問題,可能的坑在哪裡需要格外注意。
如何掌握基礎技術?自然是讀經典著作。很多計算機領域的專家寫了很多編程方面的書和文章,程序員只要看每個領域最經典的那幾本就夠了。我一直認為,學習一項知識或技能,最好的辦法就是讀經典著作。計算機行業的好書很多,但是爛書更多。讀錯一本書,耽誤時間不說,看得糊里糊塗、甚至被誤導,從入門到放棄。
從哪裡找經典著作呢,看豆瓣評分和豆瓣書單可以找到很多好書。已故計算機專家陳皓(左耳朵耗子)在極客時間的「左耳聽風」專欄,也是找到經典著作的極好的來源。專欄最重要的價值不在於他講解了什麼,而是他提供了一個非常完整的知識體系,包括大量經典書籍和文章。有了這些基本上就不需要看其它的書單或書籍推薦了。摘錄一段陳皓在專欄中的話:
我在《程序員》後期的文章中羅列了很多文章資源,有的讀者很不能理解,他們覺得我多少應該導讀一下或是寫上一些自己的想法,而不是只是簡單地羅列出來。這里請允許我辯解一下,我之所以這樣做,並不是因為偷懶,我完全可以把這些信息資料全部隱藏起來,翻譯也好,搬運也好,導讀也好,自己消化完後再寫出來。那麼,我可以寫出多少個專欄來?我覺得,只要我有時間,極客時間上的所有專欄都不用寫了,我一個人就 OK 了。我可以寫得又快又好,而且超出所有的人。那我可以掙到很多錢。但我不想這樣,我想把我讀過的好的文章推薦給大家,就像推薦書一樣。那些是信息源頭,已經寫得非常不錯了,我不用再多廢話。
另外,工作中核心業務代碼用到的技術框架,一定要清楚其基本原理、通讀官方手冊,英文的也要硬著頭皮讀。讀完之後,你就成為團隊里能夠「托底」的那個人。遇到問題,你會大概知道從哪裡開始查,而不是滿世界求助。其實網上的很多比較水的技術文章都是抄官方手冊的。
【行動清單】
- 基礎三層:計算機基礎(演算法/網路/作業系統/資料庫)→ 主業框架(讀官方手冊)→ 工程化(測試/CI-CD/可觀測性)
- 週目標:精讀 1 份核心系統的「官方手冊章節 + 示例專案」,並復刻關鍵用例
- 來源策略:官方文檔 > 經典書目 > 原始作者文章/論文 > 二手教學
- 反思問題:這項新技術解決了什麼舊痛點?引入哪些新風險(運維/性能/安全/團隊能力)?
程序員需要懂業務嗎
我認為在多數情境下,程序員理解業務是高度必要的。
有人認為,如果開發設計寫得足夠準確完整,程序員照著做就可以了,不需要懂業務。你可能會覺得這個觀點的前提有問題,現實中很少能有準確完整的詳細設計嘛。
沒錯,但我想說的是,即使這個前提可以滿足,它仍然是錯的。因為它把程序員當成了冰冷的機器而不是活生生的人。或者說它是站在領導的立場,而不是程序員自身的立場。試想一個星際飛船系統的程序員,他所做的,只是根據文檔中描述的星球重力加速度、大氣密度、軌道參數等,編寫飛船自動登陸程式,他不關心這程式是用在訓練中,還是真實的火星探險,他也不關心宇航員是如何與軟體互動的。當飛船成功登陸火星,團隊發出激動的歡呼時,他能理解嗎,他是否想知道自己在其中做了哪些貢獻呢?
人需要知道自己做事情的意義,需要成就感,所以程序員需要知道自己寫的程式是在什麼場景下如何被使用的,這是他與社會連接的方式。
另一方面,完美的詳細設計文檔從何而來?還不是由前一代優秀程序員成長而成的首席程序員或資深程序員寫的嘛,寫詳細設計文檔需要看懂產品經理寫的 PRD,肯定需要懂業務。這其實是一個程序員職業發展的問題,程序員年齡大了以後出路是什麼?一是繼續當程序員,如果不能成為懂業務能寫設計文檔的資深程序員,滿足於當一輩子基礎程序員的話,遲早被更年輕成本更低的程序員取代;二是成長為架構師,架構與業務是密切相關的,架構師肯定需要懂業務;三是轉行產品經理、項目經理、團隊領導等,這些崗位就更需要懂業務了。
當然程序員不需要像產品經理那樣懂業務,你需要對用戶的行業有一些基本瞭解,並且能看懂產品經理寫的 PRD。這樣你就有一種掌控感,也為將來的職業發展做好準備。
【低成本懂業務的 4 件事】
- 認清用戶:誰在用?用什麼設備?在什麼場景下用?
- 北極星指標:當下最核心的 1 個量化目標是什麼?
- 關鍵流程:用 5 個步驟畫出從進來到轉化/留存的路徑
- 風險約束:合規、隱私、SLA、流量與成本上限
適當超前設計,避免過度設計
超前設計本質是預見到未來可能的需求,提前進行針對性設計,使得程式結構更容易適應將來的需求,改動較少,從而降低總體成本。
過度設計則是對未來需求進行了錯誤的估計,白白做了額外的工作,並沒有命中未來的需求;有時候程序員甚至為了炫技,為了使用某種技術而增加沒用的功能。
如何避免過度設計?要靠經驗。經驗從何而來?還是得懂業務。如果你不瞭解行業、不瞭解客戶、不瞭解業務場景,你就無法預見未來可能的需求,只會做出想當然的超前設計。實際上,一項需求將來出現的可能性,產品經理更有發言權,程序員如果感到需要做超前設計,應該和產品經理探討一下。
超前設計是會增加成本的,它本質是一種賭博,用今天增加的投入來賭明天的節省成本。在大環境好的時候,對超前設計的容忍度較高,比如半年甚至一兩年後才命中需求,也可以接受;而在當今的普遍降本務實的大環境下,超前設計更應該慎重,因為如果消耗的成本太多,你的企業可能活不到命中需求的那一天了。
【超前設計決策準則】
- 命中機率:未來 3–6 個月內,相關需求出現的頻率 ≥ 2 次?
- 成本可逆:抽象帶來的代碼/認知負擔可在 1 天內回退?
- Rule of Three:第三次遇到相似需求再抽象
- 可退場機制:Feature Toggle + 小步提交 + 明確刪除路徑
程序員會被 AI 徹底取代嗎
與其討論最終是否會被取代,不如先優化當下的人機協作流程:
- 需求規格:明確輸入/輸出、驗收案例與邊界條件
- 生成初稿:讓 AI 產出代碼/測試/文檔初稿,要求可跑的最小用例
- 人工審核:審查關鍵設計、資料結構與錯誤邊界
- 驗證閉環:單元測試 + 端到端用例 + 基準性能
- 上線觀測:日誌/指標/錯誤聚類,持續回饋以改進規格與提示詞