凹AI寫程式的感想4-AI寫code 一樣會寫出垃圾code

先講自己的基礎能力:大學自學C/C++,比新手村略高一點點。大概到預備學演算法,就因為大學專業課程就停下了,但有閱讀最佳化程式碼的中文翻譯書。停下來是因為我沒那個腦袋同時承接電磁學、熱力學、統計力學....還要能搞懂演算法在玩甚麼。
(Err 搞到要重修理論力學、統計力學,怎麼可能繼續弄懂演算法)

大概在大四看到Javascript/PHP/ASP/ASP+ ,會覺得相對簡單,就幫大學老師寫了[教學補給站]的動態網頁,也因此跟著自學MySQL及關連式資料庫SQL語言。

去年12月 因為Ai 能寫程式,就開始讓AI產出模擬物理情境的網頁程式。模式是我出張嘴,GeminiAi寫程式碼,我檢查物理邏輯有沒有錯誤,同時也是單一功能,比如這網頁。

雙星系統綜合模擬

看到朋友寫國中會考試題線上測驗(*1),就覺得在高中端也能有類似的系統,就開始花大約一週到兩週的時間凹Ai 寫線上測驗程式,拉回VS code +Git 協助編輯JS 代碼。初始架構是帳號(教師/學生)+題庫+測驗,顯示題目時要能渲染Latex數學式。

但這也是踩坑的起始點,關鍵字一下之後, Gemini Ai 可能或刻意地 寫出只能在Google Apps Script(GAS)執行的程式碼。

踩坑1:css.html 使用W3.CSS,導致後續無法抽換到其他家的CSS框架

說明:這點是我的迷失,我知道CSS 是一種標記語言,是為結構化文件(如 HTML 文件或 XML 應用)添加風格(字體、間距和顏色等)。

我接收到的資訊是 抽換css檔案就能變動網頁外觀,但實際上沒那麼簡單-不論是最早W3.CSS 到現在常用Bootstrap、Tailwind 都有細節上的差異-用html tag的class or id 屬性來區分

W3.CSS 的class 用"w3-"開頭, <button class="w3-button w3-blue">送出</button>

Bootstrap 用<button class="btn btn-primary">送出</button>

這樣一來,抽換style.css就換版面是天方夜譚,同時Geimini AI寫出的 Js code 也抓相應的class定義來讀取或渲染,我一旦想更動CSS 框架,所有的 Js code 就要全部修改(*2)。😂

踩坑2:Gemini Ai 的寫碼能力(大資料庫) 比我強很多,但....。

出張嘴之後,就看到程式碼(代碼)飛快地跑出來給你看,模擬物理情境的程式碼幾乎正確,至少對應我需要的領域沒錯。

但當開始撰寫線上測驗題庫,需要的功能越來越多時,Gemini Ai 的做法就是補釘模式-直接寫新代碼,但多數是重複代碼(我習慣稱為垃圾Code)。

舉例來說渲染選擇題與非選題頁面的函式(函數)是兩個,前者渲染 [題目+圖片+選項] ,後者是題目+圖面,只是兩函式(函數)裡面代碼有80%是重複的。



發現整個專案的Js-code居然有6000行左右,就開始閱讀 js檔案,才知道Gemini Ai 是這樣吐程式碼的(流水線工廠)。

踩坑3:Vs code 的AI對話-給意見及直接改代碼功能,與踩坑2 會互相關聯。

相同的程式碼、相同的AI擴充套件,在不同的電腦中,Ai會給出可能完全相反的意見。甚至Ai認為該修改的程式碼也不同,這是因為Ai演算法的特性-輸出是機率論來決定

再來,Ai修改代碼時,則出現他說他搬移完成或重構完成了,有一定機率出現錯誤,比如我就遇到AI 少給";" ,"}" 的狀況,甚至只遷移函數外殼,但裡面的代碼完全沒遷移,這樣一來我自己先分類 再搬移,比較省事,還能少用點Token。

踩坑4:除錯能力直接bye

這個物理線上測驗程式代碼都是AI產生,我並沒有全部看完程式碼,再加上Google Apps Script(GAS) 執行機制有點奇異,導致分拆 js.html 進行架構重整,將把功能相同的函數分拆到新檔案(如題庫管理、測驗管理、帳號管理),都會出現問題,都需要Ai  幫忙才能正常運作。

白話是 程式出錯,我只能把情況說給AI,讓AI全權結果除錯,也就是說 全放給AI作,就會整個變成黑盒子,之後你就只能全放給AI處理了。

所以我進行分拆的時候,只好放慢動作-先快速閱讀程式碼大意,再進行分拆,然後觀察AI怎麼修正我的分拆。畢竟整組程式碼是AI寫,他怎麼寫的,全域變數放在那裏,只有AI知道(或快速分析檔案取得)。

附註
*1. 面對理科老師會寫程式或是會用各種方便工具寫程式,請不要太意外。



發佈留言

較新的 較舊