作者 | Charles R. Martin
譯者 | 彎月,責編 | 夕顏
頭圖 | 付費下載自視覺中國
出品 | CSDN(ID:CSDNnews)
新手編寫「Hello,World」程序的傳統至少可以追溯到1978年。但是,對於現代的程式設計師而言,什麼才是恰當的「Hello,World」?
不久之前,一位客戶要求我在AS/400上用RPG編寫程序。引用羅巴切夫斯基的話來說就是:「боже мой!」(我的天哪!)
雖然我不想暴露自己的年齡,但我上次用RPG編寫程序的時候,恐怕本文的大多數讀者都還沒有出生。要想構建這樣的程序,我需要回憶如何使用KEDIT等編輯器,學習如何使用AS/400軟體開發工具、構建測試庫、編輯實際的程序,然後再編譯並弄清楚如何運行。
雖說客戶的程序很簡單,但我不想直接開始寫程序。於是,我創建了一個「Hello,World」項目。
有意義的傳統
「Hello,World」程序的概念可以追溯到Brian Kernighan和Dennis M. Ritchie的著作《C程式語言》(第一版),通過編寫一個小程序來確認你掌握了這門語言和環境,已做好準備嘗試更複雜的功能。大多數C語言程式設計師編寫的第一個程序都像下面這樣:
1 #include <stdio.h>23int main() {4 printf("Hello, world!\n");5 return 0;6}
將這些代碼保存到『hello.c』文件中,然後輸入以下命令(在UNIX系統上):
1$ cc hello.c2$ ./a.out
然後,你就可以看到輸出結果:
1Hello, world!
以上代碼可以證明你確實能夠用C語言編寫、編譯和執行程序。
Brian Kernighan和Dennis M. Ritchie在書中寫道,構建C語言的程序意味著你掌握了啟動一個C語言項目的基本步驟。
這是最大的困難。為了克服這些困難,你必須能夠創建程序文本,成功地編譯、加載、運行並輸出結果。在掌握了這些技術細節後,其他操作相對都比較容易。
好吧,我承認「其他操作相對都比較容易」這種說法略顯荒誕,然而,這確實是學習所有程式語言重要的一步。
雖然編寫「Hello,World」程序已成為編程界的一種傳統,然而與許多傳統一樣,很多人雖然這麼做卻沒有意識到其中真正的目的或價值。於是,有人在網上總結了一個Hello World集合,其中包含用近600種語言編寫的「Hello,World」程序,從Ada到ZIM。許多IDE都可以編寫基本的「Hello,World」程序,對於許多解釋型語言(如Python)來說,「Hello,World」只不過是在解釋器的REPL中鍵入print("Hello, world!")。
不幸的是,這並不能提供太多實際的洞察力,而用Richard Hamming的原話來說,計算的目的是洞察力,而不是文字字符串。
「Hello,World」真正的意義是什麼?
原本Brian Kernighan和Dennis M. Ritchie讓大家編寫「Hello,World」程序的重點不是在終端上輸出「Hello,World」。相反,是為了確保你具備所有的工具,並對編寫C程序所需的C語言知識和UNIX編程環境有基本的了解,而且還對構建程序的工具和方法有一定的了解,這才是啟動一個項目最重要的第一步。
這一步通常比最初看起來更為複雜。如今,實際的項目不僅需要編輯器和編譯器,還需要了解如何打包程序,如何搭建環境,如何計劃維護版本控制,如何實際構建程序以及所需交付的產品編程項目。因此,儘管基本的「Hello,World」程序可能仍然只有五行代碼,但是構建最初那個看似非常容易的「 Hello,World」可能要複雜得多。
啟動一個新項目必然需要在進入「其他操作相對都比較容易」階段之前,解決許多開發上的問題。
項目的「Hello,World」程序
為了某個項目構建適當的「Hello,World」實際上比較複雜,但收益也很大。考慮一個需要交付的項目,例如一個Web應用程式。除了選擇語言之外,通常還需要選擇前端和後端的框架。此外,你還需要確定如何託管第一個應用程式,以及如何管理和交付代碼。
對於一個項目來說,恰當的「Hello,World」程序不僅僅是顯示輸出。你需要證明你已做好準備添加功能(如果你們採用SCRUM則為添加用戶案例),然後經過一系列的操作將其推到演示和測試的應用程式版本。對於產品而言,恰當的「Hello,World」程序就是最低版的最低可行產品,它表明隨著開發的進行,你可以提供有用的產品進行測試和使用。
什麼才是恰當的「Hello,World」?
顯然,根據不同的項目和環境,恰當的「Hello,World」程序也有所不同。我教過很多新手,一般我都會建議他們完成以下準備工作:
一個單獨的項目目錄:保存所有代碼的一個「文件夾」。在這個文件夾中初始化git代碼庫。沒錯,連我都開始使用git了。雖然這些基礎的知識很容易學習,但我見過很多學生陷入了絕望,因為他們做了一些小的改動,結果並沒有達到預期的結果,但他們不記得做了哪些改動,無法還原到舊版本。選擇開發工具:編輯器或IDE,構建工具等等。與在命令行中調用編譯器相比,可重複的構建過程更加健壯。然後才是實際的第一行代碼。
在做完上述工作,而且還可以編輯、提交、構建和演示非常小的程序後,才算是準備好構建新功能了,同時這些工作還可以避免開發過程中遇到一些不愉快的錯誤。
建立一個專業的「Hello,World」
雖然很多人以為「Hello,World」程序只適合初學者,但實際上大多數項目都是從一個空目錄開始的。一般,一個實際項目的「Hello,World」程序會遇到大量難題,而且過程很複雜。例如,在Maven中為Java程序創建非常基本的框架,通常需要建立十幾個目錄和子目錄,才能用Java構建簡單的「Hello,World」程序,而Maven生成和依賴項管理器程序還會將1350個文件下載到550多個目錄中。
而且,不僅僅Java或Maven才會遇到這樣的問題。使用create-react-app構建一個新的React應用也需要4304個目錄和28678個文件。
顯然,手工完成這些工作會讓人發瘋。這種複雜性迫使開發人員必須通過構建腳本來創建「Hello,World」級別的應用程式,但即使這些應用程式還不夠完善,你仍然需要添加原始碼控制,配置容器或持續集成管道或部署腳本。
雖然這些工作比原來的五行「Hello,World」複雜得多,但目的仍然是相同的:通過構建簡單的應用程式,確保滿足後續開發的要求。
良好的開端
任何規模的軟體項目從一開始就面臨著相同的問題:如何才能順利啟動項目、構建代碼、部署代碼,才能讓後續開發專注於構建滿足實際客戶需求的代碼?
無論項目多麼複雜,你都可以通過構建演示程序來確保一個良好的開端。雖然這個演示程序的功能非常有限,但你可以通過這個過程練習構建、測試甚至部署的整個過程。這才是最初提出「Hello,World」程序的初衷,如今這仍然是一個項目良好的開端。
原文連結:
https://stackoverflow.blog/2020/03/05/a-modern-hello-world-program-needs-more-than-just-code/
本文為CSDN翻譯文章,轉載請註明出處。