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