跳至主內容

如何揀library而不中伏

如何揀library而不中伏
Gordon Lau 劉偉中
2021-05-12

在世上大多數的技術行業,工作之箇中技術都往往是行業機密,因為這關乎商業利益,斷不會隨便公開予大眾。例如著名廚師的食譜、半導體的生產技術、礦產開採技術等等,誠然在今日互聯網世代,這些技術之相關知識很多時亦可在網上窺得端倪,但往往只是在表面輕輕帶過,箇中奧妙,都不足為外人道。在這一點Programmer則與其他行業不太相同,因為有開源軟件(Open source software)之存在。對世上數千萬Programmer 而言,閱讀、使用、參考其他Programmer的工作是很稀鬆平常的事,即使是世界級Programmer所編寫之程式碼,也很容易在Github 等網站閱讀得到,基本上不存在知識壁疊。很大部份日常Programming常用之程式庫(Programming library),正是以開源的方式,在社群之中共享,在各種技術行業之中,這是一個相當獨特的技術生態。

NPM 圖示及吉祥物

NPM Wombat Reference

就以筆者最熟悉的Npm packages為例,NPM上2019年就有超過一百萬個packages,每月總下載次數達500億次,因此可以肯定地說,不論一個軟件工程師是如此出類拔萃,使用他人所寫的程式庫乃是不可避免。

既然使用他人所寫之程式如此必要,我們更應有一套行之有效的方法,去判斷一個library是否適合手頭上之專案,否則當專案太依賴該library之後,造成與程式庫間之依賴耦合(Dependency Coupling),到時想再改回來,就已經恨錯難返了。

既然活用他人之程式這樣重要,那有何原則可以判斷應該如何挑選library呢?筆者在下筆這篇文章之前,都在網絡上搜尋過類似文章,發覺這個重要問題,竟然很少人談及過,筆者就斗膽在此分享一些個人經驗,希望可以幫到正在閱讀的你。

筆者看來,揀選library 可遵從以下五大原則,並將一一以例子詳加解釋:

  • 受歡迎程度 (Popularity)
  • 開發活躍程度 (Project activeness)
  • 質素高下及文檔齊全程度 (Code Quality and Documentation)
  • 許可證及使用成本 (License and cost)
  • 多平台支援程度 (Multi-platform support)

程式庫是否受歡迎呢?

正所謂「西瓜靠大邊」,大多數開發者使用的程式庫必然有其優勝之處,其中一個好例子是Twitter BootstrapTwitter Bootstrap自2011推出而來,一直大受歡迎經常,是Github上最多星星(Stars)的頭數位。開發者在揀選CSS框架的時候,Twitter Bootstrap每每是首選,正因有大量開發者使用,更保證了不論有任何問題、任何漏洞,你都能夠輕易在網上找到解決方法,因為類似問題通常早已為數目龐大的用戶測試得非常通透。

bootstrap 於 GitHub 的截圖

Github Link

Bootstrap在介紹裏也開宗明義,說是The Most popular HTML, CSS, JavaScript framework...,強調The most popular,其中原理,就是「盛名之下無虛事」,都已經是最受歡迎了,質素當然有保證吧,不然大家都轉會了。

比較之下,Bootstrap的其他競爭對手則顯然無法以受歡迎作招徠: 例如近年很受歡迎的Tailwind,就以Utility-first的哲學來與BootstrapComponent-first哲學來作分野。

tailwind 網站截圖

另一競爭對手Bulma則以簡單易用作招徠,例如強調just worksNo CSS Knowledge required。也是為了與Bootstrap作明顯分野。

bulma 網站截圖

因為這些程式庫都須要回答一個很重要的問題,就是為何我有Bootstrap不用,要用這個程式庫呢?,可見僅僅是受多人歡迎,已使一個程式庫獲揀選之機會大增。

程式庫開發者有活躍開發嗎?

只是受歡迎並不足夠,程式庫永遠都在變化,不會一成不變,所有程式庫必須不斷推出新版本,以提供新功能、修補問題、改善開發者體驗(Developer Experience)。假如有一個很受歡迎的程式庫,在過去一年都接近完全無任何開發活動(No active development)的話,筆者認為是一個很大的警號(Red Flag)。

一個好例子就是JQuery UI,在現今單頁面應用框架如ReactVueAngular興起之前,JQuery UI曾經是一個相當廣泛使用的程式庫,因為JQuery UI提供了不少可以直接使用的部件(Widget)。但走到JQuery UI的github,你會發覺JQuery UI 對上一個穩定版本已是2016年9月推出,已有超過4年無新版本推出,即使在香港從事軟件開發的公司中,依然有在使用JQuery UI的痕跡,也掩蓋不了JQuery UI已經「死亡」的命運。

jQuery UI 發布狀態

相較之下,React Material UI的對上一個穩定推出版本是4.11.4,距離本文寫作日期僅是13日之差,塾優塾劣,一目了然。

Material UI 發布狀態

軟件活躍開發,代表新概念、新想法會得到採用,使用之開發者工作效率自然更高。

程式庫開發者是否着重軟件質素及文檔?

筆者自己平常做軟件開發,對軟件的要求自然不只是「能運行」就可以,軟件質素(Software Quality)及軟件文檔(Software Documentation)也是必須考慮的問題。對應用要採用的程式庫要求也相類似,要選用軟件質素夠高的程式庫。一個量度軟件質素的方式,就是用自動測試覆蓋度(Automated Test Coverage)。我們常常在軟件的Github 看見一個Badge,寫著Coverage 95%的意思,就是代表自動測試已覆蓋了九成五程式碼。所以這其實是一個代表程式庫高質素之「勳章」呢!

GitHub Badges

文檔(Documentation)是另一個很重要的因素,程式庫(Library)與普通應用軟件(Application Software)不同,文檔的高下往往直接影響程式庫的成敗。Facebook的React是最受歡迎的單頁面應用框架,筆者認為文檔清晰簡潔是一大原因,即使是初學者,亦容易上手。

React 文檔

相較之下,另一個單頁面應用框架Ember.js的文檔則複雜得多,更在同一頁面內有版本123之別,即使是前端開發老手,也很容易覺得混淆。何謂Ember Data呢?2.X的版本又有一個概念名為Controller?Ember Object又是甚麼呢? 有興趣者多看幾頁已頭昏腦脹,又怎會在自己的專案採用呢?

Ember 文檔

在單頁面應用之競爭之中,React受歡迎程度遠勝Ember.js,也不言而喻。

React 與 Ember 的 Google Trend, React 佔優

NPMTrends 網站

程式庫是否開源?

世上絕大多數常用之程式庫,都是開源軟件(Open source software),因此也是用開源許可證(Open source licenses)發行,也有少數程式庫會有收費功能(Premium Features),但不是主流做法。對軟件開發者而言,開源軟件之最大好處,就是容許開發者直接閱讀程式碼,幫助程式庫除錯、改善功能、擴充文檔。對專案管理人(Project Manager) 而言,使用一個開源程式庫也有好處,就是縱使程式庫原作者荒廢了,只要有足夠技術人手,大可以自行繼續維持,不必怕失去軟件支援的困境,因此開源程式庫獲廣泛認為是未雨綢繆的選擇。

相反,閉源/商業程式庫則自帶這個「停止支援」的風險。一個閉源的軟件停止支援,所有與之相關的軟件都需重寫(Revamp)。大家記得的話,數年前Windows XP「壽終正寢」的時候,連銀行櫃員機也面臨安全風險了。因此,使用閉源軟件,本身就有軟件未來無法繼續使用的風險。

使用 Windows XP 的 ATM

來源

程式庫是否支援多平台?

筆者是長期的Linux使用者,對應用是否支援多平台非常重視。筆者認為一個優質之程式庫,必然是支援多平台(Multi-Platform)的。開發者往往各有喜好,根據2020 StackOverflow全球開發者統計,三大操作平台WindowsMacOSLinux都備受開發者喜愛,分別有45%27.5%26.6%的開發者使用。

Developer 調查,以 Windows 為最多人用

一個只在Windows可用的程式庫,就失去 53%的開發者青徠,一個只在Mac可用的程式庫,更是失去73%的開發者份額。很多程式庫因此都是三大平台一併支援,以「大包圍」的策略盡量拓展使用者基礎。 例如人工智能框架Tensorflow,就同時支援WindowsMacLinux三個平台。

Tensorflow 安裝頁面

除了操作系統之外,一個能夠在不同程式語言中使用的程式庫,也是多平台支援的表現。例如Microsoft推出的瀏覽器自動化工具Playwright,就能夠在JavaScriptTypeScriptPythonJavaC#多種語言中使用,比之前的Puppeteer只能在JavaScript/Typescript使用,又是更勝一籌了。

Playwright 截圖

總結

開源的程式庫在網上數以萬計,要選擇好,殊不容易,以上都是筆者的一些心得,大多數時間都可以選到一個不錯的程式庫,也不太容易與本文所言一樣「中伏」了,編程起上來就事半功倍。 不知大家又有何原則去選擇程式庫呢?

留言

閱讀更多

專家級新手

專家級新手

專家級新手
Gordon Lau 劉偉中
2019-03-19

今次要介紹的,是一個非常常見之現象,不論你是學寫程式、學做甜品、學寫文章,又或是練習球技、體能訓練等,都會經常窺見其身影。 想像一下:你的朋友問你:「你的駕駛技巧好嗎?比較起其他司機來說如何?」如果你本身有駕駛執照,但是不常常駕車,大概你會回答:「中規中矩吧,平均水平」;經常駕駛的人,因為經驗豐富,會覺得自己是中上甚至良好之水平。然而,這個想法人人都有,卻與現實完全相悖:因為任何羣體之中,必然有一半個體在中位數(Median)以下,而一項經典的調查發現,八成的司機都認為自己的駕駛水平在平均之上,這明顯代表在駕駛技術的世界上,大部份人都有自視過高的問題,也代表其實大多數司機,無法準確判斷駕駛技術之高下。


軟件工程師成長手冊

軟件工程師成長手冊

軟件工程師成長手冊
Gordon Lau 劉偉中
2019-04-29

筆者經常都强調軟件工程師有高下之分,不論技術或是解難能力都可以隨時日改善,亦曾大力鞭撻專家級初學者的無知,對軟件開發造成破壞。 初出茅蘆的軟件工程師及編程初學者想要改善自己技術,在茁壯成長的話,對自己技術層面有一個準確評價是至關重要,以免墮入「識少少,扮代表」的認知偏差。


學好手勢 == 學好Coding

學好手勢 == 學好Coding

學好手勢 == 學好Coding
Gordon Lau 劉偉中
2019-08-21

編程老手與編程新手在工作時,不論效率、思維方向、甚至打字速度都截然不同,不過在學習編程的道路上,有一個方面常被忽略,就是編程手勢(Coding Practice),有豐富實戰經驗的工程師,通常培養了良好的編程手勢,工作時,自然錯誤較少,也因為除錯得少,省略了不少寶貴的時間,整體結果也蔚然不同。


SQL首部曲:NoSQL? No! SQL!

SQL首部曲:NoSQL? No! SQL!

SQL首部曲:NoSQL? No! SQL!
Gordon Lau 劉偉中
2019-10-08

由本篇開始,接連四篇都是與SQL有關的文章,會想寫SQL的原因,是因為SQL在現今軟件開發及數據科學佔有舉足輕重之地位,卻總是在背後默默無名,從未見得到像其他新興技術之關注,有見及此,筆者決定介紹SQL之特點,順便破除一些對使用SQL上常有的誤解。


索取課程大綱
提交後, 請檢查你的電郵
hello@tecky.iot.me/tecky_hub+852 9725 6400
green_org
商界展關懷 2019-2022
英國頒證機構 TQUK 認可中心
aws_partner
薯片叔叔共創社 重塑教育挑戰大獎
B Corp™ 認證共益企業
無障礙網頁內容指引 (WCAG) 2.1 AA 級
香港無障礙網頁 金獎
© 2024 Tecky Academy Limited