2019-03-02
關於錯誤。我們曾經犯過不少錯誤。程式設計相關的決策錯誤大抵是不會導致軟體專案失敗的,特別是在當前這種網際網路公司持續運營專案的模式下,多數程式在服務端服務端執行。軟體開發團隊會持續的迭代專案。每次交付的內容也是階段性成果,對外交付的是服務。不像二三十年前,軟體交付並分發出去之後,迭代改進只能等到下個版本了。所以,對於我們軟體開發者的壓力也小了些。但是,對於需要對外交付的軟體,則需要格外小心。
關於ui lib的選擇,不要選擇mfc或者c#的winform或者wpf,或者其他小眾的ui lib。最好需要qt。因為,偏工業軟體並不需要在ui 顯示效果上有很高的要求,即使是maya,2023年之後也是採用qt技術實現ui的。使用者最在意的是軟體的核心功能,炫酷的樣式或者互動只是錦上添花。
對於,模組之間介面暴露程度。越是偏上層,越沒有必要隱藏模組內的資料結構。需要隱藏的東西最好設定protected或者impl 實現。對外提供指標,而非id或者某種handle。之前吃過這個虧,非常大的虧。我從最開始時便反對這種方案,奈何沒有作用,用handle代替指標給後續兩年的開發過程帶來非常多的bug。所謂的解耦,並不是把自己的模組隱藏起來,解耦的目的也不是為了將來有一天重新實現某模組,並替換掉老的模組。這不現實。解耦,是為了在後續開發過程中,發現某模組內設計不合理,能以很小的代價進行修改,對其他模組的影響也能盡量的少。
對於,c++版本以及 std、boost是否選用問題。我覺得,對於新創專案,還是盡量選擇新版本c++以及 std、boost,它們的質量比我寫的*****太多了。須知,編譯器也是有bug的。之前專案中,我幫助發現了乙個由vc12 foreach 語法糖導致的bug。而且,對於這種偏上層**,我們不需要擔心其他開發團隊依賴於本專案的問題。lib帶來的依賴衝突問題基本上不需要考慮。
對於,指令碼嵌入,最好選用python。lua真的不適合cad/cam專案。雖然lua語言本身小巧,容易操縱,但lua語言本身的表達能力偏弱,使用者較少,第三方lib的廣泛性以及成熟程度都不及python。我們在之前的專案就犯過這個錯誤。
對於第三方lib的選擇,非核心演算法模組,或者將來自己的程式肯定會修改實現方式的功能,如果有第三方lib,就盡量使用。最大的原因在於自己寫的**,非常有可能在質量上比不過經過錘煉的第三方lib。所謂的學習成本,還是很低的。並且,乙個人的學習,可以形成文件,第二個人完善文件,之後其他人的學習成本就會低很多。
對於各種方便的、取巧的方法,如使用全域性變數,需要保持警惕。須知,nothing comes for free。使用起來簡單,但是,用多了,就會導致忽略模型正確的class 層次關係,對重構模組或者專案帶來很大的難題。不要為了避免重複構造關鍵物件而使用單例模式(基本上單例與全域性變數總是一起出現)。不要過分擔心軟體設計裡面的問題,還沒有遇到耦合問題,就考慮對各模組解耦;還沒有遇到效能問題,就考慮優化而對模型層次關係做出修改 ,這些做法都矯枉過正了。
關於自動化測試,cad/cam軟體一般難以進行自動化測試,因為對於二三維視窗的業務操作,很難錄製指令碼。而且,由於操作互動變化較多,即使實現了指令碼錄製的方案,錄製的指令碼有效期也不會持久。這都導致自動化測試工作難以開展。我們可以利用內建的指令碼語言,對於主流程做簡單的測試,避免錄製互動操作,而是使用指令碼替代完成,讓指令碼直接呼叫內部介面。這便要求各個模組盡可能多的暴露介面給指令碼模組。
在詳細設計階段,一定要做好uml圖。並且需要專人負責持續修改。讓團隊成員對於專案的整體架構保持熟悉。強調一點,《道德經》有言」無名天地之始,有名萬物之母「。對於命名,擁有決策權的各組長一定要控制好。盡量避免縮寫,避免***manager這樣的模糊不清的表述,避免歧義。
p.s. 2018四月份開始寫的東西,到現在才寫完,真費勁。可能行文很雜亂吧,本來也不是一次成文,從筆記裡面提煉出來的總結而已。
comments
國內外著名CAD CAM雕刻軟體介紹
目前國內常用的cnc雕刻軟體平面雕刻 陰雕 陽雕 的話基本就用文泰和type3,3d雕刻的話基本用北京精雕和artcam 2018年7月7日autodesk公司宣布停止此產品的更新 下面就個人意見分分享下個人使用感受!這裡值得一提的是,有個慨念要分清楚,三維雕刻和浮雕是兩碼事 用個3d錐刀走一圈平面...
軟體架構設計系列總結
出處 架構引用 維基百科 軟體體系結構是構建 計算機軟體 實踐的基礎。與建築師設定建築專案的設計原則和目標,作為繪圖員畫圖的基礎一樣,乙個 軟體架構師 或者系統架構師 陳述軟體構架以作為滿足不同客戶需求的實際系統設計方案的基礎。從和目的 主題 材料和結構的聯絡上來說,軟體架構可以和建築物的 架構相比...
軟體架構師工作內容總結
架構師的職責及工作描述 系統分析員屬於analyst角色組合,與其相比,架構師則是屬於developer 角色組裡的乙個角色,乙個非常重要的角色。負責在整個專案中對技術活動和工件進行領導和協調。構架設計師要確立每個構架檢視的整體結構 檢視的詳細組織結構 元素的分組以及這些主要分組之間的介面。因此,與...