為什麼硬體公司軟體做不起來?

Photo credit: Sean Hagen on Flickr

 原文刊登於 還在學 部落格,作者 Goodspeed 為資深軟體工人。

最近與一位資深硬體 RD 聊天 (有 20 年以上設計經驗),言談之中他不斷跟我強調很多 IPC 廠想入門 SCADA/HMI 軟體,但不知道怎麼入門 blah~blah~

小弟在工控界搞了 7 年 HMI 軟體,3 年 Remote IO,也算略有經驗。現在就從個人角度來分析,為何硬體公司要入門軟體這麼難?

硬體公司不懂得如何帶領軟體開發團隊

以小弟在幸福企業 M 公司的經驗,做一個產品,時程最多一季至半年,一位 hardware RD 搭配一位 firmware RD,最多再加一個 software RD 幫忙寫 PC Tool,這大概就是全部了。

但今天如果開發一個中大型規模的軟體,就以剛剛提到的 SCADA/HMI 來說,國外的軟體人力配置是 20 個 software RD,國內 cost down 的結果也至少要 7-8 人。

這馬上就會產生很多問題,讓我們來看看。

為什麼需要這麼多人?

Steve Wozniak 當年一個人就可以打造 Apple II 全部軟硬體,但他也坦承現在的電腦軟硬體太過複雜,非一人所能掌握。但很多硬體背景出身的人可不這麼想,他們除了會設計硬體外,也會寫程式驗證,更別說單晶片這種東西幾乎是全包 (可能除了機構外),所以他們會覺得為什麼要這麼多人?不要騙我我也會寫程式喔!

以小弟手上正在維護的產品來說,裡面用到了 4 種程式語言 (SQL、C++、JavaScript、Lua),PC/Emabedded 2 個版本完整編譯要超過 1 小時以上,相較於單晶片編譯只要數秒,可以快速不斷用 ROM Emulator 上傳重試,根本是完全不同的世界,不是當事人很難想像。所以才發展出 daily build 每日自動建置,避免昂貴 RD 人力用於這種重複性工作。

小弟當年唸書時,曾經有老師開了一門課叫做「大型軟體個案研究」,試圖帶大家分析 Apache Web Server,不過很可惜的是這門課沒開成,但也可以看出大型軟體的複雜度已經到達需要開課研究的程度,絕非一人可以輕易掌握。如果您覺得自己天縱英才,可以試著在不借助 Source Insight 這種軟體的協助下看能讀懂這些流行的大型軟體幾成。

硬體公司抓不住軟體潮流

就算 software 也很少人了解到現在是 讀程式的技能比寫程式重要 ,這個時代速度就是一切,沒有人不是站在巨人的肩膀上,引用別人的成果,現在寫程式也比過去更依賴工具 (前面提到的 21 世紀 C 語言 這本書就可以證明)。

有件事實很多人不知道,其實台灣很多公司都有 DIY OS 過,如 M 公司、x 技、x 格… 但這些公司的 DIY OS 可以說全部淡出,因為相較於 Linux 這個由全世界一流高手打造,外加百萬人驗證過的 OS,一間公司能有多少客戶來幫你驗證?外加不斷暴漲的各種 Layer 2,3,4 network protocols…,要養多少 RD 才能補齊?所以現在這些台灣公司,要不是直接用 Linux,就是直接移植 Linux 上的各式模組來用。

換個角度想,做硬體的人會放棄現成的積體電路、SoC,改用電晶體來兜產品嗎?

硬體公司不懂軟體開發流程

在純軟體不懂 Version Control System、Bug Tracking System、Daily Build System… 會被人笑沒受過教育。但硬體公司卻是晚了很多年才心不甘情不願的導入了裡面幾樣最基本的東西。

如果說對工具已經很陌生,那就更不說更抽象的規格設計、需求訪談… 乃至於之前流行的 eXtreme Programming 到現今的 Scrum 根本是外星人的語言。更何況裡面很多工作根本不像在寫程式,你們這些 software RD 沒在打字是不是在混啊!

硬體公司唯一的施力點大概就只有 UI,但這也很可笑,因為一堆硬體公司對 UI 的要求全憑個人好惡,好一點的會套入企業形象加以配色,極少數是從使用者經驗出發,像筆者這種還會去 閱讀專著的大概純屬鳳毛麟角了 。所以硬體公司也不用怪怎麼大家都往 Kernel、Device Driver 這種領域去鑽,沒有人唸個 CS 碩士學位結果在那邊搞對齊 pixel 跟用 PhotoShop 去背,那幹麼不去巨匠算了!

硬體公司無法掌握軟體品質

這是壓死駱駝的最後一根稻草,硬體公司沒有能力驗證軟體的可靠度,不知道如何去做單元測試、回歸測試、邊界測試、壓力測試… 硬體公司會做的測試大概就是人肉測試,用工人智慧進行測試,用人力代替 CPU 運算能力。

但軟體測試發展至今,已經發展成一門專業,絕非某些外行人想的是這些做測試的是學經歷比較差、當不上 RD 才做測試。做測試也是要寫程式的!以小弟待過的 M 公司來說,很多資深測試工程師是資深 RD 轉過來的,他們是用程式、自動化的方式來測試 RD 丟過來的東西,不是外行人想的,這邊點一點、那邊按一按… 喔,當掉了!這種土方法來測試。

硬體公司沒有人想賠上官位

硬體公司不但不知道如何管理軟體團隊與開發流程,也不知道如何行銷軟體、教育訓練 (非常花成本),花了多於 hardware RD 數倍的人力 (薪水) 後沒有帶來立即性的營收會有什麼下場呢?負責主管好一點是考績變差,慘一點就是請你走人了。

前面提到過,台灣硬體公司開發產品的習慣是 3 個月到一季最多半年,然後就要出貨收錢了。大型軟體不但無法這樣做,半年後可能才略具雛型,可能還有不少 bug… 那高層會怎想呢?股東會怎麼想呢?有錢的阿伯們才不會管你軟體怎麼開發的,他們會覺得這種生意不能做,軟體還是給老外玩好了,國情不同!

硬體公司有這種思維早已其來有自,因為台灣電子業的成功秘訣是近親繁殖 + 帶槍投靠,很多大老闆們之所以敢出來創業,早已有口袋名單內的客戶支持,他想要拿出來創業的產品也早已 ready (怎麼 ready 的大家自己猜),軟體這種幹法簡直是… like 87,在這種淺碟、急躁的氛圍中,硬體公司做軟體就像落在水泥地上的種子,最多只能長出幾顆雜草罷了~ 科科

這篇文章 為什麼硬體公司軟體做不起來? 最早出現於 INSIDE 硬塞的網路趨勢觀察