一篇專訪 Ryan Potts 的文章,他和 Jeremy Walker 在訪談中聊到 Delphi、他從擔任 Exercism 貢獻者學到的事,以及他在仍舊「離線」的產業裡寫程式的經驗。
嗨,Ryan。謝謝你撥空和我聊聊。你是 Exercism 上 Delphi 軌道的維護者。你當初是怎麼接觸到 Delphi 的?
我在我父親創立的公司工作。這家公司從 1980 年代就開始開發軟體,一開始用 Microsoft Pascal,後來改用 Borland 的 Turbo Pascal。我在 1996 年進到這家公司,當時公司正好開始收到一些需求,要做能在 Windows 上執行、而不是在 DOS 上執行的軟體。很巧的是,Borland 那時剛推出 Delphi 1,對我們來說再適合不過,因為多年來開發的單元大多還能繼續沿用。我們不必再為了支援 Windows 而用 VB 或 VC 從頭重寫。
那你現在還是每天用 Delphi 嗎?
是啊。我上班的地方生產的是給汽車產業做研發測試與小批量測試用的機器,測試的對象包括輪胎、汽車座椅、安全氣囊充氣器,還有碰撞測試。我們生產的所有系統,世界各地的多家車廠和它們的供應商都在使用。
我負責的軟體是用來控制這些不同類型機器的。我開發使用者介面、為測試中自動化的部分規劃執行順序、整合各種輸入與輸出點,包含類比與數位。這些軟體得盡可能地好用,讓只受過最基本訓練的人操作起來也能相當自在。
我做的工作完全不需要網頁程式設計。我所有的東西都是用 Windows 上的 Delphi 寫的。偶爾我得用 C++ 很快寫出一個小小的「自訂命令」,再上傳到資料擷取處理器板。那是一台插在電腦 PCI 插槽裡的平行電腦,有自己的處理器、記憶體和作業系統。
能和完全不做網頁程式設計的人聊天,真的很有意思。這在現在感覺很不尋常,不過我懷疑這會不會只是我平常接收到的訊噪比造成的印象,而不是產業的真實樣貌。
是啊,參與 Exercism 讓我能稍微窺見電腦產業裡「另一半」的人怎麼生活。我學到很多關於測試驅動開發(TDD)、在 GitHub 上操作,以及參與開源專案的事。我學到的很多東西,都提升了我工作上做出來的品質。
聽到這個真的很棒。Exercism 最讓我喜歡的一點,就是那種「看看另一半的人怎麼生活」的感覺,讓你發現自己所有的盲點,學到一些你根本不知道存在的東西。我猜當軌道維護者應該讓你學到更多吧?
確實如此。我寫的測試比以前多。嚴格說來不一定是 TDD,有時候測試是後補的,而不是先寫的。不過這影響了我組織程式碼的方式,我會移除不必要的相依性,讓測試更容易進行。
我花很多時間在 problem-specifications 儲存庫裡審查 issue 和 PR,我們就是在那裡以不依賴特定語言的方式定義 Exercism 的練習。我從那些討論中學到很多。有時候一個建議的修改表面上很單純,但接下來的一來一往卻會挖出一些問題。我變得更有耐心了。這也教會我在工作上遇到技術問題時,去找出其他可能的角度。
我也對引導有更深的認識,尤其是了解背後的「為什麼」,而不只是「怎麼做」,這件事有多重要。我和幾位程式設計師一起工作。雖然我比他們大多數人都年輕,但在公司的年資比他們久,所以我常常能指出安排機器操作順序時更有效率的做法,或是解釋某件事為什麼得用特定的方式來執行。
除了 Exercism 之外,你還是 Delphi MVP,這真的很厲害!這是怎麼來的?你有參與什麼活躍的 Delphi 社群嗎?
在建立 Delphi 軌道的初期,我聯繫了 Embarcadero 的 Jim McKeeth 先生,想看看能不能拿到 Delphi 的開源授權。這樣我們就能用 Delphi 開發新的練習,也讓大家可以透過 PR 貢獻。在我們往來的過程中,Jim 邀請我加入 Embarcadero MVP Program。
Delphi Praxis 是我比較熟悉的線上社群。Google+ 上的討論很熱絡,但它已經在走下坡,所以我們得另尋地方。
你有用 Delphi 寫過什麼開源應用程式,可以讓大家看看嗎?
有啊!Exercism 的 Windows CLI 安裝程式是開源的,而且完全用 Delphi 寫成。它會自動判斷學生需要哪個版本(32/64 位元)的 Exercism CLI,然後下載 CLI、解壓縮,放到正確的位置。這個安裝程式已經被下載 15,000 次,我蠻引以為傲的!
這是很了不起的成就!你平常(幾乎)不做網路相關的程式設計,那麼用 Delphi 開發這個安裝程式時,你遇到了哪些挑戰?
這個安裝程式最初是用 C# 寫的。它已經過時了,我就想看看能不能把它改得更好。我以前從沒做過這種事,但我知道 Delphi 有工具可以完成這項工作。我一開始先研究原本的 C# 程式碼,了解背後實際發生的流程順序,然後試著在 Delphi 裡完成同樣的事。我在 Embarcadero 的文件網站上找到一些範例程式碼,幫助我了解如何正確地把現成的元件串接起來,做出一個 REST 用戶端。我還發現 Delphi 附了一個很方便的工具,叫做 REST Debugger。它讓我可以輸入並測試安裝程式所需的各種 HTTP 呼叫。等這些呼叫都能正常運作後,這個除錯器就會產生所需元件的副本,讓我可以把它們貼進程式碼裡。
對於想更深入參與 Exercism 的人,也許是希望成為維護者的人,能不能跟我們說說你當初的歷程?
我是當地一個叫做 Akron Code Club 的 MeetUp 社群的成員。我們大約每個月聚一次,通常會兩兩分組,一起做一道有人推薦給社群的 code kata。在 2016 年 8 月的聚會上,我們開始做 Exercism 提供的練習。當我在用 Exercism 和其他一些教學網站時,我覺得如果這些線上程式設計網站能多提供 Delphi 或 Pascal 這個選項就好了。在逛過 Exercism 網站和 Exercism 的 GitHub 儲存庫之後,我發現 Exercism 一直都很有興趣新增語言軌道。我不太確定該怎麼聯絡 Katrina 最好。我想我是在 2016 年 8 月透過 Gitter 聯絡她,提議新增 Delphi。大約兩個月後我收到一封帶著歉意的回覆,那時我才發現她不用 Gitter。總之,她問我是不是還有興趣一起把 Delphi Pascal 軌道加進來,如果有的話就開始動工。
現在有一個儲存庫可以讓你申請新的語言軌道,你也可以隨時在 exercism/exercism 儲存庫裡開 issue,和這個專案的維護者聯繫。
太好了。謝謝你和我聊天,也謝謝你為 Exercism 做的所有付出!
我的榮幸!聊得很開心。我很享受參與其中,也很樂意盡我所能為 Exercism 做點事。從做中學!