我感覺這句話在人工智慧和程式碼代理時代更加適用。當然,現在我們經常寫提示訊息而不是編寫程式碼。但說實話,這不就是速度極快的複製貼上嗎?
人們想像中的程式設計師形象通常都相當戲劇化。最樂觀的版本是一位英俊的駭客,和安潔莉娜裘莉一起坐在堆滿電腦的地下室裡,入侵銀行系統和五角大廈的秘密資料庫。
一個略顯不浪漫但同樣令人印象深刻的畫面是:開發人員以驚人的速度敲擊鍵盤,程式碼行像《駭客任務》中那樣從螢幕上傾瀉而下。
公平地說,當你開始學習程式設計時,這種想法並非完全錯誤(當然,安潔莉娜裘莉除外)。你實際上會編寫大量的程式碼。
甚至有人在我的文章下留言了。
貢獻度最高的往往是那些正在透過實踐學習的、充滿抱負的開發者——他們每天編寫程式碼、嘗試各種方法、進行實驗。這完全正常。
我經常和初級和中級開發人員交流,他們中的許多人對這份工作的理解正是如此:你的職責就是交付功能,發布程式碼。說實話,這完全沒問題。
個人小更新:我最近被AWS社區建設者計劃錄取了🎉希望他們能發一些很酷的帽子和T卹😅如果你想支持我,可以在這裡給我的LinkedIn帖子點個讚。
隨著你職業生涯的深入,一些有趣的事情會發生。
你的等級越高,對系統的責任就越大,你實際花在寫程式碼的時間就越少。
相反,你越來越多的時間都花在了除錯、調查奇怪的問題以及解決其他人未能解決的問題上。
現在你可以想想:但是有些老年人還是會寫很多程式碼!
沒錯,如果你是一位經驗豐富的開發人員,在一家小型新創公司工作,你可能仍然會花費大量時間編寫程式碼。尤其是在如今人工智慧工具能夠大幅加速開發的情況下。
但隨著專案規模的擴大與成功,其複雜性也隨之增加。而複雜性也帶來了不同類型的工作。
少寫程式碼,多理解系統。因為一旦生產環境出現問題,就必須有人去調查。
突然,客服團隊需要答案。馬上!
然後你花了一整天時間分析日誌。
哦,這裡肯定存在競態條件!你是資深工程師,應該調查一下。
我們的配置是不是有問題?你得找出問題所在!
當然,初級開發人員總是會提出開發人員最常問的問題:
“為什麼這個null ?”
你可能會說:程式設計不僅僅是除錯。開發者還需要選擇架構、框架和技術棧。
完全正確。
但我在這個行業工作的時間越長,就越意識到在很多領域,幾乎所有東西都已經被發明了。設計模式、成熟的架構方法以及針對各種問題的成熟解決方案都已存在。
在設計系統時,你很少會從零開始創造一切。相反,你會重複使用以前行之有效的模式,借鏡其他人已經測試過的架構,並利用開發者社群的集體智慧。
從這個意義上講,建築本身往往是一種複製貼上——只不過是在更高的層次上。
忽視所有這些累積的知識,要么是天才之舉……要么是愚蠢之舉。
我剛入職做初級開發人員的時候,功能一個接一個地發布。那時候我寫的程式碼量一定有幾公里長。如果遇到問題,我會花時間研究、嘗試各種方法、搜尋錯誤訊息。如果還是解決不了,我就直接去找資深開發人員。
事情就是這樣。無論問題多麼棘手、多麼耗時,這位上級都必須解決。這的確是他的職責所在。
我記得當時有一次,我本地機器上的專案突然無法編譯了。我花了幾個小時試圖找出原因,直到一位資深同事檢查了一些內容後,平靜地說:“你的Node版本不對。” 謎團就此解開。
那時候,我也有點同情那些前輩。他們總是忙著打電話,經常被打斷,很少真正寫程式碼。而我卻樂此不疲地實現著一個又一個功能。基礎設施?流水線? AWS?我幾乎都沒考慮過這些。
我現在是一名高級開發人員,甚至需要協調多個團隊的工作。我還會寫程式碼嗎?當然會。但我還能像初級開發人員時一樣交付大量新功能嗎?
並不真地。
相反,我的許多工作都是這樣的:升級框架,然後試圖弄清楚為什麼所有功能突然崩潰;檢查依賴項更新是否引入了回歸問題;調查只在特定環境下出現的奇怪 bug。
還記得我們最近遇到的那些著名的前端 CVE 漏洞嗎?就是那種突然出現並引發小規模恐慌的漏洞。
這會影響我們的專案嗎?幸運的是,不會。
現在唯一剩下的任務就是花一週時間回覆郵件,解釋我們根本就沒用 React 😉
編寫程式碼可能看起來像複製貼上。架構設計也只是高層次的複製貼上。但除錯則是純粹的問題解決。
它迫使你深入了解系統,追蹤資料流,分析日誌,並驗證假設。有時,Stack Overflow 上的答案也無濟於事。有時,人工智慧工具也幫不上忙。
你只需要思考。
經過數小時的調查,根本原因往往出乎意料地小:缺少一個屬性、配置不正確,或是一行程式碼。
除錯有時感覺很像偵探工作。
這讓我想起一個故事。
還記得那個無論如何都要幫助我的學長嗎?現在我成了隊友們的學長了。
前段時間,一位初級開發人員來找我,因為他在實現一個複雜的表單時,沒有註意到某個地方的驗證功能失效了。他不知道該如何修復,已經為此苦惱了很久。眼看截止日期將近,他卻束手無策。
我試著指導他,指出程式碼中一些可能有幫助的地方,但沒用。最後,我不得不自己坐下來深入研究那段程式碼。
截止日期前一天(我凌晨1點才完成)。
這件事讓人感到壓力嗎?也許吧。他應該早點告訴我這件事嗎?當然應該。但有時候,這就是現實。
我是否因為自己發布的功能不如初級工程師時那麼多而感到不滿?
一點也不。
畢竟,誰小時候不想當偵探呢?
資深開發人員基本上就是軟體偵探。 🕵️♀️