像搭積木一樣寫程序

這篇文章實際寫于3年前事扭,當(dāng)時我在做一個棋牌游戲的項目,偶然的機(jī)會接觸到scratch(那時少兒編程還沒那么流行)桶癣,給我寫程序帶來了一些靈感拥褂,于是寫下了下面的文字。原文是這樣的:

引子

我最近在做一個名叫牛牛的棋牌項目牙寞,首期包含六種玩法饺鹃,而且客戶要求交貨的周期比較短,只有不到一個月的時間。由于每種玩法的邏輯和流程并不相同悔详,所以按照常規(guī)的實施方法镊屎,可能需要創(chuàng)建六個代碼工程,每個工程重復(fù)相同的基建伟端,然后分別去實現(xiàn)各自的數(shù)據(jù)和算法杯道。可想而知整個項目的工程總量是比較大的(全部代碼可能有幾萬行责蝠,但實際差異化部分還不到1萬行)党巾,代碼的過度冗余也非常不便于項目后期的維護(hù)。

話又說回來霜医,多個玩法多個工程齿拂,其實業(yè)內(nèi)的外包和中小團(tuán)隊多這么干,因為可以并行開發(fā)肴敛,快速交付署海、收款。我也想這么弄啊医男,無耐團(tuán)隊就我一個后端人員砸狞,我必須在工程量、時間和可維護(hù)性方面綜合做個權(quán)衡镀梭。我花了大半天的時間來思考刀森,最終還是決定將所有玩法融合到一個工程中,這是個富有挑戰(zhàn)性的事情(因為之前有做過四個玩法的牛牛报账,當(dāng)時沒想好研底,是按多工程來完現(xiàn)的)。

scratch積木式編程

為了培養(yǎng)兒子的編程興趣透罢,前不久我從朋友那了解到scratch榜晦,它是麻將理工學(xué)院開發(fā)的一款面向兒童和青少年的簡易編程工具,有興趣的朋友可以百度一下羽圃。

這個軟件的特點是乾胶,學(xué)習(xí)者可以不需要認(rèn)識英文,不需要使用鍵盤朽寞,只需要會用鼠標(biāo)進(jìn)行簡單的電腦操作胚吁,會在電腦上畫圖形搭積木,就能制作出富有趣味的動畫和小游戲愁憔。

麻省的工程師是牛B的腕扶,他們能想到將編程中的各種常用元素,如流程控制吨掌、事件檢測半抱、變量脓恕、鏈表等極度抽象的東西,用圖形化積木塊的方式表達(dá)出來窿侈,真佩服他們的創(chuàng)作能力炼幔。

下面簡單認(rèn)識下scratch的圖形積木:

這些是流程控制的,當(dāng)我第一眼看到時史简,反正我笑了乃秀。

image

這個是控制事件的,其中的廣播就是程序的同步機(jī)制圆兵。

image

關(guān)于積木塊的搭法跺讯,認(rèn)清他們的用途之后,組裝起來比較輕松殉农。下圖是我制做的一個簡單的貓貓撞墻(控制貓貓在兩個墻體之間來回奔跑)的小程序刀脏,圖片右邊就是積木塊的組裝效果。

image

牛牛的積木式設(shè)計

牛牛面臨的問題超凳,就是玩法太多愈污,每個玩法的流程又不大一樣,導(dǎo)致程序非常不易組織轮傍。理論上暂雹,如果可以將每個玩法的代碼解藕,切割成一塊塊的创夜,用搭積木的方式重新組合杭跪,也許可以解決問題。

首先挥下,讓我們來設(shè)計積木塊揍魂,如圖:

image

每個積木塊具有兩個指針:“下個積木塊”和“兄弟積木塊”桨醋∨镂粒“兄弟積木塊”指的是當(dāng)某個操作執(zhí)行不成功時,可由同級的積木塊執(zhí)行完成喜最,相當(dāng)于并聯(lián)的概念偎蘸,而“下個積木塊”相當(dāng)于串聯(lián)的概念。

多個積木塊如何組裝呢瞬内?舉個例子迷雪,有三個積木塊,塊1和塊2并聯(lián)虫蝶,然后串聯(lián)塊3章咧,預(yù)期的結(jié)果是塊1和塊2任一個執(zhí)行成功后轉(zhuǎn)到塊3,實際有可能塊1不成功能真,轉(zhuǎn)到塊2執(zhí)行后再到塊3赁严,如下圖所示:

image

牛牛的積木式編程

按照積木塊的設(shè)計方法扰柠,我對牛牛項目主要的玩法和流程分析后畫了個圖,如下:

image

圖中每一個方塊代碼一個步驟疼约,表示一個積木塊卤档,積木塊之間用線條相聯(lián)。程序設(shè)計時程剥,積木塊之間應(yīng)該解耦劝枣,每個積木塊僅僅實現(xiàn)單純的功能,如果某個積木塊比較復(fù)雜织鲸,牽扯到多個流程舔腾,那么可能就必須切分。

下面我摘取牛牛項目的部分積木塊定義和組裝代碼昙沦,如下:

image
image

另外琢唾,考慮到服務(wù)器重啟或者升級維護(hù),牛牛的積木還支持?jǐn)帱c恢復(fù)盾饮,實際運維時采桃,玩家基本感覺不到任何異常。

image

結(jié)語

搭積木是很簡單的一件事情丘损,是人類的啟蒙教育方式之一普办,而寫程序是很復(fù)雜很枯燥的一件事情,國外的教育專家用搭積木的方法徘钥,引導(dǎo)小學(xué)生自主編程衔蹲,化復(fù)雜為簡單,化枯燥為生動呈础。同樣的舆驶,由淺入深,舉一反三而钞,當(dāng)我們在工作中沙廉、生活中遇到問題的時候,也可以想想積木臼节,這個人類認(rèn)知的起源撬陵,也許會再一次帶給我們靈感。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末网缝,一起剝皮案震驚了整個濱河市巨税,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌粉臊,老刑警劉巖草添,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異扼仲,居然都是意外死亡远寸,警方通過查閱死者的電腦和手機(jī)促王,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來而晒,“玉大人蝇狼,你說我怎么就攤上這事〕酰” “怎么了迅耘?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長监署。 經(jīng)常有香客問我颤专,道長,這世上最難降的妖魔是什么钠乏? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任栖秕,我火速辦了婚禮,結(jié)果婚禮上晓避,老公的妹妹穿的比我還像新娘簇捍。我一直安慰自己,他們只是感情好俏拱,可當(dāng)我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布暑塑。 她就那樣靜靜地躺著,像睡著了一般锅必。 火紅的嫁衣襯著肌膚如雪事格。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天搞隐,我揣著相機(jī)與錄音驹愚,去河邊找鬼。 笑死劣纲,一個胖子當(dāng)著我的面吹牛逢捺,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播味廊,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼蒸甜,長吁一口氣:“原來是場噩夢啊……” “哼棠耕!你這毒婦竟也來了余佛?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤窍荧,失蹤者是張志新(化名)和其女友劉穎辉巡,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蕊退,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡郊楣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年憔恳,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片净蚤。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡钥组,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出今瀑,到底是詐尸還是另有隱情程梦,我是刑警寧澤,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布橘荠,位于F島的核電站屿附,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏哥童。R本人自食惡果不足惜挺份,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望贮懈。 院中可真熱鬧匀泊,春花似錦、人聲如沸朵你。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽撬呢。三九已至伦吠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間魂拦,已是汗流浹背毛仪。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留芯勘,地道東北人箱靴。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像荷愕,于是被迫代替她去往敵國和親衡怀。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,446評論 2 348