林老師在群里給大家布置了一個(gè)學(xué)習(xí)任務(wù),為過(guò)一段時(shí)間的實(shí)戰(zhàn)項(xiàng)目做準(zhǔn)備礁扮。
任務(wù)是這樣的:
前臺(tái)用 react + redux知举,后臺(tái)用 jersey + mybatis + mysql 寫(xiě)一個(gè) todolist,可以對(duì) todo 進(jìn)行查看太伊,刪除雇锡,新增的功能
作為一個(gè)剛剛參加完ThoughtWorks暑期訓(xùn)練營(yíng)的同學(xué),我應(yīng)該怎么來(lái)完成這個(gè)任務(wù)呢?
首先看一下兩天之后部分同學(xué)的進(jìn)展:
”我準(zhǔn)備今天才開(kāi)始僚焦,準(zhǔn)備跟某茹同學(xué)一起合作學(xué)習(xí)锰提。還是以前那種5w1h,然后分享芳悲,一天最多兩個(gè)技術(shù)吧欲账,這樣想的。想著先搞懂基芭概, 然后結(jié)合寫(xiě)demo赛不。“
”我是昨天開(kāi)始學(xué)習(xí)的林老師任務(wù)罢洲。昨天主要學(xué)了mySQL踢故,基本知識(shí)點(diǎn)差不多了,還沒(méi)寫(xiě)demo練習(xí)惹苗,打算從今天開(kāi)始和某秀同學(xué)結(jié)對(duì)學(xué)習(xí)java的相關(guān)東西殿较。jersey + mybatis 我們暫定時(shí)間是一個(gè)星期,然后開(kāi)始寫(xiě)todolist“
”老師桩蓉,我前幾天了解了一下docker和selenium淋纲,昨天看了jersey 后期準(zhǔn)備和某紅同學(xué)結(jié)對(duì)學(xué)習(xí)mytalis和mysql以及復(fù)習(xí)java的知識(shí)。暫定用一周來(lái)了解這些技術(shù)棧院究∏⑺玻“
看到同學(xué)們已經(jīng)開(kāi)始了,有了一個(gè)粗略的計(jì)劃业汰,并且沒(méi)有忘記我們?cè)谟?xùn)練營(yíng)中學(xué)到的”合作學(xué)習(xí)“伙窃、”5w1h“、”分享“样漆、”先寫(xiě)Demo“等方法为障,我覺(jué)得非常開(kāi)心,你們很棒!只是我有些擔(dān)心同學(xué)們的意愿是好的鳍怨,但是在如何把它想得更細(xì)呻右,并劃分成可以有效執(zhí)行的任務(wù)時(shí),會(huì)遇到困難鞋喇。
所以我在這里想聊一下声滥,如果我接到了這個(gè)學(xué)習(xí)任務(wù),我應(yīng)該做什么以及怎么做确徙。同學(xué)們?cè)陂喿x的過(guò)程中,可以回想一下我們?cè)谟?xùn)練營(yíng)里所教授的東西执桌,結(jié)合起來(lái)鄙皇,希望在下一次遇到類(lèi)似的任務(wù)時(shí),也能按類(lèi)似的方法給自己定出一個(gè)詳細(xì)的學(xué)習(xí)計(jì)劃仰挣。
先在前面說(shuō)一下我的套路:
明確需求 -> 分解問(wèn)題 -> 各個(gè)擊破 -> 總結(jié)分享 -> 小步快跑伴逸,不斷循環(huán)
明確這個(gè)學(xué)習(xí)任務(wù)的需求
當(dāng)林老師告訴我們這個(gè)學(xué)習(xí)任務(wù)時(shí),我們需要問(wèn)自己(以及林老師)這幾個(gè)問(wèn)題:
- 老師為什么要給我們布置這個(gè)學(xué)習(xí)任務(wù)膘壶?
- 通過(guò)這個(gè)任務(wù)错蝴,我們要鍛煉哪些軟硬技能?
- 我們應(yīng)該在什么時(shí)間前完成颓芭?
- 我們應(yīng)該學(xué)到什么程度顷锰?
- 我們應(yīng)該使用什么樣的合作方式?自學(xué)亡问,結(jié)對(duì)官紫,還是建立一個(gè)學(xué)習(xí)小組?
- 這些學(xué)習(xí)任務(wù)中州藕,哪些是最重要的束世,必須掌握的,哪些可以延遲床玻?
- 這看起來(lái)是一個(gè)比較大的任務(wù)毁涉,我怎么對(duì)它進(jìn)行拆分?
- 我怎么知道我掌握了锈死?比如每個(gè)小任務(wù)應(yīng)該有什么輸出贫堰?
- 我最近有什么其它的事情要忙,怎么安排我的時(shí)間與精力待牵?
這些問(wèn)題大家都清楚了嗎严嗜?至少有一些,我是不太清楚的(比如時(shí)間等)洲敢,等林老師方便的時(shí)候問(wèn)下他漫玄。
明確TodoList的需求
回顧一下林老師的任務(wù):
前臺(tái)用 react + redux,后臺(tái)用 jersey + mybatis + mysql 寫(xiě)一個(gè) todolist,可以對(duì) todo 進(jìn)行查看睦优,刪除渗常,新增的功能
可以看到這里分為兩個(gè)部分,一是”技術(shù)需求“汗盘,另一個(gè)是”功能需求“皱碘。
技術(shù)需求就是我們要學(xué)習(xí)的,可以稍后再看隐孽,我們先看一下功能需求:
寫(xiě)一個(gè) todolist癌椿,可以對(duì) todo 進(jìn)行查看,刪除菱阵,新增的功能
這個(gè)描述還是不太清楚的踢俄,不過(guò)我們其實(shí)還有一些背景信息的:之前我們?cè)谡n堂上應(yīng)該了解過(guò)這個(gè)著名的http://todomvc.com,所以我覺(jué)得這里說(shuō)的就是上面的例子晴及。如果不太確定都办,我們可以先看看,然后再問(wèn)問(wèn)林老師虑稼。
隨便找了個(gè)例子(比如http://todomvc.com/examples/angularjs/)琳钉,看了一下它的demo,實(shí)際操作了一下蛛倦,看看我們要做成什么樣子歌懒。
這里先放個(gè)圖:
我們可以在上面試試新增、刪除溯壶、標(biāo)記為完成歼培、修改等功能,另外要注意底部左邊的"n items left"的數(shù)字會(huì)變動(dòng)茸塞,底部右邊幾個(gè)按鈕還可以點(diǎn)擊躲庄。
這時(shí)我可以把這個(gè)網(wǎng)址發(fā)給林老師,問(wèn)問(wèn)我們是不是要做成這個(gè)樣子钾虐,底部那些按鈕需不需要做噪窘。當(dāng)然,我覺(jué)得林老師的回答肯定是效扫,你能做就做倔监,做不完就算了。菌仁。浩习。
明確技術(shù)需求
然后我們?cè)倏纯醇夹g(shù)需求:
前臺(tái)用 react + redux,后臺(tái)用 jersey + mybatis + mysql
這里列出了主要的技術(shù)點(diǎn)济丘,看起來(lái)不多谱秽,但是想一想洽蛀,發(fā)現(xiàn)后面其實(shí)還有很多的隱藏信息:
- 我們的暑期訓(xùn)練營(yíng)上剛剛培訓(xùn)完,當(dāng)初教的各種實(shí)踐和方法都要用上吧:分解任務(wù)疟赊,提問(wèn)郊供,畫(huà)圖,限時(shí)近哟,Demo預(yù)研驮审,等等
- 語(yǔ)言沒(méi)有提(JavaScript和Java),這假設(shè)我們已經(jīng)掌握了足夠的基礎(chǔ)知識(shí)吉执。真的嗎疯淫?
- 項(xiàng)目實(shí)踐:構(gòu)建工具,IDE使用戳玫,git+github熙掺,測(cè)試,結(jié)對(duì)量九,合作
- 這是一個(gè)學(xué)習(xí)任務(wù)适掰,所以還有:自學(xué)能力的鍛煉颂碧,規(guī)劃與總結(jié)荠列,分享
這樣一想,似乎東西還不少啊载城。怎么辦肌似?我到底需要學(xué)哪些東西啊诉瓦?
明確技術(shù)點(diǎn)
我們可以先把前面的技術(shù)需求再明確一些川队,只有再精細(xì)一些,我們才知道到底需要學(xué)習(xí)哪些東西睬澡。
這里固额,我把它們分為了”前端,后端煞聪,數(shù)據(jù)庫(kù)斗躏,工具,其它“五個(gè)方面昔脯。
前端
- 語(yǔ)言:ES6 / HTML / CSS
- 包管理工具:npm
- 構(gòu)建工具:gulp
- 資源打包工具:webpack啄糙,及相應(yīng)的插件Babel
- 測(cè)試框架:Mocha(推薦)或者Jasmine, nock, supertest
- 前端框架:react, react-router, redux
- AJAX庫(kù):superagent
- CSS框架:bootstrap,或者react-bootstrap
- 可能用到的庫(kù):lodash, async
后端
- 語(yǔ)言:Java 8
- 構(gòu)建工具: Gradle(推薦)或者Maven
- Rest庫(kù):jersey
- 應(yīng)用框架:spring, spring boot
- 操作數(shù)據(jù)庫(kù):mybatis
- 測(cè)試框架:JUnit, AssertJ, NestedRunner
- JSON庫(kù):fastjson
- 數(shù)據(jù)庫(kù)遷移工具:flyway
數(shù)據(jù)庫(kù)
- mysql
- 圖形管理工具:自行尋找
工具
- IDE:Webstorm, IntelliJ IDEA社區(qū)版
- 版本控制工具:git, github, hub
- CI: travis-ci
- 博客:簡(jiǎn)書(shū), markdown
- 博客客戶端:inoreader(http://jianshu.milkythinking.com/)
- 效率:IDE快捷鍵云稚,Linux命令行
- http api客戶端:如postman隧饼,httppie, curl
其它
- http協(xié)議,比如各種http code
- Restful架構(gòu)
天啊静陈,怎么會(huì)這么多燕雁,我是不是想多了?當(dāng)然,同學(xué)們可能一開(kāi)始是想不到這么多的贵白,但是隨著項(xiàng)目進(jìn)行率拒,你會(huì)發(fā)現(xiàn),到最后可能會(huì)比這還多禁荒。猬膨。。
那么有兩個(gè)問(wèn)題:
- 這些我們都需要在這個(gè)任務(wù)中學(xué)嗎呛伴?
- 我們有沒(méi)有辦法合作學(xué)習(xí)勃痴?
關(guān)于第一個(gè)問(wèn)題,大家留意一下上面加粗的技術(shù)點(diǎn)热康,就屬于特別重要沛申、必須掌握的,其它的可以參考已有代碼或者根據(jù)自己的情況來(lái)定(或者分工姐军,一人學(xué)一些铁材,然后分享給其他人)
關(guān)于第二個(gè)問(wèn)題,我們需要找到組織奕锌。
找到組織
我們有十幾位同學(xué)都在做相同的學(xué)習(xí)任務(wù)著觉,我們能不能成立一個(gè)或者多個(gè)學(xué)習(xí)小組?我們已經(jīng)有:
- 微信群(不公開(kāi))
- github組織:https://github.com/organizations/twa-2016-todolist (各位同學(xué)快發(fā)過(guò)來(lái)你們的github帳號(hào))
- 論壇:Todolist學(xué)習(xí)任務(wù)討論區(qū) 有問(wèn)題在論壇上討論啊惊暴,老師們會(huì)一直盯著(為了防止惡意注冊(cè)饼丘,目前實(shí)行邀請(qǐng)制,大家把郵箱發(fā)給我)
當(dāng)然辽话,如果你們有自己的學(xué)習(xí)小組肄鸽,也可以建立自己的github組織或者項(xiàng)目。
找個(gè)學(xué)習(xí)的小伙伴
有了組織油啤,但是一個(gè)人學(xué)習(xí)還是太孤單典徘,找一個(gè)小伙伴吧。兩個(gè)人平時(shí)可以一起學(xué)習(xí)益咬、討論逮诲、寫(xiě)代碼。
對(duì)于這個(gè)任務(wù)來(lái)說(shuō)础废,找一個(gè)離自己近的汛骂,聊得來(lái)的,經(jīng)常能坐在一起交流的同學(xué)更合適一些评腺。
準(zhǔn)備博客
在學(xué)習(xí)的過(guò)程中帘瞭,大家都需要通過(guò)寫(xiě)博客來(lái)記錄和分享自己所學(xué)。由于大家在學(xué)差不多的東西蒿讥,所以可以互相關(guān)注蝶念,及時(shí)看到別人的成果抛腕,節(jié)省自己踩坑和卡住的時(shí)間。
有些同學(xué)在csdn或者cnblogs等地方有自己的博客媒殉,我推薦大家使用簡(jiǎn)書(shū)担敌,界面漂亮,寫(xiě)作體驗(yàn)非常好廷蓉,能讓人愛(ài)上寫(xiě)作全封。里面還可以使用markdown語(yǔ)法,寫(xiě)起來(lái)非常方便桃犬,另外還可以自動(dòng)保存刹悴,歷史版本比較,最贊的是可以發(fā)布的朋友圈讓人打賞攒暇!說(shuō)不定你寫(xiě)的東西解決了某個(gè)同學(xué)的問(wèn)題土匀,他一高興打賞你十塊八塊的。
(插播:本文求打賞:)
然后每個(gè)人都有了博客形用,怎么才能最快的知道別人寫(xiě)了什么新博客呢就轧?推薦使用一個(gè)叫inoreader的RSS訂閱服務(wù),它在安卓和蘋(píng)果下都有客戶端田度,比較好用妒御。把同學(xué)的博客地址貼上去,就可以訂閱了每币。一旦有新文章携丁,就可以第一時(shí)間看到琢歇。
這里需要注意的是兰怠,簡(jiǎn)書(shū)并沒(méi)有提供rss服務(wù),不過(guò)我們可以使用簡(jiǎn)書(shū)RSS生成器李茫,把簡(jiǎn)書(shū)上的用戶地址貼上去揭保,如果正確的話,就能生成相應(yīng)的RSS鏈接魄宏,貼到inoreader里就可以啦秸侣。
現(xiàn)在知道老師為什么能第一時(shí)間知道同學(xué)們寫(xiě)了什么新博客嗎?
建議大家像老師一樣宠互,把大家的博客(甚至我們的BBS)都訂閱上味榛,需要鏈接的可以找老師,到時(shí)候把種子文件導(dǎo)入一下就行了予跌,非常簡(jiǎn)單搏色。
Markdown
大家寫(xiě)博客肯定需要貼一大堆代碼,還有各種標(biāo)題券册、列表等等频轿,使用普通的富文本編輯器垂涯,又麻煩又難控制,最終的效果通常也不怎么好看航邢。
這時(shí)我們就可以花半個(gè)小時(shí)學(xué)習(xí)一下markdown耕赘,就可以高效的寫(xiě)出漂亮的博客了!而且這種語(yǔ)法在github/stackoverflow等各種地方都可以使用膳殷,受益終生啊操骡。
需要注意的是,markdown有很多增強(qiáng)版赚窃,我們通常使用的是github的版本当娱,參看這里:https://guides.github.com/features/mastering-markdown/
你也可以試試在線的markdown編輯器,可以實(shí)時(shí)看到效果考榨,方便學(xué)習(xí)跨细,比如:https://stackedit.io/
IntelliJ IDEA也提供了markdown插件,常用的編輯器如Sublime Text, atom也都有Markdown插件河质。
分解任務(wù)冀惭,制定計(jì)劃
前面我們明確了技術(shù)點(diǎn),但真正動(dòng)手的時(shí)候掀鹅,我們還需要對(duì)它們進(jìn)行進(jìn)一步的細(xì)化散休,制定出可執(zhí)行、可驗(yàn)證的更小的任務(wù)乐尊,才能動(dòng)手做戚丸。在這個(gè)過(guò)程中,我們往往會(huì)發(fā)現(xiàn)一些事前沒(méi)有考慮到的問(wèn)題扔嵌,產(chǎn)生更多的小任務(wù)限府。
這里需要注意兩點(diǎn):
最終的每一個(gè)小任務(wù)都是應(yīng)該能在半天左右完成(熟練后一到兩個(gè)小時(shí)內(nèi))。這樣可以讓我們?cè)谕粫r(shí)刻需要關(guān)注的事情更少痢缎,并且能利用好每天的碎片時(shí)間胁勺,及時(shí)完成,及時(shí)分享独旷,每天都能感覺(jué)到進(jìn)步署穗。
每個(gè)任務(wù)必須有輸出,輸出形式可以根據(jù)任務(wù)類(lèi)型來(lái)定嵌洼,比如圖形案疲、博客、代碼麻养、視頻褐啡、分享、甚至教給別人等等
概念探索類(lèi)的小任務(wù)
當(dāng)我們第一次看到一個(gè)名詞回溺,對(duì)它一無(wú)所知春贸,或者僅僅是聽(tīng)說(shuō)過(guò)而已混萝,我們應(yīng)該怎么辦?
不要慌張萍恕,也不要隨便找了一篇文章或者一本書(shū)就從第一頁(yè)一直讀下去逸嘀,而且要圍繞著這個(gè)東西,問(wèn)一些問(wèn)題等等:
- 它是什么允粤?
- 它能做什么崭倘?
- 它怎么來(lái)的?
- 它有什么重要概念类垫?
先對(duì)這些最基本的問(wèn)題做一定程度的發(fā)散司光,搜索資料(請(qǐng)使用google)獲得一些信息,同時(shí)還會(huì)得到一些新的問(wèn)題悉患,然后再做發(fā)散残家,直到感覺(jué)那些問(wèn)題或者答案跟我目前想學(xué)習(xí)的東西關(guān)系不大時(shí),就可以及時(shí)停止售躁,然后再針對(duì)最核心的概念與知識(shí)進(jìn)行深入學(xué)習(xí)坞淮。
這里以webpack為例,看小波老師是怎么學(xué)習(xí)的陪捷。首先小波老師提出了一堆最基礎(chǔ)的問(wèn)題:
然后找到了它們的答案:
同時(shí)又引出了新的問(wèn)題:
以及新問(wèn)題的答案:
我們可以看到回窘,其中有的問(wèn)題很早就結(jié)束了,比如“什么時(shí)候出現(xiàn)的市袖?”啡直,這可能是因?yàn)槠浯鸢覆⒉蝗菀姿训剑捎诓皇呛苤匾缘跃退懔恕?/p>
其它的問(wèn)題或者答案也可以根據(jù)我們的興趣酒觅、精力,以及它與我們當(dāng)前學(xué)習(xí)目標(biāo)的緊密程度驰怎,我們來(lái)決定是否繼續(xù)追問(wèn)下去阐滩。
比如二打,這里是小波老師的最終版本:
當(dāng)我們畫(huà)完上面這個(gè)圖時(shí)县忌,我們對(duì)于webpack在宏觀上就已經(jīng)有相當(dāng)程度的了解了,足以支持我們當(dāng)成當(dāng)前的學(xué)習(xí)任務(wù)(甚至都可以做個(gè)分享出來(lái))继效。然后我們就可以深入到內(nèi)部症杏,去研究它的核心概念和方法(一般在文檔中都會(huì)重點(diǎn)提到),畫(huà)出一個(gè)“概念關(guān)系圖”瑞信。
這里以redux為例(因?yàn)閞edux是必學(xué)厉颤,并且概念很多),給出相應(yīng)的“概念關(guān)系圖”:
從圖中我們可以看出凡简,里面是真實(shí)的類(lèi)或者方法的名字逼友,通過(guò)連線表示出來(lái)它們之間的相互關(guān)系精肃,通過(guò)數(shù)字來(lái)表示它們之間的調(diào)用順序。
對(duì)于我們要研究的東西帜乞,相信只要我們能畫(huà)出這兩張圖司抱,我們對(duì)它的理解就達(dá)到很好的程度,后面再結(jié)合Demo預(yù)研黎烈,相信很快就可以掌握习柠。對(duì)于jersey, mybatis,甚至mysql照棋,我想大家都可以用上這種方法资溃。
另外,在提問(wèn)烈炭、尋找答案溶锭、畫(huà)圖的過(guò)程中,建議大家和自己的小伙伴一起符隙,這樣效率更高暖途,效果更好。
對(duì)于這類(lèi)小任務(wù)膏执,我們的輸出通常是這些:
- 自學(xué)提問(wèn)圖
- 概念關(guān)系圖
- 相應(yīng)的博客
功能驗(yàn)證類(lèi)的小任務(wù)
當(dāng)我們經(jīng)歷了前面的畫(huà)圖探索之后驻售,雖然我們對(duì)它的整體情況有了一定程度的了解,但是我們還沒(méi)有用真實(shí)可執(zhí)行的代碼來(lái)驗(yàn)證更米,這時(shí)我們?cè)偌?xì)分出一些demo預(yù)研的小任務(wù)欺栗。
這些小任務(wù)通常要比較小,從簡(jiǎn)單到復(fù)雜征峦,每個(gè)小任務(wù)只完成一個(gè)功能集中且相對(duì)簡(jiǎn)單的任務(wù)(比如可以在一到兩個(gè)小時(shí)內(nèi)完整實(shí)現(xiàn))迟几。我們會(huì)創(chuàng)建一個(gè)新的目錄,從零開(kāi)始栏笆,創(chuàng)建一個(gè)獨(dú)立类腮、完整、僅包含要驗(yàn)證功能的最小代碼的一個(gè)項(xiàng)目蛉加,然后把它push到github上蚜枢,僅自己使用或者分享給同學(xué)。
代碼中除了必要的代碼外针饥,還需要有一個(gè)README文件厂抽,里面用簡(jiǎn)潔的方式說(shuō)明這個(gè)項(xiàng)目是做什么的,怎樣配置和運(yùn)行丁眼,有什么注意的地方筷凤,以及相關(guān)的資料鏈接等。分享給別人后苞七,別人應(yīng)該不需要再來(lái)問(wèn)你藐守,就可以自己運(yùn)行起來(lái)挪丢。
在這個(gè)過(guò)程中,需要特別強(qiáng)調(diào)的幾點(diǎn):
項(xiàng)目命名非常重要卢厂,請(qǐng)盡量使用能夠突出主要目的的關(guān)鍵字吃靠。比如我想寫(xiě)一個(gè)最簡(jiǎn)單的react項(xiàng)目,那么名字可能是
react-hello-world-demo
足淆;如果想演示state的使用巢块,那么是react-state-demo
;如果想強(qiáng)調(diào)使用的是ES6中的class巧号,那么可以是react-es6-class-hello-world-demo
族奢。當(dāng)我們小項(xiàng)目越來(lái)越多時(shí),你會(huì)覺(jué)得這些命名實(shí)在太重要了丹鸿。每個(gè)項(xiàng)目要完成的功能一定要單一越走。不論是自己以后使用,還是分享給別人靠欢,如果項(xiàng)目中混合了多個(gè)功能廊敌,基本上就沒(méi)法使用,因?yàn)閯e人很難區(qū)分項(xiàng)目到底哪些代碼是為這個(gè)功能门怪,哪些是為那個(gè)功能骡澈,它們之間有沒(méi)有聯(lián)系≈揽眨可以多建一些項(xiàng)目肋殴,但是不要混合在一起。
-
README一定要有坦弟,但要簡(jiǎn)潔护锤。我們不必假設(shè)使用這個(gè)項(xiàng)目的是一個(gè)完全不了解它的小白,而應(yīng)該是有一定經(jīng)驗(yàn)的開(kāi)發(fā)人員酿傍。這樣烙懦,readme中可能給出一些關(guān)鍵的命令,以及一些需要的注意的點(diǎn)赤炒,必要的時(shí)候再加一些擴(kuò)展閱讀的鏈接即可氯析。比如:
readme示例 依賴的版本號(hào)要明確。比如
package.json
中可霎,最好使用固定的版本號(hào)魄鸦,比如"react": "15.3.0"
,而不要使用默認(rèn)的"react": "^15.3.0"
癣朗。這是因?yàn)樵趈s的世界里,依賴庫(kù)的升級(jí)非常容易導(dǎo)致不兼容的現(xiàn)象旺罢,而當(dāng)我們?cè)谝粋€(gè)比較久的時(shí)間之后來(lái)運(yùn)行這些代碼旷余,很可能因?yàn)樘嗟膸?kù)有新版本而導(dǎo)致程序出錯(cuò)绢记。當(dāng)我們的demo項(xiàng)目越來(lái)越多后,為了方便對(duì)它們進(jìn)行分類(lèi)正卧,我們可以在github上創(chuàng)建一些組織(orgnization)蠢熄,用于存放不同語(yǔ)言的Demo。
如果你不知道怎么做炉旷,就到看看老師的demo签孔,找找感覺(jué)。我把我的兩個(gè)demo orgnization放在上里窘行,你會(huì)在上面發(fā)現(xiàn)很多有用的demo:
- https://github.com/js-demos (當(dāng)前超過(guò)100個(gè)demo)
- https://github.com/java-demos (當(dāng)前超過(guò)20個(gè)demo)
(注意饥追,剛才我在查看的過(guò)程中,發(fā)現(xiàn)不少項(xiàng)目的README上的名字或者內(nèi)容有錯(cuò)誤罐盔,歡迎同學(xué)們指出但绕。這是因?yàn)槲覄?chuàng)建了一些最基本的demo項(xiàng)目,然后在做新的demo時(shí)copy它們導(dǎo)致的)
對(duì)于這種類(lèi)型的任務(wù)惶看,我們的輸出通常是一個(gè)github上的demo(可分享給其他同學(xué))捏顺,以及,如果過(guò)程中我們遇到了坑或者有意思的東西纬黎,可以寫(xiě)一篇博客分享出來(lái)幅骄。
細(xì)分小任務(wù)
前方高能。
對(duì)于前面提到的技術(shù)點(diǎn)本今,讓我們對(duì)它們細(xì)分吧昌执!
前端
- 常用ES6語(yǔ)法(比如class, map/reduce/filter等)
- 使用webpack+babel來(lái)支持es6完整語(yǔ)法(如import/export)
- 使用React在頁(yè)面上輸出"Hello world"
- 使用React在頁(yè)面上創(chuàng)建嵌套的兩個(gè)組件
- 使用react-router來(lái)切換兩個(gè)內(nèi)容塊
- 使用CSS或者Bootstrap來(lái)進(jìn)行布局
- 使用React state的簡(jiǎn)單例子
- 純Redux(不使用react)的簡(jiǎn)單的”點(diǎn)擊按鈕數(shù)字加1“
- Redux + react簡(jiǎn)單的”點(diǎn)擊按鈕數(shù)字加1“
- 使用superagent向后臺(tái)發(fā)AJAX請(qǐng)求
- 使用mocha運(yùn)行最簡(jiǎn)單的測(cè)試
- 在測(cè)試中使用nock模擬http服務(wù)器
- express例子(方便寫(xiě)服務(wù)器端來(lái)配合前端)
- 使用gulp來(lái)運(yùn)行webpack打包
- 使用gulp運(yùn)行測(cè)試
后端
- 在IDEA中成功運(yùn)行一個(gè)Java程序,輸出"Hello World"诈泼,使用1.6的語(yǔ)法
- 在IDEA中寫(xiě)一個(gè)最簡(jiǎn)單的JUnit測(cè)試懂拾,使用JUnit提供的
assertEquals
- 在IDEA中寫(xiě)一個(gè)最簡(jiǎn)單的JUnit測(cè)試,使用assertj
- 使用gradle/maven來(lái)運(yùn)行一個(gè)最簡(jiǎn)單的hello world程序
- 使用gradle/maven來(lái)運(yùn)行一個(gè)最簡(jiǎn)單的測(cè)試
- 使用gradle/maven來(lái)運(yùn)行一個(gè)有多個(gè)第三方依賴庫(kù)的程序
- 使用jersey建立一個(gè)最簡(jiǎn)單的api铐达,返回hello world即可
- 使用spring運(yùn)行一個(gè)hello world岖赋,要使用到它的依賴注入功能
- 使用spring boot創(chuàng)建一個(gè)最簡(jiǎn)單的例子
- 使用mybatis來(lái)連接mysql數(shù)據(jù),執(zhí)行最簡(jiǎn)單的增刪改查功能
- 使用fastjson進(jìn)行對(duì)象與字符串之間的轉(zhuǎn)換
數(shù)據(jù)庫(kù)
- 在Linux下安裝和啟動(dòng)mysql數(shù)據(jù)庫(kù)
- 在Linux命令行下進(jìn)行常見(jiàn)的數(shù)據(jù)操作
- 通過(guò)命令行對(duì)數(shù)據(jù)庫(kù)進(jìn)行備份
- 安裝mysql桌面管理工具
- 在mysql桌面管理工具中操作數(shù)據(jù)庫(kù)
- 結(jié)合實(shí)例使用常用的SQL語(yǔ)句
工具
- 使用Webstorm進(jìn)行Javascript項(xiàng)目開(kāi)發(fā)的常用技巧
- 使用IntelliJ IDEA進(jìn)行Java項(xiàng)目開(kāi)發(fā)的常用技巧
- 如何把一個(gè)簡(jiǎn)單Javascript項(xiàng)目部署到Travis-CI上
- 如何把一個(gè)簡(jiǎn)單Java項(xiàng)目部署到Travis-CI上
- 如何把一個(gè)使用了mysql數(shù)據(jù)庫(kù)的Java項(xiàng)目部署到Travis-CI上
- 簡(jiǎn)書(shū)有什么功能瓮孙,如何切換成markdown唐断,如何生成rss
- Markdown的常用標(biāo)簽總結(jié)和示例
- inoreader介紹與使用
- postman的常用操作
- httppie的常用操作
其它
- 如何理解http協(xié)議
- 常用的http code介紹
- 對(duì)Restful的理解
上面的這些任務(wù)是我拍腦袋想出來(lái)的,可能并不全杭抠,以后會(huì)根據(jù)大家實(shí)際遇到的情況進(jìn)行添加和修改脸甘。當(dāng)然你也可以根據(jù)自己的情況,創(chuàng)建不同的小任務(wù)偏灿,這里僅供參考丹诀。
對(duì)于這里的每個(gè)小任務(wù),大家可以根據(jù)自己的情況,來(lái)決定輸出是什么铆遭。只需要記住最重要的一點(diǎn):你的輸出一定是可以分享給其他人的東西硝桩。
如何完成一個(gè)需要寫(xiě)代碼的小任務(wù)
對(duì)于上面需要寫(xiě)代碼的小任務(wù),我們應(yīng)該怎么做枚荣?
沒(méi)錯(cuò)碗脊,你已經(jīng)測(cè)到了,就是我們?cè)谟?xùn)練營(yíng)中已經(jīng)練習(xí)了一遍又一遍的“基于管道圖的任務(wù)分解大法”橄妆,或者用英文“基于pipeline的tasking大法”衙伶。
已經(jīng)不記得的同學(xué),請(qǐng)閱讀下面幾篇文章害碾,這都是仝校長(zhǎng)的智慧結(jié)晶:
- 像機(jī)器一樣思考(一)—— 宏觀的基礎(chǔ)
- 像機(jī)器一樣思考(二)—— 數(shù)據(jù)的細(xì)節(jié)
- 像機(jī)器一樣思考(三)—— 窮盡就是力量
- 像機(jī)器一樣思考(四)—— 一圖抵千言
- 像機(jī)器一樣思考(五)—— 第一個(gè)應(yīng)用
- 像機(jī)器一樣思考(六) —— 跨應(yīng)用思考
以及我們核心的做事方式:
同時(shí)矢劲,大家不要忘了:
- 小步快跑
- 估時(shí)編程,反思問(wèn)題
- Test First
那我什么時(shí)候才能開(kāi)始做Todolist蛮原?
前面列出來(lái)了這么多的小任務(wù)卧须,我應(yīng)該把它們?nèi)迹ɑ蛘叽蟛糠侄迹┱莆找院蟛砰_(kāi)始做Todolist嗎?
當(dāng)然不是儒陨,如果這樣的話花嘶,不知道要等多久了。蹦漠。椭员。
正確的做法是,我們需要開(kāi)兩條線并行前進(jìn):
- Todolist線:完成林老師要求的Todolist功能
- 小任務(wù)線:分解小任務(wù)進(jìn)行demo預(yù)研
我們應(yīng)該從Todolist線開(kāi)始笛园,如果我們沒(méi)有遇到問(wèn)題隘击,那就繼續(xù)實(shí)現(xiàn)功能;當(dāng)我們遇到了不會(huì)的東西時(shí)研铆,離開(kāi)Todolist線埋同,把剛才遇到的問(wèn)題抽象成一個(gè)或多個(gè)簡(jiǎn)單的小問(wèn)題,轉(zhuǎn)到小任務(wù)線棵红,把它們實(shí)現(xiàn)出來(lái)凶赁;然后再回到Todolist線,用剛才學(xué)到的知識(shí)繼續(xù)實(shí)現(xiàn)逆甜。
如果同學(xué)們組成了學(xué)習(xí)小組虱肄,我們就可以互相分享小demo,這樣就可以省掉了很多自己研究的時(shí)間交煞,同時(shí)也有了人可以討論咏窿。
有問(wèn)題及時(shí)提
知識(shí)至少分為兩種:
- 信息型的:沒(méi)法推理出來(lái),需要搜索或者別人告訴
- 研究型的:可以根據(jù)已有信息推理出來(lái)素征,需要自己花時(shí)間去想去嘗試
對(duì)于初學(xué)者來(lái)說(shuō)集嵌,最浪費(fèi)我們時(shí)間的往往都是信息型的知識(shí)萝挤。比如需要某個(gè)功能但是不知道什么庫(kù)可以做到,怎么引用它纸淮,IDE怎么配置平斩,有什么注意事項(xiàng)亚享,哪里有什么坑咽块,等等,往往一卡就是幾個(gè)小時(shí)欺税。這時(shí)候我們需要做的不是自己悶著頭侈沪,不搞定不睡覺(jué),而是及時(shí)提問(wèn)晚凿,說(shuō)不定幾分鐘就搞定了呢亭罪?
我們有哪些提問(wèn)和信息獲取渠道呢?
- stackoverflow
- 你身邊的同學(xué)
- 我們專門(mén)建立的bbs
- 微信群
- 同學(xué)的博客和項(xiàng)目demo
- more ...
比如我可以提前告訴大家一個(gè)坑:我創(chuàng)建了一個(gè)哪怕非常簡(jiǎn)單的gradle項(xiàng)目歼秽,下載依賴居然卡幾個(gè)小時(shí)应役,把我坑了很久。后來(lái)解決了惰爬,發(fā)現(xiàn)只要在build.gradle
里加上一個(gè)jar包倉(cāng)庫(kù)的配置即可积蜻。當(dāng)你遇到了同樣的問(wèn)題撵孤,問(wèn)我的話,一分鐘就能解決袍祖,不問(wèn)的話,谢揪,蕉陋,哈哈
另外我們?cè)赽bs專門(mén)創(chuàng)建了To-Do List 學(xué)習(xí)任務(wù)討論版,有問(wèn)題第一時(shí)間上去問(wèn)啊拨扶,老師們都盯著呢凳鬓。(已經(jīng)把這個(gè)bbs加入到我的inoreader閱讀器里了)
學(xué)到了東西及時(shí)分享
再?gòu)?qiáng)調(diào)一下,當(dāng)你學(xué)到了東西患民,不論是完成了小任務(wù)缩举,還是解決了一個(gè)問(wèn)題,一定要花時(shí)間把它分享出來(lái)酒奶。比如寫(xiě)博客蚁孔,給同學(xué)講,在網(wǎng)上直播寫(xiě)代碼惋嚎,或者在實(shí)驗(yàn)室定期組織分享活動(dòng)杠氢,都可以。
也許這會(huì)花掉你的一些時(shí)間另伍,但是要知道鼻百,這在鍛煉你的軟技能:你的思考能力绞旅、信息整理能力、寫(xiě)作能力温艇、表達(dá)能力因悲、同理心、公眾演講能力勺爱,你的收獲可能會(huì)比你寫(xiě)的那些代碼更大晃琳!
及時(shí)關(guān)注其他同學(xué)的輸出
像老師一樣,在手機(jī)上安裝一個(gè)RSS閱讀器(推薦inoreader)琐鲁,把同學(xué)們的博客卫旱,github,以及bbs全都加進(jìn)去围段,這樣當(dāng)你沒(méi)事的時(shí)候顾翼,就可以打開(kāi)看一眼,也許只花10秒種就可以讓你省掉幾個(gè)小時(shí)奈泪。
最后适贸,祝大家能通過(guò)這一個(gè)簡(jiǎn)單的Todolist學(xué)習(xí)任務(wù),真正學(xué)到項(xiàng)目所需要的各種技能涝桅。