寫給孩子的學習算法和編程的路徑——美國K-12計算機教學標準

悠媽剪報 發佈 2020-01-02T18:04:29+00:00

美國計算機教師協會發布了一份《K-12計算機教學標準》,明確了從幼兒園到12年級學生的計算機學習內容,具體包括計算機系統、網絡和網際網路、數據與分析、算法與編程和計算機的影響5大部分。

美國計算機教師協會發布了一份《K-12計算機教學標準》,明確了從幼兒園到12年級學生的計算機學習內容,具體包括計算機系統、網絡和網際網路、數據與分析、算法與編程和計算機的影響5大部分。

對於每一部分內容,都有一個建議的K-12途徑來指導學生如何發展對特定技能或概念的熟練程度。這些指標明確了學生在2、5、8、10和12年級結束時的需要達到的熟練程度。

算法與編程具體又細分為算法、變量、控制、模塊化和程序開發五部分。

算法

幼兒園-2年級(5-7歲)

通過創建和遵循算法(逐步說明的集合)來完成任務,並為每天的日程建模。

組合是將較小的任務組合成更複雜的任務。學生可以創建和遵循算法來製作簡單的食物、刷牙、為上學做好準備、參與大掃除等。

3-5年級(8-10歲)

比較並優化同一任務的多個算法,並確定哪個算法最合適。

不同的算法可以實現相同的結果,儘管有時一種算法可能最適合特定情況。學生應該能夠找到解決相同任務的不同方法,並決定哪種方法是最佳解決方案。例如,學生可以使用地圖並計劃多個算法從一個點到達另一個點。他們也可以查看繪圖軟體建議的路線,並根據哪條路線最短或最快或將避免出現問題,將路線更改為最好的那一個。另一個例子可能是編寫不同的算法來繪製正多邊形,並確定哪種算法最容易修改或重新定位以繪製不同的多邊形。

6-8年級(11-13歲)

使用流程圖和/或模擬代碼將複雜問題作為算法來解決。

複雜問題是學生難以計算解決的問題。學生應該使用模擬代碼和/或流程圖來組織和排序解決複雜問題的算法,即使他們可能實際上沒有對解決方案進行編程。例如,學生可以表達一種算法,該算法基於諸如尺寸、顏色、品牌、舒適度和成本之類的變量來生成一個購買運動鞋的建議。通過廣泛的變量和算法的測試,學生可以優化他們的推薦算法並識別他們可能排除的其他變量。

9-10年級(14-15歲)

通過利用先前的學生知識和個人興趣,創建使用算法解決計算問題的原型。

原型是一種計算產品,用於演示產品或流程的核心功能。原型對於在設計過程中獲得早期反饋非常有用,並且可以深入了解產品的可行性。開發計算產品的過程包括創造性表達和探索,以創建原型和解決計算問題。學生可以創建與他們的社區或其他人相關的計算產品。學生應該根據任務或計算問題開發計算產品,以證明算法的性能、可重複性和易於實現的程度。

11-12年級(16-17歲)

描述人工智慧如何驅動軟體和物理系統。

示例包括數字廣告投放、自動駕駛汽車和信用卡欺詐檢測。

實施人工智慧算法來對抗人類對手或解決問題。

遊戲不一定非常複雜,簡單的猜謎遊戲、Tic-Tac-Toe或簡單的機器人命令就足夠了。

使用和調整經典算法來解決計算問題。

示例可以包括排序和搜索。

根據效率、正確性和清晰度評估算法。

示例可以包括排序和搜索。

變量

幼兒園-2年級(5-7歲)

通過使用數字或其他符號來表示程序存儲和操作數據的方式。

現實世界中的信息可以用電腦程式表示。學生可以使用拇指向上/向下作為是/否的表示,在編寫表示方向的算法時使用箭頭或者使用數字、象形圖或其他符號來編碼和解碼。

3-5年級(8-10歲)

創建使用變量來存儲和修改數據的程序。

變量用於存儲和修改數據。在這個年級,了解如何使用變量就足夠了。例如,學生可以使用數學運算來增加遊戲的分數或減去遊戲中可用的生命數量。另外,可以使用變量製作倒計時程序。

6-8年級(11-13歲)

創建明確命名的變量,表示不同的數據類型並對其值執行操作。

變量就像一個帶有名稱的容器,其中的內容可能會更改,但名稱(標識符)不會更改。在規劃和開發項目時,學生應該決定何時以及如何創建和命名新變量。學生應使用命名約定來提高程序的可讀性。操作的示例包括向分數添加點、將用戶輸入與單詞組合以生成句子、改變圖片的大小或者將人名添加到人員列表。

9-10年級(14-15歲)

使用列表來簡化解決方案,將計算問題通用化,而不是重複使用簡單變量。

學生應該能夠識別多個代碼段中的共同特徵,並替換使用列表(數組)的單個段來解釋差異。

11-12年級(16-17歲)

比較和對比基礎數據結構及其用途。

示例可以包括字符串、列表、數組、堆棧和隊列。

控制

幼兒園-2年級(5-7歲)

開發具有序列和簡單循環的程序,以表達想法或解決問題。

編程是可以用來創建各種產品的工具。控制結構指定在程序中執行指令的順序。序列是程序中指令的順序。例如,如果在編寫簡單的動畫故事時,對話沒有正確排序,那麼這個故事就沒有意義了。如果編程機器人的命令順序不正確,機器人將無法完成所需的任務。循環指的是多次重複一系列代碼。例如,在顯示蝴蝶生命周期的程序中,循環可以與移動命令組合在一起,使角色進行連續但受控的移動。

3-5年級(8-10歲)

創建包含序列、事件、循環和條件的程序。

控制結構指定在程序中執行指令的順序,並且可以進行組合以創建更複雜的程序。事件允許程序的某些部分基於特定操作運行。例如,學生可以編寫程序來解釋水循環,當點擊特定組件(事件)時,程序將顯示有關水循環的信息。當某個條件為真時,條件允許在程序中執行一部分代碼。例如,學生可以編寫一個數學遊戲,詢問乘法應用問題,然後使用條件來檢查輸入的答案是否正確。循環允許多次重複一系列代碼。例如,在創建關於著名歷史角色的動畫的程序中,學生可以使用循環使角色在他們自我介紹時穿過螢幕。

6-8年級(11-13歲)

設計并迭代開發組合控制結構的程序,包括嵌套循環和複合條件。

控制結構可以以多種方式組合。嵌套循環是循環中的循環。複合條件以邏輯關係(例如,使用AND、OR和NOT)組合兩個或更多條件,並且將條件嵌套在另一個條件中可以使一個條件的結果導致另一個條件發生。例如,在編寫交互式故事時,學生可以在循環內使用複合條件來設計只有當角色有鑰匙且鑰匙正在接觸門時,才能把門打開。

9-10年級(14-15歲)

在權衡涉及實現、可讀性和程序性能時,證明選擇特定控制結構的合理性,並解釋所做選擇的優缺點。

實現包括選擇程式語言,這會影響創建程序所需的時間和精力。可讀性是指程序對其他程式設計師的清晰程度,並且可以通過文檔進行改進。對性能的討論僅限於對執行時間和存儲要求的理論理解,不期望進行定量分析。這個年級的控制結構可以包括條件語句、循環、事件處理程序和遞歸。例如,學生可以比較計算斐波那契數列的過程的疊代和遞歸實現的可讀性和程序性能。

設計并迭代開發計算產品,以實現實際意圖、個人表達或通過使用事件來啟動指令來解決社會問題。

在此情境中,相關的計算產品包括程序,移動應用程式或Web應用程式。事件可以是用戶啟動的,例如按下按鈕,或者是系統啟動的,例如觸發定時器。在之前的年級,學生已經學會創建和調用程序。在這個年級,學生設計由事件調用的程序。學生可以創建一個移動應用程式,當設備檢測到其位置發生更改時,該應用程式會更新附近興趣點的列表。

使用諸如過程、模塊和/或對象之類的構造,通過系統分析將問題分解為更小的組件。

在這個年級,學生應該將複雜的問題分解為可管理的子問題,這些子問題可以通過已經存在的程序來解決。例如,學生可以通過應用程式編程接口(API)連接到在線資料庫來創建應用程式來解決社區問題。

11-12年級(16-17歲)

說明遞歸算法的執行流程。

模塊化

幼兒園-2年級(5-7歲)

將解決問題所需的步驟分解(拆解)為精確的指令序列。

分解是將任務分解為更簡單的任務的行為,學生可以分解製作花生醬和果凍三明治所需的步驟、刷牙的步驟、繪製形狀的步驟、在螢幕上移動角色的步驟。

3-5年級(8-10歲)

將問題分解為較小的、可管理的子問題,以促進程序開發過程。

分解是將任務分解為更簡單的任務的行為。例如,學生可以通過將故事分解成不同的場景來創建動畫。對於每個場景,他們將選擇背景、放置角色和編程動作。

修改、重新混合或將現有程序的某些部分組合到自己的工作中,以開發新的或添加更多高級功能。

程序可以分解為更小的部分,也可以合併到新的或現有的程序中。例如,學生可以修改單人遊戲中的預先編寫的代碼以創建具有略微不同規則的雙人遊戲,重新混合併將另一個場景添加到動畫故事中,使用代碼使球從新籃球遊戲中的另一個程序反彈,或者修改另一個學生創建的圖像。

6-8年級(11-13歲)

將問題和子問題分解為多個部分,以便於程序的設計、實現和檢查。

學生應將問題分解為子問題,這可以進一步細分為較小的部分。分解通過允許學生一次專注於一件事情(例如,從用戶獲得輸入、處理數據以及將結果顯示給用戶)來促進程序開發。分解還使不同的學生能夠同時在不同的部分工作。例如,動畫可以分解為多個場景,可以獨立開發。

使用參數創建過程以組織代碼,並使其更易於重複使用。

學生應創建在程序中多次使用的程序和/或功能,以重複指令組。這些過程可以通過定義參數來推廣,這些參數為各種不同的輸入創建不同的輸出。例如,繪製圓的過程涉及許多指令,但所有指令都可以用一條指令調用,例如「drawCircle」。通過添加半徑參數,用戶可以輕鬆地繪製不同大小的圓。

9-10年級(14-15歲)

通過使用程序內的過程、數據和過程的組合或獨立但相互關聯的程序來創建計算產品。

可以通過組合和修改現有產品或通過開發新產品來創建計算產品。計算產品的示例包括程序、模擬、可視化、數字動畫、機器人系統和應用程式。複雜的程序被設計成相互作用的模塊系統,每個模塊都有一個特定的角色,為一個共同的總體目的而協調。模塊可以更好地管理複雜的任務。這個年級的重點是將程序理解為具有模塊之間關係的系統。實現的選擇,例如程式語言或範例,可能會有所不同。學生可以整合計算機視覺庫來增加機器人的能力,或利用開源JavaScript庫來擴展Web應用程式的功能。

通過整合用戶的反饋,系統地為廣大受眾進行設計和開發。

程序示例可能包括遊戲、實用程序和移動應用程式。較低年級的學生收集反饋和修改程序。在這個年級,學生應該通過系統的過程來做到這一點,其中包括來自廣大受眾的反饋。學生可以創建用戶滿意度調查和頭腦風暴分發方法,這些方法可以產生來自不同受眾的反饋,記錄他們將所選反饋納入產品修訂的過程。

11-12年級(16-17歲)

使用學生創建的計算產品(例如過程、模塊和/或對象)構建問題的解決方案。

面向對象的編程在這個年級是可選的。

分析一個大規模的計算問題並確定可應用於解決方案的通用模式。

當學生遇到跨越多個學科或社會系統的複雜的現實問題時,他們應該將複雜的問題分解為可管理的子問題,這些子問題可能通過已經存在的程序來解決。例如,學生可以通過應用程式編程接口(API)連接到在線資料庫來創建應用程式來解決社區問題。

通過使用庫和API創建編程解決方案來演示代碼重用。

例如,庫和API可以是學生創建的,也可以是公共圖片庫或地圖API。

程序開發

幼兒園-2年級(5-7歲)

制定描述事件順序、目標和預期結果的計劃。

創建計劃可以明確創建程序所需的步驟,並可用於檢查程序是否正確。學生可以創建計劃文檔,例如故事地圖、故事板或流程圖,以說明他們的程序將執行的操作。學生可以在老師或家長的幫助下完成計劃過程。

在開發程序時,對使用過的其他人的想法和創作給予版權歸屬。

使用計算機要具有一定的責任感。學生應該能夠尊重他人創作的作品,例如圖片、音樂和代碼。如果在課堂上展示他們的產品,或者在博客或網站上分享作品,可以用書面或口頭的形式表達。在這個階段正確歸屬版權不需要像在參考書目或作品引用文件中那樣做正式引用。

調試(識別和修復)包含序列和簡單循環的算法或程序中的錯誤。

算法或程序可能無法始終正常工作。學生應該能夠使用各種策略,例如更改步驟的順序、逐步跟蹤算法或者通過反覆試驗來解決算法和程序中的問題。

使用正確的術語,描述在程序開發的疊代過程中所採取的步驟和所做的選擇。

學生應該能夠談論或寫下他們創建的項目的目標和預期成果,以及他們在創建項目時所做的選擇。可以使用編碼日記、與老師或家長討論、課堂或博客演示來完成。

3-5年級(8-10歲)

使用疊代過程,通過包括其他人的觀點和考慮用戶偏好來規劃程序的開發。

規劃是程序開發疊代過程的重要組成部分。學生概述主要功能、時間和資源限制以及用戶期望。學生應該將計劃記錄為例如故事板、流程圖、模擬代碼或故事地圖。

在創建或重新混合程序時,請遵守智慧財產權並給予適當的歸屬。

智慧財產權可能因國家/地區而異,但版權法賦予產品創作者一系列權利,以防止他人複製產品並以他們可能不喜歡的方式使用產品。學生應該識別混合的實例,在借用和疊代想法時,歸功於原始創作者。學生還應考慮對計算產品的使用施加限制或限制的通用許可,例如從網際網路下載的圖像和音樂。在這個年級,歸屬應以老師要求的格式編寫,並且應始終包含在在線共享的任何程序中。

測試和調試(識別並修復錯誤)程序或算法,以確保其按預期運行。

當學生開發程序時,他們應該不斷測試這些程序,以確定是否達到預期並修復(調試)錯誤。學生還應該能夠成功調試其他人創建的程序中的簡單錯誤。

在項目開發的設計、實現和檢查階段與同學合作時,在老師的指導下承擔不同的角色。

協同計算是通過成對或團隊工作來執行計算任務的過程。因為這需要徵求他人的意見和反饋,因此有效的合作比獨立工作能帶來更好的結果。在程序開發過程中,學生應輪流扮演不同的角色,如記錄員、推動者、程序測試人員或計算機的「驅動者」。

描述使用代碼注釋、演示和示範在程序開發期間做出的選擇。

人們通過交流他們的代碼來幫助其他人理解和使用他們的程序。傳達一個人的設計選擇的另一個目的是展示對自己作品的理解。這些解釋可以表現為協作者和評估者的在線代碼注釋,或者作為總結性演示的一部分,例如代碼遍歷或代碼日誌。

6-8年級(11-13歲)

尋求並整合來自團隊成員和用戶的反饋,以完善滿足用戶需求的解決方案。

採用以用戶為中心的設計的開發團隊創建了能夠產生巨大社會影響的解決方案(例如,程序和設備),例如一個應用程式,它允許有語言困難的人將難以理解的發音轉換成可理解的語言。學生應該開始在整個設計過程中尋求不同的觀點,以改進他們的計算產品。對最終用戶的考慮可能包括可用性、可訪問性、適合年齡的內容、尊重的語言、用戶視角、代詞使用、顏色對比和易用性。

將現有代碼、媒體和庫合併到原始程序中,並提供歸屬。

在他人工作的基礎上,學生可以創作出更有趣、更有力的產品。學生應在自己的程序和網站中使用部分代碼、算法和/或數字媒體。在這個年級,他們還可以導入庫並連接到Web應用程式程序接口(API)。例如,在創建橫向滾動遊戲時,學生可以合併另一個遊戲中的部分代碼,以創建逼真的跳躍動作,並且他們還可以導入Creative Commons許可的圖像以在後台使用。學生應該把這部分貢獻歸功於原創作者。

使用一系列測試用例系統地測試和改進程序。

創建和分析用例和測試用例,以更好地滿足用戶的需求,並評估程序是否按預期運行。在這個年級,測試應該是一個深思熟慮的過程,比較低年級更具疊代性、系統性和主動性。學生應該開始考慮潛在的錯誤來測試程序,例如如果用戶輸入無效的輸入(例如負數和0,而不是正數)將會發生什麼。

當協同開發計算時,分發任務並維護項目時間表。

協作是編程開發中常見且至關重要的實踐。通常,許多個人和團體共同致力於項目的相互依賴的部分。學生應該在團隊中擔任預定義的角色,並使用結構化的時間表管理項目工作流程。在老師的指導下,他們將開始創建集體目標、期望和公平的工作量。例如,學生可以將遊戲的設計階段劃分為規劃故事板、流程圖和遊戲機制的不同部分。然後,他們可以在團隊成員之間分配任務和角色,並制定截止日期。

記錄程序以使其更易於跟蹤、測試和調試。

文檔允許創建者和其他人更容易地使用和理解程序。學生應該為最終用戶提供解釋其產品及其運作方式的文檔。例如,學生可以提供項目概述和明確的用戶說明。他們還應該在產品中加入評論,並使用設計文檔、流程圖和演示文稿來傳達他們的流程。

9-10年級(14-15歲)

評估在使用庫等資源時的限制或限制計算產品使用的許可證。

軟體許可的例子包括版權、免費軟體和許多開源許可計劃。在之前的年級,學生們遵守許可計劃。在這一年級,他們應該考慮許可對自己工作的影響,特別是在合併庫和其他資源時。學生可以考慮兩個滿足類似需求的軟體庫,並根據許可證限制最少的庫來證明自己的選擇是正確的。

評估和優化計算產品,使其更易於使用和訪問。

測試和細化是改進計算產品的深思熟慮的疊代過程。這個過程包括調試(識別和修正錯誤),並將實際結果與預期結果進行比較。學生應該響應最終用戶不斷變化的需求和期望,並提高產品的性能、可靠性、可用性和可訪問性。例如,學生可以結合來自不同最終用戶的反饋,幫助指導用戶介面中菜單和按鈕的大小和位置。

使用協作工具設計和開發在團隊角色中工作的計算產品。

協作工具可以像原始碼版本控制系統一樣複雜,也可以像協作文字處理器一樣簡單。成對編程中的團隊角色是驅動程序和導航器,但在更大的團隊中可能更專業。隨著項目變得越來越複雜,幫助項目開發的資源選擇變得越來越重要,而且應該由學生來完成。學生可以團隊合作開發移動應用程式,解決與學校或社區相關的問題,選擇合適的工具來建立和管理項目時間表;設計、共享和修改圖形用戶介面元素;並跟蹤計劃、進行中和已完成的產品。

在複雜程序的開發中使用文本、圖形、演示和/或演示來記錄設計決策。

複雜的程序被設計成相互作用的模塊系統,每個模塊都有一個特定的角色,為一個共同的總體目的而協調。這些模塊可以是程序中的過程、數據和過程的組合,或者是獨立但相互關聯的程序。複雜程序的開發由諸如庫和工具之類的資源來輔助,這些資源用於編輯和管理程序的各個部分。

11-12年級(16-17歲)

使用軟體生命周期過程為廣大受眾規劃和開發程序。

解釋可能導致電腦程式受損的安全問題。

例如,常見問題包括缺少邊界檢查、輸入驗證不良以及循環引用。

為多個計算平台開發程序。

示例平台可以包括:計算機桌面程序、web程序或移動程序。

在小組軟體項目中使用版本控制系統,集成開發環境(IDE)以及協作工具和實踐(代碼文檔)。

開發並使用一系列測試用例來驗證程序是否按照其設計規範執行。

在這個年級,學生應該選擇自己的測試用例。

修改現有程序以添加其他功能並討論預期和非預期的影響(例如,破壞其他功能)。

例如,對方法或函數簽名所做的更改可能會破壞系統中其他位置的對該方法的調用。

通過代碼檢查等流程評估程序的關鍵質量。

質量的示例可以包括正確性、可用性、可讀性、效率、可移植性和可伸縮性。

比較多種程式語言,並討論它們的特性如何使它們適合解決不同類型的問題。

功能的示例包括塊與文本、高級與低級。

關鍵字: