我试图当了两个月的专职系统工程师

我写代码的第一个机会是当我在高中的时候就完全不熟悉计算机相关知识。 我想到的第一件事是:“计算机仅适用于足够聪明的人,而编写代码并非易事”。

快进高中毕业时,我需要做出人生决定-我应该攻读哪个学位。当智能手机迅速普及时,我开始发现计算机在解决我们的日常生活方面具有很大的潜力生活问题。 即使我仍然确切地记得编码有多困难,但我还是做出了终身决定,以获得计算机科学学位。

3年后,当我被要求编写真正新的东西时,我仍然很难过。 您无法通过谷歌获取参考的东西。 昨天,我注意到我一生都在做错事。

“当前的教育体系从未教过我们如何创造。 相反,他们教我们如何复制。” — Ajey Gore(GO-JEK集团首席技术官)

收到新任务时,我倾向于找到有关如何完成任务的教程。 尽快完成任务,然后继续进行下一个任务。 通过以这种方式完成任务,我们将很快陷入例行工作心态 。 我们一次又一次地重复做同样的事情。 甚至我可能会反复犯同样的错误,而实际上不知道为什么会这样。

和我的同事

在GO-JEK实习的2个月中,我们将实习生分为2个团队。 每个团队将处理同一组项目,因此在每个项目上,将有2个问题陈述的解决方案。 我们彼此竞争,为我们的项目提供最佳解决方案。 为了完成我们的项目, 我们从头开始进行从系统设计到代码实现的所有工作 。 是的,我们像经验丰富的专职系统工程师一样工作。 但是我们还没有任何经验。 没有分步教程,瞧,它可以工作 。 相反,我们进行了一些研究以创建新的东西。 这是所有步骤的完成方式:

迭代次数

敏捷软件开发过程(来源:Nascenia)

为了确保我们的项目顺利进行,我们确实通过学习和实践使自己尽快经历。 我们正在迭代中进行项目。 在每次迭代中,都告诉我们将待办事项列表保持足够小,以便我们有足够的时间进行思考和试验。 通过有更多的时间进行实验,我们可以了解使用特定练习的背后原因,了解如果解决特定练习中的问题可能会发生的所有意外情况 。 进行迭代确实有助于我们跟踪项目和学习进度。

看板委员会

这是我学到的真正新东西。 这是跟踪工作进度的一种很好的做法,但实际上,几乎没有人遵循它。 最简单的看板由“待办事项”“正在执行”“完成”三部分组成。

具有三步工作流程的最简单的看板板(来源:LeanKit)

当项目开始时,我们将使项目继续进行的每个必要任务都放在“待办事项”部分。 排序在这里很重要,因为某些任务是相互依赖的。 我们开始将“待办事项”部分上的卡移动到“正在执行”部分。 经验法则是,您一次只能做一件事 。 通过这种组织任务的方式,它将帮助您专注于正在做的事情。 您的团队也可以使用看板,因此您可以将“正在执行”分区中的特定任务分配给您自己或您的队友。

反馈

“我不认识经常提供反馈的人!”

是的,这就是每次迭代中发生的事情。 在每次迭代中,都会有一段时间您的同事对您所做的事情提供反馈。 我们倾听别人在想什么,因为他们可能会从另一端看到问题,或者看到我们看不到的问题。 随着反馈的到来,改进的机会是敞开的。 最终,当我们进行最佳实践时,我们将达到水平。 制定一个完全解决问题的解决方案,如TCP鲁棒性原则所述:

“对自己的工作要保守,对别人接受的东西要开放”

但是请记住,我们并没有就此停止。 随着世界的发展,这些问题可能会有所改变,而我们甚至不会注意到。 反馈还有助于我们判断世界的发展方向。

起初,我认为将服务器指标存储到PostgreSQL之类的RDBMS是个好主意。 但是,在进行了一些探索和实验之后,我发现Prometheus时间序列数据库是目前最好的数据库。 如果您遇到类似的问题,请尝试一下!

我们正在做一个开源项目,这是我们针对Linux容器 调度的系统设计。 在设计过程中,我们对不同的技术堆栈进行了实验,并收集了反馈以改进设计

合作

我们像组织中的所有工程师一样工作。 我们确实合作。 作为实习生,这对我来说是一种新的经历。 我们不是为自己编写代码,而是为组织中的每个人编写代码 。 期望在此处进行编码方面的最佳实践。 为了做到这一点,我们做 配对编程 。 在编写代码时,我们不断从我们的团队那里获得关于我们的实现,设计模式甚至潜在错误的反馈。 我们必须遵循的另一个工程原理是TDD(测试驱动开发) 。 我们在编写代码之前先编写测试,以确保我们的代码能够按预期工作并满足要求。 测试还帮助我们将重点放在我们当前正在开发的代码的目标上,即使在切换配对时也是如此。

最后但并非最不重要的一点是,对当前拥有的东西充满信心 。 我确实注意到我们每个实习生都有自己的长处和短处。 不要害怕在大型项目上手忙脚乱,因为我们总是有机会每天学习