北京大學“并行程序設計”是面向全校理工科研究生開設的計算技術實踐類課程。自1999年秋季開課以來,每學年開課一次。自開課以來,針對研究生教學的特點,北京大學始終堅持教學和科研相結合、理論和實踐相結合的原則,采用課堂講授、編碼實踐和綜合案例研究相結合的教學形式,對教學的內容不斷改進和完善。該課程的內容已經涵蓋了從多核、SMP、集群到Grid的各種尺度的并行技術,既有成熟的MPI、集群和pThread等技術,也有“多核”和Grid等正在引起廣泛關注的前沿技術。目前積累的應用案例不但來自不同的學科領域,具有不同的并行模式,而且具有不同的并行粒度、適合采用不同尺度的并行技術。
體會1:課程教學與科研工作相互促進
以教員的科研工作促進課程教學。承擔本課程教學工作的教員都長期從事并行處理技術的研制和應用推廣工作,在長期的科研實踐中積累了大量來自不同學科的應用實例。把這些實例用于教學活動,一方面可開闊學生的視野,了解不同領域問題的特征;另一方面也避免了枯燥的概念、方法、技術的陳述。
以教學活動促進教員的科研工作。針對課程以研究生為教學對象的特點,將一些還不成熟、但屬于教員研究領域內的相關技術(如Grid),通過技術討論和調查的方式融入教學內容中。一方面使得學生不但能掌握本領域中的成熟技術,而且還能對其中的前沿問題和方向有一定的認識。另一方面,可通過與來自不同學科背景學生的交互討論,促使教員從不同的角度來分析科研工作中的問題,促進科研工作的進步。
以教學活動促進學生的科研活動。鼓勵學生以自己科研工作中遇到的相關問題作為課程的綜合研究實踐,并記入課程的成績考評。在課堂上對綜合研究實踐進行討論和教師點評,幫助相關學生解決實際的問題。同時,這樣的課程綜合研究實踐又為今后的教學活動積累了實例和素材。
體會2:以實踐驅動理論教學
在課程的內容設計和教學安排上,教員盡可能將每一個概念、技術的闡述與具體的應用實例結合起來。通過實例加深學生的認識,并分析、比較不同技術在適用性方面的差別。在教學活動中,教員采用課堂講授和課堂討論相結合的方式,解決教學內容廣度與深度之間的矛盾。課堂講授中,力圖覆蓋所涉及的各基本概念和技術,從比較高的層次上將它們組織成體系。對這些技術的進一步學習,則以課程綜合研究案例的形式,引導學生自己去分析和思考。每個學生根據自己的興趣、知識背景和科研工作需要,選擇合適的綜合研究案例進行研究設計。在課堂討論中,各個學生將自己的研究成果、心得與大家進行分享。實踐表明,這種課堂互動討論不但能督促主講學生就并行處理技術中的某一方面進行比較深入、系統的學習和認識,而且其他參與討論的學生也能從中獲得相當深入的認識。
體會3:兼顧不同知識背景的學生
選修“并行程序設計”課程的學生來自北京大學不同的理科院系。來自計算機系的學生缺乏應用問題的背景,來自其他院系的學生計算機基礎較弱、而且各自的應用背景相差很大。為了替不同的學生選擇一個共同的切入點,教師從三個層次來安排課程的內容:應用實例、典型問題、并行技術。把不同領域的應用實例歸結成若干個數學語言描述的典型問題,以典型問題闡述基本的并行技術和問題。
體會4:從多角度激發學生的學習興趣和熱情
把具體的技術與實現的原理結合起來。讓學生通過對具體技術的學習,獲得一些原理性的認識。
讓學生在學習過程中獲得成就感。這種成就感不是來源于實現某個并行算法或者完成一個練習,而是通過課程的綜合研究案例,解決學生自己認為有意義的某個現實問題。例如,非計算機專業的學生可以以課題組中的問題作為綜合研究案例,對相關的并行技術進行深入分析;計算機專業的學生則可以通過自己動手實現某一技術的原型,來激發對相關原理和難點進行系統分析的興趣。
及時引入先進的技術和成果。作為一門面向研究生的課程,讓學生認識國際上發展的前沿和方向,既是課程必備的內容、也是學生的期望。