會寫程式是目前生成式AI的一項重大功能。許多人也預期未來AI會替代程式設計師寫程式,導致程式設計師失業。
但身為程式設計師的我想說:「不是程式設計師這個職業會消失,而是再也沒必要寫什麼程式了。」為什麼? 請聽我娓娓道來。
程式設計師這個職業,當然是在有電腦這種設備後產生的。一開始程式設計師的工作,是利用程式語言把電腦該做的事程序化。簡單來說,就是叫電腦先開啟檔案,讀入第一行內容,解析這個內容然後計算。把這些動作用各種電腦語言表達,編寫成程式後讓電腦正確執行,這就是程式設計師的工作。
到了現代,程式設計也可以說是種藝術。藝術指的不單是使用者介面的呈現方式,也包括程式本身的結構。所追求的,不單單是程式執行的正確性及效率,如何把一段程式寫的結構分明、思緒清𥇦這件事,就和一幅畫或一場表演一樣讓人耳目一新。
但說到底,程式設計是種翻譯工作。要電腦做什麼事,是人類在思考的,也是用人類的語言描述的。所以程式設計師會把這些人類的語言翻譯成電腦語,讓電腦去做事。翻譯品質的好壞,就和程式設計師的功力有關。就像是對電腦說明的愈清楚,傳達的意思愈明白,電腦愈能正確無誤的工作。而進一步的,剛才說的藝術性也能理解了,白話來說,就是翻譯出來的文句愈簡潔優美愈好。
如果前面的內容您了解了,這個標題所述也就不需要解釋了。
目前生成式AI寫程式,其實也就是把我們人類的語言,翻譯成電腦語言而己。和把中文翻譯成日文、英文沒有什麼兩樣。所以反過來說,生成式AI也能夠說明程式的內容,用人類的語言告訴你這段程式在做什麼。如果生成式AI未來能取代人類語言譯者的工作,那麼程式設計師被取代掉也不是什麼意外的事。
但電腦會寫程式,決不是取代掉程式設計師這麼簡單直覺的事。他代表著未來可能電腦程式語言根本沒有需要。
會看技術相關文章的讀者們,對電腦的運作應該都有一定了解。電腦CPU能執行的,並不是平常我們所見的電腦程式語言,如C/C++、Java諸如此類的語言,而是人類難以解讀的機械碼。程式設計師寫作出來的程式,需要經過編譯或直譯的過程,轉換成CPU可以執行的機械碼,才能讓電腦執行。
所以,我們不妨這樣認知:從人類構想到電腦執行,其實經過了兩層翻譯程序:第一次是從人類的語言轉換成各種程式語言,然後再通過編譯或直譯轉換成電腦真正了解的機械語言。
繞這麼大一圈,原因也就是因為電腦不能直接理解人類的語言,所以要透過兩個步驟,讓電腦知道我們想要他做什麼事。
但在chatGPT這樣的AI後,電腦能夠了解我們的意圖,產生對應的程式碼,所以原本的兩道翻譯程序中,由AI取代了一道。就剩下把電腦語言程式碼再編譯或直譯成電腦語言了。
但進一步深思可以發現,為什麼不讓AI跳過編譯動作,直接生成機械語言?
當電腦可以直接理解人類意圖,並執行相對動作時,為什麼還需要先生成程式語言?每一個電腦使用者,都能直接告訴你的電腦,我需要什麼資料,或需要電腦幫忙做什麼事,電腦就可以生成對應的機械碼,去執行對應的動作,根本不需要通過人類事先寫好的程式才能動作。
想像一下chatGPT現在的PlugIn功能。當你需要chatGPT幫你查某些資料,或是訂票,他仍需要透過這些PlugIn來動作。而未來,這些PlugIn就不再需要了,因為chatGPT這樣的AI,會在了解使用者意圖後,自己產生相對的執行碼,進而執行相對動作。到了那個時期,AI將真的有能力直接做一些事。而這時AI是我們的幫手或是我們的主人,那就是另一篇文章要討論的事情了。
而說到這裏,各位想必能明白我為什麼主張程式設計師並不只是失業,而是從根本消除了程式設計這個工作。
當人類和電腦溝通的牆壁被打破,程式設計這個工作消失後,還有什麼可能發生?我想就是電腦和電腦的溝通。
目前電腦和電腦的溝通,仍然通過人類設計的各種協定。我們也可以把這些協定看過一種電腦和電腦間的語言,當兩台電腦,或兩台電子裝置使用同一種語言時,他們就能溝通。
但如果我們放任兩台電腦自己去協調,發展他們自有的語言時,事情就很難想像了。
電子裝置間的協定是透過工程師們事先為了某個目地而擬定的特別格式和通訊方法,例如我們不能直接用WiFi協定來替換掉藍芽耳機的協定,雖然他們可能頻段接近,但仍不相容。和在人類之間,語言這種東西不同。語言能溝通,是基於我們對語言的共識。
例如你說:「今天天氣真好。」
對一個不知道「天氣」這兩個字有什麼意義的外國人來說,這句話就無法理解。同樣的,一個物理學家和物理學家對談,他們無需解釋一些科學名詞,只要說明他們需要溝通的部分;但一個物理學家要和一般人說明時,他就有可能要從最基本的一些物理名詞說明開始。
從這個角度來看,人類和人類之間溝通之所以高效,是因為對談的兩方有基本的知識和共識,之後才能形成溝通條件。電腦也是,不能把WiFi直接當藍芽用,HDMI也不能直接拿去插USB,因為這不是兩個裝置間的共識。
那麼,這時再回到前面所說,如果我們放任兩台電腦去發展自己的共識和溝通方法呢?我認為這時電腦和裝置間,有可能建立自己的共識和語言,發展出更高效的通訊方法。
舉個例子來說,現在我們要在Netflix看一部電影,需要把整部電影傳回來看。但若今天電腦間能高效溝通時,我們家中的主機可能不會要求Netflix主機傳整部影片給他,而是問Netflix主機這部片在演些什麼。Netflix把演員、劇情、動作等等都告訴我們家中主機後,這台主機會按劇情把影片生成出來給我們看。這時我們家中主機和Netflix間的傳輸資料量就能降的極低。
說到這,大概有人會抗議,這生成出來的片子和原片差很多吧!甚至根本不是原演員演的,不能算是傳輸效率化吧?
但回想起來,從VCD開始,不管是MPEG/JPEG/MP3等等,我們看的聽的都有許多是有失真的東西,但重點是我們將失真的部分控制在可以接受的範圍。所以我們看的聽的,也不能說和原始資料是一樣的東西,但接受這些內容我們並沒有什麼障礙。
那麼,我們又怎麼知道AI無法在溝通後,把和原片的差距控制在最低的範圍呢?而這些,都己經無需工程師介入了。直接叫兩台電腦去談好就好了。而溝通和結果,是有可能和原片相差無幾的。
好啦!我知道講到最後有點恐怖,因為電腦似乎活起來,我們不知道他們怎麼溝通的,甚至不知道電腦們在想什麼。若他們真的串連起來要毀滅人類,人類也無法知道。因為我們不知道,所以我們害怕。
但至少短期間內,我不認為我以上描述的事會發生。電腦成生的程式語言仍不夠精確,若是直接生成機械碼恐怕錯誤率更高。一般程式若出現錯誤,在編譯期間還能設法找出,但直接生成錯誤的機械碼,系統就直接崩潰掉了。更別說編譯時還能進行最佳化等等,這些都仍遠超AI的能力。
但電腦和電腦間的溝通即使在近期不會發生,我認為將來應是無法迴避的選項。不管各位是否覺得這件事很可怕,但你我有生之年,有很高概率看到他改變人類生活,不管是往好的方面,或是,壞的方面。