本屌絲在新春放假期間閒來無事,在各大編程論壇溜達了一圈。發現年前的帖子中,有VC++程序員在界面開發方面遇到了不少苦惱,有抱怨界面工做很差作的,有抱怨用錯了界面庫的,也有緊急求得技術問題幫助的。看到這些,想起了五年前的我。我那時正好在一家互聯網公司擔任技術總監一職,手下有三我的。那是一家剛創辦的公司,老闆是我初中同窗,他在美國呆了幾年拿到EMBA後到國內創業。在一次同窗聚會上了解到彼此工做方向。後面憑藉對將來的嚮往一塊兒創業,他負責營銷和資金,我負責技術研發。咱們的目標是開發一款企業用的即時聊天軟件(IM),那時尚未企業QQ和IMO。咱們感受市場是空白的,而企業需求則是很是剛性的。因而咱們開始了美好的夢想之旅!
我以前一直是作服務器後臺底層編碼的,弄過阿里巴巴的阿里旺旺的後臺,因此後臺部分基本都是現成的技術和框架,不須要佔用我太多的時間。老闆讓我招幾個技術人員以輔助個人工做。我在老闆的眼裏是技術牛人一個(也許我在他面前把本身吹的過高了),他常常以「大師」稱呼我。(雖然我表現的很謙虛,不過心理仍是感受良好,被別人承認的感受真好!)。因而我就招了三個懂點MFC的程序員進來一塊兒作IM的客戶端部分。
說實在的,那時我對VC++開發界面真沒有什麼經驗,這三位小弟好像與我挺投緣的,都一致認爲作界面嘛MFC就足夠了。當時,我關注過QT,雖然QT作出來的效果然不錯,但有兩個問題直接致使我放棄了它。
第1、發佈出來的程序竟然要帶上十幾兆的QT支持庫(QTCore.dll,QTGUI.dll等);第2、QT的調用真是奇怪,和MFC徹底不同的,特別是事件響應,再加上三個小弟對QT也不太熟。因此最終你們都絕不猶豫地拋棄了它。
MFC作界面很容易,在窗口資源上擺上一個一個控件是所見即所得的,很直觀的。大概作了三個月,登陸界面、主界面、聊天界面和設置界面都相繼問世了。灰灰的窗口背景,雖然有點醜,但不影響功能的展現。我拿着這個版本向老闆彙報了。老闆看後感受很滿意,他很高興地告訴我,再弄一個月,把體積搞小點,界面效果作到QQ的樣子就能夠上線了。我信心百倍地表示,必定按時完成任務。咱們當即開始了體積的縮小工做。發現WTL在界面和體積上都比MFC要有優點的多。因而咱們邊學邊改代碼。花了一週時間,把WTL都換上了。體積確實如期所願縮小了不少,依賴庫也少了幾個MFC*.dll。不過要把界面作成QQ那樣子,咱們幾個不知道從何下手。從網絡上查了查有不少,有破解的,有免費的,有收費的。說實在的,老闆剛創業也沒有錢,有免費的確定不會選擇收費的了(除非腦子「進水」了!!!)。看到網絡上的評價BCGControlBar挺不錯的,因而Down了一個9.0的版本,還帶源代碼,太令我激動了!
研究了它的Demo和代碼,發現與咱們聊天軟件不太同樣,也找不到用它作IM界面的例子。有個手下提醒我了,他說BCGControlBar是作管理型軟件比較適合,好比Office之類的軟件。如今想來他說的還真是對的。繼續Google上找,發現有一款SkinMagic的換膚軟件,還帶可視化的皮膚設計工具。
不太小激動了幾下後發現,這個設計工具只能編輯同一類型的控件外觀,用這個工具換膚出來效果是:全部同類型的控件都長成一個樣子。對聊天軟件來講,有不少控件都須要長不一樣的樣子。後來終於搞明白它是換膚類界面庫,而咱們須要的是開發界面的工具。換膚類界面庫的意思是咱們把界面用MFC先作好了,而後用它去換膚,至關於把軟件換層皮,但對自定義的控件和控件的各類佈局都沒法支持。通過這麼一段時間的摸索後,感受網絡上界面庫初看上去還不錯,但真正用起來會發現不少問題。一晃一個月過去了,老闆來問我開發進度了,心中頓生很大的壓力,開始感受到界面沒有我以前想象的那麼簡單!在界面上沒有大的進展,我讓老闆再給我一個月時間。雖然說我以前沒有太多的界面開發經驗,但我感受本身的技術功底是比較紮實的,加上這幾周對界面庫的調研後發現,界面庫的東西其實也蠻好理解的,並且也不存在什麼特別高深的東西,不就是繪製圖片嘛,我心中有一種莫名的衝動:我也開發個界面庫出來,把這些網絡上的無能之輩通通「打倒」!想當年我參加全國計算機編程競賽還得過名次滴,我還不信搞不定它了!
在Windows上作界面,說白了就是作控件自繪。我安排手下三我的各作5個標準控件的自繪工做,我負責窗口標題欄、菜單欄和工具欄的自繪。剛接手作的時候,真的還挺麻煩的,看了很多的資料。
幸虧在CodeProject上面找到了不少控件的自繪的類,還找到了不少的文章,好比滾動條如何自繪等等。這些文章寫的都是很是有技術含量,後面用在程序中發現還比較穩定的。咱們4我的通過1個月的奮鬥終於出了一個草稿版,窗口、控件都實現出了QQ的樣子,不過在某些程序交互操做上還存在一些瑕疵,但咱們4我的看看還說的過去。老闆如期而至,用了一下咱們的類QQ版IM。他體驗完後給個人評價是若是不操做界面感受還行,但一操做就感受有不少問題:界面卡、閃爍厲害、控件很彆扭、位置錯亂…… 我向老闆解釋了其中的原因,不過他好像並無聽進去。從一開始對我那麼高的指望,如今一會兒有點失落的感受。說實在的有種對不住老闆發的工資,還有種辜負他指望的感受。回到家裏連續幾夜都沒有睡踏實。以前的豪言壯語都已經煙消雲散了。若是繼續沿着咱們本身開發的這個界面庫,在短期內解決掉這些問題是不太可能的,由於裏面有不少的界面細節,並且Windows控件自繪方式的界面要作到徹底不閃爍是很難的。知道前路艱險,因此向老闆提出了離開的想法,老闆在幾回挽留後贊成了個人請求。
以前的失敗教訓告訴我:第1、不作本身不擅長的,讓專業的人作專業的事;第2、不搞我的英雄主義,成也「英雄」,敗也「英雄」。
前兩年又找了一家互聯網公司,他們家以前就用了開源庫Duilib,效果要比我以前作的界面要好不少。
不過他們也是遇到了界面升級難的問題。公司想要作自動化測試這塊,可是DUILib是DirectUI界面庫的一種,窗口上沒有控件的句柄,你們都不知道如何讓自動化測試工具找到窗口上的控件和他們的函數。另外Duilib在多主題、多語種和多色調上面都不支持,咱們團隊沒有時間去開發這樣的新功能,我第一時間想到的就是找開源庫做者來增長這樣的功能。可是最後的結果是那個做者不肯意配合咱們作這項工做,不事後來想一想也是,他沒有收咱們的費用憑什麼爲咱們服務。可是公司的計劃不容拖延,我必須迎頭遇上。團隊有人提出咱們本身修改Duilib的代碼,我否認了這個方案,由於界面的複雜度很高,弄很差又要重蹈覆轍,對公司對團隊都很是很差,並且咱們本身的團隊更應該關注本身業務的開發,不能分散精力,讓專業的事情讓專業的人來作纔對。後面我又瞭解到迅雷有一款Bolt的界面庫,效果然心地不錯,也讓咱們迷戀了一段時間。
最後放棄Bolt界面庫的緣由有四個:
第1、Bolt界面庫沒有現成的控件,若是咱們要作一個自定義的Listview則須要好多天的代碼編寫;
第2、Bolt的學習時間長,成本過高,還須要學習Lua腳本;
第3、Bolt不提供源代碼,對互聯網公司來講,若是用在軟件裏的界面庫沒有源代碼很容易被別人控制,雖然迅雷公司一再地聲稱信譽和商業道德。但對更多企業來講,這點沒有真正的約束做用;
第4、免費的方案,咱們以前已經吃到DUILib庫的苦頭了,免費的東西別人就能夠坐視無論,而Bolt在迅雷內部只是一個部門工具而已,並非一款獨立運營的產品,若是咱們之後發現哪裏功能不知足如何找到負責的人修改和維護呢?這點仔細想一想是很可怕的:若是咱們的產品已經發布使用,忽然有一天界面庫發生崩潰了,找誰去?哭也沒用了。這個風險太大!
後面經過百度搜索找到了幾家收費的界面庫,UIEasy的DSkinLite,UIPower的DirectUI,Bodsoft DirectUI Library。初步的映像是UIPower的價格是最貴的。
其餘兩家的價格優點是很明顯的。幾千到一萬之間。後來瞭解到UIEasy的DSkinLite與SkinMagic是差很少的,因此它被放棄了。
UIEasy也有DirectUI,但試用下來感受是個半成品,因此也不去考慮它了。和老闆商量後,最後採購了Bodsoft的DirectUI,最終以9700元拿到了產品和全部的源代碼。
本覺得找到了界面的孃家了,惋惜後面的事情令我不堪回首。以前答應個人服務後面幾乎沒有怎麼兌現。界面庫中Bug很是多,每次找他們修改還找理由說是咱們使用上的問題。我當初很是氣憤,決心要訴諸法律,但我轉念一想,若是這個事情鬧大了,對我本身也很差,至少也有失察之責,弄很差我又得離職,因此我後面就忍了下來。真想不到搞個界面這麼麻煩啊。我當時內心在琢磨,Bodsoft應該是個小公司,不然不會這麼輕易地幹出如此拙劣的服務。我想之後有機會要過去看看,會會這些不講信用的人。此次的採購經歷又讓我知道了購買重要東西的時候必須上門視察一下,不然吃了苦頭只能往本身肚子裏咽。
選擇Bodsoft有我對價格的考慮,如今發現不能由於價格而草率決定誰適合。做爲用戶來講,說實在的,要從網站上去對比真的很難比出誰好誰壞,只有來真格才行。能選擇的也只有UIPower了,它當初由於價格過高第一個被咱們排除出去的,如今又要重現拉回來從新評估,矛盾複雜的心情難以言說。
此次老闆和咱們開了一個會議,檢討了幾點:
第1、在界面開發上進度延誤的太嚴重了,必須以最短的時間追上來,市場不等人;
第2、採購東西要講究性價比,而不是一味地追求便宜;
第3、界面方面以前的預算從新弄,根據市場行情來,再也不本身搞一套心理預期。有了老闆這個底子,我心理有譜了。
正所謂吃一塹長一智,要讓我相信網絡上的誰如今都是不可能的了,必須經過技術和法律手段來確保合做的結果,我不想再失誤一次,此次必須成功!我讓手下把界面中遇到的問題和將來須要的功能都列了一張表,做爲咱們與UIPower溝通的主要內容了。咱們本身制定了幾個合做原則:
第1、UIPower必須針對咱們關係的問題提供能夠運行的Demo;
第2、涉及到定製這塊的,必須有詳細的報價單;
第3、把全部的要求列入合同並肯定具體的懲罰措施;
第4、必須拿到DirectUI的全部源代碼。
第5、必須到UIPower辦公現場實地考察一下,耳聽爲虛,眼見爲實。
以上的原則從技術和法律兩個層面上進行了將來結果的保證;
咱們根據以上幾個原則與UIPower進行了接觸,最後達成了合做。合做過程還算順利,但也暴露出了一些問題,好比他們在客戶分配時間上有些使人不太滿意,但反過來想,人家客戶數量多忙不過來也很正常。咱們但願他們能第一時間處理咱們的問題,但不少時候不能如咱們所願。不過他們承諾的三天時間解決問題,通常都能按時交付給咱們。
如今回過頭來總結一下:
若是你對界面真的很是感興趣,而且有充足的時間,那麼我建議你多看一些開源庫,而後開發屬於「本身」的界面庫,這樣作的好處是,你對本身的界面庫瞭然於胸,最好不要拿免費的開源庫直接使用,由於免費的東西通常不會有完善的後期維護和及時的代碼更新,這樣的話一旦出現Bug,你就不知道如何迅速修改它。本身開發的界面庫畢竟是通過精心設計和思考的,因此每行代碼都是很是清晰的。這種方式的前提是你得對界面開發很在行,技術功底也不錯,有足夠的時間和很是平靜的心裏,通常須要堅持1-2年。
若是你只是使用界面庫的話,免費的東西首先我不建議你選擇,主要緣由就是你沒有付費就得不到相應的技術服務,一旦出了問題(出問題的機率在90%以上)你會感覺到孤立無助,完全「崩潰」。至於收費的東西,也要擦亮眼睛仔細看看他們作過的成功客戶,最好實地考察現場拜訪,參觀一下現場的辦公環境。作界面庫的「皮包公司」特多(其實不光是界面庫方面,作軟件工具的不少都是這樣的,我以前接觸一個報表工具公司的也是如此。),在網絡上實在沒法搞清楚公司實力如何。公司越大,售後服務相對會好些,公司過小或沒有公司,售後服務如何保證?這是吃到苦頭之後總結出來,但願能幫到與我差很少的屌絲們。程序員