最困難的是我到底要寫什麼
其實這個階段也從老師身上學習了不少知識,以我本身來說,這時候我會很想要試試看我是不是能把老師之前出的作業,亦或者是把自己的想法自己做出來,但,最難的是我開如何起頭?我該如何從哪個功能開始繕寫?
這就很像我大學時期學的力學或工數,我們了解也背了許多方法和公式,這些都不難,但難就難在我到底要使用哪些公式?尤其是編程是無限多的使用方法,也沒有所謂的正確解答。
小邏輯分享
老實說這次上課的兩個範例對我來說實在是太艱難了我實在分享不出一個技術上的東西,但我可以分享的是思想上的經驗。
這次老師上課是分享豪華版的電梯和踩地雷,就稍微分享老師教導的邏輯。
當我想做這樣的電梯以我的經驗會完全不知道如何下手,但我們把所有功能不斷地切成最小的細項,並且把大雛形雕出來。
1.電梯按鈕– 當按哪一層樓的數字則顯示板可以顯示該數字。
2.電梯門– 做好簡陋的電梯門與控制板的排版。
3.實作電梯主功能– 當我按了五樓,顯示板並不會直接跳到五樓而是到二>三>四>五樓依序上去。
4.電梯門開關– 到達指定樓層可以把電梯門打開,數秒後關閉。
做到這邊雛形出來了,再來就是逐漸把額外功能和樣板再一一加上去,這時候又可以深刻體會到Github版本控制的好處了,我們可以隨時的掌握好每一個功能的完善,逐一測試和處理,像是我要做一個功能是一次點多個樓層並且可以依序到達各個樓層。
這裡讓我印象深刻的是平日的生活中我們覺得這只是一個功能,但對程式語言來說這是好幾個功能的總和,譬如說逐次依序開門是一個功能,判斷電梯是否往上而只先依序跑完往上的樓層才去跑往下的樓層是一個功能。
程式語言最有趣的地方就在這裡,譬如說我們覺得『走路』是一個功能,但對電腦程式語言來說我們必須把他分成右腳抬起>膝蓋彎曲>右腳往前>膝蓋伸直>右腳踏穩後再執行左腳,上述就分成了四,五個功能以上。
『如何把功能切成細項我覺得是學習編成超級重要的一環』
這讓我想起日本戰國時代宮本武藏的故事,他是一位單打獨鬥從來沒有輸過的一名浪人,但有一次有五十個人追殺他要怎麼打贏呢?宮本武藏很聰明的進入一條一次只能一個人通過的狹路上,發揮他的本領把敵人一一擊破。
寫編程的時候我們覺得很多日常生活中的東西只是『一個功能』,但對電腦程式來說他可能是好幾十個小功能的總和,對於新手來說我們單挑一個小功能都有可能慘敗了那如何要應付十個功能的轟炸呢?