2018 年終總結


前言

今年,想說的和總結的其實挺多的,但奈何不善寫作,卯足勁才憋出這篇總結(文筆不好,所以文章語言會很生硬且沒有銜接感)。

對待技術

對待技術方面,一直以來的觀點是“不要過分執迷技術,應該學習的是技術背后的東西”,但總覺得措詞怪異。直到今年,看到下面阮一峰老師博客里的這段話,才明白應該這樣去表述。

實施細節並不是知識,而是操作步驟。如果技術棧發生變更,實施細節就會毫無用處。但是,你又不能不學習它,不知道實施細節,就沒法做出項目。我覺得,程序員應該要警惕,不要落入實施細節的陷阱,不要把全部精力花在實施細節上面,然后以為自己學到了真正的知識。對待各種語言和工具,正確的態度應該是"進得去,出得來",既要了解足夠的細節,也要能夠站在宏觀的角度看待它,探尋底層到底是怎么實現的。

摘自阮一峰博客《每周分享第 28 期》

總而言之,就是要以宏觀角度來看待實施細節,才能學到真正的知識。下文闡述的內容,是今年的經歷、想法與思考,這些讓我對這個觀點有了更深刻地感觸。

從項目經驗中“掘金”

今年暑假留在了學校,導師布置了個項目,並充當提出需求的客戶和前期設計的分析師,團隊四個人參與整個項目的生命周期。由於沒有經驗及技術不成熟,整個過程是邊學習摸索着邊推進。但暑期結束了也沒大進展,因而項目只能被擱置了。不過從此次經歷中學習到了很多知識,同時也總結了項目推進失敗的教訓。

轉變開發方式

項目開始前,導師給我們講述許多關於軟件開發的問題,其中提到了“基於領域驅動”的軟件設計模式。同以往課設項目圍繞着“數據庫”進行開發不同,基於領域驅動的開發注重領域的知識,領域模型更加符合自然系統,而圍繞數據庫開發只會將重心偏移到數據的設計和處理。

可惜的是,早先沒有基於領域驅動開發軟件的經驗,以至於暑假項目上的前期分析還是以往的方式。下半年拜讀《領域驅動設計》后,對軟件開發方式有了不同理解與體會,同時也將該開發方式應用在一門課設上。

項目失敗的教訓

此次項目失敗有技術原因也有工程上的問題,但主要還是敗在工程問題上。

在項目架構選擇上,犯了很大的錯誤,選擇過於激進的微服務架構。由於項目的復雜程度,還不至於使用該架構,導致對項目的划分粒度過細,就像是為了微服務而微服務。而且這導致了維護成本變高,由於划分過細,修改一處就得重新改寫其它關聯的部分,當然這也與前期設計不當脫不了關系。最后,由於種種問題放棄了還不熟悉的微服務架構,轉而使用傳統的單塊架構。

此次項目,采用了前后端分離的開發方式,但前后端測試成了問題。最開始使用原始的手工測試,測試非常耗時間,而且有時候難以判斷錯誤發生在哪一端。於是,后來采用了替身測試,前端使用 Mock.js 框架模擬接收到的數據,而后端使用 JUnit 框架模擬發送的請求。雖然解決了前后端測試問題,但開發中接口的統一,就只能靠傳遞定義接口文檔實現。

框架的優秀思想

這個項目的后端用到了 Spring 框架,前端用到 Vue.js 框架,這兩個框架都十分優秀且其設計思想耐人尋味。

模塊解耦

首先,非常欣賞 Spring 框架解決軟件復雜性的思想,而且讓我了解到原來模塊可以這么解耦。

Spring 框架通過依賴注入來解決模塊間高耦合的問題,框架負責代碼模塊的依賴,就像是代碼模塊的粘合劑。且其低侵入的特性,使得編寫代碼時基本無需考慮框架的存在。

數據驅動視圖

大一也曾接觸過 Vue.js 框架,老師讓我用其做個登錄演示頁面,於是花了兩天閱讀了官方文檔,草草做了個演示。當時只覺得其寫法很奇怪及別扭,並沒有過多的思考。

上半年做 Oracle 數據庫課設時,用手動修改 DOM 來實現視圖變化,但當項目變得復雜時,代碼也會變得非常難維護。而 Vue.js 框架的優秀之處在於,讓數據驅動視圖的變化,從而不需要手動修改 DOM ,降低了數據與視圖關聯的復雜性。

重新接觸前端

由於項目需要,又重新接觸了前端。雖然清楚前端這幾年發展迅速,但當真正接觸時,更是驚嘆其巨大變化。

學習成本變高

現在編寫前端工程,不僅需要掌握最基本的 HTML 標記語言、CSS 樣式表和 JavaScript 腳本語言,還得搭建 Node.js 環境及會使用依賴包管理工具 NPM,同時會配置使用例如 Webpack 之類的構建工具。

掌握了上面這些,還得學習一個熱門的框架,例如我使用的 Vue.js 還有基於此的前端界面庫 ElementUI 。學習這些內容的成本是很高的,而且上面提到內容,還只是整個“大前端”的冰山一角。

前端工程化

前端的學習成本隨着其發展不斷增加,而前端發展的同時也使其復雜性增加,於是就有了“前端工程化”一說。前端工程化同軟件工程為了解決軟件復雜性一樣,首要任務是為了解決前端的復雜性。

前端工程化涉及諸多方面的內容,由於篇幅有限,只闡述我認為的核心內容。首先一個是,強調前端工程進行組件化開發,同模塊化用於封裝隔離不同,組件化更強調復用,一個很好的例子便是 Vue.js 的模板文件。還有便是規范化的開發,項目需要考慮語言規范、編碼規范、項目結構規范等等方面,而這些也有利於團隊的開發與維護。

寄望 2019 年

今年算起,入門也大概有六七年頭了吧,現在自己的境遇是涉獵廣但深度不夠,所以計划明年着重研究大數據計算方面。同時,希望明年 ACM 比賽能有個好成績,不會像今年一樣只是去走個過場。還有,繼續練好自己的寫作水平。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM