周世平 童向榮 盧云宏
文章編號:1672-5913(2015)03-0084-03
中圖分類號:G642
摘要:闡述程序設計基礎課程改革方案,以學生為中心制定課程目標、考核、課程內容及學習方式,給出一個新的程序設計基礎課程教學改革方案。
關鍵詞:程序設計基礎;課程改革;以學生為中心
0 引言
程序設計基礎課程是計算機專業學生接觸的第一門專業課程,它的質量關系到數據結構、操作系統等后續課程能否順利進行。多年來我們延續著課堂教學、實驗教學、課程設計、考試4個教學環節的模式。課堂教學以一本教材為主要教學內容,實驗教學以輔導學生能夠完成編程實驗為主,課程設計出一些比實驗大的題目讓學生在集中的時間完成,考試采用流行多年的考試方法(選擇、填空、程序填空、編程題的匯總)。為了維持及格率,教師將考試題目出得越來越簡單。該課程后續課教師抱怨學生的編程能力太差,連簡單的一個算法都不能實現;更有甚者,認為程序設計課程根本沒有教學生程序設計,只是教學生程序設計的語言。學生反而抱怨老師的課程沒有培訓機構講得實用。
2014年7月,筆者在北京懷柔參加CCF舉辦的第二屆導教班。南京大學的陳道蓄教授進行了5天的“計算機問題求解”課程講座。南京大學“計算機問題求解”課程將計算機導論、C++程序設計、數據結構、離散數學、算法設計與分析5門課程整合成一門跨時2年的課程。該課程以程序設計為主線,對計算機領域所需的離散數學、問題建模、數據抽象、算法設計與分析、算法復雜性理論進行了探索性的學習。“計算機問題求解”課程所采用的模式是建立在培養學生各種能力基礎上的。如采用啟發式教學,培養學生的自學及凝聚問題的能力;采用深度引導,鼓勵學生追求質量更好的算法,培養學生的創新意識;采用數學逐步滲透,培養學生的數學意識和能力。陳道蓄教授的5天講座感染了來自各高校的一線教師,大家愿意將這種以學生為中心的教育理念移植到所講授的每門課程中去,這種移植不是簡單的模仿,更不能照搬,而是要根據各校的具體情況,建立適宜的課程體系,完成每一門課的教學改革設計。
1 改革的出發點
一門課程的改革涉及課程的各個方面,包括課程目標、課程內容、實驗課內容、考核方式、學習形式、作業形式等。所有這些方面的改革都面臨著這樣的問題:課程的出發點是什么?改革的目的是什么?
長期以來我們課程的出發點都是以教師為中心:教師教什么?怎么教?怎么考?很少關注這樣的問題:教師教的內容是學生需要學的嗎?教師教的方式適合學生嗎?考試題目有助于學生的學習嗎?我們是否考慮所進行的每一個教學環節究竟能給學生帶來什么?比如,課堂上面面俱到的語法講解、實驗課上的一個個程序的抄寫、僅僅為了題型多樣化的考試題目。我們已經習慣這些教學環節,卻忘記了它們對學生產生的副作用。
任何一門課程的改革首先是改革我們課程教學的出發點。課程的出發點不應該是教師,而應該是以學生為中心。所謂以學生為中心就是首先要考慮學生的需求。比如,學生為什么要學習這門課?學生在這門課程能夠學到什么,掌握了什么,培養了什么。我們在這里是說,學生“學會”什么,不是說教師認為學生“應該”學會什么。我們強調去掉“應該”二字,其目的就是要將課程的中心由教師變換到學生。
程序設計基礎作為計算機專業學生的第一門基礎課,對剛剛進入大學的學生起著至關重要的作用:引導改變學生的學習模式,完成從中學學習到大學學習的過渡;引導學生的自學意識,具備初步自學的能力;引導學生對計算機專業產生好的感性認識與體驗,培養學生對專業的熱愛。程序設計基礎課程的改革必須以學生為中心,完成塒學生的引導作用。在明確了該門課程的作用后,就要設置課程的目的和考核要求,再根據課程內容和考核要求設置課程內容,最后確定學習方式。
2 課程目標及考核
課程目標與考核是兩個非常重要的環節,這兩個環節的確定決定了一門課的性質。所謂課程目標是我們期望學生能夠從這門課程的學習得到的,考試是檢查課程的目的是否達到的一種重要手段。
2.1 課程目標
課程目標應該是專業目標的一部分,應該是先制定計算機專業的目標,然后再制定課程目標。談到課程目標時,我們就容易聯想到“傳道、授業、解惑”。然而,這6個字以教師為中心,關注的是教師的職責、教什么、怎么教的問題。改革后的課程目標是以學生為中心,關注學生學到什么、學生怎么學的問題。
任何一門課程的目標都不應該僅僅是知識的傳授。陳道蓄教授在“計算機問題求解”課程中談到課程目標時,提出了4個方面:培養學生應該具有的意識、應該具有的能力、所需要的知識、所具備的技能。
程序設計基礎課程是利用計算機程序設計語言來解決實際問題的課程,因此在本門課上,首先學牛要學會一門程序設計語言,包括語言知識的掌握及應用技能,然后學生要學會用這門語言進行程序設計,解決實際問題;而解決實際問題,就要學會對問題的分析。另外我們希望學生在本門課程中具有初步的自學能力,為將來的專業課學習奠定基礎。為此,該門課程的目標如下:“本課程的目標是希望學生掌握簡單的數據抽象、問題建模和簡單的算法等基礎知識,養成解決問題的能力,養成程序設計的能力,養成自我學習專業知識的能力,學會學習一門語言,熟練使用語言及其開發環境進行程序開發與測試的技能。”
課程目標的特點是通過學習一些基本知識,培養學生應該具有的能力。在這里不是教會學生一門語言,而是要求學生“學會學習”一門語言。學會學習一門語言,既培養學生的自學能力,又保證將來學生不會畏懼任何語言課程,有信心通過自己的學習可以學會任何一門語言。
2.2 考試
考試對于大一的學生再熟悉不過了。程序設計基礎作為計算機專業的第一門專業基礎課程,它的考試內容與形式對學生的學習態度的轉變有著相當大的作用。中學時期的考試以對知識的掌握為主,所以學生的學習態度是學知識;如果大學的學習還考知識,那么學生的學習目的就是學知識。考試是課程的一部分,考試也是課程的指揮棒。考試的內容及方式決定了學生的學習態度和學習方式。
在確定本門課程考試的內容及方式時,要審視考試的目的是什么。首先考試不是單純地為了考學生,為了給學生一個教學記錄。考試是為了讓學生更好地學習,是為了督促檢查課程目標的實現。程序設計基礎課程的目標包含了知識、能力與技能3個部分,在這3個部分中,解決問題和程序設計的能力最為重要,所以考試的內容以能力為主,考核的知識是應該具備的能力所需要的。編程的技能是學生必須掌握的,因此是必考的
至于采用什么樣的考試方式,要看它是否能夠更好地讓學生展示學習的成果。鑒于本門課程的特點,考試內容及方式可以擬定如下:“本課程的考試內容為程序設計能力、解決問題的能力以及C語言運用的技能。考試的方式為OJ平臺機考與案例解決方案。”
沒有采用筆試,不意味著知識不重要。更重要的是學生是否能夠將學到的知識用于解決問題中,而不是死記硬背知識。在制定考核內容及方式時,要充分考慮課程目標。如果考核不理想時,就要反思課程目標是否合適,是否需要改進?
3 課程內容及學習方式
課程目標是以學生為中心的,課程內容和學習方式也必須是學生為中心。強調以學生為中心,主要考慮學生學會哪些內容,學生以什么樣的方式學會,而不是以教師的角度,教師該傳授哪些內容,教師該如何傳授。強調以學生為中心,不是說不需要教師,而是強調教師在傳授的內容和方式上要以學生的“學會”為著眼點。
3.1 課程內容
以往講一門課,實際上是講一本教材。圍繞著本課程目標中關于能力、知識、技能的要求,課程內容中除了C++語言本身,增加簡單的算法設計、簡單的數學建模思想,以此培養學生分析問題、解決問題和程序設計的能力。所以本課程的內容如下:“本課程內容大致分為如下幾個方面:C++語言、簡單算法設計、簡單的數學建模思想。3部分內容不會獨立分開講,而是通過有機地結合起來,達到我們對學生能力培養的目的。至于教材我們也不會局限于一本教材,而是提供給學生更多的開放內容。”
本課程是借助于C++語言,向學生傳授設計的思想,培養學生解決問題的能力。
3.2 學習形式
多年來我們一直延續著教師講一學生聽一學生作業一教師總結一復習考試的流程模式。這種方式不是學生的學習方式,而是教師的傳授方式;不是以學生為中心的,是以教師為中心。若以學生為中心,就要考慮什么樣的方式能讓課程有效地達到目標。課程目標決定了學習方式。
程序設計基礎課程除了傳授語言知識外,還要培養學生解決問題的能力,學生的編程技能。另外為了幫助大一學生順利過渡到大學的專業學習,本門課程還承擔著培養學生自學能力的任務。根據煙臺大學學生的實際情況,對于較難部分教師承擔講解,如算法;對于簡單部分學生自學,如語言細節。本課程的學習方式如下:“本課程在教師指導下讓學生自學語言的使用、語言的細節、程序的運行及測試。教師將程序設計思想、簡單算法及其數學建模講解傳授給學生,引導學生掌握知識、運用思想和能力,幫助學生自我培訓編程的技能。”
筆者采用的學習方式,學生有主動承擔的部分,教師有引導督促的責任,沒有將教師和學生完全分隔。既給了學生自我探索、自我學習、自我訓練的空間,也強調了教師在學生學習過程中的引導角色。
4 結語
改革方案中的課程目標、考核、課程內容及學習方式都是建立在以學生為中心的基礎上,徹底改變了教師教、學生學的教學模式。改革方案的每一個環節中更凸顯對學生能力的培養。
煙臺大學近一年來進行程序設計基礎課程的改革,在2013級學生中采用Online Judge平臺的機考模式,用實際問題的程序設計求解取代傳統的筆試。這種考試方式的改革,徹底改變了學生背書的習慣,將學生的注意力吸引到對程序設計能力的關注。與2012、2011級學生對比,經歷考試改革的2013級學生的程序設計能力大幅度提高。
僅僅考試改革就給程序設計基礎課程帶來了巨大變化,我們相信全方位的以學生為中心的教學改革方案將會給這門課程帶來更多活力,同時為計算機專業的教學改革帶來希望。