開源概念為我們帶來了什麽?

相比傳統軟件一次收費或定期訂閱收費,開源軟件走的是截然不同的方向。而明顯的是,不同商業巨頭亦開始樂意走進這條新路。
Photo by Philipp Berndt on Unsplash

一般的用家可能會對 open source 開源這個概念感到疑惑:正常在市面上的軟件,不論是遊戲、文書、作業系統,通常都是收費,由以前一次收費到現在流行的 Software as a Service (SaaS)定期訂閱收費模式。這些軟件不會讓你直接接觸到軟件的源碼,所有源碼都加密好才推出市面,以免其他人能夠輕易複製自己的軟件作其他用途。有些公司甚至透過購買其他公司的源碼專利,以作為賺錢的途徑。

“Org charts” comic by Manu Cornet

不過,開源軟件就是走傳統軟件的相反方向:它任由他人取用軟件本身的源碼,在指定的軟件協定下(如BSD授權條款)保留一部分權利,而允許他人以學習、修改和以任何目的向任何人分發該軟件,並常常在網絡的互動社群中被公開和合作開發、改良。最有代表性的軟件莫過於網頁瀏覽器 Mozilla Firefox 和 行動作業系統 Android。

雖然有不少大型商業機構仍然禁止員工使用開源軟件,皆因其安全度未必能夠合乎這些機構的要求,而要事先進行大量安全測試。但是有如德國聯邦政府、巴西各政府、大學等都積極鼓勵員工使用開源軟件,除了減免一些購買軟件的費用之外,他們亦希望減少對外國公司軟件的依賴。

開源軟件漸漸受大型商業機構認可,甚至視為金蛋。今年7月 IBM就以每股190美元、 總值340億美元收購知名開源作業系統的開發商 Red Hat,以共同開發次世代的混合雲端平台。2018 微軟亦花了75億美元收購代管眾多開源軟件源碼的服務平台 GitHub,以擺脫多年來相對封閉的形象,亦強調 GitHub 會「加強對開發者自由、開放、創新程度」, 秉持開發者優先的精神,與微軟各自保持獨立的營運模式。由此可見,商業機構現在已經視開源為一種使到其本身得以活化的龐大資源。

Joining forces with IBM gives Red Hat the opportunity to bring more open source innovation to an even broader range of organizations and will enable us to scale to meet the need for hybrid cloud solutions that deliver true choice and agility. - JIM WHITEHURST, PRESIDENT AND CEO, RED HAT

RISC-V處理器原型

開源的概念亦已不限於軟件的領域,RISC-V就是一個 「開源硬體」的例子。同樣地,一般ARM和MIPS等商業晶片供應商因為設計CPU時牽涉不同專業範疇,所花的資源龐大,這些供應商自然要對使用其專利、版權的人士,收取高額的授權費用,才能得以生存。使用其具優點的設計檔案和指令集前,亦簽署保密協定,以保障供應商的權益。但這些傳統的保護手法,卻窒礙開發公共、低成本、自由及開放的源碼軟體編譯器和作業系統。 RISC-V 就在開拓「開源硬體」的前提底下得以誕生。

RISC-V 架構簡單、完全開源,允許任何人設計、製造和銷售RISC-V晶片和軟體而不必支付任何公司專利費之下,得到不少科技巨頭的支援。 Google、高通、微軟、華為、阿里巴巴、輝達等都加入 RISC-V 基金會。在印度政府的大力資助下,RISC-V 更成為印度的國家指令集。微軟亦以 OpenPOWER Foundation 的名義作為領軍, 推動其 Power微處理器架構發展,今年更宣布併入Linux基金會, 並以開源Power晶片的指令集架構(ISA) ,來實現無需支付專利費用Power晶片。

當前如ARM、Intel這類大型商業晶片供應商霸佔不少平板電腦、智能電話的處理器市場,而在IoT即將大行其道之下,晶片的需求更是與日俱增。 RISC-V、Power晶片等「開源硬體」的出現,正正能夠帶入晶片界的競爭,使得整體開發成本降低,在經濟方面有莫大的裨益,而開發成本降低有助推進如人工智能、超級電腦、資料分析以及 IoT 科技發展。

「開源硬體」亦解決當前一些地緣政治的問題:美中雙方的科技戰愈演愈烈,但在這些兩大政治勢力衝突底下,不少環球軟件、硬件公司遭殃。 2018年的中興事件以及華為事件, 更令中國不得不尋找新的硬件出路。

以RISC-V 基金會中國顧問委員會主席方之熙之言:

 一條就是關起門來自己做,典型的就是龍芯。因晶片還是商品,效能再高,沒人用就沒有價值,所以必須有相應的生態系統發揮價值。第二條路就是跟在別人後面,中國有許多公司做 x86、Arm、IBM Power 晶片,在某些特殊領域,用這些指令集架構確實可以做一些事,但受 ISA 所屬公司知識產權(IP)的控制,很難取得成功。

而 RISC-V 這類「開源硬體」 沒有知識產權的限制,使得如中國、印度等這類未有能力完全自製晶片的國家,得以在一定的共同基礎上,各自開發其晶片,減少對外來科技的依賴。這以使得各地的科技發展,能夠減少因為地緣政治的改變,而受到的各種負面影響。

而引入「開源」概念,亦能為本身科技偏向封閉的企業文化有所改善,使得用家能夠藉其公開的功能部分與其他產品比較。這能夠令到不同的科技產品可以透過公開驗證,增加本身的透明度以及市場競爭力。

開源這個概念能夠為我們帶來更自由、開放、創新的科技發展基礎,改善科技研發環境,同時能夠為已有科技產業注入嶄新的動力。可見將來各地的企業能夠突破以往的商業限制,整個科技的發展進程或能因此而有所裨益。


我們 ONEs Software 是一家香港的軟件開發公司,致力於通過我們專業的技術,為企業設計出最合適的軟件。如果您有興趣,歡迎與我們聯繫一起探討,為您的企業成長注入新的源動力。 更多資訊可以留意 ONES Publication 定期發佈的文章,亦可以聯絡我們,我們的網址是: https://ones.software

ONES Publication
We share what we have learned about app and web development. Find us in ones.software. Email: hello@ones.software

]]>

Code 寫得好對公司有用嗎?

tl;dr, 絕對有用!

Photo by Nate Grant on Unsplash

IT部門的同事間可能經常遇到這種問題,「究竟應該花多點時間去寫好編碼,還是應該快快寫好新的功能,往後才改善編碼的質素」,雖然大家心裏面都希望花時間寫好每一個功能的編碼,但面對開發時間永遠不足、上司的壓力,很多時就會無視編碼的質素,來成就新功能/新產品可以及早推出,然後就安慰自己之後才執拾殘局。不過程式員都是人類,難以敵不過「Later means never」這個定律,所以質素往往成為節省開發時間、成本下的犧牲品。

即使我們知道應該花時間一開始就寫好一點,但我們怎麼說服你自己、你的上司、你的老闆一開始的編碼質素是何其重要?寫下軟件工程界的大作之一《Refactoring – Improving the Design of Existing Code》的Martin Fowler 近日一篇文章《Is High Quality Software Worth the Cost?》就為我們提供了清晰的解答,軟件的質素其實是牽引住各種層面。

外部質素(external quality)與內部質素(internal quality

Martin Fowler首先將軟件的質素分開為外部質素和內部質素,外部質素指的是用家能夠看得到的,例如UI和程式缺陷,而內部質素即是用家難以分辨好壞的部分,例如軟件結構。

現今不少公司都很注重UI、UX的設計,因為用家很容易因為用得不暢順而氣餒,投訴甚至放棄使用。程式缺陷亦固之然是要盡量避免,也是因為這直接影響用家的使用體驗。相對來說,編碼結構的好壞藏在華麗的UI之後,用家其實難以知道軟件內部的編碼究竟寫得好不好。Martin Fowler舉例說兩個軟件UI一樣好,亦沒太多的程式缺陷,一個內部編碼整潔有序,賣10美元,另一個內部編碼一團糟,但賣6美元。既然用家都不能看到內部編碼如何,編碼是否整潔有序亦看似無礙軟件運作,誰會花多4美元去買前者?軟件公司又為何要花資源在軟件的內部質素?

技術債項 Technical Debt

內部質素與軟件持續開發

作為一個程式員,最花時間的工作理應就是處理、改動程式編碼,即使是全新的軟件開發,程式員仍需要在已完成的程式基礎上去編寫源碼。要加一個新的功能,首先要知道如何將新功能放入原本程式的流程裡,然後改動現有流程並放置新功能。而由於通常會接觸到/使用到原本的程式編碼,程式員不得不先理解程式是如何編寫。

問題來了,如果原本程式的內部質素奇差,邏輯紊亂,數據難以跟隨,程式員就要花很多時間去理解、使用原本的程式。這種程式當下的狀態與其理應狀態之間其差異,Martin Fowler 稱之為 cruft, 一種程式上的冗餘。他提到另一位著名的程式設計師Ward Cunningham 對cruft所提出的一種隱喻,Technical Debt 技術債項,因為當一位程式員為了各種原因去無視內部質素,其產生出來的技術債項會導致將來所有有份涉足該源碼的程式員付出更多時間去進行程式上的修改,這些額外所費的時間可視為技術債項的利息

內部質素對開發時間的影響

雖然用家無法直接體會到軟件的內部質素,但用家卻在意軟件新功能開發的時間,這就直接受到內部質素的影響。技術債項多,每一項新功能的添加就會附上相應衍生出來的利息,亦即開發時間增加,用家亦要等待同樣的時間才能使用到新功能。在這個情況下,技術債項少的軟件會比債項多的軟件更快推出新功能,而用家相對之下很有可能會轉用較貴但功能更多的同類軟件。路遙知馬力,技術債項多的軟件可能可以很快跑出,但往往輸在持久力上。

債項多少的差異,使到軟件持續開發進度的交叉點數週就出現

Martin Fowler指出,即使最好的開發隊伍,亦難免有技術債項的產生,皆因開發的時候很多時處於不確定的未知狀態,開發成員亦只有大概的概念去知道軟件需要什麼,只能夠見步行步,越後期迷霧才越散去,加上軟件所用的開發語言、資源庫、平台亦在開發期間不斷變更,就如興建大廈時,在興建好一半後大改圖則、建築材料一樣。

We made good decisions, but only now do we understand how we should have built it.

而成功的開發隊伍就會透過寫自動化測試(automated test)、重構(refactoring)、持續整合(continuous integration),以積極清除足夠的冗餘,令到新功能開發時間減低。在這個意義底下,內部質素高的軟件也許一開始的開發成本較高。但以長遠發展,高內部質素的軟件開發成本卻是比較低廉。

所以,各位程式員應該知道如何和上司解釋軟件質素的重要,而各位老闆亦懂得怎樣分配時間、資源在軟件開發吧?

Ref:

https://martinfowler.com/articles/is-quality-worth-cost.html


我們 ONEs Software 是一家香港的軟件開發公司,致力於通過我們專業的技術,為企業設計出最合適的軟件。如果您有興趣,歡迎與我們聯繫一起探討,為您的企業成長注入新的源動力。 更多資訊可以留意 ONES Publication 定期發佈的文章,亦可以聯絡我們,我們的網址是: https://ones.software

ONES Publication
We share what we have learned about app and web development. Find us in ones.software. Email: hello@ones.software
]]>

現在還值得為企業開發一套自家軟件嗎?

現成軟件與自家軟件的七種比較

Photo by Samson Creative. on Unsplash

在現今的商業世界,軟件是企業營運中不可缺少的部份。要決定您的企業是否購買現成的軟件,還是自行開發一套軟件,這可能是一項艱鉅的決定:自行開發一套軟件相對昂貴,但現成的軟件卻缺乏彈性。但為什麼還會有企業自行開發軟件?以下是一些現成軟件和自家軟件的七種比較,應能為您帶來一點啟示:

1.適合性: 為企業開發一套軟件最重要的好處,是它由開發人員根據您的需要和要求度身定製,以便滿足您的業務需求。一般企業從軟件供應商那裡購買現成軟件之後,不久發現該軟件根本不太適合他們的業務,這種情況屢見不鮮。企業人員多為了不浪費資源,而強行使用。而使用企業自行開發的軟件,就可以在軟件開發時確保該軟件能夠適合您的業務需求


2. 可擴展性: 自家軟件比現成的軟件包更具可擴展性。在自家軟件方面,開發人員會根據企業的基礎運營、商務邏輯來作設計軟件。因此即使企業業務規模的擴大,開發人員將可隨之持續維護及擴展軟件的功能。使用現成的軟件的話,企業通常會遇到軟件的維護問題,或者是因業務範圍的改變,部份業務需求未受軟件涵蓋,結果要加購另一套現成軟件,以作補救。所以自行開發的商業軟件能夠滿足您的企業需求之餘,同時允許您的業務持續增長,而不受軟件限制


Photo by Paweł Czerwiński on Unsplash

3. 安全性: 自行開發的軟件可以幫助保護您的企業免受外部威脅。針對企業軟件的黑客,大多數都是利用常用軟件中已知軟件漏洞來進行攻擊。而對於黑客來說, 自行開發的企業軟件就不是一個太有吸引力的目標,因為它需要相當多的時間來了解系統運作,而軟件開發人員亦能專為企業來制定黑客防護工作,比起現成軟件更為安全


4. 企業生產力: 能否使用適當的軟件,對工作效率可以產生極大影響。自行開發的企業軟件可以根據企業的運行模式,簡化使用操作,從而提高企業的生產力。而且開發人員可以根據軟件內的數據,專門制定您所需要的工作分析報告,工作效能就能夠以圖像、數字等方式展示,讓企業的管理團隊清楚了解公司的運作。這樣你就可以更有效率為企業制定發展方向

巿面上幾乎難有多個現成的軟件能夠簡單地將數據共享,而由於現成軟件並非為您的企業營運度身定制的,可能會導致員工因要適應軟件運作而使整體工作效率下降。若要分析工作數據,他們往往需要從不同的軟件得到資料再進行整合分析,這樣比較容易出現錯誤,無法有效地完成工作。所以自行開發的企業軟件就能有效避免這個問題,皆因它是可以專門配合您的企業營運。


Photo by Kevin Ku on Unsplash

5. 維護效率: 自行開發的企業軟件可以根據需要進行合適的維護。使用現成的軟件,您的企業只是使用該軟件的數千甚至上萬人中的一員,並且只有有限的開發團隊可以支援軟件修復,企業反而會受到軟件開發一方的制肘。如果他們決定不再維護軟件,您的業務將有可能馬上需要更換軟件。這對您的企業來說可能會出現額外開支之餘,更會有機會出現軟件無法正常運用的空窗期。毫無疑問,自行開發的企業軟件在這方面有很大優勢,軟件開發公司理應提供一對一的維護服務,這樣你的企業就可以確定軟件能夠有合適而及時的維護。


6. 額外成本: 自行開發的企業軟件可幫助您節省硬件購置成本。現成的軟件通常有特定硬件要求,這意味著您可能需要購買額外的硬件,以便有效在企業內運行。自行開發的企業軟件可為現有的硬件及功能制定程式,最終反而可以幫助您的企業節省金錢,因為企業不需要購買額外的硬件


7. 知識產權: 自行開發的企業軟件的知識產權能夠受企業全權擁有。使用自家軟件的話,您沒有必要與任何特定供應商合作,因為您是該產品的合法擁有者。而對於現成的軟件,您需要為每個用戶支付定期的費用,以維持使用軟件的權利。


Photo by Adeolu Eletu on Unsplash

You can mass-produce hardware; you cannot mass-produce software — you cannot mass-produce the human mind — — Michio Kaku, American theoretical physicist

總結

自行開發的企業軟件與現成的軟件相比,表面上可能較為昂貴,但長遠考量如員工的工作需時、硬件添置、甚至開發企業停止維護軟件的風險,自行開發的企業軟件無疑是企業比較合適的選擇。值得注意的是,在可擴展性上,軟件的開發、維護可因應企業的發展,而分階段進行。總體而言,自行開發的企業軟件更能夠幫助您的業務持續發展,奠定良好的企業基礎。

我們 ONEs Software 是一家香港的軟件開發公司,致力於通過我們專業的技術,為企業設計出最合適的軟件。如果您有興趣,歡迎與我們聯繫一起探討,為您的企業成長注入新的源動力。 

更多資訊可以留意 ONES Publication 定期發佈的文章,亦可以聯絡我們,我們的網址是: https://ones.software

ONES Publication
We share what we have learned about app and web development. Find us in ones.software. Email: hello@ones.software
]]>

軟件可以即要即用?企業級軟件訂閲服務 (SaaS) 的開發 (1)


自從 2006 年 Amazon 推出自家的雲端運算服務 AWS 開始,雲端運算徹底改變了傳統伺服器架構的使用方法。由每一次都要購買或租借一臺伺服器主機,變成想用多少伺服器資源都可以即時得到,並採納按照實際使用時間來計算收費的資源訂閱 (Subscription) 模式,大大提升架構系統的靈活度和資源分配效率。這種伺服器架構上的革命,造就了 Software as a Service (SaaS) 的興起。

在這種交付模式(即 SaaS)中雲端集中式代管軟件及其相關的資料,軟件僅需透過網際網路,而不須透過安裝即可使用。用戶通常使用精簡用戶端經由一個網頁瀏覽器來存取軟件即服務。--維基百科

雲端運算經歷了十餘年的發展,隨著各大科技巨頭如 Microsoft AzureGoogle Cloud 紛紛加入戰團,今時今日雲端運算服務已經發展得非常成熟。雲端運算能提供到一些普通伺服器不容易做到的功能,如專門處理大數據的資料庫 (Big data Database),以及針對地域問題的災難恢復 (Disaster recovery)。這些服務提供極高的彈性,方便了不少軟件開發商去開發新的軟件,而訂閱收費模式亦大大降低了初創企業入場的門檻。

https://www.cio.com/article/2991767/10-tips-for-running-a-profitable-subscription-based-business.html

由於雲端運算採取了訂閲收費,軟件的收費模式亦跟隨著由一次性 (one-off) 收費趨向以訂閲收費的形式來供客戶選擇。這個顯然是整個軟件業界的發展方向,例如 Microsoft 和 Adobe, 都將旗下歷史悠久的 Microsoft Office 和 Adobe Photo 分別轉為 Office 365Creative Cloud 這種訂閲式收費軟件。 新的訂閲模式的娛樂服務如 Netflix / Disney+ / Apple TV + 也不斷興起,而Google 最近發佈的 Stadia 更是企圖用訂閲收費的模式,來衝擊整個遊戲業界。

Every customer interaction is a marketing opportunity. If you go above and beyond on the customer service side, people are much more likely to recommend you. — — Stewart Butterfield, co-founder of Slack


雖然說軟件訂閲是一個大趨勢,但如何去建立一個成功的系統,就需要相當多軟件工程上的學問。和對普羅大衆的軟件不同,企業對軟件的要求會更加嚴格,因爲整個服務會影響到他們自身的日常商業運作,所以在建立這種系統時,需要注意的項目就比平時更多。今後我會在這裡和大家由以下的方向出發,去探討怎樣去建立一個穩健的軟件訂閲服務。

  1. 系統架構 (System architecture)
  2. 可擴展性 (Scalability)
  3. 高可用性 (High availability)
  4. 安全性 (Security)
  5. 監察與維護 (Monitoring and Maintenance)
  6. 持續發展 (Continuous development)

那麼,讓我首先講解一下系統架構所需要留意的事項。


系統架構 (System architecture)

建立軟件系統的第一步是設計好適合的系統架構,根據不同的商業需求 (Business Requirement) 所設計出的系統架構也會不同。但歸納起來,訂閲服務的系統架構的可以分爲兩大類:單一租戶模式 (Single tenancy) 多租戶模式 (Multi-tenancy)


單一租戶模式 (Single tenancy)

單一租戶模式 是為各個客戶設立一套獨立的軟件系統,他們會有獨立的數據庫、服務器、文件存儲空間等等。

安全且穩定: 絕大部分企業都會重視資料的安全和保密。單一租戶模式的好處在於每個客戶都有完全獨立的系統,不會有用戶之間資料發生衝突的情況發生,也不會因爲其他客戶的使用量增加而影響到自身的系統。單一租戶對於企業來説會是一個極具說服力的方案。

有彈性及易於管理:所有數據庫備份、系統還原的工作,或者其他的定制服務,單一租戶模式都能夠提供給予客戶。系統也能夠根據客戶的要求更改域名,或者安裝在客戶指定的雲端服務上面。而因為每個服務器都是獨立運作的,用戶可以選擇在不影響業務的時間帶,來進行系統更新。

單一租戶模式是一個直觀的方案,和傳統的系統分別其實不大,只是將系統由傳統的數據中心轉移到雲端服務之上,而雲端服務的成本也就轉化為系統的訂閲收費。


租戶模式 (Multi-tenancy)

和單一租戶模式不同,多租戶模式是以共用系統資源爲主,多個用戶會同時使用同一套系統

經濟實惠:在商業角度來看,價錢是相當重要的考慮因素,多租戶模式就能通過分享各個用戶的用量,來分攤成本。這就能將現有的資源得到充分利用,以避免服務器資源上的浪費。按照不同服務的性質而有差別,但採取多租戶模式的話,往往就能夠將伺服器的成本降至一成以下

迅速提供服務:訂閲服務講求的是能否迅速提供服務,使客戶在短時間内就開始使用是重中之重。 單一住戶模式可能需要數天的設立時間,並對系統進行整合測試 (Integration test)、負載測試 (Load test)等等的測試,才能確保實際運行穩定。而多租戶模式則是在已經運行中的系統中,添加新的租戶 (Tenant) 給予客戶。添加用戶往往只要數分鐘便完成,而且系統的穩健程度就得到確保。

容易監察、維護及更新:完善系統的監察亦是確保服務質素的重要一環。在多租戶模式下,開發者只需要監測一組伺服器的狀態,便可知道所有客戶是否能正常使用系統。而當要修正系統時,只要將修正配置到一組伺服器上就能解決問題,不需要針對個別客戶進行修正。

用戶回饋和產品發展:多租戶模式往往可以使得產品有更高速的成長速度。每當新功能完成並配置到系統上,所有租戶也能即時受惠。而功能亦能啓發用戶提出新的需求,開發者能根據這衆多的用戶回饋去分析和開發新的功能。

雖然多租戶模式下的系統是分享了各種資源並降低成本,但要注意的是用戶的資料是必須做好區分。例如可以使用同一個數據庫伺服器,但每個客戶的數據庫必須分開。文件存儲亦是同等狀況,每個客戶儲存文件的文件夾必須分開。即使在資源共享的情況下,數據的安全和保密還是最重要的考慮。


如何取捨?

Photo by Victoriano Izquierdo on Unsplash

兩種都各有優點,但實際要建立一個系統的時候,到底應該如何取捨呢?恕我直言,我是傾向支持開發多租戶模式,原因是多租戶模式本身是可以作爲單一租戶模式來使用。

不同的客戶對系統會有不同的要求。如果有客戶提出必須有一個完全獨立的系統時,你可以爲一個客戶另外設立一組伺服器。這組伺服器只是爲了服務這客戶而設,並限制只有該客戶才能使用這個環境,不會添加新的租客。這樣多住戶模式就能簡單地變成單一租戶模式來使用,各取優點。

總結

現在多租戶模式的應用是大勢所趨,Slack、Office 365 ,這些軟件都是採用這種系統架構。這樣才可以控制成本,以維持市場上的競爭力。

多租戶模式似乎有絕對的優勢,但實際上做出一個穩健的多租戶模式系統並不容易,對開發者的系統架構能力也有很高的要求。而系統有任何問題也會影響到全部的客戶。例如系統如不採取一個有效的方法,去將用戶的流量分流到不同的數據庫的話,極有可能會令到系統本身出現混亂,往後亦難以作出維護。

我們之後會和大家介紹多租戶模式的實踐,由原始碼的層面出發,去看看如何做出一個穩健的多租戶模式架構。更多資訊可以留意 ONES Publication 定期發佈的文章,亦可以聯絡我們,
我們很樂意提供相關的專業意見:https://ones.software/hk/bookings-one/


ONEs software。香港軟件開發團隊,提供專業的軟件開發服務。包括手機應用程序開發,網頁開發和定制軟件開發。 https://ones.software/zh-hk

]]>

到了2019,企業還需要哪種手機應用程式?

Photo by Yura Fresh on Unsplash

由2008年 iOS App Store 開張至今,十多年間手機應用程式的數量,不論是Android 還是 iOS 的平臺上,都已經達致200 萬個以上。今天,都市人每日都透過手機上網去做各種各樣的事,網上理財、Facebook IG、打機拍片、買賣交易。有些人可以忘記帶錢包出街,但不能不帶手機出街。所以對於大小企業來說,不論對外的客戶還是對內的員工,手機應用程式還是一種不可或缺的重要媒介。

Your mobile device has quickly become the easiest portal into your digital self. — — Phil Nickinson, Editor of Android Central

手機應用的開發也風靡一時,在2012年前後,開發到一個便利易用的手機應用程式,近乎等同掘到第一桶金。時至今天,手機應用開發逐漸衍生出不同的類型,客戶能夠按照自己不同的需要、資源、開發時間等等,去選擇適合該企業手機應用的開發類型。以下就讓我介紹一下各種應用程式的開發類型,好使大家能夠找出合適的應用程式。


原生應用(Native App)

(來源自:http://uatblog.nubizsol.com/index.php/2018/12/24/hybrid-mobile-app-development-by-nubiz-specific-to-the-time-and-customer-needs/

原生應用(Native App),意指用該手機系統原生的程式去編寫應用程式。由最早期 iOS 的 ObjectiveCSwift,或者 Android 的 Java 到 Kotlin ,都是最直接的開發方法。而理論上,原生應用理應可以最有效地利用到手機的所有性能,而達至最佳的手機用戶體驗。

原生應用可以緊隨著手機系統的升級而改變,所以它能夠比其他類型的應用程式,更能盡用手機本身的功能。例如這幾年相當流行的機器學習(Machine Learning),還是擴增實境(Augmented Reality/AR),這些功能都是原生應用可以第一時間使用得到。

但相反地,原生應用的弊處在於開發成本較大。在 iOS / Android 各據市場一方,有時甚至要顧及 Windows 用家的時候,除非在特殊的要求下,否則基本上是必須同時支援兩個平臺以上的用家。在多個平臺都要分別開發的情況下,開發的成本與時間翻兩倍亦屬平常。

原生應用程式的例子有:Camera+, iCalender


混合應用(Hybrid App)→ 跨平臺應用(Cross-platform App)

當原生應用其時間和開發成本上的問題越趨明顯,市場自然有相對的解決方案應運而生,而這就是混合應用(Hybrid App)

混合應用的基本概念是在手機裏面放置一個網頁瀏覽器,透過這個瀏覽器就可以去開啓一個模擬手機應用的網站。因爲瀏覽器在手機來説是共通的,所以把主要能夠共用的程式,都以網頁的形式呈現。而網頁未能實現的功能,就用該平臺的原生程序去編寫。以同時推出 Android、iOS 兩個平臺的應用程式為例,混合應用能以大概1.5倍的開發成本和時間,就能做到原生應用兩倍的效果

在2015年,使用 AngularJS + Cordova 作爲根基的 Ionic 曾經瘋魔一時,以 Ionic 編寫的應用程式大量湧現。然而當時混合應用的核心問題,在於用戶介面表現的效能。當時的 Android、iOS 的瀏覽器性能上都非常有限,在用戶體驗上,混合應用會較原生應用差得多。有經驗的手機用家,也許一眼就能看出哪個應用程式是否混合應用。企業形象亦有機會因為其混合應用程式的用戶體驗較其他遜色,而有所減損。

為了減省開發成本,而又不放棄用戶體驗各個手機應用程式公司不斷摸索,其中跨平臺應用(Cross-platform App)可說是混合應用的後繼者。和混合應用的最大不同之處,在於它們針對用戶介面體驗上進行的改善,不再使用網頁和瀏覽器,而是提供一套共同的用戶介面開發框架,給開發人員去編寫出原生的用戶介面,這樣大大改善了混合應用在用戶體驗上的不足。Facebook 的 React native, Microsoft 的 Xamarin,Google 的 Flutter 或者 Vue Native,這些都是跨平臺應用的開發框架。

不過,這些開發框架雖然都聲稱自己是原生應用的開發工具,而它們在用戶體驗/性能上也和原生應用相當相近。但跨平臺應用往往需要至少幾個月的時間,才能支援最新的手機功能,始終不如原生應用來得快。企業如需要追求應用程式能夠使用最新手機功能的話,就要留意應否採用跨平臺應用的開發模式。

即使如此,跨平臺應用依然能達到現在超過 9成以上用戶的需求。大家經常接觸到的手機應用程式,包括 Instagram, Evernote, UBER, Twitter, Netflix 等等,都是屬於跨平臺應用,可見跨平臺應用已是今天開發模式的主流。


網頁應用(Web App)→ 漸進式網絡應用程式 PWA(Progressive Web Application /PWA)

(來源自: https://developers.google.com/web/progressive-web-apps/)

網頁應用(Web App)講白了就是單純的一個網頁,不過這種網頁多用所謂單頁應用 (Single page Applications/SPA)的框架來建立。隨著這幾年手機上的瀏覽器發展越來越進步,網頁應用已能夠給予用戶相當接近手機應用的感覺。

在效能層面上,現在的瀏覽器下網頁應用的效能已經比幾年前進步不少,但當然還是遜色於上文提到的兩者。以功能方面來看,網頁應用也有很多未能做到的功能,例如讀取 QR Code、藍牙裝置信息等等,亦無法利用如 Apple Store/Play Store 的付費功能。但如果企業的應用程式只是如購物網般以文字、圖片等簡單數據為主的話,網頁應用絕對是一個不錯的選擇。

基於網頁應用的優勢,iOS 和 Android 亦作出相應的性能強化,於是 就有漸進式網絡應用程式(Progressive Web App/PWA)的出現。當你使用 iOS 的 Safari 或者是 Android 的 Chrome 去瀏覽網頁時,用戶可以選擇添加該網頁到手機桌面上,這樣網頁就會以一個類似手機應用的模樣出現。對於一般用戶而言,PWA 看上去和其他手機應用程式沒有分別。而這些應用程式還可以用到很多原生應用程式才有的功能,如推送信息、讀取坐標、相機拍照、運用手機指南針等等。

網頁應用/ PWA 還有一個相當突出的優點,就是不用透過 App store 下載就能直接使用。現在用戶拒絕下載手機程式的原因有很多,譬如上網流量有限、電話容量不足、手機已經安裝過多應用程式等等。而網頁應用/ PWA 就是省卻這些用戶的顧慮,用戶可以簡單到只要掃描一下QR Code,又或者在 Google 搜索一下就可以開始使用。這種快捷的體驗,對宣傳新產品來説,是相當有效。

最重要的是,網頁應用的開發成本和時間是各種開發模式之中最短的,用最低的成本,就可以支援近乎所有的手機平臺,甚至電腦桌面都能同步使用,很適合一些如網絡購物、預約房間等等不需要用到手機很多功能的服務使用。不妨嘗試用手機去Starbucks 的網頁 https://app.starbucks.com, 來試一試 PWA 的威力。

PowerApps

除了面對大衆的應用程式外,現在很多公司都積極尋求給予内部員工使用的應用程式,例如員工申報開支、請假等等,以方便公司内部管理和運作,而Microsoft 的PowerApps正正就符合這些功能。

PowerApps 其實是附屬 Microsoft Office 365 的應用程式,員工只需要上 Apple store/Play store 下載 PowerApps 並登入,PowerApps 就能提供一個比較簡單的用戶界面,管理人員可以在 PowerApps 上放置各種小型應用程式,員工可以透過這些應用程式去處理日常公司事項。PowerApps 也會和 Office 365 的 OneDrive / SharePoint / Power BI 等等有互相的聯動,以構成一個一體化的系統,管理人員則能透過 PowerApps 所產生的各類報告以得知公司的運作。

( 來源自:https://powerapps.microsoft.com/en-us/blog/powerbi-powerapps-visual/)

固然,PowerApps 的開發成本是普通應用程式的 20% 而已,但其主要成本反而來自 Microsoft Office 365 定期的訂閱收費,皆因每個使用 PowerApps 的用戶,都要有其 Office 365 的賬號才能使用,成本自然不菲。但如果閣下的企業本身已經使用 Office 365 的服務,而又想利用一些應用程式去方便公司日常運作的話,PowerApps 還是一個不錯的選擇。


遊戲開發引擎

Unity和虛幻引擎(Unreal engine),這些開發引擎都是專門開發遊戲用的。它們所支持的平臺不局限於手機應用,甚至可以於 PlayStation / Switch / Steam 等遊戲平臺實現。現在常見的跨平臺遊戲很多都是以這類型開發的,這類型的應用強項在於 3D 的表現和遊戲運算,不論遊戲開發,還是一般手機應用程式亦能使用到。如 MinecraftPUBG 這些膾炙人口的遊戲,都是用 Unity / 虛幻引擎來開發的。


總結

手機應用程式開發類型比較 (2019)


ONEs software: https://ones.software/hk/bookings-one/

]]>