iT邦幫忙

2025 iThome 鐵人賽

DAY 22
1
自我挑戰組

十年職涯回首:開發、選擇與初心系列 第 22

我推薦的書與課程(上)

  • 分享至 

  • xImage
  •  

今天分享一些我看過對我影響甚遠的書、課程與 YouTube 頻道。

3Blue1Brown

這是任何對數學有興趣的人一定要知道的頻道之一。撇除國高中那種公式、寫題的學習方法,數學一直以來不是我的強項,尤其是推導與證明,然而我很喜歡應用領域,像是信號處理、密碼學、圖形、機器學習等等,幾乎都跟數學脫不了關係。

3Blue1Brown 是由 Grant Sanderson 創立的頻道,因為他有個藍棕色的眼睛,所以取名為 3Blue1Brown。

影片內容包含微積分、線性代數、傅立葉轉換等高等數學領域。Grant Sanderson 用它易懂的說明、沉穩的語調、非常詳細的視覺化解釋各種數學概念,讓我深深著迷。

我在求學時期還沒有遇過比 Grant Sanderson 更會教學的人。如果你很討厭背誦式的數學,不知道逆矩陣跟矩陣乘法的意義是什麼,那麼我極度推薦線性代數的本質。

你會討厭數學,有可能是還沒遇到對的老師而已

如果你喜歡 3Blue1Brown 的呈現方式,應該也會喜歡 Reducible 這個頻道。

W. Gilbert Strang — Linear Algebra

相當有名的 MIT 教授,他的線性代數課程可以在各大線上教育平台找到。他的教法很多時候都會涉及應用,在提到新概念時也會先提到動機、性質,再來講實際應用。在理解 SVD 原理時就常常複習 W. Gilbert Strang 的課。

Introduction to Computational Thinking with Julia

這門 MIT 公開課 Introudction to computational thinking,所有的課程影片跟作業都可以在網站上面看到。當初是因為 3B1B 也有來授課所以就跟著一起看,沒想到內容比我想像中的還要有趣。

課程看似內容很雜,有涵蓋像是資料科學、氣候變遷建模、Ray Tracing、偏微分、統計、image processing,等等其實都圍繞在 computation 這件事上面,我覺得這種方式反而能訓練用電腦解決問題的能力。

舉例來說,第一二堂課教你 image convolution,進一步拆解問題變成矩陣乘法,然後作業是實作一個簡單的高斯模糊。convolution 這個概念可以再進一步延伸,例如做邊緣檢測甚至是做傅立葉轉換都可以套用同一個概念。這種將看似很困難的問題一步步拆解成可以用數學表示的方法,甚至教你怎麼套用到其他地方,是我覺得很棒的學習方式,也是蠻多人欠缺的技能。

接下來講到 seam carving,是一個能夠改變圖片 ratio 卻不會覺得「怪怪的」。一般我們改變圖片的比例時,圖片的某一個維度會被延伸或壓縮,看起來就會很奇怪。這個演算法可以找出圖片當中不重要的地方,將不重要的地方移除後讓整張圖看起來還是很正常。

接下來講到如何處理資料,這邊用 COVID-19 當作舉例我覺得還蠻符合時事的,可以用真實案例來學習。裡面還有提到像是 PCA 降維或是奇異值分解所代表的意義,也順便把統計的概念帶過一遍。

Driving Technical Change

在開發上很有可能會有技術過時、不合時宜等等的情況發生,也就會有想要改變技術線、框架、部署方式的想法。

不過想要讓整個團隊接受你的想法往往需要很多考驗,也時常會有你花了很多熱情、心思與時間在「佈道」,結果團隊完全不理你,甚至認為你在忙什麼。

雖然技術不好用,bug 層出不窮,但至少還過得去大家也就不想改變了,久而久之你也變成了沒有熱情的工程師,每天寫爛扣得過且過就好。

這本書對那些拒絕改變的人歸納了幾個 pattern,雖然不是一讀完就可以馬上應用,但我覺得比起起來軟技能的書籍,這本書更真實,因為在職場上更容易遇到這樣的事情,而不是大家都能夠有效溝通。

Computer Systems: A Programmer’s Perspective

簡稱 CS:APP,是電腦科學的經典教材,核心目標如書名,從程式設計師的角度來理解電腦系統的運作,像是:

  • 程式如何在電腦上執行:高階語言(如 C)會被編譯成機器指令,最終在 CPU 上執行
  • 資料如何存在電腦裡:包括記憶體、快取、虛擬記憶體、I/O
  • 系統與程式的互動:像是作業系統、系統呼叫、例外處理

後面的章節像是 System Level I/O、Network Programming 都是身為 SaaS 開發的我很少接觸的部分,但學習這些概念可以幫助你在設計系統、Debug 時更有能力探索這些底層的問題。

The Elements of computing Systems

是 nand2tetris 的原型,這本書不一定能直接為工作帶來幫助,但可以從第一性原理出發。這本書帶你從「最底層的邏輯閘」開始,一步一步自己動手建造一台電腦,最後還會自己寫出一個小型作業系統與編譯器。雖然說現代的處理器跟有諸多不同之處,但理解電腦背後的原理本身是一件有趣的事。

The Staff Engineer’s Path

如果想往 Staff Engineer 走,會發現更多技術以外的事情需要學習,特別是與跨部門、團隊內協作、領導更大的專案、分配資源等,帶來更多的影響力。

Designing Data Intensive Application

簡稱 DDIA,是一本介紹如何設計大規模處理資料系統的書。像是資料庫、快取、消息佇列、分散式系統等核心組件,並解釋可靠性、可擴展性、維護性背後的設計原則。

這本書可以說是每個職涯階段都必須讀的一本,就算不會碰到大規模的資料,裡頭的核心概念也能幫助你設計出恰如其分的資料系統。還可以理解資料庫、消息佇列、分散式系統背後的原理。

學徒模式

它把「軟體工程師的學習與成長」比喻成學徒制,透過一系列「模式」告訴你如何持續精進,像是

  • 保持「學徒心態」
  • 建立「知識工具箱」
  • 找到導師
  • 不斷實作與分享

我認為不僅在職涯早期,甚至成為資深開發者或管理層,學徒模式都仍然適用,永遠都保持著空杯心態。

George Hotz 的直播

George Hotz 的程式直播充滿著幽默以及…,大量的程式碼。我所看過的優秀的軟體工程師,大概就是那樣寫程式的:

  • 極快的打字速度
  • 對程式、計算機原理理解相當透徹
  • 遇到問題時知道如何尋找答案
  • 寫程式碼時眼睛在發亮
  • 總是追求更高效率、更簡潔的手法
  • 使用 HHKB 鍵盤
  • 熟悉 vim 操作

George Hotz 早期的直播是用 tmux 加上 vim 寫程式,經過觀眾推薦嘗試 VSCode 後一試成主顧,不過已經習慣 vim 的操作,所以他還另外安裝了 VSCode Vim。從此之後他的直播就都用 VSCode 寫程式了。

https://www.youtube.com/@geohotarchive

仔細觀察 George Hotz 的直播,內容相當多樣:

同時,我們也能看見 George Hotz 遇到問題仍然會卡關、需要 Debug,或是寫 React 因為不熟悉 API 或不熟悉慣用寫法導致有點困惑。然而正是這樣子的黑客精神,才是打造好產品與理解技術的關鍵。他也曾在大方地說,他不在乎 Looking Dumb。

沒有花里胡俏的商業模式、華麗包裝的簡報。打開他的直播,迎接你的是樸實無華的文字編輯器、暗色主題、HHKB 鍵盤敲擊聲,還有 Geohot 的人生哲學。

我印象最深刻的大概就是某次直播的主題——What is programming (noob lessons)。初次看直播的人,應該可以從這場直播中了解 Geohot 獨特的風格。


上一篇
如何判斷這個人不行(開發)
下一篇
我推薦的書、課程(下)
系列文
十年職涯回首:開發、選擇與初心24
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言