算法還重要嗎?

算法還重要嗎?html

我爲何要問這個問題呢?其實這最近一週時間都在看算法在數據挖掘和存儲處理性能上運用. 固然這也引發我我的的一些對算法的思考.正好昨天晚上看到張洋同窗算法雜貨鋪——分類算法之貝葉斯網絡(Bayesian networks)一篇文章.更是激發我要去寫這篇文章,躺在牀上一直在想這個問題怎麼能清楚的說出來. 也許你看到這個標題 你也工做了幾年 回過頭在來看這個問題 也許一時間會感到疑惑. 算法還重要嗎? java

咱們先不要給算法是否還重要就輕易下了一個結論. 到這我也先不着急給算法下定義作解釋. 咱們如今先來看看一種現象:  哪一種語言是開發者們能夠高高興興的用來編程的?近日,一位美國的開發者經過Twitter對開發者們進行了一項調查 :你是否喜好XX語言 調查結果分析圖:程序員

基本上每月都會有一些相關對語言使用程度作了一個排名. 你們業見怪不怪了. 編程語言又能體現出算法相關價值,也許你會好幾種語言, 但隨着工做時間增長和對技術深刻研究你會發現:  不是具體的技術而是算法這些基本的東西成爲了技術深刻的軟肋, 特別是在緊要關口 這個軟肋每每就會更疼. 算法

起碼我認爲本身目前工做創造性東西比之前少了不少.  不少算法已經被包裝到了語言和工具中, 做爲一個開發者也就不想之前那樣費力去學習. 而每每有些算法只適用於本語言或工具並且只能解決某些問題,移植到別的狀況下則沒法使用, 這也是我在開始學習Ruby後才感到算法適用範圍有所不一樣. 最爲彆扭的是你發現之前在用Asp.NET和Visua4l Studio開發工具中對於有些問題已經界定好思路. 人都是懶惰 既然有現成的東西不用 爲什麼要費力去創新.  這也就致使長期適用單一編程開發者視野上狹隘.  開發者很難有屬於本身的思惟方式. 這就是爲何有些人說本身作到必定程度後成了熟練「代碼工人」也不難解釋. 起碼這個問題讓我感到很悲哀.數據庫

Ruby之父松本行弘[日本同行]就曾表示,注重的是算法而不是工具, 若是沒有本身的思惟方式和編程邏輯,很容易對某種具體的技術或者工具產生依賴性, 而這些編程工具和技術每每是國外開發. 假設有一天咱們沒有這些現成的工具 和技術  咱們該怎麼辦? 豈不是成了一貧如洗了嗎?可是若是有了穩固的算法思惟 編程世界裏東西都不可怕.編程

算法是一種本質的迴歸.服務器

今天出了JAVA 明天出了一個C#. 後天還不知道要出了一個什麼 XXX¥¥語言和新技術. 因而乎你也成了那趕潮大軍中一員 一路疲憊被人牽着鼻子走,  到頭來你發現越深刻步伐走得越慢. 越是吃力.每每技術瞭解得越多、作得東西越深,這樣的體會越明顯, 借用一位網友的話說就是"內功」不到位. C# java Ruby 只是兩個你用來練習武功的招式, 「內功」則是這些花哨武功招式後本質, 招式能夠不少種  若是沒有 」內功」 招式變換再多也只是表面文章 罷了. 註定你是成不了一個名副其實的」武林高手」網絡

看完了這個現象後 在回頭來講算法定義. 算法(Algorithm)說白了就是是解決問題的步驟.能夠把算法定義成解決一個分類問題的任意一種特殊的方法.  數據結構

編程世界中 算法+數據結構=程序.dom

而數據結構每每是封裝在不一樣編程語言中. 求解一個給定的可計算或可解的問題,不一樣的人能夠編寫出不一樣的程序,來解決同一個問題,這裏存在兩個問題:一是與計算方法密切相關的算法問題;二是程序設計的技術問題。算法和程序之間存在密切的關係的. 

算法還重要嗎? 我爲何要加一個「還」來形容這個問題.  上週在網上論壇有一個網友曾說過」如今數據存儲技術和計算機運算速度已是很快了 這也是未來一個趨勢 算法還重要?」這忽然引發我對算法重要性的興趣,固然我也默默問本身這個問題.

其實也許咱們忽略一個問題. 從去年到今年就拿咱們行業裏一個很是小地方來看看目前咱們要面對問題: 就說說Twitter從2008年開始到如今每個月要處理髮送數據信息量 統計圖:

美國調研公司Royal Pingdom最新統計報告代表,目前Twitter的每個月平均信息發送量正以超過10億的速度快速增加.

天那小小的一個社交SNS社交站點從2008到如今短短兩年時間 數據量增加基本是以數量級的方式來增長.這只是目前行業一個小角落. 可想而知將來信息量更會以爆炸方式增加. 而要解決這些問題咱們不只不須要好的設備. 好的技術 更 須要不少卓越的算法來解決這些問題.

說了這麼多 下面說一個簡單例子.例如在ArcGis地裏空間信息系統中 經常會處理一個關於到導航的小問題. 問題很簡單:   你想從地圖的任意的A點城市 到達任意的B點城市 列出最快的達到路線 並計算最省錢的行進方式:

系統設計中: 若是一會兒把全國全部上億條道路信息依次進行逐條比對在進行計算. 反映時間太長. 若是給多個用戶 服務器的壓力就太大了 基本立馬崩潰掉.若是咱們須要設計一個算法:

首先從全國道路信息數據庫中 調出 從任意A點到任意B點所要經歷省市的道路信息數據.  這就剔除一大部分沒用數據信息. 縮小了咱們數據檢索的範圍.

這樣的話仍是不行. 訪問壓力依然存在. 這時咱們能夠把數據按照省市進行分區.處理.  用戶輸入數據後從任意的A點到任意的B點首先確認 是否A點到B點是否在同一個區 若是同一個區 直接在數據庫中這個區域內調取數據進行計算. 至於距離最近路線算法中圖論中有很好解釋 .

這時問題又來: 西北和沿海地區發展速度不一. 道路信息數據沿海城市偏大 用戶量偏多 出行需求量高. 西北地區道路偏少  人口稀缺 遠距離出行量少等特色 再次優化算法。

對核心沿海需求量居多城市和省份 區域數據再次進行分區處理. 最頂層的是省份 下級市區 再到縣級.
方便用戶點對點精確搜索和距離計算. 若是底層訪問量較小 相似樹形結構 向上能夠延展放大搜索範圍.

上面大概知足基本需求. 若是用戶提出不一樣交通方式 乘車/飛行/水路 並且道路也分爲高速 國道 省道. 航線非爲國際和區域航線. 這樣的話咱們計算距離的算法就須要更加細化了. 從上面實例能夠看到用戶需求老是不斷變化的. 一個好的算法是解決複雜問題核心關鍵. 可見算法在未來解決數據處理依然是不可替代的.

有人又會問.爲何我平常工做中不多用到算法?

不少人疑惑個人平常編程中不多用到算法. 我我的認爲,好的算法是每一個程序都應該盡力去實現的, 也許一個程序百分之90以上被項目UI和實現業務邏輯給佔據了. 可是老是有那麼一部分決定你的產品核心競爭力.

爲何你沒有用到算法?

人們之因此說算法很重要,是由於任何的程序,任何的軟件,都是由不少的算法和數據結構組成的。從這點上說算法確實很重要,可是這不意味着算法對於每一個軟件設計人員的實際工做都是很重要的。其實,軟件行業是能夠分爲算法密集型典型的好比一個搜索引擎 Cache底層,/三維場景中實時渲染算法.例如Google。天天Google的網站要處理十億個以上的搜索,GMail要儲存幾千萬用戶的2G郵箱, Google Earth要讓數十萬用戶同時在整個地球上遨遊,並將合適的圖片通過互聯網提交給每一個用戶。若是沒有好的算法,這些應用都沒法成爲現實

業務邏輯密集型,典型的好比一個CRM/ERP業務系統 項目中咱們把更多的時間放到業務邏輯的實現和UI層數據呈現上 至於算法使用只有在性能受到限制或是出現性能訪問瓶頸時加以算法優化。 這一般的狀況,而對於基於運用實際問題 每每面臨問題較多  使用算法地方也就相對偏多.

使用體驗密集型,典型的好比娛樂行業Silverlight站點 注重的使用用戶體驗上快捷。因此並非每一個軟件開發者都要求有很好的算法功底。關鍵是看遇到問題解決問題的能力,算法在必定程度積累思惟模式上經驗.。這也是不少程序員說本身到了 30歲 在技術上創新陷入瓶頸.

每一個項目特色和需求特殊也致使算法運用場景上不一樣. 有人說過算法重要,但不是最重要 這句話在某些特定運用場合時能夠講得通的 得靈活使用  

最後至於這個問題 算法還重要嗎?不管IT行業內多麼朝夕莫測、新技術 新語言層出不窮,計算機和軟件發展背後的根基卻巋然屹立、經年不變,算法即是基礎之一. 而對於那些已經歷經技術變幻開發者而言算法同是也是一種本質的迴歸.

相關文章
相關標籤/搜索