誰說界面開發不需要算法?
什么是算法?簡單來說,解決一個問題的步驟,就是算法。
***次接觸算法
大學的時候剛開始學C語言,每學一個知識點都會把后面的習題給做了,習題中有些會包含排序,其實那時候還不知道這叫算法,直到后來讀了《數據結構與算法》這本書以后,才知道那叫算法
其實那時候并不知道這些算法有什么用,只知道學編程需要掌握它,包括《數據結構與算法》這本書,也是舍友推薦我讀的,因為我本身并非軟件專業,也就半路出家自學編程。既然什么都不懂,那就先按部就班學習。
除了排序以外,還學習了隊列,堆棧,二叉樹等概念,平時除了做做習題,基本沒有用得到的地方。
***次面試
果然像舍友說的,面試免不了會考你算法,就算你進去以后用不到,你也得掌握,不然連通過的機會都沒有。還好大學時做過一些算法題,面試官問的那些冒泡排序,二分法查找之類的算法,都能答得上。
對那時候的我來說,算法就是一些理論知識,看上去沒什么用,就為了找份工作。
參加工作以后
工作以后,用得最多的算法就是排序,查找,隊列控制這些,其他的完全無用武之地,那時候覺得,自己做的是客戶端,本身業務上就不需要什么算法,大部分的工作都是跟界面和交互打交道,再加上自己覺得算法過于枯燥,也就沒有繼續學下去了。久而久之,除了幾個常用的算法,其他的連概念都快忘了。
對算法態度的變化
一次偶然的機會,需要做一些日歷相關的功能,那時候需要解決陰陽歷轉換,以及二十四節氣相關的計算。以前壓根就沒學過這些東西,不知道要怎么做,情急之下在網上找了一些現成的代碼來用。之后發現問題很多,例如有些日期的轉換出錯了。這時候才下決心要學習陰陽歷以及二十四節氣的計算原理,然后從才能解決這些問題。
這個過程中,先是感嘆自然規律的奇妙,閏月,時辰,干支等等都是從數理演變過來的。然后感嘆古人的強大,能把傳統歷法研究得那么精深。研究的過程充滿了樂趣,***把問題解決了,還能帶來滿足感和成就感,原來研究算法也是件有趣的事情。
界面開發中也有算法
有些人覺得做客戶端開發沒什么算法可言,拿到數據以后就把界面搭起來,然后就完了,做界面能有什么難度?我自己也最初這么認為,但后來發現其實界面開發也有講究的地方,也有需要用到算法的地方。
以前玩魔獸爭霸時覺得很神奇,為什么他們走路會自動避開障礙,要怎么做才能實現?然后自己就琢磨著做一個自動尋路的demo。那時候還不知道什么叫A尋路,上網查資料后,才發現有種尋路算法叫A,然后參照著算法思路自己實現了一下,發現挺好玩的,無論設置怎樣的障礙物,只要有一條可行的路徑,它就會找出來,并且是最短的路徑。
前段時間做了個彈幕的功能,彈幕要考慮不同的播放速度,要考慮旋轉屏幕時的過渡,要考慮內存占用量,以及彈幕視圖重用的問題。這些就是算法,假如解決不了這些算法,那就只能做個勻速播放,旋轉過程沒有過渡,可能還會出現播放斷片,然后內存狂飆的彈幕界面。
對算法的看法
學習算法應該是基于興趣的,假如只是為了掌握算法而去學習,很可能會產生厭倦,導致學到東西的也丟了。最近讀了王曉華的《算法的樂趣》圖書樣章,比較認同他對算法的定義,以及如何對待算法這個問題。我始終是抱著興趣與運用的原則來學習算法的,雖然自己掌握的算法不多,而且沒有什么高深的算法,但能滿足自己,滿足業務,那就夠了。