張樂平+李東方
摘 要:培養(yǎng)具有數(shù)據(jù)素養(yǎng)的生命科學(xué)復(fù)合型人才是生物醫(yī)學(xué)大數(shù)據(jù)時(shí)代的要求。文章在對(duì)C、Java、VB等傳統(tǒng)程序設(shè)計(jì)語言教學(xué)的反思基礎(chǔ)上,通過總結(jié)以Python為教學(xué)語言的醫(yī)科學(xué)生程序設(shè)計(jì)課程教學(xué)改革,提出基于計(jì)算思維關(guān)注點(diǎn)分離原則的Python數(shù)據(jù)分析程序設(shè)計(jì)教學(xué)策略,旨在讓數(shù)據(jù)素養(yǎng)成為醫(yī)科學(xué)生大數(shù)據(jù)時(shí)代的一種基礎(chǔ)能力。
關(guān)鍵詞: Python;程序設(shè)計(jì);關(guān)注點(diǎn)分離;數(shù)據(jù)素養(yǎng)
0 引 言
作為21世紀(jì)最活躍的科學(xué)研究領(lǐng)域之一,生命科學(xué)迎來了大數(shù)據(jù)時(shí)代。無論是基礎(chǔ)研究還是臨床研究,近年來隨著高通量實(shí)驗(yàn)設(shè)備的廣泛應(yīng)用和醫(yī)院診療手段的推陳出新,生物醫(yī)學(xué)數(shù)據(jù)呈現(xiàn)幾何級(jí)數(shù)的增長。海量的生物醫(yī)學(xué)數(shù)據(jù)蘊(yùn)含的生物學(xué)規(guī)律將極大地促進(jìn)人類對(duì)于生命、疾病的深刻理解[1]。借助于大數(shù)據(jù)的分析挖掘技術(shù),從基礎(chǔ)研究、藥物開發(fā)、臨床診療到健康管理,生物醫(yī)學(xué)大數(shù)據(jù)正在引發(fā)生命科學(xué)研究和醫(yī)學(xué)診療模式的巨大變革。
數(shù)據(jù)素養(yǎng)是一種通過數(shù)據(jù)分析、數(shù)據(jù)挖掘發(fā)現(xiàn)數(shù)據(jù)價(jià)值的重要技能素養(yǎng),數(shù)據(jù)素養(yǎng)培養(yǎng)現(xiàn)已成為大數(shù)據(jù)時(shí)代的教育研究熱點(diǎn)[2],但是醫(yī)科學(xué)生接受人工智能、機(jī)器學(xué)習(xí)等數(shù)據(jù)挖掘技術(shù)的學(xué)習(xí)訓(xùn)練機(jī)會(huì)很少,造成生物醫(yī)學(xué)學(xué)科人才的數(shù)據(jù)挖掘技能相對(duì)比較弱,無法滿足生物大數(shù)據(jù)發(fā)展對(duì)數(shù)據(jù)素養(yǎng)的要求。對(duì)醫(yī)科院校計(jì)算機(jī)程序設(shè)計(jì)教學(xué)來說,如何將數(shù)據(jù)素養(yǎng)培養(yǎng)嵌入課程中開展信息科學(xué)和生命科學(xué)的交叉學(xué)科教育既是挑戰(zhàn)又是機(jī)遇。
1 大數(shù)據(jù)時(shí)代背景下醫(yī)科學(xué)生程序設(shè)計(jì)課程教學(xué)的反思
1.1 醫(yī)科院校程序設(shè)計(jì)課程的現(xiàn)狀和重定位
目前,非計(jì)算機(jī)專業(yè)程序設(shè)計(jì)課程主要參照理工科院校程序設(shè)計(jì)語言教學(xué)——從20年前的C語言、后來的Java以及最近的視窗語言Visual Basic和C#。近年來,圍繞醫(yī)科學(xué)生的計(jì)算思維能力的培養(yǎng),我校成功開展了程序設(shè)計(jì)課程的翻轉(zhuǎn)課堂教學(xué)改革[3]。然而,由于生物醫(yī)學(xué)專業(yè)背景,醫(yī)科學(xué)生學(xué)習(xí)這些語言后,在算法設(shè)計(jì)和數(shù)據(jù)挖掘方面難以深入,尤其生命科學(xué)進(jìn)入大數(shù)據(jù)時(shí)代后,更難直接在大數(shù)據(jù)中應(yīng)用,因此,現(xiàn)有的程序設(shè)計(jì)課程教學(xué)與醫(yī)科學(xué)生未來的大數(shù)據(jù)分析能力之間存在巨大鴻溝(如圖1中的GAP)。
這種尷尬處境源于掌握程序語言并不是研發(fā)計(jì)算算法的充分必要條件。C、Java、VB等高級(jí)語言僅從各自角度抽象了程序設(shè)計(jì):早期的C語言將程序抽象為數(shù)據(jù)結(jié)構(gòu)和算法,這種面向過程的程序設(shè)計(jì)通過對(duì)指針、內(nèi)存、字符等操作實(shí)現(xiàn)代碼的高效運(yùn)行;Java語言將問題抽象為主客體對(duì)象關(guān)系,通過面向?qū)ο蠹夹g(shù)實(shí)現(xiàn)代碼的高效復(fù)用;而視窗語言Visual Basic和C#抽象了對(duì)象的交互邏輯和響應(yīng)關(guān)系,其可視化的編程模式適合非計(jì)算機(jī)專業(yè)學(xué)生掌握。通過這些語言可以實(shí)現(xiàn)復(fù)雜的數(shù)據(jù)挖掘算法,但是數(shù)據(jù)挖掘算法所基于的數(shù)理推演不是程序語言所能解決的,而數(shù)據(jù)挖掘算法中數(shù)理推演已遠(yuǎn)遠(yuǎn)超越了醫(yī)科學(xué)生的專業(yè)要求。
對(duì)于醫(yī)科學(xué)生來說,利用C語言、Java語言以及視窗語言Visual Basic和C#從頭實(shí)現(xiàn)數(shù)據(jù)挖掘算法是不可取的,而應(yīng)掌握在問題求解過程中如何調(diào)用第三方開發(fā)的算法程序,并應(yīng)超越對(duì)程序執(zhí)行性能、代碼高復(fù)用性或特定系統(tǒng)中視窗設(shè)計(jì)的關(guān)注。大數(shù)據(jù)時(shí)代背景下醫(yī)科學(xué)生程序設(shè)計(jì)課程的定位應(yīng)該是通過某一編程語言的教學(xué),學(xué)生除了掌握通用程序開發(fā)技術(shù)外,還能在程序開發(fā)過程中熟練調(diào)用通用的數(shù)據(jù)分析挖掘程序模塊,培養(yǎng)醫(yī)科學(xué)生未來大數(shù)據(jù)分析所需的數(shù)據(jù)素養(yǎng)能力。
1.2 Python是醫(yī)科學(xué)生程序設(shè)計(jì)課程的理想教學(xué)語言
據(jù)報(bào)道,云計(jì)算與大數(shù)據(jù)產(chǎn)業(yè)對(duì)專業(yè)崗位技術(shù)要求呈現(xiàn)“金字塔形”分布,而處于人才需求“金字塔”底部的是大量的操作應(yīng)用技能型人才(>70%)[4]。醫(yī)科院校的學(xué)生應(yīng)屬于大數(shù)據(jù)分析的應(yīng)用人員,因此,程序設(shè)計(jì)課程除了培養(yǎng)醫(yī)科學(xué)生的通用程序設(shè)計(jì)技能外,更應(yīng)側(cè)重講授數(shù)據(jù)分析挖掘的基本思想以及如何應(yīng)用。絕大部分醫(yī)科學(xué)生可能大學(xué)期間只修一門程序設(shè)計(jì)課程,因而編程語言的選擇是關(guān)鍵。
Python語言是目前最接近自然語言的通用編程語言[5],其“膠水語言”特性帶來了全新的程序設(shè)計(jì)體驗(yàn)。和Java、C#等通用高級(jí)編程語言一樣,教學(xué)內(nèi)容主要是順序、分支、循環(huán)等基本的流程控制以及面向?qū)ο蟪绦蛟O(shè)計(jì),但是Python可以輕松將C、Java等開發(fā)的程序模塊結(jié)合起來協(xié)同工作。Python語言抽象了問題及解決方案,相比其他程序語言可以在更高的層面更直觀地分析問題和描述方案,便于非計(jì)算機(jī)專業(yè)學(xué)生開發(fā)復(fù)雜的信息處理系統(tǒng)。Python可以完成Java的所有功能,例如窗口程序、網(wǎng)站開發(fā)和黑客攻防等,而且在人工智能、數(shù)據(jù)挖掘以及數(shù)據(jù)可視化等方面Python有不斷優(yōu)化的庫,使其成為能替代MATLAB和R等進(jìn)行數(shù)據(jù)處理的方式。因此,使用Python語言可以簡潔、優(yōu)雅地構(gòu)建以數(shù)據(jù)分析為中心的應(yīng)用程序原型。
Python語言將是培養(yǎng)醫(yī)科學(xué)生數(shù)據(jù)素養(yǎng)的理想教學(xué)語言。Python可用來實(shí)現(xiàn)整個(gè)數(shù)據(jù)分析流程的框架,然后通過框架接口無縫集成其他語言編寫的各種計(jì)算模塊和數(shù)據(jù)可視化模塊。例如,在Python程序中調(diào)用Matplotlib庫中的plot語句可以直接繪制出如圖2所示的極坐標(biāo)圖形,而C語言、Java等語言實(shí)現(xiàn)同樣功能則需要幾十條語句。Python語言的這種輕量級(jí)的語法和高層次的語言表示使得學(xué)生把精力集中在對(duì)問題的分析和思考上,符合應(yīng)用計(jì)算機(jī)解決問題的計(jì)算思維理念。以Python語言教學(xué)為載體,將有助于推動(dòng)醫(yī)科學(xué)生數(shù)據(jù)素養(yǎng)向深度和廣度發(fā)展。鑒于Python相比其他語言在培養(yǎng)醫(yī)科學(xué)生數(shù)據(jù)素養(yǎng)方面具有更高的教學(xué)價(jià)值,我校進(jìn)行了以Python語言為程序設(shè)計(jì)教學(xué)語言的課程教改。
2 Python程序設(shè)計(jì)課程教學(xué)改革
2.1 教改目標(biāo):讓數(shù)據(jù)素養(yǎng)成為醫(yī)科學(xué)生大數(shù)據(jù)時(shí)代的一種基礎(chǔ)能力
隨著生物醫(yī)學(xué)大數(shù)據(jù)時(shí)代的到來,數(shù)據(jù)素養(yǎng)必將是醫(yī)科學(xué)生信息素養(yǎng)的延伸與補(bǔ)充。國內(nèi)外學(xué)者從不同的角度對(duì)數(shù)據(jù)素養(yǎng)概念進(jìn)行了表述,而目前一般認(rèn)為數(shù)據(jù)素養(yǎng)教育包含3個(gè)模塊的內(nèi)容:培養(yǎng)數(shù)據(jù)意識(shí)、培育數(shù)據(jù)能力、樹立數(shù)據(jù)倫理[6]。數(shù)據(jù)素養(yǎng)教育涉及的學(xué)科面非常廣,其中的數(shù)據(jù)能力主要是指數(shù)據(jù)分析技能。生物大數(shù)據(jù)分析必然借助于計(jì)算機(jī)程序設(shè)計(jì),因此,程序設(shè)計(jì)能力是醫(yī)科學(xué)生數(shù)據(jù)素養(yǎng)培養(yǎng)的重要內(nèi)容。
將數(shù)據(jù)素養(yǎng)融合到Python程序設(shè)計(jì)課程中,重點(diǎn)提高醫(yī)科學(xué)生在程序設(shè)計(jì)過程中對(duì)數(shù)據(jù)挖掘算法的應(yīng)用能力,同時(shí)學(xué)生在教師的熏陶下培養(yǎng)數(shù)據(jù)意識(shí)和樹立數(shù)據(jù)倫理。較之信息素養(yǎng)是信息社會(huì)普通大眾應(yīng)具備的能力素養(yǎng),數(shù)據(jù)素養(yǎng)則趨向于大數(shù)據(jù)時(shí)代科研人員的專業(yè)技能素養(yǎng)。醫(yī)科學(xué)生是未來的生命科學(xué)研究的主力軍,讓數(shù)據(jù)素養(yǎng)成為醫(yī)科學(xué)生的一種基礎(chǔ)能力是順應(yīng)大數(shù)據(jù)時(shí)代要求的。
2.2 教學(xué)策略:基于計(jì)算思維關(guān)注點(diǎn)分離原則的 Python數(shù)據(jù)分析程序設(shè)計(jì)
在之前計(jì)算思維教改中,我校提出了在“讓思維具有計(jì)算特征”的教學(xué)中培養(yǎng)醫(yī)科學(xué)生的計(jì)算思維能力,引導(dǎo)學(xué)生按照計(jì)算思維的關(guān)注點(diǎn)分離原則思考如何解決復(fù)雜問題[7]。一個(gè)具體的數(shù)據(jù)分析流程可以分為數(shù)據(jù)清洗、數(shù)據(jù)集成、數(shù)據(jù)預(yù)處理、數(shù)據(jù)挖掘和知識(shí)呈現(xiàn)等基本模塊(如圖3所示),而模塊化是關(guān)注點(diǎn)分離的最有代表性的具體設(shè)計(jì)原則之一,因此在數(shù)據(jù)分析項(xiàng)目的模塊化過程中,計(jì)算思維關(guān)注點(diǎn)分離原則的應(yīng)用將是自然而然的。
Python語言擁有大量優(yōu)秀的第三方數(shù)據(jù)挖掘算法程序包,可以被數(shù)據(jù)分析程序的各模塊無縫調(diào)用。在Python語言數(shù)據(jù)處理過程中,首先將獲取的數(shù)據(jù)轉(zhuǎn)換成適合Python分析的數(shù)據(jù)結(jié)構(gòu),然后用Python提供的工具模塊進(jìn)行數(shù)據(jù)分析和處理,最后提取數(shù)據(jù)特征并用合適的圖形圖表呈現(xiàn)出來。在數(shù)據(jù)預(yù)處理、分析和特征提取等模塊的教學(xué)過程中,教師講授如何調(diào)用Python數(shù)據(jù)分析模塊以實(shí)現(xiàn)相應(yīng)的功能,而學(xué)生體驗(yàn)在將數(shù)據(jù)分析模塊整合成分析流程過程中數(shù)據(jù)處理的藝術(shù)性。
采用關(guān)注點(diǎn)分離進(jìn)行Python數(shù)據(jù)分析程序設(shè)計(jì)時(shí),學(xué)生可以超越對(duì)抽象的數(shù)據(jù)挖掘理論與繁冗的算法實(shí)現(xiàn)的關(guān)注,從而集中注意力在更高層面上分析問題和處理問題,并在解釋結(jié)果時(shí)感受將學(xué)科專業(yè)知識(shí)融入其中的快樂,在潛移默化中數(shù)據(jù)素養(yǎng)也得到了提升。
2.3 教學(xué)內(nèi)容:兼顧通用編程技術(shù)和數(shù)據(jù)分析技術(shù)
為了循序漸進(jìn)培育醫(yī)科學(xué)生的數(shù)據(jù)處理能力,Python教學(xué)內(nèi)容分成基礎(chǔ)和高級(jí)兩大模塊。基礎(chǔ)模塊圍繞通用編程技術(shù)設(shè)置教學(xué)內(nèi)容,包括基本語法(數(shù)據(jù)類型、表達(dá)式和系統(tǒng)函數(shù)等)、基本流程控制(順序、選擇、循環(huán))、函數(shù)的定義和調(diào)用以及面向?qū)ο蟪绦蛟O(shè)計(jì)。高級(jí)模塊按照?qǐng)D3所示的數(shù)據(jù)分析流程的基本模塊設(shè)置教學(xué)內(nèi)容,重點(diǎn)講授Python科學(xué)計(jì)算的基礎(chǔ)包NumPy、多維結(jié)構(gòu)化數(shù)據(jù)集分析包pandas和繪制數(shù)據(jù)圖表的數(shù)據(jù)可視化庫Matplotlib等。我校程序設(shè)計(jì)課程共60學(xué)時(shí),基礎(chǔ)模塊和高級(jí)模塊的教學(xué)各30學(xué)時(shí),并要求在高級(jí)模塊學(xué)習(xí)階段繼續(xù)深化程序設(shè)計(jì)基本技能,例如數(shù)據(jù)的預(yù)處理中會(huì)介紹文件處理和序列化,在應(yīng)用數(shù)據(jù)挖掘算法進(jìn)行分析時(shí)會(huì)講授程序異常處理。
2.4 教學(xué)實(shí)施:所見即所得的翻轉(zhuǎn)課堂教學(xué)
在Python程序設(shè)計(jì)課程教學(xué)中,繼續(xù)推行教改實(shí)踐檢驗(yàn)過的翻轉(zhuǎn)課堂教學(xué)模式。課下,為基礎(chǔ)模塊和高級(jí)模塊分別推薦了中國大學(xué)MOOC課程[8],如北京理工大學(xué)的“Python語言程序設(shè)計(jì)”和南京大學(xué)的“用Python玩轉(zhuǎn)數(shù)據(jù)”,學(xué)生根據(jù)編程任務(wù)有針對(duì)性學(xué)習(xí)MOOC課程中的相關(guān)教學(xué)內(nèi)容。課堂上,師生互動(dòng),答疑解惑:基礎(chǔ)模塊階段探究如何用Python語言描述通用算法,分享各種程序設(shè)計(jì)技巧,學(xué)生在協(xié)作交流中提升程序設(shè)計(jì)能力;高級(jí)模塊階段教師講授實(shí)現(xiàn)的思維而非實(shí)現(xiàn)的細(xì)節(jié),也就是說,教師主要講授Python數(shù)據(jù)分析庫中所涉及的機(jī)器學(xué)習(xí)算法的基本思想、機(jī)器學(xué)習(xí)程序模塊的調(diào)用以及結(jié)合問題對(duì)計(jì)算結(jié)果的解釋。
機(jī)器學(xué)習(xí)算法講授是翻轉(zhuǎn)課堂教學(xué)的難點(diǎn),為此采用所見即所得的動(dòng)態(tài)交互模式。傳統(tǒng)的板書和PPT課件只能靜態(tài)展示機(jī)器學(xué)習(xí)的概念和原理,難以調(diào)動(dòng)醫(yī)科學(xué)生對(duì)算法中深?yuàn)W的數(shù)理知識(shí)的學(xué)習(xí)興趣和思考積極性。動(dòng)態(tài)交互模式是Python語言的重要特點(diǎn),翻轉(zhuǎn)課堂采用實(shí)時(shí)動(dòng)態(tài)代碼操作,其所見即所得的演示效果使抽象的機(jī)器學(xué)習(xí)算法思想簡單明了。面對(duì)眾多的機(jī)器學(xué)習(xí)算法,合適的算法的選擇最終歸結(jié)為模型選擇和超參數(shù)調(diào)節(jié)。Python語言的交互模式適合反復(fù)試驗(yàn)不同參數(shù)下的每一個(gè)算法模型,便于學(xué)生通過直接比較結(jié)果的方式快速把握某種機(jī)器學(xué)習(xí)算法的優(yōu)勢和局限性。
3 結(jié) 語
我校以必修課的形式面向生物技術(shù)專業(yè)進(jìn)行了“Python程序設(shè)計(jì)”教改試點(diǎn)。通過課程學(xué)習(xí),90%以上學(xué)生能夠掌握Python語言構(gòu)建數(shù)據(jù)分析應(yīng)用程序的一般方法,而同學(xué)們的反映是“Python的數(shù)據(jù)挖掘功能強(qiáng)大且易用”“圍繞生物數(shù)據(jù)分析的程序設(shè)計(jì)拉近了程序設(shè)計(jì)與生物醫(yī)學(xué)的距離”,但是,由于生命系統(tǒng)自身的復(fù)雜性,生物醫(yī)學(xué)大數(shù)據(jù)分析需要在生物學(xué)假說驅(qū)動(dòng)下選擇并應(yīng)用各種數(shù)據(jù)挖掘技術(shù),程序設(shè)計(jì)課程教師因而倍感壓力和挑戰(zhàn),因此提升程序設(shè)計(jì)課程教師的生物醫(yī)學(xué)素養(yǎng)是當(dāng)務(wù)之急。
基于Python的醫(yī)科學(xué)生數(shù)據(jù)素養(yǎng)的教學(xué)改革在醫(yī)科院校尚處于探索階段,我們的教學(xué)實(shí)踐表明,Python語言程序設(shè)計(jì)課程是培養(yǎng)醫(yī)科學(xué)生數(shù)據(jù)素養(yǎng)的較理想的課程載體,可以為醫(yī)科學(xué)生后續(xù)的“生物信息學(xué)”大數(shù)據(jù)分析打下良好的基礎(chǔ)。用Python語言替代傳統(tǒng)語言是程序設(shè)計(jì)課程發(fā)展中的一個(gè)重要契機(jī),這種教學(xué)內(nèi)容的變化將在十年甚至更長的時(shí)間尺度上對(duì)醫(yī)科學(xué)生計(jì)算思維和數(shù)據(jù)素養(yǎng)的培養(yǎng)產(chǎn)生重要影響。
參考文獻(xiàn):
[1] 寧康, 陳挺. 生物醫(yī)學(xué)大數(shù)據(jù)的現(xiàn)狀與展望[J]. 科學(xué)通報(bào), 2015, 60(5/6): 534-546.
[2] 高淑蓮. 大數(shù)據(jù)背景下國外數(shù)據(jù)素養(yǎng)教育及啟示[J]. 圖書館研究, 2015, 45(6): 108-111.
[3] 張樂平, 張勁柏, 張偉信, 等. 借鑒翻轉(zhuǎn)課堂的醫(yī)科院校程序設(shè)計(jì)課程教改[J]. 計(jì)算機(jī)教育, 2015(4): 19-22.
[4] 謝志明,王鵬, 李俊杰, 等. 基于CDIO的云計(jì)算與大數(shù)據(jù)課程體系建設(shè)[J]. 計(jì)算機(jī)教育, 2017(1): 47-52.
[5] 嵩天, 黃天羽, 禮欣. Python語言: 程序設(shè)計(jì)課程教學(xué)改革的理想選擇[J]. 中國大學(xué)教學(xué), 2016(2): 42-47.
[6] 黃如花, 李白楊. 數(shù)據(jù)素養(yǎng)教育: 大數(shù)據(jù)時(shí)代信息素養(yǎng)教育的拓展[J]. 圖書情報(bào)知識(shí), 2016(1): 21-29.
[7] 張樂平, 馮紅玲, 宋茂海, 等. 生物信息學(xué)教學(xué)與醫(yī)科學(xué)生計(jì)算思維培養(yǎng)[J]. 計(jì)算機(jī)教育, 2012(19): 12-16.
[8] 中國大學(xué)精品開放MOOC課程[EB/OL]. [2017-03-20]. http://www.icourses.cn.
(見習(xí)編輯:景貴英)