大家好,我是卡米哥,LINE 官方認證的 API 專家,LINE API Expert。目前在維護基於 Rails 的 LINE Bot 框架 Kamigo

身為一個軟體開發者,我一直以來都想知道我的價值到底在那裡。在我長期的觀察和思考,終於有了一個初步的答案,若站在老闆的角度來看,我的價值其實就是我寫下來的程式碼總共幫老闆賺了多少錢。

軟體開發者的價值 = 用程式幫老闆賺了多少錢

因為老闆僱用你,就是希望你可以幫他打造一台自動賺錢機器,然後靠機器運轉來達成自動賺錢。若要深入探討的話,我想先談談什麼是價值,以及什麼是程式語言,從思考一行程式的價值開始,到思考軟體開發者的價值。

什麼是價值

價值的定義有非常多種,為了說明概念,我選擇較單純的一種,以貨幣作為所有價值的單位,藉此觀察價值是從哪裡生成。大家若對價值有不同的想法,可以自行替換,不影響整個邏輯。

以雞排店為例,當店員生產出一個 60 元的雞排並且販售給顧客,顧客願意為了吃雞排而付 60 元,就是雞排的價值。顧客願意花 60 元買雞排,表示吃雞排所獲得的滿足感大於 60 元,如果吃雞排的滿足感小元 60 元,顧客就會覺得這個雞排不值 60 元,寧願不吃,那麼交易就不會成立了。

店員的生產並銷售一個雞排所生成的價值:

價值 = 收入 — 生產支出 — 銷售支出 — 其他支出

再次強調,在這裡為了說明概念,我選擇較單純的模型來說明,生成的價值就是淨利,而淨利就是收入 — 成本,所有的價值都以貨幣為單位做計算,包含吃雞排的滿足感也都以貨幣為單位。

以上述公式來說,若想要提升價值,則有以下可能:

  • 增加收入
  • 減少生產支出
  • 減少銷售支出
  • 減少其他支出

若想增加收入,就需要提升雞排的品質,只有提高顧客吃雞排時獲得的滿足感,才能使顧客願意付更高的金額;若想減少生產支出,就需要在品質不變的狀況下,對雞排的生產流程進行最佳化,減少不必要的步驟,降低生產所需的資源(如工時、原料、水電、空間)消耗;銷售支出是為了賣出商品所需支付的所有成本,主要是交易成本和獲客成本,例如結帳流程、金流以及物流支出、行銷和廣告費用等;而其他支出項目的存在僅為了消除公式的不完整性,不是本篇文章的重點。

這個簡單的模型定義了做什麼事能產生多少價值,大家可以把注意力放在價值是什麼時候產生的這點上,當你知道某些事情只要一直做就能產生價值,那麼只要把這件事交給電腦做,是不是就打造了一台自動跳錢機了呢?

財富密碼:重複做賺錢的事,一直賺錢一直爽

價值是動態的,價值當隔壁開了一間新的雞排店,炸出來的雞排比我們的皮脆肉嫩又多汁,價格還比我們便宜,那我們的雞排就賣不出去,所有生產雞排的設備,其價值就趨近於回收價格,這就好像在沙漠中水的價值會上升,是一樣的道理。

環境會影響供給和需求,供給和需求影響商品或服務的價值,當環境隨著時間變遷,價值也就隨之變動

什麼是程式語言

程式語言,是讓我們可以跟電腦溝通的語言,也是人類目前叫電腦做事情的方法。如果要說一個比喻,那麼軟體開發者寫程式語言,就相當於在教電腦學會工作;而在電腦上執行程式,就相當於電腦正在發揮其所學,努力工作!

程式語言就是教電腦學會工作的語言

若有一件事原本是人類做,當這件事改為電腦去做時,我們會稱之為「自動化」。為了使電腦能順利工作,在「自動化」之前還得要先做「數位化」,讓輸入的資料以電腦能夠讀取的形式存在,這算是為了使電腦工作所需支付的前期成本。

財富密碼:把賺錢「自動化」,自動跳錢就更爽

電腦做事的效率比人類快,品質又能夠達到一定的水準,且能夠長期穩定、24 小時不間斷的工作,若想要在短時間內完成更多的工作量,在目前的雲端基礎之上,我們甚至還可以透過臨時租用大量機器來完成臨時的大量工作,這就是程式的價值所在。

用超低薪雇用不會抱怨偷懶的打工仔,超棒!

程式的價值

在我之前的工作經歷當中,大部分時間是在做新創公司的案子,而新創公司的客戶數通常趨近於零,我曾經開發並且上線一個新的網站,卻始終沒有用戶真的去使用,經營了一兩年,結果測試環境上的資料還比正式環境上的還多,在這種情況下,即便程式的效能再好,沒人來使用的網站所產生的價值其實是趨近於零。

沒有人在用的程式,產值是零

當時是案主付錢委託我們開發網站,所以我們有收到錢,只是網站並沒有替案主賺到錢。我們採用的技術很好,自動測試也寫的很完整,卻做出了一個垃圾,而在此同時,我接了另一個案子的長期維護,這個專案裡程式的架構很亂,欠了一堆技術債,而且都沒寫測試,但是客戶人數足夠而且一直有下訂單,所以反而這個案子就有在賺錢。

即便是充滿技術債的程式也能產生價值

於是我就悟出了這個道理,一行程式碼的價值,就是從程式被寫下,到程式被修改或刪除前,總共被執行的次數 * 執行一次所生成的平均價值。

程式的價值 = 執行次數 * 執行一次生成的平均價值

若程式碼有 Bug,則執行的價值可能會變成負的,例如自動刪庫,這種事情發生後就是要跑路了XD

軟體開發者的價值

一位軟體開發者所寫下的所有程式,被執行的次數 * 平均價值,就是這位軟體開發者帶來的總產值。因此我們可以知道,寫出滿足規格、含測試、良好模組化、良好文件、可維護的程式碼,可以使一行程式碼在專案內存活的更長久,存活越久的程式,理論上就能被執行越多次,就能使程式的價值最大化。當然,另一個想法是寫出滿足規格但無法維護的程式,那麼至少在規格改變之前,沒人敢動這段程式 XD

軟體開發者透過技術力來決定程式的壽命

軟體開發者的價值 = 所有程式價值的加總

你可以透過提升開發速度,或者提升程式碼品質來提升自己的價值,提升開發速度的方法有很多,除了讓自己熟練開發流程,熟悉你的開發環境,例如文字編輯器的各種快速鍵,讓你寫程式看起來就像是 speed run 玩家之外,你也可以大量使用別人已經寫好的程式,例如使用各種方便開放原始碼的套件,不論是免費或者付費的都很有幫助。你甚至可以叫電腦幫你寫程式,例如自動完成、程式碼產生器以及 lint 之類的靜態檢查工具。

軟體開發者透過提升開發速度和品質來提升價值

若想要最大化軟體開發者的價值,還需要慎選環境,因為通常是你的主管或者老闆告訴你要寫什麼程式,你可能無法對規格有任何意見,你可能無法決定這個程式將會被執行多少次,以及每次執行所產生的價值。這通常與職位定位、產業別以及公司規模有關,運氣好的話可能有與主管溝通的機會。雖然你在一家公司內可能不能決定要寫什麼程式,但你可以選擇要去哪一家公司寫程式,去能被執行最多次,且單次執行所生成價值最高的專案寫程式,則可以最大化自己的價值。

軟體開發者通常透過選擇環境來決定程式的執行頻率以及單次執行生成的價值

善於溝通的軟體開發者可以改變環境

而想要最小化軟體開發者的價值,則只需要寫出一堆含有 Bug 的程式,再出幾個大包讓公司賠錢即可,從刪庫到跑路,賠錢總是比賺錢簡單許多。

比起零產值的軟體開發者

更慘的是負產值的軟體開發者

軟體開發者是主管,管理電腦而不是人類,軟體開發者透過程式語言教導底下的電腦們如何協同工作。電腦是最笨最乖最聽話的員工,你叫電腦做什麼,電腦就照做,只要你講的足夠清楚,電腦就能把事情做好。

總結

身為一個軟體開發者,除了努力學習寫出良好的程式碼之外,選擇到一個對自己有利的環境下發展,或設法改變現有的環境,是非常重要的功課,不僅僅只是考慮如何使當下的價值最大化,甚至應考慮最大化未來的價值。

努力很重要,但慎擇環境比努力更重要

大家如果喜歡本次的分享,請按讚拍手,謝謝。

--

--

給高中生和大學生們的建議

這是我 4 年前在 FB 寫的舊文,轉發到這裡

最近有個高中生粉絲來信問:「我對遊戲設計有興趣,想要做聊天機器人,想知道大學選校選系應該要怎麼取捨?特別想知道資管系的情況。」這應該是大多數學生都會有的問題,我就在這說說我的想法。

學校能給你什麼資源?

學校能給的資源大概就是課程、顧問和同學。

課程

每個學校對於大學資管系的課程安排不同,我不確定其他學校的情況。以我讀的台科大資管系來說,前面兩年教的東西是更理論、更基礎,有點像數學和邏輯的東西(資料結構和演算法),以及電腦從以前到現在的歷史(計算機概論)。要到大三、大四才會開始有比較多的應用課程,應用課程的特點是一定要交作品、做期末報告、上台 Demo。學校設計的課程可以給你一個紮實的基礎,讓你在實作的路上比較順利。

顧問

有問題不懂就問同學,同學也不懂的話就問教授,教授也不懂的話就問助教,趁問問題不用錢趕快問,畢業之後什麼問題都要錢。

同學

在學校,你最常接觸的人其實是你的同學,如果你的同學很強,很強代表豐富的知識或者優良的人格特質,你跟這群人一起相處,多少都會受到一點影響,默默的你也跟著變強了。

對於學習應該抱持什麼心態?

不要期待課程

老實講,學校安排的課程,大部分的人會覺得說:「甘我屁事,我幹嘛學這個。」在學校上課不認真是很正常的,因為你不需要知道這些也可以活得很好。所以通常是課上完了都沒在聽,日後真的需要用到了才在後悔當初。

這些課都不是你自己選的(搞不好連學校都是你媽幫你選),所以沒有學習動力是正常現象,成績不好也不用太在意,你有興趣的科目能顧好就好了。

自己學

在自學資源充斥整個網路的時代,網路上的資源(youtube、google)其實已經比學校多了,如果有熱血想要做點什麼就應該直接去做。不要期待學校會剛好開出你想學的課程,你想學就去網路上找資源自己看。

看一看有問題,其實也不一定要問同學、助教或教授。在網路上的社群發問,也有很多人會回答問題。你應該把你的時間用來自學,而不是學一些你不想學的東西。所以建議是如果你想要寫點程式做點東西的話就趁你還有熱血的時候直接開始,到時候上課再問爆老師,才不會浪費學費。

動手做

當你開始作事的時候,你才會感覺到你的能力不足,這會讓你產生主動的學習意願。你的學習是有意義的,你所有的學習都是為了把東西做出來。如果這種時候「剛好」有對應的課程,老師又不是亂教的話,我相信任何人都能學得很好。

做什麼

從模仿中學習是最有效的學習方式,不知道要做什麼的時候,你可以仿造一個你喜歡的東西。你想模仿什麼就直接做,不知道怎麼做就 Google 或問人。做出來之後,有作品的新鮮人,找工作都是秒找。

學用合一

先動手做,再去學。只有當你要使用的時候,你才會知道為什麼你要學這個。這種時候你才有動力去學,有動力才有機會學得又快又好。你要在上課之前找到學習的動力,所以趕快去做點東西。

英文很重要

因為很多學習資源都是英文,如果找不到中文資源就要開始找英文的。如果你英文不好,其實不用太在意,你只需要讀那些內容對你有用的英文,內容對你沒用的英文根本不用去讀。再來是你用什麼手段去讀都無所謂,看得懂最重要。你可以用 google 翻譯或其他的翻譯工具去看,花時間看懂你想看的文章就好,重點是不要看到英文就排斥不去讀。

證明自己的價值

你透過作品直接證明了你的實力,這比畢業證書還要有說服力。因為在台灣,學校的畢業門檻很低,導致畢業證書沒有鑑別度。到最後你會發現你的作品遠比你的畢業證書有用。

--

--

大家好,我是卡米哥,LINE 官方認證的 API 專家,LINE API Expert。目前在維護基於 Rails 的聊天機器人框架 Kamigo

LINE DEVELOPER DAY 是 LINE 對開發者舉辦的年度大型研討會,之前是在日本舉辦實體研討會,LINE API Expert 們都會受邀去參加,不過去年跟今年都因為疫情的關係改成線上舉辦。

由於是線上舉辦的關係,讓大家可以不受時空的限制,只要在家裡就能夠參加。所有議程的內容都放在 LINE DEVELOPER DAY 2021 的官方網站上,即使活動結束了,影片都可以重複觀看。

LINE 很貼心的幫所有的議程準備了三種語系的配音,分別是英文、日文以及韓文配音,這樣大部分的開發者就都能聽得懂議程,就連簡報檔也直接免費公開給大家。

大部分的議程是分享一些 LINE 相關的產品或服務的設計理念、內部使用技術細節、使用教學、未來的發展方向等,都是非常精彩、值得一看的議程。

以下我就簡單摘要其中一個議程:For Improvement of Developer Experience of All LIFF App Developers,這個議程的講者是 LIFF 團隊的產品經理和前端工程師,主要是在講如何提升 LIFF 的開發體驗。

首先是列出目前 LIFF 在開發上會遇到的各種問題:

LIFF 目前的問題

LIFF 的開發團隊針對這些問題,一一提出了解決方案:

--

--

以 Node.js 開發的 LINE Bot 為例

作為前情提要,請先閱讀由和風信使-戴均民提供的詳細步驟的教學文件:

  1. 讓聊天機器人也能看 Google Analytics (1)
  2. 讓聊天機器人也能看 Google Analytics (2)

根據文件的描述可以知道,只要打出 POST Request 到 https://www.google-analytics.com/collect ,並且傳遞對應的必要參數,就能夠從伺服器端新增一筆紀錄到 Google Analytics。

但是原作者說在 2021/6/17 之後,這個方法就失效了,在發出 Request 後,無法在 GA 上看見對應的紀錄。

為此,我分別透過 Insomnia、Ruby、Node.js 打出對應的 Request,並且比較其結果,結果發現 Insomnia 跟 Ruby 可以正常新增 GA 紀錄,只有 Node.js 不行。

觀察了一下個別打出的 Request 之間的差異後,逐步調整打出的 Request,最後發現只要在 Headers 內的 User-Agent 包含 fetch 或開頭為 axios/,GA 就會不工作。

所以,最後我使用的程式碼如下:

只要把 Node.js 偽裝成 Ruby 就可以用 GA 了哦!

Google 到底在幹嘛?

--

--