李秀敏,雷國華,王希杰
(濱州醫學院公共衛生與管理學院,山東 煙臺 264003)
黨的十九大報告的“實施健康中國戰略”提出了與時俱進的全民大健康觀念。隨著人工智能技術的發展及醫療服務需求的不斷增長,“人工智能+醫療”將成為解決醫療資源不足問題的重要手段。同時,面對醫學大數據的發展,醫藥專業學生應掌握基本編程技能,把計算機技術應用到醫藥領域,以適應當前大數據分析需要。因此,如何改進醫學院校程序設計課程教學方法,提高醫學工作者程序設計能力,是醫學院校教師廣泛關注的問題[1]。我校對程序設計課程教學進行改革,以培養學生基本程序設計能力為主,以完成任務為目標,將分組討論、實例教學等方法融入課堂教學,豐富教學內容,提高學生計算機應用能力和數據處理能力。
目前,在臨床診斷和治療中主要應用數字處理技術、生物電信號處理技術、圖形圖像處理技術等,基于現代信息技術的遠程醫療、計算機輔助診斷、仿真醫療等新的醫療模式正在形成[2]。例如Java、Python等面向對象的編程語言被廣泛應用于醫學領域和生物信息學領域,眾多基于Java、Python平臺開發的醫學以及生物信息相關科研系統被運用于科研與試驗。掌握一種語言,有利于醫學生今后的發展,使其更好地掌握專業前沿知識和技術[3]。
大數據時代,醫學生在學習程序設計課程時,除了要掌握基本的程序開發方法外,還要熟練應用通用的數據分析模塊,培養進行大數據分析所需的技能、素養和思維方式[4]。實踐證明,通過實例教學和分組討論,不僅可以激發學生學習興趣,還有助于培養復合型人才。
程序設計課程和醫學教育類課程教學要求學生具有較好的理論知識結構及較強的實踐能力。而大多數醫學院校學生在學習程序設計課程時存在基礎薄弱、對課程認識不足、缺乏興趣、實踐能力較差等問題。為此,我們對C、C++、Java和Python 4種語言進行了比較。
早期的C是面向過程的編程語言,通過對指針、內存、字符等操作實現代碼的高效運行。C++、Java和Python是面向對象的編程語言。其中C++和Java是強類型語言,而Python是一種弱類型語言。C++更接近于底層,方便直接操作內存。Java在C++的基礎上做了更高級的封裝,具有良好的平臺間的可移植性。Java的語法比較規則,有很多大型的開發框架,比較適合企業級應用。C++可一次編寫到處編譯,而Java可一次編譯到處運行。Java中的功能C++都能實現,只是在編程方面更復雜。關于常用的集成開發環境,C++常用VS,Java常用MyEclipse,Python則是PyCharm。這4種典型語言特點分析見表1。

表1 典型編程語言特點分析
C++的內容非常復雜,開發效率較低,學生學習難度大;Java的學習曲線較長;Python比較容易入門,語法很簡單,融入了很多現代編程語言的特性。
Python的代碼比Java簡潔,難易度和開發速度遠遠優于Java,容易入門和使用。例如求兩個數的最大公約數,Java、C需要采用較為復雜的算法,而Python只需要應用math模塊的gcd()方法調用即可。又如對于有限數的排序,Java、C需要采用冒泡等算法,而Python只需要應用sort()方法即可。在Python中,使用“a,b=b,a”語句方式,可以實現兩個變量的值的交換。Python語言簡便的語法表示,有利于學生把精力集中在對問題的算法分析上,培養應用計算機處理問題的思維。
當前,Python已經成為流行的編程語言和科學計算的重要平臺,主要用于Web數據分析、科學計算、金融分析、信號分析、圖像算法、數學計算、統計分析、算法建模等方面,直接的語義和清晰的語法使其成為一種容易獲得的第一語言。相比其他語言,Python教學價值更大,我校已在2016級、2017級醫學生中開設了Python程序設計選修課程。
在醫學院校程序設計課程教學中主要采用問題教學法和任務教學法。教學過程中,教師盡量選擇與生活密切相關的醫學研究問題,同時根據教學進度、學生所關心的問題,針對某一階段的教學內容,設計一個包含相關知識點的綜合性任務,讓學生以討論方式完成。此外,可以利用小程序來活躍課堂氣氛。例如課堂隨機提問,就可以用Python編寫程序,授課過程中運行程序進行提問;采用類似抽大獎的方式進行隨機提問,中獎學生回答問題。實踐證明,這不僅能活躍課堂氣氛,還能調動學生學習積極性和主動性,提高教學效果。
(1)Python是弱類型、動態類型語言,不需要事先聲明變量名及其類型,直接賦值即可創建各種類型的對象變量[5]。變量名必須以字母或下劃線開頭,變量名對英文字母的大小寫敏感,例如student和Student是不同的變量。Python變量存儲的不是值,而是引用。
(2)充分利用關系運算符以及邏輯運算符and和or的惰性求值特點,合理組織條件表達式中多個條件的先后順序,減少不必要的計算。C語言中容易出錯的++和--運算符在Python中不支持,一定程度上降低了編程難度。
(3)Python程序是依靠代碼塊的縮進來體現代碼之間的邏輯關系。Python中必要的空格與空行對提高程序的可讀性起著非常大的作用。例如運算符兩側、等號兩側、逗號后面建議增加一個空格,不同功能的代碼塊之間、不同的函數定義之間建議增加一個空行,以增強可讀性。
(4)每個import語句只導入一個模塊,最好按標準庫、擴展庫、自定義庫的順序依次導入。在開發速度和運行速度之間盡量取得最佳平衡。在開發項目時,應優先使用Python內置對象,其次考慮使用Python標準庫提供的對象,最后考慮使用第三方擴展庫。
如果能通過生動的實例把Python語言的功能展示給學生,讓學生意識到該課程是一門與未來工作及職業生涯密切相關的工具,則學生的學習心態就會調整,從而化被動學習為主動學習,激發學習興趣。同時,深入分析編寫代碼所涉及的算法思想,可加深學生對科學問題的理解。
圖像的探索和處理在臨床中具有重要意義,以Python顯示和處理圖像為例進行討論。例如scipy庫中的模塊ndimage提供了大量用于N維圖像處理的方法。高斯濾波程序代碼如圖1所示,程序運行結果如圖2、3所示(示例中安裝軟件為Python3.6,所有程序在IDLE中進行)。

圖1 高斯濾波程序

圖2 原始圖像

圖3 高斯濾波后圖像
Python語言中的圖像處理庫scikit-image支持多種文件格式并兼容2D和3D圖像。該工具包提供圖像恢復、分割和測量等功能。scikit-image中基本圖像是一個標準的NumPy數組,用戶可通過磁盤加載圖像,用一個或多個圖像過濾器處理該圖像,并快速顯示結果[6]。例如顯示腦部CT圖像(程序見圖4,運行結果見圖5),用sobel算子來檢測圖像邊緣(程序見圖6,運行結果見圖7)。

圖4 顯示腦部CT圖像程序

圖6 檢測圖像邊緣程序

圖5 顯示腦部CT圖像

圖7 檢測圖像邊緣
醫學數字成像和通信(DICOM)是醫學圖像與相關信息的國際標準,被廣泛應用于放射醫療、心血管成像以及放射診療診斷設備(X射線、CT、核磁共振、超聲等)。所有患者的醫療圖像都以DICOM文件格式進行保存,DICOM是部署最為廣泛的醫療信息標準之一,可以使用Python語言下支持的DICOM模塊來處理DICOM醫學圖像。Python的Scoria模塊可用于處理三維分子數據收集和建模,NLTK自然語言處理工具包將醫院的病案大數據格式化、標準化。
針對不同學生學習目標,可分專業培養,因材施教,在激發學生學習興趣的同時,將專業知識教學與信息技術培養相結合,不斷提高學生信息處理能力。例如影像學專業學生學習圖像處理工具包,便于處理CT和FMRI的醫學影像,更好地為臨床服務;公共衛生專業學生學習數據分析與科學計算可視化包,便于以后進行統計分析;臨床醫學專業學生學習SQLite數據庫,為了解醫院管理信息系統的運行機理打下基礎;護理專業學生學習 Word、Excel、PDF、PPT、GIF 等常見類型的文件操作,便于以后撰寫電子病歷等。
教學實踐證明,Python程序設計課程是培養醫學生數據分析及處理能力的較好途徑。通過對醫學院校程序設計課程教學進行改革,對教學內容、教學方法、考核方式等進行創新,激發學生學習興趣,使學生扎實掌握基礎知識,提高知識應用能力,培養優質的醫學信息化人才。
參考文獻:
[1]徐娟,李永生,李霞,等.關于醫學院校程序設計課程教學的探討[J].科技創新導報,2017,14(29):220,222.
[2]劉方,倪飛舟,左翔.高等醫學院校計算機程序設計課程教學探索與實踐[J].電腦知識與技術,2009,5(5):1277-1278.
[3]張俊妍.面向醫學生的JAVA程序設計課程教學探討[J].福建電腦,2011,27(2):186,193.
[4]張樂平,李東方.醫科院校Python程序設計課程教學研究[J].計算機教育,2017(8):28-31.
[5]董付國.Python程序設計[M].2版.北京:清華大學出版社,2016.
[6]Van D W S,Schonberger J L,Nunez-Iglesias J.scikit-image:image processing in Python[J].Peerj,2014,2(2):453.