「自古以來,最重要的就是實戰!」他興奮地說,說完低頭一看卻發現我已經躺在地上擺爛。
「欸,等等,你怎麼這麼快就放棄了?」
「因為啊⋯⋯裡面有太多我看不懂的東西。」我有氣無力地回答。
「什麼?」他瞪大眼睛,一臉不可置信,「我明明已經放水放到快變游泳池了啊!該不會是你英文不好吧?你可以用手機查單字啊。」
「好吧,我再試一試⋯⋯」我重新盯著那段程式碼努力解析。
上面寫著什麼 class Node,我知道 Node 在英文是「節點」的意思,但和排隊的關係在哪? 又是什麼?好像表情符號,但應該不可能吧?
接下來有一個 value,好像是要存什麼東西,再來一個 next,還帶著問號,是在問「下一個是誰嗎?」
然後下面又來了一個 class Queue, 再次跑了出來。
head 和 tail 大概可以猜到是隊伍的頭和尾,但為什麼跟上面的 Node 扯上關係?
往下看更崩潰。
enqueue、dequeue、peek⋯⋯這些名字應該是英文單字,但我不太確定。拿著翻譯軟體查一查,結果是「入隊」、「出隊」、「查看」——可大括號 {} 和問號 ?,翻譯軟體就完全幫不上忙了。
在我眼裡,整段程式碼就像是一堆混雜英文單字、數學符號、還有莫名其妙的問號組成的拼圖。我完全不知道哪裡能下手,只覺得滿滿的陌生感壓得我快窒息。
對會寫程式的人來說,這或許只是小菜一碟;但對不會寫程式的人而言,這些字母與符號彷彿是來自另一個世界的密碼。兩邊對於「簡單」的定義,差距可不只是「一點點」。
「還是不懂?」小孩歪著頭,看著我崩潰的樣子,一臉無法理解。
「廢話啊!這根本不是人類能讀的東西。」
「錯!」小孩得意地笑了,「你只是用錯方法。真正『不是人類能讀』的東西是機器碼,沒有英文字母整串都是 10010101。程式碼是人類寫給人看的,只是要告訴電腦怎麼接受、儲存、處理和傳輸資訊,最後完成任務。」
「所以程式碼的難度,其實跟任務的難度差不多。你既然能答對 Queue 的問題,那就一定也能看懂程式碼。只是程式語言的規則跟人類語言有點不一樣,所以你才會被卡住。」
「是這樣嗎?」我狐疑地抬頭。
「對啊。比如 class Node 這行,只是在說明 Node 這個類別的結構由 value 和 next 組成。」
「可是明明是在講排隊,為什麼會跑出一個 Node 類別?」我皺著眉頭。
「因為排隊的不一定是人啊,所以我就用 Node 這個字代替。就像數學算數量的時候,用圈圈代表一樣的道理。這只是代號。」他隨手指向奶茶店的人群,指著其中一個人說:「像他要點的飲料就是 value,他後面排著的人就是 next。」
「那 呢?」我追問。
「那個是預留的『容器位置』。如果排隊的是人,就放人;如果是貓咪,就放貓咪。反正格子先留著,之後換什麼都行。」
腦海中閃過一群貓咪乖乖排隊買奶茶的畫面,我連忙把它踢出去。但不得不說,好像有點懂了。
「接下來就來看 Queue 的結構吧。」小孩指了指之前的問答紀錄,「不是說過了嗎?排隊的操作只會動到頭尾,所以程式裡只需要記錄 head 和 tail 就行了。」
「那 enqueue 呢?前面那個 fun 應該不是『開心』的意思吧?」
小孩哈哈大笑:「當然不是,那是 function 的縮寫。就像遊戲說明書一樣,先介紹角色的能力值,接著就要開始說明角色能用的技能嘛。」
他邊說邊掏出手機,眼神飄向遊戲圖示。
「喂!你還沒講完呢!」我趕緊制止。
「喔喔,好吧。」他戀戀不捨地把手機收回口袋,「enqueue 就是把人加到隊伍尾巴的技能,dequeue 是讓最前面的人離開。而 peek 就更簡單啦,什麼都不做,只是偷看一下隊伍最前面是誰。」
「那我知道了!」我搶著回答,「isEmpty 就是檢查有沒有人在排隊,對吧!」
小孩立刻對我比出一個雙手大拇指。就在那一刻,我突然真的能把這段程式碼和我們之前談到的 Queue 對應起來了。那些字母與符號不再是陌生的咒語,而是一套規則在描述「排隊」這件事。
只是,能讀懂是一回事;要我填空補完,恐怕還是另一回事吧⋯⋯