網路城邦
上一篇 回創作列表 下一篇  字體:
抱歉,我是用VB寫程式的!
2014/11/16 18:21:52瀏覽12178|回應0|推薦15

很榮幸的,我的部落格漸漸地有些軟體專業人士也來捧場了!有位在美國尖端科技公司研究影像辨識的學長也來指教,他很驚訝看到我居然用VB在寫那些車牌辨識程式!因為在專業人士的認知中,影像處理與辨識是需要最高效能的程式種類,絕對需要使用CC++語言的。VB?那不是初學者用的簡易語言嗎?拿來寫一般商用軟體都會被質疑了,寫影像辨識程式?怎麼可能?

但是不好意思,這些年來除了寫HTML5 APP是用JavaScript程式之外,我和我的團隊,包括製作影像辨識軟體都真的是使用VB程式做的!我雖然C#VB都很熟練,兩種語言也都會教學生,甚至都有出版書籍,但我直接告訴學生的是:學會C語言是一定要的!因為資訊專業領域的人都習慣用C語言,就像我們在各個專業領域都一樣,如果看不懂英文,資訊來源大受限制麻煩就大了!但是如果是自己開發軟體呢?我的最佳選擇與建議都是用VB

我知道很多人覺得用VB「很不專業」,但是我一直覺得我的選擇非常合理!VB是閱讀最容易,寫作時也最不易出錯的一種語言,因為好讀好寫,我就可以將注意力集中於思考程式邏輯。如果你也是同時用過VBC語言的人,一定知道,如果我的迴圈或IF判斷式超過三層以上時,C語言程式讀起來會有多累?那些層層疊疊不知誰屬的大括號,絕對會讓設計師分心,不自主的傾向少用較複雜的邏輯!

但是影像辨識就是常常要用到複雜邏輯,隨便一個影像處理動作就是二維陣列,至少需要兩層迴圈。如果要做一個空間濾波那就是四層了!在中間如果必須再加一兩個條件判斷式,大括號就會有五六層了!超恐怖的!相對的,VB的區塊起終點都是文字模式,哪一個結束標籤對應於哪一個起始指令一清二楚,不覺得疲累時就會自然地敢於繼續設計更精緻的演算法,所以其實VB比C語言更適合寫複雜進階的程式,因為它做複雜的編碼比用C語言容易很多!

事實上大家詬病VB的原因是效能,誰都不會反對它是最為親民友善的語言,但它的速度真的比較慢。但這要分兩個階段來說,在VB.NET出現之前,VBVC有各自獨立的函式庫(Library),兩者的功能廣度與執行速度確實差很多。那時很多VB6玩家用呼叫C語言API的方式「盜用」C語言的功能,我也做過的!我用VB6寫的聲納軟體一碰到影像繪圖就超慢,當我盜用了Winsows API之後就和Visual C一樣快了!到了.NET時代兩種語言的函式庫統一了(指微軟公司的產品.NET Framework)VBC#的效能其實已經毫無差異!

那麼似乎更加神秘神奇的C++語言呢?它在影像處理方面真有甚麼超過C#的特異功能嗎?據我所知,還真的有!適當地使用C++就可以做直接的記憶體存取,這是C#以及所有Windows作業系統下執行的程式語言基本上都會限制的動作!我試過一張影像讀寫時,用記憶體直接存取模式與.NET提供的指令,速度差可以高達十倍以上!所以難怪C++會被視為影像處理領域非用不可的語言。

但是除了這一點優勢之外,其他加減乘除等等動作的效能,我認為C++C#甚至VB都是一樣的!沒有甚麼神奇之處。所以我針對如何在.NET程式中暫時跳脫Windows管制,就是暫時鎖定記憶體做直接記憶體存取的方法做了一些研究,發現用VB.NET還是有些指令可以做到。於是就寫了一個VB的程式模組,確實可以達到讓影像讀寫提升十倍速的結果,我也使用了那個模組有七八年了!我認為我的VB車牌辨識效能是不會輸於C++版本的!不服氣或有興趣一起研究的人歡迎來一起測試。

因為這些經驗,我對於堅持某種程式語言裡面有「神」的人不以為然,也不會因為別人批評我不該用VB做專業程式就感到愧疚,除非真的有人可以對我曉以大義,證明我的看法與做法確實錯了!對我來說,程式語言就是與電腦溝通的工具而已,應該不必自我設限的!就像面對台南鄉下的老先生老太太,如果你會說台語就用吧!堅持講字正腔圓的國語,他們多半也聽得懂,但不會比較好溝通的。

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

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