用 ChatGPT 學上古程式語言

Terry Kuo
Sep 13, 2023

--

從去年底開始,ChatGPT 在上線之後快速爆發式的成長,一時之間大家又開始炒 AI 取代人類的冷飯。AI 是否會取代人類?或是,AI 是否會取代我?我相信很多專業工作者在思考之後應該都很快就得到這個結論:我不會被 AI 取代我,但是我會被善用 AI 的人取代

現代社會是高度專業分工的社會,在每個細分領域中,新的概念和工具不斷發生,當改變的速度越來越快,學習方法就越來越重要。我相信如果能夠學會用 ChatGPT 學習,不管在時間或金錢上,都可以大幅降低學習的成本,能夠更快地學會更多。 因此,「如何使用 AI 學習」便成為我特別關注的一個命題

最近接到了一個新的案子, 客戶是丹麥的一間老牌大公司。他們的資料庫使用大量 Stored Procedure,但是想要全部搬遷到 Databricks 上面。我本來就有 Databricks 的經驗,因為這個案子,我開始學習基礎的 Stored Procedure 慣例和語法

在這篇文章中,我會先簡單介紹 Databricks 和 Stored Procedure, 接著講我怎麼用 ChatGPT 輔助自己學習,不想看名詞解釋的話可以跳過前面。另外,這篇文章不會教你 Stored Procedure,所以如果你是想學語法的話,那可能對你不會有幫助

Databricks

Databricks 是一個雲端大數據處理平台,底層是分散式處理的 Spark 架構。使用 Databricks 有很多好處,你可以在一個介面上同時使用好幾種不同的程式語言,也可以直接在上面規劃 Data Pipeline,甚至可以做機器學習。他們不斷在開發新的功能,可以說 Databricks 的目標就是成為大數據處理和分析的大平台

Stored Procedure

在電腦程式中,Stored Procedure 可以說是一種上古神獸。我查不到它具體是在哪一年被發明的,但是約莫是 2000 年前不久,它是一種對應關聯式資料庫模型的範式

Stored Procedure 甚至沒有 Logo, 所以決定放一張山獸神的圖

在程式中,有一個經典原則叫 DRY (Don’t Repeat Yourself),所以通常大家會把反覆使用或是複雜的功能包裹成函數。寫 SQL 就像是打乒乓球,寫一個指令,資料庫就吐回相應的資料。但是如果需要更複雜的、重複性的操作,或是要加入 IF-ELSE 規則,SQL 就會變得綁手綁腳。這時候,只要把這些功能寫成 Stored Procedure,就可以重複調用

程式演化極快,如今新的系統大多在雲端環境開發,但是在一些年代久遠的大型組織,例如銀行、保險、電信、政府,每天還是有大量的 Stored Procedure 在默默守護著我們的日常生活

用 ChatGPT 學習

進入正題,來講講我怎麼用 ChatGPT 輔助學習

我的 Prompt 順序如下:

  1. 什麼是 Stored Procedure
  2. 所有 SQL 都可以使用 Stored Procedure 嗎
  3. 跟我說一些基本的 Stored Procedure 語法 (ChatGPT 給了一個例子)
  4. Stored Procedure 語法的基本架構是什麼
  5. 在例子中,@EmployeeID 是什麼意思
  6. 請你給我一個更複雜的例子 (在這個例子中有的語法:GOTO, WAITFOR)
  7. 展示 2 個有 GOTO, WAITFOR 的例子
  8. 出一個題目讓我練習 Stored Procedure,我傳給你 code 之後你可以告訴我哪裡有錯
  9. 再出一個題目
  10. 再出一個比上一題更複雜的題目

在學新東西時,我總是會從大問題問起。我首先會問「這是什麼」,讓自己對要學的東西有大概的認知;接著再問「為什麼」,去了解這個東西的目的、要解決什麼問題、設計者最初的考量等等

下一步,我會問的是「比較問題」,即這個東西和其它相似的東西差別在哪?共通點是什麼、差異是什麼。這些問題的功能是幫助我掌握一個概念的邊界,讓輪廓變得更清晰

輪廓更清晰之後,就可以開始看具體的例子。直接讓 ChatGPT 舉例,並且從例子中挑出不熟悉的部分,進一步解釋,然後漸漸增加例子的複雜性

最後,讓 ChatGPT 出幾道練習題,並且在我給他答案之後回饋

任何一個東西都可以用類似上面的流程學起來嗎?我認為不是的,因為我上面並沒有提到「背景知識」

背景知識越豐富,新的知識越容易鑲嵌在既有的知識中,學習得更快、觸類旁通更容易。在這邊,我已經具備一些資料庫和程式語言的背景知識。我懂 SQL 語法,也了解程式中的一些基本概念,這些背景知識讓我更夠只專注在 Stored Procedure 的範式上。所以,在學習新東西之前,需要先花心力分析自己的背景知識,如果背景知識不足,就要先從更根本的東西學起

我的目標是繼續用 ChatGPT 學一些新的東西,累積一些經驗,最後能畫出一個流程圖

--

--

Terry Kuo

Data Engineer Consultant @ Copenhagen. Write about technologies, observations, and life in Nordic.