網路城邦
上一篇 回創作列表 下一篇  字體:
功能→效能→介面
2018/07/20 07:56:30瀏覽1935|回應0|推薦9

這是我教學生時說的軟體製作三部曲,首先設計該軟體的功能目的一定要達成,「可以做到」就是功能及格了!作得到,但是跑得很慢就是效能不佳,在一樣的電腦規格下,你必須不斷研究出讓程式跑得更快的方式。這主要是數學與程式的技巧,當然也要善用電腦的特性,譬如多核心電腦是可以用多執行緒來同步開工的,不會用平行運算的話,一樣的電腦你的軟體就比人家的慢好幾倍!

功能效能都好了,就是要讓使用者好用,想知道的資訊要很容易看到,不必知道也不想看的資訊藏起來,只讓修理軟體的工程師找得到就好。想怎麼操作?該怎麼操作?不必看說明書就能一目瞭然,這就是介面設計的功力了!

大多數有點規模的軟體都是分工製作的,以車牌辨識來說,最難的是影像辨識的部分,我們通常稱之為辨識核心。想當然耳,這部分在研究的應該是博士級的RD,能設計出辨識正確的演算法就算成功了!當然以商業化的要求,很多邊緣狀況的車牌也要能盡量辨識成功,只會辨識「正常」車牌的人只能去當教授,想當業界RD一定會被解僱。

因為這部分研究傷腦筋的是數學或物理問題,其實使用越高階的程式設計工具越好,如PythonMat labOpenCV等等。這樣很多數學細節與程式語法就不會讓研發者太分心,可以專注於核心演算法的思考與創新。很多人說要用C++作影像辨識才夠專業?我認為他們鐵定是瘋了!不然就是根本沒做過亂講的。

演算法OK之後,效能部分就要找有資工背景的人來研究了!通常他們的操作方向是軟硬體一起來的!譬如將演算法放到另一種較簡單,但運算效能與穩定性較佳的硬體架構或作業系統去跑,其實就是將高階程式改成比較貼近作業系統的較低階程式,如CC++等。

但是我的車牌辨識軟體生產線,基本上就只有我一個人!為了能快速研發新演算法並隨時替客戶更新軟體,我是很堅持研發與軟體執行都在同樣的Windows作業系統進行,我也越來越認定這樣完全不會減低我的效能!即使我不用Linux,即使我不用C++,即使我不作任何硬體化元件,我的軟體仍然快到抓不住!原因是我發現:演算法本身的效率好壞造成的差異遠大於改變作業系統

如果電腦硬體規格是一樣的,作一百次加法的時間就是一樣的!不管你的作業系統是WindowsLinux,不管你的程式語言是VBC++!真正可以有效增加速度的,是更有效精簡的演算法!與其花很多時間精力與金錢,將原始演算法在不同的作業平台上搬來搬去,就不如多花時間研究程式碼,研究數學式子,設法減少運算量,卻不減損運算結果。

現階段我的車牌辨識軟體功能效能都已經能讓顧客滿意了!開始有合作夥伴開始抱怨我的程式介面簡單到很「不專業」!人家的軟體看起來就像一台很複雜的機器,我的軟體卻空蕩蕩的,讓工程師很挫折,根本沒啥好調整的嘛?客戶也會懷疑,看起來介面簡單到像是學生上課寫的作業,真的能用嗎?

哈哈!確實如此,我的車牌辨識軟體的第三部曲一直沒認真作。但我可是教程式設計十多年的資深老師,教學與實作資料庫應用、網頁設計與App的經驗是很豐富的!要做些看起來很忙碌的顯示介面,很難嗎?不過是一天的事啦!如下圖,現在程式跑起來要看戲的話,有很動態的系統資訊,還有工程師都喜歡翻看的Log檔案,紀錄一些參數修改或例外事件,這不會像學生作業了吧?

( 心情隨筆工作職場 )
回應 推薦文章 列印 加入我的文摘
上一篇 回創作列表 下一篇

引用
引用網址:https://classic-blog.udn.com/article/trackback.jsp?uid=yccsonar&aid=113445249