Github 365天: 給你一年的時(shí)間奔滑,你會(huì)怎樣去提高你的水平

給你一年的時(shí)間艾岂,你會(huì)怎樣去提高你的水平?朋其?王浴?

Github 365
Github 365

正值這難得的sick leave(萬惡的空氣)脆炎,碼文一篇來記念一個(gè)過去的366天里。盡管想的是在今年里寫一個(gè)可持續(xù)的開源框架氓辣,但是到底這依賴于一個(gè)好的idea秒裕。在我的Github 孵化器 頁(yè)面上似乎也沒有一個(gè)特別讓我滿意的想法,雖然上面有各種不樣有意思的ideas钞啸。多數(shù)都是在過去的一年是完成的几蜻,然而有一些也是還沒有做到的。

說說標(biāo)題

盡管一直在Github上連擊看上去似乎是沒有多大必要的爽撒,但是人總得有點(diǎn)追求入蛆。如果正是漫無目的,卻又想著提高技術(shù)的同時(shí)硕勿,為什么不去試試哨毁?畢竟技術(shù)非常好、不需要太多練習(xí)的人只是少數(shù)源武,似乎這樣的人是不存在的扼褪。大多數(shù)的人都是經(jīng)過練習(xí)之后,才會(huì)達(dá)到別人口中的“技術(shù)好”粱栖。

這讓我想起了充斥著各種氣味的知乎上的一些問題话浇,在一些智商被完虐的話題里,無一不是因?yàn)槟切┤藢W(xué)得比別人早——哪來的天才闹究?所謂的天才幔崖,應(yīng)該是未來的智能生命一般,一出生什么都知道渣淤。如果并非如此赏寇,那只是說明他練習(xí)到位了。

練習(xí)不到位便意味著价认,即使你練習(xí)的時(shí)候是一萬小時(shí)的兩倍嗅定,那也是無濟(jì)于事的。如果你學(xué)得比別人晚用踩,在很長(zhǎng)的一段時(shí)間里(可能直到進(jìn)棺材)輸給別人是必然的——落后就要挨打渠退。就好像我等畢業(yè)于一所二本墊底的學(xué)校里,如果在過去我一直保持著和別人(各種重點(diǎn))一樣的學(xué)習(xí)速度脐彩,那么我只能一直是Loser碎乃。

需要注意的是,對(duì)你來說考上二本很難惠奸,并不是因?yàn)槟惚葎e人笨荠锭。教育資源分配不均的問題,在某種程度上導(dǎo)致了新的階級(jí)制度的出現(xiàn)晨川。如我的首頁(yè)說的那樣: THE ONLY FAIR IS NOT FAIR——唯一公平的是它是不公平的证九。我們可以做的還有很多——CREATE & SHARE删豺。真正的不幸是,因?yàn)闋I(yíng)養(yǎng)不良導(dǎo)致的教育問題愧怜。

于是在想明白了很多事的時(shí)候起呀页,便有了Re-Practise這樣的計(jì)劃,而365天只是中間的一個(gè)產(chǎn)物拥坛。

編程的基礎(chǔ)能力

雖說算法很重要蓬蝶,但是編碼才是基礎(chǔ)能力。算法與編程在某種程度上是不同的領(lǐng)域猜惋,算法編程是在編程上面的一級(jí)丸氛。算法寫得再好,如果別人很難直接拿來復(fù)用著摔,在別人眼里就是shit缓窜。想出能work的代碼一件簡(jiǎn)單的事,學(xué)會(huì)對(duì)其重構(gòu)谍咆,使之變得更易讀就是一件有意義的事禾锤。

于是,在某一時(shí)刻在Github上創(chuàng)建了一個(gè)組織摹察,叫Artisan Stack恩掷。當(dāng)時(shí)想的是在Github尋找一些JavaScript項(xiàng)目,對(duì)其代碼進(jìn)行重構(gòu)供嚎。但是到底是影響力不夠哈黄娘,參與的人數(shù)比較少。

重構(gòu)

如果你懂得如何寫出高可讀的代碼克滴,那么我想你是不需要這個(gè)的寸宏,但是這意味著你花了更多的時(shí)候在思考上了。當(dāng)談?wù)撝貥?gòu)的時(shí)候偿曙,讓我想起了TDD(測(cè)試驅(qū)動(dòng)開發(fā))。即使不是TDD羔巢,那么如果你寫著測(cè)試望忆,那也是可以重構(gòu)的。(之前寫過一些利用Intellij IDEA重構(gòu)的文章:提煉函數(shù)竿秆、以查詢?nèi)〈R時(shí)變量启摄、重構(gòu)與Intellij Idea初探內(nèi)聯(lián)函數(shù))

在各種各樣的文章里幽钢,我們看到過一些相關(guān)的內(nèi)容歉备,最好的參考莫過于《重構(gòu)》一書。最基礎(chǔ)不過的原則便是函數(shù)名匪燕,取名字很難蕾羊,取別人能讀懂的名字更難喧笔。其他的便有諸如長(zhǎng)函數(shù)、過大的類龟再、重復(fù)代碼等等书闸。在我有限的面試別人的經(jīng)歷里,這些問題都是最常見的利凑。

測(cè)試

而如果沒有測(cè)試浆劲,其他都是扯淡。寫好測(cè)試很難哀澈,寫個(gè)測(cè)試算是一件容易的事牌借。只是有些容易我們會(huì)為了測(cè)試而測(cè)試。

在我寫EchoesWorksLan的過程中割按,我盡量去保證足夠高的測(cè)試覆蓋率膨报。

lan
lan
EchoesWorks
EchoesWorks

從測(cè)試開始的TDD,會(huì)保證方法是可測(cè)的哲虾。從功能到測(cè)試則可以提供工作次效率丙躏,但是只會(huì)讓測(cè)試成為測(cè)試,而不是代碼的一部分束凑。

測(cè)試是代碼的最后一公里晒旅。所以,盡可能的為你的Github上的項(xiàng)目添加測(cè)試汪诉。

編碼的過程

初到TW時(shí)废恋,Pair時(shí)候總會(huì)有人教我如何開始編碼,這應(yīng)該也是一項(xiàng)基礎(chǔ)的能力扒寄。結(jié)合日常鱼鼓,重新演繹一下這個(gè)過程:

  1. 有一個(gè)可衡量、可實(shí)現(xiàn)该编、過程可測(cè)的目標(biāo)
  2. Tasking (即對(duì)要實(shí)現(xiàn)的目標(biāo)過程進(jìn)行分解)
  3. 一步步實(shí)現(xiàn) (如TDD)
  4. 實(shí)現(xiàn)目標(biāo)

放到當(dāng)前的場(chǎng)景就是:

  1. 我想在Github上連擊365天迄本。對(duì)應(yīng)于每一個(gè)時(shí)候段的目標(biāo)都應(yīng)該是可以衡量、測(cè)試的——即每天都會(huì)有Contributions课竣。
  2. 分解就是一個(gè)痛苦的過程嘉赎。理想情況下,我們應(yīng)該會(huì)有每天提交于樟,但是這取決于你的repo的數(shù)量公条,如果沒有新的idea出現(xiàn),那么這個(gè)就變成為了Contributions而Commit迂曲。
  3. 一步步實(shí)現(xiàn)

在我們實(shí)際工作中也是如此靶橱,接到一個(gè)任務(wù),然后分解,一步步完成关霸。不過實(shí)現(xiàn)會(huì)稍微復(fù)雜一些传黄,因?yàn)槭聞?wù)總會(huì)有搶占和優(yōu)先級(jí)的。

技術(shù)與框架設(shè)計(jì)

在上上一篇博客中《After 500: 寫了第500篇博客谒拴,然后呢?》也深刻地討論了下這個(gè)問題尝江,技術(shù)向來都是后發(fā)者優(yōu)勢(shì)。對(duì)于技術(shù)人員來說英上,也是如此炭序,后發(fā)者占據(jù)很大的優(yōu)勢(shì)。

如果我們只是單純地把我們的關(guān)注點(diǎn)僅僅放置于技術(shù)上苍日,那么我們就不具有任何的優(yōu)勢(shì)惭聂。而依賴于我們的編程經(jīng)驗(yàn),我們可以在特定的時(shí)候創(chuàng)造一些框架相恃。而架構(gòu)的設(shè)計(jì)本身就是一件有意思的事辜纲,大抵是因?yàn)槌绦騿T都喜歡創(chuàng)造。(ps:之前曾經(jīng)寫過這樣一篇文章拦耐,《對(duì)不起耕腾,我并不熱愛編程,我只喜歡創(chuàng)造》)

創(chuàng)造是一種知識(shí)的再掌握過程杀糯。

回顧一下寫echoesworks的過程扫俺,一開始我需要的是一個(gè)網(wǎng)頁(yè)版的PPT,當(dāng)然這類的東西已經(jīng)有很多了固翰,如impress.js狼纬、bespoke.js等等。分析一下所需要的功能:markdown解析器骂际、鍵盤事件處理疗琉、Ajax、進(jìn)度條顯示歉铝、圖片處理盈简、Slide。我們可以在Github上找到各式各樣的模塊太示,我們所要做的就是將之結(jié)合在一樣柠贤。在那之前,我試著用類似的原理寫(組合)了Lettuce先匪。

組合相比于創(chuàng)造過程是一個(gè)更有挑戰(zhàn)性的過程,我們需要在這過程去設(shè)計(jì)膠水來粘合這些代碼弃衍,并在最終可以讓他工作呀非。這好比是我們?cè)谄綍r(shí)接觸到的任務(wù)劃分,每個(gè)人負(fù)責(zé)相應(yīng)的模塊,最后整合岸裙。

想似的我在寫lan的時(shí)候猖败,也是類似的,但是不同的是我已經(jīng)設(shè)計(jì)了一個(gè)清晰的架構(gòu)圖降允。

Lan IoT
Lan IoT

而在我們實(shí)現(xiàn)的編碼過程也是如此恩闻,使用不同的框架,并且讓他們能工作剧董。如早期玩的moqi.mobi幢尚,基于Backbone、RequireJS翅楼、Underscore尉剩、Mustache、Pure CSS毅臊。在隨后的時(shí)間里理茎,用React替換了View層,就有了backbone-react的練習(xí)管嬉。

技術(shù)同人一樣皂林,需要不斷地往高一級(jí)前進(jìn)。我們只需要不斷地Re-Practise蚯撩。

領(lǐng)域與練習(xí)

說業(yè)務(wù)好像不太適合程序員的口味础倍,那就領(lǐng)域吧。不同行業(yè)的人求厕,如百度著隆、阿里、騰訊呀癣,他們的領(lǐng)域核心是不一樣的美浦。

而領(lǐng)域本身也是相似的,這可以解釋為什么互聯(lián)網(wǎng)公司都喜歡互相挖人项栏,而一般都不會(huì)去華為浦辨、中興等非互聯(lián)網(wǎng)領(lǐng)域挖人。出了這個(gè)領(lǐng)域沼沈,你可能連個(gè)畢業(yè)生都不如流酬。領(lǐng)域、業(yè)務(wù)同技術(shù)一樣是不斷強(qiáng)化知識(shí)的一個(gè)過程列另。Ritchie先實(shí)現(xiàn)了BCPL語言芽腾,而后設(shè)計(jì)了C語言,而BCPL語言一開始是基于CPL語言页衙。

領(lǐng)域本身也在不斷進(jìn)化摊滔。

這也是下一個(gè)值得提高的地方阴绢。

其他

是時(shí)候?qū)戇@個(gè)小結(jié)了。從不會(huì)寫代碼艰躺,到寫代碼是從0到1的過程呻袭,但是要從1到60都不是一件容易的事。無論是刷Github也好(不要是自動(dòng)提交)腺兴,或者是換工作也好左电,我們都在不斷地練習(xí)。

而練習(xí)是要分成不同的幾個(gè)步驟页响,不僅僅局限于技術(shù):

  1. 編碼
  2. 架構(gòu)
  3. 設(shè)計(jì)
  4. 篓足。。拘泞。

ps: 寫于 2015.10.09

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末纷纫,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子陪腌,更是在濱河造成了極大的恐慌辱魁,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件诗鸭,死亡現(xiàn)場(chǎng)離奇詭異染簇,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)强岸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門锻弓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蝌箍,你說我怎么就攤上這事青灼。” “怎么了妓盲?”我有些...
    開封第一講書人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵杂拨,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我悯衬,道長(zhǎng)弹沽,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任筋粗,我火速辦了婚禮策橘,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘娜亿。我一直安慰自己丽已,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開白布买决。 她就那樣靜靜地躺著沛婴,像睡著了一般辰斋。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上瘸味,一...
    開封第一講書人閱讀 51,365評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音够挂,去河邊找鬼旁仿。 笑死,一個(gè)胖子當(dāng)著我的面吹牛孽糖,可吹牛的內(nèi)容都是我干的枯冈。 我是一名探鬼主播,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼办悟,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼尘奏!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起病蛉,我...
    開封第一講書人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤炫加,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后铺然,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體俗孝,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年魄健,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了赋铝。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡沽瘦,死狀恐怖革骨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情析恋,我是刑警寧澤良哲,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站绿满,受9級(jí)特大地震影響臂外,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜喇颁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一漏健、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧橘霎,春花似錦蔫浆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)洗显。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背捣辆。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工伴网, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親俄讹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,112評(píng)論 25 707
  • 升入高一已有大半年踪蹬,我下過無數(shù)次的決心,做過很多次的計(jì)劃臣咖,卻很少有堅(jiān)持下來的延曙。 這一次我不想再像以前一...
    顧喬葉閱讀 173評(píng)論 0 0
  • 最近沒事干時(shí)就想著寫點(diǎn)什么,之前一段迷電視劇亡哄,最近就迷上亂寫枝缔,不知道寫什么,就從身邊寫起吧蚊惯。在深圳因?yàn)?..
    Catherineliao閱讀 410評(píng)論 0 0
  • 一舉一動(dòng)截型,都是承諾趴荸,會(huì)被另一個(gè)人,看在眼里宦焦,記在心上发钝。 第一次來到簡(jiǎn)書,寫寫最近的事情波闹,這個(gè)小窩相對(duì)安靜酝豪,也充滿著...
    A白耳A閱讀 1,662評(píng)論 0 0
  • Nuts & Volts Magazine SERVO Magazine
    matheecs閱讀 194評(píng)論 0 0