[TW_DevRel] 2022-10-28 台灣大學軟體工程課程企業參訪

image-20221028171825695

前言

大家好,我們是來自 LINE 台灣開發者關係與技術推廣部門 (Developer Relations)。 LINE Taiwan 開發工程團隊於 2022 年初的 「關於 LINE 台灣開發者關係與技術推廣部門的校園相關資源」文章中,有敘述到關於 LINE Taiwan 所提供給理工相關科系學校同學的企業參訪機會,除了讓學校同學可以了解 LINE 的研發工程文化之外,更可以了解相關的技術實習的機會。

這一次則是收到台灣大學資工所的軟體工程的課程上,有許多不同系所同學一起來了解。透過兩位講者 Zephyr 與 Richard 的分享,讓同學對於軟體工程可以有更深入的了解。

TPM (Technical Project Manager) 技術專案經理的分享 - Zephyr Chang

image-20221028172009633

首先由 LINE 台灣的 TPM (Technical Prject Manage) Zephyr 帶來的分享,先提到軟體開發流程並且帶出軟體開發的生命週期。並且說明清楚在軟體生命週期中,每一個階段有哪一些角色的協力合作。也會詳細的說明每一個角色的相關職責,為什麼他們在這個專案的流程中如此重要。

相關問與答

問: 針對重大災害影響,是否專案管理與軟體工程的影響上該如何處理

針對軟體工程的角度來說,事先需要有相關的準備,並且針對 HA (high availability) 有相關的設計與防範。在各種重大災害的演練上,有各種面向的演練。

問: 對於各種故障的偵測是否有哪一些特殊的偵測方式?

每一個服務都有相關的監控,任何時候發生問題的時候,都會有監控的服務可以立即偵測,並且通知相關的處理團隊來處理。

問: TPM 跟軟體開發的主管有點像,那執行面有哪一些的不同?

在 LINE 來說以專業分工來切割工作, TPM 是屬於一種技術端的專案管理工作,負責專案與服務開發上的大大小小事情。在 LINE 的文化上,我們的組織相當的扁平並且都是透過專業分工。所以即便 TPM 不是屬於主管職務,也是有他專業分工管理的範圍。

相關職缺

從測試出發談 LINE 軟體開發流程 - Richard Chang

image-20221028171847233

Richad 先透過跟同學的互動,分享了 QA 跟 Testing 兩者的差別? 首先 Richard 先透過 Bug Fixing Cost 來點出一個問題在每個流程中找出來所引出的成本。 如果在設計階段就能夠將問題找出來,那麼他的成本會是最低的。

也就是在設計階段,當需求端(可能是 PM ,可能是 Business Owner)有新的需求,身為測試人員就要協助審視設計端的需求。盡可能地找出裡面可能有的問題。

到了開發階段,雖然開發人員開始去撰寫開發程式碼,身為測試人員需要準備好相關的測試資料(假資料),甚至開始開發相關的 MockServe 或是自動化測試的相關串接方式。

到了測試階段的時候,則是大量的測試工具來協助。 不論是 CUJ (Critical User Journey) 的流程測試,或者是探索性的測試,甚至是 E2E (End-To-End)的測試流程。

到了正式上線之後,測試人員也有許多工作要做。 如何透過 CI/CD 流程的優化,如何定期確認服務的狀態。

相關職缺

在 LINE 台灣技術實習 - TECHFRESH 介紹與相關福利

如果對於 LINE TECH FRESH 技術新星實習計畫有興趣的同學,歡迎了解以下的相關文章。

更多關於 LINE TECH FRESH 介紹文章有:

如何申請 LINE TECH FRESH 技術新星的實習計畫呢?

對於 TECH FRESH 計畫有興趣並想了解內容,歡迎大家參考 LINE Career 中的細節

小結

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

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

關於「LINE 開發社群計畫」

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

[好書分享]美食也吹牛 - 羅馬人的魔法藥水是魚醬?以前喝咖啡加鹽不加糖?鮭魚壽司不是日本傳統料理?原來餐桌上的食物很有事!

美食也吹牛: 羅馬人的魔法藥水是魚醬?以前喝咖啡加鹽不加糖?鮭魚壽司不是日本傳統料理?原來餐桌上的食物很有事!
Bouffes Bluffantes – La véritable histoire de la nourriture, de la préhistoire au kebab
原文作者: Nicolas Kayser-Bril  
譯者: 陳文瑤  出版社:馬可孛羅 
出版日期:2022/08/09

買書推薦網址

前言

這一本是今年所讀完的第二十本書。當初會買這一本書,也是因為讀墨官方帳號推薦的相關新聞:

由於這兩個新聞真的都還蠻有趣的小常識,並且也跟一些歷史相關。我就忍不住把這本書買了下來看。

內容簡介

早期喝咖啡加的不是糖,竟然是鹽!
比釀酒師更先出現的職業居然是毒品販
炙手可熱的香料在地理大發現後被眾人唾棄QQ
「義大利麵」名稱從何而來,這都要感謝文藝復興
日本壽司上的鮭魚原先是芬蘭滯銷貨?
這些知識不明白不能算是饕客!

史前時代到二十一世紀
餐桌上佳餚的起源與復甦
歡迎享用這場跨越兩千年的盛宴

整本內容不算多,但是透過許多小故事依照歷史年份來排列。我這邊僅僅列出我覺得蠻特別的段落:

  • 西元前五十年 二 古代── 羅馬人的魔法藥水是魚醬

這一小段故事很有趣, 魚醬(grarum) 在古代義大利半島被認為是一種魔法藥水。因為透過鹽漬來發酵的製作方式不容易腐敗,還附有蛋白質跟微量元素。可以讓身體恢復體力與健康。

每一篇故事後面,也有如何做這個料理的方法說明,很有趣。

image-20221004111102846

  • 第五世紀 四 猶太教 ── 猶太飲食戒律如何拯救肥肝

羅馬帝國因為貪吃(與貪腐)而衰敗之後,許多美食慢慢的消失。但是有一種美食卻跨朝代到了現代,就是肥肝。因為猶太人不能吃豬肉,作為良好蛋白質來源的雞,鴨還有鵝就是容易攜帶的糧食。並且鴨油也很好的代替了豬油作為許多油炸的油料。 在西元一世紀猶太羅馬戰爭後,猶太人繼續著肥鵝肝這樣的美食。

  • 十六到十八世紀 十 宗教改革 ── 叛亂者的奶油

在十五世紀的歐洲,普遍都習慣吃奶油來當作烹煮食物的油。(真肥)但是在齋戒日的時候,不僅僅是肉類,可是連奶油都不能吃的。想要吃奶油的人,必須要花錢去買「贖罪券」才能吃奶油。(果然吃奶油就是有錢)。

  • 十七世紀起 十一 奴隸制度 ── 「糖即是惡」

十七世紀開始,糖類被大量的應用在料理上。而蔗糖的製作過程其實很繁瑣並且需要大量的人力,所以大量的奴隸都是用來採收甘蔗。而糖其實對於人類的身體發展相當不好,但是糖類的擁有者遵循著香菸研究的方式。贊助給許多研究糖類是對人類很好的科學研究來掩蓋許多壞處。

  • 十八世紀 十三 現代 ── 馬鈴薯改變了世界的臉

馬鈴薯具有高度的蛋白與澱粉,有相當的好種植與攜帶。但是在十七世紀的時候,因為外表不討喜其實沒什麼人要吃。直到軍隊打到某些的農田發現了馬鈴薯之後,容易攜帶並且可以很快的種植採收的特性。馬鈴薯被帶到了義大利。然後 1744 年的三十年戰爭有一個藥劑師安托萬,帕蒙耶提,偶然的狀況下吃到了軍人帶來的馬鈴薯驚為天人,於是帶回去給路易十六皇帝。好種植,高營養並且產量也相當大的馬鈴薯就這樣開始盛行。並且馬鈴薯有豐富的維他命 A 與 D 也是當時能慢慢脫離壞血病的大功臣。

  • 二十世紀後半 十八 消費社會 ── 鮭魚壽司,日本「傳統」料理

鮭魚壽司現在在日本料理中是一個相當受歡迎的食物,也是我個人很喜歡的食物之一。但是在二十世紀開始,北歐挪威的奧斯陸是一個很漂亮的漁村。但是他們有一個困難點,就是常常有太多的鮭魚捕捉了沒人要吃。

於是挪威的議員在 1985 年,想到了日本人喜歡吃魚的特性。將漁獲進口給離他們超級遠的日本,並且要求一開始只進口給壽司店。造成 1990 年開始鮭魚壽司開始在日本大受歡迎。這樣一來也解決了挪威的鮭魚過剩的問題。

心得

這一本充滿了許多有趣的小知識,透過年代的排列方式。可以讓你知道其實美食也會影響朝代的迭代,許多食物類型的興起更是有其背景。 想知道許多傳統食物的由來與背景,都可以在這一本書查到。此外,這一本還有列出一些食物的處理方式(透過文字)。可以感受處理實務需要注意的事項與方式,也可以感受到作者對於食物本身的熱情與研究。

總之,這是一本都是文字的書,但是卻有滿滿食物的香味充斥在文字之間。可以讓你感受到食物的歷史香味。

[學習文件][eBPF] eBPF Summit 2022 - Day1 summarry

image-20220929104653298

(圖片來源: eBPF Summit 2022)

The future of eBPF in the Linux Kernel by Alexei Starovoitov

image-20220929104827100

Linux kernel 正式整合 Rust 之後,透過 Rust 可以做更多 eBPF 相關的應用。

image-20220929104811397

當初在使用 “Restricted C” 開發上有相關的限制,

image-20220929105511893

隨著 Linux kernel 6.1 的提升,其實能增加的部分也越來越多了。

image-20221004141207932

許多 ebpf 的相關小工具: 其實這些工具不是專門為了 ebpf 而開發,但是這個頁面有告訴你如何應在 BPF 裏面。

image-20221004142430192

[好書分享] 一人公司:為什麼小而美是未來企業發展的趨勢

一人公司:為什麼小而美是未來企業發展的趨勢
作者: 保羅.賈維斯  
譯者: 劉奕吟  
出版社:遠流出版 
出版日期:2019/07/01

買書推薦網址:

前言:

這一本是今年所讀完的第十九本書。 當初這一本書是由 LAE 所推薦的,買來後看了發現真的蠻有趣的。疫情過後,許多人在探討的已經不是 work life balance ,而是如何讓工作跟生活可以有效的結合不會互相干擾。 而這一本書更是有趣的思考了工作與生活的目的,在經濟允許的狀況下,作為一人公司要如何讓自己的生活更有品質。

內容簡介:

一人公司拒絕並質疑傳統經營理念中要大、要快的成長模式,因為成長並非永遠是最有利的,要求更多,往往代表著更加複雜、更多責任,通常也產生更多費用。保羅.賈維斯不僅幫你擺脫在傳統上以成長為導向的企業中工作所產生的煩惱,他更說明:

●為什麼很多大企業現在試圖偽裝成小公司?
●為什麼在傳統公司工作反而比開創屬於自己的一人公司風險更大?
●為什麼工作的核心價值不是追隨我們的熱情,而是訂立目標?

一個小型企業主可以創立一人公司,一小群志同道合的夥伴也可以。本書介紹如何以你的自身條件建立自己的公司,決定你期望的收入;如何處理意外的危機,讓重要客戶感到滿意。「一人公司」是一種新穎的經營方法,專注於變得更好而不是更大,維持小規模進而帶來自由,讓你可以去追求生活中更有意義的樂事。

我把內容簡介,弄成投影片。

心得

「一人公司」不是只是一個人獨幹的公司,而是代表一種對於生活與工作之間的一種新的見解。 每間公司都在努力追求著成長,伴隨著高槓桿與高風險的方式。 而一人公司也是透過著穩定成長,並且透過穩定生活的態度,來讓現在許多有能力的工作者有了一個新的出路。

當然,是不是每一個人都適合著「一人公司」的方式來成立自己的公司?這個其實很吃你的專業相關技能,是否能夠讓你有逐漸成長,並且能力開始獨立作為自己收入的來源。

疫情打破了每一個人對於工作,對於自我成長,對於家庭的看法。每一個人都在探索真正能夠滿足自我與家庭的新思路。 也希望每一個有自己想法的人,可以試著去看看這本書所帶來的創新想法,書中也有提到,其實每一個人都是為了自己而工作,為了家庭與自己的想法。都算是一人公司的成員,只是你們希望讓工作與家庭的比例要如何調整?希望每一個人都有自己的「一人公司」。

[好書分享] 歐遊情書 - 因為太美,一定要說給你聽的風景

歐遊情書 - 因為太美,一定要說給你聽的風景
作者: 謝哲青  
出版社:圓神出版 
ISBN: 9789861334837

買書推薦網址:

前言:

這一本是今年所讀完的第十八本書。這一本當初就是衝著最受男人歡迎的史地學家 - 謝哲青所買的。 當初其實也很擔心,旅遊的書應該是一堆圖片,都是網路年代了,會不會看著影片會更有感覺呢?

image-20220913143353633

但是就像上面這段文字一樣,其實裡面有很多精練的文字。就想是作者在世界各地寫的情書一樣。告訴著你這個美麗的歐洲上,一個個動人的小故事。

內容簡介:

走過86個國家,一個人的旅行,曾是他拼湊破碎靈魂的方式。
因為孤獨,他看見的不只是喧囂的華麗。

在維也納的摩天輪上,他找到了沉默而持續的堅定能量。
在克林姆的〈擁抱〉裡,他瞥見了一瞬的幸福。
在巴黎的蒙帕納斯墓園,他迷戀起生命的種種。
搭過莫斯科287站地鐵後,他體悟到不見天日的自由。

哲青說:「把自己丟進荒野裡,是很容易的事,只要專心前進就好了。生命中最刺激的冒險,其實是在日復一日、枯燥殘酷的現實中,還能繼續保有相同的衝勁。平淡的日常,才是生命最大的挑戰。」

因此,他願意將在旅程中看見的一切美麗與感悟,放進你我平淡的日常裡,陪伴你我面對生命的挑戰。歐遊情書,是寫給他心愛的人,也寫給每個愛他的人!

這一本大多是許多地點歷史故是敘述,或是一些關於景點的故事敘述。

〈序〉從寂滅之城開始的旅行

從義大利東南方被火山灰淹沒的古老沒有城市名稱的 - 寂滅之城作為第一章節,反差相當的大,卻又慢慢開始鋪成許多的故事。

【義大利.帕多瓦】喬托與史格羅維尼禮拜堂──從神到人的轉捩點

作者的文字很細膩,時常有一兩張照片來輔助他的史料。但是圖片卻不會太搶風采,卻深深打動人心。

image-20220913144616913

【法國.塞南克】塞南克修道院──漫漫長路的小停頓

小小的修道院,作者分享了他住在那邊的感覺。與美妙的過往。

image-20220913145132221

當然也有附上美麗修道院的圖片。

image-20220913145232999

【西班牙.馬德里】羔羊的隱喻──蘇巴朗沒有說破的陰暗現實

馬德里這一個地方,則是透過 < 蘇巴朗 - 上帝的羔羊> 這一幅畫來分享這個地方。並且帶出作者小時候的一個故事。(他喜愛的小兔子,被長輩不小心拿去煮了。)

透過 “蘇巴朗” 的許多畫作的解釋,分享畫家的內心深處與那個時代的人們生活型態。 考察的時候,作者很喜歡透過當地旅遊的方式來詳細了解許多小故事。

心得

image-20220913145731572

這是一本寫給歐洲的情書,但是裡面卻訴說著許多對於家的思念。分享著許多歷史的小故事,卻又告訴著你當地的人們如何在這一塊多采多姿的大陸上生活著。

透過許多雕像與繪畫讓我們了解當地的特色,那個時代的故事。如果有去過這些地方的人,我相信你一定會更有感覺的。

或許,你可以把這本書帶在身上。 讓著哲青一起陪伴你在歐洲旅遊。

[學習文件][Golang] 從 Go 原始碼裡面拆解出的好用套件 go-internal

有一天這樣的 tweet 吸引到我,加上裡面有提到

讓我認真的想去了解一下什麼是 Go-Internal

什麼是 Go-Internal

位置: https://github.com/rogpeppe/go-internal

不知道有沒有人跟我一樣,有時候在看 golang source code 的時候,會看到一些工具或是 func 相當好用。 當下可能會複製拿出來使用。或是擷取某些精髓。 但是很多時候,有很多 func 整理過後往往可以成為很方便的工具。

https://github.com/rogpeppe/go-internal 就是一個將 Go Internal source code 重新整理後,獨立出來使用的小套件。其實裡面有許多很好用的小工具可以使用。

以下挑選幾個小工具,稍微分享一下:

關於 go-Internal/testscript 套件

testscript: script-based testing based on txtar files

這個工具提供了讓你測試 cli command app 的測試包。這樣看可能還不知道,裡面的 testscript 要怎麼使用。但是從 Reddit 裡面的介紹蠻明白的。

testscript was factored out of the cmd/go internals where it is used to test the go command itself in various combinations/permutations.

也可以參考一段 code 來自 flowdev/spaghetti-analyzer main_test.go

func TestAnalyze(t *testing.T) {
	testscript.Run(t, testscript.Params{
		Dir: "testdata",
		Cmds: map[string]func(*testscript.TestScript, bool, []string){
			"analyze": func(ts *testscript.TestScript, _ bool, args []string) {
				expectedReturnCode, err := strconv.Atoi(args[0])
				if err != nil {
					ts.Fatalf("fatal return code error (%q): %v", args[0], err)
				}

				args = args[1:]
				actualReturnCode := analyze(args)

				if actualReturnCode != expectedReturnCode {
					ts.Fatalf("Expected return code %d but got: %d", expectedReturnCode, actualReturnCode)
				}
			},
		},
		TestWork: false,
	})
}

這一段用就是讀取 testdata 資料夾的檔案,然後跑裡面的 cli test case 來跑你的 Cli app 。

關於 go-Internal/testenv 套件

這個套件蠻有趣的,可以找出目前系統 golang 相關環境參數。 比如說,能夠執行 go run 環境。

package main

import (
	"fmt"

	"github.com/rogpeppe/go-internal/testenv"
)

func main() {
	fmt.Println(testenv.HasGoRun())
}

這一段 code 可以檢查你的 docker image 有沒有 go run 環境。 詳細 testenv source code 可以看這裡

關於 go-Internal/par 套件

Package par implements parallel execution helpers. 可以讓你跑許多 parallel 的小幫手。

import (
	"fmt"
	"sync/atomic"
	"time"

	"github.com/rogpeppe/go-internal/par"
)

func main() {
	var w par.Work
	const N = 100
	for i := 0; i < N; i++ {
		w.Add(i)
	}
	start := time.Now()
	var n int32
	w.Do(N, func(x interface{}) {
		time.Sleep(1 * time.Millisecond)
		fmt.Println(n)
		atomic.AddInt32(&n, +1)
	})
	if n != N {
		fmt.Println("par.Work.Do did not do all the work")
	}
	if time.Since(start) < N/2*time.Millisecond {
		fmt.Println("done!")
		return
	}
}

這樣就可以有 1 ~ 100 個不同 parallel 同時在跑。

小結論:

偶然間看 tweet 既然可以看到這樣好用的小工具,重點還是幾位大神一起維護的。 有興趣的可以持續關注。

相關文章: