朱進 楊朝輝 杜景龍 陳泰生 張委偉



摘? 要:根據測繪地理信息類專業學生的培養要求,在C#程序設計課程的教學中,通過案例教學的方式培養學生的計算思維能力。以4個有趣實用且與其他測繪地理信息類課程相關的教學案例為例,教學內容涉及坐標轉換、孿生素數、科赫雪花作圖和數據庫讀取繪制,引導學生分析問題并設計相應的解決方案,展現學生知識點背后所蘊含的計算思維,其中包括抽象、自動化、分解、遞歸等。案例實踐表明,采用面向計算思維的案例式教學,顯著提高了學生的學習興趣和計算思維能力,取得了良好的教學效果。
關鍵詞:計算思維;程序設計;測繪地理信息;案例教學
中圖分類號:TP39;G434 文獻標識碼:A 文章編號:2096-4706(2023)10-0177-05
Abstract: According to the training requirements of students majoring in surveying and mapping geographic information, in the teaching of the C# programming course, case teaching is used to cultivate students' computational thinking ability. Taking four interesting and practical teaching cases related to other surveying and mapping geographic information courses as examples, the teaching content involves coordinate transformation, twin prime numbers, Koch snowflake painting, and database reading and drawing, guiding students to analyze problems and design corresponding solutions, and demonstrating the computational thinking behind students' knowledge points, including abstraction, automation, decomposition, and recursion. Case practice shows that adopting case-based teaching oriented to computational thinking significantly improves students' learning interest and computational thinking ability, and achieves good teaching results.
Keywords: computational thinking; programming; surveying and mapping geographic information; case teaching
0? 引? 言
C#程序設計是國內眾多高校測繪地理信息類專業中一門重要的計算機程序設計基礎課程,具有較強的理論性、實踐性和應用性。這門課程是組件式GIS(Geographic Information System)開發、空間數據結構、空間數據庫、測量平差程序設計、計算機圖形學、數字圖像處理、Web程序設計和GIS設計與開發實習等課程的編程基礎,為這些課程涉及的算法、功能和模塊的實現提供了開發環境和語言基礎,使學生獲得在測繪地理信息工程環境中分析、設計、開發、測試和運行軟件系統的技能。該課程通常在大一學年開設,其能否激發和培養學生程序設計的興趣和能力,決定著學生能否奠定良好的編程基礎及其是否愿意在后續專業課程的學習中投入足夠的時間和精力,可以說該課程在整個課程體系中具有極其重要的基礎作用。
測繪地理信息類專業C#程序設計課程的教學目標是培養學生運用C#高級程序設計語言來設計和實現軟件系統的能力,解決測繪地理信息算法實現和工程應用問題。在傳統的程序設計課程教學中,教師把程序設計語言的各個知識點填鴨式地灌輸給學生,展示代碼片段,讓學生在上機時驗證課本中的程序,鞏固所學的語法和知識點。這種傳統教學方式的教學效果往往不夠理想,與教學目標相去甚遠,許多學生對課堂內容不感興趣,只能死記硬背一些語法知識和程序片段,不會從根本上分析問題并設計程序求解,沒有養成良好的思維習慣,有些學生甚至是在付出大量時間和精力后依然無法理解基本的程序結構。
近十年來,在中國大學計算機基礎課程教育中,教師越來越重視培養學生的計算思維(Computational Thinking)。美國卡內基梅隆大學的周以真(Jeannette M. Wing)教授于2006年提出一種思維方式——計算思維[1],即基于計算機科學的基礎概念進行問題求解、系統設計,以及進行人類行為理解等揭示計算機科學之廣度的思維活動,能夠為問題的有效解決提供一系列的觀點和方法,可以更好地加深人們對計算本質以及計算機求解問題的理解,并且還能克服“知識鴻溝”,便于計算機科學家與其他領域專家交流切磋。隨后,美國、英國、澳大利亞等歐美國家都將計算思維作為計算機信息技術教育的重要內容[2]。在國內,教育部和中國計算機學會等組織和機構,較早對計算思維進行了探討。2010年,C9高校聯盟發布《九校聯盟(C9)計算機基礎教學發展戰略聯合聲明》,強調要把培養學生計算思維能力作為計算機基礎教學中一項長期而重要的核心任務[3]。2013年,教育部大學計算機課程教學指導委員會發表《計算機教學改革宣言》,指出以計算思維為切入點的大學計算機課程改革是大學計算機課程的第三次重大改革,通過培養學生計算思維的意識來提高其計算機應用水平[4]。隨著第三次大學計算機課程改革的開展,越來越多的專家學者開始對計算思維的概念、目標與培養等方面的內容展開了深入的探討和研究[5-9]。
在測繪地理信息類專業C#程序設計的教學過程中,通過引導和培養學生的計算思維,可以實現提升學生計算思維能力的目標。在國內,針對計算思維的教學改革研究,大多集中于探討計算思維的概念、內涵、特征,對培養策略的研究相對甚少。本研究從計算思維的應用角度出發,對計算思維進行深入的剖析,結合測繪地理信息類專業的學科特點,針對C#程序設計課程的重要知識點設計相應案例,通過有趣且有用的案例,逐步引導學生提出問題、分析問題、分解問題和編程求解,在教學內容中融入對學生計算思維能力的培養。
1? 計算思維的概念和特征
1.1? 計算思維的概念
計算思維概念的提出,引起了學術界的共鳴,國內外學者在周以真教授觀點的基礎之上,紛紛針對計算思維提出了自己的看法。蔣宗禮認為計算思維是一種與計算機及其特有的問題求解緊密相關的思維形式和方法,在求解問題時,全方位、全周期有意識地使用計算機科學家們所采用的方法、技術、工具、環境和資源,在面對不同人群的能力培養要求時計算思維有樸素計算思維、狹義計算思維和廣義計算思維之分[10]。任友群等認為,計算思維是一種獨特的解決問題的過程,它可以幫助人們更好地理解和分析復雜問題,從而形成具有形式化、模塊化、自動化、系統化等計算特征的解決方案[11];龔沛曾認為計算思維包含意識、方法和能力三個層次[12];陳國良構建了以計算為核心,以抽象、自動化、設計、通信、協作、記憶、評估為基本概念的帶有層次結構的計算思維表述體系框架,認為計算思維是一種包含數學思維、工程思維和科學思維的綜合性思維,它的核心概念是抽象和自動化[13]。
綜合來看,計算思維是一種求解問題的思維方式,包含問題抽象、模型構建、算法設計、模型求解和問題延伸等過程,其本質是抽象和自動化,具體方法包括算法思維、抽象、分解、概括、評估、迭代、遞歸等。
1.2? 計算思維的特征
還有許多專家對計算思維的特征進行了研究。陳國良認為計算思維為人們提供了理解自然、社會萬千事物的一個新視角,是一種解決問題的新方法,能夠創造知識而非僅僅使用信息,提高了人們的創造力和創新力[13];李廉認為計算思維的標志是有限性(表達結論的方式有限)、確定性(語義確定)和機械性(通過機械步驟實現),其結論具有構造性、可操作性和可行性[14];任友群認為計算思維提供一種能夠廣泛應用于工作、學習和生活中各類問題的新視角,還可以作為計算機科學與其他學科交流的橋梁[11];鐘柏昌認為計算思維具有重要的基礎性教育價值,具有改造世界和認識世界的豐富內涵及功能,計算思維可以應用于不同的領域,具有明顯的社會性和外在價值[15];李鋒認為計算思維能夠提高學生利用信息技術解決問題的能力,提升學生對信息技術應用的批判能力及其在信息社會中的自我調節能力,對于個人成長和發展具有重要的作用[16];曹楊璐認為對學生計算思維的培養還應包括概況和遷移能力,做到“舉一反三,觸類旁通”[17]。
從上述不同學者的觀點可以發現,計算思維具有有限性、確定性、機械性和社會化等特征,是一種利用計算工具并融合數學思維、邏輯思維和工程思維的思維方式,是一種求解問題的途徑,可以用于構建跨學科知識的橋梁,提高學生的計算素養和利用信息技術的創造力和批判能力。
2? 面向計算思維的案例教學
2.1? 教學案例設計
計算思維作為一種思維方式,可以廣泛應用于其他相關學科,是信息社會中每個人的基本能力和素養。對學生計算思維能力的培養,應落實到具體的教學內容當中。C#程序設計是一門測繪地理信息類專業的基礎程序設計開發課程,在課程教學中,可以結合教學內容和測繪地理信息類其他專業課的知識(如地圖學、計算機圖形學和空間數據庫等),通過案例式教學,讓學生在教師精心設計的案例中,體會和領悟計算思維的神奇和美妙。具體來說,原有的教學內容不需要調整,但需要重新規劃和梳理,針對每個教學內容的知識點設計相應的案例,在案例中融入計算思維的基本概念,引導學生發現問題、分析問題、轉化問題,突出計算思維中的抽象、分解、遞歸、自動化等方法,培養學生的計算思維能力和創造力。
針對C#程序設計的教學內容,結合測繪地理信息類課程的特點,我們在不同的章節設計了教學案例,如表1所示。表1展示了部分典型案例所涉及的計算思維方法和對應的教學內容,這些案例都來源于實際問題,是計算思維跨學科的應用,部分案例與其他測繪地理信息類課程相關,可以為其他課程的學習打下良好的鋪墊,啟發和培養學生的計算思維意識和能力。
2.2? 案例1:坐標轉換
針對順序結構這一教學內容,設計坐標轉換案例,案例與地圖學中的地圖投影相關。給定一個地點的經緯度(即地理坐標),并給出投影變換的數學公式,然后將其轉換為投影坐標(如在WebGIS中常用的Web Mercator投影)。此案例較為簡單,同學們可以根據公式直接求解問題。但需要在教學中讓學生體會案例中計算思維的自動化和機械性特征,以及計算思維與數學思維的相關性。
課后可以進一步對案例進行延伸,如在作業中給定兩個地點的經緯度,要求學生利用中學學過的歐氏距離公式計算兩個地點的直線距離,有了課上案例的基礎,同學們自然可以聯想到先計算每個地點的投影坐標,再計算兩點之間的距離。此外,還可以給出大圓距離(Great-circle distance),大圓距離為球面上兩點之間的最小距離,如圖1所示,讓同學們直接根據經緯度來計算兩點之間的距離,并比較計算結果與歐氏距離之間的差別,引導學生自己上網進一步學習為什么會有這樣的差別,激發學生的學習興趣。通過案例延伸,同學們知曉同一個問題會有不同的求解方法,鼓勵同學們從多種視角思考問題,并比較不同求解方法的優劣。
2.3? 案例2:孿生素數
在選擇結構、循環結構和函數(方法)的教學章節中,設計孿生素數教學案例。案例分為兩部分,第一部分在選擇結構和循環結構部分給出,案例目標是判斷一個數是否為素數。教學中要引導學生根據素數的定義進行思考,基于計算思維逐步對問題進行分解,將問題分解為循環以及在每個循環步中判斷是否能夠整除,求解思路清晰之后再進行編程實現。案例第二部分有關孿生素數(Twin Prime)猜想,在函數(方法)部分給出。孿生素數是相差2的素數對,例如3和5、5和7、11和13等,猜想表述為存在無窮多個素數p,使得p+2是素數。案例表述為輸出1~10 000之間的孿生素數,在教學中啟發學生利用計算思維中的抽象方法,將判斷素數的實現抽象為一個函數,再結合孿生素數的定義,將問題分解為在循環中判斷兩個相鄰素數的差是否為2,程序如圖2所示。
在介紹孿生素數猜想時,教師可以介紹一些相關的背景:2013年5月,華人數學家張益唐在孿生素數研究方面取得突破性進展,他證明了孿生素數猜想的一個弱化形式,通過數學家的故事來激發學生的學習興趣,鼓勵他們突破前人,勇攀科研高峰。
2.4? 案例3:海龜作圖-科赫雪花
海龜作圖最早來源于Python語言的Turtle庫[18],該模塊是Python語言基礎的圖形繪制模塊,它利用程序語句控制一只可愛的小海龜繪制圖形。Turtle繪制圖形的概念起源于1969年,早期用于LOGO語言和兒童編程教學中。由于這一方法非常直觀有趣,很容易被初學者所接受,隨后被引入Python語言。但C#語言沒有Turtle庫,為了激發學生的學習興趣,我們在前幾年的教學中,參照Python語言的Turtle庫,設計開發了一個Turtle類,包含前進、后退、旋轉等基本語句,用于基礎圖形繪制。最近,Github開源社區的開發者Nakov開發一個功能更為強大的Turtle Graphics.NET庫[19],用戶可以利用Visual Studio的Nuget工具直接下載,可以很好地滿足教學需要。
在圖形繪制章節,利用Turtle類來繪制科赫雪花(Koch Snowflake)[20],如圖3、圖4所示。科赫雪花也稱為科赫曲線,是一種分形曲線,其形態似雪花,早在1904年率先由瑞典數學家科赫(Koch)提出。在教學中,利用計算思維中的分解方法將繪制過程分解為三步,同時根據科赫雪花的繪制步驟,自然而然地引出計算思維中的遞歸概念,讓同學們深入理解遞歸中的“遞”和“歸”兩個主要過程。如果學生們對海龜作圖非常感興趣,在課后可以布置開放類的作業,讓同學們繪制自己感興趣的圖形,一些同學繪制了生動有趣的圖形,如形象逼真的動漫人物形象等。
2.5? 案例4:讀取數據庫繪制蘇州各鄉鎮及其名稱
在利用ADO.NET框架讀寫數據庫的教學章節中,可以設計如下教學案例。教師給定一個文本文件,文本文件中的每一行都保存著蘇州市一個鎮的信息,包含三個以上的字段,一個是鎮的經度,一個是鎮的緯度,其他字段包含鎮的名稱、人口、GDP等屬性信息,要求學生通過編程將該文本文件的數據先導入微軟SQL Server數據庫,再讀取數據庫,最后將每個鎮的空間位置和名稱(或其他屬性信息)繪制出來。
該案例與GIS原理(GIS信息包含空間信息和屬性信息)、空間數據庫等課程相關。在教學中,引導同學們對問題進行分解,分解為寫入數據庫、讀取數據庫和繪制圖形三個部分,由于問題給出的是鎮的經緯度信息,還必須利用案例1的知識對坐標進行轉換得到投影坐標,寫入數據庫這一步還可以繼續分解為讀取文件信息、坐標轉換和寫入數據庫三個步驟。在讀取數據庫后,由于坐標是投影坐標,可以啟發同學們利用屏幕坐標和投影坐標間的比例關系,求得從投影坐標轉換得到屏幕坐標的公式。在繪制圖形階段,利用轉換后的屏幕坐標繪制每個鎮的空間和屬性信息,如圖5所示。此外,一個鎮本身區域很大,但在案例中被抽象為一個點,針對一個鎮的相關信息,設計相應的類來表示該鎮的空間和屬性信息,這都是計算思維中抽象的體現。
案例存儲的是點位置信息,課后還可以給同學們布置思考題,讓學生思考如何將線或面存儲至數據庫,為空間數據庫等課程做鋪墊。
3? 教學實踐要點
在通過案例教學對學生進行計算思維能力培養的實踐當中,為達到更好的教學效果,還需注意以下幾點:
1)提煉案例背后蘊含的計算思維。培養學生的計算思維能力,不是給原有教學內容“貼一層皮”,也不是張口閉口不離計算思維。而是需要合理編排教學內容,精心設計教學案例,在案例中提煉、剖析和展示案例背后蘊含的計算思維,引發學生的求知欲和心理共鳴。
2)教師自己要有計算思維的意識和能力。教師必須擁有終身學習的意識和計算思維能力,有時候很多案例來源于生活或其他場景(如孿生素數案例就是筆者在了解張益唐教授部分解決孿生素數猜想后設計的),在日常生活中碰到的一些問題可以將其設計為有趣且有用的案例。這對教師也提出了更高的要求,需要不斷積累和更新教學案例。
3)在提問、作業等教學環節加大計算思維的考察比重。傳統的程序設計課程,更加注重語法教學,在作業等教學環節學生只需寫出正確的程序即可。引入計算思維的案例教學后,在課堂提問、作業和考試等環節中,針對某一具體問題,我們讓學生口頭或用文字描述出該問題的求解思路和步驟,以及用到了計算思維中的哪些方法,鼓勵同學們以計算思維的方式思考問題。
4)采用錯誤編程和冗余編程的方式加強學生的程序調試能力。程序設計最終需要落實到能輸出正確結果的程序上來,在啟發和引導同學們計算思維的同時,在編程環節中,還應注重加強學生的編程能力,特別是調試能力。因此,可以在程序中,故意設置一個錯誤的地方,如索引超過數組的大小、遞歸程序遞歸層次過深等,讓同學們熟知常見的程序錯誤,不斷提高自己的程序調試能力。此外,還可以以冗余編程的方式,在一些復雜的程序中打印輸出一些中間變量,以更好地觀察程序的執行過程。
實踐表明,在經過面向計算思維的案例式教學改革后,學生的學習興趣被大大地激發起來,學生的計算思維意識和能力得到了顯著的提高,在面對一些復雜的問題時,許多學生知道該如何抽象和分解問題,對課程前后內容也能夠融會貫通。同時,學生們的程序編寫和調試能力也得到了加強,對測繪地理信息類其他專業課程也有了更深的認識。
4? 結? 論
在測繪地理信息類專業C#程序設計課程的教學過程中,我們全面梳理編排教學內容,精心設計有趣有用的教學案例,根據需要開發程序庫,將程序設計課程教學內容中枯燥的語法知識點與案例及其他課程(地圖學、GIS原理、空間數據庫、計算機圖形學等)相結合,在教學過程中,引導學生分析問題并設計相應的解決方案,展示知識點背后蘊含的計算思維。經過面向計算思維的教學案例實踐后,學生的學習興趣和計算思維能力顯著提高。同時,在對學生計算思維能力的培養方面對教師提出了更高的要求,教師需要終身學習,在實踐中積累新鮮有趣的教學案例,不斷探索對學生進行計算思維能力培養所需的教學模式和教學手段,以達到更好的教學效果。
參考文獻:
[1] WING J M. Computational thinking [J].Communications of the ACM,2006,49(3):33-35.
[2] 肖廣德,高丹陽.計算思維的培養:高中信息技術課程的新選擇 [J].現代教育技術,2015,25(7):38-43.
[3] 董榮勝.《九校聯盟(C9)計算機基礎教學發展戰略聯合聲明》呼喚教育的轉型 [J].中國大學教學,2010(10):14-15.
[4] 教育部高等學校大學計算機課程教學指導委員會.計算思維教學改革宣言 [J].中國大學教學,2013(7):7-10+17.
[5] 王正青,李靈通,田霄.指向計算思維培養:美國紐約州K-12計算機科學教育體系建設 [J].現代遠程教育研究,2022,34(6):43-53.
[6] 陳娟娟,陳凱亮.計算機支持的科學建模學習:多學段科學教育中科學和計算思維協同發展路徑 [J].遠程教育雜志,2022,40(6):22-33.
[7] 武建鑫,宋雨.計算思維教育公平何以可能?——《面向包容性世界的計算思維:教育工作者學習和行動的指南》的解讀與啟示 [J].開放教育研究,2022,28(6):72-80.
[8] 彭建蕊,李美鳳.我國計算思維研究熱點與發展趨勢解析 [J].中國教育技術裝備,2022,539:1-4.
[9] 黃賢玲,楊寧,曹琦婷.計算思維與學科融合的可行性分析研究 [J].福建電腦,2022,38(11):54-58.
[10] 蔣宗禮.計算思維之我見 [J].中國大學教學,2013(9):5-10.
[11] 任友群,隋豐蔚,李鋒.數字土著何以可能?——也談計算思維進入中小學信息技術教育的必要性和可能性 [J].中國電化教育,2016(1):2-8.
[12] 龔沛曾,楊志強.大學計算機基礎教學中的計算思維培養 [J].中國大學教學,2012(5):51-54.
[13] 陳國良,董榮勝.計算思維的表述體系 [J].中國大學教學,2013(12):22-26.
[14] 李廉.計算思維——概念與挑戰 [J].中國大學教學,2012(1):7-12.
[15] 鐘柏昌,李藝.計算思維的概念演進與信息技術課程的價值追求 [J].課程.教材.教法,2015,35(7):87-93.
[16] 李鋒,王吉慶.計算思維:信息技術課程的一種內在價值 [J].中國電化教育,2013(8):19-23.
[17] 曹楊璐,謝忠新.信息技術學科計算思維的遷移能力培養實踐研究 [J].中國信息技術教育,2021(15):54-57+100.
[18] Python. turtle — Turtle graphics [EB/OL].[2022-12-17].https://docs.python.org/3/library/turtle.html.
[19] GitHub-nakov/TurtleGraphics. NET: C# Turtle Graphics library - for teaching kids to code [EB/OL].[2022-12-17].https://github.com/nakov/TurtleGraphics.NET.
[20] Wolfram MathWorld. Koch Snowflake [EB/OL].[2022-12-17].https://mathworld.wolfram.com/KochSnowflake.html.
作者簡介:朱進(1983—),男,漢族,江蘇南京人,講師,博士研究生,研究方向:地理信息系統開發、地理大數據。