原文首發於個人部落格:基於 github 的敏捷學習方法之道與術 - 呂立青的部落格
「持續行動,持續反思,持續進步。」—— via. 敏捷學習宣言
需要好多年才能懂得,最好不是去震驚世界,而是要像易卜生所說的,生活在世界上。我們都一樣,渴望著建樹功勳、改變世界,可是伴隨著年歲的增長,卻發現想要實現的夢想依然那麼遙遠,而時間卻依然殘酷得流逝著,不會僅僅因為「你」而發生絲毫的改變。如《奇特的一生》當中所言,我對時間始終充滿著敬畏之心,最好的方式也不過是奢求時間能夠跟自己做朋友,伴隨著我這也許注定樸實無華的一生,共同成長。
在我們的一生所能做的事情裡邊兒,睡眠占去 1/3,此生只剩 2/3,除去非做不可的基本生活維護成本過後,剩下的時間要麼選擇浪費而荒度此生,要麼選擇目標而奮力向前,讓這一生不留遺憾。follow your heart,你需要找到一些願意為其付諸終身的「目標」,以這樣的姿態「生活在這世界上」。
就像軟體開發一樣,乙個人的成長也應該要有自己的方**。人的一生若是順風順水一成不變的話,那未免太無趣了,正是由於世界的未知在等著我們去探索,不一樣的經歷才會讓人感到驚喜和有趣。想做的事情永遠都不會嫌多,就像柳比歇夫最開始是研究生物學的,卻在科學的道路上越走越遠,進而研究起了數學、物理、哲學,甚至於美學,而更關鍵的是,他在每一方面都做出了很大貢獻並且留下了諸多著作。
時間充當著 product owner 的角色在不斷著向你提出各種各樣的需求,敏捷當中最重要的一大前提就是「擁抱變化」,而在「記錄時間這件小事兒」裡面我提到的 gtd 流程便可以用於處理這源源不斷的需求,即收集、整理、執行、回顧,對應到敏捷當中的幾大會議顯然也可以由個人完成,自己就是自己的 im & pm,當然也是 ba & dev & qa。(當然不用擔心人格**,?)
我都沒想到寫著寫著怎麼就把開頭寫成了雞湯文,[捂臉](./wechat/emoji.jpg)
。但是咧,如果說前面的講的是「道」,那麼接下來就會具體到基於 github 的「術」即各種實踐了。
首先呢,讓我們從需求出發,從市面上來尋找一款符合敏捷的學習軟體,別想了,當然是沒有的。對於一名程式猿來說,最理想的答案其實就是 github,作為全球最大的程式猿交友**,github 本身以及圍繞 github 的各種外掛程式使得其專案管理能力其實遠比你所能想象的厲害得多。
首先你可以給自己建乙個 github 倉庫作為主頁,比如我的 jimmylv/jimmylv.github.io: agile learning based on github issues 其實最開始就是從個人部落格的主倉庫發展而來。那麼,如何快速得收納自己的想法呢?以解決問題為導向,當然就是有什麼需求就直接給自己的 repo 建乙個 issue 作為 story card,然後了卻這個需求的最終形態就是 close 掉這個 issue,比如我要寫這篇文章就始於這個 issue:基於 github 的敏捷學習方法總結 · issue #36 · jimmylv/jimmylv.github.io。
github readme
github issues 的高階用法
與此同時,新建 issue 還有更高階的用法,也就是通過 issue_template 這樣乙個模板來新建某個 issue,從而更快地定位問題所在和解析自己的想法,最主要的是能夠輸出更具體的 todos,即下一步行動的具體內容,這個還會在後面詳細解釋的。
new issue
這種方式彷彿學習中的大腦,神經網路被連通了的感覺。
intellij & issues
移動端的解決方案
gitdo
大膽地把 issues 作為你的個人需求列表吧,需要解決的問題可以大到做乙個開源專案,或者小到讀一本書、寫一篇文章。對於比較大的需求,你還可以將其轉化為 epic 然後把拆分過後的小 issues 們加入到這個列表裡面來。
epic
而 github (with zenhub) 強大的 issues 管理能力絕對會讓你的迭代工作變得井井有條,使用 github 新出的 projects 特性或者使用 zenhub 的 boards 應該就可以讓你瞬間有了日常敏捷工作的感覺了吧!
zenhub piepline
制定迭代計畫
首先呢,讓我們來新建乙個 milestone 來制定計畫,也就是決定在乙個 iteration 裡面你需要完成哪些 issues。在這裡我所制定的階段性計畫週期為乙個月,當然你也可以勤快一點以 2 周作為乙個 iteration,享受一下自己的計畫要完不成了這個 milestone 就要廢了,沒法像「時間」這個一生的朋友交付所有需求的快感吧,?
milestone
當然咯,一般我會在月初做計畫的時候給自己準備專門的時間來做 elaboration,把 backlog 裡面的卡拖到 rethink/plan 這一列,然後經過分析和詳細輸出 todos 以及所對應的估點 points 之後便可以將其拖到 ready for todo 了,一般我給自己估的點數就是完成這件事情所需要的時間,一小時即對應乙個 point。
iteration
這樣你就可以愉快得選擇 filter issues by milestone 專注於當前 iteration,專注於 in progress 這一列所要做的事情,並且垂涎於 ready for todo 裡面將要做的事情,每次做完還可以放到 review/signoff 裡面寫寫對這件事情的總結和感想什麼的,每次挪卡都充滿了敏捷的儀式感(認真臉)。
進度的把控
github 在 issues 裡面直接整合了 markdown 的 todo 語法,甚至於可以在渲染過後直接拖動某個 item 進行排序,而且前面的勾選項可以直接打勾 ☑️ 標記為完成,而且完成之後這個 issue 還能直接顯示完成進度;前面所提到的 epic 也能直接顯示子 issues 的完成情況即 closed 比例,兩者結合起來簡直不能再美好,?
比如說拿來作為讀書列表的記錄就很不錯,每本書作為乙個 issue 還可以把章節劃分為具體的 todos,結合估點可以追蹤自己看書的進度和速度,順便在 comments 底下做個筆記也不錯啊!
todos
專注當下
而且 zenhub 還提供了乙個基於 github issues 的 todo list,你可以只用關注 today 這乙個列表,專心於當前要完成的任務。而且更有趣的是這個 list 可以加入 github 的任何 issues,也就是說是全域性的,所以你就可以加入很多在 github 上通過 issues 寫的 blog,比如徐飛的這篇文章流動的資料——使用 rxjs 構造複雜單頁應用的資料邏輯 · issue #38 · xufei/blog,被我加入到了 reading 的列表當中。
things to do
與此同時我還會使用 toggl 來記錄每個 issue 具體實施的時間,以便於在時間花費上能夠獲得及時的反饋。這樣做會讓你真切地感受到時間的流逝,而在回顧記錄的時候也能夠進行總結分析,從而在下一次的計畫當中能夠更精確地預估時間(點數)。比方說這篇文章我估了 5 個點現在已經寫了 4.5 hours 了,不過這是另外乙個大話題,可以參考 記錄時間這件小事兒 這個 issue。
toggl
zenhub 也提供了 burndown 和 velocity tracking 圖,可以得出這個迭代總體的完成情況,看看跟預期有何不同;也可以跟其他迭代進行對比,看看有何不同的地方,然後進行下一步的具體分析。
burndown
還可以根據 github 和 toggl 裡面的資料進行彙總和分析,下面這個**就是我在 11 月這個迭代完成後一部分 issues 的具體 estimation points 和 time efforts,再結合 issues 裡面所記錄下的各種筆記和 references,就可以有乙個比較直觀的總結和覆盤了。
number & description
estimation points
time efforts
#85 記錄時間這件小事兒
304:26:18
#96 如何對時間進行分類?
803:00:09
#102 建立個人 wiki 系統
202:53:56
#101 技術雷達宣講:enzyme 測試框架
506:11:19
#90 working time improvement
133:27 min
#97 如何使用 xx 的標籤系統?
125:21 min
其他輔助工具但是於我而言,選擇在 github 這樣乙個公開環境下記錄學習的最大乙個動機就在於「開源」,很喜歡一句話,大意是「在這個網際網路時代,能限制住學習的只有你的求知慾」。當你從網際網路這個廣闊的知識海洋當中汲取知識的時候,也應當有所輸出到即反哺到整個網際網路當中去。我會經常寫部落格/筆記來總結分享自己的所學,但是一篇文章誕生的背後往往還有很多其他知識和經驗的相互交融與沉澱。issues · jimmylv/jimmylv.github.io 這個列表裡面的某個 issues 最終能否演變成一篇文章我不知道,但是基於 github 開放式的學習歷程都會被這些 issues 如實地記錄著,任何乙個想法都能追本溯源被找出最開始的緣由。
相比於軟體開發這件小事兒,健康快樂地成長顯然要重要得多。—— 立青
SR彙總 基於深度學習方法
1 srcnn fsrcnn learning a deep convolutional network for image super resolution,eccv2014 accelerating the super resolution convolutional neural networ...
學習方法 使用正確的學習方法
每節內容記錄大量筆記,並練習每道例題 費時費力 死記硬背 例如 學習rails,完整的微博專案,原封不動跟著做了一遍,模仿性很高。想要習得的知識,進行大量刻意的重複練習 枯燥練習 重複練習 錯誤練習 脫離實際 自身抗拒 例如 學習html,為了掌握,將第1個專案完整記了一遍,為了記住,重新按照邏輯 ...
2019 5 13 基於模型的強化學習方法
注 寫作四項工作 看懂 一篇 工作二 提出難點問題,提出新概念。例 多光譜 注意力機制 工作三 修改演算法,網路結構 損失函式 步數 基於模型的的強化學習是比無模型難很多的問題。一 狀態轉移概率 1 馬氏決策過程可以利用五元組 s,a,p,r,y 來描述。根據狀態轉移概率是否已知,可以分為基於模型和...