Think first, code later
以前看過一篇文章,是用拉麵店販賣機講解關於 api 的概念,我覺得作者很厲害,可以用淺顯易懂的方式讓當時還是前端麻瓜的我看得懂,那篇文章很推薦新手去看 -> 從拉麵店的販賣機理解什麼是 API
最近作者開了一系列的課 -> 先別急著寫 leetcode。因為我不是本科系出身,所以確實在解題時很容易遇上困難,不然就是會想很久。剛好看到這個課程就覺得蠻需要培養如何寫程式的思維,而且重點是免費喔!免費喔!免費喔!(很重要要說 3 次)所以這個系列會記載一些對我有幫助的筆記,希望能讓自己更進步一些。
會寫程式的人與初學者差別在哪?
會寫程式的人
- 先想解法
- 如果是有做過或是簡單的,就會直接構思出方法
- 如果比較困難或是複雜的問題,就把解法轉換成程式碼
初學者
- 邊寫邊想怎麼解
- 試著套用自己以前學過的語法
這個我自己蠻有感覺的,確實一開始會邊寫邊想,然後如果卡住了,就翻筆記看有什麼語法可以拿來套用,不過通常都沒什麼好下場就是了,哈。
在解題會有兩種情況
看題目覺得自己解得開
- 有效率的解開
- 有解開但是時間花較久
- 最後解不開
看題目就覺得看不懂
撇開第二種看不懂的情況,在看得懂的情形下,以我自己比較常遇到解不開的狀況是,一開始覺得應該可以怎麼做,可是最後不知道怎麼將想法轉換成程式碼,而講者推薦了一些做法。
推薦初學者寫程式的作法
首先看一道題目,然後按照以下的作法,題目是:
如何印出 1-100 之間的偶數?
想一下解法,不寫任何程式碼
先不要急著想寫 code,想如何一步一步解決的方法。
- 如何印出 1-100
- 如何判斷偶數
把解法寫成 pseudo code
虛擬碼(pseudo code)在維基百科的解釋:
更類似自然語言。它是半形式化、不標準的語言。我們可以將整個演算法執行過程的結構用接近自然語言的形式(這裡可以使用任何一種作者熟悉的文字,例如中文、英文,重點是將程式的意思表達出來)描述出來。使用虛擬碼,可以幫助我們更好的表述演算法,不用拘泥於具體的實現。
主要是讓自己看得懂的方法,首先要讓如何印出 1-100:
1 | 讓 i = 1 |
然後題目是要印出偶數,所以把第 3 步改成判斷式:
1 | 讓 i = 1 |
雖然 pseudo code 沒有一定的形式,但是可以練習寫成比較像是程式碼的 pseudo code:
1 | let i = 1 |
寫到這邊還可以進一步寫成:
1 | for (i from 1 to 100) do |
把 pseudo code 翻譯成程式碼
到了這個步驟,如果有學過程式的話,應該就可以把程式碼寫出來,這邊使用 JavaScript 來寫,就可以印出從 1-100 的偶數:
1 | for ( let i = 1; i < 100; i ++) { |