從上世紀八十年代計算機的廣泛應用,到今天平板電腦與智能手機的普及,軟件係統開發在其發展過程中起著愈來愈突出的作用,各種軟件係統層出不窮,不同領域軟件應用方興未艾。把學習計算機知識,更進一步學習計算機編程作為一種小孩的計算機入門教育,也成了今天許多家長們的不二選擇。選用何種語言學習計算機編程,眾說紛紜,不一而足。對中小學青少年,把編程與遊戲結合起來,不失為學習編程的一種方法。當前比較流行的遊戲編程工具有Python,Scratch等,前者專業性強,作為小孩的計算機編程啟蒙教育起點稍高,後者入門簡單,編程圖形化,易於為學前與小學生們接受。但這些編程訓練因自上而下,從編程到遊戲,通過編程構造遊戲,而不是從遊戲到編程,通過遊戲學習編程,不足以了解計算機的整體構架,不能讓初學者形成一個計算機運行完整的圖象,直接了解機器本身的邏輯功能。這裏建議一種不同的學習思路,即從遊戲到編程,從小孩所熟悉的單機遊戲開始,將遊戲機程序植入到PC計算機上,對遊戲進行適當修改擴充,進行所謂的ROM Hacking,對原遊戲程序(ROM Image)采用匯編語言修改擴充及邏輯運算編程。這種取向,雖看起來也是起點較高,其實不然。這樣的做法一方麵可以直接了解基本的遊戲編程特點,另一方麵能夠從開始就比較深刻理解計算機係統的構架與邏輯功能,若以計算機科學為其發展方向,則對今後的有關計算機原理等專業學習大有裨益。
家有遊戲娃,大概最先接觸的都是家用電子遊戲機。以任天堂為例,其家用遊戲機有超級任天堂(SFC),任天堂64(N64),Wii等係列,掌上遊戲機則有Game Boy,任天堂DS係列等產品。此外還有便攜式家用遊戲機任天堂Switch。自1983年紅白機發售起至2018年初,任天堂已在全球售出超過45億份遊戲軟件,超過7.1億台遊戲主機(包括家用遊戲機和掌上遊戲機),與索尼、微軟一起名列全球主機遊戲市場占有率前三名。更重要的是,無論是遊戲本身,或是haking工具,任天堂遊戲均有眾多的在線支持。如你的小孩有過玩任天堂遊戲機,例如風麾一時的超級馬裏奧世界(Super Mario World)的經曆,而且樂此不疲,那就問問他們除了玩遊戲過關斬將,是否研究過如何在遊戲中找出暗藏機關,改變入關途徑,如何對現有的遊戲程序在PC機上進行修改與擴充加入新的圖象,關卡,音樂等等,如何更新遊戲。如果肯定的話,告訴他們最佳的方法就是以該遊戲為藍本,來一個ROM hacking,學習用匯編語言編程,由此激發小孩學習計算機原理及編程的興趣,而PC機上所需下載的,不外乎是模擬遊戲機的操作平台(emulator),遊戲軟件(rom file),黑客套件(hacking suite),十六進製編輯器(hex editor),以及各種於遊戲中植入匯編補丁的軟件。
應該指出的是,這裏論述從遊戲到編程隻是適合相對年齡段所玩的傳統單機電子遊戲,尤其是以任天堂為代表的單機遊戲。當今電子遊戲向大型化,多樣化,網絡化,以及在線多人遊戲發展,使得眾多青少年沉緬於此欲罷不能,這裏所提倡的不是也不能成為矯治遊戲成癮的良方。傳統單機遊戲一般采用匯編語言,而現今各種在線遊戲采用高級語言,但各類遊戲均有討論如何黑客(hacking),或者加入遊戲附件(add-ons)的網站,完全可以由此加以引導進而學習各種編程,例如匯編,Java,C#,C++等等,取決於各人喜好,個人認為從單機電子遊戲著手學習匯編比較簡單直觀也更有益處。當然學習編程不是小孩學習發展技能的唯一選項,如果能正確引導將其對遊戲的興趣與編程結合起來,也應該是一種提高技能的手段。
這裏貼一個用匯編修改超級馬裏奧世界反地心引力的例子。
我本人是在大學裏教匯編語言的, 這匯編語言(x86, MIPS etc)在藤校的大學生裏都有很多人學著有困難,您這裏的“對中小學青少年”,指的的是多大的孩子?
我的小孩現在五年級,他在7歲時(2年級)自己自學的Scratch, 一周後編了兩個小遊戲,在學校的lab給同學顯擺一下,lab老師給錄了像,幾個老師驚訝不已,kept saying "It is amazing, you are amazing". 去年一個月時間學會了c++,現在正學習DirectX編程。因為圖形學的需要,也在學習線性代數,也學了一些微積分。他每天在家裏的學習時間大概少於20分鍾。我感覺,他雖然遠非天才,但天分好像比我好。但即使這樣的孩子,我有時試圖介紹涉及匯編語言的編程的內容,他都會很少有地說難懂。
您在這倡導“對中小學青少年”從匯編學起,is it realistic or feasible?