天天看點

看算法導論有感(1)——談談算法的五性對使用者體驗的影響

做程式的人,都知道了算法的5性——可行性,健壯性,有窮性,高效性,可讀性。

這15個字誰都會說了,但是,你是否真正的思考過這個對當今程式界最最重要的使用者體驗的思考。

過去,我也沒多做思考,但是,看了mit的算法導論公開課,我卻是覺得一個好的算法, 确實嚴格遵從算法算法五性。

①可行性——算法原則上能夠精确地運作,而且人們用筆和紙做有限次運算後即可完成。算法肯定要可行的,不可行的話,是一坨shit,一般可行性是與硬體息息相關。比如,10年前,你要先像現在的搜尋引擎一樣能夠做視搜尋,做各種各樣的算法搜尋。那時候,不是算法可行的,而是硬體而達不到要求。再比如所說,我們經常寫出許多算法都是就會出現這個問題——資料溢出的問題。這也是一般硬體的問題,如果計算機是位數足夠的大,程式一般不會出現這樣的問題。 那你寫一個連可行性都不可行的算法的話,那這樣就無使用者體驗而言了。

②健壯性——就是算法要有足夠健壯的,這個性質與一個安全性息息相關了。一個好的程式的好的健壯性,就是你的程式怎麼搞就搞不死了。這難道不是與程式的安全的骨肉相随嗎?尤其,到了21世紀以後,一個個程式安全尤其重要了。我們看以下案例。(1)2011年,花旗銀行披露其北美地區銀行網站在5月初受到黑客惡意攻擊,21萬北美地區銀行卡使用者的姓名、賬戶、電子郵箱等資訊可能被洩露。(2)2003年的疾風病毒,2005年的qq尾巴病毒,2007年的熊貓燒香病毒。近這些年,病毒的肆掠。 (3)在公司中,上班打卡一般難不倒我們這些程式員們,主要,我們可以進資料庫中篡改我們的上班時間。這些活生生血粼粼的例子,就是因為算法的健壯性做的很不好了。如果,你的健壯性足夠強,那真的不會出現這樣的事情了。 至于碰到健壯性不夠的程式的話,你會不會敢用一個連安全性都不能保證的,你敢使用嗎?一個全部使電腦病毒的作業系統,你願意使用嗎?這樣也能夠看到健壯性與使用者體驗息息相關。

③有窮性——有窮性(有限性)。任何一種提出的解題方法都是在有限的操作步驟内可以完成的,“哪怕是失敗的解題方法。”我們這些初學者寫算法與有窮性最背道而馳——就是死循環。死循環存在的意義就是讓程式永不停息的計算,然而有得不到我們最終所要的結果。這真是“瞎子點燈白費蠟”。如果一個程式是無窮的,使用者隻有沒辦法的白等,最終也隻有幹瞪眼。這樣就會把使用者逼瘋,這樣的程式絕對沒有回頭客。

④高效性——就是程式運算足夠的快了,這與硬體,軟體都有蠻密切的關系。與硬體的關系,我們就沒有必要再說了,但是,與算法的關系。有必要說一說,同樣問題,不同的算法當然實作的效率大相徑庭了。比如說,我當年做實習生的時候,完成一個幾千萬人都是登入的問題時候,效率極其地下了。但是我們的老大(技術總監)——使用了一種常用資料結構連結清單,将其連起來,比較其中的位數大小的方法,這樣,程式就如飛一般的感覺,非常的穩定。即使一個簡單的排序,有的人可以做出時間的複雜度是o(n㏒n),有的隻人能做出時間複雜度是o(n2),小資料沒有多少差别,但是面對海量資料的時候,卻又天壤之别。一個高效程式與一個低效程式,使用者體驗不用自明吧。

⑤可讀性——就是源代碼可讀,意思明了,朗朗上口。這主要是針對于我們這些苦逼的開發人員而言了。做了軟體的人都應該明白軟體開發的人員都應該明白軟體的主旋律就是——變。客戶需求,就如小孩子臉說變就變。而軟體的更新不斷進行,這一定要在原先的源代碼上的基礎上不斷的進行了。但是,你要知道,一個好的算法,必要有一個好的可讀性,這樣才能不斷而且快速滿足客戶的需求,不斷而快速的更新。可讀性對一個好的使用者體驗也必不可少。否則,算法猶如天書,這樣會嚴重影響開發效率,這樣的程式鬼才要。

總之,良好使用者體驗的算法——必須有一個十足的可行性,足夠的健壯性,并且是有窮的,性能其高的,并且對開發人員意思明了。

繼續閱讀