[好書分享] 刻意練習:原創者全面解析,比天賦更關鍵的學習法(Peak : Secrets from the New Science of Expertise)

刻意練習
原創者全面解析,比天賦更關鍵的學習法
Peak : Secrets from the New Science of Expertise
作者: 安德斯‧艾瑞克森、羅伯特‧普爾  原文作者: Robert Pool、Anders Ericsson  譯者: 陳繪茹  出版社:方智出版

買書推薦網址:http://moo.im/a/5dvIOY

前言:

這一本是今年所讀完的第九本書。 經常聽到人家說「一萬小時法則」,還有 Kobe 與 Leborn 就算擁有著令人羨慕的天賦,依舊在聯盟裡持續不斷的鍛鍊。來維持自己高效能的表現。

那是不是只要一直花時間就好呢? 事實上可能不是如此。你需要將練習的精力花在正確的地方,那麼這本書就是在探討該如何練習才能到達巔峰,該如何有效地「刻意練習」。

內容簡介與心得:

找到天賦,不如找對方法!
天才與庸才之間的差別不在基因、不在天分,在「刻意練習」!

原創者親授,首度完整揭露「刻意練習」的科學實證與應用。
帶你揮別道聽塗說的不完整資訊,
正確學會這足以讓你精通所有技能的全新學習法,
顛覆你長久以來對潛能、對天賦、對智商的觀念!
  1. 第1章 有目標的練習
  2. 第2章 駕馭大腦與身體的適應力
  3. 第3章 心智表徵
  4. 第4章 刻意練習的黃金法則
  5. 第5章 在工作上運用刻意練習原則
  6. 第6章 在日常生活中運用刻意練習原則
  7. 第7章 邁向非凡的路線圖
  8. 第8章 如何解釋「天賦」這回事?
  9. 第9章 用刻意練習打造全新的世界

一萬小時定律是指作家格拉德威爾在《異類》一書中指出:“人們眼中的天才之所以卓越非凡,並非天資超人一等,而是付出了持續不斷的努力。1萬小時的錘煉是任何人從平凡變成超凡的必要條件”。要成為某個領域的專家,需要10000小時,按比例計算就是:如果每天工作八個小時,一周工作五天,那麼成為一個領域的專家至少需要五年。

本書持續圍繞著「為何需要有目標的“刻意練習”」,「該如何有目標的練習」,「探討是否天才就不需要練習」。

首先前幾個章節在探討“刻意練習”的細節與重要性,“刻意練習”代表的不僅僅是不間斷得持續練習,而且是根據目前狀況來改善與增進某些項目的練習。 比如說練習打籃球,如果沒有「刻意練習」,你可能只是給自己定下每天需要打籃球三十分鐘的練習目標,但是「刻意練習」就會針對目前的缺點(比如說運球,比如說籃下對抗的項目來訂定訓練的項目,專注的訓練。

到了第四章,就是在探討除了體能上的“刻意訓練”外,如果要練習心靈層面的鍛鍊(舉凡:棋藝,牌技)也能夠套用“刻意練習”嗎? 第四章用了記憶訓練的項目來舉例。 透過世界記憶冠軍的鍛鍊過程來闡明心靈層面就像是肌肉組織一樣,需要持續不斷鍛鍊。並且需要透過不同的鍛鍊方式來持續地讓練習效果的增進。

到了五六章則是跟讀者們敘述,就算是不需要成為世界頂尖的運動家,競賽選手。“刻意練習”可以讓你在日常生活中獲得更高效的結果,也能讓生命中的時間更有價值。

難道真的沒有所謂的天才嗎? 是不是只有天才才能夠到達巔峰造極的境界呢? 最後幾個章節則是分析了許多頂尖的選手,分析他們儘管有著令人羨慕的天賦,但是真正讓他們偉大的往往是進入職業生涯後得持續“刻意訓練”。

心得:

持續的鍛鍊是一個我常在講的議題,我也持續在鍛鍊自己的身體。但是看了這本書之後,我才驚覺到原來除了持續的段練外,我更需要“刻意的練習”來讓身體鍛鍊更有系統與更有效果。

這本書的鍛鍊方式讓我覺得收益良多,講解了許多教學與自我學習上應該要有的正確心態。應該需要透過訂定有效的目標,持續的改善與前進來讓每一次的練習變得更有效果。 想要讓你的人生更豐富,學會更多有趣的技能嗎?來看看這本書吧。

[研討會心得] LINE Shopping App with Flutter: 使用 Flutter 來打造 LINE 購物的手機雙平台應用

寫在前面

大家好,我是 LINE Taiwan DevRel 團隊的 Evan Lin。很開心在這裡跟各位分享本年度的第三場開發者小聚中,由 LINE Client Team - Evan Fang 所帶來的分享 - 「 LINE Shopping App with Flutter 」。

KKTIX 活動網頁: 活動網址

活動全文網址: TBD

投影片

演講影片

什麼是 「LINE 購物 App」?

(LINE 購物 App 功能介紹)

講者分享如何透過 Flutter 來開發下載榜第一名的 「LINE 購物 App」。 首先主要提到 LINE Taiwan Client App 團隊主要有負責的產品有:

  • LINE TODAY 的 App (在印尼有上架)
  • LINE SDK 也就是大家看得到的開源套件:
    • https://github.com/line/line-sdk-android
    • https://github.com/line/line-sdk-ios-swift
  • 當然也有協助開發 LINE App 的一些功能。
  • 最新的也就是今天要介紹的「LINE 購物 App

關於 「LINE 購物」的介紹

LINE購物 與多家知名購物網站合作,匯集超過2,000萬件商品,只要在搜尋處輸入想找的商品,讓你一個網頁就能一次看各家購物網站的商品資訊和價格,讓你從此不用處處比!透過 LINE購物 不僅僅可以一站找到你需要的商品,還可以獲得更多的回饋。

Flutter 打造 LINE 購物專屬 APP

為了提升更佳的使用者體驗,打造更精緻的服務介面,LINE 購物也決定在今年推出了專屬的 APP 。 但是希望能快速地到使用者的反饋,並且即時的改善更好的使用者體驗。 開發團隊選擇使用 Flutter 作為開發的程式架構,透過 Flutter 可以一次開發出 Android 與 iOS 的應用。 而選擇 Flutter 的理由如下:

效能考量:

以整合性設計框架而言,透過 Widget Rendering 可以讓 Flutter 直接在 Canvas 上面操作,具有類似於 Native App 的效能。

快速開發:

單一的 code base 來開發兩個平台的 App。在 UI 元件的開發上,很適合透過 Flutter 使用。可以確保 UI 設計的一致性,讓使用者有相同的使用體驗。

Flutter 支援 Hot reload 可以在 IDE 上面只重新編譯更新的部分,能夠快速的看到變更的成果。

豐富的開發資源:

豐富的官方導覽教學,還有 Dart Devtool 與 pub.dev 開發資源可以參考。

最後成果

最後的成果也相當的亮眼,使用 Flutter 可以在三個月之內於 iOS 與 Android 平台上完成一致性的使用設計體驗。 並且獲得當月份的下載量第一名的肯定。

遇到的問題分享

當然在使用 Flutter 開源套件也會遇到一些問題,但是 LINE 開發團隊也有跟 Flutter 團隊回報並且溝通相關的問題。目的希望能讓套件更完善,也能讓產品更符合使用者期待。 以下條列式一些問題:

  • 問題: Flutter 在 Android 上無法變更鍵盤語言
    • 解法:
      • 使用 Hybrid composition 並且更新 Flutter 到 1.22 版本之後。
  • 問題: Hybrid composition 在某些狀況下會 crash app
    • 解法:
      • LINE 提供相關解法與完整複製流程,並與 Flutter 團隊共同解決。
  • 問題:在可以上下滑動的頁面呈現大量UI元件時,滑動時經常有記憶體不足的問題。
    • 解法:
      • 修改讀取方式,僅使用者看到的部分(Viewport)會使用記憶體。釋放不在 Viewport 的UI元件資源。

小結

講者也分享了,目前 Flutter 很適合開發在不複雜的頁面。具有較高的效能,快速迭代與開發的工具,還相當的容易學習。但是如果需要開發比較複雜的頁面時,需要有能力追蹤到底層套件的原始碼,發生問題的時候才能夠解決。

最後也希望大家一起來下載一下 LINE 購物 App 感受一下 Flutter 開發出來的效能吧!!

[好書分享] 找到你的為什麼: 尋找最值得你燃燒自己、點亮別人熱情的行動計畫 (FIND YOUR WHY : A Practical Guide for Discovering Purpose for You and Your Team)

找到你的為什麼
作者: 賽門.西奈克、大衛.米德、彼得.道克  
原文作者: Simon Sinek、David Mead、Peter Docker  

買書推薦網址:http://moo.im/a/7ertCS

前言:

這一本是今年所讀完的第八本書。

賽門.西奈克曾經在一段影片中提出「黃金圈激勵理論」,裡面提到驅使人類去行動的三個圓圈。外層是做什麼的「WHAT」,中間而是如何做的「HOW],而在中心點就是最重要的「WHY」。

這一本書就是再將這段影片的內容加以詳述的一本書,也是我推薦給每一個想要激勵別人的人都該看的一本書。

內容簡介與心得:

Thinkers50全球管理思想家第18名、新世代領導大師西奈克10年前首創黃金圈激勵理論,
他的TED同名演講盤踞最受歡迎前三名,吸引近四千萬人觀看。
《先問,為什麼?》全球銷售破百萬冊,持續高踞亞馬遜分類榜TOP 1。

愈來愈多讀者開始問:「我跟我的團隊該怎麼做,才能找到為什麼?」
西奈克與團隊在全球各領域累積10年顧問經驗,將「為什麼」理論發展為完整的行動計畫,
適用於每個人、每個團隊,幫助大家踏上為什麼的旅程,發揮最大潛能!
「人們不會買你做了什麼,人們會付錢去買你為什麼而做它」 
                                             by Simon Sinek

「你是否曾經跟一個陌生人介紹過你的工作,你是如何敘述你的工作內容?」 這本書的一開頭,作者用了自己的一個例子,來講解工作熱情的重要性。他試著再坐飛機的路途上,跟著鄰座的人來敘述他的工作。如果是你,你會如何敘述自己的工作? 一開始你可能先說明你的工作,再來你可能會跟他人分享著你日常的工作內容。 這樣的會談相當的令人乏味,但是如果你試著分享著自己做工作時候的心情與想法,為何想要做這份工作? 與這份工作帶來給你的意義,慢慢的你就會找到你工作上的「WHY』,你會覺得興奮,感到熱情萬分,你會認為你做了一個世界上最好的工作。

這本書透過「為何需要找為什麼?」「你如何找到你的為什麼?」再來慢慢的帶領你如何幫助你與你的團隊來找到你們的為什麼。書本的後半部分偏重於整個「團隊探索營」該如何舉辦,如何開始,如何能讓團隊的探索引導到正確的方向。進而你們就能找出團隊的強項,讓團隊們來追尋共同信仰的價值,追尋你們的夢想(也就是你們的 WHY )。

心得:

整本書很像是該十八分鐘影片放大版,但是因爲重點圍繞在如何帶領團隊一同探索。所以很多「團隊探索營」的細節。但是整本書的理念相當的正確,也很適合做 Developer Relations 的人來好好看看。 因為許多人不了解開發者關係,不懂開發者關係,所以無法了解工作每一個環節所帶來的意義。 總是認為 DevRel 在辦活動,去演講,跟開發者打好關係。 這些都沒有錯,但是就像是由 What -> How -> Why 去敘述一樣,無法讓人打動人心。 雖然這是團隊探索的方式,卻不是一個跟他人分享的方式。真正的方式應該由 Why -> How -> What 來敘述著每一份工作。這樣才能讓許多人了解日常工作細節的重要性。

舉個例子,如果要做 Internal Evangelism 。 那麼應該是要透過分享與激勵他人的成長來讓內部同仁的自我成長(Why),所以我們鼓勵同仁們去分享。 讓同仁們了解分享所帶來愉悅的心情與成長的喜悅(How),進而讓他們自我成長。 所以我們舉辦內部讀書會,廣設工作坊甚至是舉辦外部活動來讓同仁去外部演講,去官方部落格來撰寫文章 (What) 。

由 Why -> How -> What 來了解他人工作,就會變得相當的合理與精確。許多時候的辛勤工作也都能被體會。 也建議每一個讀者來看看這本書,一起找到你們生命中的 Why 。

[研討會心得] 2020/10/21 TWJUG@LINE

前提

大家好,我是 LINE Taiwan 的 Technical Evangelist - Evan Lin。在 2020/10/21 的晚上,很開心能夠再邀請 TWJUG 社群來到 LINE 台北辦公室來舉辦社群聚會。這次的講者一共有四位,而其中來自於 LINE 的講者主要是 TECHFRESH 的 Wayne Wu ,來自 LINE 購物團隊的 Joanna Hu 與 Andy Chen。

活動網址: KKTIX: https://twjug.kktix.cc/events/twjug202010

開場 LINE TECHFRESH 介紹

LINE 台灣工程團隊每年透過 LINE TECH FRESH – 技術新星人才計劃,招募資訊科技相關科系,或對此領域有所涉略的大學生 / 研究生加入 LINE 團隊進行長期實習 (一年期),讓同學們能在國際級科技公司中觀摩學習。

更多內容,可以參考這篇文章: LINE TECH FRESH – 技術新星人才計劃,實習經驗大公開

每一位實習同學都會分配到不同的團隊中,擔任著團隊裡面的種子工程師。經過一些內部與訓練型專案的指導,讓每一位參與的同學能夠了解跨國產品的開發流程與大公司的軟體工程技巧。

接下來由各個不同團隊來分享不論是擔任 TECH FRESH 的心得,或是許多有 TECH FRESH 的用人主管來分享他們專案的訓練方式與負責的業務範圍。

LINE 實習經驗分享 / Wayne Wu

第二位上場的是來自於台大資工系大四同時也是目前在 LINE 實習的同學 Wayne Wu ,他來分享從七月到現在剛好滿三個月的實習心得。 首先身為學生,在專題分工的習慣上常常有「責任歸屬」不均的狀況,「溝通」不順暢與「流程」不清楚的問題。但是來 LINE 實習的時候往往不會有這樣問題,透過有經驗的 Mentor 細心的帶領,並且在實習一個月後有了處理新專案的機會,讓講者在學習上更有自主性與積極性。

同時間講者也分享了,在 LINE 實習的時候感受到團隊內對於文件的高度要求。清楚的文件帶領的新手快速入門,並且 Mentor 也會要求處理過的同學試著紀錄下所有的經驗的學習機會。透過了定期內部讀書會,提高了學習的動力與技術力,並且透過經常性的溝通確保團隊內的同仁都是在共識下將專案積極推進。

跨國合作上,講者也分享了與越南工作同仁的小趣事。彼此在溝通上雖然都是透過文字,但是也讓語言能力與表達能力能不斷的提升。

最後這位同學也分享了他平時就是常常在懶骨頭上工作,可以更專注地處理手上的問題。風氣很自由並且工作彈性高,讓工作就像是另一場有趣的學習。

Migrating to JUnit 5 / Joanna Hu

接下來由 LINE SHOPPING 的工程師 Joanna 來分享 migrating 到 junit5 的經驗分享。首先先釐清幾個名詞:

  • JUnit Jupiter: 支援 JUnit 5 test case 的新測試框架。
  • JUnit Vintage: 則是可以跑 JUnit3 與 JUnit4 架構語法的測試引擎。
  • JUnit Platform: 則是最底層用來在 JVM 下啟動測試架構。

為何整合到 JUnit5

  • 高度支援 IDE 與 build tool
  • 容易從 JUnit4 移植
  • 並且有相關新功能

JUnit5 新功能

  • Nested testing

支援 Nested testing 讓測試檔案的架構變得更有系統,也可以分類成各種功能來跑不同規模的測試。

  • Display Name

支援 Friendly Display Name ,可以讓測試執行的時候不僅僅是顯示測試的名稱。而是更有意義的測試名字。

  • Parameterized tests

透過不同的參數輸入來不斷地重複執行同一個 test function 。

  • Support multiple runners

How to migrating to JUnit5

接下來也是本次演講的重點,如果你是 JUnit4 的開發者,如何來 Migrating 到 JUnit5 呢?

  • 升級你的 Maven 到 3.63 以上
  • 升級你的 Gradle 到 4.6 以上

  • 先寫一些使用 JUnit5 的測試案例

  • 移植舊有 JUnit4 的測試
    • Package 有更換過就可以繼續使用
  • 根據 JUnit4 Rule 測試,改寫成 JUnit5 Extension
    • 透過換名字方式即可,也可以使用 IntelliJ IDEA 的功能來置換

參考文件:

  • JUnit 5 website: https://junit.org/junit5/
  • 7 Reasons to Consider JUnit 5: https://dzone.com/articles/7-reasons-to-consider-junit-5
  • Migrating from JUnit 4 to JUnit 5: https://blog.jetbrains.com/idea/2020/08/migrating-from-junit-4-to-junit-5/

Introduction to AssertJ / Andy Chen

接下來一樣也是由 LINE SHOPPING 工程師 Andy 帶來介紹 AssertJ 。 透過 assert 是拿來檢查相關數值或是測試的警告訊息。 而 AssertJ 有著比較好閱讀的優點,接下來會詳細介紹:

Fluent Expression

透過 AssertJ 可以顯示更像口語化的方式,

assertThat(actual).isEqualTo(expected);

除了可以容易閱讀,也更容易表達。 也可以透過 AssertJ 來減少 getter 與 temprorary variable 。也可以透過 collection asserting 來一次做多種數值的檢查。

Better Error Description

透過 AssertJ 可以有更多的 expression 來表達正確的想法,可以避免過多的單獨 assert 反而容易有遺漏。

並且可以透過 soft assertion 讓錯誤發生的時候不會第一個就跳出,可以一次檢查許多個地方。

並且有更多的相關功能 Expression Assertions , Optional Assertions 更清楚與 Completable Future Assertions 都可以使用。

總結

  • AssertJ 可以更容易來陳述與表達 test case 原本的意思(語意上)
  • AssertJ 可以更清楚表達 test failure 的狀況
  • 更少的 code 可以有更精準的表達

參考文件:

活動小結

感謝 TWJUG 的熱情參與,在 LINE 辦公室舉辦的活動獲得相當高的報到率。 LINE 對於開源技術社群持續的耕耘與支持,並且即將在 2020/11/19 舉辦的 JCConf 擔任黃金級的贊助,當天也有相關的攤位與開發者們相見歡。 熱愛 Java 的開發者,大家到時候見!

立即加入「LINE開發者官方社群」官方帳號,就能收到第一手Meetup活動,或與開發者計畫有關的最新消息的推播通知。▼

「LINE開發者官方社群」官方帳號ID:@line_tw_dev

關於「LINE開發社群計畫」

LINE今年年初在台灣啟動「LINE開發社群計畫」,將長期投入人力與資源在台灣舉辦對內對外、線上線下的開發者社群聚會、徵才日、開發者大會等,已經舉辦30場以上的活動。歡迎讀者們能夠持續回來察看最新的狀況。詳情請看:

[研討會心得] 2020/09/25 LINE Internal Hackathon 2020

大家好,我是 LINE Tech Evangelist - Evan Lin 。LINE 很重視員工們的自主創新與團隊合作,所以各地都會舉辦 LINE Internal Hackathon 。 在 LINE 台灣這已經是第二屆的內部黑客松競賽,也期待能夠看到不同團隊激盪後滿滿的創意。

第一屆內部舉辦的時候,受到許多的迴響。不少非工程團隊也希望能夠一起參與,所以今年特定修改參賽方式,第二屆的 LINE 內部黑客松競賽的主題就是 「Team up for A+」 ,目標希望同仁們能團隊合作,共同優化與創新出更令人驚豔(WOW) 的產品服務。

第一屆回顧 LINE Internal Hackathon 2019 - LINE Attitude

第一屆的 LINE Taiwan Internal Hackathon 主旨為 「AI is new Attitude」,由於 LINE 是一家注重 AI 的公司,我們也希望每一位員工都能透過機器學習為出發點,來反思每一個服務,一些內部應用是否可以透過機器學習與人工智慧的方式來優化。

第一屆的 LINE Internal Hackathon 我們收到許多有趣的應用,在 TECHPULSE 2019 上我們也分享了第一名的成果與技術。 也就是透過人工智慧的方式來幫助出差報帳的系統。

20019 LINE Internal Hackathon 第一名:自動報帳系統

LINE 的開發團隊遍及許多國家,於是 LINE 的工程團隊有許多的機會可以到不同國家的分公司去合作與討論。但是回來後最令出差人員困擾的就是要將許多的單據一步步的用人工的方式要輸入到系統與表單之中,這樣的作業流程往往要半個小時左右,相當的消耗人力。

去年的參賽隊伍透過人工智慧學習的方式,透過超過數百張出差表單的學習經驗。透過 iPhone 的軟體拍照之好,透過 OCR 的辨識與學習經驗,自動將不同表單填寫到正確的表單位置。並且產出報帳需要的表單文件。大大的將原本三十分鐘節省報帳的流程到兩分鐘之內。因此獲得了評審的青睞。

今年新增 (What’s new in 2020)

第一屆舉辦後收到不少的迴響:

  • 非工程團隊能有否參與的機會? 有點子但是都找不到工程師來一起組隊。
  • 有沒有更多的時間能讓參賽隊伍完成這個專案?

吸取了去年的意見,於是今年的參賽規則也做了部分的修改:

  • 每個參賽的隊伍需要有不同團隊的成員(e.g. 開發人員+行銷團隊,或是開發人員+人力資源團隊)。但是開發人員與測試人員都算是工程團隊而無法這樣組隊。

  • 第一階段提案入選的隊伍,能夠有三次的 Hacking Space (黑客工作訪)的機會。週末下午有特定的空間與餐點(下午茶)提供讓每個參賽隊伍能極盡可能得提高產品的完成度。

( Hacking Space 的紀錄照片)

同事們都很妥善利用公司所提供的時間與空間,在不影響專案進度的狀況下熱情的參與。

總決賽

經過了三次的 Hacking Space 的活動後,也到了最後總決賽的日子。 為了讓公司內沒有參賽的同仁可以一起觀賞總決賽的展示說明。這一次特定在總決賽舉辦在公司內部的十二樓會議空間。 整天的活動分成三個部分:

  • Hacking:
    • 讓同仁做最後衝刺的機會,並且可以調整簡報的順暢度。
  • 猜謎活動:
    • 下午舉辦的猜謎活動,一些有趣的問題外。也讓緊張的氣氛獲得緩解。
  • 最終展示簡報:
    • 最終的簡報展示,必須包含可以 demo 或是讓評審實際遊玩的產品。

現場也有一些必要的佈置,並且也替每一位同仁定制了專屬的紀念 T-shirt 。提供給每一個參賽的同仁可以拍照,讓本次的活動不留白。

猜謎小活動

從去年第一屆就開始的猜謎小活動,其實題目都相當的有趣。除了有 LINE Friends 相關小故事猜謎外,也有一些 LINE 相關服務的問題。除了可以讓每一個同仁更佳的了解 LINE 之外,也可以讓每個同仁舉舉手,運動一下也可以舒緩緊張的比賽氣氛。

活動小結

今年的參賽題目都相當的有趣(礙於都有可能變成未來產品,不方便公開)。除了許多產品有人工智慧與機器學習的輔助之外,更有許多產品是相當有趣的突發奇想。也由於今年有 Hacking Space 的安排,每一個參賽隊伍的作品完成度都很高,不僅僅都可以讓評審現場的試玩之外,也都開放給公司內同仁測試。 完成度與穩定度之高,讓評審們都讚不絕口。

也想要參加有趣的 LINE 內部的黑客松活動嗎? 那還不趕快投遞你的履歷加入 LINE 喔!

立即加入「LINE開發者官方社群」官方帳號,就能收到第一手Meetup活動,或與開發者計畫有關的最新消息的推播通知。▼

「LINE開發者官方社群」官方帳號ID:@line_tw_dev

關於「LINE開發社群計畫」

LINE今年年初在台灣啟動「LINE開發社群計畫」,將長期投入人力與資源在台灣舉辦對內對外、線上線下的開發者社群聚會、徵才日、開發者大會等,已經舉辦30場以上的活動。歡迎讀者們能夠持續回來察看最新的狀況。詳情請看:

徵才訊息

《LINE 強力徵才中!》與我們一起 Close the Distance 串聯智慧新世界 » 詳細職缺訊息

[TIL][Golang] Debugging Go in prod using eBPF 心得

Refer article “Debugging Go in prod using eBPF” by Zain Asgar : https://blog.pixielabs.ai/blog/ebpf-function-tracing/post/

前言:

在 Golang 上面來 debugging 其實有許多方式,不論是最常使用的 logging 或是透過 delve 甚至是 GDB 。 都算是常見方式來 debugging Go 。 但是最近看到這篇文章,覺得裡面提到的 eBPF (extended Berkeley Packet Filter) 算是蠻有趣,在這裡稍微做個簡單的整理。

Golang 上除錯的方式 (Debugging in Go)

一般來說要在 Go application 中來 debugging ,有以下的方式:

Add log:

就如同大家熟悉的,使用 fmt.Println() 或是 log.Println()

Using debugger (delve or GDB)

不論是透過 vscode 內建的 delve ,或是透過 GDB 來做 debugging 。 透過 debugger 來除錯,其實是相當消耗系統資源,並且經常會中斷整體應用程式的運行。

Tracing

這裡指的是透過外部的 tracing tool ,不論事 USDT 還是 strace 都算是一種方式。

什麼是 eBPF

eBPF (extended Berkeley Packet Filter) 根據官方網站 (https://ebpf.io/) ,是一個技術可以讓 application 跑在 sandbox 上面,並且可以透過 Syscall hook 方式來查看相關的資料而不需要修改任何的 kernel source code 。

應用範圍有:

Secuerity: 透過 eBPF 可以做為一個與系統呼叫 (Syscall) 與硬體設備的中間層。

Tracking and Profiling:由於 Linux 系統都有提供 eBPF 的接口,可以透過這個直接 tracking 與 Profiling 你的應用。 (with very low latency) 。

這也是這篇文章提到的主要技巧。

為何使用這個?

既然提到 Debugging Go App 的所有工具,必須要跟其他方式做個比較。可以看到 eBPF 具有以下特性:

  • Performance Impact 非常的低(disruption 也很低),類似於 Tracing tool 。但是跟 GDE 與 Delve 一樣可以追蹤到 Application Code。
  • 但是無法作分散式系統的測量,因為一次 eBPF 只能針對你需要 hook 的應用來做 debugging 跟 tracing 。

更多介紹: