感謝圖靈社區(qū)的電子書閱讀獎(jiǎng)勵(lì)計(jì)劃。
算法在日常開發(fā)中有什么用,這或許是許多非專科出身的程序員會(huì)遇到的疑問。
這也和算法如何學(xué)習(xí)有關(guān)系吧,感覺上就非常難學(xué),給的例子又是非常理想化或者平常工作中遇不到的情況,自然而然就沒有了學(xué)習(xí)的東西。
如果平常的工作比較偏「業(yè)務(wù)」,簡(jiǎn)單說就是 API Caller,調(diào)用一個(gè) API,然后使用 React 將數(shù)據(jù)渲染到頁(yè)面上,處理下點(diǎn)擊按鈕,發(fā)下一個(gè)請(qǐng)求。
如果是這種工作,可以說絕大部分情況下對(duì)算法的精通并不能幫助你加快開發(fā)效率,也不能增加項(xiàng)目的可維護(hù)性。
當(dāng)然也會(huì)遇到「感覺需要算法」的情況,比如后端返回的數(shù)據(jù)結(jié)構(gòu)是一棵樹,需要對(duì)這個(gè)數(shù)據(jù)進(jìn)行處理,或者是過濾或者是合并,感覺上是算法了。當(dāng)然這實(shí)際也是,大部分情況下我們會(huì)認(rèn)為算法就是用來(lái)處理數(shù)據(jù)的,無(wú)論什么類型的算法教程,都是對(duì)數(shù)據(jù)的處理。
但是,如果個(gè)人工作偏業(yè)務(wù),將更多時(shí)間花在代碼上會(huì)更好,無(wú)論是如何寫出更好更易懂的代碼,還是在業(yè)務(wù)的層面對(duì)代碼進(jìn)行組織,都是比算法要更值得花時(shí)間,或者說投入產(chǎn)出比更大。
算法很少用到,可代碼卻一直要寫,在哪方面花時(shí)間更值得非常明顯了。
所以算法不用學(xué)習(xí)了嗎?大部分情況是的,但仍需要「了解」算法,這可以幫助你判斷遇到的問題是否是算法問題。
為什么會(huì)有算法?
這個(gè)答案其實(shí)很簡(jiǎn)單,因?yàn)橐鉀Q問題,并且是「更好地」解決問題。
假設(shè)你現(xiàn)在在書桌前,想要去客廳倒杯水,順便到衛(wèi)生間洗手,最后再?gòu)目蛷d拿點(diǎn)零食。你肯定不會(huì)先去倒水,回到書桌前,然后再去洗手,又回到書桌前,然后又去到客廳拿零食,你肯定會(huì)先洗手,然后倒水 and 拿零食,當(dāng)然反過來(lái)也可以。
總之就是你不會(huì)像開始描述的那樣做。
常用的對(duì)象也是算法?
作為一個(gè)前端,對(duì)象是非常非常頻繁使用的一種數(shù)據(jù)結(jié)構(gòu),我們會(huì)用來(lái)保存數(shù)據(jù),用來(lái)作為緩存,用來(lái)表示「對(duì)象」。頻繁到我們不會(huì)去考慮對(duì)象是怎么工作的,這對(duì)我們來(lái)說已經(jīng)是如同呼吸般的日常。
那么問題來(lái)了,對(duì)象是如何實(shí)現(xiàn)的呢?為什么給出key總是能返回相同的value呢?
有用的算法
本書最后給出了一些「常用」算法,很容易發(fā)現(xiàn)這些絕大部分都是「后端」會(huì)常遇到的問題,作為一個(gè)前端,只是處理數(shù)據(jù)渲染或者交換的話,真的很難有感同身受。