非典型程式人:拼湊程式碼 建構屬於自己的白色高塔

除了癌細胞 他也懂得欣賞軟體的奧妙

林庚遠 Ken-yuan Lin
ccClub
Mar 11, 2021

--

《非典型程式人系列》的第八篇!雖然不知道這個系列還能撐多久,但筆者依舊十分感謝一直以來支持本系列及 ccClub 的各位大德,如果有其他想看的主題或內容,也歡迎到 ccClub 臉書粉絲專頁跟我們對話,讓我們分享更多優質的程式教育資源給大家!本系列還有其他精采的故事,還沒讀過的別錯過啦!

今天的主人翁可是一位醫生!如果你已經厭倦像筆者這種文組生的故事,這一集相信能讓你對「醫生」及「寫扣」的印象煥然一新。誰能想到平常拿聽診器、手術刀、或看斷層切片的白袍戰士們,竟然還自帶寫扣技能?

目前在三軍總醫院擔任放射腫瘤科醫師的沈伯鍵,除了平日臨床看診,因為程式作為得利助手,讓他在進行醫療研究時更加順利。就讓我們來一探究竟吧!

沒想過的白袍戰士面貌 顛覆你對醫師的想像

▍放射腫瘤科?我只聽過耳鼻喉科,腸胃科?

放射腫瘤科醫生會根據電腦斷層的影像來判斷腫瘤的位置,雖然不是一般人熟悉的科別,卻在治療癌症上具有一席之地。(圖為肝癌經過立體定位放射手術治療後,追蹤後在核磁共振影像上完全消失)

「我們會評估腫瘤的期別、是否轉移,來判斷是否需要進行放射治療。施行放射治療前會根據影像(電腦斷層、核磁共振或正子照影)來確認腫瘤的位置和附近正常組織的情形,以調整放射治療的劑量多寡和分布,目標是殺死癌細胞的同時,避免過大的副作用。」

假設今天我們因為肚子痛到醫院看診,通常會先掛腸胃科,而不是猜自己得了「胃癌」,直接去做電療吧!可以解釋為什麼放射腫瘤科別對大多數人來說相對陌生,因為它通常面對的是已經確診疾病(大部分是癌症)的病患,而不是因為症狀不適而自行求診的民眾。不過,同為杏林的一員,放射腫瘤科也需要相當高的醫學知識才能進行妥適的評估及判斷。面對不同的疾病及病情,跟其他科別一樣都須具備相當的專業知識及醫學素養。

「在處理癌症病患時,有一半的病源都須經放射治療,而不同癌症的適用時機也不同。鼻咽癌的首選治療就是放射治療;中期以上的直腸癌或食道癌,通常也須經過術前化療及放射治療後再開刀;乳癌若施行乳房保留手術,術後通常也需要放射治療;不同癌症的處理方式,會根據不同階段及器官部位而有所不同。

醫學作為一門高度專業的學問,也是因為人體充滿奧妙而不可知的一面,並非所有病例都能依循統一的流程治療。醫療工作所面對的許多不確定性也考驗醫護人員的智慧及專業。

「即使是相同的癌症相同的期別,面對不同的病人不同的情況,我們都會需要再次去評估對這位病人是開刀、藥物治療(化療、標靶)、放射治療或是其他新興治療(免疫、細胞治療等)比較好呢? 應該使用單一療法或合併多種療法呢? 此外,在臨床照護上,偶而可能會遇到那種雖然書上有讀到,但臨床已經好幾年沒遇過的罕見個案;或是病人除了癌症,還有中風、腎臟病、心臟病等病史,身體可能無法負荷一般治療指引建議的標準療程。這種情形比較少先例或公認的臨床試驗結果可以參考,只能多查閱文獻,或仰賴自己的臨床經驗處理,並密集追蹤病人狀況。」

不論如何,「思考對病人最適合的處理方式」都是醫療工作者的關鍵課題。除了評估療程及作法,善盡忠實陳述義務責任、告知後同意原則外,並且充分溝通、讓病人也參與決策的過程及責任,也是相當重要的一環。

▍除了治病,研究也是工作的一部分

除了日常看診,研究也是醫學工作內容的一環。通常大醫院的醫師除了臨床工作外,也會有醫學研究要做。以伯鍵來說,其中一項研究就是要探討使用放射療法治療肝癌後,發生放射性肝炎的機率大小。

而除了專業的醫學知識外,為了瞭解哪一種治療方式對特定疾病的效果最好,統計知識也是進行研究不可或缺的工具:

「我的前一篇研究在比較放射手術跟血管栓篩治療肝癌的效果,由於不同病例可能有不同結果,所以會選一些特定因子跑迴歸分析,最後看腫瘤有沒有復發、後續的存活率如何。所謂的因子可能包含年齡、性別、有無罹患病毒性肝炎、腫瘤大小及數量、治療方式、癌症期數,肝臟功能及病人的整體身體狀況等,我們也會了解之前有沒有做過其他治療,腫瘤有無復發。

考慮上述因子後,我們就能跑單變量的迴歸分析,檢測哪些因子對復發率的影響是顯著的。以復發率來說,性別、治療方式、復發性腫瘤的 p 值都是有意義的,此時我們會再把這三個因子重新跑迴歸,最後看哪一個最顯著,藉此了解特定治療方式對未來的復發率影響,從中得出『放射性手術的腫瘤控制率會比較好』的結論。術後存活率的分析方式也一樣。」

一般傳統的醫學研究方式如果有需要,通常會使用 SPSS 等統計軟體,這也是一般醫學研究上比較常見的方式。為什麼伯鍵還要額外學程式呢?

「以前在進行某些實驗時,如果比較完研究組及對照組,發現資料不匹配時,會用一些統計方法調整,但因為 SPSS 沒有內建對應的功能,或者不符合需求,實作上會比較困難。使用傳統統計軟體有可能遇到這種困境。但如果自己會寫程式,就能為自己的需求寫出客製化的功能。

此外,隨著深度學習在近幾年慢慢進入醫學領域,許多技術也能應用在醫學研究上。比如用影像組學(Radiomics)來分析電腦斷層影像,針對肉眼無法辨識的影格強度特徵、特定長寬比進行數位化研究,一般統計軟體可能很難使上力,但如果有自己寫程式的能力,就能更容易解決問題。

程式除了是一種好用的資料分析工具,在蒐集資訊、資料前處理跟資料視覺化上,也能幫我們省去時間成本把精力投入在更有生產力的事物上

如圖,為使用二元邏輯斯迴歸訓練放射性肝炎預測模型的結果。

「研究時,如果能把熱力圖、學習曲線等圖放到 paper 裡,也能提高可讀性。雖然有些傳統軟體也能做到,但圖相對不美觀。相較之下,如果用 Python,使用 Matplotlib 等套件就行了,可以大幅省去作圖美工的時間。

一路走來我與它──我與程式的愛恨糾葛

▍為什麼當初會接觸到程式語言呢?

「國高中時的我其實對程式沒有概念,第一次勉強能跟電腦程式有關的相遇,應該是從小遊戲的開放程式碼吧!後來是單純抱持著『想知道程式到底是什麼』的心態開始了這趟旅程。我曾查過與資工系有關的必修科目有哪些,也去買過資工所的補習教材,看線性代數、資料結構及演算法等科目也都還能理解,即便當時還不太能確定跟實際寫程式的關係是什麼。

當兵時,我有一位同袍弟兄是微軟工程師建議我去寫 Python,後來臉書演算法把 ccClub 帶到我的手機螢幕上,我發現在臺大有開課,也有年輕學生可以一起學習,就決定加入了。我覺得 ccClub 是新手入門的優良選項之一。」

想讓學習效果極大化,「熱情」與「需求」就像是兩把通往學問之門的鑰匙。因為有興趣想了解學問背後的箇中道理,所以能支撐自己持續走下去;而需求則是為了某個明確的目標,不得不掌握的能力。兩者都能讓自己更有目標地往自己的理想邁進。

▍一樣都是醫生,會寫程式的多嗎?

雖然伯鍵非以工程師自居,但因為有程式語言的幫忙,也讓他在進行醫療研究時更順利。但同為醫者,會寫程式的人多嗎?

「就以我身邊來說,比例不算少,但也許是自己有在從事這一類工作,會特別去關注相似興趣的人吧。實際上會視工作性質及科別而定。在放射腫瘤科、放射診斷科及病理科,因為工作內容都有處理影像的需求,標本、切片也都可以數位化。而這些科別也是當時號稱最容易被 AI 取代的科別,所以不少醫師都會開始學習程式希望跟上時代而不是被取代,甚至有些醫院的影像科在招生文中就會提到有影像處理的課程。

但其實不管哪一科,未來的趨勢都是智慧化,也多多少少都有可以讓程式輔助的工作。例如也有眼科醫師開發眼底鏡判讀程式或是內科醫師開發 app 提醒追蹤病人服藥。只是相較之下,外科醫師要使用 AI 開發新的手術技術或內科醫師的問診及身體檢查技巧要用程式取代的難度和需要的資源可能更為複雜。」

不過,伯鍵也提到身邊有同學看書自學,最後寫出一個病歷寫作系統,在工作時更方便地寫病歷、整理資料,避免畫面上一堆視窗、降低工作效率的情形發生。因為自己是醫生,更能瞭解醫療工作者在使用工具的需求是什麼。

不管是進行醫療分析研究,或為了提升工作效率,將程式語言結合自己的專業領域知識,都是 ccClub 鼓勵大家『用程式改變生活』的實踐喔!

有什麼話,想跟初學程式的朋友們說嗎?

「不管你是有興趣,或想用程式解決問題,都值得嘗試看看,尤其如果你還在就學,可以趁學生時代好好了解一下!

當初的我就屬於前者,甚至把 Leetcode 當作「腦力激盪」,後來在寫論文時因為圖表產出的需求,也會開始思考如果使用程式解決問題。

只要時機對了,兩個條件都符合,相信你一定更能跟程式保持緣分!

【延伸閱讀】
❓ Skiwitch Talk 永垂不朽的程式用途精華整理:➡️
你能用程式做什麼?⬅️
🏰 歷史男:➡️
用鍵盤譜出時空的旋律 ⬅️
👷‍♂ 土木男:➡️
在土與木之間 散播程式的種子 ⬅️
🏙️ 都市男:➡️ 在太平洋彼岸 看見城市的光芒 ⬅️
👩 管顧女:
➡️ 展開雙翼 讓維納斯帶你翱翔商管程式的奧秘 ⬅️
👩‍⚖️ 法律女:
➡️ 褪下法袍 從解構資料看見社會裂口的那道光 ⬅️
💵 財金男:
➡️沒走進華爾街的孤狼 開闢前端另一座獵場 ⬅️
🎵 音樂男:
➡️ 築夢的靈魂樂手 踏上美麗的新創樂章 ⬅️

我們是 ccClub 團隊,致力於讓 Python 成為大家的第二外語,希望能用淺顯易懂、循序漸進的方式,帶領新手一步步跨入程式設計的世界。如果你喜歡這篇文章,請給我們 11~20 個掌聲。
如果你喜歡「Python初學」的教學系列文,或是「非典型程式人」的專訪,請給我們 31 個以上的掌聲。


Facebook: ccClub Python讀書會

--

--