編程可以教給你的 6 個生活習慣
成功人生所需要知道的一切重要事情,你都能從計算機編程中學到。不相信我?那就繼續往下看。
當我很小開始編程之時,還只是照搬電腦雜志上前瞻性的文字和符號,以便我和哥哥能夠讓帶有一個雙軟盤驅動器的舊 Franklin 64 播放一段小巧的數字曲調。當時我們還沒有太多生活經驗去辨別那些神秘文本。
很多年后,在高中的Pascal課程中,事情看起來開始變得不同。了解if條件語句和for循環,開始引發出沃爾特·惠特曼和羅伯特·弗羅斯特等人都引以為傲的哲學突觸聯系。好吧,我說的有點夸張,但是這些見解仍然很酷。
是的,我知道,它說起來是一件很令人厭煩的事情——但事實是,在代碼中,在while語句、數組、方法、對象等所有這些中,蘊含著很多智慧。事實上,我學到的很多駕馭生活的能力,通常都直接來源于我對多種編程語言的研究。
用流程圖簡化每件事情
許多程序員在開始編寫單行代碼之前很久就已經開始使用流程圖。這樣做的原因是,有時試圖一下子編寫出整個程序的感覺真的是壓倒性的,尤其是當程序要完成一些非常復雜的任務時。
程序員將接受大的甚至巨大的軟件項目,然后將它們分解為更好管理的更小的部分——有點像造一輛汽車,需要通過事先做每個所需組件,然后再將它們組合 在一起。每個部分都是一個(或幾個)具有特定輸入值或行為的集合、然后完成一些輸出任務的代碼塊。在該模塊內部,程序員將使用流程圖描繪出從輸入到輸出的 邏輯。
流程圖能夠幫助你以一種可視化形式跟隨這個邏輯,這遠比你試圖用文字把它寫出來或者想當然地狂寫代碼來解決這一問題更加容易理解。程序員沒有找出這 樣的“動態”邏輯的原因是,后面的邏輯通常在很大程度上取決于你對如何處理程序中早前的邏輯做出的決定。早期決定錯了,你將會把自己編入死胡同。
生活中也是如此。當你正在做一個關于如何去還清債務、買房子,或者如何處理任何其他復雜的生活 狀況,甚至如何管理工作中 的一個項目的決策時。在你坐下落筆繪制出在這個過程或決策中每一步的創意流程圖時,所有那些看似不可逾越的任務都能夠得到更好的處理。這將幫助你在每一個 階段為你所有可能的選擇作出決定,或者預測所有可能性然后追蹤各種情景。就像編程,了解早期的選擇會如何影響后面的結果將幫助你及早地做出更好的決策。
每件事物都有它的位置
每當你開始編寫一個腳本或程序時,第一步總是創建你的變量。在編程中,包含有很多不同類型的變量。有支持文本表示的字符串類型,支持非十進制數表示 的整數型,用于處理更大數字的雙精度型或其變體,還有數組類型、結構體類型等等。我們的想法是,定義一個適用于手頭任務的變量。例如,如果一個函數的輸出 是一個人的名字,那么你需要的是一個字符串變量。
當你組織你的生活時也是如此,無論是你的房子還是辦公室,你根據要存儲事物所需空間的多少來選擇空間的大小。小而透明的塑料盒用于盛放干貨,一個貼 好標簽的香料架盛放香料以節省空間。在辦公室,你會將日常工作文檔放在辦公桌抽屜里,而將敏感的商業文檔存放進一個鎖柜中。每件物品都有合適的容器,并且 都有它適當的位置——這是組織良好生活的座右銘。
重用程序模塊以節省時間
任何一個優秀的程序員最終都知道特定的代碼塊(或稱為“函數”)可以在多個程序中重用。例如,一個將華氏溫度轉換成攝氏溫度的函數,它可以用于你創 建的任何需要完成這一任務的程序中。這個函數是一個簡單的模塊,它以華氏溫度為輸入,然后輸出對應的攝氏溫度。這個函數可以包括一定行的代碼,然而當你本 可以將它們保存為一個程序模塊,然后再直接將其嵌入到未來任何需要它的程序中去時,你為什么非要為所編寫的每一個程序都重建這些代碼呢?
亨利·福特關于他著名的T型車曾經說過,“任何顧客都可以擁有一輛他想要的任意顏色的汽車,只要它是黑色的。”
原因是福特已經想出了如何組裝汽車,并且如果每制造一輛新車都能夠重用相同的設備(和相同的顏色漆)而無需重現該過程會讓它們更快地上市。這催生了 流水作業,它徹底改變了汽車工業。同樣的方式,你可以將這一原則應用到你生活中需要重復性工作的各個領域。自動化是成功的關鍵,所以如果你能找到方法來自 動化工作中需要重復完成的任務,——你就可以使你的一天更有效率以節省時間。
首先,閱讀我們的網站自動化指導。
記錄每一件事
有時,對于一個程序員來說,只是飛速編寫代碼而不記錄單獨的事情是非常誘人的。之所以誘人是因為,任何時候你都準確地知道你想要程序做什么以及你想 要怎樣去實現它。記錄一個程序需要時間。你必須描述每一步怎樣做以及為什么這樣做。這看似毫無意義,但幾個月后當你決定重用這段代碼或為另一用途修改它 時,這就體現了奮力掙扎想起你的每一行代碼到底是在做什么,與迅速回退去了解你邏輯背后的整個意圖之間的區別。
這種細致的文檔在生活中的每個領域都有幫助,從跟蹤生日和紀念日,到保持日常商務交易日志以及進行這些交易的原因。隨著很多決策像風中的樹葉一樣來 來去去,日常生活會變成每一個模糊的日子。只依靠記憶去記住你為什么出席某些會議或為什么做出某些購買的做法是幼稚且低效的。每日日記或日志對解放你的思 想去做更重要的事情有很大幫助。
始終給自己留一條退路
一個業余程序員最常犯的錯誤之一是無限循環。這是一種打破循環所需的條件從未發生的情況,程序會留在循環里并且永遠不會結束——這占用100%的電腦CPU資源,幾乎相當于鎖定了電腦,直至你終止這一過程。
業余程序員需要從中學習的教訓是,每當你創建一個需要消耗大量CPU資源的循環來執行某種任務時,引入各種各樣的跳出機制是非常重要的。換句話說, 相比基于一個判斷你的計算結果是否超過一定值的While循環(在某些情況下它可能永遠不會達到),引入一個非常基本的循環計數然后添加一個次要終止條件 的方法是更可取的。如果循環次數超過某個極大的數值,循環必須結束,而如果在一切正常的情況下,這個條件應該是永遠不可能達到的。
這會如何應用到現實生活中呢?它恰恰說明,即使你認為已經有了完美的計劃,事情仍然可能出錯。一個例子可能是,計劃了為期一周的在最美麗、放松的熱 帶天堂的家庭度假,不料竟會因為下了一整周的雨而結束它。生活中“退路”的理念就是,要考慮到“最壞情況”,然后想出如果它真的發生了你要如何避免或者如 何盡量去利用好它。
生活并不總是可以預測的,即使一些你認為根本不可能會出錯的最周密的計劃,也可以很容易地被破壞。為最糟的意外事件做好計劃,這將能確保當意想不到的事情發生時你不會以徹底失敗而告終。
完成任務時要釋放內存
從編程中得出的最后一個生活經驗是,及時清理自己。在一個程序中,你將需要開放一個流到一個輸出文件,創建一個充滿數據點的大數組,以及其他一些占 用計算機內存和資源的事情。一個干凈的程序,是能夠及時關閉輸出流并清空已經用完的數組的程序。這里的理念是,要避免寫出一個帶有被稱為內存泄漏的常見問 題的應用程序。
例如,在一個簡單的VB應用程序中,你會這樣刪除一個數組:
Erase ArrayDin
或像下面這樣關閉一個輸出文件流:
FileClose(1)
這聽起來像是你在更年輕的時候可能聽到媽媽說過的一些事情,對嗎?打掃你的房間,把你的衣服收好,洗凈你的碗。然而,更進一步,收拾好你完成手頭任 務所使用的工具,不僅會使你的家和工作區整潔,它還能夠留下足夠的空間讓你更快地完成下一個項目。把東西隨意亂放只會浪費空間,而且當你之后找不到所需要 的東西時還會浪費你的時間。
底線
事實上,你能從編程藝術中學到的生活經驗并不只有這六個,還有更多。當涉及到組織、規劃、制定策略和節約資源時,計算機程序員已經理解了它。你能夠 從花費時間學習一門編程語言的過程中學到很多東西,而不僅僅是編程本身。事實上,這就是為什么每個孩子在學校都至少應該學會一種編程語言,因為一旦你抓住 了它的訣竅,那么它很快會變得明顯,你可以在你生活的其他領域使用這些訣竅。
你從編程的世界中發現了哪些其他類似的生活經驗呢?
圖片來源:本文所有圖片均來源于Shutterstock圖片庫。
原文鏈接: Ryan Dube 翻譯: 伯樂在線 - yixingqingkong譯文鏈接: http://blog.jobbole.com/60816/