作者:范德成
鏈接:https://www.zhihu.com/question/19705160/answer/164490969
我想過這個(gè)問題多年了台夺。我家娃長(zhǎng)大以后,我會(huì)這樣教她:首先痴脾,計(jì)算機(jī)的本質(zhì)是有限狀態(tài)自動(dòng)機(jī)颤介。所以先教有限狀態(tài)自動(dòng)機(jī)。為了有趣赞赖,做一個(gè)C語言字面量字符串解析器滚朵,也就是能解析"Hello\tWorld\x21\x20What's\x0020up?\040\n"這樣的一個(gè)狀態(tài)機(jī)。然后前域,介紹馮·諾依曼計(jì)算模型辕近。主要概念是分別存儲(chǔ)程序和數(shù)據(jù)。程序不再只是放在ROM中的话侄,而是可以加載進(jìn)RAM里執(zhí)行的亏推。
再接下來學(xué)習(xí)BASICA/GWBASIC∧甓眩看起來有點(diǎn)老古董吞杭,但實(shí)際上它們能做的事情也不少,比如用來做一個(gè)簡(jiǎn)單的財(cái)務(wù)處理程序变丧,或者畫一個(gè)餅圖芽狗,做一個(gè)漢諾塔小游戲等等。內(nèi)存只有64KB可用痒蓬,還可以讀寫文件童擎,可以讓孩子學(xué)到內(nèi)存和文件大小的概念。BASICA/GWBASIC學(xué)到了非結(jié)構(gòu)化編程攻晒。
接下來學(xué)QBASIC顾复,它帶來了結(jié)構(gòu)化編程的概念。包括函數(shù)調(diào)用鲁捏。學(xué)函數(shù)調(diào)用時(shí)要教一下棧的概念芯砸。QBASIC教的時(shí)候還要著重學(xué)一下內(nèi)存池。因?yàn)橹钡絈BASIC為止還沒有malloc的功能给梅。要教一下用內(nèi)存池怎樣分配和釋放對(duì)象假丧。
QBASIC可以學(xué)到初二。然后教C語言初步动羽,這個(gè)講究程序效率和匯編對(duì)應(yīng)性的中級(jí)語言包帚。內(nèi)存分配、未初始化內(nèi)存运吓、讀寫越界渴邦、野指針疯趟、內(nèi)存泄漏、重復(fù)釋放几莽、general protection fault等等都要講一下迅办,并教一下怎樣做錯(cuò)誤處理。結(jié)構(gòu)體的內(nèi)存布局章蚣、對(duì)齊站欺。匯編代碼一覽。然后用函數(shù)指針來實(shí)現(xiàn)一下接口和多態(tài)纤垂。
初三估計(jì)可以講http://VB.NET和C#了矾策。強(qiáng)類型、內(nèi)存安全并帶垃圾回收的編程語言的好處峭沦。泛型的優(yōu)勢(shì)贾虽。用http://VB.NET8.0以上,或者C# 2.0以上吼鱼,可以用它們的state machine功能教一下協(xié)程coroutine的概念蓬豁。同時(shí)以回顧歷史的方式教一下Windows 3.x協(xié)作式多任務(wù)。用C#模擬一下Windows的消息循環(huán)菇肃。它們和Windows 95的搶占式多任務(wù)的不同地粪。并且,如果在語言沒有提供協(xié)程功能的情況琐谤,怎樣手動(dòng)展開棧來實(shí)現(xiàn)協(xié)程蟆技。
C#和http://VB.NET的面向?qū)ο缶幊瘫厝皇且痰摹_@是一個(gè)好時(shí)機(jī)斗忌。
然后教Python和JavaScript质礼。這兩門動(dòng)態(tài)類型語言最好和TDD一起教。這是因?yàn)門DD可以避免動(dòng)態(tài)語言運(yùn)行時(shí)再確定類型而讓人容易犯的類型錯(cuò)誤织阳。TDD中可以隨時(shí)添加有關(guān)類型的斷言眶蕉,以避免類型錯(cuò)誤。而且唧躲,動(dòng)態(tài)語言本來就寫起來比較簡(jiǎn)潔造挽,加上TDD既保證了質(zhì)量,又不會(huì)像靜態(tài)類型語言那樣繁瑣惊窖。
Python和JavaScript的面向?qū)ο缶幊桃脖厝皇且痰摹?/i>
接下來刽宪,估計(jì)是在高一吧厘贼。要深入C語言了界酒,并結(jié)合操作系統(tǒng)和應(yīng)用程序環(huán)境,用它來做幾個(gè)生產(chǎn)用的程序嘴秸。話說高中課業(yè)壓力大毁欣,如果學(xué)不完庇谆,放到大學(xué)再學(xué)也是可以的。
然后學(xué)C++凭疮。學(xué)C語言的時(shí)候我覺得C89標(biāo)準(zhǔn)就行饭耳,但C++我覺得不必學(xué)太老的,因?yàn)樵谖铱磥碇唇猓珻++ 98本身就是一個(gè)不成熟的版本寞肖。應(yīng)該學(xué)C++ 11/14等新標(biāo)準(zhǔn)。直接啃@vczh大俠審校的C++ Primer 5th Edition就行衰腌。
數(shù)據(jù)庫學(xué)兩個(gè)新蟆,Python/C#訪問sqlite和C#訪問SQL Server。
多線程編程右蕊。先教有鎖數(shù)據(jù)結(jié)構(gòu)琼稻。等到有鎖數(shù)據(jù)結(jié)構(gòu)學(xué)好了以后,再教互鎖(interlocked)操作饶囚。完了以后再介紹一下無鎖多線程編程帕翻,它的優(yōu)勢(shì)和劣勢(shì)。
最后要討論一下如何把多線程程序手動(dòng)轉(zhuǎn)換為協(xié)程以讓它變得可以做單元測(cè)試萝风∴值В基本的數(shù)據(jù)結(jié)構(gòu)和算法。其他主題闹丐,隨需要而學(xué)横殴,包括計(jì)算機(jī)體系結(jié)構(gòu)、數(shù)據(jù)結(jié)構(gòu)和算法卿拴、網(wǎng)絡(luò)衫仑、操作系統(tǒng)、數(shù)據(jù)庫堕花、編譯原理(包括垃圾收集)文狱、圖形學(xué)、圖像處理缘挽、音頻處理瞄崇、函數(shù)式編程、機(jī)器學(xué)習(xí)等壕曼。
所有這些教學(xué)都以雙語進(jìn)行苏研,特別是語言規(guī)范等都直接看英文原版。