一名技術人員的能力高低,不只僅在於編程,更多的是一種思惟,越接觸上層的技術與底層的原理,越是如此。固然,做爲咱們如今所處的位置,確定要踏踏實實地擼代碼,不要去過多思考高屋建瓴的東西。熟能生巧,手感熱了,思惟天然慢慢地成熟起來。到後面,語言僅僅只是一門工具。前端
書的做者本身編寫了一個分享學習編程和設計資源的小網站——技匠社(jijiangshe.com) 我以爲這個網站自己就很不錯,提供的資源也有益於我的學習交流。 那麼這個網站是如何開發出來的呢?不一樣架構師確定都有不同的方案,正如一千我的眼中有一千個哈姆萊特。可是,不管使用何種技術,如下幾個基本流程是不會變的。程序員
網站定位與功能設定 1.1 你但願的你網站作什麼? 網站或者App不管大小,首先應該很是明確這一點。面對的人羣是誰,須要給他們帶來什麼他們所須要的服務。舉一個例子,我和朋友即將上線的App 「果核」是一款面向本校大學生的校園學習生活服務類應用。 1.2 但願設定哪些功能? 圍繞「校園學習生活服務」這個核心,咱們分了幾個板塊:校園應用(課表/績點/館藏/俱樂部/校車/空教室);每日推薦(首頁/此刻/彼時/星座/地氣);小工具(待辦便籤/吃啥/分貝計/翻譯/查快遞等);論壇(開發中);健康管理(開發中)angularjs
信息架構(概要設計/業務建模) 這個難度就比較高了,須要必定的經驗與思惟力度,對不一樣緯度和粒度的信息進行抽象,規劃,設計,從而支撐起整個網站的信息體系。這就是架構師乾的活,若是達到了這個階段,已經步入高手的行列了。web
"我經歷過不少不一樣的信息架構方法論,從最初基於模塊的設計,到後來的領域驅動設計(DDD),面向服務的設計(SOA),Oracle的基於數據建模驅動的設計,再到最新的微服務架構設計,等等。我想說,這些方法論大可能是針對那些大規模應用而言的,你須要瞭解他們,並有意識地在你的系統設計中去匹配這些優秀的架構和設計思想,這有利於你作出拓展性良好的系統,從而避免了因整個系統複雜度的提高而致使大規模重構的風險。"spring
對照技匠社這個網站來看,須要定義三個實體類:User(用戶),Resource(資源),Feedback(反饋)。 圍繞這三個模塊,再定義出三個服務:UserService,ResourceService,FeedbackService。 接着再爲這三個服務設計須要用到的方法。shell
UI設計 對於資金充裕的項目,須要由專業設計師來操刀。再不濟也須要專業的前端設計和美工,然而不少小型項目,因爲***沒有錢***,不少時候甚至由後臺程序員來憑感受畫一畫(好比「果核」)。因此有空時,學一點設計,或者不須要刻意去學,多去領會一些美,品味天然會提高一些,這在我看來是頗有必要的。 實際狀況是,不少網站開發都會套用開源的模板,這樣能夠避免重複造輪子,更爲便捷溫馨。可是使用模板也有他的缺點,大體分爲如下幾點:數據庫
前端開發 就針對技匠社這個網站而言。 目前最流行的前端框架是AngularJS和React。在這個項目中選擇的是AngularJS,有如下兩個方面的緣由:編程
後臺開發 SpringBoot:開發基於REST的服務。 MyBatis:提供基於SQL的持久層支持。 Redis:持久化用戶的Session信息。 SpringSecurity:提供安全方面的支持。 MySQL:使用傳統的關係型數據庫。 Maven:項目的包依賴管理,以及項目打包。安全
Spring Boot並非Spring的一個升級版本,而是一個爲構建微服務提供更好支持的全新框架。他是一個可以提供良好拓展性的框架,在初期能夠將全部的功能做爲一個總體對外服務,隨着用戶量的上升和系統規模的不斷擴大,能夠藉助Spring Boot,並基於Domain Driven Design的設計思想將系統的的服務進行拆分,構建出一系列微服務。前端框架
"之前,我在啓動一套本地的開發環境時,老是須要手工地一個個去單擊那些服務,逐一啓動web服務器,數據庫服務器,打開IDE等等。這看起來每次只須要花費2-3分鐘的時間,但這是天天天天都須要進行的操做,並且因爲調試須要,一天以內須要重複啓動好幾回。一個月下來,我光在啓動環境的時間就花費了2-3個小時。後來,我便學着寫了一個shell腳本,其實很是簡單,就是按照順序去啓動服務的命令,這樣我只要單擊那個腳本,整個環境就搭建好了。所以,我常常鼓勵身邊的程序員去寫自動化腳本,讓本身從重複性的工做中解脫出來。"
代碼重構 封存,之後再寫。
規範代碼
暫時就寫到這,這本書總體仍是不錯的,可是仍是有點偏雞湯型,這種類型的書現階段而言只需讀一兩本就夠了,把握一下方向,更多仍是須要去踐行。