程式設計可以教給你的6個生活習慣

jobbole發表於2014-03-08

  成功人生所需要知道的一切重要事情,你都能從計算機程式設計中學到。不相信我?那就繼續往下看。

  當我很小開始程式設計之時,還只是照搬電腦雜誌上前瞻性的文字和符號,以便我和哥哥能夠讓帶有一個雙軟盤驅動器的舊 Franklin 64 播放一段小巧的數字曲調。當時我們還沒有太多生活經驗去辨別那些神祕文字。

  很多年後,在高中的Pascal課程中,事情看起來開始變得不同。瞭解if條件語句和for迴圈,開始引發出沃爾特·惠特曼和羅伯特·弗羅斯特等人都引以為傲的哲學突觸聯絡。好吧,我說的有點誇張,但是這些見解仍然很酷。

  是的,我知道,它說起來是一件很令人厭煩的事情——但事實是,在程式碼中,在while語句、陣列、方法、物件等所有這些中,蘊含著很多智慧。事實上,我學到的很多駕馭生活的能力,通常都直接來源於我對多種程式語言的研究。

  用流程圖簡化每件事情

  許多程式設計師在開始編寫單行程式碼之前很久就已經開始使用流程圖。這樣做的原因是,有時試圖一下子編寫出整個程式的感覺真的是壓倒性的,尤其是當程式要完成一些非常複雜的任務時。

  程式設計師將接受大的甚至巨大的軟體專案,然後將它們分解為更好管理的更小的部分——有點像造一輛汽車,需要通過事先做每個所需元件,然後再將它們組合在一起。每個部分都是一個(或幾個)具有特定輸入值或行為的集合、然後完成一些輸出任務的程式碼塊。在該模組內部,程式設計師將使用流程圖描繪出從輸入到輸出的邏輯。

flowchart

  流程圖能夠幫助你以一種視覺化形式跟隨這個邏輯,這遠比你試圖用文字把它寫出來或者想當然地狂寫程式碼來解決這一問題更加容易理解。程式設計師沒有找出這樣的“動態”邏輯的原因是,後面的邏輯通常在很大程度上取決於你對如何處理程式中早前的邏輯做出的決定。早期決定錯了,你將會把自己編入死衚衕。

  生活中也是如此。當你正在做一個關於如何去還清債務、買房子,或者如何處理任何其他複雜的生活狀況,甚至如何管理工作中的一個專案的決策時。在你坐下落筆繪製出在這個過程或決策中每一步的創意流程圖時,所有那些看似不可逾越的任務都能夠得到更好的處理。這將幫助你在每一個階段為你所有可能的選擇作出決定,或者預測所有可能性然後追蹤各種情景。就像程式設計,瞭解早期的選擇會如何影響後面的結果將幫助你及早地做出更好的決策。

  每件事物都有它的位置

  每當你開始編寫一個指令碼或程式時,第一步總是建立你的變數。在程式設計中,包含有很多不同型別的變數。有支援文字表示的字串型別,支援非十進位制數表示的整數型,用於處理更大數字的雙精度型或其變體,還有陣列型別、結構體型別等等。我們的想法是,定義一個適用於手頭任務的變數。例如,如果一個函式的輸出是一個人的名字,那麼你需要的是一個字串變數。

variables1

  當你組織你的生活時也是如此,無論是你的房子還是辦公室,你根據要儲存事物所需空間的多少來選擇空間的大小。小而透明的塑料盒用於盛放乾貨,一個貼好標籤的香料架盛放香料以節省空間。在辦公室,你會將日常工作文件放在辦公桌抽屜裡,而將敏感的商業文件存放進一個鎖櫃中。每件物品都有合適的容器,並且都有它適當的位置——這是組織良好生活的座右銘。

  重用程式模組以節省時間

  任何一個優秀的程式設計師最終都知道特定的程式碼塊(或稱為“函式”)可以在多個程式中重用。例如,一個將華氏溫度轉換成攝氏溫度的函式,它可以用於你建立的任何需要完成這一任務的程式中。這個函式是一個簡單的模組,它以華氏溫度為輸入,然後輸出對應的攝氏溫度。這個函式可以包括一定行的程式碼,然而當你本可以將它們儲存為一個程式模組,然後再直接將其嵌入到未來任何需要它的程式中去時,你為什麼非要為所編寫的每一個程式都重建這些程式碼呢?

assembly-line

  亨利·福特關於他著名的T型車曾經說過,“任何顧客都可以擁有一輛他想要的任意顏色的汽車,只要它是黑色的。”

  原因是福特已經想出瞭如何組裝汽車,並且如果每製造一輛新車都能夠重用相同的裝置(和相同的顏色漆)而無需重現該過程會讓它們更快地上市。這催生了流水作業,它徹底改變了汽車工業。同樣的方式,你可以將這一原則應用到你生活中需要重複性工作的各個領域。自動化是成功的關鍵,所以如果你能找到方法來自動化工作中需要重複完成的任務,——你就可以使你的一天更有效率以節省時間。

  首先,閱讀我們的網站自動化指導。

  記錄每一件事

  有時,對於一個程式設計師來說,只是飛速編寫程式碼而不記錄單獨的事情是非常誘人的。之所以誘人是因為,任何時候你都準確地知道你想要程式做什麼以及你想要怎樣去實現它。記錄一個程式需要時間。你必須描述每一步怎樣做以及為什麼這樣做。這看似毫無意義,但幾個月後當你決定重用這段程式碼或為另一用途修改它時,這就體現了奮力掙扎想起你的每一行程式碼到底是在做什麼,與迅速回退去了解你邏輯背後的整個意圖之間的區別。

documenting-code

  這種細緻的文件在生活中的每個領域都有幫助,從跟蹤生日和紀念日,到保持日常商務交易日誌以及進行這些交易的原因。隨著很多決策像風中的樹葉一樣來來去去,日常生活會變成每一個模糊的日子。只依靠記憶去記住你為什麼出席某些會議或為什麼做出某些購買的做法是幼稚且低效的。每日日記或日誌對解放你的思想去做更重要的事情有很大幫助。

  始終給自己留一條退路

  一個業餘程式設計師最常犯的錯誤之一是無限迴圈。這是一種打破迴圈所需的條件從未發生的情況,程式會留在迴圈裡並且永遠不會結束——這佔用100%的電腦CPU資源,幾乎相當於鎖定了電腦,直至你終止這一過程。

  業餘程式設計師需要從中學習的教訓是,每當你建立一個需要消耗大量CPU資源的迴圈來執行某種任務時,引入各種各樣的跳出機制是非常重要的。換句話說,相比基於一個判斷你的計算結果是否超過一定值的While迴圈(在某些情況下它可能永遠不會達到),引入一個非常基本的迴圈計數然後新增一個次要終止條件的方法是更可取的。如果迴圈次數超過某個極大的數值,迴圈必須結束,而如果在一切正常的情況下,這個條件應該是永遠不可能達到的。

breakout

  這會如何應用到現實生活中呢?它恰恰說明,即使你認為已經有了完美的計劃,事情仍然可能出錯。一個例子可能是,計劃了為期一週的在最美麗、放鬆的熱帶天堂的家庭度假,不料竟會因為下了一整週的雨而結束它。生活中“退路”的理念就是,要考慮到“最壞情況”,然後想出如果它真的發生了你要如何避免或者如何儘量去利用好它。

  生活並不總是可以預測的,即使一些你認為根本不可能會出錯的最周密的計劃,也可以很容易地被破壞。為最糟的意外事件做好計劃,這將能確保當意想不到的事情發生時你不會以徹底失敗而告終。

  完成任務時要釋放記憶體

  從程式設計中得出的最後一個生活經驗是,及時清理自己。在一個程式中,你將需要開放一個流到一個輸出檔案,建立一個充滿資料點的大陣列,以及其他一些佔用計算機記憶體和資源的事情。一個乾淨的程式,是能夠及時關閉輸出流並清空已經用完的陣列的程式。這裡的理念是,要避免寫出一個帶有被稱為記憶體洩漏的常見問題的應用程式。

  例如,在一個簡單的VB應用程式中,你會這樣刪除一個陣列:

  Erase ArrayDin

  或像下面這樣關閉一個輸出檔案流:

  FileClose(1)

  這聽起來像是你在更年輕的時候可能聽到媽媽說過的一些事情,對嗎?打掃你的房間,把你的衣服收好,洗淨你的碗。然而,更進一步,收拾好你完成手頭任務所使用的工具,不僅會使你的家和工作區整潔,它還能夠留下足夠的空間讓你更快地完成下一個專案。把東西隨意亂放只會浪費空間,而且當你之後找不到所需要的東西時還會浪費你的時間。

  底線

  事實上,你能從程式設計藝術中學到的生活經驗並不只有這六個,還有更多。當涉及到組織、規劃、制定策略和節約資源時,計算機程式設計師已經理解了它。你能夠從花費時間學習一門程式語言的過程中學到很多東西,而不僅僅是程式設計本身。事實上,這就是為什麼每個孩子在學校都至少應該學會一種程式語言,因為一旦你抓住了它的訣竅,那麼它很快會變得明顯,你可以在你生活的其他領域使用這些訣竅。

  你從程式設計的世界中發現了哪些其他類似的生活經驗呢?

  原文連結: Ryan Dube   翻譯: 伯樂線上 - yixingqingkong

相關文章