本期內容
嗨,我是 Kalan!謝謝你們訂閱這份電子報。你可以直接回信跟我互動,也可以到 Twitter 上找到我。如果覺得不錯的話也歡迎推薦分享給你的朋友~
談談犯錯這件事
有可能是職業的關係導致自己的自尊心作祟,犯錯似乎是件非常可恥的事情,尤其是在公眾領域犯錯的話,會讓自己看起來像個笨蛋。
儘管已經有一大堆文章在講犯錯這件事不會怎樣,不過在軟體開發當中,還是存在著你犯了某個低級錯誤,從此別人就覺得你是個沒有 credit 的工程師。
我本來也是那個很害怕犯錯的一群人,雖然還是會有那種心態,但已經漸漸放下了。我在玩 Turing Complete 的直播中犯了很多現在回頭看很蠢的錯,或是在簡單的邏輯代數裡卡了很久,但那又怎麼樣?
一位我很喜歡的 Hacker George Hotz,在前年活躍地在 Twitch 上開程式直播,看他在寫前端、寫 React 的時候也可以看到他寫得很卡或是看起來很笨,但這完全不影響他在其他領域的成就,也不會改變我對他的看法,因為我知道他只是不熟悉而已,看他在其他領域的成就就知道。他也直接在 Lex Fridman 的 Podcast 坦承,他不在乎看起來很 dumb。
軟體工程師的門檻,天才的迷思,這個行業似乎充滿「你不夠聰明你就沒資格」的論述。要學好程式本來就要動腦,而且的確需要思考很多東西,但不代表你一定要是個天才才能夠做這一行。推薦 Google I/O 2009 的一場 Talk - The Myth of the Genius Programmer。
對自我行銷的恐懼
我覺得自我行銷算是職涯當中必須要面對的一個課題之一,把自己當作公司裡的職員;跟把自己當作一間公司,你現在在一家公司工作是在做生意,兩個心態完全不一樣。(行銷這兩個字聽起來商業味還蠻重的,不知道大家會怎麼翻譯 self promotion 呢?)
以軟體工程師來說,你能提供的服務就是寫程式(寫軟體)。但做生意就不能只有技術而已,你還要想辦法讓潛在客戶知道你真的很棒。這時候行銷就是很重要的關鍵了。當然這不是鼓吹大家膨風,但職涯那麼長,花點時間讓別人知道你絕對是一件投資報酬率很高的事。
話雖如此,到現在我還是不那麼擅長推銷自己(self promotion),或者說是害怕。來跟大家分享最近的克服方法:認清恐懼
認清恐懼
為什麼要對 self promotion 感到恐懼?我覺得很大一部分來自於過於在意別人對你的看法。先講講我的:
- 網域掛自己的名字 kalan.dev 會不會太自戀
- 在推特上宣傳自己的部落格文章只是想搏關注
- 怕被誤會是沽名釣譽
部分可能是因為自己的冒牌者症候群作祟。儘管還是會有一些疙瘩,我認為自己已經比以前好很多了。
點醒我的是這本書,Show your work 裡面有提到,儘管你的經歷再怎麼普通,只要你分享出來了,可能就因此幫助到某個人,而且或許比你想得還要多。
我在這幾年的累積,寫日語八百屋、寫部落格文章已經持續好幾年了,雖然不是頂尖,流量也不高,但仍然有人看,有人偶爾會寫信、私訊給我。
架設網站、開始寫、累積文章,不是說這些成就很了不起,但跟那些只會在網路上批評的人比起來已經好很多了。
我不喜歡恐懼行銷,或是刻意地賣弄話術來行銷自己。但自己做一件很棒的事情,開心地拿出來和別人分享,這種心態我不認為有什麼問題。我做的事情有幫助到別人嗎?我可以很自信地說有,而且大部分還是免費的,這樣就夠了。
把自己的恐懼認清之後,下一個問題是「如果這件事發生了,最糟糕的情況是什麼?」。對我來說,可能就是有人在茶餘飯後閒聊時,「啊,這個人明明就沒什麼,還用自己的名字當網域勒。笑死」,比較誇張的可能就是直接到網路上惡意留言。不過這些其實都好處理,封鎖就好。
你怎麼和立場不同的人相處?
在網路上蠻常看到人爭論的,不過爭論也有分很多等級。很可惜的是在網路上我們常常只看到二元論,你跟我的意見不合,所以你是錯的,你是笨的那一方。但很多事本來就不是只有二元論,而是有光譜存在的。
這就帶到我想講的,認識一個人的另外一個問題,「你怎麼和立場(價值觀)不同的人相處?」。不過問這個問題要謹慎,你可能一不小心就會問到這個人的真面目。(或許也是一件好事)
在 Paul Graham 的文章裡 How to disagree,提到各種與對方爭論的方法,他把爭論分成好幾個等級。其中最爛的就是侮辱、人身攻擊。在認識一個人的過程中,這個問題還蠻不錯的,它會直接或間接地顯示這個人的價值觀。
Arc 瀏覽器
Arc 已經成為了我日常使用的瀏覽器了。儘管是用 Chromium 當作瀏覽器渲染,底層和 Chrome、Edge 是相同的,不過在瀏覽器本身的 UI 上花了很多心思設計,且有別於其他瀏覽器。這邊介紹幾個 Arc 與其他瀏覽器設計的不同之處:
- 沒有書籤的概念,每個網頁連結都是一個 Tab。取而代之的是用 Workspace 做區分:例如工作、私人等等。像公司、專案的 GitHub 連結或文件,我就會放在一個 Workspace,而平常看文章的地方則另外放一個 Space。
- Profile:可以用不同的 session 做登入。例如我想要看遊戲相關的東西時會用另外一個帳號登入 YouTube,這樣才不會被演算法污染我用來看程式相關的影片,有 Profile 就不需要一直登入登出或開無痕了。
- 分割畫面:可以直接在瀏覽器上左右分成兩個分頁,一邊看文件一邊
偷懶看影片時很方便 cmd+t
導航列設計:瀏覽器的cmd+t
通常是另開分頁。然而 Arc 則是當作呼叫導航列,你可以在上面直接搜尋關鍵字、切換分頁等
我不太滿意的地方是他把地址欄放在左上角小小的地方,只顯示網域而沒有顯示全部,身為開發者的我還是會想要看到全部的路徑長什麼樣子。
上個禮拜 Arc 推出了新功能叫做 Boost,直接在瀏覽器裡面設定你想要的配色、字型,甚至拿走你不想看到的 HTML 元素。UI 設計得很棒,簡單幾個點擊就能當設計師,也可以寫 CSS 跟 JavaScript。這些功能 Chrome Extension 都有,但 Arc 把它做進瀏覽器,整合更完善,直接讓使用者體驗升級。
整體來說,它是一款使用體驗蠻舒服的瀏覽器,而且對比其他瀏覽器,在功能上有獨到的巧思。有興趣的讀者可以直接用我的邀請連結下載(一次只有五個名額)
React Server Component 技術專區
Dan 在 GitHub Discussion 上寫了一長串 React Server Component 的設計與背後的實作概念是什麼,值得一看!在社群上有些帶有嘲諷意味的批評,認為這就是 PHP 的復興,但我認為兩者本質上還是有一點不同的。
在 Next.js 當中,如果要在 Server 端拿資料,會將拿取資料的邏輯放在 getServerSideProps
,Next.js 會負責將 props 傳入對應的元件裡,並回傳靜態的 HTML 字串。也就是說,拿取資料的邏輯(可能是 database 的 query 或 I/O)會放在 getServerSideProps
裡頭。
有了 Server component 之後,我們可以省掉 getServerSideProps
,直接在元件裡面下 query、塞資料。這個差別或許沒有很大,但對於實作元件的開發者來說,少了一個 overhead,意圖也變得更加明確。也符合大部分的網頁應用,大部分的頁面都是靜態 HTML,只有某些部份需要做互動。這樣一來,只有需要互動的元件才會被打包進去客戶端的 JavaScript,進而減少 bundle size。
另一個 Server component 的特性是它是能夠感知更新的,在 prop 有更新時,React 會再去送 request 給伺服器端拿到新的 React 元件描述跟 prop,然後再幫你做更新邏輯。從 Demo 可以看到在點擊 note 的時候會自動送出請求然後更新。既可以在不換頁的情況下更新狀態,又不需要在前端寫 .fetch()
拿資料,甚至也不需要 API 了,直接讓 Server component 去拿資料就好。在專案架構單純的情況下,其實還挺方便的。
不過隨之而來的缺點就是 overhead,入門 React 的初學者們又要去釐清新的概念,也不知道這樣的架構會不會給伺服器帶來額外的負擔。但我覺得整體的想法很有趣,也可以看得到 React 為了解決 bundle size 跟資料存取的問題所做的各種探索,不知道大家看法如何呢?