我做軟體開發的核心思想考量

琴水玉發表於2024-06-23

要持續提煉思想和方法論的核心。

做一件事,就是持續不懈地追求道領悟道的過程,是要堅持持續不懈地去提煉思想和方法論的。

之前,我寫過幾篇文章,比如 "軟體開發:組織大規模邏輯的技藝""軟體開發之道:結構化技藝""談談程式設計師應當具備的技術思維"。這些文章匯聚和提煉了我十年來的最重要的軟體開發經驗和領悟,使我在軟體開發活動中有據可依、有章可循、做事有分寸有尺度。

那麼,當我重新回顧自己的軟體開發活動時,有哪些思想在我的工作中起著提綱挈領、舉足重輕的核心地位呢?

簡潔清晰至上

越來越喜歡追求簡潔清晰。

簡潔清晰的首要是語義清晰,絕不含糊。寫程式碼以語義為導向,而不是以技巧為導向。主流程要足夠清晰,步驟明確。每一步採用什麼手段來構建,很容易理解。

例子:

  • 命名要貼切,儘可能表達出意圖和業務語義。
  • 用字串表示列舉,而不是用數字代號【除非有排序要求】;
  • 狀態和行為要分開,比如不要用隔離動作來表達已隔離的狀態;
  • 盡力避免拐彎抹角的表達和實現。
  • 努力做到程式碼自解釋。

這仍然是我努力在持續追求的目標。

寫出健壯可靠的程式碼

有人奔著學習屠龍之術而去,而我只想寫出健壯可靠的程式碼。

程式碼即修行。寫出一次好程式碼,就是一次修行。程式碼是程式設計師技能品格的最佳證明。只有對程式碼精敲細作,才能寫出牢固可靠、值得信賴的程式碼。

健壯性和必要的日誌資訊是最基本的要求。其次是效能和穩定性,然後是可複用性、可擴充套件性、可配置性。最後,安全性是最不可忽視的程式碼質量屬性。而可維護性,則是改動成本的衡量尺度,是一個綜合的程式碼評價。

要寫出好程式碼,需要相當豐富的知識,一次次的實戰磨鍊, 還需要持續不斷地做程式碼重構。在程式碼重構中持續提升程式設計技藝。

不過,我現在並不推崇過度高質量程式碼了,要求:能用、健壯、容易排查問題、效能過關。人生還有很多珍貴的事物值得追求。不必要把全部精力都投入在程式碼上。

系統設計觀

在一定程度上能夠寫出好程式碼之後,就需要培養系統設計觀,具備 Build System 的能力。

系統設計,需要從系統整體上審視系統,系統的模組、元件及關聯關係,系統模組、元件的聯動,從框架層面上保證系統的可靠而高效的構建。複雜系統,往往有複雜的聯動關係,如果不從系統整體上綜觀,作出有效的權衡取捨,就可能像蹺蹺板一樣,這裡解決了BUG,那裡又出錯了。剪不斷理還亂。

系統整體主要包括:系統的基礎設施;系統的模組設計及技術方案;系統模組的關聯設計;系統可用工具箱;系統的監控預警等。

培養系統設計能力,一個很關鍵的點是模組化和解耦。模組化是指將緊密關聯的元件放在一起,解耦是將有關聯但並不緊密的元件用合理的方式連線(通訊)起來,儘量不受對方變化而影響,減少改動和出錯成本。因此,培養系統設計能力,可以從模組化設計上著手,先努力做出好用的模組,再上升到系統層面。

要做到解耦,則需要做到良好的關注點分離。關注點分離是最基本又最核心的軟體開發思想之一。分離狀態和行為,分離檢視、控制與模型,分離技術設施與業務邏輯,分離意圖不同的邏輯,分離維度不同的實體,分離不變與變化等。

集中管理與一致性

要做到可維護性,集中管理與一致性必不可少。

  • 同一類事物,要放在一個列舉裡;
  • 同一類操作,儘量採用一致的做法;
  • 一致的命名與錯誤處理風格。

一致性的一個重要體現是,避免寫重複程式碼。涉及多段重複程式碼改動時,很容易改漏。

可複用、可擴充套件、可配置化

從顯而易見的層面來看,編寫可複用、可擴充套件、可配置化的程式碼,其目的就是在完成相似需求時,能夠省事省力,提升開發效率,降低開發成本,也是管理者喜聞樂見的;從個人技能層面來看,編寫可複用、可擴充套件、可配置化程式碼,對個人的設計、程式設計能力都有更高的要求,也更能鍛鍊程式設計師的思維能力。可謂是一舉兩得。

要編寫可複用、可擴充套件、可配置化的程式碼:

  • 經常性地提煉公共邏輯、通用邏輯,可以培養可複用的程式設計思維和能力;主要技術手段是泛型+函數語言程式設計。
  • 經常性地思考變化、在做需求的過程中密切關注需求有哪些方向上的變化,思考應對的方法,嘗試去寫一些簡易框架來應對一類相似的需求,可以培養可擴充套件的程式設計思維和能力;主要技術手段是介面+設計模式。
  • 關注可配置化的思路和技術實現,嘗試去做,可以培養可配置化的程式設計思維和能力;主要技術手段是指令碼引擎和規則引擎。

在未來,可複用、可擴充套件程式設計思維是基礎,可配置是軟體開發的方向。低程式碼 + AI ,就是一個明證。

效能與穩定性

鑑於效能和穩定性是很多程式設計師都追求的目標,也是軟體工程所注重的重要指標,這裡就不贅言了。

  • 效能: 大資料量的查詢和更新、大規模的計算;主要技術手段是快取、併發、批次、索引、減少不必要的計算。
  • 穩定性:突發大流量的承載能力;主要技術手段是限流、熔斷、削峰。

小結

簡潔清晰、寫出健壯可靠的程式碼、系統設計觀、集中管理與一致性、可複用可擴充套件可配置化、效能與穩定性的考量,可以說是目前我做軟體開發(僅從技術層面來看)的最核心的考量了。有了這些核心思想的引領,接下來就是技能和方案層面的事情了。

相關文章