做為一個在生物資訊領域剛起步的新人,我常常在網路上留意各種跟人工智慧有關的資訊;有天我在網路上看到了這一篇:
Bill Gates on AI's future: These 3 professions are safe—for now
這些內容也有被臺灣的媒體翻譯出來:
比爾蓋茲:10年內 多數事都不再需要人類
裡面提及了微軟共同創辦人比爾蓋茲(Bill Gates)認為在AI革命下,目前可能還會倖存的幾種職業:程式(尤其跟 AI 相關的)設計師、能源專家、生物學家。其中「程式設計師」跟「生物學家」這兩者,看了之後真的讓我覺得心有戚戚焉,也讓我回想起在大學的時候做專題,跟 AI 互動的一些小經驗。以下就這兩種職業為何能夠生存的原因,來跟大家做分享。
生物學家為何目前可能倖存
先來說說比爾蓋茲的看法;他表示醫學研究跟科學發現,都需要具備(或依賴)創造力、直覺、批判性思考,而這些事情都是目前人工智慧仍然難以比擬的能力。也因為人工智慧目前還缺乏這些能力,那它做的研究可能不具新穎性、做的假設也不具突破性。
因為我以前曾經為了大學的專題,也需要自己找出研究方向,這句話勾勒起了當年讓我印象非常深刻的一些往事。
AI 無法取代生物學家的原因一:對研究主題的想像與創造力
我曾經加入以硼中子捕獲治療為主題的實驗室。這項療法結合了含硼藥物的設計、運輸、癌細胞對於含硼物質的吸收、中子束的來源與運用等不同的領域,因此可以從許多不同的角度探索;比如從癌症生物學切入,探討在這項治療後,癌細胞內的DNA可能發生什麼樣的修復來「抵抗」這項療法、我們可以如何結合其他反應途徑,例如鐵死亡(Ferroptosis)來加強這項療法的效用,或者是從設計硼藥物的角度切入,討論第三代硼藥物(相對於現在普遍使用的第二代硼藥物)如何更容易地被細胞吸收等。
以前我在自己讀論文,要找出一個屬於自己的研究方向的時候,曾經誤以為這項工作也可以交由人工智慧協助;卻忘記人工智慧即使是在搜尋網路的前提下,用來回答我的資料仍然是以前就有的東西。換言之,要它從已知的內容來「創造」新的研究方向,就算真的它會生成內容,那也不會是具有重要性的。
結果可想而知,我用人工智慧弄出來的研究方向報告,當然是被指導老師指出之前已經有人做過,因此被退回重寫。最後我第一次被老師贊同的研究方向報告,素材也不是依賴人工智慧,而是我自己去京都基因與基因組百科全書(Kyoto Encyclopedia of Genes and Genomes, KEGG)的網站上找到,可能有潛力專一性地對抗三陰性乳癌(Triple-Negative Breast cancer, TNBC)的一個基因。

AI 無法取代生物學家的原因二:跨領域思維與應用
後來,隨著老師觀察到我在生物資訊上的潛力,遠比單純做細胞實驗來得明顯,他就趁某次與實驗室成員討論的機會,跟我提示用程式做數學建模、預測癌細胞在接受不同放射治療的生存比率的可能性,並鼓勵我說:如果這個東西成功,那或許可以用在療效結果的預測上,協助到更多臨床上的病患。
如果這件工作交給人工智慧,它應該也不會想到能把「寫程式」跟「癌症治療」兩者結合,開闢出全新的一條領域吧?用簡單一點的話來說,這個「跨領域思考」的技能,是現在人工智慧可能還學不太會的;它或許可以在細胞實驗上,推薦幾個看起來不錯的大方向,但像是生物資訊這種需要結合資訊與生物知識的領域,它可以在個別的領域展現絕佳的效能,然而在將生物知識結合到程式碼中的過程,我們還有很大的優勢。
它當時在寫程式上面真的協助我不少,比方說優化我的程式碼,讓我的模擬可以跑得更快;但在我實作這個跨領域題目的時候,跟輻射生物學有關,而且最關鍵的參數調整,比如二次線性模型(註一)中的Alpha / beta 值,也是我根據我修讀原科院的課學到的知識,把程式碼的核心邏輯重新寫一遍,才有最終的成果,可以在推甄的時候展示。
小結:生物學家能倖存的原因
我們擁有的創造力、跨領域整合能力,AI 都還望塵莫及
綜上所述,我覺得比爾蓋茲並沒有看輕生物學家在AI 的浪潮之下的潛力,反而是看見了我們在研究主題上發想、創造、直覺等能力;然而我認為跨領域整合與應用的能力,如果做為生物學家的我們能夠善用,那麼距離完全被AI取代的時間,應該會再延長更久。
程式設計師為何目前可能倖存
同樣先說說比爾蓋茲的看法:他認為現在的人工智慧在生成程式碼這塊,已經有很高的精準度,可是在創造複雜軟體上所需要的精確性,以及解決問題的能力,仍然需要人類的除錯、改進、推進AI本身的能力。
不過我認為:最關鍵的因素,還是人類最瞭解人類的需求,因此有發現問題來設計程式的能力;以及人類對於某些問題的直覺,也是AI到目前為止無法企及的。
AI 無法取代程式設計師的原因一:對於程式碼的除錯
首先,跟大家分享一題我在LeetCode(註二)上練習的SQL資料庫題目:
1661 -> Average Time of Process per Machine
題目的目的,是要我在表格中擷取出必要的資訊(執行開始、結束時間)並計算平均,然後輸出到另一張表格中。以下是我第一次嘗試的解答版本:
# Write your MySQL query statement below
With Pro_start as (
Select machine_id, process_id, MIN(timestamp) as start_time
From Activity
Where activity_type = "start"
Group by machine_id, process_id
),
Pro_end as (
Select machine_id, process_id, MAX(timestamp) as end_time
From Activity
Where activity_type = "end"
Group by machine_id, process_id
)
Select P1.machine_id, round(sum((P2.end_time - P1.start_time)), 3) as processing_time
From Pro_start as P1
Join Pro_end as P2
On P1.machine_id = P2.machine_id and P1.process_id = P2.process_id
Group by P1.machine_id
Order by P1.machine_id;
但是這段程式碼本身有一個邏輯上的錯誤:它使用sum()把執行時間「加總」了,並不是題目要求的「取平均值」,於是每次求出來,答案都會變成兩倍。


那時候我解題目一直解不出來,又不想直接看別人的解答,於是我去問了ChatGPT。它當時的確有嘗試協助我,不過它的解法一直圍繞在paired的使用與否,如下:
# Write your MySQL query statement below
With Pro_start as (
Select *,
ROW_NUMBER() OVER (PARTITION BY machine_id, process_id ORDER BY timestamp) AS rn
From Activity
Where activity_type = "start"
),
Pro_end as (
Select *,
ROW_NUMBER() OVER (PARTITION BY machine_id, process_id ORDER BY timestamp) AS rn
From Activity
Where activity_type = "end"
),
paired AS (
SELECT
s.machine_id,
s.process_id,
s.timestamp AS start_time,
e.timestamp AS end_time
FROM Pro_start as s
JOIN Pro_end as e
ON s.machine_id = e.machine_id
AND s.process_id = e.process_id
AND s.rn = e.rn
)
Select machine_id, round(sum((end_time - start_time)), 3) as processing_time
From paired
Group by machine_id
Order by machine_id;
不過套用這段程式碼之後,答案一樣是預期的兩倍。理由也一樣:錯用了sum()函數來加總,不是取平均。
最後我在網路上找到了avg()函數來求平均,然後修改成如下:
# Write your MySQL query statement below
With Pro_start as (
Select machine_id, process_id, MIN(timestamp) as start_time
From Activity
Where activity_type = "start"
Group by machine_id, process_id
),
Pro_end as (
Select machine_id, process_id, MAX(timestamp) as end_time
From Activity
Where activity_type = "end"
Group by machine_id, process_id
)
Select P1.machine_id, round(avg((P2.end_time - P1.start_time)), 3) as processing_time
From Pro_start as P1
Join Pro_end as P2
On P1.machine_id = P2.machine_id and P1.process_id = P2.process_id
Group by P1.machine_id
Order by P1.machine_id;
這次終於,它答對了。
後來從其他同行的經驗,我才理解原來人工智慧會預設你的程式碼邏輯正確,因此你要它來修正程式碼,它可能最多就是讓它不要報告錯誤;然而像上述那種邏輯錯誤,就還是需要人類來查證,因此,程式設計師在現在仍有一定需求。
AI 無法取代程式設計師的原因二:對於實際需求的察覺
就在我決定撰寫這篇文章的同時,我意外從我的追蹤名單裡發現這篇很有趣的實作:
這位筆者他發現「每天吃什麼」似乎是讓很多人思考很久的議題,於是為了解決這個煩人的問題,他設計出了類似交友軟體的介面,讓使用者能選擇喜歡的餐廳。
中間的設計過程,在那篇文章都有,在此不另贅述;但是「今天要吃什麼」這個問題,以及對問題解法的實際需求,都是我們人類可以想像得到,但AI無法想像的。既然我們可以根據需求來發想程式,但AI不行,那麼我們在這個方面,就仍然不可取代,也就還能在AI浪潮之下生存。
小結:程式設計師能倖存的原因
我們在程式邏輯的完善、實際需求的察覺,仍有不可取代性。
做個小結論:我覺得比爾蓋茲他雖然著重在「完善人工智慧」仍然需要人類,但是我認為在「需求察覺」這塊,程式設計師的優勢也不可小覷。
需求為發明之母,如果我們仍然能有對問題的察覺、對需求的發想,那麼作為程式設計師,被取代的時間就比其他職業要來得久。
結語:人類的優勢是創造力與想像力
自古以來,我們就常常把重複性質高的工作,交給其他的實體或機器來處理;例如將生產糧食的重複工作,從人力轉為獸力再到耕耘機;編織衣物的重複工作,從手工編織到人力或蒸氣動力的紡織機的出現。只是現在,知識的傳授、學習可能也是重複性質很高的工作,我們交給電腦跟人工智慧來處理而已。在我的想法,人類相對於這些會做重複工作的機器相比,有的就是創造讓生活更好的創造力,以及如何實現這目標的想像力。因此,在AI浪潮的席捲之下,我們更應該利用我們有的優勢,來與AI 這個協助我們做重複性質工作的工具並存,而不是一直擔心會被取代的問題。
如果各位喜歡這個文章觀後感的內容,記得點選喜歡;每一個喜歡,都是我的動力。
附註
註一:二次線性模型(Linear Quadratic model):描述輻射劑量和細胞存活比率的關係,所述的Alpha值是雙股DNA受到同一個電子或自由基而被破壞的機率,beta值則為雙股DNA受到不同電子或自由基而被破壞的機率。其比例可以影響模型的預測結果。
註二:LeetCode,是線上的一個平台,旨在提供編碼面試準備的題目,供用戶練習編碼或算法問題。內有許多不同程式語言,例如Python、Javascript等題型。