李秀敏,雷國華,王希杰
(濱州醫(yī)學(xué)院公共衛(wèi)生與管理學(xué)院,山東 煙臺(tái) 264003)
黨的十九大報(bào)告的“實(shí)施健康中國戰(zhàn)略”提出了與時(shí)俱進(jìn)的全民大健康觀念。隨著人工智能技術(shù)的發(fā)展及醫(yī)療服務(wù)需求的不斷增長,“人工智能+醫(yī)療”將成為解決醫(yī)療資源不足問題的重要手段。同時(shí),面對(duì)醫(yī)學(xué)大數(shù)據(jù)的發(fā)展,醫(yī)藥專業(yè)學(xué)生應(yīng)掌握基本編程技能,把計(jì)算機(jī)技術(shù)應(yīng)用到醫(yī)藥領(lǐng)域,以適應(yīng)當(dāng)前大數(shù)據(jù)分析需要。因此,如何改進(jìn)醫(yī)學(xué)院校程序設(shè)計(jì)課程教學(xué)方法,提高醫(yī)學(xué)工作者程序設(shè)計(jì)能力,是醫(yī)學(xué)院校教師廣泛關(guān)注的問題[1]。我校對(duì)程序設(shè)計(jì)課程教學(xué)進(jìn)行改革,以培養(yǎng)學(xué)生基本程序設(shè)計(jì)能力為主,以完成任務(wù)為目標(biāo),將分組討論、實(shí)例教學(xué)等方法融入課堂教學(xué),豐富教學(xué)內(nèi)容,提高學(xué)生計(jì)算機(jī)應(yīng)用能力和數(shù)據(jù)處理能力。
目前,在臨床診斷和治療中主要應(yīng)用數(shù)字處理技術(shù)、生物電信號(hào)處理技術(shù)、圖形圖像處理技術(shù)等,基于現(xiàn)代信息技術(shù)的遠(yuǎn)程醫(yī)療、計(jì)算機(jī)輔助診斷、仿真醫(yī)療等新的醫(yī)療模式正在形成[2]。例如Java、Python等面向?qū)ο蟮木幊陶Z言被廣泛應(yīng)用于醫(yī)學(xué)領(lǐng)域和生物信息學(xué)領(lǐng)域,眾多基于Java、Python平臺(tái)開發(fā)的醫(yī)學(xué)以及生物信息相關(guān)科研系統(tǒng)被運(yùn)用于科研與試驗(yàn)。掌握一種語言,有利于醫(yī)學(xué)生今后的發(fā)展,使其更好地掌握專業(yè)前沿知識(shí)和技術(shù)[3]。
大數(shù)據(jù)時(shí)代,醫(yī)學(xué)生在學(xué)習(xí)程序設(shè)計(jì)課程時(shí),除了要掌握基本的程序開發(fā)方法外,還要熟練應(yīng)用通用的數(shù)據(jù)分析模塊,培養(yǎng)進(jìn)行大數(shù)據(jù)分析所需的技能、素養(yǎng)和思維方式[4]。實(shí)踐證明,通過實(shí)例教學(xué)和分組討論,不僅可以激發(fā)學(xué)生學(xué)習(xí)興趣,還有助于培養(yǎng)復(fù)合型人才。
程序設(shè)計(jì)課程和醫(yī)學(xué)教育類課程教學(xué)要求學(xué)生具有較好的理論知識(shí)結(jié)構(gòu)及較強(qiáng)的實(shí)踐能力。而大多數(shù)醫(yī)學(xué)院校學(xué)生在學(xué)習(xí)程序設(shè)計(jì)課程時(shí)存在基礎(chǔ)薄弱、對(duì)課程認(rèn)識(shí)不足、缺乏興趣、實(shí)踐能力較差等問題。為此,我們對(duì)C、C++、Java和Python 4種語言進(jìn)行了比較。
早期的C是面向過程的編程語言,通過對(duì)指針、內(nèi)存、字符等操作實(shí)現(xiàn)代碼的高效運(yùn)行。C++、Java和Python是面向?qū)ο蟮木幊陶Z言。其中C++和Java是強(qiáng)類型語言,而Python是一種弱類型語言。C++更接近于底層,方便直接操作內(nèi)存。Java在C++的基礎(chǔ)上做了更高級(jí)的封裝,具有良好的平臺(tái)間的可移植性。Java的語法比較規(guī)則,有很多大型的開發(fā)框架,比較適合企業(yè)級(jí)應(yīng)用。C++可一次編寫到處編譯,而Java可一次編譯到處運(yùn)行。Java中的功能C++都能實(shí)現(xiàn),只是在編程方面更復(fù)雜。關(guān)于常用的集成開發(fā)環(huán)境,C++常用VS,Java常用MyEclipse,Python則是PyCharm。這4種典型語言特點(diǎn)分析見表1。
表1 典型編程語言特點(diǎn)分析
C++的內(nèi)容非常復(fù)雜,開發(fā)效率較低,學(xué)生學(xué)習(xí)難度大;Java的學(xué)習(xí)曲線較長;Python比較容易入門,語法很簡單,融入了很多現(xiàn)代編程語言的特性。
Python的代碼比Java簡潔,難易度和開發(fā)速度遠(yuǎn)遠(yuǎn)優(yōu)于Java,容易入門和使用。例如求兩個(gè)數(shù)的最大公約數(shù),Java、C需要采用較為復(fù)雜的算法,而Python只需要應(yīng)用math模塊的gcd()方法調(diào)用即可。又如對(duì)于有限數(shù)的排序,Java、C需要采用冒泡等算法,而Python只需要應(yīng)用sort()方法即可。在Python中,使用“a,b=b,a”語句方式,可以實(shí)現(xiàn)兩個(gè)變量的值的交換。Python語言簡便的語法表示,有利于學(xué)生把精力集中在對(duì)問題的算法分析上,培養(yǎng)應(yīng)用計(jì)算機(jī)處理問題的思維。
當(dāng)前,Python已經(jīng)成為流行的編程語言和科學(xué)計(jì)算的重要平臺(tái),主要用于Web數(shù)據(jù)分析、科學(xué)計(jì)算、金融分析、信號(hào)分析、圖像算法、數(shù)學(xué)計(jì)算、統(tǒng)計(jì)分析、算法建模等方面,直接的語義和清晰的語法使其成為一種容易獲得的第一語言。相比其他語言,Python教學(xué)價(jià)值更大,我校已在2016級(jí)、2017級(jí)醫(yī)學(xué)生中開設(shè)了Python程序設(shè)計(jì)選修課程。
在醫(yī)學(xué)院校程序設(shè)計(jì)課程教學(xué)中主要采用問題教學(xué)法和任務(wù)教學(xué)法。教學(xué)過程中,教師盡量選擇與生活密切相關(guān)的醫(yī)學(xué)研究問題,同時(shí)根據(jù)教學(xué)進(jìn)度、學(xué)生所關(guān)心的問題,針對(duì)某一階段的教學(xué)內(nèi)容,設(shè)計(jì)一個(gè)包含相關(guān)知識(shí)點(diǎn)的綜合性任務(wù),讓學(xué)生以討論方式完成。此外,可以利用小程序來活躍課堂氣氛。例如課堂隨機(jī)提問,就可以用Python編寫程序,授課過程中運(yùn)行程序進(jìn)行提問;采用類似抽大獎(jiǎng)的方式進(jìn)行隨機(jī)提問,中獎(jiǎng)學(xué)生回答問題。實(shí)踐證明,這不僅能活躍課堂氣氛,還能調(diào)動(dòng)學(xué)生學(xué)習(xí)積極性和主動(dòng)性,提高教學(xué)效果。
(1)Python是弱類型、動(dòng)態(tài)類型語言,不需要事先聲明變量名及其類型,直接賦值即可創(chuàng)建各種類型的對(duì)象變量[5]。變量名必須以字母或下劃線開頭,變量名對(duì)英文字母的大小寫敏感,例如student和Student是不同的變量。Python變量存儲(chǔ)的不是值,而是引用。
(2)充分利用關(guān)系運(yùn)算符以及邏輯運(yùn)算符and和or的惰性求值特點(diǎn),合理組織條件表達(dá)式中多個(gè)條件的先后順序,減少不必要的計(jì)算。C語言中容易出錯(cuò)的++和--運(yùn)算符在Python中不支持,一定程度上降低了編程難度。
(3)Python程序是依靠代碼塊的縮進(jìn)來體現(xiàn)代碼之間的邏輯關(guān)系。Python中必要的空格與空行對(duì)提高程序的可讀性起著非常大的作用。例如運(yùn)算符兩側(cè)、等號(hào)兩側(cè)、逗號(hào)后面建議增加一個(gè)空格,不同功能的代碼塊之間、不同的函數(shù)定義之間建議增加一個(gè)空行,以增強(qiáng)可讀性。
(4)每個(gè)import語句只導(dǎo)入一個(gè)模塊,最好按標(biāo)準(zhǔn)庫、擴(kuò)展庫、自定義庫的順序依次導(dǎo)入。在開發(fā)速度和運(yùn)行速度之間盡量取得最佳平衡。在開發(fā)項(xiàng)目時(shí),應(yīng)優(yōu)先使用Python內(nèi)置對(duì)象,其次考慮使用Python標(biāo)準(zhǔn)庫提供的對(duì)象,最后考慮使用第三方擴(kuò)展庫。
如果能通過生動(dòng)的實(shí)例把Python語言的功能展示給學(xué)生,讓學(xué)生意識(shí)到該課程是一門與未來工作及職業(yè)生涯密切相關(guān)的工具,則學(xué)生的學(xué)習(xí)心態(tài)就會(huì)調(diào)整,從而化被動(dòng)學(xué)習(xí)為主動(dòng)學(xué)習(xí),激發(fā)學(xué)習(xí)興趣。同時(shí),深入分析編寫代碼所涉及的算法思想,可加深學(xué)生對(duì)科學(xué)問題的理解。
圖像的探索和處理在臨床中具有重要意義,以Python顯示和處理圖像為例進(jìn)行討論。例如scipy庫中的模塊ndimage提供了大量用于N維圖像處理的方法。高斯濾波程序代碼如圖1所示,程序運(yùn)行結(jié)果如圖2、3所示(示例中安裝軟件為Python3.6,所有程序在IDLE中進(jìn)行)。
圖1 高斯濾波程序
圖2 原始圖像
圖3 高斯濾波后圖像
Python語言中的圖像處理庫scikit-image支持多種文件格式并兼容2D和3D圖像。該工具包提供圖像恢復(fù)、分割和測(cè)量等功能。scikit-image中基本圖像是一個(gè)標(biāo)準(zhǔn)的NumPy數(shù)組,用戶可通過磁盤加載圖像,用一個(gè)或多個(gè)圖像過濾器處理該圖像,并快速顯示結(jié)果[6]。例如顯示腦部CT圖像(程序見圖4,運(yùn)行結(jié)果見圖5),用sobel算子來檢測(cè)圖像邊緣(程序見圖6,運(yùn)行結(jié)果見圖7)。
圖4 顯示腦部CT圖像程序
圖6 檢測(cè)圖像邊緣程序
圖5 顯示腦部CT圖像
圖7 檢測(cè)圖像邊緣
醫(yī)學(xué)數(shù)字成像和通信(DICOM)是醫(yī)學(xué)圖像與相關(guān)信息的國際標(biāo)準(zhǔn),被廣泛應(yīng)用于放射醫(yī)療、心血管成像以及放射診療診斷設(shè)備(X射線、CT、核磁共振、超聲等)。所有患者的醫(yī)療圖像都以DICOM文件格式進(jìn)行保存,DICOM是部署最為廣泛的醫(yī)療信息標(biāo)準(zhǔn)之一,可以使用Python語言下支持的DICOM模塊來處理DICOM醫(yī)學(xué)圖像。Python的Scoria模塊可用于處理三維分子數(shù)據(jù)收集和建模,NLTK自然語言處理工具包將醫(yī)院的病案大數(shù)據(jù)格式化、標(biāo)準(zhǔn)化。
針對(duì)不同學(xué)生學(xué)習(xí)目標(biāo),可分專業(yè)培養(yǎng),因材施教,在激發(fā)學(xué)生學(xué)習(xí)興趣的同時(shí),將專業(yè)知識(shí)教學(xué)與信息技術(shù)培養(yǎng)相結(jié)合,不斷提高學(xué)生信息處理能力。例如影像學(xué)專業(yè)學(xué)生學(xué)習(xí)圖像處理工具包,便于處理CT和FMRI的醫(yī)學(xué)影像,更好地為臨床服務(wù);公共衛(wèi)生專業(yè)學(xué)生學(xué)習(xí)數(shù)據(jù)分析與科學(xué)計(jì)算可視化包,便于以后進(jìn)行統(tǒng)計(jì)分析;臨床醫(yī)學(xué)專業(yè)學(xué)生學(xué)習(xí)SQLite數(shù)據(jù)庫,為了解醫(yī)院管理信息系統(tǒng)的運(yùn)行機(jī)理打下基礎(chǔ);護(hù)理專業(yè)學(xué)生學(xué)習(xí) Word、Excel、PDF、PPT、GIF 等常見類型的文件操作,便于以后撰寫電子病歷等。
教學(xué)實(shí)踐證明,Python程序設(shè)計(jì)課程是培養(yǎng)醫(yī)學(xué)生數(shù)據(jù)分析及處理能力的較好途徑。通過對(duì)醫(yī)學(xué)院校程序設(shè)計(jì)課程教學(xué)進(jìn)行改革,對(duì)教學(xué)內(nèi)容、教學(xué)方法、考核方式等進(jìn)行創(chuàng)新,激發(fā)學(xué)生學(xué)習(xí)興趣,使學(xué)生扎實(shí)掌握基礎(chǔ)知識(shí),提高知識(shí)應(yīng)用能力,培養(yǎng)優(yōu)質(zhì)的醫(yī)學(xué)信息化人才。
參考文獻(xiàn):
[1]徐娟,李永生,李霞,等.關(guān)于醫(yī)學(xué)院校程序設(shè)計(jì)課程教學(xué)的探討[J].科技創(chuàng)新導(dǎo)報(bào),2017,14(29):220,222.
[2]劉方,倪飛舟,左翔.高等醫(yī)學(xué)院校計(jì)算機(jī)程序設(shè)計(jì)課程教學(xué)探索與實(shí)踐[J].電腦知識(shí)與技術(shù),2009,5(5):1277-1278.
[3]張俊妍.面向醫(yī)學(xué)生的JAVA程序設(shè)計(jì)課程教學(xué)探討[J].福建電腦,2011,27(2):186,193.
[4]張樂平,李東方.醫(yī)科院校Python程序設(shè)計(jì)課程教學(xué)研究[J].計(jì)算機(jī)教育,2017(8):28-31.
[5]董付國.Python程序設(shè)計(jì)[M].2版.北京:清華大學(xué)出版社,2016.
[6]Van D W S,Schonberger J L,Nunez-Iglesias J.scikit-image:image processing in Python[J].Peerj,2014,2(2):453.