程式初學者的失落之鑰 – “Computational Thinking”
在閱讀正文前,我希望大家先讀一篇: 程式初學者的失落之鑰 – “Computational Thinking”,了解什麼是 Computation Thinking。
新手大門檻:從來沒有拆解過東西
很多 Ruby on Rails 新手在終於掌握 Ruby on Rails 的基礎瞬間會很開心,但是在過後的兩個禮拜會陷入極度沮喪。
因為大家都發現,來來去去大家還只是會書上的那幾個功能,要寫出自己想要的功能或網站還是趨近於不可能。原因就在剛剛講的,初心者缺乏「Computational Thinking」(用電腦解決問題的思維)(也就是拆解與實做,並在實作的過程中找到資源)
我在去年的 Ruby on Rails 實戰班 裡面有教這個能力。這次在這篇文章內我試著再重新寫一次這樣的教學。
(1) 了解什麼是 User Story,學會把故事寫出來。
如果你要開發一個產品,試著不要以我要有 AA, BB, CC, DD 功能的這樣的想法去做產品。
而是以 這上面會有哪些操作的人,會在哪些場景,進行哪些操作。
用我要有「這一些」「功能」去開發的思維,在開始開發後的一天就會踢到大鐵板。在寫 Spec 時沒感覺,動工之後,新手才會瞬間意識到簡單功能背後是「一大堆小功能」,然後就絕望癱瘓了。
怎麼做出這個產品?兩句話形容他
1) 想徵才的人可以在這個網站上張貼工作
2) 想應徵的人可以在這個網站上瀏覽有哪些工作,並點進去瀏覽。
這是這網站最關鍵要做的事。
你可以用白話寫下來所有你想要做的事,然後除了核心以外的故事通通都刪掉。
(2) 聚焦
這個網站上的重點就是「工作」這個 model。你可以開始想「應徵者」要貼工作,那它需要填寫哪些欄位,把資料庫設計出來。
(3) 展開第一個簡單的 Story 「想徵才的人可以在這個網站上張貼工作」
「想徵才的人可以在這個網站上張貼工作」可以拆成
1) 「想徵才的人可以在這個網站上進入張貼界面填寫資料」
2) 「想徵才的人可以在這個網站上填寫資料後,在張貼之前先預覽內容」
3) 「想徵才的人可以在這個網站上填寫資料後,在張貼之後可以收到一封張貼確認信」
然後再重複 (2)「聚焦」動作,把這個 Story 最重要的事情完成,比如
- 製作表單
- 儲存到資料庫,但把資料設成作者自己能看到而已。(什麼?你說還沒有使用者設計,那這時候再加一條設計:網站上面要有使用者能夠登入的功能)
- 張貼之後,把工作設為大家都能看。
- 張貼之後,寄一封信給張貼者
一次只做一件事。做最重要的那件事。
你千萬不能做的事
- 直接寫我要 AA, BB , CC 功能。(動工之後會嚇死你)
- 在寫 Story 時,把未來「可能也可以有」的功能通通都一口氣加進去。(寫著寫著就迷路了)
- 懶得寫 Story 時,直接註明 抄 XXX 網站即可。(你會在抄襲時發現抄不完感到挫折)
- 覺得 Rails 很簡單,做某功能時想一口氣把相關的功能都做完。(千萬不要!)
- 覺得以後還要改很麻煩,乾脆先把擴充可能性都設計出來。(千萬不要!)
上面所強調的三個步驟,是讓開發者,專注只把眼前最重要的事情做完。而且你已經想過「眼前正在做的事是這個網站最重要的事」。
中間冒出來的都是魔鬼。
一旦你聚焦,Google 關鍵字就會變得很好下。
因為網路上絕對不可能有「How to build a e-commerce shop」的 stackoverflow step by step 教學。
但是如果你用 "credit card payment processing", "stripe integration", "shopping cart design", "checkout design" 這些關鍵字就一堆文章。