1. 程式人生 > >30 年後 QBasic 還是棒棒噠,兒子也開始學了

30 年後 QBasic 還是棒棒噠,兒子也開始學了

我大兒子如今已經七歲零三個月了。如果可以用玩兩個小時《我的世界》的時間來交換家人,他會馬上行動。他在生活中還喜歡玩《超級馬里奧製作大師》,看到他玩這個遊戲我也非常興奮,因為我像他這麼大時,也玩相同的遊戲,水平都一樣。大概 5 個月前,我離開家去參加了每年一度的 ludum dare 盛會:一個遊戲開發比賽。

在這期間,我讓自己遠離朋友,回到了原始穴居人的狀態,48小時沒有睡覺,並且從零開始開發了一個完整的遊戲(在文章的結尾可以試玩!)。當我很自豪地向老婆展示我創新性的作品AAA title時,諾亞不自覺地被吸引住了,隨後我向他介紹了程式碼的世界,向他展示如何用簡單的詞彙(他剛學會的單詞)創造出一個真實的遊戲。自從那天開始,諾亞經常讓我教他如果製作視訊遊戲。並且在過去的5個月裡,我已經找到了適合孩子的程式語言、整合開發環境,希望他能把興趣的火花變成一個難忘的經歷。

為了探索,我瀏覽了數不盡的論壇,通過它我得到了無數的建議:SmallBasic、Pico-8、Smalltalk、Scratch 等等。我甚至查詢了強大的 StackOverflow 社群,但沒有任何收穫。五個月之後,我得到了令人失望的結果:離我想要進入的另一個時代還差的很遠。30年過去了,當涉及到探索程式設計的時候,QBasic 仍然是最棒的語言。

“OMG please don’t teach him GOTOs!!”

10 PRINT “OH NO, WHAT ARE YOU DOING?!!!”
20 GOTO 10

是的,QBasic 是一種糟糕的過程型語言。它採用了一些大家都認為有害的概念,使用笨拙的語法實現隱式宣告,不區分大小寫,索引不是從0開始,等等。這樣的情況還有很多……當學習一個新技能,最好的做法是從開始就得到正確的反饋,而不是去糾正多年的壞習慣。根據這個建議,我也許應該從我喜歡的 Ruby 語言開始。然而,儘管大多數的 QBasic 概念基本上都被同行們標記上危險訊號,但是在那時每個概念都有著非常特殊的目的:保持語言的簡潔性和可理解性,而其他語言留下的意義是為了支援靈活性,複雜性和邏輯性。

就在今天,我在兒子的筆記本上安裝了 QBasic,並且完成了 DOSBox 的手動安裝。他雙擊他桌面上的圖示然後立即進入到了整合開發環境,歡迎介面隨即出現,這個介面喚起了我腦海中許多的回憶:

然後我告訴諾亞這有一個非常神聖的儀式,任何想進入祕密的程式設計師圈子的人都必須做的,以與其他程式設計師打招呼的程式開始。隨著我口述命令,他開始慢慢的搜尋每一個字母,仔細的用正確的手指打出神奇的字母:PRINT “hello world”

他按下 F5,因為他看到程式碼被編譯成文字內容並呈現在他的黑色螢幕上,他非常的驚訝。他微笑著與我擊掌,並且在他的小本上潦草的寫下程式碼,方便以後能記住它。

我們繼續嘗試更多的命令:CLS, COLOR, PLAY, INPUT, 以及IF。這裡沒有什麼需要解釋的:沒有複雜性,沒有笨拙的運算子,沒有抽象的概念,沒有需要閱讀的文件,沒有物件、類、方法這樣的概念,沒有框架需要安裝,沒有其他程式設計環境中鋪天蓋地般的選單欄及按鈕選項,沒有特殊的關鍵字或大括號。這就是程式碼最純粹而又簡單的形式。

不到 1 小時後,他寫出了第一個自己的程式——一個互動式的非常微小的應用程式,作為一個敏感的人,它能讓你知道它對你的感情。

這讓他在他的表兄和最好的朋友Christian面前非常的自豪:

在那以後,向他解釋程式碼是如何工作的以及程式碼在做什麼就變得很容易。

並且一個小時左右,我7歲的兒子不僅僅寫了它的第一個文字遊戲,而且還從創造、編譯、執行他的小程式中體驗到樂趣和興奮。除此之外,這些內容全部寫到了筆記本里。

我很高興他能理解為什麼我一直說我有世界上最好的工作。我今天唯一的遺憾是30多年來,我們還沒有為孩子想出更好的主意:Qbasic的關鍵字集合非常有限(整個幫助選單安置在單獨的 F1 螢幕上並且佈滿了簡單的例子!),沒有任何人工視覺來干擾編碼者,一個非常有限並舒適的的開發環境,儘快的發現錯誤,使用一個單鍵就能立即編譯和執行程式碼,並且非常的簡單。我們已經建立了更強健的以及更復雜的語言、框架、整合開發環境(這些在現實生活的應用中當然是必不可少的),但是我們沒有真正的製作一個比 Qbasic 更簡單或者更能直接能體驗到程式設計樂趣的程式語言。今天執行 QBasic 對於使用現代Mac、PC、Linux主機的新手來說甚至變得非常可怕,然而它過去卻需要在 A:磁碟驅動 下插入 3.5 英寸的軟盤……

吐槽結束,今天主要是慶祝另外一個人,他發現了程式設計的快樂與美!
(正如我承諾的那樣,我等著EA給我打電話來購買AAA title的版權)

打賞支援我翻譯更多好文章,謝謝!

打賞譯者

打賞支援我翻譯更多好文章,謝謝!