設(shè)計(jì)師學(xué)編程?從五個(gè)思維訓(xùn)練開始

編程語言雖說跟自然語言類似,但有一些本質(zhì)的區(qū)別,如果不理解這些區(qū)別,編程的檻始終過不去。這篇文章嘗試把幾個(gè)最要緊的概念提取出來咀嚼消化。

一、變量 vs 替身

例如:想要寫個(gè)程序,實(shí)現(xiàn):周一至至周日顯示不同的早餐菜單。

我們需要有一個(gè)東西來代表“今天是周幾”。可能性有 7 種,但是活在當(dāng)下的只有 1 個(gè),于是需要一個(gè)“替身”,框定它的“變身”范圍是周一至周日,然后讓它根據(jù)條件變變變……

這是對(duì)編程思維的第一個(gè)訓(xùn)練:【抽象】將某種類型、某個(gè)范圍內(nèi)變化的“實(shí)例”,抽象為一個(gè)“代號(hào)”。

坑:

  • 變量命名

    大媽在上周的 QA 里面提過,這幾乎是一個(gè)終極問題…… 我的理解是,這個(gè)命名同時(shí)承載了占位符、運(yùn)算對(duì)象、功能解釋、類型暗示、作用域暗示 等等的使命,于是短了燒腦,長(zhǎng)了燒眼……

  • 理解成本

    雖然程序是自己寫的,變量是自己命名的,但是每一次回看程序時(shí),都存在“翻譯”變量名的隱性步驟,這個(gè)步驟消耗了很多認(rèn)知資源,相當(dāng)于腦子里面得有很多對(duì)牽線木偶,運(yùn)行前是一個(gè),運(yùn)行后是另一個(gè)……相信這是老手感受不到/回憶不起的一種狀態(tài)。尤其當(dāng)程序長(zhǎng)了以后,變量越來越多,記憶變量和管理變量都成問題,還容易犯看錯(cuò)變量名的錯(cuò)誤。

填坑:

  • 定義函數(shù)時(shí)想想丫的用途和變化范圍,加注釋
  • 避免用三個(gè)字母以內(nèi)的命名,使用一個(gè)月后再來仍然能快速理解的命名
  • 變量多的話,分一下組,或者動(dòng)手畫一下它們的關(guān)系幫助理清思路

二、數(shù)組 vs 分格抽屜

替身雖好,但是有時(shí)候還是不好管理,執(zhí)行命令起來效率有點(diǎn)兒低,因?yàn)橥|(zhì)性不夠高(雖然替身都是人,但可能年齡、愛好、性取向、左撇右撇、甜豆花派咸豆花派等等都不盡相同)、以及沒有按順序排列。

于是我們需要一個(gè)更“軍事化”的組織——數(shù)組。數(shù)組就像一個(gè)分格抽屜:



從外面看來,一個(gè)抽屜就是一個(gè)東西(里面能裝很多東西);打開抽屜,里面是按照順序放置的同一類東西,每一格都有位置編號(hào)(指針)。

這是對(duì)編程思維的第二個(gè)訓(xùn)練:【壓縮】對(duì)同樣的東西,折疊再折疊,收納再收納。

坑:

  • 抽象

    因?yàn)槌橄螅菀滓姵閷隙灰姼褡印懴聰?shù)組太輕松 array[] ,但是一旦加入到運(yùn)算中(尤其是循環(huán)),腦內(nèi)演化就容易一團(tuán)漿糊。

  • 抽屜里面的抽屜

    復(fù)雜性上升一維,需要先辨別是哪個(gè)抽屜,然后再定位到抽屜內(nèi)的單元。

    小抽屜為大抽屜增加了多樣性,一個(gè)抽屜放馬卡龍,一個(gè)放銅鑼燒,一個(gè)放...益力多…………

    至于N維數(shù)組……

填坑:

  • 克服對(duì)數(shù)組的心理恐懼,多使用這么簡(jiǎn)潔高效的工具,嗯
  • 為對(duì)抗數(shù)組高濃縮占位符的假象,見到數(shù)組自動(dòng)腦補(bǔ)幾個(gè)空行給它
  • 對(duì)循環(huán)語句中的數(shù)組尤其警惕,試著畫一畫?

數(shù)組一直是我的檻,回頭需要再補(bǔ)看視頻和笨方法,專門寫寫數(shù)組的筆記。

三、判斷+循環(huán) vs 防偽點(diǎn)鈔機(jī)

嗯?點(diǎn)鈔機(jī)?

點(diǎn)鈔機(jī)工作特點(diǎn):根據(jù)設(shè)定的條件,重復(fù)同一步驟。這正是 “判斷+循環(huán)”的精髓。感謝它將我們從機(jī)械勞動(dòng)中解放出來。

下面的代碼雖然只有幾行,但是綜合了變量、運(yùn)算、循環(huán)判斷、數(shù)組等等,濃縮是濃縮,坑也很多……

for shapes in shape_list:
    if shapes[1] == "circle":
        canvas.draw_circle(shapes[0],Radius, 1, "Black",shapes[2])
    else:
        canvas.draw_polygon(shapes[0], 1, "Black",shapes[2])

以上對(duì)編程思維的第三個(gè)訓(xùn)練:【自動(dòng)化】找出條件,識(shí)別共同步驟,循環(huán)處理,實(shí)現(xiàn)量變到質(zhì)變。

坑:

  • 抽象
    循環(huán)里面如果有個(gè)函數(shù)調(diào)用,再來個(gè)二維數(shù)組,腦子馬上就漿糊了

填坑:

四、函數(shù) vs 百寶袋

每個(gè)函數(shù),都是哆啦A夢(mèng)百寶袋里面的一件寶物!

寶物的特點(diǎn)是什么?實(shí)現(xiàn)大雄的一個(gè)愿望。至于怎么實(shí)現(xiàn)的,大雄并不用擔(dān)心。當(dāng)然,想實(shí)現(xiàn)多個(gè)愿望,最好不要指望于一件寶物,那樣往往會(huì)出bug……

說回最開始一周早餐菜單的例子。要 print 不同的菜單,我們需要先判斷今天是周幾,這件事可以寫到一個(gè)函數(shù) whatIsTheDay() 中。以后一旦要做這件事,就 call 一下這個(gè)函數(shù),外包這項(xiàng)任務(wù)給它,自己就翹著二郎腿等著它給出結(jié)果。一個(gè)程序中有多個(gè)函數(shù),也就成了一個(gè)百寶袋。

函數(shù)的強(qiáng)大之處還在于,可以通過參數(shù)實(shí)現(xiàn)定制化需求。比如我們?cè)诤瘮?shù) whatIsTheDay(year,month,date) 加入三個(gè)參數(shù) year 、month 和 date ,告訴函數(shù):“我想知道 某年、某月、某日 是周幾 ”

以上是對(duì)編程思維的第四個(gè)訓(xùn)練:【模塊化】分產(chǎn)承包,責(zé)任到戶;結(jié)果導(dǎo)向,過程自理。

坑:

  • 貴圈太亂

    函數(shù)的調(diào)用關(guān)系復(fù)雜,你調(diào)我,它調(diào)你,你調(diào)你自己……

  • 參數(shù)傳遞和返回結(jié)果

    參數(shù)傳遞引入了新變量(認(rèn)知內(nèi)存中又要處理多一套對(duì)應(yīng)關(guān)系 >_<),容易跟全局變量、函數(shù)內(nèi)的局部變量混淆。而返回結(jié)果又是一個(gè)隱式的變量,不可見但影響重大。

  • 交叉并行路徑

    如果只有一個(gè)明確起點(diǎn),調(diào)用關(guān)系也單純的程序就很好辦。但事實(shí)往往是有多個(gè)起點(diǎn)入口,調(diào)用關(guān)系也復(fù)雜,偏偏程序是線性寫下來的,不能按照從頭到尾的順序去讀。于是到底程序從哪里開始,zeng 地躥到了哪里,很讓人頭疼……

  • 自定義函數(shù)和內(nèi)置函數(shù)

    內(nèi)置函數(shù)的說法不對(duì),因?yàn)槟菚r(shí)還沒有了解類,所以覺得類似frame.start()這種東西從哪來的,就把丫們看成內(nèi)置函數(shù)。因?yàn)檠緜儾皇亲约河H生的,所以經(jīng)常覺得陌生,尤其搞不清楚丫們之間的關(guān)系。

填坑:

  • 明確函數(shù)功能,加注釋
  • 牢記函數(shù)的輸入(函數(shù)參數(shù))和輸出(返回值)
  • 多進(jìn)行局部調(diào)試,print 函數(shù)返回值
  • 函數(shù)之間的調(diào)用關(guān)系,通過可視化幫助理解

五、類 vs 招聘職位

每一個(gè)類都包含屬性(變量和值)和行為(函數(shù))。對(duì)比一下:

JD(招聘職位描述):

WXG01-微信高級(jí)交互設(shè)計(jì)師(廣州)

工作職責(zé):

- 參與微信相關(guān)產(chǎn)品從概念到原型的設(shè)計(jì)過程,輸出相關(guān)設(shè)計(jì)文檔;
- 對(duì)產(chǎn)品持續(xù)進(jìn)行設(shè)計(jì)優(yōu)化,提升用戶體驗(yàn);
- 協(xié)調(diào)和推動(dòng)可用性測(cè)試及用戶研究,以驗(yàn)證現(xiàn)有和將來的功能設(shè)計(jì);
- 負(fù)責(zé)設(shè)計(jì)前瞻性的相關(guān)研究。

工作要求:

- 工業(yè)設(shè)計(jì)、心理學(xué)、計(jì)算機(jī)、視覺傳達(dá)相關(guān)背景,本科及以上學(xué)歷;
- 3年以上工作經(jīng)驗(yàn),主導(dǎo)過1000萬+用戶的移動(dòng)互聯(lián)網(wǎng)產(chǎn)品的設(shè)計(jì),具備多領(lǐng)域設(shè)計(jì)工作相關(guān)經(jīng)驗(yàn),如產(chǎn)品設(shè)計(jì)、硬件設(shè)計(jì)、視覺設(shè)計(jì)等;
- 對(duì)互聯(lián)網(wǎng)交互設(shè)計(jì)有深刻理解,具備完整的理論和技術(shù)體系;
- 優(yōu)秀的產(chǎn)品意識(shí),良好的全局觀、前瞻性和判斷力;
- 同理心強(qiáng)烈,擅長(zhǎng)換位及獨(dú)立思考,卓越的情景還原能力;
- 優(yōu)秀的溝通、組織和項(xiàng)目管理能力;
- 性格樂觀向上,興趣愛好廣泛。

類:

class Character:
   def __init__(self, name, initial_health):   # __int__ 初始化對(duì)象
       self.name = name                 # self 是新的對(duì)象的引用
       self.health = initial_health # name 和 health 是self對(duì)象中的域(field)
       self.inventory = []
       
   def __str__(self):
       s  = "Name: " + self.name
       s += " Health: " + str(self.health)
       s += " Inventory: " + str(self.inventory)
       return s
   
   def grab(self, item):            # methond defines the behaviors of objects
       self.inventory.append(item)
       
   def get_health(self):            # method 所有方法的第一個(gè)參數(shù)都是self
       return self.health

工作要求其實(shí)就相當(dāng)于類的“屬性”,作為這類人,本身需要具備什么樣的條件和素質(zhì);工作職責(zé)相當(dāng)于類的“行為”,這類人要干什么事情。

類和函數(shù)的區(qū)別在于,類只能操作某個(gè)類型的對(duì)象,而不能通過其他方法直接被調(diào)用。

面向?qū)ο缶幊痰膹?qiáng)大之處,對(duì)于一個(gè)類,理解其接口和已實(shí)現(xiàn)的方法,就可以使用了。

**這是對(duì)編程思維的第五個(gè)訓(xùn)練:【面向?qū)ο蟆浚捍虬尚停庋b上架 **

坑:還沒有真正練習(xí)過 囧,待踩。

今天先到這~ 可能有很多不恰當(dāng)?shù)念悇e,請(qǐng)各位程序猿輕拍~


00的公眾號(hào),更多分享醞釀中……
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,002評(píng)論 6 542
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,400評(píng)論 3 429
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,136評(píng)論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,714評(píng)論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,452評(píng)論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,818評(píng)論 1 328
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,812評(píng)論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,997評(píng)論 0 290
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,552評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,292評(píng)論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,510評(píng)論 1 374
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,035評(píng)論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,721評(píng)論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,121評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,429評(píng)論 1 294
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,235評(píng)論 3 398
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,480評(píng)論 2 379

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,722評(píng)論 25 708
  • 思念就像死亡: 突然其來, 不容置疑, 并不讓人愉快, 卻算不得一種病。
    郭綠獅閱讀 188評(píng)論 0 1
  • 回想這一周吧,我關(guān)注最多的就是心理學(xué),精神病,量子論,百慕大三角這類比較神秘的東西。當(dāng)然,這一切都要從那本《天才在...
    Vitawen閱讀 332評(píng)論 0 2