今年,想說的和總結的其實挺多的,但奈何不善寫做,卯足勁才憋出這篇總結(文筆很差,因此文章語言會很生硬且沒有銜接感)。html
對待技術方面,一直以來的觀點是「不要過度執迷技術,應該學習的是技術背後的東西」,但總以爲措詞怪異。直到今年,看到下面阮一峯老師博客裏的這段話,才明白應該這樣去表述。前端
實施細節並非知識,而是操做步驟。若是技術棧發生變動,實施細節就會毫無用處。可是,你又不能不學習它,不知道實施細節,就無法作出項目。我以爲,程序員應該要警戒,不要落入實施細節的陷阱,不要把所有精力花在實施細節上面,而後覺得本身學到了真正的知識。對待各類語言和工具,正確的態度應該是"進得去,出得來",既要了解足夠的細節,也要可以站在宏觀的角度看待它,探尋底層究竟是怎麼實現的。程序員
摘自阮一峯博客《每週分享第 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 的模板文件。還有即是規範化的開發,項目須要考慮語言規範、編碼規範、項目結構規範等等方面,而這些也有利於團隊的開發與維護。
今年算起,入門也大概有六七年頭了吧,如今本身的境遇是涉獵廣但深度不夠,因此計劃明年着重研究大數據計算方面。同時,但願明年 ACM 比賽能有個好成績,不會像今年同樣只是去走個過場。還有,繼續練好本身的寫做水平。