在本週的社群故事中,Franziska 和 Jonathan 聊聊團隊動力、企業裡不同的人如何進行協作,以及如何把自己放在能學會成為程式設計師的位置上。
**Jonathan:**你好,歡迎收聽 Exercism Podcast。我是 Jonathan,很榮幸今天能擔任主持人。和我一起的是 Franziska,她是我們 Go 和 JavaScript track 的維護者之一。我們非常榮幸能邀請 Franziska 加入 Exercism,她已經參與好幾年了。 所以如果你在社群裡待過一陣子,可能就遇過 Franziska,不管是在學習小組裡,還是在 Go 和 JavaScript track 上。Franziska,今天熱烈歡迎你,非常感謝你來參加。我就直接開始,問問你是怎麼走到今天這一步的?
**Franziska:**對。好。我是 Franziska。在網路上我叫 June,或是 June Dev。我目前住在德國法蘭克福附近,就在市界外的一個小郊區。我最近剛到 Atlassian 開始一份新工作。Atlassian 是很多讓人又愛又恨的工具背後的公司,像是 Trello、Jira、Confluence。 我在那裡做的事情,是開發一個新工具,幫助產品經理處理他們的工作。因為 Jira 主要是為開發者設計的,並不太適合產品經理需要做的事,比如排優先順序之類的。 所以我們專門為他們打造東西。我很喜歡 Go 這門語言,真的很愛。我們的後端就是用 Go 寫的。所以當我看到那則徵才廣告時,我想,嘿,他們在做這個,太酷了。我就去應徵,然後拿到了這份工作。到目前為止也才 30 天吧,但這是一段很棒的經歷。 我小時候一直對科技、自然科學、科幻很有興趣,是《星際爭霸戰》的大粉絲,這類東西我都愛。我發現自己在學校數理方面還不錯。那時候很多人讀資訊工程,大家總是叫我們不要跟著別人讀,因為以後這類人會太多。我心想,好吧,也許我不該讀資訊工程,因為以後這種人會太多。 總之我想,好吧,那就讀個類似的。最後我去讀了物理,這是我在學校很喜歡的科目。資訊工程對我來說比較像是輔系,所以修了一些課,但沒有其他人那麼多。你會走到一個階段,必須開始想:好,我接下來的人生要做什麼? 我要怎麼靠做自己真正喜歡的事來賺錢?後來我發現,在整個求學過程裡,寫程式其實是我最喜歡、也最擅長的那一塊。我想多做這件事,而且這也是能養活自己的事。
所以我想,好,在沒有傳統資訊工程學位的情況下,我要怎麼進入這個領域找到工作?另一件事是,那時候我不想變成 C 開發者、Java 開發者,就是那種老派的、在某個銀行寫後端程式碼的人。
所以我想,好,我要怎麼學比較現代的东西,網路、Web 這些。我想為這個領域做點東西。後來有個朋友告訴我,有一種東西叫程式開發訓練營,你可以去某個地方待三個月,他們會教你最新的酷東西。
對,所以我決定要做這件事。這樣一來,我應該會有更好的起點去找工作。而當時德國這裡根本沒有這種訓練營。
對。那邊的情況是,你要嘛去大學讀好幾年,對吧?要嘛有些地方可以讓你同時工作又學習,但那也是很龐大的學程,要讀好幾年。至於訓練營,那邊只有一些像新創加速器之類的東西,你會學一點程式,但同時也要學管理、經濟之類的。所以那不太適合我。我稍微找了一下,後來發現倫敦有一家不錯的,課程正好是我想學的科目。
**Jonathan:**那裡才是潮流所在。
**Franziska:**熱潮就是在那裡發生。對,沒錯,就是這樣。就是最酷的新东西正在發生的地方。我找到了這個訓練營,老兄,我就去了。那真的是一次非常棒的體驗。我們的後端是用 Node.js 寫的。
後來我回到法蘭克福,真的找到了一份 Node 開發者的工作。那間公司蠻酷的,技術也很酷,我很快就上手了所有東西,很有趣。不過我在團隊方面運氣差了點,身邊有很多自我膨脹、大男人主義的團隊成員。
開會的時候,就像是誰聲音最大誰就贏。那樣子的團隊待起來並不愉快。
**Jonathan:**這其實是很常見的情況。大家報名學寫程式,結果最後出問題的,往往是那些周邊的、團隊方面的東西,而這正是人們最沒預料到會是問題或挑戰的地方。所以這似乎挺常見的。抱歉。
**Franziska:**對,對,絕對是。而且你一開始會高估技術那一塊。你會想,喔,這份工作剛好用到我想做的技術,所以應該沒問題。但其實,團隊那部分幾乎比你實際在做什麼技術還重要。
對。所以兩年後,有個朋友剛好是法蘭克福另一間公司的 CTO。他說他們也想要改造自己的技術,想做點新的東西,但不想用 Node.js,他們決定要用 Go,不管什麼原因。他說我可以加入他們。
但我當然得學 Go。我說,如果你不介意我一開始花點時間學這個,我很願意。我看了一下這門語言,聽起來很酷。於是我換了公司。在新公司,團隊真的很棒。
在那裡,就算你是和執行長討論,只要你的論點更好,就會被看見,大家也會有所回應。跟這樣的人共事真的很棒,大家也都很有意思。所以我在那裡待了五年。
我建了很多成長服務,也寫了很多給人看的文件,寫一些概念來幫助其他開發者上手 Go,還做了一些前端的東西等等。
對,但五年之後,你也會想找新的挑戰。影響我去找新工作的另一個原因,是疫情的關係。我發現自己本來就在家工作,對吧?大概一個星期才進辦公室一次。所以我想,外面有很多完全遠端的工作。也許我可以在更大的公司找到很棒的机会。既然我本來就在家工作,那我也能替更大、更酷的公司工作,對吧?
對,所以就在那個時候,我找到了 Atlassian 這份工作。
**Jonathan:**我想我那時的問題是,整場疫情有沒有讓你開始想,喔,也許除了法蘭克福、除了法蘭克福的新創圈之外,還有更多可能?因為我本來想問,法蘭克福的新創圈作為一個環境,是什麼樣子?
**Franziska:**對,先講疫情這點好了。疫情讓我打開的,是完全遠端工作這個想法。因為以前我總是喜歡去辦公室,喜歡面對面見到人,也習慣這樣安排我的一天等等。但後來我發現,在主要都遠距工作了兩年之後,我發現這樣也沒問題。 我可以適應。我有女兒,本來就常常得出門,等等。所以我現在一天裡有足夠的結構。這是疫情讓我看到的事,也讓我開始考慮去別的地方找機會。
至於法蘭克福,這裡的科技和新創活動是不少,但你也料得到,這裡有很多東西都聚焦在銀行業,所以有很多金融科技公司等等。而那不是我特別感興趣的。我以前做過金融科技,但這個主題本身並不是我特別熱衷的。
對,所以那一直有點……而且這附近也沒有很多 Go 開發者。對,沒有什麼特別把我留在法蘭克福、或留在法蘭克福這個圈子裡的理由。對,所以……
**Jonathan:**沒有,了解。那法蘭克福有特別聚焦哪些語言嗎?比如說金融科技,支撐那些東西的語言,是不是也比較是重點?所以你在法蘭克福當 Go 開發者,會不會覺得自己有點稀有?還是說這樣的人正在變多?在你眼裡是什麼樣子?
**Franziska:**對,目前很難說是不是在變多,因為疫情的關係,聚會之類的活動本來就不多,對吧?所以現在很難看出隨著時間,來參加聚會的人是不是變多了。對,我覺得像 Java 那塊的活動就多很多。所以有點難說確切的情況,不過舉例來說,JavaScript 通常比較容易凝聚出一個社群,因為大家多多少少都有一些前端的東西,對吧?所以前端的世界通常比後端熱鬧。
**Jonathan:**那你,我想你一開始寫程式、去上訓練營的時候,應該也接觸過前端的部分,稍微碰過一些,而現在你比較專注在後端。你為什麼比較喜歡後端而不是前端?還是這只是我自己的假設?
**Franziska:**不,這是真的。我在訓練營的時候就發現自己比較喜歡後端這一塊,這背後有幾個原因。首先,我不是那種設計型的人,所以如果你做前端,通常也得自己做一些判斷,比如這東西該長什麼樣子?我在這裡能做什麼?要怎麼改善?得寫一些 CSS 之類的。而做這些判斷對我來說非常難。 當然,在真實工作裡你通常會拿到設計稿。但對,我就是對這種東西比較沒有美感。而我看到那些有這種眼光、做得到的前端開發者,做起這份工作來更有效率。所以這是讓我覺得前端不太適合我的原因之一。
另一個原因是,目前前端這個領域真的超級複雜。那裡的各種框架,大部分常用的都真的很難。所以某種程度上,現在的後端還比較簡單一點。它難的地方在於比較不容易視覺化,對吧?不像前端那樣,你看著螢幕就能看到最終成果。
但就所涉及的技術複雜度來說,我覺得現在後端反而比前端那邊單純一些。所以對我來說,我職涯中某個時間點一定還是會想回去做前端。但我在等更好的框架出現。等到目前這一團亂平息下來,出現了更好的東西,我就會回去當前端開發者。
**Jonathan:**那我乾脆等你決定那個框架什麼時候出現,再跟你一起跳進去好了。因為看那些建立在 JavaScript 上的框架,而且我算是新手,各方面都是新手。我現在正在學 Go,也學得蠻開心的。但光是那些概念、還有你必須建立的心智模型,本身就是一個全新的世界。 我也想問,你當初從學 JavaScript、到後來學 Go,中間是怎麼銜接的?因為你講起來,好像從 JavaScript 轉到 Go 對你來說是個蠻直接的過程。但實際上是什麼樣子?你做了什麼來完成這個轉換?
**Franziska:**對,好問題。這裡有件重要的事:JavaScript 並不是我唯一的語言,對吧?大學時我沒有深入學很多語言,但我學過 C,學過 Java,學過 C++,學過 MATLAB,還有一些比較冷門的語言。
所以對我來說,JavaScript 已經算是我的第五個語言左右,Go 則是第六個。 舉例來說,Go 有那個整套東西,你也聽過指標之類的。如果你只會 JavaScript,那會是全新的概念,我得從頭搞懂這到底在幹嘛。但因為背後有這些其他語言,我早就從 C、C++ 之類的語言學過了。
所以我可以依靠很多大學時就學過的東西,這讓我很輕鬆就上手了。另一個對 Go 有幫助的地方是,它是一門相當精簡的語言。它沒有那麼多關鍵字,也沒有那麼多可以組出來的結構。
你可以很快學完。我通常會說,去做官方的導覽,上網站或是……總之,你大概兩、三個星期就能走完一遍。
然後你就能有扎實的理解。這在 JavaScript 上是不可能的,光是對基礎有扎實的理解就要花久得多,而且後面還有好多東西要學。所以,我轉換的目標語言本身也幫了很大的忙,讓這個轉換變得很輕鬆。
**Jonathan:**好。現在你在 Atlassian 工作,你也稍微提到產品和技術之間的交叉之類的東西。你說金融科技對你來說沒什麼吸引力,不是特別讓你興奮。你會說,產品這個領域,以及技術和產品之間的介面,是你真的很喜歡的嗎?或者如果請你總結一下,在科技領域裡,什麼才是你真正熱愛的?我知道這是個很大的問題,但可以請你稍微談談嗎?
**Franziska:**對,我感興趣的領域或主題有好幾種,不只有我現在工作的地方。舉例來說,我很喜歡消費性產品這一類的東西。像 Hello Fresh 這樣的公司,就做了很多很酷的事,很酷的技術相關的東西。還有教育領域也有不少,像 Exercism 之類的。另外一塊則是開發者工具,或是一般團隊用的工具。
所以有好幾個領域,而現在這個就是其中之一,讓我可以想,嘿,幫助大家做這件事很合理。講到產品管理,我可以說個 Jeremy 的小故事,還有我上一間公司的執行長。我告訴他我這份新工作和我要做的事,他講的話跟 Exercism 創辦人 Jeremy 一模一樣。他對我說了一模一樣的話,他說:你選這份工作,是不是因為你受不了我的產品管理能力?
所以這整件事也告訴你,產品管理、還有把產品管理做得更好,一直是我很有熱情的事。因為重點是,身為開發者,你可以寫出有史以來最棒的程式碼,但如果你寫的是錯的東西、做的是錯的東西,那一切都是白費,對吧?
所以如果你的產品經理沒有好好找出你該做什麼,那你做出來的東西可能根本沒人用,因為他們沒有好好分析市場,也沒有好好排優先順序,諸如此類。
我在過去的工作裡經歷過這種事。我做過很多東西,最後根本沒見到天日,因為沒有好的排優先順序流程,對吧?所以我才認為,整體改善產品管理這一塊,也會讓全世界開發者的生活好很多,因為這樣他們才能做出對的東西、真正創造價值,而不是做出最後被丟進垃圾桶、或使用者根本看不到的東西。
**Jonathan:**對,這真的很有意思,因為你似乎點出了一種心態。我想我們常有這種想法:如果你技術很強,就埋頭在後台做事,你這個人永遠不會被看見,因為你就是在做技術,這可以說就是刻板印象。
但這幾年感覺起來,技術和商業之間的交叉確實越來越多。對我來說,我一直把敏捷當成一個概念在想。而敏捷這個概念,老實說,我覺得是一種商業思維、一種看事情的方式,被套在技術團隊身上。
老實說,在我看來,它感覺是有幫助的,但我從沒見過哪個敏捷環境真的……或者說真的能按時結出果實,如果你懂我的意思。也許是因為我過去看到的都是管理不善的例子,但確實感覺交叉變多了,開發者開始想更參與商業那一面。我覺得這很有意思,也覺得這其實是件好事,因為這樣一來,整體的決策品質會更好。
**Franziska:**對,有些開發者想更參與,但也有一些不想,可是他們無論如何都得參與。重點是,事情不是那樣運作的:不可能產品管理就坐下來把一切拆解好,隔著一道牆把東西丟過來,你的開發者照著做,然後就沒事了。
就算在過去那還是標準做法的年代,這種方式也從來沒有真的行得通。而現在,對,大家更重視這件事了,但開發者和設計師之間、開發者和產品經理之間有更多對話,一直以來都是對的做法。
還有就是,當你更下游的地方,比如說你有客服團隊,也許還有負責維護的人之類的。他們合作得越緊密、真的一起找出最好的解法,就越好,你們能一起創造的價值也越多。
這一點一直都沒變。舉例來說,我們現在正在做的那個功能,產品管理那邊有很多想法,想著這項新功能的第一次疊代可以包含哪些東西。但對他們來說,他們自己沒辦法判斷。加這個東西,是多一天的工作量,還是會把整個範圍炸開、變成多三個月的工作?
對,所以對他們來說,這根本無法判斷。我們唯一能為第一次疊代找到好的包裝方式的方法,就是彼此討論,說這個加起來很簡單、這個加起來很困難等等。然後我們就找到一個好的範圍。而我這份工作、在 Atlassian 的好處是,我們的產品經理也是這樣想的。
他總是說,範圍是雙向的東西。我這裡有一些想法,但你也得給我意見,告訴我什麼最合理,然後我們一起討論出結果。我也注意到,像我當初跑面試流程的時候,溝通這個主題。
跟別人溝通、跟其他團隊溝通之類的,現在非常受重視。很多人會問,你都怎麼跟其他團隊合作?而且他們光是透過跟你對話,就能判斷你表達自己的能力有多好,因為你是否在意其他團隊在做什麼、是否參與其中,這超級重要。
也只有這樣,你才能真正把時間發揮到最大。
**Jonathan:**感覺那樣是更整合的做法。這也讓我想到另一件事,很多時候……
**Franziska:**喔,在我們繼續之前,你提到了敏捷這個關鍵字,對吧?我一定要接這個話題。我不知道你是不是故意要戳我,對吧。
說到敏捷,我一直覺得它最初的基礎理念,像是人比流程更重要,還有那些很久以前提出的基本原則,至今仍然很有道理。
它們周圍有很多魔法般的光環。但後來那些顧問跑來,發明了各種龐大的框架,把它們拿去賣,還出現了 Scrum Master 之類的角色。而我的經驗也像你說的,那些東西很多其實沒什麼幫助。
比如說,如果產品和開發者之間溝通不良,光是在上面套上這些結構,也無法真正解決問題。
所以我也不是很喜歡那些標準的 Scrum 做法、敏捷做法,我也沒在哪裡看過它們真的運作得很好。
**Jonathan:**這很有意思,因為感覺上,如果你上 LinkedIn 找工作,找產品負責人或產品經理,全都是 Scrum、敏捷,到處都是,你會覺得很誇張。但很好笑的是,我見過最有……怎麼說,最有辦法的開發團隊,反而是用 Kanban。Kanban 沒有一定要在某個時間內產出什麼的壓力,但能產出品質,而且它把責任放回個人身上,讓你自己對成果負責。經歷這個過程真的很有意思,因為年輕團隊會卡在敏捷上,發現行不通、感到挫折,最後落到 Kanban,我們就是隨著時間穩定地一點一點推進,事情就順利運作了。
但我也覺得,當你自己有一個產品在經營,跟你在替別人做產品,這兩件事很有意思。我不知道你之前的工作是什麼,是不是自有產品。我知道在 Atlassian,你們基本上是在做自己的產品。
**Franziska:**對,我一直都是在做自己的產品,從來沒待過像代理商那種公司。
**Jonathan:**對。代理商那種真的是一場噩夢,因為在那裡,每個人都會緊盯著你每一小時的開發時間之類的,然後說:我不懂,這個按鈕為什麼要花我 400 美元?結果只是要把按鈕從這裡移到那裡,卻等於把整個後端重做一遍。
所以我想問你一個問題,我們在各種 podcast 和直播裡問過很多人。就是那個所謂「你願意死守的山頭」,或者說,當談到某個觀點、某個技術上的看法時,你會用一生去捍衛的那件事。我們不是要說這是每個人都必須抱持的觀點,而更像是:你有哪一個價值觀或看法,對你來說絕對是核心,而且你會希望整個科技圈都能接受?這問題有點廣泛,但技術上有沒有一件事是你會非常強力捍衛的?
**Franziska:**我以為你會把這個問題弄得輕鬆一點。我本來想講個輕鬆的、不受歡迎的觀點就好。這樣也可以嗎?
**Jonathan:**當然可以。
**Franziska:**好,我沒有那麼多非死守不可的大山頭。不過有一件事我很有感,就是很多人會建議你去最佳化自己的個人開發環境。我覺得這大多被高估了。
比如有人會跟你說,喔,你必須學 Vim,因為這樣你就再也不用碰滑鼠了,多棒多棒之類的。而剛入行的人會相信這些。然後他們花一整年去學各種神奇快捷鍵。結果到頭來,誰知道呢,也許一年只省下一天。那一年受的苦,那一年受的苦根本不值得。
這種事還有很多,比如有人跟你說,你得在 dotfiles 裡把終端機的所有 alias 都設好,還有人說你得記住所有快捷鍵,然後你花一大堆時間去學這些東西,最後省下的卻很有限。我覺得問題在於,大家高估了工作裡花在打字上的時間,對吧?
就像我們前面提到的,工作裡有很大一部分是溝通,有很大一部分其實是思考。對。而一天裡真正在打字的時間,不管是打程式碼還是打指令,其實就那麼多。所以很多人是在最佳化一天裡極小的一部分。在我看來,對,如果這是你的興趣,那就去做。或者如果它對你有類似的好處。如果你是 SRE,也就是網站可靠性工程師,要進到伺服器裡操作之類的,那懂 Vim 可能就有道理,對吧?因為你沒辦法開圖形介面。但如果你不需要,就別操心這些。用你覺得順手的東西就好。
比如說快捷鍵,我總是說,大部分的圖形介面都會把快捷鍵顯示在你點的那個東西旁邊。所以如果你一天點那個東西大約五次,那好吧,也許值得記一下;如果每五分鐘就點一次,那就更值得記住那個快捷鍵。但如果不是,那就好好待在圖形介面裡做你的事,寧可把時間花在增進真正的寫程式能力上。做點練習,之類的。學一門新語言。隨便什麼都好。
對,這是我一直想告訴新手開發者的事:不要被那些人嚇到,他們說你非得用那些古老編輯器、還得在上面最佳化生產力……
**Jonathan:**這很好笑,因為常常是這樣:人們的熱情不知不覺就滲進來了,這也無可厚非。因為他們會說,喔,我超興奮,因為我把自己的生活最佳化了。但仔細想想,那其實不見得是最好的。
我學東西的經驗也是這樣,人們會給你一大堆建議。你上 YouTube 搜尋怎麼學寫程式,有人從怎麼設定 GitHub 開始講,有人從怎麼理解終端機開始講,還有把東西抓下來在本機工作、線上編輯器之類的。我覺得這真的是很好的建議,就是保持簡單就好。
那如果要把更多時間花在思考上,你都怎麼做、用什麼方式把問題想通?如果工作上遇到某個狀況,或者一般來說,你一天裡都怎麼做?你會特別撥出時間嗎?你的流程是什麼樣子?
**Franziska:**我喜歡做的一件事,基本上就是在真正必須解決問題之前,先提早拿到問題,然後把它放在腦子後方放個一星期左右。然後洗澡的時候想一下,睡前也想一下,就在腦海裡翻來覆去一陣子。通常這樣能幫我找到一些起點。
接著,特別是工作上的問題,我通常會開始把一些重點寫下來,因為寫下來絕對能幫我釐清思緒、找出重點,比如找出哪些地方我還得跟產品經理談,因為我不知道客戶那邊確切需要什麼。
所以我會寫下我已經知道的事,以及要怎麼解決。我通常也會寫下一張蠻大的表,列出待解的問題,有些是給團隊裡其他人的,有些是給我自己、需要去弄清楚的。然後這真的能幫我把事情釐清。
然後從那個非常高層次的概念,我會試著拆解成更具體的程式設計任務。比如 API 長什麼樣子?我需要為這個儲存哪些資料?然後它怎麼從那個故事點一路走到資料、再走回來,中間得經過哪些邏輯。
這要看情況。有可能我在前面思考的階段就已經找到了很多需要解決的問題,但有時候當我開始寫程式,又會發現之前沒預料到的新問題,那我就得再退一步、重新想一遍,然後再回到實際的程式碼。所以這種情況也會發生。
但通常我的做法就是先試著把整件事想一下,事先解決一些問題對我有很大的幫助。然後,對,接下來程式碼不是寫起來很順,就是我又發現更多問題、再回頭,但那也沒關係。
**Jonathan:**好,這很酷。這常常也是我腦海裡的想法:如果你是全職程式設計師,你就是整天坐在電腦前,從早到晚一直敲。
但我慢慢體會到,把問題想通的能力,我想這也是 Exercism 試圖強調的,就是把問題好好想清楚、確保你掌握了所有脈絡。然後寫程式那部分,其實只是把那個過程表達出來並落實。Jeremy 應該也會這麼說。我想他會先把很多事情想過一遍,然後只寫短短的程式碼。
**Franziska:**對,而且對。還有一個常見的技巧,就是先在註解裡寫出你想讓這段程式做什麼。好,我要先做這個,然後結果會是那個,再接下來是那個,最後我再把對應的部分填進去。這也真的很有幫助。
**Jonathan:**這很有趣,因為你這麼一說,我現在一定要試試看。因為我發現,當你必須寫程式,尤其是在學 Go 之類的時候……我當時試著做的一個練習是,從鍵盤取得輸入、把它存起來,然後回傳像是「你已經猜了幾次」之類的訊息。
但把那個問題拆解成真正細部任務的整個思考過程,是我很不熟悉的。所以學習怎麼一步步思考一個問題,真的很有意思。
所以,這真的是很讚的小技巧,我一定會採納。
**Franziska:**這也是我們在 Exercism 上看到很多人的情況。很多人其實不太會卡在理解語言和語法上,但真正讓他們卡關的,是這種更整體的:我要怎麼解決這個比較一般的問題。
我們也試著在這方面提供一些文件,像是說,這裡有個好資源,可以學習用程式設計師的方式思考等等。但對,也許我們在這方面還能做得更好。
**Jonathan:**不,這是真的。這也帶出一個我覺得很有意思的問題,我也問過幾個人,每次跟別人聊到都覺得很有趣。就是關於「寫程式是什麼時候突然開竅的」這個概念。我不知道你有沒有過那種感覺:一開始都是概念和理論,你讀了一堆教科書,然後某天早上醒來,突然就覺得,喔,我懂了。我學東西的經驗常常是這樣。你的那個時刻是什麼時候?或者你有經歷過嗎?還是就只是慢慢累積,好,我就這樣一點一點懂了?那是什麼樣的感覺?
**Franziska:**喔,對,我想過這個問題,對,我覺得我確實有過開竅的時刻。不過讓我先從沒開竅的時候講起,可以嗎?我十幾歲的時候有一台那種玩具筆電,上面有一些遊戲,也有一個讓你可以用 Basic 寫程式的功能。
我爺爺來看我,他基本上是從打孔卡時代就開始寫程式的人,所以他一直很愛科技。他說,喔,你能在那上面寫程式,真酷。他想讓我見識寫程式有多酷,於是就從大家都會的那一招開始。
他輸入了 print、Hello world,然後它吐出 Hello world。我心裡想,Hello World 我也會打啊,你到底在幹嘛?他說,不是啦,它會照你叫它做的去做。然後他又輸入了像 1 加 2 等於,它吐出 3。我心想,我的計算機也會這個啊,你到底想讓我見識什麼?我完全不懂。
後來我在學校上了一門類似資訊工程的課。我們在那裡用 Turbo Pascal,它有個外掛之類的東西,可以叫出一隻小烏龜,在螢幕上畫東西。
他們給了我們一些很酷的練習,你輸入某種公式,它就會畫出非常精細、漂亮的碎形,看起來像葉子之類的。而這一切,只要你輸入一條小小的公式、告訴那隻烏龜要畫什麼就辦得到。
那對我來說就是開竅的一刻,因為我領悟到,只要給它超級簡單的指令,就能創造出我自己根本做不出來的複雜東西。我自己根本畫不出那麼多。所以對我來說,那就是,喔,原來如此。
它能做到我自己做不到的事。但對,之前我爺爺給我的那些解釋、還有他在那台機器上示範的東西,對,都沒用。反倒是看到這個圖形的東西,看到只需要這麼少的指令,就能讓電腦做出這麼複雜的事情,那才是我開竅的地方。
**Jonathan:**好,這很棒,因為我前幾天在方法上也有這種體會。我當時想,方法到底是什麼鬼?就是一直沒開竅。我學化學的時候也是一樣。我學了兩年,結果一夜之間,元素週期表突然變得完全合理。那時候我大概 16 歲。
我記得我當時想,天啊,這根本是最簡單的東西。我真不敢相信我兩年來都沒搞懂。然後考試就輕鬆寫意,因為我心想,所有答案都在元素週期表裡。你只要稍微……一切在我腦中都對上了。
跟別人聊到那個開竅的時刻也很有意思。Rebecca,你應該認識,可能知道她在 Exercism 的 Unison track,我問過她。因為她大學念的是英國文學。我就問,你是怎麼從英國文學走到寫程式的?你腦中是用什麼方法去理解這一切的?
她說,她會把正在寫的程式想像成一個故事、一段敘事,有主角,而那些函式就是角色之類的。我聽了想,喔,哇,這真的太有意思了,我絕對不會用這種角度去想。不,那真的很……
**Franziska:**對。但這又回到我們剛才講的註解,對吧?就是你在寫程式碼之前先寫的東西。那正是你先講故事,然後再為它寫出程式碼。
**Jonathan:**你提到這點真的很酷,因為我體會到,其實我是在註解裡寫一個故事,這個我一定會學起來。不……
**Franziska:**關於這個主題,還有一件事。有人做過研究,探討哪些人擅長寫程式之類的,結果發現,其實你的語言能力,比如你掌握多少詞彙之類的,也扮演了很重要的角色。
比如說,命名一向被說是程式設計裡很難的一件事。如果你擅長想出好的詞來描述你正在處理的東西,那會讓你的程式碼好很多。所以這其實不只是數學和分析能力,也很關乎你駕馭文字的能力,這可能是一開始意想不到的。
**Jonathan:**不,說到底,這大概就是語言,我覺得這是個很有意思的想法。以你來說,你本來就是德國人,德語是你的母語。你現在在 Atlassian 開發是用英文嗎?之前也一直是英文嗎?因為我想說,可能很不幸地,什麼東西都是英文。
你的英文講得很好,但你是在學校學的英文嗎?那寫程式呢,全都是用德文嗎?你是怎麼從那樣的經驗裡學到這一切的?
**Franziska:**對,總的來說,我很幸運,大部分的程式東西都是英文的,所有註解也都是英文等等。不見得都是最好的英文,但沒關係。對,講到我學英文,我在學校從來不擅長英文。
但我在大學時很幸運,去英國當了一年的交換學生。那才真的是……沉浸在語言裡。然後我的英文就進步了很多,之後就輕鬆了,但在那之前真的很糟。
對,所以那一年真的把語言學好,也讓我之後能和不是德國來的同事溝通等等。
然後在……這絕對是一個因素。或者說,如果英文不是你的母語,那你要為東西爭取到正確的名字就更難了,對吧?還有命名。你寫的每一行程式碼都在做這件事,對吧?你總是把某個值指定給某個東西,而你需要盡可能把那個東西命名好,讓程式碼清楚。
**Jonathan:**不,我覺得對非英語母語者來說,這並不那麼容易。我想這也開始在改變了。我前幾天看到一篇文章,說印度目前是世界上成長最快的科技市場。至於英文,他們會繼續用英文,還是轉向自己的地方語言,我知道印度這方面很多元。想想這些真的很有意思。
我們快要滿一小時了。我真的很享受這段對話。Franziska,我還有一個問題要問你。接下來輪到你給一個建議,給 Exercism 社群。你會給出什麼建議?可以是任何事,從推薦去吃什麼,到去散個步之類的,只要是你想推薦給社群的都行。這週你想給 Exercism 社群的建議是什麼?
**Franziska:**對,我要回到剛才在那個不受歡迎觀點裡談到的生產力主題。我的建議會是,休息一下,把一直想看的那部 Netflix 追完,隨便什麼都好。
通常人們一整天都非常專注在要有生產力。這對你的大腦不好。把大腦逼到那麼極致並不好,你的大腦要好地工作、要有創意等等,都需要休息,因為很多東西都是在那些休息時間裡處理掉的。
對,然後就只是坐在沙發上,稍微看個節目之類的,那是件好事,讓你的大腦有時間在背景裡自己運作。我覺得休息、抽出時間放空,這件事被低估了。
所以這就是我的建議。不要因為休息、放鬆而感到內疚。
**Jonathan:**太好了。我很喜歡這個建議。各位,當你聽到這裡,這就是 Franziska 這週給的建議。Franziska,非常感謝你撥出時間,也感謝你為 Exercism 付出的一切,還有你所有的思考和與社群的互動。
我知道你投入了大量心力在 Exercism 上,改善它、幫助它,我們真的很感謝。我只想說聲謝謝,也謝謝你今天早上的時間。今天是國定假日,你本來可以出去慶祝、做些好玩的事,卻把時間給了我們,真的非常感謝。
我在停止錄音之後,你還留在通話裡,但我就是想好好謝謝你,也祝你今天過得愉快。好。
**Franziska:**謝謝你邀請我。
聆聽、學習,並從我們的社群成員身上獲得啟發。