不久前我收到了一些匿名反馈,询问我是否可以写一篇关于如何成为系统工程师的文章。我不完全确定我可以,部分原因是请求中的歧义。对我来说,“系统工程师”是具有实际认证和责任的真正工程师,通常不会成为小丑。这与我所从事的行业相去甚远,甚至不再有趣。
不过说真的,如果你在维基百科上查找“系统工程”,它会谈论“如何在其生命周期内设计、集成和管理复杂系统”。那绝对不是我个人的世界。我不认为我在整个“生命周期”中经历过任何事情,无论这对软件意味着什么。
在最好的情况下,我想我的一些软件已经达到了“功能完备”的程度,并且没有明显的问题。然后它只是坐在那里跑,跑,跑。然后,有一天,我继续进行其他演出,也许它会继续运行。当我还在身边的时候,我从来没有经历过从“长时间运行”到“被关闭”的事情。
这并不是说我的长寿产品没有被关闭。我当然有。只是这一切往往发生在我离开后足够长的时间,而不是我管理“生命周期”的那部分,所以我听说过它是二手的或三手的,而且要晚得多。
如果有的话,有些东西已经活得太久了。我在网络托管支持工作中的工作站于 2004 年与我一起开始了它的生活,它是一堆以前是专用服务器的部件。它有一堆我写的愚蠢的工具,其他人发现它们很有用。它应该被用来激励那家公司的“真正的”程序员编写替换代码,但似乎没有。这种可憎的行为一直持续到*至少* 2011 年,或者说我离开那家公司五年后。这些东西都不是为了长期运行,但有人多年来一直在照料它。太可怕了。
但是,好吧,让我们在这里慈善一下。也许反馈并不是在要求那个确切的定义,而是更像是“如何找到一份工作——就像我多年来所做的事情一样”。假设您喜欢警告,那是我绝对可以回答的问题。
我认为它是这样的:你从假设开始,当你看到一些东西时,你想知道为什么它是这样的。然后也许你会观察它,也许会做一些研究来弄清楚它是如何成为你在你面前看到的东西的。这几乎可以适用于任何东西:电话、体重秤、粗糙的旧路面、被遗忘的果树林,应有尽有。通过研究,我的意思是也许你可以四处寻找:试着用螺丝刀打开那个秤,下车沿着老路走,或者翻开田里的一些泥土,看看你是否能找到任何可以识别的东西分数。
我还应该指出,这适用于试图了解人们和人群如何成为现在的样子,但大多数人往往对用螺丝刀打开、行走或在泥土中翻身反应不佳. (如果他们这样做了,好吧,不要讨厌他们的百胜。)
不管怎样,如果你从这个地方开始,那么你可能会开始对事情是如何发生的提出一些假设,然后在心里把它归档以备后用。或者,也许你甚至把它写下来。然后,随着多年来越来越多的数据从管道中流出,您会重新审视这些想法和笔记并对其进行完善。一些概念被丢弃(并注明原因),但其他概念得到加强和发展。
这样做一段时间,迟早你可能会有一些工作模型。它们可能不一定是为什么事情是这样的实际解释,但它给了你一个起点。
然后,有一天,事情出了问题,你最终卷入其中。它可能是一个对您来说很陌生的高级系统,但它的内部深处有一些低级的东西,您也认识其中的一些。其中一个低级别的东西有做某件事的历史,而且从未改变。他们可能已经在其之上构建了一个完整的晦涩系统,但基本原理仍然存在,并且它们仍然以相同的方式崩溃。你去看一看,果然,发生了一些不为人知的事情。以前没有其他人见过这样的东西,所以当你指出它并将它恢复理智以恢复系统的其余部分时,他们看着你就像你刚刚施展了某种深奥的魔法。
问题是:真的吗?这都是相对的。如果您一直在探索和刺激事物,并且记得多年来这些实验的结果,那么它对您来说并不是真正的新鲜事物。这只是众多事件中的一个,本身可能并没有什么特别之处。恰好在这个场合很重要。
有些人会接受这个解释。其他人会拒绝它,并会坚持认为您是修复“无法修复的”的魔术师。其他一些人会确切地知道你做了什么,因为他们曾经自己做过。
然后,在每个足够大的人群中都会有一两个人会看到您因了解和使用一些晦涩的事实而受到赞扬,他们将以破坏您的世界为己任。基本上,他们必须以某种方式让你的随机事件发生在他们身上,所以他们会谈论它如何伤害他们以及他们需要如何报复你。如果这听起来很病态,那是因为它确实是,不幸的是,你会在任何没有能力筛选精神病患者的公司遇到这种情况。
这也适用于整个网络。将你所做的事情(暂时!)提升到某个公众可见的地方只会让这些人失望。这也是通过拥有不注意这一点并处理他们的害虫的论坛来实现的。
现在,以某种方式获得回报的晦涩知识的一些例子。
pid = fork(); …杀死(pid,SIGKILL); …但他们没有检查 -1。 “kill -9 -1”作为 root 核弹盒子上的所有东西。这会在一天早上将猫的照片删除几个小时,因为事实证明您需要 Web 服务器来运行网站。不知何故,kill(1) 手册页中关于“它指示除 kill 进程本身和 init 之外的所有进程”的部分一直在我脑海中萦绕。此外,fork(2) 手册页中的位表示“失败时,-1 返回父级”。
malloc(1213486160) 实际上是 malloc(0x48545450) 实际上是 malloc(“HTTP”)。我认为这是由于多年来在十六进制转储中挖掘并注意到 ASCII 中的字母倾向于聚在一起(这完全是故意的)。看到其中四个在同一范围内连续出现,没有任何内容超过 0x7f,这表明 SOME WORD IN ALL CAPS。它是。
事实上,我以前见过一些这样的东西只是与我生活中的一些偶然事件有关,再加上现在已经做了相当长一段时间的这种荒谬的工作。还有很多其他时候,当某些东西坏了(或者通常是片状的)时,我不知道它可能是什么,并且不得不从第一原则开始工作。
对于刚刚起步的人来说,您肯定还没有看到其中的许多事件。不要为此感到难过。如果您继续这样做,您将建立自己的古怪事物库,而这些事物只能通过年复一年地辛勤工作才能获得。
另外,如果您认为这很疯狂并选择了另一条路,我不会怪您。这 * 是 * 疯了,寻求不需要多年神秘经验就能以某种方式变得有效的东西是完全合理的。