貫徹單點真理,打造KISS項目 開發心得分享

jopen 9年前發布 | 60K 次閱讀 項目管理

零、 編程的核心困難的是什么?

復雜。編程是很復雜的工作,以至于作為一門工科顯得很不嚴謹,只要運作不出問題就當做沒問題。編程最核心的技巧是抽象和間接。

抽象是簡化核心問題的功夫。為什么要抽象?主要原因是一方面代碼是寫給人看的,要符合語義;另一方面,人在一個層次上能同時處理的概念通常只有7,抽象恰恰就是在為這種符合人性的需求,對問題規模進行切割。抽象能夠帶來間接,間接能夠隔離變化,間接能夠控制依賴方向,間接能夠提供擴展性等等的項目需求。

抽象要我們對已有的業務概念進行裁剪,做減法,需要我們加深理解業務;間接需要我們為項目增加能力,做加法,需要我們有一定的想象力。

一、 要去理解業務,業務理解深刻了,那么邏輯自然就清晰了,寫框架不完全是技術問題

如果你之前從頭到尾做過一款有一定規模的游戲,那么下一次再寫就會很漂亮。就像單詞背多了,英語句子總能看得懂。游戲框架,需要你對寫過大量游戲進行共性提煉。舉個例子,你很容易發現數據與顯示分離的好處,并且設計出MVC模式。

二、 堅持單點整理,把真理自動推導到系統每一處

如同幾何一樣,我們可以定義最基礎的公理,推論出一系列的有用的推理。這需要不懈的努力才能做到,其中一個編程中給力的工具就是元編程。它能夠把這些變量推導到系統的每一處。比如你定義了一系列xml數據格式,那么每添加一份xml就不應該寫具體的parser以及定義結構體,應該能夠做到在業務中直接使用這些數據,parser過程自動化。比如UI拖了一個按鈕,那么業務也不用寫一行xx = getButton(“xx”),而是應該直接用,獲取按鈕的過程自動化。比如定義了網絡協議,那么封包的過程自動化。比如美術給了新的圖片,應該命名與策劃定義id一致,程序只管按照約定讀取,不用知道有新的圖片,不用配置一個id。把所有的中間環節砍掉,代碼量、工作量都會少很多,這些工作往往復復,會乘很多倍,在時間上積累起來一定是個數字,最糟糕的是,前期沒有把框架做好,那么業務的技術負債就會越來越深。語義的另一個方面就是代碼寫下來就是完備的,比如寫了創建,那么通常都要寫刪除,先把系統考慮成能夠獨立存在的,那么自然就少依賴,少bug。

三、 重新思考面向對象

先把一個觀點放在這里,強類型語言(C++、Java)的面向對象都是不完整的,或者說那根本就不是面向對象。指著他們說面向對象不行就像指著太監說天下的男人不行。真正能玩耍面向對象的語言應該是動態語言,鴨子類型讓我們不需要折騰繼承這套玩法來進行多態。在靜態語言中,繼承職責有兩個,一個是復用,一個多態。繼承應該只用來復用,而不應該做多態(這就是C++多繼承邪惡的地方)。

從歷史的角度來看,面向對象是好東西,它帶來的變化如同過去代碼的結構化編程一樣:取消goto語句,用順序、循環、分支替代,從而讓代碼統一易讀。而面向對象則是對數據的結構化編程,讓數據更加抽象,讓大家操作數據的時候不用關心數據有什么字段,而且對象的思路也能幫助我們進行抽象,提升代碼抽象層次,而且還讓我們更容易進行思考。

四、 提前構建好,勝于等待需求沖擊。有些東西易放難收,前期就把抽象做起來

殺雞用牛刀是沒問題的。對于全局性的接口,要一開始就把接口打磨干凈,信息傳遞完整,把簡單的完整的信息留給用戶。如果項目中擴散著各種因為這個接口導致的臟代碼,想在后面再收,那就很痛苦了。一些東西確實需要提前想清楚。比如熱更新的支持、性能指標、UI系統等等。

五、 分層模式是最好的架構,每個層面實實在在地解決一些實際問題

分層的優點在于,依賴方向得到最好的控制,而且代碼復用高、耦合低。每個層次有自己的核心問題,比如引擎這一層就是做一些業務無關的功能,比如渲染器、物理引擎。比如框架層就是為業務支撐的,著眼于開發效率。分層架構的另一個好處是增加人手分工也是很容易的事情。

一個好的框架,能讓業務邏輯清晰簡單的表達,讓用戶的每一行代碼都在解決業務問題,而且還能讓業務問題簡化。

六、 訓練編程直覺,訓練自己寫出簡短的符合語義的代碼。每次都把代碼寫好,寫得多了,能夠做到下意識地把代碼寫漂亮。

程序設計就是語言設計 –松本弘田

只知道要符合語義并不夠,還要知道怎么才能做到。把平時的代碼寫好,寫干凈,多閱讀優秀的項目架構,那么開發的時候,自然就會不斷地進行重構,得到漂亮的架構。也許你懂得保護模式就能開發操作系統,但是寫得是否漂亮,能否把它寫好寫大又是另一回事。不斷歸納總結進行高強度練習,時間長了,你很難說清楚為什么要這么寫,但這么寫就是好,而且邏輯清晰,符合語義。就像繪畫大師一樣,畫畫就是好看,但也很難說清楚為什么每個動作,每個因素的變化,都會有不同的行為,如此多的細節,不可能全部都說出來。我們寫程序也是要看著各種因素的變化,隨著需求、性能指標、歷史包袱、人員分工因素等等的不同,會開發出不同的代碼。而不是機械地跟著教條走,新手才這么做。在你不斷地漂亮地、快速地完成需求,自信心也隨之而來,正反饋不斷循環。

來自:http://jjyy.guru/how-kiss-work/

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!