計(jì)算機(jī)專業(yè)丨大學(xué)生們的疑問:學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法有什么用?
我以前一直認(rèn)為,學(xué)習(xí)計(jì)算機(jī),必須要懂算法,不僅要懂算法,還應(yīng)該要“精通”算法。
在我大一的時(shí)候,曾看過李開復(fù)老師的一篇著名的文章——《算法為魂》。這篇文章對我影響深遠(yuǎn),甚至說改變了我的人生選擇都不為過。

因?yàn)檫@篇文章,我開始有意識地去接觸算法,學(xué)習(xí)算法,打算法比賽,直到現(xiàn)在,還在關(guān)注最新的算法發(fā)展。
我做這些事情,真的并不完全是功利的。
當(dāng)然,這些對算法的學(xué)習(xí)過程,極大的為我自己的簡歷貼了金,但更重要的是,我確實(shí)想搞明白,對于我所熱愛的信息技術(shù),這個(gè)被稱為“魂”的東西——算法,到底是怎么回事兒。
十多年過去了,直至今日,我依然堅(jiān)信算法為魂。

我經(jīng)常說,計(jì)算機(jī)領(lǐng)域里,到處都是算法。
算法的運(yùn)用是如此常見,如此自然,如此平凡,乃至像空氣一樣,會被絕大多數(shù)人,甚至是計(jì)算機(jī)專業(yè)的人忽視。從我們打開計(jì)算機(jī)(或者手機(jī),平板電腦)開始,一系列算法就開始運(yùn)轉(zhuǎn)起來。從操作系統(tǒng)的調(diào)度算法,幫助我們順暢地使用操作系統(tǒng);到網(wǎng)絡(luò)連接過程中各種協(xié)議的運(yùn)轉(zhuǎn),幫助我們暢游信息世界;從我們使用搜索引擎,一個(gè)簡單的關(guān)鍵字就可以在毫秒級別的時(shí)間返回?cái)?shù)以億計(jì)的信息,按照優(yōu)先級排列展現(xiàn)到我們眼前;到瀏覽器將枯燥的html, css和js文本轉(zhuǎn)換成直觀的網(wǎng)頁,供我們輕松閱讀瀏覽;從看似平凡的文字處理工具幫助我們排版,修訂;到圖像工具中各種神奇的濾鏡幫助我們磨皮修片;從游戲,影視作品中炫酷的特效;到最新的交互科技——無論是AR還是VR,越來越普遍的應(yīng)用。
算法無處不在!

但是,說實(shí)話,現(xiàn)在,我的這個(gè)“學(xué)習(xí)計(jì)算機(jī),必須要懂算法”的觀點(diǎn)在逐漸轉(zhuǎn)變。這是因?yàn)?,?jì)算機(jī)的軟件行業(yè)也在漸漸走向成熟。軟件行業(yè)已經(jīng)慢慢成熟到了:如果不會算法,也完全可以有所作為的程度。
打一個(gè)可能不是那么恰當(dāng)?shù)谋确健T趩滩妓沟臅r(shí)代,如果搞計(jì)算機(jī),那是必須會設(shè)計(jì)線路板,焊線路板的。因?yàn)樵谀菚r(shí),芯片還不是標(biāo)準(zhǔn)化產(chǎn)品,大家拼的,就是誰的線路板設(shè)計(jì)的更好。可是現(xiàn)在,大家搞計(jì)算機(jī),誰還用焊板子呢?
再隨便舉兩個(gè)例子,IBM大家應(yīng)該都知道,曾經(jīng)也是IT界舉足輕重的企業(yè)。他家的一個(gè)很重要的業(yè)務(wù)是技術(shù)咨詢。曾經(jīng),IBM的一大殺手锏,竟然就是二分查找法!是的,查找是信息世界中最重要的操作之一,這個(gè)世界上近乎有一半算法,都是在處理提高查找速度這件事兒。曾幾何時(shí),企業(yè)的信息查找速度不行了,來咨詢IBM,IBM就教他們使用二分查找法,賺得滿盆金缽。
另外一個(gè)例子就是數(shù)據(jù)庫?,F(xiàn)在大家學(xué)習(xí)數(shù)據(jù)庫,都是直接學(xué)習(xí)SQL語言了,可能很少有同學(xué)會去想,一條SQL語言在計(jì)算機(jī)內(nèi)部到底是怎樣執(zhí)行的。要知道,曾幾何時(shí),數(shù)據(jù)庫可不是一個(gè)標(biāo)準(zhǔn)化產(chǎn)品。所有的企業(yè)做任何軟件系統(tǒng),都要自己做一套數(shù)據(jù)庫!那么自己做的數(shù)據(jù)庫,性能怎么樣,就是核心競爭力之一!你家的系統(tǒng)只能處理萬級別的數(shù)據(jù),我家的系統(tǒng)卻能處理千萬級別的數(shù)據(jù),那我家的產(chǎn)品就領(lǐng)先整個(gè)市場。
其實(shí),老牌的很多技術(shù)企業(yè),都是靠這種“底層產(chǎn)品”起家的,比如Oracle的數(shù)據(jù)庫,微軟的windows(還有更早的MS-DOS);adobe的PS等一系列產(chǎn)品;蘋果的macOS,iOS;包括google的搜索引擎,等等等等?,F(xiàn)在,我們在大多數(shù)時(shí)候,更多的只是使用這些產(chǎn)品,但如果真要深入下去,思考一下,怎么做這些產(chǎn)品?大家將面對的,是一系列算法問題。

但是,怎么做這些產(chǎn)品,確實(shí)已經(jīng)漸漸不是技術(shù)世界的唯一出路了。業(yè)務(wù)場景變得越來越重要。這就是我說的,其實(shí),在計(jì)算機(jī)的世界中,如果不會算法,也完全可以有所作為。
做一個(gè) PhotoShop,要學(xué)習(xí)很多算法,但是用 PhotoShop 做出一張優(yōu)美的圖片,不需要接觸算法;制作一款游戲引擎,要學(xué)習(xí)很多算法,但是用游戲引擎打造一款成功的游戲,不一定需要接觸算法;制作一個(gè) iOS 系統(tǒng),制作一個(gè) XCode ,需要學(xué)習(xí)很多算法,但是用 XCode 制作一款優(yōu)秀的 App ,不一定需要使用什么算法;制作一個(gè)數(shù)據(jù)庫,或者一個(gè)框架,需要學(xué)習(xí)很多算法,但是使用這些框架和數(shù)據(jù)庫,打造一個(gè)網(wǎng)站,一個(gè)軟件,一個(gè)服務(wù),不一定需要接觸很多算法。
或許這就是很多同學(xué)覺得算法沒用的原因。因?yàn)?,大多?shù)同學(xué)所面臨的任務(wù),不是做 PhotoShop,不是做游戲引擎,不是做操作系統(tǒng)或者編譯軟件;不是做數(shù)據(jù)庫或者底層框架;而是應(yīng)用他們打造具體的業(yè)務(wù)。算法已經(jīng)被封裝起來了,很多時(shí)候,我們不需要接觸算法的原理,就能很好的完成業(yè)務(wù)需求。

為什么很多同學(xué)覺得算法沒有用?一個(gè)很“可能”的答案是:因?yàn)槟闼佑|的工作就是用不到算法。你所接觸的工作只需要合理的使用各種工具框架就夠了。我經(jīng)常遇到同學(xué)們這樣的疑問:我在具體工作中如何能夠運(yùn)用我所學(xué)習(xí)的這些算法知識?大概率的,答案是,可能不太能運(yùn)用。
因?yàn)?,如果你覺得自己的算法水平一般,但是在做當(dāng)前的工作,并不覺得有問題,那么就已經(jīng)說明了,你現(xiàn)在的工作內(nèi)容,并不需要太多的算法知識的運(yùn)用。雖然在計(jì)算機(jī)的世界里,算法無處不在,但這并不代表我們一定要掌握他們。
這有點(diǎn)兒像數(shù)學(xué)。數(shù)學(xué)有沒有用?當(dāng)然有用。人類文明發(fā)展至今,數(shù)學(xué)的發(fā)展有著舉足輕重的地位。但是我們在生活中,卻越來越不容易感知到數(shù)學(xué)的重要意義了。
這種業(yè)務(wù)上的“分級”,其實(shí)是一種很常見的現(xiàn)象。一個(gè)航空公司并不需要了解怎么造飛機(jī),那是飛機(jī)制造商的事情;開一個(gè)飯館也并一定是一個(gè)頂級廚師,怎么做飯是廚子的事情;一個(gè)成功的游戲設(shè)計(jì)師不一定了解游戲引擎底層的諸多原理,那是游戲引擎開發(fā)商的事情;一個(gè)頂級電競高手也絕不一定是一個(gè)游戲設(shè)計(jì)師。

這就好比一個(gè)設(shè)計(jì)人員不需要理解photoshop背后諸多濾鏡所隱含的圖像學(xué)知識一樣,那些是adobe的開發(fā)人員需要關(guān)心的問題;一個(gè)賽車手也不需要學(xué)會制造一輛賽車。這樣的例子太多太多,怎么舉都舉不完。
算法不是技術(shù)領(lǐng)域的唯一的核心競爭力,但無論是一個(gè)人,一個(gè)企業(yè),還是做一份事業(yè),都需要有核心競爭力。什么都沒有,肯定是不行的。
所以,“沒有什么”從來不是問題。關(guān)鍵問題,從來都是:“你有什么”。
作為一名編程學(xué)習(xí)者,如果你想更好的提升你的編程能力,好好學(xué)習(xí)C/C++編程知識以及數(shù)據(jù)結(jié)構(gòu),以后努力成為高薪軟件開發(fā)工程師的話!

UP在主頁上傳了一些學(xué)習(xí)C/C++編程的視頻教程,有興趣或者正在學(xué)習(xí)的小伙伴一定要去看一看哦!會對你有幫助的~
分享(源碼、項(xiàng)目實(shí)戰(zhàn)視頻、項(xiàng)目筆記,基礎(chǔ)入門教程)
歡迎轉(zhuǎn)行和學(xué)習(xí)編程的伙伴,利用更多的資料學(xué)習(xí)成長比自己琢磨更快哦!
編程學(xué)習(xí)書籍:

編程學(xué)習(xí)視頻:
