不念2018,不畏2019

宜興彭擺魚發表於2019-01-25

我要在寒冬遊個泳 | 2018 年度總結

國際慣例

      大學三本非計算機專業,從拎包入住那天到捲鋪蓋走人,四年的時間除了學習,好像大學該做的也都做了。趕鴨子上架地找了第一份工作,不需要動腦也不需要憂愁未來,因為一眼看下去未來好像也就這樣。呆了一年的時間,某天在和朋友聊完之後,腦子一熱地就下定了決心,入坑程式設計。

初入坑中

      辭去工作的我又回到了呆了四年的南京,在朋友的介紹下(朋友也不懂這行)入坑一個目前所知最坑培訓之一(也許沒有之一,連個正式的專案都沒有帶著做過),入坑java。沒錯我是水過四個月java的(手動滑稽)。

    理所當然的入職第一份工作,外包,明明是個java後端工程師,寫著寫著寫成了專職前端,也就是2017年5月份,正式開始入前端。當時自己對於前端什麼概念都沒有,用的還是jsp,上手就jq,當時的感覺就是,管它三七二十一,拿起jq就是幹。什麼名稱空間,什麼模組化,什麼封裝。維護?管挖不管填。就這樣兩個月之後,偶然看到剛加入的五年前端同事寫的程式碼,再對比自己,從當時我意識到程式碼被兩樣東西執行,引擎和人。我開始意識到自己該主動向外求取而不是哪裡不會查哪裡(你不去接觸未知,您永遠不知道自己未知)。

    入門第一本書,js高程,當時給我的感覺就像是野路子碰到正規軍,開始對於知識體系化,結構化有了意識(就比如武俠小說中人有108個穴道,你必須一個個打通,厲害的武林絕學,都是由多個穴道組成一門武學)。我必須創立一門自己的武學(其實武學大同小異,金鐘罩和鐵布衫說不定打通的穴道只是相差數個),當然學武功離不開天才地寶,神兵利器。不錯的英語閱讀能力,乾貨滿滿的只是論壇,詳盡有序的規範文件等等,這些都是你學習過程中的加速器。(當然,武學得配合心經,比如方法論)

漸入入門

    同年10月,開始出來面試,底子薄弱,經驗不足,很成功的掛了好幾家,終於被現在這家公司收留。新公司雖然不大,但技術體系卻比之之前大有不同。傳統意義上的前後端職責分離,並且開始接觸前端自動化工程構建,開始入坑vue,開始系統的看書學習。這一年我一如既往的開始埋坑,然後在心中填坑(重構?這輩子都不可能重構的),重新把學習java時強調的物件導向在前端中思考,開始學習函數語言程式設計和理解函式在js中的影響和優缺點,開始理解vue這類框架真正解決是哪些問題(總的來說我的理解前端框架也好,架構也好,更多是面對專案的業務架構地多變以及多人合作開發中衍生出來的一種解決方案),所以之後的程式設計中會更多地思考,多人開發時如何更多地減少差異性,提高健壯度,然後面臨業務架構變化的不確定性如何提高程式碼的靈活可擴充。(瞎幾把亂吹)當然過多的思考這些免不了造成眼高手低。

略有體悟

    當然2018年最重要的收穫是思考很重要,磨刀不誤砍柴工的同時也要知道組裝你的知識的重要性(觸類旁通,融會貫通,後面我要講到一個點叫能力重疊),一個知識點建立在另一個的基礎上,既要有自底向上,比如瞭解整個計算機基礎的情況下反推一些模組的實現。也要自上而下分析一切模組,一切設計,一切架構都來源於需求,來源於人類對於世界的認知。

    (我猜如果魚來設計語言,肯定不是我們這樣的思維方式去設計,有時候與其說基於哪種方式程式設計,不如說都是面向人類思考認知習慣程式設計, 但是如果魚也會程式設計,那說不定和我們很多人程式設計模式一樣,因為你有時候並不一定先以人類高階思維出發,而是侷限於所學的技術底層)。我們經歷了從底層語言到高階語言,越來越趨向於人類習慣。所以在程式設計中我的思考是更多的先描述流程,確立職責物件。再思考每個職責用什麼實現(也叫面向抽象,但又不太像,我提倡的是先弄清楚一件事情真正有幾個環節,哪些流程)。用人類的思維程式設計,用人類的思維程式設計,用人類的思維程式設計,重要的事情說三遍。

    這不僅在開發中、在學習中、除錯問題中,也特別有用,我們應先拋開已有的技術認知,先從人類的角度去認知分析,再去實現,具體,優化(我不知道是不是有人會反過來,基於自己技術體系去思考怎麼拆解業務,實現業務,那除非你對於自身技術融會貫通訊手拈來,不然往往會成為你的阻礙)。我一直覺得自己不聰明,所以不聰明的人你就需要一個工具或者說定時思維去減少你的思考,這個時候出來了一些叫設計模式,叫程式設計正規化。

專案結構設計

    在我目前的認知上,設計上分為兩個維度,一個是從抽象到具體,另外一個是職責分離。剖解一個專案時,可以先將整個專案分解成多個職責模組,正如企業會有多個部門,每個部分職責明確。然後每個職責又能拆解出更細分的職責,類似一個樹形。分類職責的好處,在企業中首先責任明確,誰的問題找誰(出了問題好修改,好定位)。二,任務明確,不需要陷入複雜的各中事務交雜中,負責好自己的事務(邏輯清晰簡單,給你的小腦袋減減壓力)。職責同時也是一個抽象概念,我不關注你這個部門怎麼負責這件事情的,只要保證我給你下達的職責保證完成,你享有高度自治,想怎麼玩怎麼玩,你外包出去都行(我們能隨意替換具體實現,專案中可能面臨技術調整,然後可能有了某個第三方庫有彩蛋了想換一個)

能力重疊

    我給我要講的起了這個名字,什麼意思呢,對於很多像我一樣轉行的人,其實你學習程式設計的過程中,會發現一些程式設計師的能力你已經具備,很簡單的你會發現英語好的人學得快,之前從事腦力工作的也學得快等等,之前講到武俠小說一百零八個穴道,每一些穴道組成一門武學,張無忌學完九陽神功很快就能學會乾坤大挪移,正是這個道理。同時在每種程式設計技術的學習中也存在能力重疊,為什麼後端學前端上手這麼厲害,為什麼ios出身的yck學前端這麼快。所以轉行的朋友也好,將要學習新技術的朋友也好,想想新的能力,新的技術中和你目前存在哪些能力重疊,善於發現這些能力重疊是你快速掌握的法門。

技術背景,場景

    很多文章喜歡講一門技術的起源,背景,這個有點重要,理解一門技術的來源是理解何種場景下需要這門技術,這門技術的產生本身是為了解決什麼問題,這能幫助你更快更好的掌握這門技術,甚至很多時候,你能反推出一門技術存在哪些能力(這個地方又是從人類思維推導底層技術)。最近看了一點函數語言程式設計的書,初看時很困惑,講的是很有道理,但是在前端實踐中卻困惑於好像沒這麼多地方需要用的到,那我什麼時候應該用到,什麼場景下更適合函數語言程式設計中的思維去解決問題。但當我開始慢慢思索函式式在前端中的場景,函式在前端程式設計中解決的問題時,我開始對函數語言程式設計的理解更親近(對的是親近),開始接受這門思想。

學習提升

    方法論,思維定式,學習方向重要,確實重要,你很欠缺,你更欠缺的心裡沒點數嗎。智力大多天生決定,但智慧的積累絕對在於你的堅持學習,上面提到的一些幫助學習的方法,假如你是個堅持學習的人,對你來說你肯定會學到相信我。但是往往生活中問你方法論,學習方向,何種思維模式更利於學習的人,大多是沒怎麼看書學習,不怎麼堅持學習的人,鎖和鑰匙都在你手中,為何要求於人。給自己定個小目標啥的,你今天高呼大佬666,等你看完10本書再來看,之前的大佬真的這麼厲害嗎。

展望未來

2019年,也沒什麼特別的期望,期望的少才失望的少。期許幾件務實的事情把

  • 健身健身健身,健身使人變高,健身使人變帥,健身使人變聰明
  • 看20本書,別管啥該學啥,看它。
  • 旅行,你不只是一個程式設計師,你應該發掘更多的潛力,多看看星辰和大海。
  • 進大廠進大廠進大廠。大佬們帶我飛。

相關文章