如何像程序員一樣思考——解決問(wèn)題的經(jīng)驗(yàn)

How to think like a programmer?—?lessons in problem solving

圖片發(fā)自簡(jiǎn)書(shū)App

如何你對(duì)編程感興趣辛润,你可能見(jiàn)過(guò)這句話:

“Everyone in this country should learn to program a computer, because it teaches you to think.”?—?Steve Jobs

你可能還想知道蔫耽,像程序員一樣思考到底意味著什么放仗?怎樣才能做到?

從本質(zhì)上講包警,這是一種更有效的解決問(wèn)題的方法书幕。

在這篇文章中,我的目標(biāo)是用這種方式教你揽趾。

最后,你就會(huì)知道怎樣才能更好的解決問(wèn)題苛骨。

為什么這很重要?

我們每天都有遇到很多問(wèn)題篱瞎,無(wú)論大的小的。我們處理這些問(wèn)題的方式有時(shí)候都是隨機(jī)的痒芝。

除非你有個(gè)系統(tǒng)俐筋,否則用“隨機(jī)的方式”可能就是你“解決”問(wèn)題的方法(下面我開(kāi)始學(xué)習(xí)編程寫(xiě)代碼時(shí)候做做的事情):

  • 1、試著解決方案
  • 2严衬、如果不行澄者,再試一次
  • 3、如果沒(méi)有效果,重復(fù)第二步知道你運(yùn)氣好

這樣的方法粱挡,在你運(yùn)氣不好的時(shí)候赠幕,就傻了⊙ぃ總之這種方法時(shí)候解決問(wèn)題的最糟糕的方法榕堰!也是非常浪費(fèi)時(shí)間的。

最好的方法是:

  • a嫌套、有一個(gè)框架
  • b逆屡、練習(xí)它

幾乎所有的雇主都把解決問(wèn)題的能力放在首位!

解決問(wèn)題的能力已經(jīng)是雇主們尋找程序員踱讨、測(cè)試工程師魏蔗、系統(tǒng)設(shè)計(jì)師等最看重的一個(gè)方面。

計(jì)算思維或分解大型復(fù)雜問(wèn)題的能力痹筛,與工作所需要的基本技術(shù)能力一樣有價(jià)值?—?by Hacker Rank (2018 Developer Skills Report)

一個(gè)框架

為了找到正確的框架莺治,我遵循了Tim Ferriss 關(guān)于學(xué)習(xí)的書(shū)《the 4-Hour Chef》中的建議, 《The 4-Hour Chef》

這讓我采訪了兩個(gè)讓我印象深刻的人:
C. Jordan Ball (ranked 1st or 2nd out of 65,000+ users on Coderbyte, and V. Anton Spraul (author of the book “Think Like a Programmer: An Introduction to Creative Problem Solving”.

我問(wèn)了他們同樣的問(wèn)題味混,你猜怎么著产雹?他們的回答竟然非常的相似!

接下來(lái)翁锡,你很快就能認(rèn)識(shí)他們了~~

當(dāng)然蔓挖,其實(shí)這也并不意味著它們每件事情都是以同樣的方式進(jìn)行,每個(gè)人都是不同的馆衔,你也會(huì)是不同的瘟判,但如果你從我們都認(rèn)同的好的原則開(kāi)始,你也會(huì)走的更遠(yuǎn)更快角溃。

我看到新程序員犯的最大錯(cuò)誤是專注于學(xué)習(xí)語(yǔ)法拷获,而不是學(xué)習(xí)如何解決問(wèn)題。by - V. Anton Spraul (http://vantonspraul.com/)

那么减细,當(dāng)你遇到新的問(wèn)題時(shí)匆瓜,你應(yīng)該怎么做呢?

步驟如下:

1未蝌、理解

非常確切的知道自己被問(wèn)的是什么問(wèn)題驮吱。大多數(shù)難題之所以難,是因?yàn)槟悴焕斫馑鼈兿舴停赃@個(gè)是第一步左冬。

如何知道什么時(shí)候你理解了一個(gè)問(wèn)題呢?——當(dāng)你能用簡(jiǎn)單的纸型、自己的語(yǔ)言解釋它的時(shí)候拇砰。

你可能會(huì)記得梅忌,當(dāng)你被困在一個(gè)問(wèn)題上,一旦開(kāi)始解釋它除破,你就立刻看到邏輯上的漏洞牧氮,而且漏洞很可能也是你以前沒(méi)有看到的。

大多數(shù)程序員都知道這種感覺(jué)吧皂岔!

這就是為什么你應(yīng)該把你的問(wèn)題寫(xiě)下來(lái)蹋笼,畫(huà)個(gè)圖,或者告訴別人躁垛。

“If you can’t explain something in simple terms, you don’t understand it.”? 如果你不能用簡(jiǎn)單的語(yǔ)言來(lái)解釋某件事剖毯,你就無(wú)法理解它 —?Richard Feynman

2、計(jì)劃

不要在沒(méi)有計(jì)劃的情況下教馆,一頭扎進(jìn)解決問(wèn)題的過(guò)程中(并且希望你能混過(guò)去)逊谋,計(jì)劃你的解決方案吧!

如果你不能寫(xiě)下計(jì)劃確切的步驟土铺,什么也都不幫不了你胶滋。

在編程中,這意味著不要立即開(kāi)始進(jìn)行黑客攻擊悲敷。給你的大腦一定的時(shí)間來(lái)分析問(wèn)題和處理信息究恤。

為了得到一個(gè)好計(jì)劃,回答這個(gè)問(wèn)題:
給定輸入 X后德,返回輸入Y所需要的步驟什么?
程序員的世界里面部宿,有一個(gè)偉大的工具 來(lái)幫助他們實(shí)現(xiàn)這個(gè),那就是注釋瓢湃!

3理张、拆分

這是最重要的一步

不要試圖一次就解決一個(gè)大問(wèn)題,不然你可能會(huì)哭的绵患。

相反雾叭,當(dāng)你把這個(gè)問(wèn)題進(jìn)行拆分成一個(gè)一個(gè)子問(wèn)題,這些子問(wèn)題就更加容易解決了落蝙。

然后织狐,逐個(gè)解決每個(gè)子問(wèn)題,從最簡(jiǎn)單的開(kāi)始筏勒。最簡(jiǎn)單意味著赚瘦,你知道答案(或者更加接近那個(gè)答案)。

另外最簡(jiǎn)單的方法意味著子問(wèn)題的解決并不依賴與其他問(wèn)題的解決奏寨。

一旦你解決了每個(gè)子問(wèn)題,再把這些點(diǎn)連接起來(lái)

連接所有“子解決方案” 鹰服,將為你提供的原始問(wèn)題的解決方法病瞳!那么恭喜你揽咕,你做到了!

這種技巧呢套菜,是解決所有問(wèn)題的基石亲善,請(qǐng)記住它(建議你重新再讀一遍這個(gè)步驟)

如果我能交給每一個(gè)初學(xué)者一種解決問(wèn)題的技能,那就是“減少問(wèn)題這個(gè)技能” 逗柴,例如:假設(shè)你是一個(gè)新程序員蛹头,你被要求編寫(xiě)一個(gè)程序,讀取10個(gè)數(shù)字戏溺,然后算出哪個(gè)數(shù)字是第三高的渣蜗,對(duì)于一個(gè)全新的程序員來(lái)說(shuō),這可能是一項(xiàng)艱巨的任務(wù)旷祸,盡管它只需要基本的編程語(yǔ)法

如果你陷入困境耕拷,你就應(yīng)該把問(wèn)題簡(jiǎn)化。而不是專注在第三個(gè)高的數(shù)字上托享。如何在一個(gè)整體中先找到最高的那個(gè)數(shù)呢骚烧?還是太難了?那從三個(gè)數(shù)字中找到最大的那個(gè)呢闰围? 還是太難赃绊? 那如果是尋找兩個(gè)較大的那個(gè)呢?

將問(wèn)題簡(jiǎn)化到你知道如何解決問(wèn)題羡榴,并編寫(xiě)解決方案的程度碧查。然后稍微展開(kāi)問(wèn)題,重新解決方案使其匹配炕矮,并繼續(xù)進(jìn)行么夫,知道你回到你最開(kāi)始的地方》羰樱—?V. Anton Spraul

4档痪、卡住了呢?

現(xiàn)在,你可能正坐在那里想邢滑,這幾個(gè)步驟看起來(lái)還不錯(cuò)嘛腐螟,但如果我卡住了,設(shè)置不能解決子問(wèn)題該怎么辦困后?

首先乐纸,深呼吸。因?yàn)檫@個(gè)很正常摇予!

別擔(dān)心汽绢,朋友,每個(gè)人都會(huì)這樣子侧戴!

不同之處在于宁昭,最好的程序員/問(wèn)題解決者跌宛,對(duì)bug/錯(cuò)誤更加好奇,而不是惱怒积仗!

事實(shí)上疆拘,當(dāng)你遭遇不幸時(shí),有三件事情可以嘗試:

  • 調(diào)試:逐步檢查你的解決方案寂曹,試圖找出哪里出錯(cuò)了哎迄。即調(diào)試程序。

(調(diào)試的藝術(shù)在于隆圆,找出你真正告訴你的程序去做了什么漱挚,而不是你以為你告訴它去做什么)

  • 重新評(píng)估: 后退一步,從另個(gè)一角度來(lái)看這個(gè)問(wèn)題匾灶,有什么可以抽象成更加一般的方法嗎棱烂?

(有時(shí)候,我們會(huì)對(duì)問(wèn)題的細(xì)節(jié)太過(guò)沉迷阶女,以至于忽略了再更一般的層面上解決問(wèn)題的一般原則<彰印)

經(jīng)典的例子,求一長(zhǎng)串連續(xù)整數(shù)的總和秃踩,1+2+3+4+...+ n 衬鱼, 利用一個(gè)簡(jiǎn)單的消元方法就可以很快的識(shí)別出這么一個(gè)公式:n(n+1)/2 ,從而避免了不得不做的加分。

(另一種重新評(píng)估的方式是重新開(kāi)始憔杨。刪除所有的內(nèi)容鸟赫,用全新的眼光重新開(kāi)始。你會(huì)驚訝到這是多么有效消别。)

  • 搜索/研究 :你沒(méi)看錯(cuò)抛蚤,就是使用Google,不管你有什么問(wèn)題寻狂,可能有人已經(jīng)解決了岁经。找到那個(gè)人/解決方案。事實(shí)上蛇券,即使你解決了問(wèn)題缀壤,也要這樣做!(你可以從別人的解決方案中學(xué)到很多)

(注意:不要尋找解決大問(wèn)題的方法纠亚。只尋找子問(wèn)題的解決方案塘慕,為什么呢? 因?yàn)槌悄闩Φ侔呐率且稽c(diǎn)點(diǎn))图呢,否則你什么都學(xué)不到,如果你什么都沒(méi)學(xué)到,那你就是在浪費(fèi)時(shí)間

5蛤织、實(shí)踐

不要期望僅僅一個(gè)星期就能變的很厲害拥娄,如果你想成為一個(gè)好的問(wèn)題的解決者,就應(yīng)該去解決很多問(wèn)題瞳筏!

練習(xí)、練習(xí)牡昆、練習(xí)姚炕!遲早你會(huì)認(rèn)識(shí)到這個(gè)問(wèn)題可以通過(guò)很輕松的方式來(lái)解決。

那么如何練習(xí)呢丢烘?其實(shí)也有很多選擇的柱宦!

比如:國(guó)家象棋游戲、數(shù)學(xué)問(wèn)題播瞳、數(shù)獨(dú)掸刊、視頻游戲、cryptokittiles ,bla bla bla .........

事實(shí)上赢乓,成功認(rèn)識(shí)的一個(gè)普遍模式是他們練習(xí)“圍觀解決問(wèn)題”的習(xí)慣忧侧。例如: 彼得.泰爾(Peter Thiel )下棋,埃隆.馬斯克 (Elon Musk) 玩電子游戲....

拜倫.里夫斯(Byron Beeves)說(shuō)牌芋,如果你想知道三到五年后商業(yè)領(lǐng)導(dǎo)力會(huì)是什么樣子蚓炬,那么久看看網(wǎng)絡(luò)游戲正在發(fā)生什么吧

快進(jìn)到今天。埃隆馬斯克躺屁、雷德.霍夫曼肯夏、馬克.扎克伯格和其他許多人都表示,游戲是他們稱建立公司的基石犀暑⊙被鳎——Mary Meeker (2017年互聯(lián)網(wǎng)趨勢(shì)報(bào)告)

這意味著你應(yīng)該只玩電子游戲? 也不全是耐亏。

但是這個(gè)到底跟電子游戲有什么關(guān)系呢徊都? 沒(méi)錯(cuò),就是問(wèn)題解決苹熏!

所以碟贾,你應(yīng)該做的是,找到一個(gè)練習(xí)的出口轨域,可以讓你解決很多小問(wèn)題的東西袱耽。(理想情況下,還是你喜歡的東西干发,那就更好了)

例如朱巨,我喜歡編程挑戰(zhàn),每天枉长,我都試圖解決至少一個(gè)挑戰(zhàn)(通常在Coderbyte)https://coderbyte.com/

正如我所說(shuō)冀续,所有的問(wèn)題都有相似的模式琼讽!

6、結(jié)論

現(xiàn)在洪唐,你知道“像程序員一樣思考” 是什么意思了钻蹬。

你也知道解決問(wèn)題是一種難以置信的元技能。

如果這還不夠凭需,你肯定也知道了如何練習(xí)解決問(wèn)題的技巧问欠。

你看,這是不是看起很酷粒蜈!

最后顺献,祝你遇到很多問(wèn)題哈哈。

你沒(méi)看錯(cuò)枯怖,至少現(xiàn)在你知道怎么解決了注整,同時(shí),你將了解到度硝,每一種解決方案都會(huì)使你得到改進(jìn)肿轨!

“Just when you think you’ve successfully navigated one obstacle, another emerges. But that’s what keeps life interesting.
就在你認(rèn)為已經(jīng)成功跨域了一個(gè)障礙時(shí)候,另一個(gè)障礙有出現(xiàn)了塘淑,但這正是讓生活變得有趣的地方萝招。

Life is a process of breaking through these impediments?—?a series of fortified lines that we must break through.
生活是一個(gè)突破這些障礙的過(guò)程——一系列我們必須突破的防線。

Each time, you’ll learn something.
每次存捺,你都會(huì)學(xué)會(huì)到一些東西槐沼。

Each time, you’ll develop strength, wisdom, and perspective.
每一次,你都將發(fā)展你的張力捌治、智慧岗钩、和洞察力

Each time, a little more of the competition falls away. Until all that is left is you: the best version of you.”?—?Ryan Holiday
每次,更多的競(jìng)爭(zhēng)就會(huì)消失肖油。直到你成為最好的自己兼吓。——瑞安.霍利迪(障礙就是路)

現(xiàn)在森枪,去解決一些問(wèn)題吧视搏!

哈哈,祝你好運(yùn)~~


翻譯原文:How to think like a programmer?—?lessons in problem solving

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末县袱,一起剝皮案震驚了整個(gè)濱河市浑娜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌式散,老刑警劉巖筋遭,帶你破解...
    沈念sama閱讀 221,406評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡漓滔,警方通過(guò)查閱死者的電腦和手機(jī)编饺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)响驴,“玉大人透且,你說(shuō)我怎么就攤上這事』砝穑” “怎么了石蔗?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,815評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)畅形。 經(jīng)常有香客問(wèn)我,道長(zhǎng)诉探,這世上最難降的妖魔是什么日熬? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,537評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮肾胯,結(jié)果婚禮上竖席,老公的妹妹穿的比我還像新娘。我一直安慰自己敬肚,他們只是感情好毕荐,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,536評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著艳馒,像睡著了一般憎亚。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上弄慰,一...
    開(kāi)封第一講書(shū)人閱讀 52,184評(píng)論 1 308
  • 那天第美,我揣著相機(jī)與錄音,去河邊找鬼陆爽。 笑死什往,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的慌闭。 我是一名探鬼主播别威,決...
    沈念sama閱讀 40,776評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼驴剔!你這毒婦竟也來(lái)了省古?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,668評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤仔拟,失蹤者是張志新(化名)和其女友劉穎衫樊,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,212評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡科侈,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,299評(píng)論 3 340
  • 正文 我和宋清朗相戀三年载佳,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片臀栈。...
    茶點(diǎn)故事閱讀 40,438評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蔫慧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出权薯,到底是詐尸還是另有隱情姑躲,我是刑警寧澤,帶...
    沈念sama閱讀 36,128評(píng)論 5 349
  • 正文 年R本政府宣布盟蚣,位于F島的核電站黍析,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏屎开。R本人自食惡果不足惜阐枣,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,807評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望奄抽。 院中可真熱鬧蔼两,春花似錦、人聲如沸逞度。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,279評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)档泽。三九已至俊戳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間馆匿,已是汗流浹背品抽。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,395評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留甜熔,地道東北人圆恤。 一個(gè)月前我還...
    沈念sama閱讀 48,827評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像腔稀,于是被迫代替她去往敵國(guó)和親盆昙。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,446評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 掙(二) 惠芳嬸嬸瞬間就有了一種被石化了的感覺(jué)——周身的寒毛林立焊虏,有嗖嗖的冷風(fēng)沿著毛孔瞬間漫過(guò)了全身淡喜。 可就是這樣...
    昭昭之輝閱讀 694評(píng)論 13 13
  • 安望著鏡子里終于長(zhǎng)到及肩的長(zhǎng)發(fā),卻怎么也笑不出來(lái)诵闭。好像生活中能讓人快樂(lè)的事情都是被動(dòng)制造的炼团。我們沒(méi)有心情去辨別一些...
    安妮啊_閱讀 334評(píng)論 1 1