1. 程式人生 > >易學筆記--十年碼農的程式路(交流請微信或qq1776565180)

易學筆記--十年碼農的程式路(交流請微信或qq1776565180)

   

  • 先自我嘲笑一番

  1. 本人程式猿一枚,十年IT工作經驗,現在在某大型企業任高階系統工程師,目前主要負責公司新技術選型、新架構的落地實現以及新技術的培訓推廣工作,當然少不了專案管理以及培養新人的任務。
  2. 工作前3年(原始碼農):十年前大學本科學的是計算機,畢業後老老實實地當了一名程式猿,也就是最底層的碼農了。當時本人是負責某金融系統的開發,後端開發語言採用C語言,前端開發語言採用Java/PHP/JSP/Servlets,有專門的系統設計師寫好了概要設計,俺只負責寫程式碼實現文件的設計邏輯即可(也就是搬磚了)。這個階段稱為“原始碼農”階段。
  3. 工作4到6年(進化碼農):碼了幾年程式碼後,積累了一定的經驗,我暗自努力朝著更高層次發展。第一個小目標是朝著需求、設計等編寫文件方向突進,這個階段做的事情不再是自己一個人的活了,一方面是需求文件要跟需求方不斷切磋和確認(說白了就是打嘴仗和討價還價,但這也是一門技術活);另一方面技術文件要更跟開發人員講解和解釋,讓開發明白我自己要表達的意思,更重要的是程式碼落地時要真正是按自己原本設計的那樣實現的。注意:這階段我還是在寫程式碼的,不過是站著高一點、考慮的全一點、兼顧的多一點而已。這個階段稱為“進化碼農”階段
  4. 工作7年到現在(全棧碼農):猶記得2013年左右移動網際網路爆發,這得益於移動智慧手機的出現,同時在國家指導的“網際網路+”思想下,各行各業都爭先恐後地把自己的應用搬上移動網際網路。作為碼農的我當然也要跟著上潮流,順理成章轉向移動網際網路,搭建公司的移動應用平臺和負責移動APP和微信公眾號的開發工作。移動網際網路帶來流量的同時也帶來了資料的暴漲,大資料處理技術要跟著上。碼農就是這樣,需求在就要想方法解決,所以我又“有幸”地“跳坑 ”到大資料領域。在2015年左右,微服務技術在網際網路下又被“催熟”了,接著容器技術也跟著火了起來,還有“網紅”區塊鏈技術,當然少不了AI人工智慧。這個階段稱為“全棧碼農 ”階段,“全棧 ”就是“全棧工程師”那個“全棧 ”,也就是什麼都要懂,真是一個技術一個“坑 ”。
  • 程式猿踩過的十個最典型的坑

  1. 遇到問題只會百度:百度是大多數碼農解決問題的唯一途徑(當然之前還有coogle),百度很多時候確實能幫的上大忙,但是有時也無能為力。這是因為百度中答案只是隻言片語,沒有前因後果,答案對應的問題可能和你的問題發生的背景不一樣,所以很多時候還是要靠猜的。就算有段完整的程式碼讓你拷貝過來,結果編譯時一大堆錯誤,這個坑相信很多人都遇過
  2. 天天重複複製貼上:複製黏貼是個好東西,看怎麼用而已,濫用的結果就是一大堆重複的程式碼。有專案或者新功能要開發,不管三七二十一,先把原來似曾相識的程式碼複製過來再慢慢修改,這就是不懂得抽象和不懂得總結的結果,這個坑在“原始碼農”階段尤其突出。
  3. 沒時間學習新東西:能正常上下班的碼農不是真正的碼農,每天都忙於專案開發,哪有時間接觸新的東西,能按時交專案就不錯了。對,老闆也是這個意思,老闆只需要結果,不需要過程,更加不管你用什麼技術實現的。長年累月下去,碼農自己能掌握的技術就是專案中所涉及的技術了,而且是自己負責的那一部分,這樣的結果就是知識固化,只會打理自己的“一畝三分地 ”
  4. 技術更新快跟不上:這個在技術界是非常普遍的現象,當你用struct的時候,springMVC出現了;當你用springMVC的時候,springBoot出現了;當你用springBoot的時候,springCloud出現了。軟體開發這個行業和醫生、律師或者教師行業完全不一樣,後者是知識體系相對穩定,個人是否優異只在於經驗的豐富程度,而軟體行業的知識體系變化很快,想只掌握其中一門技術長久混下去似乎是不太可能的
  5. 懶於編寫文件總結:這個是非常多碼農的通病,寧願碼一萬行程式碼,也不願意寫一百個字文件。學過軟體工程的人都知道,軟體開發的生命週期是先有設計文件後才編寫程式碼的,這裡面的原因就是文字和程式碼表現形式 不一樣,文字可通過多種方式表達意思以及容易修改,而程式碼具有特定的語法以及不容易修改,一旦完成的程式碼想重頭再來那是非常困難的事情。文件對專案的總結和跟蹤是非常重要的,要用文件來指導程式碼開發,但這恰恰是非常多程式猿忽略的一個重要環節。
  6. 沒自己的知識體系:由於沒有總結和歸類的習慣,一個專案完成後除了程式碼還是程式碼,這肯定形成不了自己的知識體系。知識體系指的是巨集觀方面對技術的把控和認識程度,而程式碼只是微觀方面技術實現手段而已。“大資料”這三個字連樓下賣早餐的阿姨都知道,但是對它能說出個所以然就要靠自己的大資料理解的知識體系了。
  7. 遇個問題折騰半天:這個坑是最浪費時間和影響效率的,尤其對微小創業型公司非常致命。一個小問題對於有經驗善於總結的程式猿來說是3分鐘就能解決的事情,但是對新手來說或者是沒有總結習慣的老手來說那可能就是半天或者兩三天的大問題,特別對一個團隊而言,如果每個人都為這種那種小問題折騰,這個效率可想而知。假如一個程式猿五百塊成本一天,浪費二天就是一千塊,一個月遇到三次這種情況就是三千塊,再假如團隊中十個人這種情況,那成本就是三萬了。這看似是小問題,實際上是關乎公司存亡的大問題
  8. 看書只看到第一頁:不可否認程式猿是非常努力的一個群體,買書學習是必不可少的,某天心血來潮買了一本新的技術書,蠻有信心地要大幹一場,結果書是買回來了,由於各種原因(地表最強理由就是我很忙半年過去了書還是停留在第一頁,不僅僅是浪費了錢,也是浪費了書的作者的一番用苦良心。
  9. 理論太多看不下去:有些書籍偏理論,有些書籍偏實踐,選書也是一種技術活。某些書說了一大堆理論讓你知道很多高大上的概念,但是最後依然無從下手,應了那句話“道理懂了一大堆,依然過不好這一生”。技術是要落地才能實現其價值的,特別是對於程式猿而言,無法落地的書籍本人一般不看,執行程式碼一遍勝過千言萬語,只有經過自己手除錯的程式碼才算是自己的,因為這樣印象才會深刻。
  10. 入個門怎麼這麼難:憑著程式猿高智商的頭腦,如果一心一意想學某個技術確實不會是太難的事情。但是現實中,很多事情可能會打斷你的計劃,比如趕專案、折騰死人的BUG 、陪老闆開會、陪業務測試、系統出故障等等,這些事情會偷偷地浪費了你的時間,回到家只想睡覺或者刷微信,最後看書的事情就無奈地被拋開了。
  • 針對這些坑,我想用“易學筆記 ”去解決

  1. “易學筆記 ”是我最近兩年在工作之餘通過以筆記的形式記錄各個領域的知識,從而搭建起來的知識體系。“易學筆記 ”以各個技術領域為單元,每個單元詳細介紹各個知識點,讓讀者按著知識點由淺到深學習,強調程式碼的落地實現,結合少量的理論知識幫助理解。
  2. “易"的體現-->技術點以標題為導向與絕大多數的書籍不一樣,易學筆記以標題為導向,每一個標題就是一個知識點,讓讀者從標題中就定位想要的內容,而不需要再慢慢看內容去查詢。在實際開發中往往是很具體的某個點的問題,這就需要快速方便地定位答案,而且不要受其它無關的干擾 。比如在python教程中“第4章:介紹python物件型別/4.1 python的核心資料型別/4.2 字串/4.2.1 獲取操作” 和“第4章:介紹python物件型別/4.1 python的核心資料型別/4.2 字串/4.2.2 字串合併和重複操作”,從標題很容易看出,前者是對字串的獲取操作,而後者是對字串重複多次操作。
  3. “易"的體現-->超連結關聯技術點與絕大多數的書籍不一樣,易學筆記在某一個筆記中如果用到了其它筆記的某個技術點,則把該技術點的筆記連結黏貼到本筆記。比如在Maven教程中:“第9章:使用Nexus建立私服/9.6 部署構件到Nexus/9.6.1 使用Maven部署構件到Nexus”說明如何將本地Jar包上傳到私有倉庫的,在其它筆記多次引用本筆記進行構建上傳說明。這樣做有幾個好處:
    1. 讓讀者方便地找到關聯的技術點
    2. 讓讀者減少閱讀重複內容,只需弄懂一個筆記即可,就好像程式碼中的公共方法一樣,只在一個地方宣告多個地方引用
  4. “易"的體現-->主題歸類:易學筆記主導同一個主題的內容應該歸類在一起,一來是方便閱讀,二來是讓讀者儘量全面掌握該主題內容,三來讓讀者“知根知底 ”(這個主題的內容就全部在這裡了)
  5. “易"的體現-->強調先後:易學筆記主導先鋪墊後展開的思路,比如先環境安裝、概念說明,再到後面的程式碼執行、概念運用等
  6. “易"的體現-->大白話概念說明:這個是從人的認知上說的,遵守先告訴讀者這個是什麼,然後再告訴讀者怎麼用。比如,對於Java Bean的概念,很多書籍都沒說清楚,一來就說Java Bean怎麼用,讓很多讀者不知所措
  7. “易"的體現--> 大量例項本人一直推崇程式碼一定要落地,所以在“易學筆記”中會給出大量的例項,而且例項就在當前標題下,直接點選即可下載,裡面的例項都是經過我本人執行通過後才放進去的。除外,有些例項是命令列,直接複製黏貼即可執行,這樣做的目的就是手把手教你執行程式碼。
  8. “易"的體現-->容易搜尋: 易學筆記遵守解決問題的常規思路,搜尋是解決問題最快的方法。易學筆記提供的文件都允許文字搜尋和定位,不像某些PDF或者視訊沒方法提供搜尋。
  9. “易"的體現-->可當參考書:易學筆記所有主題教程涉及的知識點儘量大而全,目的也是讓讀者在遇到問題的時提供參考的解決方案,百度並不一定是唯一的解決途徑
  10. “易"的體現-->線上交流:對於易學筆記的讀者可線上與本人進行技術交流,指出筆記中的不足,技術人嘛,一起學習一起進步。
  • 同為程式猿的你將得到什麼?

  1. 易學筆記為你提供一份詳細的熱門領域的學習筆記,協助你快速入門
  2. 易學筆記讓你比直接看書快幾倍的速度獲取新技能,而且學習效果會更好
  3. 易學筆記可當做參考書積累自己的知識體系,形成自己的“小百度”知識庫
  4. 易學筆記幫助你形成分步驟、細化知識點的思維同時養成做筆記的習慣
  5. 易學筆記幫助你短時間內技能提升,實現升職加薪以及高薪跳槽
  • 本人近期將會分享的筆記有

  1. 易學筆記--Maven教程:目前絕大多數Java開發框架的基礎
  2. 易學筆記-python語言:當前排名第4的開發語言,機器學習必須要懂的
  3. 易學筆記--Java教程:無需多說,主流的開發語言
  4. 易學筆記-go語言:coogle超級賬本(區塊鏈技術)專案就是採用go語言
  5. 易學筆記-Linux命令:所有基於Linux作業系統專案開發的基礎
  6. 易學筆記-docker容器:當前非常火的虛擬技術,很多公司的舊系統都計劃往docker容器遷移
  7. 易學筆記-Servlet和JSP:最原始的HTTP請求架構,瞭解它有助於後面的spring架構的學習
  8. 易學筆記-spring入門:spring是springboot/springcloud的基礎,必須掌握的Java框架
  9. 易學筆記-springCloud:非常火爆的微服務架構
  10. 易學筆記-系統分析師考試:每年5月系統分析師考試學習筆記,可以以本筆記為主,官方教材為輔快速學習掌握相關知識點
  • 本人近半年將會分享的筆記

  1. 易學筆記-演算法:不容置疑,演算法是所有軟體開發的基礎
  2. 易學筆記-TCP/IP通訊:不容置疑,通訊是所有分散式系統、網路程式設計的基礎
  3. 易學筆記-Redis記憶體儲存:非常火爆的記憶體資料庫
  4. 易學筆記-MongoDB:非常火爆非關係型資料庫
  5. 易學筆記-Mysql:非常流行的關係型資料
  6. 易學筆記-Nginx:非常火爆的軟負載中介軟體
  7. 易學筆記-快取機制:分散式快取是如何設計的
  8. 易學筆記-Python爬蟲:Python語言在資料獲取方面的應用
  9. 易學筆記-大資料:Hadoop/HBase/hlive等
  10. 易學筆記-人工智慧:機器學習/深入學習/推薦系統等
  11. 易學筆記-區塊鏈:coogle超級賬本專案
  •  怎麼獲取易學筆記?---->請檢視我的暱稱新增