我之前一直認爲,學習計算機,必需要懂算法,不只要懂算法,還應該要「精通」算法。css
在我大一的時候,曾看過李開復老師的一篇著名的文章——《算法爲魂》。這篇文章對我影響深遠,甚至說改變了個人人生選擇都不爲過。html
由於這篇文章,我開始有意識地去接觸算法,學習算法,打算法比賽,直到如今,還在關注最新的算法發展。算法
我作這些事情,真的並不徹底是功利的。數據庫
固然,這些對算法的學習過程,極大的爲我本身的簡歷貼了金,但更重要的是,我確實想搞明白,對於我所熱愛的信息技術,這個被稱爲「魂」的東西——算法,究竟是怎麼回事兒。編程
十多年過去了,直至今日,我依然堅信算法爲魂。windows
我常常說,計算機領域裏,處處都是算法。瀏覽器
算法的運用是如此常見,如此天然,如此平凡,乃至像空氣同樣,會被絕大多數人,甚至是計算機專業的人忽視。從咱們打開計算機(或者手機,平板電腦)開始,一系列算法就開始運轉起來。從操做系統的調度算法,幫助咱們順暢地使用操做系統;到網絡鏈接過程當中各類協議的運轉,幫助咱們暢遊信息世界;從咱們使用搜索引擎,一個簡單的關鍵字就能夠在毫秒級別的時間返回數以億計的信息,按照優先級排列展示到咱們眼前;到瀏覽器將枯燥的html, css和js文本轉換成直觀的網頁,供咱們輕鬆閱讀瀏覽;從看似平凡的文字處理工具幫助咱們排版,修訂;到圖像工具中各類神奇的濾鏡幫助咱們磨皮修片;從遊戲,影視做品中炫酷的特效;到最新的交互科技——不管是AR仍是VR,愈來愈廣泛的應用。微信
算法無處不在!網絡
可是,說實話,如今,個人這個「學習計算機,必需要懂算法」的觀點在逐漸轉變。這是由於,計算機的軟件行業也在漸漸走向成熟。軟件行業已經慢慢成熟到了:若是不會算法,也徹底能夠有所做爲的程度。數據結構
打一個可能不是那麼恰當的比方。在喬布斯的時代,若是搞計算機,那是必須會設計線路板,焊線路板的。由於在那時,芯片還不是標準化產品,你們拼的,就是誰的線路板設計的更好。但是如今,你們搞計算機,誰還用焊板子呢?
再隨便舉兩個例子,IBM你們應該都知道,曾經也是IT界舉足輕重的企業。他家的一個很重要的業務是技術諮詢。曾經,IBM的一大殺手鐗,居然就是二分查找法!是的,查找是信息世界中最重要的操做之一,這個世界上近乎有一半算法,都是在處理提升查找速度這件事兒。曾幾什麼時候,企業的信息查找速度不行了,來諮詢IBM,IBM就教他們使用二分查找法,賺得滿盆金鉢。
另一個例子就是數據庫。如今你們學習數據庫,都是直接學習SQL語言了,可能不多有同窗會去想,一條SQL語言在計算機內部究竟是怎樣執行的。要知道,曾幾什麼時候,數據庫可不是一個標準化產品。全部的企業作任何軟件系統,都要本身作一套數據庫!那麼本身作的數據庫,性能怎麼樣,就是核心競爭力之一!你家的系統只能處理萬級別的數據,我家的系統卻能處理千萬級別的數據,那我家的產品就領先整個市場。
其實,老牌的不少技術企業,都是靠這種「底層產品」起家的,好比Oracle的數據庫,微軟的windows(還有更早的MS-DOS);adobe的PS等一系列產品;蘋果的macOS,iOS;包括google的搜索引擎,等等等等。如今,咱們在大多數時候,更多的只是使用這些產品,但若是真要深刻下去,思考一下,怎麼作這些產品?你們將面對的,是一系列算法問題。
可是,怎麼作這些產品,確實已經漸漸不是技術世界的惟一出路了。業務場景變得愈來愈重要。這就是我說的,其實,在計算機的世界中,若是不會算法,也徹底能夠有所做爲。
作一個 PhotoShop,要學習不少算法,可是用 PhotoShop 作出一張優美的圖片,不須要接觸算法;製做一款遊戲引擎,要學習不少算法,可是用遊戲引擎打造一款成功的遊戲,不必定須要接觸算法;製做一個 iOS 系統,製做一個 XCode ,須要學習不少算法,可是用 XCode 製做一款優秀的 App ,不必定須要使用什麼算法;製做一個數據庫,或者一個框架,須要學習不少算法,可是使用這些框架和數據庫,打造一個網站,一個軟件,一個服務,不必定須要接觸不少算法。
或許這就是不少同窗以爲算法沒用的緣由。由於,大多數同窗所面臨的任務,不是作 PhotoShop,不是作遊戲引擎,不是作操做系統或者編譯軟件;不是作數據庫或者底層框架;而是應用他們打造具體的業務。算法已經被封裝起來了,不少時候,咱們不須要接觸算法的原理,就能很好的完成業務需求。
爲何不少同窗以爲算法沒有用?一個很「可能」的答案是:由於你所接觸的工做就是用不到算法。你所接觸的工做只須要合理的使用各類工具框架就夠了。我常常遇到同窗們這樣的疑問:我在具體工做中如何可以運用我所學習的這些算法知識?大機率的,答案是,可能不太能運用。
由於,若是你以爲本身的算法水平通常,可是在作當前的工做,並不以爲有問題,那麼就已經說明了,你如今的工做內容,並不須要太多的算法知識的運用。雖然在計算機的世界裏,算法無處不在,但這並不表明咱們必定要掌握他們。
這有點兒像數學。數學有沒有用?固然有用。人類文明發展至今,數學的發展有着舉足輕重的地位。可是咱們在生活中,卻愈來愈不容易感知到數學的重要意義了。
這種業務上的「分級」,實際上是一種很常見的現象。一個航空公司並不須要瞭解怎麼造飛機,那是飛機制造商的事情;開一個飯館也並必定是一個頂級廚師,怎麼作飯是廚子的事情;一個成功的遊戲設計師不必定了解遊戲引擎底層的諸多原理,那是遊戲引擎開發商的事情;一個頂級電競高手也毫不必定是一個遊戲設計師。
這就比如一個設計人員不須要理解photoshop背後諸多濾鏡所隱含的圖像學知識同樣,那些是adobe的開發人員須要關心的問題;一個賽車手也不須要學會製造一輛賽車。這樣的例子太多太多,怎麼舉都舉不完。
算法不是技術領域的惟一的核心競爭力,但不管是一我的,一個企業,仍是作一份事業,都須要有核心競爭力。什麼都沒有,確定是不行的。
因此,「沒有什麼」歷來不是問題。關鍵問題,歷來都是:「你有什麼」。
做爲一名編程學習者,若是你想更好的提高你的編程能力,好好學習C/C++編程知識以及數據結構,之後努力成爲高薪軟件開發工程師的話!
C語言C++編程學習交流圈子,QQ羣464501141【點擊進入】微信公衆號:C語言編程學習基地
分享(源碼、項目實戰視頻、項目筆記,基礎入門教程)
歡迎轉行和學習編程的夥伴,利用更多的資料學習成長比本身琢磨更快哦!
編程學習書籍:
編程學習視頻: