1、緣起
DIY畢業項目剛剛結束。歷時一年多的 DIY 一期正式結束。
經歷了一個多月的準備,畢業項目中我們的小組“碼出人生”最終勝出。
首先說下和 DIY 結緣的背景,個人比較喜歡代碼規範,非常重視基礎。
從 《阿里巴巴 Java開發手冊》剛發佈不久,就第一時間下載 PDF 版並打印下來認真看了兩遍。孤盡老師《碼出高效》在雲棲大會發布當場就讓高家祺學弟去找孤盡老師現場購買簽名版,如獲至寶。並非常興奮地推薦給身邊的同學。
後面得知孤盡老師要辦 DIY 班,在高家祺學弟的推薦下加入了 DIY 學習群,開始見到 DIY 的口號就被深深吸引,有些新奇。
其一,Deeply Inspire Yourself
深度激發自己
其二,Do It Yourself
實踐出真知
參加 DIY 班,每一段時間都有一份作業,可以看到其他同學的答案,可以看到不同的學習方法,看到不同的側重點。
雖然每一期都會有人淘汰,但是正是因為這種淘汰機制,才能夠淘汰掉一些不夠堅持的人,只有有危機感才能更認真地對待 DIY 的每一份作業。只有珍惜機會,有毅力的人才更容易走到最後。
2、DIY 班的過程
2.1 題目
每一個題目都很難直接搜索到答案,都需要自己去看源碼,自己去搜很多篇文章,自己去書裡查,自己去思考,這是DIY班題目比較亮點的地方,這樣激發了自己去思考。
2.2 規則
DIY 班開始的規則比較一致,後面淘汰規則比較多樣化。這些規則更容易淘汰一些不仔細的同學。這本書就是一種考驗。規則的多樣性也是 DIY班的另外一大亮點。
3、畢業項目
3.1 團隊
下面說說對團隊小夥伴的印象:
郝宇飛 - 隊長,思維非常清晰,特別喜歡思考,非常優秀,值得學習。
高家祺 - 導師的本科學生,本科期間就帶社團,工作後成長迅速,非常有想法,年輕,前途無量。
劉鵬飛 - 負責支付寶登錄還有 ES,做事很負責。
李志福 - 接觸不太多,但是感覺人不錯。
楊益萍 - 人非常陽光,做事認真負責,非常真誠,值得大家學習。
雖然很多淘汰的同學也有很多很優秀的甚至可能比我們技術更好,但是留下的人的確都是更有毅力,能夠堅持並且真誠靠譜的人。
3.2 我做了什麼
畢業項目最大的問題是如何在較短時間內更好地和不熟悉的小夥伴一起完成一個項目。
在這個過程中時間緊任務重,為了更好地實現任務,我提議採用結對編程(和標準的結對編程有區別)的方式,團隊內再次拆分成兩個小組,小組內相互討論,相互 CR,相互 back up。
根據公司軟件開發的流程建議開會的時間點,並結合使用錯誤碼的痛點想到了自動生成枚舉類打成 jar 包的方案。
困難很多,雖說一個月,但是實際用到開發的時間是有限的,公司的事情非常多。
但是既然選擇了遠方,便就要風雨兼程。
最後階段老師們提出了很多建議,大家加班加點一起修改 bug的場景記憶猶新。為了一個目標一起加班加點地幹活的狀態非常充實。
3.3 經歷的主要磨難
磨難主要有兩點,其一是快速掌握新技術,第二是心態。
快速掌握新技術
從開始確定使用neo4j 心態上就有些“不適”,因為聽起來高大上,時間緊,很怕掌握不了。由於前端資源匱乏,家祺側重前端和代碼自動生成,freemarker 生成枚舉就要我來寫,以前沒寫過,時間很緊張,有點怕。合作過程中其他人用 mybatis-plus 部分查詢需要用到 Wrapper 第一次見。最終克服心理的恐懼,快速熟悉 neo4j,幾乎一天看文檔和demo,第二天上手寫代碼。團隊其他成員使用 mybatis-plus,Wrapper 沒用過,看函數列表快速上手。 freemarker 以為只能生成 html,最後發現它還可以生成 java 源碼。
心態
做畢業項目期間經常加班,週末還有一次要值班,平時還要看點書,寫寫博客等,時間太緊張。
最後一週的時候大致成型,但是小問題很多,面臨著是否要再認真投入修改的抉擇。
孤盡老師的提醒很及時“行百里者半九十”,越是最後的階段更難。
最後尤其是高家祺熱情很高,我們衝了一把把一些重要的問題優先優化,小問題暫時沒有修復(如支付跳轉問題)。
3.4 畢業項目的收穫
最大的收穫之一是孤盡老師對我們兩個團隊的點評:
一、信任是什麼?(信任是主動的,單向的)
二、透過現象看本質。(需求背後的都是人性)
三、解決問題的能力。(定位問題更加重要)
四、效率是什麼?(效率是單位時間你幹了別人兩倍的活)
五、完成比完美更重要。(代碼是改過來的,架構是演進出來的)
六、新技術的恐懼,是IT從業者的命門。(回顧第一節課:學習如何學習的能力,快速學習的能力)
七、提升抗壓能力。(抗壓能力是事業的基礎)
八、演講能力,限時演講。(通過關鍵詞來帶動演講節奏)
另外也克服了自己害怕新技術的心理,收穫了團隊的友誼。
此外,正如孤盡老師再畢業項目中點評的那樣,設計功能時要多考慮異常場景,這樣才能做得更完善。
完成比完美更重要。這句話在畢業項目階段孤盡老師也提到過。我們項目之初就討論過這個問題,時間緊任務重,最終決定先實現核心功能。
最後,另外一個團隊的同學作品的也有很多值得學習的地方,孤盡老師不讓兩個團隊互通有無最後才有更多懸念,讓整個項目更有期待。
4、成長
4.1 變化
很多東西雖然不是 DIY 直接要求的技能,但是 DIY 幫助了我養成認真踏實的態度,讓我意識到很多問題看似簡單,其實想研究透還是要認真下一番功夫。
4.1.1 字節碼入門
從開始參加 DIY 班時,對字節碼指令不太熟悉,到現在常見的字節碼指令的功能,隨手就可以反編譯和反彙編,甚至可以看常見的反彙編的字節碼,頭腦中逆推出源碼。
4.1.2 從學習到解析(學習如何學習)
從開始學習《阿里巴巴 Java開發規範》,到之前通過源碼、反編譯和反彙編結合《Java 語言規範》和《Java 虛擬機規範》等,從自己的學習方法論角度對《手冊》進行解讀,在慕課網出了一份 ”解鎖大廠思維:剖析《阿里巴巴 Java 開發手冊》“ 的技術專欄,現在已經有 4500名讀者。
結論很重要,但是原因更重要,我們如果總是記住結論就無法靈活運用。因此我們要採用多種方法來理解《手冊》為什麼這麼規定,通過學習《手冊》達到脫離《手冊》的目的,在學習過程中總結和實踐好的學習方法,最終提高學習的能力和解決新的問題。
專欄以明確是什麼(what),為什麼(Why) 然後再是怎麼做(How)的角度學習知識。
本質上是使用源碼、反編譯、反彙編、代碼調試等並結合《Java語言規範》和《Java 虛擬機規範》等權威圖書為主要參考,來學習《手冊》中涉及的一些知識點。
在我現在看來這些是不錯的 Java 學習方法。
專欄最後一節也寫到了專欄的初衷,其一是對孤盡大佬的崇拜;其二是希望傳播一下自己認為高效的學習方法。
雖然現在看來還有很多可以補充或完善的地方,但是通過專欄的編寫,讓自己又一次深入閱讀和學習了《手冊》,在教別人的同時,又加深了自己的理解。
我們看書、看專欄可以吸收別人的學習方法,這也是在提高學習如何學習的能力。
《手冊》泰山版已經發布,一定會跟進大佬的步伐,早點下載學習。站在前人的肩膀上,少趟坑。
4.1.3 克服對新知識的恐懼
從開始時對新知識非常恐懼,到參加畢業項目時快速熟悉 neo4j、 freemarker 和 mbatis-plus 等,克服了心裡障礙,探索了快速學習新知識的方法如拉取源碼運行單元測試、看官方文檔、找簡單的 demo、查看核心類的函數列表等。
從開始孤獨的學習,到現在有幾個技術上不錯的好朋友,一起探討共同進步。
4.2 收穫
這一年發生了很多變化,很多都是直接和間接因為參加 DIY 班帶來的收穫。
歸納和演繹。通過具體的知識歸納出共性的本質的規律,然後通過本質的規律取運用到解決問題上。這也是一個不錯的學習方法。
機會留給有準備的人。不僅要有一定的知識儲備還要有認真做事的態度。
克服對新技術恐懼的心態。新的技術的本質原理還是計算機專業基礎中的一些理論和思想,大家都常用的技術一般不會太難。後面還是要繼續鞏固專業基礎,專業才是安身立命的根本。
孤單絲不成線,孤木不成林,很多事情要依賴團隊才能完成,如何在團隊中作出最大的貢獻體現自己的價值很重要。
知道不等於懂得。我知道一個知識和真正理解和掌握是完全兩碼事,但是會有很多人看過或者知道某個知識就認為自己掌握了,然後不屑一顧,錯過了深入探究的好機會。
每一個疑問代表著至少一個知識盲區,代表著極佳的學習機會。當我們看到DIY班的問題自己沒把握的時候,說明我們學的還不到位,這恰恰是學透某個問題的機會,可是很多人在面對問題一知半解的時候總會忽略問題,而不是趁機研究透問題。
先猜想後驗證。在學習和研究 DIY 班涉及到的一些源碼時,體會到先猜想後驗證是高效學習的一個重要方式。如果一開始就直接看答案,就會覺得答案是理所當然的,一旦自己動腦思考解答,很多人就會手足無措。
不僅要知其然,而且要知其所以然。是什麼,為什麼比怎麼做更重要。正如孤盡老師所說,技術人員總喜歡開始就關注 how,而是應該先關注 why,再關注 what 和 how。其實正是因為我們在學校裡養成了記憶答案的學習方式,脫離校園後就沒有意識到問題,沒有主動思考原因。
行百里者半九十。越是到最後階段越是容易放棄,很容易功虧一簣,堅持很重要。
授人以魚,不如授人以漁。孤盡老師 DIY班就是在踐行這個原則,同樣我們自己學習和解決問題時也應該多思考通用的方法而不應該滿足於解決某個具體問題。
心態轉變。有對團隊有益的想法,不再憋著,而是勇敢地說出來。
專業才是安身立命的根本。說到底各種 DIY班的問題是否能夠回答的準確嚴謹,本質上還是要看專業基礎是否紮實,其次是平時是否認真去看了源碼。後面打算多鞏固下專業基礎,讓自己的專業知識更加紮實,更牢固。
細微之處見真章。發現孤盡老師看代碼看得非常仔細。印象比較深刻的是 Boolean 的 hashCode 這個問題,看似很簡單,但是絕大多數人都沒進去看過,都沒思考過為什麼這樣。
5、吃水不忘挖井人
感謝孤盡老師免費組織 DIY 班,傳授大家正確的學習方法和理念。
感謝一藏和潤瑾老師給我們的項目的一些建議和點評。
感謝團隊內所有的小夥伴的努力。
非常渴望可以有一個紀念性的東西可以代表這麼長一段時間的付出,可以給自己帶來更美好的回憶。
聽說 DIY 班最後會發畢業證書、畢業獎章,優勝團隊會有獎盃,非常激動。
6、啟程
每一次結束都是一個新的開始。
就像高中畢業了,並不代表解放了,而代表不一樣的學習模式;就像大學畢業了,並不代表自由了,而是要面臨工作和生活的壓力。
DIY 班一期結束了,但對於技術的進階來說卻是一個新的開始。
DIY 班將留下最美好的回憶。未來帶著 DIY 班得到的一切啟發,繼續思考,繼續前行。
PS: 後面會推薦更多的朋友參加孤盡老師後面的 DIY 班,跟著孤盡老師學習。