最近有好幾個人給我安麗ChatGPT,說老劉快你去看看吧,這貨實在太強了,搞不好我們程式設計師都失業了。
剛開始我都是微微一笑,怎麼可能?我之前的觀點一直都是在我的有生之年,AI絕對不可能幹掉程式設計師。
但是安麗的人實在太多了,我忍不住要去註冊個帳號去看一下。
沒想到這貨竟然沒對中國開放,網路上有些攻略,我嫌麻煩,趕緊呼叫在國外的好兄弟,請他幫忙註冊一個帳號。
嘗試開始,我決定跳過那些簡單的問答,例如:
如何反轉一個字串?
如何發起一個HTTP呼叫?
因為這種東西對於閱碼無數的AI來說太小兒科了,根本測試不出來它的本事有多大。
程式設計師的一個核心能力就是拿到需求,能作出優雅的設計,咱們就拿這一點考考它。
先問一個簡單的問題:
#(點擊看大圖)
#不出所料,它「背誦」得非常好!
它說的最後一個原則是:盡量使用合成/聚合的方式,而不是繼承來達到復用目的。 這確實是物件導向一個重要的設計原則。
ChatGPT能運用這樣的原則嗎?
先問它會不會做設計:
#說得真不錯,咱們開始放大招,我手邊正好有一個經典案例:薪水支付,這是從經典書《敏捷軟體開發:原則,模式與實踐》中提取出來的。
這個案例的需求是這樣的:
#該系統由一個公司資料庫以及和員工相關的資料組成,系統需要準時地依照規則給員工薪水
員工有三種類型
#1.鐘點工,每個小時有固定報酬,他們每天提交工作時間卡,其中記錄了日期以及工作小時數,如果每天工作超過8小時,按1.5倍進行支付。每週五對他們進行支付。
2.月薪員工,薪資固定,每個月的最後一個工作日對他們進行支付
3.銷售人員,有固定工資,但會根據他們的銷售情況,支付給他們一定數量的佣金,他們會提交銷售憑條,其中記錄了銷售的日期和數量。每隔一周的周五對他們進行支付。
員工可以選擇付款方式,可以把支票郵寄到他們指定的郵政地址,也可以保存在財務那裡隨時支取,或者要求直接存入他們指定的銀行帳戶。
看了這個需求以後,一般的設計是這樣的:
Employee 作為基底類別,不同類型的僱員類別來繼承。
但是這個需求會有變更,客戶要求員工類型可以變更,例如從鐘點工變成月薪員工,這樣上面的設計就不行了。
這個時候應該要做個抽象,,用一個類別PaymentClassification來表達支付分類,然後讓Employee類別持有這個實例,簡單說就是用 #組合代替繼承。
這相當於是個陷阱了,我們程式設計師能識別,抽象,這個ChatGPT可以嗎? 我還真有點好奇。
先問最初的需求,ChatGPT的回答是這樣的:
(點擊看大圖)
你別說,還真是不錯,它「理解」了需求,從中抽取出了名詞進行類別的設計,並且設計好了類別的繼承關係。
已經達到了物件導向設計的初級水準。
接下來是重點,給他挖洞:
非常驚艷,這貨竟然學會抽象了!
雖然它抽像出來的型別叫做EmployeeType,不如PaymentClassification那麼精確,但是大方向是一致的:用EmployeeType來管理付款規則,員工類型變更時,Employee類別不需要變更。
說實話,我看到它給出這個結果,內心是很吃驚的,可以說,能超越相當多的程式設計師了。
接下來我又問它關於支付週期怎麼處理:
#這次它的抽象更加厲害,直接給出了精確的名稱:PaymentSchedule,還有相關的偽代碼!
它也特別提到了,當需要修改支付週期時,只需要更改PaymentSchedule即可,不用修改原有的員工類,組合優於繼承,再次體現出來。
這和書中的例子幾乎一樣了:
繼續問支付方法的處理方式:
#不出所料,它的設計仍然很棒:
#實際上,ChatGPT的設計,已經非常接近書中的最終方案了:
嘗試到這裡,心裡有一絲失落和不甘,這個ChatGPT實在是太強悍了,展示出來很強的設計能力,並且對話過程非常流暢 。
人工智慧真的能理解需求,學會了抽象,能設計出漂亮的類別結構了嗎?程式設計師的核心能力被取代,程式設計師的危機真的來了?
我又問了它一個問題,讓它把類別圖畫一下:
等等,這裡的類別名稱怎麼跟之前的不一樣了,怎麼出現了一個新的概念:工會成員? 我在這次對話中,可是從來沒有告訴它這個概念#啊!它從哪裡知道的?
最大的可能是,這貨並沒有理解我告訴它的需求,它之前應該學過這個案例,依然是在「背誦」它學習的東西,自作主張把工會成員也我弄出來了,從而露出了馬腳。
我關掉了ChatGPT網站,再次登錄,重新用同樣的內容和它交互,這次的結果徹底地把它暴露了。
看到沒有,這次它根本沒有抽像出PaymentClassification/EmployeeType,它竟然推薦了面向過程的思路,加入一個type的屬性,用switch來解決問題。這比之前的方案差太多了。
最後聊聊感受吧! ChatGPT確實很厲害,應該是學習了大量的數據,肚子裡貨很多,但是它依然沒有真正的理解需求,它告訴我們的答案就是在現有知識中做提煉和整合。
如果拋給它一個完全全新的領域問題,估計它會懵的,大家可以拿實際業務問題來玩一下。
所以,ChatGPT是個好幫手,但是你要想完全依賴它,可要掂量掂量了,它告訴你的可能是優雅的程式碼,也可能是垃圾程式碼。
以上是ChatGPT強悍的程式設計能力,讓我嚇到一身冷汗!的詳細內容。更多資訊請關注PHP中文網其他相關文章!