現代的 「Hello, World」,可不僅僅是幾行代碼而已

2021-01-09 CSDN

作者 | 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翻譯文章,轉載請註明出處。

相關焦點

  • Hello World!菜鳥之路
    Hello,world!hello,everybody.開篇說就是要扯一下,有小白愛好者,可以一起學習交流~歷經見著傷心,聞著落淚的艱難奮鬥史,總算精通幾個程式語言的安裝以及卸載,實在不行還可以重裝系統的技能。哈哈,確實精通「hello,world!」
  • 同學你會hello world嗎?給我講清楚點
    記得很清楚第一次面試阿里巴巴的時候,面試官上來讓我寫一個hello world程序當時我真的一面黑人問號的確認了三遍,面試官依舊淡定的說 是的寫完就讓我聊hello world,一個hello world聊了一個小時
  • 只有170位元組,最小的64位Hello World程序這樣寫成
    現代 IDE 在方便我們開發的同時,也將很多底層的細節隱藏了起來。往往寫完代碼以後,點擊「構建」就行了,至於構建在發生什麼,具體是怎麼構建的,很多人並不關心,甚至根本不知道從原始碼到可執行程序這中間經歷了什麼。編譯、連結和裝載是一個巨大的話題,不是一篇博客可以覆蓋的。
  • 程序'猿'的「hello,world!」是什麼梗?
    \n");return 0;}這段代碼的結果,就是在屏幕上顯示一行字:hello world在大多程式語言裡,第一課會以輸出hello world為演示,比如php的更簡單:<?phpecho "Hello,World!";?
  • 先來理解一下C語言的Helloworld程序吧
    相信每一個學過任何程式語言的小夥伴都是從編寫出一個能夠輸出Helloworld的小程序開始的。當你能夠在一個空文本中純手打,寫出一個完整的Helloworld程序,並理解文檔中所有英語單詞、括號的含義之時,你就已經打開了編程之門,踏上了獻祭頭髮獲取力量的道路。廢話少說,我們來介紹一下Helloworld吧!
  • 《你的名字》翻版劇情出現,即將上映hello,world?
    在小編尋找素材時,忽然發現了一個對學過編程的小編一個吸引的話題——「hello world」。當小編打開後,看到的居然是一部動漫?想當初還在電腦上敲著代碼的時候,看著自己的頭髮逐漸的變白,然後一根一根的掉落,小編機智地就停止了寫代碼的工作,我還沒結婚啊!脫髮算怎麼回事,結果小編卻喜歡上了自媒體寫文章這個興趣愛好,但是當小編看到hello world的時候還是會情不自禁地點了進去,看看到底是個什麼鬼?
  • 12 種主流程式語言輸出「 Hello World 」,你真的都會了嗎?
    作者 | Fatos Morina譯者 | 彎月,責編 | 屠敏以下為譯文:Hello world!剛開始學編程,或者學習一門新的程式語言時,我們編寫的第一個程序往往很簡單,而且往往這個程序就是輸出一個簡單的文本。在閱讀本文時,你可能心知肚明我指的是哪種最常見的文本。沒錯,我說的就是Hello world。
  • Hello World 合集
    @ColorfulDays: 很久很久以後的某一天,在鹹亨酒店喝悶酒的落魄程式設計師孔乙己對店小二魯迅說,小盆友,過來,我教你HELLO WORLD 有幾種編法
  • hello world! 看電影《太空旅客》
  • 從「Hello world!」入門C語言!
    好了,現在開始今天的正題:作為C語言的入門,第一步當然是輸出「Hello world!」啦。具體代碼如下:①#include <stdio.h >②void main ()③{④printf("Hello world !")
  • 人生第一行經典代碼,決定程式設計師的出身,更決定程式設計師的職業生涯
    入門語言與職業生涯在計算機編程領域,人生第一行經典代碼——"hello,world!",往往決定了程式設計師的出身,更決定了程式設計師的職業生涯。第一行代碼,決定的是未來程式設計師的入門程式語言。所以,換而言之,程式設計師的入門語言,決定了程式設計師的教育背景,也決定了未來編程路上能走多遠。
  • 《hello world》先行:即使世界毀滅,我也想再見你一面
    比如說《hello world》這部作品,在很多帖子以及自媒體好友中都備受好評,但是在看完整部這作品之後,忘川還是很失望的!感覺捧得太高,看完後的反差越大!②這部作品是一部原創3D動漫電影,篇幅不長,但是結局反轉很大!正如電影官方海報上所言:故事可能會在最後一秒反轉!其次,由於是3D作品,整體看起來十分奇怪,好在製作流暢,環境優美,總體還算過得去。
  • Python 2和Python 3代碼有哪些區別?
    在Python 3中調用print需要加上括號,不加括號會報SyntaxErrorPython 2print "hello world"輸出hello worldPython 3print("hello world")輸出
  • 讓代碼飛出一段鋼琴曲(freepiano小助手)
    概述突然想玩一下鍵盤彈曲子,就找到了freepiano,專業的東西不懂,就找了寫簡譜來玩玩,感覺挺不錯的,哈哈~~玩瘋了之後,突然想到,我平時寫代碼,是不是可以彈出一段曲子呢,是不是心情會變得非常好,代碼也寫的更有節奏呢~~說不定還搞出來一個什麼《代碼之歌》的鋼琴曲~~ 嘎嘎突然被自己這個想法吸引住了,不管咋樣,每敲下代碼的一個字符
  • 改進你的 Ansible 劇本的 4 行代碼 | Linux 中國
    在這個例子中,我創建一個記錄的直接願望就是讓系統保存記錄而已。如果我們的目標是一個超緊湊的、直接的、笨拙的宏,那麼它可能用 100 行代碼就能寫出來。如果我記得 API,我也許能在一個小時內把它敲出來,該代碼的作用不會超過預期,除了確切的成品之外,什麼也沒留下。對它的目的而言是完美的,但是對未來的擴展毫無用處。
  • 4個代碼中,字符串的出現頻率,我們比一比
    在程式設計師的代碼裡,字符串是經常出現的形式。有些語句雖然沒有什麼意義,但卻無孔不入,我們經常見到它的身影。1、hello world在介紹某一種新的語言時,教材往往會在開始,給出能夠輸出hello world程序的例子。據說最早出現於1972年,貝爾實驗室成員布萊恩·柯林漢撰寫的內部技術文件《A Tutorial Introduction to the Language B"》之中就有Hello World。
  • 如何用幾行代碼給一張圖片打馬賽克
    大家好,我是致力於讓每一個人都可以輕鬆學會編程的[一支穿雲],本文用幾行簡單的代碼就可以做到給一張圖片打馬賽克。為了讓你可以時常get這樣的小技能,關注我不迷路。/img/金毛.jpg')plt.imshow(dog)dog.shape全圖打馬賽克#隔30行30列取一個像素點#新數組行數:800/30 = 27(向上取整)
  • 《Hello World》優秀的套娃故事,男主十年努力,只為見愛人一笑
    周末閒得無聊打開某網站看看最近有沒有啥好看的番劇更新,看到首頁上推薦了一部名叫《helloworld》(這裡先說一下,這個名字對於程式設計師來說是個有趣的梗,但該做和程式設計師沒有太大關係,男女主也並不是程式設計師)的動漫電影,日期顯示是最近才更新的,想著就用你來打發這個周末夜晚了。
  • 只要30行代碼,讓27噸發電機原地爆炸?
    只需要30行代碼 (約140KB的文件),就能讓20噸的發電機原地爆炸?這一幕確實發生在了美國愛達荷州的測試場地上。黑客模擬者將大約30行代碼推進保護繼電器中,不到23秒,機器就已經開始搖晃。又過了幾秒鐘,發電機開始冒黑煙,最後直接爆炸。