你應該學會像程式設計師一樣思考!

其實從實用主義的角度動身,學會編程,可以處理疑問。

很多頂尖的程序員,在開闢新程序的時候往往都是為了滿足自身的需求:Linux操縱體系,是由於林納斯托瓦茲(Linus Torvalds)對自個電腦上運轉的 MINIX體系不滿意意,才開發Linux的;馬克扎克伯格在大學時開闢的第一個程序,則是為了讓自己和同學可以非常好地選課。

縱然不學編程,從程序員這群智慧人的身上我們也可以學到很多。

你應該學會像程序員一樣思考!

比如說——程序員的「懶」

懶散看起來是褒義詞,倒是程序員最優秀的特質之一。由於懶散,他們難以忍耐重複的作業,才會開發種種工具來替自己幹活——「一件事要重複兩次以上,就該為他寫個腳本」。

也由於懶散,他們才會儘可以大概制止代碼的冗餘,能用一行代碼完成的任務絕對不寫兩行,讓程序的維護儘可能簡單。

為了偷懶,程序員們甘心創造任何工具:無論是人工智能、自動駕駛還都是物聯網,全都是「懶」的產物。

縱然面對日子裡的一些小事,他們也一樣懶:為信用卡設定主動還款;給電飯煲設置定時,來解放睡覺時候;Excel 裡單調而重複的複製粘貼,也都可以用簡樸的函數完成。

你看,懶一點是不是也挺好。

比如說——程序員的「精」

比重用蠻力,他們更甘心用智慧的算法來高效處理疑問。敏捷排序算法、二分查找算法、蒙特卡洛算法……很多經典的算法,讓次序員們站在巨人的肩膀上,能看得更遠。

算法聽起來深奧,本來可以領導我們日子的方方面面。

舉個例子,假定要從一定的人選中挑選最佳的一位作為你的下屬,他們逐一前來口試,口試完畢時就要決定是不是任命,那麼,你應當口試多少個候選者才能招到最佳的人呢?

程序員用算法報告我們,答案是 37%。

對前 37% 的候選者只觀察不選取,而在口試了 37% 的候選者當前,遇到比之前統統候選人都優秀的人就選取他。這個算法能包管你有逾越 1/3 的概率招到到最才子選。

你應該學會像程序員一樣思考!

你可能會見過這樣一句話。

這個國家的每個人都應該學會對計算機進行編程,因為它教會你如何思考。 ——喬布斯

你可能會在想這究竟是什麼意思,像程序員一樣思考?怎麼才能做到呢?

基本上這一切與更有效地解決問題有關。

我們都有問題。無論大或小。不過有時候我們解決問題的方式可是有點隨意。

除非你有一套系統,否則的話你“解決”問題的方式大概是這樣的:

  1. 嘗試著解決問題。
  2. 如果這種解決方法無效,再試另一種。
  3. 如果還是沒有用,重複第二步直到你解開問題。

你看,有時候你會走好運。但這是解決問題最糟糕的方式!而且非常非常浪費時間。

我發現新手程序員的最大錯誤是關注於學習語法而不是學習如何解決問題。 ——V. Anton Spraul

那麼,遇到新問題時你會怎麼做呢?

以下就是步驟:

1.理解

準確的說是瞭解問題的核心。大多數的疑難雜症之所以難是因為你不理解它(因此這就是為什麼這是第一步的原因)。

怎麼才知道你什麼時候理解了問題了呢?當你能夠把問題說清楚的時候。

你還記得問題卡住的時候,你開始解釋問題,然後馬上看到了此前看不到的邏輯漏洞的時候嗎?

大多數程序員都知道這種感覺。

所以這就是為什麼你應該把問題寫下來,畫張圖,或者把問題告訴某人(或者某物……有的人會利用橡皮鴨)的原因。

如果你不能用簡單的語言解釋一個東西,你就沒有真正理解它。——費曼

2.計劃

不要在制訂計劃之前就匆忙投入到問題解決當中。先計劃好你的解決方案!

如果你不能寫下確切的步驟的話,沒有人能幫到你。

在編程中,這意味著不要一言不發就開幹。要給你的大腦一點時間來分析問題和處理信息。

要想制訂出好的計劃,請回答這個問題:

“在輸入為X的情況下,返回輸出Y的必要步驟是什麼?”

3.分解

注意。這是最重要的步驟。

別想著解決一個大問題。你會哭的。

相反,要把問題分解成子問題。這些子問題解決起來要容易多了。

然後一個個地解決這些子問題。從最簡單的開始。最簡單意味著你知道答案(或者更接近答案)。

之後,最簡單意味著這個被解決掉的子問題並不依賴於其他被解決的問題。

一旦你解決了每一個子問題,再將點連成線。

把你所有的“子解決方案”連接起來就能得出原先問題的解決方案。祝賀你!

這一技巧是問題解決的基石。記住它(如果沒記住,請把這個步驟再讀一次)。

如果我要教給新手程序員一個問題解決技能的話,這個技能會是“問題分解技巧。”

比方說,假設你是一名新程序員,有人要你寫一個程序讀10個數字並找出第3大的那個。對於菜鳥程序員來說,這可能會是一個艱難的作業,即便這隻需要基本的變成語法。

如果你卡住了,就應該把問題分解為簡單一點的東西。與其尋找第三大的數字,何妨先找最大的數字呢》還覺得困難?那在3個數裡面找出最大的數字呢?或者兩個數中較大的那個?

把問題分解到你之大如何去解決的程度然後寫下解決方案。把把問題稍微擴展一下,重寫解決方案來跟問題匹配,一直這麼做,直到你回到原先的起點。 ——V. Anton Spraul

4.卡住了?

如果連子問題都解決不了呢?是不是卡住了?

首先,深呼吸一下。其次,這很正常。

但請不要擔心,每個人都會這樣!

不同的是最好的程序員/問題解決者會對bug/錯誤更加好奇而不是感到氣憤。

實際上,在遭受打擊時這裡有三件事情是需要你嘗試一下的:

  • 調試:一步步仔細檢查你的解決方案找出什麼地方出問題了。程序員稱之為調試(實際上,所有的調試工具都要做這個)。

調試的藝術在於找出你告訴程序要做的究竟是什麼而不是你以為你告訴它做的是什麼。 ——Andrew Singer

  • 再評估:後退一步。換個角度審視問題。有沒有什麼東西可以抽象為更通用的方法?

對於問題有時候我們太過只見樹木不見森林以至於忽視了從更普遍的水平上解決問題的一般原則。[……]

當然,這個的典型例子是一系列連續整數之和,1+2+3+…+n,這個問題一位年輕的高斯很快就能意識到答案是n(n+1)/2,從而避免了必須把一個個數加起來的麻煩。 —— C. Jordan Ball

  • 調研:什麼是調研?就是上Google去google一下。沒錯。不管你有什麼問題,可能都已經有人解決過了。找到那個人/解決方案。實際上,哪怕你已經解決了問題也要去查查看!(你可以從別人的解決方案中學到很多)。

警告:不要想尋找大問題的解決方案。只去找子問題的解決方案。為什麼?因為除非你拼盡全力,否則就不會學到任何東西。如果你學不到任何東西,那就是在浪費時間。

5.實踐

不要覺得過了一週,你就會非常的棒!如果你想要成為一名好的問題解決者,那就先解決問題!

練習、練習,不斷地練習。這樣下去你意識到“這個問題很容易就能用[在此處插入概念]加以解決。”就只是個時間問題。

如何練習?選項太多了!

國際象棋迷局、數學難題、數獨、圍棋、地產大亨遊戲等等等等……

其實,成功人士的一個共同模式是練習“微觀問題解決”的習慣。比方說,Peter Thiel下國際象棋,Elon Musk玩視頻遊戲。

Byron Reeves說“如果你想知道3~5年後商業領導力是什麼樣,那就看看在線遊戲發生的事吧。”

回到現在。Elon、Reid、扎克伯格等人都說遊戲是自己創業取得成功的基礎。 ——Mary Meeker《2017年互聯網趨勢報告》

總結

現在你應該對“像程序員一樣思考”更瞭解了吧。

你還知道了解決問題是需要培養的一項不可思議的技能(元技能)。

最後,我希望你能遇到很多問題。

至少現在你應該知道該如何的解決問題了。

當你以為你已經成功排除了一個障礙的時候,新的障礙又出現了。但人生之所以有趣正是因為如此……

人生就突破這些障礙的過程——人生就是要突破這一道道的防禦工事。

每一次你都會學到一點東西。

每一次你的力量、智慧以及看法都會得到發展。

每一次競爭對手都會被你拋在身後一點點。直到所有對手都看著你的背影望塵興嘆:你也成為了最好的自己。

分享 IT 技術和行業經驗,請關注- 。


分享到:


相關文章: