打开网易新闻 查看精彩图片

【编者按】我们时常会在各大技术文章、视频上看到类似的提问:如何成为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的数字时,我就意识到这是一个大写单词。

事实上,我掌握了这些知识只是因为我在工作中偶然遇到了这类的问题,再加上工作了这么长时间,自然而然也就记住了。还有很多时候,某个地方出了问题,而我并不知道原因是什么,那么就只能从一些首要原则下手。

对于一些刚入门的新手来说,你们的所见所闻肯定没有那么多,但无需为此感到难过。你需要坚持下去,建立自己的知识库,而这只能通过年复一年的辛勤工作才能获得。

另外,如果你认为这份工作很无聊,并选择了另一条路,我也不会怪你。因为这份工作就是很无聊,去寻找一份不需要多年经验积累就能顺利完成的工作也很正常。