為何卓越的軟體工程師開軟體顧問公司反而更不易成功?

Image for post
Image for post

昨日的成功要素不適用於明日的成功 (What got you here won’t get you there) 是美國知名 CEO 教練 Marshall Goldsmith 的名句,而這個概念也適用於我所處的軟體顧問業。我做軟體顧問已經一年多了,有時候也與同行交流。然而,最令我感到意外的一件事莫過於:「好的軟體工程師開軟體顧問公司似乎反而更不易成功」

要經營軟體顧問公司,勢必要解決兩個主要的問題:(1) 開發客戶 (2) 開發軟體。好的軟體工程師自然是善長開發軟體,可惜,這樣子只構成了成功條件的 50% 而已。

要成功地開發客戶,經營者勢必要有一定的行銷能力 (marketing skills)。要做好行銷,經營者必須專注於他的客戶、必須知道如何找到他的客戶、必須能夠與他的客戶有效地溝通。

然而,我個人所認識最好的軟體工程師往往有以下的特徵:
1. 投資大部分的專注力於軟體。
2. 吸收大量的知識,但是僅限於軟體相關的知識。
3. 身邊常常往來的朋友,超過 70% 也都是軟體工程師。

不幸的事就這樣子發生了:『昨日造就卓越軟體工程師的種種習慣與紀律,在開軟體顧問公司的時候,卻成為公司發展業務的最大阻礙』


人資最重要的功能應該是什麼?

Image for post
Image for post
Background vector created by freepik — www.freepik.com

如果你可以在 2000~2010 年,這十年之間於財星五百大企業裡,找到三位執行長 (CEO) 是由全職的人資主管 (HR executive) 晉昇的,那我就二話不說送你一本我親筆簽名的書。

— Million Dollar Speaking, Alan Weiss

如果你的人資主管要放一個很長的長假,貴公司會怎樣?很嚴重的事件嗎?另一個問題是:如果要放假的人是銷售主管呢?後面的這個問題,壓力感應該整個不同了吧?人資的功能是什麼?什麼是人資對於一間公司最重要的功能呢?

許多人資,心照不宣的問題都是:『他們擔憂自己對於公司的貢獻沒有受到上級的肯定。』這種擔憂是非常有道理的。人資的這個職位,本質上有兩個的問題:首先,這個職位的職稱意涵,就字面上的解釋來講,非常的偉大,但是實務上卻幾乎不可能實現。「人力資源管理」就字面上來解釋的話,彷彿像是這個職位的職責所在,是要激勵員工發揮潛能,讓員工成為公司不可或缺的資產。上述這種功能在大多數的公司,都很難被人資實現。畢竟,激勵員工在大多數的公司都是該員工直屬主管的職責。另一個問題是,一般而言,人資做了很多苦差事:包含招募、行政、員工訓練課程規畫等等。儘管做了那麼多煩雜的事情,卻沒有一項事情,它的重要性足夠影響一間公司的成敗。更糟的事情是,大部分歸屬於人資負責的事情,都只需要中階的管理能力。

產品品質靠品保、管理品質靠人資

在「什麼才是經營最難的事」一書中,提出了一個論點,該論點對人資工作的定義,足以讓人資對公司的經營非常重要。考慮產品製造流程:正常的流程總是會有品保一職,來對產品做最後的品質把關,而品保的職責就是負責說『這個不能通過』。品保不需要了解產品怎麼設計、不需要了解產品怎麼製造,他只需要能夠辨別,怎麼的產品叫做暇疪品,必須被挑出來。人資對於管理品質的重要性,應該要像品保對於產品品質一樣,他應該要在關鍵的時刻,指出管理上的暇疪。

有時候,我忍不住會想,「要不要我們乾脆重新定義一個新的職位名稱,叫做 MQA,是 Management Quality Assurance 三個字的縮寫。」然後,我們用這個新的職位來取代人資。這個改變最大的好處是,如此一來,公司的總經理終於可以不費力氣就了解人資的重要性了。

如果你可以不在意『公司的人資主管需要請長假』這種事,這是個好現象。然而,這個『能不在意的理由』最好不要是因為公司的人資主管不太重要,而是因為貴公司有一定的冗餘可以容許員工休個長假。這個冗餘有個富有正面意義的名字 — — 反脆弱性 (antifragility)


上班族的反脆弱策略

Image for post
Image for post

我有位舅公,叫做巫永福,是台灣的文學家,我小時候就聽過他有名的不聽話事蹟。巫永福的父親在日治時代送各個兒子去日本留學,其他的兄弟們都腳踏實地去念醫學系,只有巫永福本人超性格,堅持要念文學。巫永福的父親一氣之下,刪掉了他一半的生活費,讓他半工半讀念完大學,也讓他提前領教,什麼是『一簞食、一瓢飲』的文學家生活。多年之後,在巫永福的兄弟們之中,有當鎮長、議員、醫師的,但是,最出名的,莫過於當文學家的巫永福。

COVID-19 之後,抱怨台灣是鬼島的論點,比較少聽到了。台灣有什麼值得抱怨的?都市的房價很高、永遠買不起。大部分的行業沒有工會、沒有勞工運動、薪水永遠不會漲。私立大學的學費很貴、年輕人一畢業就揹學貸。然而,在不平等的制度之下,如果年輕人有做合適的策略規畫,在關鍵的決策婉拒長輩們的指導,卻可以得到還不錯的競爭優勢。

別貸款買房

要買房子的理由很多:一個家的感覺、不想要一直搬家、幸福感的來源、自己的配偶想要、大家都買了。房價會一直漲、現在不買,將來就買不起。付房租給房東就是讓房東賺錢。還有,最重要的,這是身為中產階級內心深處的符號消費需求:『求同於資產階級、求異於勞動階級。』

不買房子,除了要處理自己內心的掙扎、要處理租屋的麻煩事,最困難的點,也許是要與自己的配偶溝通。換言之,這個決定光是要執行,就得付出極大的溝通成本。

我主張別買房子的理由很簡單,主要就是減少風險、避免脆弱性,讓人生更有選擇權。人一旦有了貸款,風險就大幅上昇,選擇權就大幅減少。人生很長,有數不盡的風險,有沒有可能,有一天你會短期地失業,或是有其它較大的開銷,會讓你很難付出貸款?而如果在那個時間點,房價又下跌,在不好的時機脫手房子,一生累積的財產勢必大幅地損失。為什麼要為了一些可能機會、傳統的價值觀,而去選擇讓自己處於極度不利的風險之中呢?

平日就認真準備換工作

如果我們仔細去研究一下人類的歷史,身活在現在的人,應該是史上最有權力換工作的一代人。曾經有一個年代的人,工作綁著他們的種姓、綁著階級。換言之,法律與社會規範都不容許換工作。從這個角度來看,換工作是我們這個世代的一種特權。

資方與勞方往往並不對等。資方往往有更多的資源可在人力資源市場上做行銷工作、可以等待更久的時間。資方付出了上述的努力之後,自然可以在薪資的談判上取得優勢。換言之,如果勞方想要將自己的勞力,以合理的售價售出,也需要付出對等的行銷工作,更重要的,也要能夠等待。畢竟成功的行銷策略,也很難保証立刻成交。要談成好價錢,適度的等待是必須的。

沒有工作還可以過日子的策略,除了斜槓,比方說,兼做翻譯或是兼跑 ubereats 之外,更重要的是要避免大筆的開銷,這點就呼應了我前述的不買房策略。

迴避競爭

台灣的社會很喜歡強調勤奮的價值觀。成功的企業家還很喜歡嘔歌,『面對競爭時,拼事業拼到小便發黃的故事』。然而,競爭往往是企業的戰術,而成功的企業策略是要設法獨佔市場,讓自己不需要競爭。

我個人對上班族提出的迴避競爭策略,是利用人群的同質性。比方說,本身能力是善長與人溝通,而非善長與機器溝通的人,讓自己進入科技公司,然後,在一間大多數的員工都是理工背景的公司上班,自然就容易在該公司的銷售領域取得一席之地。又或是倒過來,善長程式設計的人,進入銷售部門工作,然後就順利成為銷售部門 ERP 系統的負責人。

迴避競爭跟好運有點像,或是換個說法,發現「值得投注努力卻又沒有什麼競爭的領域」本身就是一種絕佳的好運。要讓自己可以接觸到好運,大致上有二種技巧: 多吸收新知、常出去走動並認識不同的人。前者是讓自己準備好足夠的知識,當好運出現時,可以辨認出來並加以利用。後者是讓自己比別人先一步,接觸到機會。

台灣的社會制度並不完美。如果對台灣的社會制度做了通盤思考,租房並且平日就認真準備換工作的人,某種程度來講,就先行取得了居住、與薪資談判方面的優勢。反脆弱的哲學強調:『先求穩定,適度地曝險,等待機會』。適用於企業,也適用於個人生涯規畫。


Image for post
Image for post

『白板考』是一種用來檢驗軟體工程師是否會寫程式的方式。實施的方式有幾種,以前通常是在面試時,要求應徵者直接在白板上寫程式。而現在隨著愈來愈多像 Codility 或是 CodeSignal 之類提供白板考題的 SaaS 服務出現,許多公司已經透過這一類的軟體遠端地對應徵者完成白板考的測驗。在我寫這篇文章的時刻,愈來愈多台灣的軟體公司採用白板考做為招募員工的篩選機制。也因為如此,有心取得高薪的應徵者甚至不惜花費數月的時間,潛心練習刷題,以求能通過軟體公司的白板考題。

演變至今,許多的白板考題已經非常地困難,遠遠超出十年前白板考的平均難度,也遠遠跟工程師實際工作中所使用的技能脫勾了。一方面來講,由於白板考題非常困難,軟體公司對於應徵者可以只看白板考而忽略學歷這個指標。台灣長久以來被批評過度看重學歷的問題,在軟體業因為有白板考而得以緩解。至少我們有了白板考這個新的標準來取代學歷這個舊的標準。然而,對於要招募軟體工程師的公司來說,這邊有兩個很重要的問題值得認真思考: (1) 好的軟體工程師的定義為何? (2) 白板考題真的可以有效地協助我們找到好的軟體工程師嗎?

搜尋一下網路,有很多文章在探討什麼是好的軟體工程師。Perl 語言的發明者 — Larry Wall 曾經講過,好的軟體工程師有三大美德:驕傲、懶惰、沒有耐心。而 Stack Overflow 的創辦人 — Joel Spolsky 也曾經寫過一本,教人如何招募軟體工程師的書籍: Smart and Gets Things Done 。許多的定義側重於描述軟體工程師的特質,特別是好的工程師共同持有的特質。這些特質,很可能與工程師的能力有相當強的正相關。然而,一方面,相關性不能直接等價因果關系。另一方面,上述的部分描述,也很難直接利用於招募流程中,比方說,『沒耐心』也許不是應徵者會在面試時充分表現的特質。我們需要更好的定義。

從利害關係人的角度來定義好的軟體工程師

軟體工程師寫軟體給客戶、上級 (利害關系人)。從利害關系人的角度出發,利害關系人最在意兩件事:儘快交付、好的軟體品質。盡快交付意謂著生產力要高。而好的軟體品質則意謂,『軟體應該與規格一致、沒有臭蟲、符合執行期間的需求,比方說效能與安全性的需求、還要可以容許一定程度的改變。』新創公司往往比較在意工程師生產力的部分,而大公司則往往更在意軟體品質的部分。荒謬的事情在於,現在的白板考往往過度側重於難度,可以考倒大部分的人,但是卻無法有效地去檢驗利害關系人最在意的兩件事。更嚴重的問題是,白板考有時候甚至把好的軟體工程師拒於門外。好的軟體工程師依照上述的定義,是善長於達成利害關係人最佳利益的人,而不是善長透過白板考來証明自己頭腦聰明的人。

我們不會透過量測體重或是肌肉來去預測誰可以成為拳王。白板考只能檢驗程式設計能力之中很小的一個子集合,這就是為什麼單單依賴白板考無法有效地辨別好的軟體工程師。下一次,如果你真的想找到好的軟體工程師,先從利害關系人的角度定義所需的員工特質,然後根據這些特質來設計檢驗標準。盲目地依賴白板考來招募,跟盲目地看學歷來招募,基本上是差不多的事。


Image for post
Image for post
Background vector created by starline — www.freepik.com

在 Linkedin 上有一篇按讚破 2000 的文章,談到台灣的職場文化。作者是 Madhawan Misra ,他提到:「在台灣看到大家幾乎很少反對主管和其他高級職位的決定。我知道其實不管哪個國家上班,你不可以太直接反對,可是我的經驗是,如果其他國家員工的話,員工至少講出來他們不開心的點,或是不滿意的點。不過台灣的話,我很少、幾乎沒看到員工講出來自己的不快樂或是他們覺得不 ok 的點。」

看到這篇文章時,我心有戚戚焉。不由得想起了,我從 2009 年進入職場,在第一分工作時,就被主管嚴厲地訓戒:「身為一個工程師,如果只提出問題,而沒有同時提出解決方案,這是不被接受的!」於是,我對該文章寫了如下的回應。

在台灣,很常見且代代相傳的職場文化是這樣子: 低階的下屬如果提出抱怨、不開心的事、不滿意的 …


Image for post
Image for post

友人是位相當成功的高階白領,問了我這樣子的大哉問。創業與不創業都是職涯的發展策略,沒有所謂正確的道路,只有適不適合。我想了三個提問,先問問看他。

提問一:「價格」是怎麼決定的?

市場決定的。經濟學課本是這樣子寫沒有錯。但是,誰定義了市場的邊界呢?如果你提供的商品與服務可以充分差異化,有沒有可能你處在一個只有你與你的客戶的兩人市場呢?

上述的論証是相當抽象化的。回到一些簡單的情境來舉例:如果你用 1 元的成本,解決客戶的問題,而且可以對客戶造成 100 元的利益,那收取 10 元的費用,應該是相當合理的。從客戶的角度來看, 10 倍的 ROI 已經相當好了。是的,也許有人可以用更低的價格來解決同樣的問題,但是,客戶還依然有充分的誘因要去尋找更便宜的解決方案嗎?

提問二:什麼定義了「職場的階級」?

職稱定義了階級。只是這樣子嗎?有沒有別的答案?

彼得.杜拉克在 The Effective Executive 一書中,提出的見解則是這樣子:「只專注於自己付出的努力,並且強調上對下權威的人,無論他的職銜和階級有多高,終究只是個部屬。但是能聚焦於貢獻,並且為成果負責的人,無論他的資歷多淺,都可以說是『最高管理階層』,因為他願意以組織整體的績效為己任。」

提問三:你擁有的哪些東西,可以算是「資本」?

學歷、履歷、經驗與專業能力,就這些東西吧?

上述的東西,比較像是 business delivery 需要的能力。然而,要創業,很重要的一件事則是尋找客戶。尋找客戶、尋找投資人、合夥人等,這些都需要「人際關系」。人際關系或是建立人際關系的能力是 business acquisition 的基礎。人際關系的本質,是一種信任關系。大量信任關系的建立,往往要花時間來投資。也因此,學歷、履歷、專業能力是一種資本,而人際關系則是另一種資本。資本意謂著複利與槓桿。

友人聽完了我的問題,表示說,他回家會好好想一想,上述的三個問題,哪一個版本的答案會比較適合他。


Image for post
Image for post

你知道矽谷的創投教父 Paul Graham ,曾經寫過一篇文章,建議軟體工程師學習 Lisp ,因為使用 Lisp 可以擁有最高的產出,可以讓工程師超越平庸嗎?

你知道目前最流行、最多人使用的 Lisp 家族的程式語言,是哪一個嗎?

你知道 Clean Code 的作者, Robert C. Martin, 從 2019 年開始在他的 blog 上大力推祟哪一個程式語言嗎?

你知道全世界寫什麼程式語言的軟體工程師,平均薪水最高嗎?

課程目標
* 讓你學會 Clojure programming language 。
* 讓你成為同事心目中真正的資深工程師。
* 讓你轉換工作、爭取加薪都更有信心。

課程內容
* data-oriented functional programming (資料導向的函數式程式設計)
* Clojure development environment setup
* 除錯技巧、衍生議題

授課方式
* 前 4 週,一對一、面對面授課。每週分 2 次授課、一次 2 小時。
* 90 天內,回覆所有電子郵件的疑問。

授課地點
1. remote 視訊授課
2. 宏泰金融大樓 9F — 近捷運南京復興站

注意事項
* 授課內容不包含 leetcode 之類的白板題、白板技巧

價格 : 新台幣 50000 元整
退費方式
* 學員因故未能完成課程,照授課時數比例打8折退費。

FAQ
1. 為什麼要用 Clojure 來教?
程式設計裡,有許多重要的觀念、技巧、範式,在 Clojure 語言裡,都已經融合在語言之中了。如果用其它的語言教學,學習者反而容易受到其它語言的限制,而不容易學會最關鍵的概念。

2. 學 Clojure 的時候,都用什麼編輯器/開發環境呢?
我個人推荐 vim 。然而,除了 vim 之外,還有許多其它的選項。

3. 我本身是完全不會寫程式、零基礎,可以來學嗎?
可以。零基礎有時也有零基礎的優勢,因為不會被既有的成見所限制。

授課教師
Laurence Chen (陳家宏)
clojure.tw 社群重度參與者
ModernWeb 2019 講者
JCConf 2019 講者
JCConf 2018 講者

連絡方式: laurence@replware.dev


Image for post
Image for post

你經營的是一人公司,同時你也已經充分地了解,經營的初期,公司的網站不太會為你帶來訂單。它只是一個 marketing tool ,可以讓你的客戶容易查你的資料、讓你的客戶更容易了解你,但是它不會是一個 sales tool ,那這篇文章可以提供你一些指引。

要設置一人公司的網站大概需要考慮下列幾件事:
1. 網域名稱 (domain name)
2. 公司的標誌 (Logo)
3. 網站的內容
4. 虛擬主機、用來布署網站的平台

首先,我推荐網域名從 Gandi 購買。從事軟體業有十年了,對於軟體相關的採購,我通常也參考同行的建議。同行都推荐我用 Gandi 。我用了之後,確實覺得它的服務比之前用過的兩三家域名註冊商都好用得多。

Logo 的部分,我用了一個線上服務 TailorBrands 來生成。你可以輸入公司名稱、所屬的產業、還有一些它問你的問題。它會用 AI 自動生成很多組的 Logo/font 讓你選擇。敝公司 REPLWARE 的 Logo 就是這樣子做出來的,一個四方型又帶有不斷轉動的意涵。TailorBrands 的服務除了會幫你設計圖形之外,還會同時幫你選定這個圖形搭配的字型、與顏色。比方說,它幫 REPLWARE 選的字型就是 Ikra Slab 。它幫 REPLWARE 選的顏色就是藍、白、黑三種顏色。費用的部分,因為用不上 TailorBrands 的許多進階功能,我就只付費一個月,取得 Logo 的設計而已。

取得了 Logo 的圖檔之後,又衍生了另外兩個問題: 圖片去背Favicon

圖片去背我是用 remove.bg 來處理。對於我這種不喜歡操作 photoshop 和 illustrator 的人,真的是一大福音。

Favicon 是 favorites icon 的縮寫,亦被稱為 website icon (網頁圖示) 。我在從 Logo 製作 Favicon 的過程中,遇到了不少的阻礙,因為我做不出『透明背景』的 Favicon 。後來,我終於找到一個網站 faviconico.org ,可以順利地做出透明的 Favicon 。

網站的內容部分,我推荐大家參考 Million Dollar Consulting 一書的建議,寫四個重點做為網站的主要內容:
1. Your name or company name and photo
2. A brief list of typical client results
3. Testimonials, preferably video and brief, from buyers
4. Your value proposition

這四項東西,我覺得一開始比較難的,是客戶証言 (customer testimonial) 的部分。因為客戶嘴上說滿意,跟客戶願意給予社交認証 (social approval) ,這依然是不同的兩件事。

網站要在哪裡布署?這個問題視大家的技術能力而定。我個人可以直接開發軟體,所以我使用 github static pages ,基本上就是免費的虛擬主機。喜歡透過拖拉式元件來開發網站的人,現在也有許多的選項。然而,我會提醒大家注意一件事,就算你用桌機來開啟網站的時候覺得夠快,別忘記,請再用手機來開開看。以 wix.com 為例子,它做的網站,用手機來開就非常的慢。

然而,如果不喜歡用手刻程式碼的方式來使用 github static pages ,又很追求網站的品質,不希望自己的網站受到平台太多的限制。我個人推荐 Webflow 。 Webflow 應該是少數讓你可以使用高階抽象層 (也就是拖拉式元件),卻幾乎不會對網站美觀表現能力有任何限制的平台。Webflow 很適合有美術/前端背景的朋友使用。

對於「如何製作一人公司的網站」一文提到的各種技術或是工具有任何問題,也歡迎寄信問我。


Image for post
Image for post

最近我在家中上網,不時就會發生 Internet 斷掉的情況。經過詢問,才知道家人的電腦裡有大量的資料,要備分到 Microsoft OneDrive 上。思考了這個問題之後,一開始想的解法,滿暴力的。想說,我直接去設定家中的 IP 分享器,在 IP 分享器裡設定上傳頻寬 (upload bandwidth) 的上限。但是,轉念一想,又覺得怪怪的? 這樣子我豈不是把自己的 Internet 上傳頻寬也限縮了?

後來,我跟家人借了電腦,查了一下,發現 OneDrive 本身就支援做頻寬的限制。於是我查了一下家中華電信的帳單,確認家中網路的上傳頻寬的上限是 3M bps 之後,我就設定 1 M bps 給 OneDrive 。於是,我在應用程式的層級 (application level) 就把問題解決掉,不需要提高到 IP 分享器的層級。

設定完成之後,家人還很開心地跟我說,現在他用電腦可以把 OneDrive 打開了…意思是,本來他自己用電腦的時候,一打開 OneDrive,自己也會無法上網。


幾年前,我入職 intowow.com 的最後一場面試,面試官的最後一個問題:「你為什麼認為自己是一個好的軟體工程師?」那時沒有想過會被人家這樣子問,我就隨口回答:「軟體工程師有三大美德:『懶惰、驕傲、沒耐心』,這三種美德我都有,所以…」

雖然順利地過關了。但是,如果時光重來一次,考慮到面試我的考官是一位出色的經理人,我想這樣子作答:

經理人和軟體工程師在抽象的層次,有一些有趣的相似性。我認為,好的軟體工程師就像好的經理人一樣,了解其工作的本質。

首先,他們都可以利用「槓桿」 (leverage) 來達成「超高的績效」。經理人的槓桿是人力資源 (human) 。軟體工程師的槓桿是程式碼 (code) 。經理人可以管理的多大的槓桿,就像軟體工程師可以管理多大的軟體專案一樣,因人而異。少數人是多多益善。

經理人需要考慮「時間」這個維度,以平衡短期與長期的目標、需要回應外界的變化來改變策略和組織。軟體工程師也需要考慮「時間」,一方面讓軟體專案可以「準時上線」 (delivering on time),另一方面又要讓軟體專案的程式碼不要欠下過多的「技術債」(technical debt)。外界的變化在軟體的術語叫做「需求變更」(change of requirement) 。改變舊有的程式碼叫做「重構」 (refactoring)

經理人在做的事情可以區分成五種不同的任務:

  1. 設定目標
    經理人需要了解公司/自己的上級需要什麼,並且設定目標去協助達成公司/上級的目標。
  2. 建立組織 (以完成目標)
    經理人雇用人才、並且拆分工作、分配工作、設定權責,透過部屬構成的組織去完成目標
  3. 激勵、引導、溝通
    經理人也要擔任自己部屬的教練、引導部屬有效率地完成工作
  4. 考核
    經理人對部屬進行考核,獎勵高績效的、淘汰不適任的
  5. 培育人才
    經理人也需要為公司培育未來的經理人

軟體工程師聽取了「需求」之後,擬定出合理解決方案。將需求轉化為軟體規格書 (SPEC) ,這部分的工作猶如「設定目標」。

軟體專案需要根據「軟體的應用情境」 (use case),來設計合理的「架構」(architecture),這猶如「建立組織」。

實作軟體 (implementation) 是大量每日重複的腦力勞動工作、類似於經理人要不停地聽取部屬的簡報,開會與部屬溝通,激勵、引導部屬,以確保工作順利完成。

實作之後,需要進行測試 (testing),才能確認,軟體是否正確。這猶如「考核」

最後,軟體工程師也會將自己寫過的程式碼加以精鍊,提鍊成模組,設計成函式庫 (library)、或是軟體框架 (framework)。日後要解決同樣的問題,就可以利用過去開發好的軟體模組,從而大幅提高效率。這點近似於「培育人才」

經理人常犯的錯誤,也往往導因於上述的事情沒有做好。軟體工程師犯錯的模式也是類似:錯誤的規格、錯誤的架構、不良的實作、沒有測試都很容易導致軟體專案失敗。

Laurence Chen

客製化軟體開發/顧問諮詢 https://replware.dev

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store