【編者按】我們時常會在各大技術文章、視頻上看到類似的提問:如何成為XXX工程師?本文作者在自己的博客上也會經常收到類似的提問,在他看來,“ 如何成為一名系統工程師”的潛臺詞就是“ 如何找到一份系統工程師的工作。”
原文鏈接:https://rachelbythebay.com/w/2023/05/30/eng/
作者 | Rachel Kroll
譯者| 彎月
出品 | CSDN(ID:CSDNnews)
不久前,我收到了一些匿名反饋,詢問我是否可以寫一篇文章介紹一下如何成為一名系統工程師。我不太確定我真的能寫出這樣一篇文章,部分原因是這個請求本身就帶有一定的歧義。在我看來,“系統工程師”是“真正的”工程師,不僅需要實際的認證,而且還需要認真負責。這與我所從事的行業相去甚遠,而且我的工作甚至算不上有趣。
不過,維基百科上說,系統工程是一個跨多學科領域的工程學和工程管理,通常專注于如何設計、開發和管理在其生命周期內的復雜系統。而我個人的工作與之相去甚遠。我不認為自己的工作涉及任何“生命周期”。
我認為,我的軟件充其量不過是達到“功能完備”的程度,并且沒有明顯的問題。然后,就是運行、運行,再運行。直到有一天,我開始專注于其他工作,而它也許會繼續運行。我的軟件從未經歷過從“長時間運行”到“關閉”。
這并不是說,我的軟件很長壽,不會被關閉。我當然也有被關閉的軟件。只不過,這一切往往發生在我離職很久以后,也就是說軟件的“生命周期”中的關閉部分并不是我負責的,我聽說這些消息都是經過了二手傳遞,甚至是三手。
若論起長壽,我有一個用于網絡托管支持的工作站,始建于2004年,它是由一堆專用服務器的部件組建而成的,上面有一堆我編寫的工具。2011年,也就是在我離開那家公司五年后,這臺機器終于被淘汰了。凡是長壽的產品都需要有人照料和維護。
說回正題,也許上面我提到的反饋不是在詢問“系統工程師”確切的定義,而更像是“如何找到一份系統工程師的工作”,就像我多年來從事的工作一樣。我倒是可以回答這個問題。
我認為大致過程如下:首先,假設你看到了一個東西,那么接下來你會思考為什么它是這樣的;然后,你會觀察,或者做一些研究來弄清楚它是如何成為你眼前看到的東西的。這個過程幾乎適用于任何東西:電話、體重秤、粗糙的路面、被遺忘的果樹林,以及其他等等。這里的研究我指的是,你可以四處看看,比如試著用螺絲刀打開體重秤,下車沿著粗糙的路面行走,或者翻開果樹林的泥土,看看你能否找到任何決定了事物本身的東西。
我還應該指出,這個過程同樣適用于試圖了解某個人或者某個人群如何成為現在的樣子,只不過我們不能用螺絲刀撬開某個人或者翻泥土。
不管怎樣,沿著這種思路走下去,你很可能會對事情的發生提出一些假設,然后會記在腦海中供以后思考,或者,你會把它寫下來。接下來,隨著時間的流逝,也許幾年后,你會重新審視這些想法和筆記,并對其進行完善。有些想法可能會被丟棄(并注明原因),而有些想法會得到進一步的加強和發展。
這樣堅持一段時間,你就會在腦海中建立一些模型。雖然這個時候還不一定能搞明白為什么事情是這個樣子,但至少你有了一個起點。
然后,有一天出了問題,而你不得不解決這個問題。可能對你來說,這是一個很陌生的高級系統,但它的內部深處有一些低級的東西,你認識其中的一些。有些低級的東西背后有一定的歷史,而且從未改變。可能有人在這些低級的東西之上構建了一個完整難懂的系統,但基本原理仍然不變,而且出問題的方式也基本相同。你去看看,必然會看到一些莫名其妙的東西。以前沒有人見過,所以當你指出并修復這些問題,在旁人看來就好像你剛剛施展了某種深奧的魔法一樣。
問題是:你真的施展了魔法嗎?這都是相對的。如果你一直在探索和嘗試,并且記得多年來這些實驗的結果,那么它對你來說就不是新鮮的事物。這只是眾多事件中的一個,本身并沒有什么特別之處。只不過,恰好在這種場合變得很重要。
有些人能聽懂我的意思,但有些人無法接受,而且堅持你是修復了問題的魔法師。有些人很清楚你做了什么,因為他們曾經也有這樣的經歷。
下面,我們來舉幾個這類知識的例子。
pid = fork;……kill(pid, SIGKILL);但他們沒有檢查-1。以root身份運行"kill -9 -1"會殺死所有進程。某天早上,網站上的照片全都無法正常顯示,你們折騰了幾個小時,最后發現Web服務器沒有運行,其實就是因為這個命令。不知何故,我想起kill(1)的幫助文檔說,“指的是所有進程,但kill進程本身和init除外。”此外,fork(2)的幫助文檔顯示,“該命令運行失敗時,會向調用者返回-1”。
malloc(1213486160) 實際上是 malloc(0x48545450),二者實際上就是malloc("HTTP")。我之所以能理解這一點,是因為多年來我一直在與十六進制轉儲打交道,知道ASCII字符經常會集中出現。所以當看到四個位于同樣范圍、并且沒有超過0x7f的數字時,我就意識到這是一個大寫單詞。
事實上,我掌握了這些知識只是因為我在工作中偶然遇到了這類的問題,再加上工作了這么長時間,自然而然也就記住了。還有很多時候,某個地方出了問題,而我并不知道原因是什么,那么就只能從一些首要原則下手。
對于一些剛入門的新手來說,你們的所見所聞肯定沒有那么多,但無需為此感到難過。你需要堅持下去,建立自己的知識庫,而這只能通過年復一年的辛勤工作才能獲得。
另外,如果你認為這份工作很無聊,并選擇了另一條路,我也不會怪你。因為這份工作就是很無聊,去尋找一份不需要多年經驗積累就能順利完成的工作也很正常。