隨筆 | 讀《寫給年輕程序員的思考書》ii

一名技術人員的能力高低,不只僅在於編程,更多的是一種思惟,越接觸上層的技術與底層的原理,越是如此。固然,做爲咱們如今所處的位置,確定要踏踏實實地擼代碼,不要去過多思考高屋建瓴的東西。熟能生巧,手感熱了,思惟天然慢慢地成熟起來。到後面,語言僅僅只是一門工具。前端

從一個Web站點提及

書的做者本身編寫了一個分享學習編程和設計資源的小網站——技匠社(jijiangshe.com) 我以爲這個網站自己就很不錯,提供的資源也有益於我的學習交流。 那麼這個網站是如何開發出來的呢?不一樣架構師確定都有不同的方案,正如一千我的眼中有一千個哈姆萊特。可是,不管使用何種技術,如下幾個基本流程是不會變的。程序員

  1. 網站定位與功能設定 1.1 你但願的你網站作什麼? 網站或者App不管大小,首先應該很是明確這一點。面對的人羣是誰,須要給他們帶來什麼他們所須要的服務。舉一個例子,我和朋友即將上線的App 「果核」是一款面向本校大學生的校園學習生活服務類應用。 1.2 但願設定哪些功能? 圍繞「校園學習生活服務」這個核心,咱們分了幾個板塊:校園應用(課表/績點/館藏/俱樂部/校車/空教室);每日推薦(首頁/此刻/彼時/星座/地氣);小工具(待辦便籤/吃啥/分貝計/翻譯/查快遞等);論壇(開發中);健康管理(開發中)angularjs

  2. 信息架構(概要設計/業務建模) 這個難度就比較高了,須要必定的經驗與思惟力度,對不一樣緯度和粒度的信息進行抽象,規劃,設計,從而支撐起整個網站的信息體系。這就是架構師乾的活,若是達到了這個階段,已經步入高手的行列了。web

"我經歷過不少不一樣的信息架構方法論,從最初基於模塊的設計,到後來的領域驅動設計(DDD),面向服務的設計(SOA),Oracle的基於數據建模驅動的設計,再到最新的微服務架構設計,等等。我想說,這些方法論大可能是針對那些大規模應用而言的,你須要瞭解他們,並有意識地在你的系統設計中去匹配這些優秀的架構和設計思想,這有利於你作出拓展性良好的系統,從而避免了因整個系統複雜度的提高而致使大規模重構的風險。"spring

對照技匠社這個網站來看,須要定義三個實體類:User(用戶),Resource(資源),Feedback(反饋)。 圍繞這三個模塊,再定義出三個服務:UserService,ResourceService,FeedbackService。 接着再爲這三個服務設計須要用到的方法。shell

  1. UI設計 對於資金充裕的項目,須要由專業設計師來操刀。再不濟也須要專業的前端設計和美工,然而不少小型項目,因爲***沒有錢***,不少時候甚至由後臺程序員來憑感受畫一畫(好比「果核」)。因此有空時,學一點設計,或者不須要刻意去學,多去領會一些美,品味天然會提高一些,這在我看來是頗有必要的。 實際狀況是,不少網站開發都會套用開源的模板,這樣能夠避免重複造輪子,更爲便捷溫馨。可是使用模板也有他的缺點,大體分爲如下幾點:數據庫

    • 畢竟是別人的東西,對其思路不熟悉,在拓展時每每牽一髮而動全身。
    • 模板包含了大量的對手頭項目來講多餘的和沒必要要的東西,這須要咱們花時間去當心地剔除。
    • 模板自己存在缺陷,須要咱們修復。
    • 在拓展新界面時,須要考慮和原模板的搭配,再次設計。
  2. 前端開發 就針對技匠社這個網站而言。 目前最流行的前端框架是AngularJS和React。在這個項目中選擇的是AngularJS,有如下兩個方面的緣由:編程

    • 我須要的是一個更完整的JS框架,AngularJS能知足我在全面性方面的要求,可使用它構建一個完整的Web應用。
    • 我但願在未來用Ionic寫一個App,因爲Ionic也是基於AngularJS的,這意味着,我未來能夠複用不少代碼。
  3. 後臺開發 SpringBoot:開發基於REST的服務。 MyBatis:提供基於SQL的持久層支持。 Redis:持久化用戶的Session信息。 SpringSecurity:提供安全方面的支持。 MySQL:使用傳統的關係型數據庫。 Maven:項目的包依賴管理,以及項目打包。安全

Spring Boot並非Spring的一個升級版本,而是一個爲構建微服務提供更好支持的全新框架。他是一個可以提供良好拓展性的框架,在初期能夠將全部的功能做爲一個總體對外服務,隨着用戶量的上升和系統規模的不斷擴大,能夠藉助Spring Boot,並基於Domain Driven Design的設計思想將系統的的服務進行拆分,構建出一系列微服務。前端框架

  1. 部署+運維 對於這塊這塊不是很瞭解,不過至少須要會用Linux+Tomcat/Jetty+Apache+Nginx

以上基本就是一名全棧工程師可以作的事情。

技能樹

  1. 逐漸接觸使用命令行
  • 在最初學習編程的時候,每一門語言都有集成了編譯器的IDE,這些集成開發環境十分方便,每每只要在圖形化街面上點擊一個按鈕,就能完成一系列複雜的操做。這會讓人以爲,這是瓜熟蒂落的事。而如今的不少工具,都在往簡約高效方向發展,有的甚至沒有圖形化界面。
  • 打個比方,就像在玩CS這款遊戲的時候,能夠調取菜單,而後經過點擊按鈕來購買裝備,這彷佛並不繁瑣。可是假如你想訓練本身的閃光彈投擲技巧,須要購買無限的閃光彈,並在閃光彈投出以及碰撞的時候留下可見的拋物線,那經過菜單點擊操做就十分繁瑣了,不少玩家每每直接調出控制檯,輸入指令來完成這些操做。
  • 這和使用命令行來控制你的操做系統有殊途同歸之處。命令行在一些環境下能夠提升工做效率。固然並不支持徹底拋棄圖形化界面。

"之前,我在啓動一套本地的開發環境時,老是須要手工地一個個去單擊那些服務,逐一啓動web服務器,數據庫服務器,打開IDE等等。這看起來每次只須要花費2-3分鐘的時間,但這是天天天天都須要進行的操做,並且因爲調試須要,一天以內須要重複啓動好幾回。一個月下來,我光在啓動環境的時間就花費了2-3個小時。後來,我便學着寫了一個shell腳本,其實很是簡單,就是按照順序去啓動服務的命令,這樣我只要單擊那個腳本,整個環境就搭建好了。所以,我常常鼓勵身邊的程序員去寫自動化腳本,讓本身從重複性的工做中解脫出來。"

  • 使用Git命令行來進行版本控制
  1. 代碼重構 封存,之後再寫。

  2. 規範代碼

  • 封裝/繼承/多態使代碼更簡潔,可複用率高
  • 儘可能規範代碼的書寫,尤爲不要使用中文以及儘可能不要使用pinyin。
  • 常寫註釋
  • 多考慮異常捕獲狀況
  • 等等

暫時就寫到這,這本書總體仍是不錯的,可是仍是有點偏雞湯型,這種類型的書現階段而言只需讀一兩本就夠了,把握一下方向,更多仍是須要去踐行。

公衆號:果核裏的圖靈
相關文章
相關標籤/搜索