忘記算法和模型——首先學(xué)習(xí)如何解決問(wèn)題
我經(jīng)常從那些有幾年經(jīng)驗(yàn)的人那里得到這些信息編碼他們的經(jīng)驗(yàn),我說(shuō)這些不是為了抱怨。研究不同編程語(yǔ)言、框架和人工智能模型的優(yōu)缺點(diǎn),以此謀生。人們提出這樣的問(wèn)題讓我受益匪淺。
問(wèn)題很直觀。畢竟,每個(gè)人都希望用最好的工具工作,并盡可能快地建立他們的軟件技能。
當(dāng)你觀察到每一個(gè)開發(fā)者似乎使用了不同的技術(shù)堆棧,所以想知道哪一個(gè)是正確的是完全合理的。
問(wèn)題是,這完全取決于手頭的問(wèn)題。沒(méi)有技術(shù)本身是好的或壞的;這取決于你想解決什么類型的問(wèn)題。歸根結(jié)底,編程就是:通過(guò)使用計(jì)算機(jī)來(lái)解決問(wèn)題。
所以,對(duì)于那些想開始編程或者想提高軟件開發(fā)或數(shù)據(jù)科學(xué)技能的人來(lái)說(shuō),問(wèn)題不應(yīng)該是“我應(yīng)該用什么,問(wèn)題應(yīng)該是:“我怎樣才能更好地解決軟件問(wèn)題?"
如何解決問(wèn)題
完全公開,我的職業(yè)不是計(jì)算機(jī)科學(xué)家。我是一個(gè)粒子物理學(xué)家,碰巧使用編程和數(shù)據(jù)科學(xué)因?yàn)槲乙幚韥?lái)自粒子對(duì)撞機(jī)的海量數(shù)據(jù)。也就是說(shuō),物理學(xué)家和計(jì)算機(jī)科學(xué)家一樣受歡迎。這不是因?yàn)樗麄儗?duì)中微子或黑洞的了解;是因?yàn)樗麄兘鉀Q問(wèn)題的能力。
對(duì)于程序員和數(shù)據(jù)科學(xué)家來(lái)說(shuō),這意味著在開始編碼之前,要花時(shí)間理解問(wèn)題并找到高層次的解決方案。在一般的編碼面試中,候選人預(yù)計(jì)花在實(shí)際編寫代碼上的時(shí)間不到一半,其余時(shí)間用于理解問(wèn)題。
1.理解問(wèn)題
永遠(yuǎn)不要跳過(guò)這一步!
知道你是否理解一個(gè)問(wèn)題的關(guān)鍵是你是否能向不熟悉它的人解釋它。盡量用通俗易懂的英語(yǔ)或者母語(yǔ)寫下來(lái);畫一個(gè)小圖;或者告訴一個(gè)朋友。如果你的朋友不明白你在說(shuō)什么,你需要回到問(wèn)題陳述。
要問(wèn)的關(guān)鍵問(wèn)題是:
- 輸入是什么?期望的輸出是什么?例如,輸入可以是一組數(shù)據(jù),輸出可以是數(shù)據(jù)的線性回歸。
- 這個(gè)問(wèn)題背后的假設(shè)是什么?例如,您可能假設(shè)數(shù)據(jù)中(幾乎)沒(méi)有測(cè)量誤差。
- 是什么讓這個(gè)問(wèn)題變得復(fù)雜?例如,您擁有的數(shù)據(jù)可能不完整,或者數(shù)據(jù)集可能太小而無(wú)法得出明確的結(jié)論。
2.分解問(wèn)題
每個(gè)大問(wèn)題都由許多小問(wèn)題組成。鑒于我們之前的線性回歸示例,您可能需要考慮以下子問(wèn)題:
- 清理數(shù)據(jù)
- 找出數(shù)據(jù)中哪些變量對(duì)回歸有意義,哪些變量可以安全地忽略
- 尋找合適的工具來(lái)進(jìn)行回歸(這就是關(guān)于編程語(yǔ)言和框架的老問(wèn)題發(fā)揮作用的地方)
- 評(píng)估您的結(jié)果并檢查錯(cuò)誤
把問(wèn)題分解有助于你為工作制定一個(gè)合適的計(jì)劃。
這也更有激勵(lì)性,因?yàn)槟銜?huì)在前進(jìn)的道路上實(shí)現(xiàn)小而重要的里程碑。這比坐在堆積如山的工作面前感覺(jué)自己沒(méi)有前進(jìn)要令人滿意得多。
3.從一個(gè)例子開始
魔鬼總是在細(xì)節(jié)中。
不要從整個(gè)項(xiàng)目開始,取其中的一小部分。試試你的計(jì)劃是否可行,或者你是否因?yàn)椴豢深A(yù)見(jiàn)的困難而不得不修改它。
這有助于你理解困難的部分。許多問(wèn)題聽(tīng)起來(lái)很簡(jiǎn)單,但是當(dāng)你開始構(gòu)建它們時(shí),就會(huì)遇到一個(gè)接一個(gè)的障礙。
在我們的例子中,我們可以先對(duì)幾個(gè)變量進(jìn)行線性回歸,而不是使用所有相關(guān)變量。這不會(huì)給你任何項(xiàng)目完成的分?jǐn)?shù);然而,當(dāng)您仍在處理少量數(shù)據(jù)時(shí),發(fā)現(xiàn)腳本中的錯(cuò)誤可以挽救生命。
當(dāng)你把所有的數(shù)據(jù)都扔在機(jī)器上,運(yùn)行幾個(gè)小時(shí),然后回來(lái)意識(shí)到腳本中途掛起,你會(huì)非常沮喪。
相信我,這種事經(jīng)常發(fā)生!
首先運(yùn)行小測(cè)試,并確保您的解決方案如您所設(shè)想的那樣工作。
4.執(zhí)行
這是肉多的部分?,F(xiàn)在,您可以為您的大問(wèn)題構(gòu)建解決方案了。
把你所有的數(shù)據(jù)都扔給代碼。運(yùn)行一個(gè)奇特的模型。想做什么就做什么。
完成前面的三個(gè)步驟后,這應(yīng)該會(huì)非常順利!
如果有錯(cuò)誤,您可能需要返回到步驟1-3,看看您是否已經(jīng)理解了所有內(nèi)容,并且沒(méi)有忽略任何錯(cuò)誤。
5.顯示
僅僅因?yàn)槟阏业搅艘粋€(gè)解決方案,并不意味著你找到了最好的解決方案。不要跑掉,收工;思考如何優(yōu)化您的解決方案,以及如何以不同的方式實(shí)現(xiàn)它。
你可能想和你的同事交流,問(wèn)他們?nèi)绾谓鉀Q這個(gè)問(wèn)題。他們的方法和你的不同嗎?
您還可以嘗試確定解決方案中最大的瓶頸,即執(zhí)行時(shí)花費(fèi)最多時(shí)間和資源的部分。你如何改進(jìn)它們?
最后,思考您的解決方案在未來(lái)可能會(huì)如何發(fā)展。新的軟件框架或人工智能的使用會(huì)讓你的解決方案更好嗎?你的解決方案如何有助于解決其他更復(fù)雜的問(wèn)題?
吹牛
包括我自己在內(nèi)的人們,傾向于沉迷于不同的編程語(yǔ)言和最新的框架,這些語(yǔ)言和框架可能會(huì)使所有事情的效率提高1000倍。
值得提醒自己的是,這還不到成為一名優(yōu)秀程序員所需的一半。另一半是解決問(wèn)題。
你不會(huì)在一夜之間獲得解決問(wèn)題的技能。
但是如果你運(yùn)用這些步驟,問(wèn)正確的問(wèn)題,并且經(jīng)常這樣做,你就走在了讓你的職業(yè)生涯從優(yōu)秀走向卓越的正確道路上。
- 上一篇
如何使用人工智能來(lái)改善工作招聘場(chǎng)景
招聘面臨著巨大的轉(zhuǎn)變,從在報(bào)紙或布告欄上張貼的求職公告板轉(zhuǎn)變?yōu)槿斯ぶ悄?,以促進(jìn)在線找工作的過(guò)程。大多數(shù)公司現(xiàn)在使用人工智能和機(jī)器學(xué)習(xí)來(lái)激活在線招聘流程。如上所述,大多
- 下一篇
回望2020年:人工智能從流行詞匯轉(zhuǎn)變?yōu)橹匾ぞ?/h2>
人工智能(AI)不僅僅是一個(gè)流行詞。人工智能正日益成為我們?nèi)粘I畹囊徊糠郑彩俏锢戆踩袠I(yè)的一個(gè)重要工具。2020年,人工智能受到了前所未有的關(guān)注,并擴(kuò)大了它為物理安全系統(tǒng)貢獻(xiàn)價(jià)值的方式。