以前看過一篇文章,是用拉麵店販賣機講解關於 api 的概念,我覺得作者很厲害,可以用淺顯易懂的方式讓當時還是前端麻瓜的我看得懂,那篇文章很推薦新手去看 -> 從拉麵店的販賣機理解什麼是 API

最近作者開了一系列的課 -> 先別急著寫 leetcode。因為我不是本科系出身,所以確實在解題時很容易遇上困難,不然就是會想很久。剛好看到這個課程就覺得蠻需要培養如何寫程式的思維,而且重點是免費喔!免費喔!免費喔!(很重要要說 3 次)所以這個系列會記載一些對我有幫助的筆記,希望能讓自己更進步一些。

會寫程式的人與初學者差別在哪?


會寫程式的人

  1. 先想解法
  2. 如果是有做過或是簡單的,就會直接構思出方法
  3. 如果比較困難或是複雜的問題,就把解法轉換成程式碼

初學者

  • 邊寫邊想怎麼解
  • 試著套用自己以前學過的語法

這個我自己蠻有感覺的,確實一開始會邊寫邊想,然後如果卡住了,就翻筆記看有什麼語法可以拿來套用,不過通常都沒什麼好下場就是了,哈。

在解題會有兩種情況


看題目覺得自己解得開

  • 有效率的解開
  • 有解開但是時間花較久
  • 最後解不開

看題目就覺得看不懂

撇開第二種看不懂的情況,在看得懂的情形下,以我自己比較常遇到解不開的狀況是,一開始覺得應該可以怎麼做,可是最後不知道怎麼將想法轉換成程式碼,而講者推薦了一些做法。

推薦初學者寫程式的作法


首先看一道題目,然後按照以下的作法,題目是:

如何印出 1-100 之間的偶數?

想一下解法,不寫任何程式碼

先不要急著想寫 code,想如何一步一步解決的方法。

  1. 如何印出 1-100
  2. 如何判斷偶數

把解法寫成 pseudo code

虛擬碼(pseudo code)在維基百科的解釋:

更類似自然語言。它是半形式化、不標準的語言。我們可以將整個演算法執行過程的結構用接近自然語言的形式(這裡可以使用任何一種作者熟悉的文字,例如中文、英文,重點是將程式的意思表達出來)描述出來。使用虛擬碼,可以幫助我們更好的表述演算法,不用拘泥於具體的實現。

主要是讓自己看得懂的方法,首先要讓如何印出 1-100:

1
2
3
4
5
讓 i = 1
如果 i > 100,結束
印出 i
讓 i 可以一直累加
然後再跳回第 2 步

然後題目是要印出偶數,所以把第 3 步改成判斷式:

1
2
3
4
5
讓 i = 1
如果 i > 100,結束
如果 i 是偶數,印出 i
讓 i 可以一直累加
然後再跳回第 2 步

雖然 pseudo code 沒有一定的形式,但是可以練習寫成比較像是程式碼的 pseudo code:

1
2
3
4
5
let i = 1
if i > 100 then exit
if i % 2 === 0, print i
i = i + 1
jump to line 2

寫到這邊還可以進一步寫成:

1
2
3
4
for (i from 1 to 100) do
if (i % 2 === 0)
print i
end for

把 pseudo code 翻譯成程式碼

到了這個步驟,如果有學過程式的話,應該就可以把程式碼寫出來,這邊使用 JavaScript 來寫,就可以印出從 1-100 的偶數:

1
2
3
4
5
for ( let i = 1; i < 100; i ++) {
if(i % 2 === 0) {
console.log(i)
}
}