[253] 那一年,我與 JUCE 相遇

JUCE is a cross-platform C++ GUI framework

約莫 2014 年底,JUCE 當時的版本是 3.x,公司還沒被做樂器的 ROLI 收購。當時因應一個專案需求而評估開發框架時,無意間發現 JUCE 這個 C++ 跨平台開發框架。當時的需求是支援 Windows & macOS,而且編譯後的執行檔大小有 10MB 的限制。瞄了一下 Qt,好像有點難度;試了一下 JUCE,輕鬆達標。就決定是你了!

這決定看來輕鬆,但其實不容易。首先,談到跨平台 GUI 應用程式開發,Qt 是多數人的「首選」。Qt 給人的印象是,技術成熟、開發者社群廣大、文件豐富、參考資源不計其數(書、文章、影片、課程)。

跟 Qt 相比,JUCE 在台灣的能見度幾乎為零,除了官方的英文文件,以及少許的文章及 YouTube 影片外,學習資源少得可憐。再加上多數找得到的資源,多以「如何開發音樂類型的應用程式或外掛」為主,音樂領域以外的應用得靠自己摸索。

公司開業以來最大的軟體開發案,在評估不到兩個禮拜就決定以 JUCE 做為主要開發工具,這風險不低吶(老大說他不懂,由我全權決定)。難道是梁靜茹給的「勇氣」?

當然不是!風險雖高,但評估以下幾點後,確認風險在我的守備範圍內:

  1. Open Source
  2. Just C++ and platform specific codes
  3. JUCE code base quality is great and easy to read

Open Source

類似 Qt,JUCE 採用雙授權:GPLv3 and Commercial License。開源碼專案可以自由修改 JUCE 原始碼,完全免費。也可以購買商業授權,我先前有一篇文章介紹 JUCE 5 在授權上的改變

JUCE C++ and Platform Specific Code

當年堅持使用 JUCE 的理由,原始碼開源是我很看重的一點。背後的理由是:既然是我熟悉的 C++ 程式碼,有什麼問題自己動手改即可,有什麼好怕的?雖然之後遇到幾次必須解析我不熟悉的 Objective-C 程式碼,但還在可控範圍。

Code Quality

最後一點,JUCE 老爸 Jules Storer 對程式碼品質的要求極高,可讀性是很重要的考量,因此熟悉了 JUCE 框架的設計架構後,多數程式碼皆能讀懂。JUCE 沒有太多 Template 魔法,閱讀以及修改容易。

公司幾年前徵資深工程師時,有位看來誠意十足的應徵者,因為我們堅持使用 JUCE 這個名不見經傳的開發框架決定不來了。當時他極力推薦我們改用 wxWidgets 這個開源跨平台框架,但被我拒絕了(我不喜歡 wxWidgets 的架構,其程式碼品質也沒有 JUCE 高)。

Google Drive Client 似乎是用 wxWidgets 開發的,品質很糟,不像是一間超級大公司該有的產品。當然,錯不在 wxWidgets,在開發人員。但是,工具的選擇對專案的影響很大。

JUCE 專案這幾次的改版其中一個重點是導入 C++11 以及後續的標準規格,有機會簡化許多組件的設計。JUCE 初版於 2004 釋出,已經十五年了。許多碼雖不至於年久失修,但導入新的 C++ 標準規格,我相信對專案未來的發展有相當正面的影響。


Originally published at samtsai.org on March 31, 2019.