返回社群

高產導師與系統自動化專家

被貼上「樣樣通、樣樣鬆」的負面標籤嗎?也許這其實是件好事,尤其當你在引導來自不同背景、擁有不同程式設計經驗和文化的人時!Isaac 自稱是科技愛好者,也是個萬事通……還有其他許多身分!

在 Youtube 上觀看
長度 37分鐘

Jonathan:大家好,歡迎收聽 Exercism 社群 Podcast。今天很榮幸邀請到 Isaac,他是我們的維護者兼貢獻者之一,最近在我們的 GoHort,也就是學習共學團裡,引導了大量的學生。這個共學團我們辦了 30 天,我記得目前大概辦過兩次了,尤其是 Go 和 Elixir 的部分。Isaac 當時幫忙處理 Go 學習路徑,表現非常棒。Isaac,非常歡迎你。可以請你稍微談談你住哪裡、來自哪裡,以及你是怎麼踏入科技業的嗎?

Isaac:好,我住在加州,住在加州的聖荷西。老實說,我會踏入科技業是因為我哥哥在搞科技,而他做什麼我就跟著做什麼。我有很多兄弟姊妹。我們喜歡聚在一起,不過有些人跟某些人比較合得來。我有一個很喜歡跟他混在一起的哥哥。他倒不一定那麼喜歡跟我混,但當時我經常跟在他後面,他做什麼我都想参一腳。他大概 15 歲的時候,隨手拿起家裡一本《C for Dummies》,我記得我那時 9 歲。他在寫 C,我就想,既然他做這個,那我也要做。那個年紀我寫的程式很簡單、很基本。比較像是「你叫什麼名字」,然後回「哈囉 Bob」這類練習。不算太複雜。總要有個起點,就從那裡開始吧。我當時覺得,喔,原來可以印出嗶聲字元,然後它就會發出聲音,太酷了。我寫過一個程式,基本上就只是印出一個反斜線加 A。但我是從 9 歲就開始寫 C 程式了。我們有一台老舊的 Windows 3.1 機器,開機會進到 DOS,我哥哥寫了一個批次腳本,讓電腦開機時顯示一個選單,你可以選擇啟動 Windows、啟動遊戲,有點像遊戲選單。你可以輸入 5 之類的來啟動《魔獸爭霸》什麼的。所以我也開始寫批次腳本,因為我們陸續裝了其他遊戲之類的。從那之後就一路回不去了。我哥哥去大學讀資訊工程,我又想,既然他做這個,那我也要做。所以我 9 歲就開始寫 C。高中時我寫……Visual Basic 6。我有一台 Palm Pilot,高中時在上面寫過各種程式。我的數學老師人超好。我當時讀的是那種老派的……

Jonathan:那是不是有點像,記得他們試著推出那種 iPad 之前的東西,結果有點……少數人拿到手,上面還有那種用筆塗寫的小功能。大家都覺得超酷,因為筆尖可以伸出來,然後啾一聲,你就可以在上面點來點去。那東西有點……它最後沒成,我一直記得那件事,因為後來 iPad 出來時,大家都說,唉,早了點。Palm Pilot 就是稍微超前時代那麼一點的東西,你懂我意思嗎?

Isaac:它大概風光了十年左右,不過是啊,它有那種 Palm Graffiti 手寫輸入。有一小塊輸入區,你要寫字,不過那些字有點像是以字母為基礎設計的。比方說 A 就畫成一個三角形,F 就有點像直角。是啊,我高中的數學老師說,嘿,如果你把程式寫出來,考試時想用它也沒問題。所以我高中時就在寫 Palm Pilot 程式,那真的很酷。我上大學讀資訊工程。那時大家在聊腳本語言,我不太清楚那是什麼,就隨便挑了 Perl。後來我從研究所畢業,進到 Google 工作。2013 年他們把我從東岸搬到加州。大約就是在那裡,我開始寫 Python,大概是十年前的事了。這十年來 Python 一直是我的主要語言。我在 Google 待過,所以我的寫法深受 Google 風格影響。我主要就是這樣寫程式的。然後大約……四年前吧,我想是 2018 年左右,Google 內部開始推行 Go 語言,我就那時開始學 Go。

Jonathan:酷。Isaac,你剛提到 Google 風格,那是有明確的一套「這才對的做法」,還是比較像……這部分可以多談一點嗎?因為這很有意思。

Isaac:寫程式的風格不見得是「正確」的做法,更像是要求大家都照著做的統一做法。他們說,一個好的折衷、好的協議,就是沒有人滿意的那種協議。沒有人對那份風格指南完全滿意,但只要大家都照著走,程式碼看起來就一致。這代表任何人都能拿起 Google 程式庫裡的任何一段程式碼來修改,只要大家遵循同一套風格規範,程式碼就都是統一的,你不必煩惱,喔,這個程式庫用四個空白縮排,那個用兩個,還是這個的命名慣例是這樣、那個是那樣。整個程式庫裡所有東西做法都一樣。不是每個人都滿意,每個人都有自己希望改掉的地方,但既然有一份白紙黑字、公開可查的風格指南,你只要 Google 一下 Google Python 風格指南,它就會告訴你我們在 Google 是怎麼寫程式碼的。只要大家都照著那份指南走,程式碼看起來就非常一致,這真的很棒,你可以打開任何一個程式庫,看起來都不會有意外,不會想說,喔,他們這裡會寫得不一樣。

Jonathan:這是不是 Go 之所以很契合那個脈絡的原因?因為它很講究格式,就是這樣、沒得商量。你可以明顯看到 Google 對它的影響。

Isaac:是啊,我不確定 Rob Pike 受到 Google 做法多少影響,還是他影響了 Google 的做法。我不確定是誰先誰後,不過 Go 確實把這件事推到另一個層次,那裡……在 Python 裡,風格有好多種,大家會調整自己的 linter 去接受不同的寫法。舉例來說,Google 內部寫 Python 用兩個空白縮排,因為有很多程式碼縮排得很深,他們不想要一整面牆都是空白。對外,大多數人用四個空白,這也寫進了 Python 的文件裡。但講到 Go,他們就把這件事推到另一個層次,他們說,這個語言本身就包含格式化。只有一種格式方式。線上沒有各種派別在爭哪種才對。就只有一種方式。

Jonathan:這省下了一大堆來回爭論。至少可以這麼說吧。是啊,那很好。

Isaac:是啊。

Jonathan:好,那你在進 Google 之前完全沒寫過 Python,還是稍微碰過?算是輕鬆的轉換嗎?因為你講起來像是先拿到 Google 的工作,然後才想,好啊,來學 Python 吧,衝了。

Isaac:沒錯。我相信在進 Google 之前,我從沒寫過 Python。我那時寫了 Perl 一兩年,那時候大概寫了兩年左右。我的第一份暑期工作……那又是另一段故事了。我是進 Google 六年前開始寫 Perl 的,所以那時寫的 Perl 已經不少了。我也寫了一點 Bash,對腳本語言算是熟悉。但我從沒寫過 Python。不過只要你碰過的語言夠多……學另一個語言的學習曲線就沒那麼陡,因為大多數結構你都看過了,只是語法稍微不同、工具組稍微不同。很多東西都一樣,只是寫法有點不同。結構通常都很類似。所以一旦你學會四種語言,再學第五種就會覺得,喔,這只是寫法稍微不一樣而已。

Jonathan:是啊,是啊。這很有意思。你剛才講到高中後的第一份工作時笑了一下。所以你……因為這就是……你一直都很確定,我以後要走工程這條路,我要做電腦這行嗎?這一直是你有意識的想法,還是說,這就是我自然適合的地方,我喜歡這個,就這樣?那是怎麼……

Isaac:我想是吧。我非常努力在追隨我哥哥的腳步。他去讀資訊工程,開始寫程式。我小時候他就開始寫程式了,我一路跟著。我從小就在寫程式。他去讀資訊工程,那時我就想,我也要做跟他一樣的事,而且我寫程式也寫得很開心。所以從我進高中、我哥哥已經上大學那時起,我就知道自己想走到那裡。

Jonathan:所以他大你幾歲,聽起來他對你這個人影響非常大。你還有幾個兄弟姊妹?還是他在你眼中就是最厲害的那個?

Isaac:我有八個兄弟姊妹,不過他絕對是我處得最好的那個。我猜,我跟其中一些人比跟其他人更合得來。有八個的時候,總是會有差別。我跟他處得很好。我們思考方式很像,興趣也很相近。我們以前總是在聊電腦聊到忘我,現在還是。他老婆不喜歡這件事變成餐桌上的話題。她會說,餐桌上不談工作。我們就是一直在聊程式、一直講。很難說這有多少只是我想模仿他,又有多少只是我們興趣相近。我們現在確實興趣很像。我不知道其中有多少是先天、有多少是後天。我真的沒辦法評論有多少是我在模仿他,還是我們只是剛好興趣相投。但既然我從小就跟著他的腳步,可以說他開路、我跟著走。

Jonathan:是啊,這真的很不錯。那他現在人在哪?純粹好奇問一下,他在東岸嗎?

Isaac:他還在東岸,做科技業。我們曾短暫待過同一家公司。

Jonathan:是喔,好,酷。就是這樣。很好。我只是好奇想問。現在,其中一件事……你最近在我們剛辦完的共學團裡參與很深。最近這屆學習共學團,尤其是 Go,我們辦了一個 30 天的 Go 活動,那你之前在 Exercism 的參與主要是維護,不過據我了解,你也做了很多引導。你怎麼看這樣的分工?我是說,你是怎麼接觸到 Exercism 的,又有哪些不同的面向是你喜歡投入的?

Isaac:我一開始會接觸 Exercism,是因為我想重新學 Haskell。我在 Google 上過一堂 Haskell 101 的課程,很有趣。後來我想,喔,我應該多花點時間在這上面。結果就擱下了。後來我又想回頭學。

Jonathan:那我們下次見囉。

Isaac:任何語言都一樣,我發現學它最快的方法就是實際去寫。而寫它最快的方法,就是有個非寫不可的目的。我一直沒找到寫 Haskell 的好理由,所以很難上手。後來我發現了 Exercism,就想,喔,這或許能幫我多寫一點 Haskell。我就是這樣找到 Exercism 的。進去之後我發現,喔,這裡有 Python 學習路徑、Shell 學習路徑,還有各種練習,所以我就掉進兔子洞了?

Jonathan:然後你就掉進兔子洞了。

Isaac:是啊。我開始解 Python 的練習,也開始解 Bash 的練習。我做了幾題 Go 的練習。GoHort 出現時,我翻了一下自己以前的解答,發現很多都是三年前提交的。所以我 2019 年就註冊了 Go 學習路徑,當時解掉了一部分練習。那時我寫 Python 已經寫了十年,所以我覺得擔任 Python 導師還算自在,這幾年我大多時間都在那裡的練習上。後來我開始對 Python 學習路徑提交 PR、也就是 pull request,因為有些東西不太對。接著我又開始參與 Bash 學習路徑。我不太確定是怎麼發生的,但我從對 Bash 學習路徑提交修正,變成了 Bash 維護者。

Jonathan:就這樣,我是說,還真是……報名前要小心啊,對吧?

Isaac:是啊。後來 Glenn 把 OCaml 學習路徑寫了出來,我就想,喔,我懂 OCaml,我喜歡 OCaml,讓我一起加入吧。所以我幫忙把 OCaml 學習路徑的練習建起來。我不太確定,不過我想三年前我看到 Go 練習時,把整條學習路徑都完成了,然後有位導師說,喔,你把所有練習都做完了,也許你該來當導師。我覺得自己還不夠,我寫 Go 的頻率不夠高、不夠規律,還沒辦法那麼自在地引導它。所以我其實不算 Go 導師。但後來我加入 GoHort,看到有一堆人想找人引導,我就想,喔,那我這個月報名當導師、幫忙一下好了。不過其實我最近是以學生的身分加入 GoHort 的。然後我大概就從學生那區滑過去了。

Jonathan:我就這樣從學生區滑過去了,我猜。小心你報名了什麼。我跟你說,這好像成了一種模式:你報名了一件事,最後卻變成另一件事,不過那真的很棒。好,所以當你在 Go 學習路徑上引導學生時,你最常看到哪些問題?我是說,Go 學習路徑上,我猜應該有不少經驗豐富的開發者,就是那些在開發上已經有些資歷的人,但你注意到哪些是大家似乎常卡住的地方?有沒有什麼模式,是你覺得,好,這很常見、相當一致地會出現的?

Isaac:我不知道。我看到的引導大多是在別人已經完成的解答上。人們通常在做引導之前就已經解完那道練習了。所以在我大部分的互動裡,大家其實並沒有卡住。呃,所以多半是,他們已經順利完成一道練習,然後很多回饋是,呃,有沒有更有效率的方法?有沒有更好的演算法?呃,其中一個太常出現的,就是字串建構,呃,在……在 Go 和 Python 這類字串不可變的語言裡,做大量的字串串接效率並不好。所以很多時候就是,嘿,你可以用陣列把東西組起來,再把字串接起來,或者你可以用 Go 裡的字串建構器。所以很多是,把他們推向更好的模式、最佳實務和模式。謝謝收看。

Jonathan:好,這很酷,很有意思。那現在,你日常工作大致上是什麼樣子,開發佔其中多少?你說你待過科技業一段時間了,你的一天長什麼樣?有哪些挑戰?目前工作上你最喜歡哪些部分?

Isaac:我是做網站可靠性工程的,大致類似 DevOps,裡面也摻了一些系統管理的東西。過去十年左右,我一直帶著呼叫器、參與值班輪值。所以我每天的樣子,很大程度取決於那週是不是我值班。值班的時候,就是盯著呼叫器,有一條工單佇列、支援佇列,確保任何出錯的流程或問題都被診斷出來並修好。那大約是六週裡的一週,或者看團隊現在有多大。其餘的時間,我也在值班。

Jonathan:嗯哼。

Isaac:我花很多時間在搞自動化,所以很多是找出繁瑣的流程,讓它們不那麼繁瑣。有可能是……那件事會發生可能有它的理由,不過一般來說我發現,除非某件事開始……就是當這個問題發生時,我們得執行,你知道,我們得手動修復,做這些指令、那些指令,那我就會想,為什麼我們要手動跑這些指令?我們能不能寫個 Python 腳本幫你全部做完?或者我們能不能改進工具,讓它不要出錯、自己抓到那個問題?很多時候就是在想辦法改善我們日常維運系統的方式,讓人力涉入更少,或不需要涉入那麼深,就能讓一切順順地跑。

Jonathan:那你的日常……你喜歡去找那些可以最佳化的小地方嗎?你的工作有多少是在對事情做出反應,然後從反應中想著,喔酷,這是個改善的機會;又有多少是主動去找那些小地方?通常比例大概是怎樣?

Isaac:我喜歡自動化,那大概是我工作上最喜歡的一件事,就是能把事情自動化。它不一定是反應式的。我是說,反應式可能是指某個東西壞掉,也可能是像,喔,你知道,大家在跑某個指令,我發現我們常常複製貼上這個指令,那我能改進它嗎?或者我看到有人改了某處的執行手冊,或改進了某處的指令,我就想,喔,那個指令挺亂的,我能不能直接從頭重寫?當然,關注度太高也不行,得和吸引力取得平衡,字別那麼大,用更好的語言,諸如此類。你得靠著試著去做,才能駕馭這些。老實說,如果要我想,我工作裡的一切其實都很契合。所以我這個人很有動力,不,我猜不管哪個工作都一樣,但在任何我熱愛的工作裡,替自己消磨時間……它就只是為了試著……

Jonathan:你也可以說是「製造」吧。

Isaac:重構,注意到有些工具用起來很繁瑣,就決定把它們重寫,或是在外面寫一層包裝。我會看到,是啊,比如我會看到某個大型、複雜程式的程式碼變更,就想,喔,這程式一團亂,我能不能進去重寫或重構它?或者建立新的……我是說,不一定是重構,有時就只是打造新工具。比如,喔,我們有個流程要做 20 個步驟,讓我把它全部塞進一支程式裡。很多時候確實是,你知道,我總得想辦法發現這些東西。有時我是因為被指派要執行一組任務才發現,然後我就想,我不想手動跑這些。有時就只是注意到,比如我在查某段程式碼,然後我想,喔,這裡另一段由其他團隊維護的程式碼做得很糟,讓我來重構它,或者改用現代一點的函式庫之類的,是啊。

Jonathan:所以很多是……就是能夠看見。那你有多大的自主空間?你可以相當自由地到處晃、突然插手改一下這裡嗎?我是說,那一定很好玩、很享受。

Isaac:我的主管給我很大的自主空間,這真的很棒。我不確定這有多少是來自……我現在不在 Google 了,但我不確定這有多少是來自我在 Google 的背景。在 Google,大家很願意突然插手,說,喔,我注意到別人……你知道,我剛好用到這個函式庫,它這裡可以改進,讓我來修一下。呃,我曾非常、非常短暫地待過一家新創公司,那裡文化很不一樣,開放程度低很多。呃,在那家新創,大家對自己的程式庫非常保護,不太能接受別人改他們的程式碼。所以我要是說,喔,這個程式庫有問題,真想改一下那個程式庫……

Jonathan:是啊,少管閒事。不過這很有意思,因為……你會以為新創公司更會是那種,反正就是把事情做完、盡量用最便宜的方式做,你知道嗎,但實際上,也許 Google 反而更能從概念上處理這件事。抱歉,我剛剛把燈打開了,因為我們……現在聽眾朋友們,我這邊沒開燈,開普敦偶爾會沒電。剛剛那個光線有點刺眼,不過沒關係。不過回到新創文化那點真的很有意思,大家反而更執著於要對東西有所有權,然後可能反而有點綁手綁腳,你知道嗎?

Isaac:是啊,我不確定當新創公司一定就等於有開放……像是遊戲式的工作文化。在 Google,大家做的很多事情都像是在玩,因為他們喜歡自己做的事。他們是因為喜歡才做。他們在這方面非常友善、非常開放。其他一些職場文化則比較不是因為你喜歡才做,而更偏向,這是一份工作,或這是我的程式碼,我知道它怎麼運作,我不想讓別人來亂動。我不太確定要怎麼讓職場文化產生這些改變。但 Google 確實培養出一種氛圍:每個人都能取用所有程式碼,你也有權去改它,想做什麼你覺得對的事就去做。而我現在的工作、現在的主管,也給了我很大的自由。他會說,當然,你發現了要修的東西,那就去修吧。你找到了可以改進的地方,我就讓開,不擋你,需要什麼幫忙再告訴我。所以我確實能很大程度地自我主導,只要我發現一個地方,想說,喔,我可以把這個弄得更好,他就會說,好啊,那很棒,去做吧。

Jonathan:好,太好了。那你……那家公司總部在東岸,我說的沒錯吧,所以其實你是遠端工作?我記得你說過你本來要搬過去,結果 COVID 爆發,整件事就結束了。你覺得遠端、距離、時差這些怎麼樣?會影響你嗎,還是……

Isaac:我確實很懷念待在辦公室、跟人面對面互動。呃,所以這是一點。呃,時差方面,我的團隊對時差非常……非常配合。我比團隊其他人晚三個小時。呃,有一場簡短的每日站立會議我會錯過。我們有兩場每日站立會議,對應兩個不同產品。呃,所以第一場我會錯過,我的團隊在這方面非常體諒我,我們內部很常用 Slack。所以他們很擅長用每天的 Slack 討論串記錄當天出現的問題,讓我能跟上,如果他們需要什麼,就會 ping 我。呃,我確實、確實盡量做到有求必應,呃,早上能多快處理就多快處理。所以,呃,這有點像……時差不算理想,但也不算太糟,他們……我們一直處理得還不錯。呃,反過來說,也有另一面:他們知道團隊裡有人晚一點才睡。所以我有同事會在東岸時間晚上六點說,喔,這個壞了,嘿,Isaac 在西岸,Isaac 可以幫我看看這個,因為他那邊才下午三點。呃,所以這是雙向的。呃,是啊,那個……

Jonathan:是啊。

Isaac:我……對,我 2019 年離開 Google,抱歉,是 2020 年。我是 2019 年面試的。本來預計 2020 年 5 月到職。我原本打算 2020 年 4 月搬過去,但 COVID 開始了,然後辦公室就關了,接下來就是一連串的,喔,辦公室還沒開,等辦公室一開他就會搬過去。結果疫情過了兩年,他們又開始重開辦公室。我就想,你知道,我不太確定自己還想不想搬了。紐約聽起來真的很令人興奮,但那是因為各種店家都開著,你知道,有各種場所、活動在進行。但現在疫情之下,那一切聽起來就沒那麼令人興奮了。所以我在遠端工作兩年之後,就轉成了遠端職位。

Jonathan:那你是那種城市人、鄉下人或介於中間的人?因為紐約是城市,百分之百的城市,這沒得說,你懂我意思嗎?所以那對你來說會是很大的轉變,我猜。是啊,不過還是很令人興奮。

Isaac:我是在大城市附近長大的,所以對城市生活並不陌生。我現在住在郊區。我喜歡健行和騎單車,盡可能多往戶外跑。所以我確實喜歡住在郊區,附近有很棒的健行和單車步道之類的。搬到紐約會是很大的改變。不過我覺得偶爾換換環境也不是壞事。要是我在紐約活得很痛苦,我隨時可以搬走。

Jonathan:要這麼做其實不難。不過那挺好的。那現在你大概……如果我說錯請糾正我,你應該花很多時間盯著螢幕,像是在辦公室,還是說在家工作之類的。你會每天出門嗎,是怎麼平衡整個待在螢幕前的世界,還是你有每天固定的時間,覺得我非得出去走走、做點別的事?

Isaac:我希望我有。有些日子、有些月份、有些年份我做得比別人好。2020 年我幾乎每天都騎單車,做得還不錯。大部分週末我確實會出門。我盡量一週去健行一次。我做得沒有很好,不過我正要去健行。這要看季節。我在加州,有些週熱到不行。我們剛經歷一波熱浪,連續大概一週超過 40 度。所以出門變得很困難。我們在加州還有野火,你知道,有時會有一兩週戶外空氣品質不見得完全適合呼吸。所以在加州,有些週要待在戶外是有難度的。而疫情期間待在室內也不容易。所以確實有些週我待在室內的時間比別人多很多。但我喜歡出門。有過這樣的情況,你知道,我曾連續六個月,至少每隔一週就去健行。然後……

Isaac:也有過連續六個月、大概每個月露營一次的時候。所以有些時期我做得比較好,也有些時期我就只是連續兩週都待在家裡。

Jonathan:是啊,那很好。那 Isaac,接下來大概是……也許,我不知道,也許你沒想那麼遠,但你未來五年大概會是什麼樣子?你有什麼想法嗎,還是你覺得,我想自己創業,或我想做這個;或者你只是,啊,就享受生活、享受現在所在的位置?

Isaac:我……搬到西岸之前,我以為自己對未來會是什麼樣子掌握得還不錯。但這些全被打亂之後,讓我學到,預測明年會發生什麼事都很難了,更別說五年。我現在挺開心的。我最近才換工作。大概兩年、兩年半前換的。我很享受現在的工作,所以短期內應該不會變。接下來兩、三年,甚至五年,我都很樂意待在同一份工作上。我喜歡住在加州。我喜歡能去健行、騎車、露營這些事。所以我不覺得自己短期內會離開加州。我也不覺得自己短期內會離開那份工作,因為我在那裡工作得相當開心。所以我挺滿足的,沒看到什麼重大的……我沒有什麼重大改變的計畫,不過真的很難說。

Jonathan:很好。好,那我還有幾個問題,很想聽聽你的看法。第一個大概不是我事先跟你說好的那個,但是……如果你……如果有 10 個人現在走進你的辦公室,10 個完全陌生的人,而他們對寫程式一無所知,他們可能是豎琴家、園丁之類的,你會給他們哪三個最重要的建議,教他們怎麼開始寫程式?如果只能濃縮成,無論如何都要做的事,那會是哪些建議?

Isaac:我的第一條建議會是,試著找到一個你能用寫程式解決的問題。所以你有個……具體的專案能提供動力。如果心裡沒有明確的目標帶你往前,那就會非常困難。學寫程式就像學其他任何技能一樣,確實需要相當的毅力或韌性。你就是得撐下去。一開始可能非常困難,可能非常挫折。如果沒有東西推著你往前,很容易就放棄。所以如果可能的話,有個你真的想用它來完成的東西,幫助很大。這些建議其實都算同一組概念。就是,你得撐住、持續下去。對自己有耐心、認清你正在學一項新技能、而且會失敗很多次,這幫助很大。我遇過一些人試著學寫程式,然後就挫折了。他們說,喔,我平常做什麼都很行,這東西怎麼一開箱就不管用。我就說,是啊,失敗是學習過程的一部分。如果你對失敗感到很不自在,那你學新技能就會非常辛苦。你要對自己有耐心,也要對過程有耐心,然後就是不斷撐下去。

Jonathan:這很有用。我是說,我會說這有點像,我才剛搞懂方法怎麼運作。這一路走來就是這樣,因為很多知識,嗯,當人們在講東西的時候,教的人往往預設了很多背景知識,尤其是這樣。所以,忽然間大家都在丟「方法」這個詞。我就想,方法到底是什麼東西?到底怎麼回事?我是透過 Go 的共學團才開始搞懂,喔,方法是這樣運作的。那幾乎像是靈光一閃,但我得把自己泡在那個環境和那套術語裡夠久,它才慢慢滲進來。我會說這對我來說是最大的收穫之一,就是不要想一次學完,而是一次慢慢啃一個簡單的概念。因為所有東西都環環相扣,最後你就能開始把心智模型串起來,這真的很重要。所以這是個很棒的小工具。我會告訴大家,這是 Isaac 的建議:有耐心、對自己好一點,慢慢啃。這真的很棒。好。那最後一個問題,在我放你去忙之前,我們團隊聊過一個概念,就是你在科技界會誓死捍衛的那座山。聽起來很誇張、很戲劇化。這個概念基本上就是,你認為在科技領域中絕對關鍵、不可動搖的一種心態或觀點是什麼。舉個好例子,比如說,我不知道,很瑣碎的例子,我如果是做前端,總是先寫函式,然後才寫 CSS。所以是功能、再來邏輯、再來其他。也可能是,你知道,我們有一個例子,Rebecca,她負責 Unison 學習路徑。她說,與其有一個自以為是、很難共事的天才,她寧願有 50 個真心喜歡團隊合作、一起解決問題的人,也不要一個佔掉所有管理頻寬的天才。那是她的一個……我把她講得委婉了一點,那你在科技領域誓死捍衛的那座山、你不可妥協的那一點,會是什麼?

Isaac:這大概深受 Google 做事方式的影響。在 Google,他們有個「可讀性」的概念,程式碼應該要好讀。我寫程式時,很多時候都希望我的程式碼簡單好讀、好懂。我看過很多程式碼,尤其是……很多焦點都放在效率、基準測試、讓程式跑得更快上。我常會承認,我的寫法不見得是效率最高的,但如果我發現程式碼更好讀,我會寧願選好讀但效率較差的程式碼,而不是效率超高但難讀的。所以,就像,你知道,有一句很有名的話,我不確定到底是誰說的,就是萬惡的根源……「過早最佳化是萬惡之源」。每當有人說,喔,這怎麼能更有效率?我就會問,它需要更有效率嗎?你遇到……你在正式環境跑的時候有碰到效率問題嗎?它在正式環境裡用起來太慢了嗎?如果你在正式環境裡根本沒實際遇過這個程式碼需要更有效率的問題,那你為什麼要讓它更有效率?它現在這樣比較好讀、比較好維護,別人也看得懂發生什麼事。你為什麼要為了省幾個 CPU 週期,就放棄寫得好、好合作又好維護的程式碼?電費夠便宜、CPU 也夠便宜,便宜到我們不需要為了最佳化而最佳化嗎?

Jonathan:是啊,這總是好笑,因為這是那種我會想……我們的程式編譯並執行花了 30 毫秒。然後他們說,喔,但我們把它降到 20 毫秒了。我就想,我真的分不出來。我沒辦法告訴你哪個比較快、哪個比較慢。那看起來已經很快了。所以我覺得這是個好觀點。我相信我會很喜歡讀你的程式碼,不過那很棒。Isaac,非常感謝你撥出時間,早起,還要忍受南半球的輪流停電。還有我坐在全黑的房間裡,我相信對你來說應該挺好笑的。但非常感謝你撥空。期待在未來的學習共學團、引導活動等地方再見到你。也謝謝你對 Exercism 以及各方面所有的貢獻。真的很感謝。然後,是啊,再次非常謝謝你。我們待會見。不,是我的榮幸。保重,Isaac,再見。

Isaac:再次非常謝謝你。不,是我的榮幸。保重,Isaac。

更多來自我們社群的故事

聆聽、學習,並從我們的社群成員身上獲得啟發。