的確,Claude 寫程式真地是最厲害的! - 創意海豚的部落格 - udn部落格
創意海豚的部落格
作家:陳重嘉
文章分類
    Top
    的確,Claude 寫程式真地是最厲害的!
    2026/06/14 13:07:14
    瀏覽:148
    迴響:0
    推薦:0
    引用0

    最近有一家中國 AI 公司,創辦團隊特地「潤」到新加坡成立公司,半年之後被 Meta 以天價收購,隨即就有中國學者與官方智庫跳出來指責說,雖然該公司註冊在新加坡,但其核心技術最初是在中國境內研發成型,且核心創辦團隊仍具有中國公民身分,因此依然受中國法律與技術出口管制的管轄;果然,四個月後,中國最高經濟規劃機構「國家發展和改革委員會」(發改委,NDRC)在 2026 年 4 月 27 日正式出手,發布禁令全面阻擋這項收購案。

    好笑的事情是,現在疑似有內部的吹哨者跳出來說,其實絕大部分的程式碼,都是美國 AI 公司 Claude 寫的,雖然這項消息還未經證實,但可能或多或少,也是接近部分真實!

    筆者最近就以 GTK Programs 對三家 AI 公司做測試,分別以基礎型、中階型、以及進階型的要求來測試其寫程式的能力;當然,程式語言是以 C language 為主。

    基礎型的測試,三家的差距不大,但中階型就已經顯示出差異,若是指定中階程度的 Open Question 讓它們自由發揮,Claude 寫的程式就比較具有意義,而且解釋也是最為扼要清楚;當提出進階型的要求時,Wow! 差異就顯現出來了!例如,筆者對 Copilot、Gemini、以及 Claude 提出下列的要求:

    Please write a GTK3 C program that uses a GtkEntry widget for text input. When the user presses Enter, the program should send the entered text to the application that previously had keyboard focus.


    針對這項要求,Copilot 寫出來的版本是完全沒有做到,可說是 0 分;Gemini 的版本是可以運作,但是不穩;它的作法是將 widget 隱藏起來,讓 keyboard focus 自動回到上一個 application,然後將 GTK 的 Event Queue 清光,這裡的「清光」不是指「刪除」,而是把 Event Queue 裡面的每一個 Event 都做完,接著睡個幾個 millisecond,讓 Windows 有時間將 keyboard focus 轉回上一個 application,接著就開始將 text 透過 Windows API SendInput() 傳給 Windows;其主要程式碼如下:




    if (GTK_IS_WINDOW(toplevel)) {

      // Hide the GTK application to seamlessly shift the focus back to Chrome/Notepad++.

      gtk_widget_hide(toplevel);

      // Flush the event queue of GTK.

      while (gtk_events_pending()) {

         gtk_main_iteration();

      }

      Sleep(300);

      send_string_to_windows(text_to_send);

      ...

    }


    Gemini 的版本的確做到了筆者所提出的要求,但經過測試是「有做到但不穩」,那資料有時候會沒送到或亂掉!此外,在整個操作過程中,筆者會去點 Notepad++ 或是 Chrome,抑或是其它的 application,在這樣的情況下,Gemini 的版本會搞錯上一個具有 keyboard focus 的 application 是哪一個。



    最後,我們來看 Claude 所撰寫的版本。同樣一個要求,Claude 寫的版本最正確,它使用 GLib 的 timer mechanism 寫了一個 timer,這個 timer 每隔一段時間會去詢問:「上一次擁有 keyboard focus 的 application 是哪一個,並將它記住。」這個 timer 的主要程式碼如下:




    g_timeout_add(200, track_foreground_window, NULL);   // 200 millisecond


    static gboolean track_foreground_window(gpointer user_data)

    {

      HWND fg = GetForegroundWindow();  // Win32 API: get the current foreground window

      if (fg != NULL && fg != our_hwnd) {

        sglb_prev_fg_win = fg;          // remember it if it’s not our GTK window

      }

      return G_SOURCE_CONTINUE;         // tell GTK to keep calling this function

    }


    請注意,GLib 的 timer mechanism 跟 Unix 的 signal handler 不一樣,因為 GLib 的 timer routine 實際上是一個 GTK Event,因此它是在 GTK 的 Event Loop 裡面跑,不是由作業系統所管轄。

    在這裡順道一提的是:gtk_main() 在 GTK 4 中已經被拿掉,這讓筆者覺得有點可惜!由最早的 Xlib event loop 到 Xt event loop,程式裡都很清楚地表達了 Event Loop 的觀念,GTK 4 之前的 gtk_main() 也隱含了 event loop 的觀念,但 GTK 4 將 gtk_main() 拿掉,代之以更為簡便的寫法,筆者認為是有好有壞,壞的是有可能因此弱化了 Event Loop 的觀念,就像現在新的程式語言是把更多的事情以更為簡潔與更短的 syntax construct 來取代,這個趨勢同樣也是有好有壞,不是都只有好的一面而已;就像現在透過 AI 來幫忙寫程式是很方便,因此有人開始提倡 Computer Science 不需要再將重點放在 Data Structure 與 Algorithm,而是要學習如何使用 AI agent 來寫程式,而更為激進的人們甚至認為,Computer Science 已經不需要學習 Data Structure 與 Algorithm 了,就像有了計算機之後就不需要學習如何撥打算盤了一樣,然而筆者認為這個比喻是不恰當的類比、而且是比得不倫不類;Data Structure 與 Algorithm 學的是「如何思考」以及「常見問題類型與其常用的解決方法論」,怎麼將它拿來跟單純的計算功能來做類比?2026 年春季,美國 Berkeley 大學的學期考試,學校禁止學生使用 AI 應試,結果有好門電腦科學的課程,被當掉的學生人數是創歷史新高!其中一門 CS 10 的課程 ── The Beauty and Joy of Computing,就類似台灣的計算機概論或電腦概論課程,這課程只是基礎的內容而已,但被當掉的學生比例卻高達 35.3%!

    回到正題;Claude 除了使用 GLib timer 來抓取上一個擁有 keyboard focus 的 application 之外,它將 text 送到 Windows 的方式,也是有點創意,例如 Gemini 的版本,是以一個一個字元的方式,分別傳給 Windows,而 
    Claude 的作法是:先將 text 拷貝到 system clipboard,然後模擬 Ctrl + V 這個 keystroke,將這 keystroke 透過 Win32 API SendInput() 傳給 Windows,這個方式除了有創意之外,還避開了 Win32 API SendInput() 的一些問題;例如,如果以毫無 delay 的方式,將字元一個接著一個透過 SendInput() 傳給 Windows,結果 Windows 竟然會發生其 buffer 來不及處理而掉字的問題,筆者是分別問了 Gemini 與 Copilot 之後,才確認這個問題真的存在,因此在傳送的過程中,字元跟字元之間要稍微讓程式睡一下,例如 50 millisecond,這樣 Windows 的 buffer 才不會來不及處理!這實在是太誇張,你 Windows 自己提供的 Win32 API,竟然還會因為資料送太快而來不及處理?Well, let me guess! 你 Win32 API SendInput() 是不是做了一個假設:「所有的 keystroke 都是真人、也就是人類敲的,所以資料敲入的速度不會很快!不可能幾乎沒有 delay!」如果真的是做了這樣的假設,那現在「這樣的假設」應該要拿掉了!

    經過測試,Claude 所撰寫的版本,跑起來很穩定!Wow, 真的很厲害捏!

    經過上述進階題目的比較,Claude 寫程式真地是最厲害的!Copilot 改到第三版都還無法正常運作,Gemini 改到第三版才達成「有做到但不穩」的程度,而 Claude 給出的第一個版本就做對了!它的確是最厲害的!難怪疑似有吹哨者說,那家被 Meta 天價收購的牆國 AI 公司,其程式碼有不少根本不是牆國人自己寫的,而是美國 AI 公司 Claude 寫的!哈哈哈!




    以上三家 AI 公司,筆者都是使用免付費版本;其中 Copilot 完全沒有限制,可以問到飽;Gemini 問太多會將模型降階,Claude 有總量限制,超過得等 5 個小時之後才能再發問,不然就是得付費升級。





     

     

    回應