寫程式印出十次 "Hello"
October 06, 2014 18:23
今天上網看到一篇老文章《Coder or Clown?》, 文章作者主要想表達的意思是他作為面試官,面試了很多程序員,他發現很多程序員就是小丑,並把他們分類列舉。這篇去年發表的文章被很多人轉載翻譯,作為茶餘飯後調侃程式設計師的佳作。我看了也是一笑而過,但是其中作者說的第一個事例卻引起了我的興趣,雖然很搞笑,但是這其中似乎隱藏著一些coder的情懷。
這個故事是這樣的:作者面試了一個叫做Ada的畢業生,她是一位程式新手。作者給他出了一道題目,讓她在紙上寫下一段程序,目的是印出“hello”10次,無論用什麽語言寫都可以。於是這位可愛的學生在紙上寫下了10句 「print "hello"」。
作者給出的評語是:“無論如何,拼寫都是正確的”。這本身是一件很搞笑的事情,我當時也很歡樂,雖然不知道是不是真有其人。我也就開開心心的把整篇文章看完,作者的語言很幽默。評論很多,我稍稍看了一下發現許多人對Ada這件事耿耿於懷,甚至還有人說那是最佳答案。
Ada的做法很好, 但更好的做法應該是如下:
print “hello hello hello hello hello hello hello hello hello hello”
優點:
1. 程式碼清晰易讀
2. 避免了循環,不會破壞CPU管線,提升了效率
3. 改多次I/O函數呼叫為一次呼叫,提升了效率
看到這個評論的時候我笑了半天,不過這位朋友說的挺有道理。我仔細想了一下,覺得印出這個單詞10次,也許這真是一個比循環更好的辦法。我記得還在上學的時候,老師曾今說到在什麽情 況下使用循環,好像是說某一個操作要重複執行大於3次,那麽就應該用循環結構。當然,現在看來這個說法也很搞笑,為什麽要3次以上,為什麽不是4次?我們 再回來看這個問題,首先要寫10次hello並不費力,而且他人也一眼就能看條語句的目的是輸出10個hello這串文字,而用循環的話就沒有這麽直觀 了。
其實作為程式設計師最忌諱的就是死板,一成不變循規蹈矩的編程首先就會讓自己厭倦。多思考,多實踐才是最好的提高手段。那麽大家能說說寫 10次print "hello"與使用 for循環(for loop) 相比有什麽不妥嗎?難道影響程序可讀性?影響執行效率?不會是說占用了更多的硬碟空間吧(笑)。
很有趣吧?
大部分的人都會覺得「笨方法」一定最慢、最累,但是在很多情況下,這些「笨方法」反而會花最少時間。所以判斷什麼時候只要用笨方法就可以最快解決問題,就考驗到你的智慧與經驗了!