如何停止阅读代码并开始交付。
免责声明:由于我主要使用JavaScript ,因此可以从JavaScript的光环中看到本文,但这是一个普遍的问题,不应受一种语言的限制。 下面所说的全部适用于整个软件开发。
我们太着迷于如何编写代码
每个满月都会创建新的设计模式,新的框架和库,甚至是新的语言(TypeScript,Elm,Reason,ClojureScript,Dart),以帮助开发人员做同样的事情 - 写下应用程序逻辑。 我们以前是否已经有多种编写代码的方式? 我们是否真的需要再一个框架,该框架将比以前更好地帮助我们描述应用程序逻辑? 也许。 不要误会我的意思,我喜欢对现有框架进行不断的改进,也喜欢创建新的框架和工具,但是,我认为我们不应该花所有的精力,而应该全神贯注于此。 作为一个行业,我们非常着迷于如何编写代码,我们希望使编写过程完美无缺,而我们如何读取代码却完全被抛在了后面 。
观察#1:我们不是在真空中编写代码,几乎总是我们宁愿编辑或扩展现有代码库,也不愿在空白页上添加新功能。
必须先进行代码读取阶段
这意味着您计划进行的所有代码更改仅在您阅读并理解周围的代码后才适用 。 您可能会想:“他一定是在开玩笑,当然,我们在进行更改之前先了解了代码”。 我们要不要? 如此多次,我陷入了一个想法,即在更改代码时我的观点很狭窄 。 只是增加了一行,增加了一个属性,对已有功能增加了一个简单的行为,我可以立即编写该代码,对吗?
观察#2:我们进行本地代码更改,完全错过了全局。
现在,将所有这些乘以在不绘制整个应用程序的情况下编辑您的代码库的团队成员人数。 长期会发生什么?
还记得您从头开始构建的所有项目吗? 我们都有。 精美的架构,简洁的代码,独立的模块,封装的逻辑。 干净的代码,一年后看起来一样吗? 两年后? 答案可能是“否”,您可能已经开始怀疑,为什么呢? 我们必须继续建造漂亮干净的建筑的什么障碍? 这是一个简单的问题-我们已经在这里有了代码,这就是为什么。 我们需要做的就是: 阅读代码, 理解代码并进行适当的更改 ,而不仅仅是在那儿“再调用一个方法” —仅仅是因为代码行应在某一时刻执行,并不意味着代码行应该采用一种方法(但我知道,这样更容易)。
观察#3:如果我们需要在此之前阅读和理解现有代码,似乎我们很难正确编写代码。
阅读很难,这就是为什么……
“明天的截止日期”,“前任团队的旧遗产”,“今天我有点困”-所有这些以及许多其他借口,我们都是不阅读代码的 。 相反,我们做一些假设:“我相信我们还没有这个util方法,我会添加它”,“我认为这有点重复的逻辑,但是我现在无法重构所有内容”,“一行修复,它必须是有史以来最好的解决方案”。 这意味着我们仅根据对代码的猜测,而不是基于阅读和分析代码后的知识, 盲目地更改代码。
我们避免阅读代码不是因为我们是不好的工程师,而是因为它非常难。 这是您在编程中可以想象的最艰巨的任务。
您需要处理成千上万个小片段,并且需要将它们概括为更有意义和更细粒度的东西,同时识别重复和模式,您正在尝试查看全局并理解所有这些 。
观察#4:我们要么花太多时间无效阅读代码,要么决定根本不阅读它。
“读取代码”甚至意味着什么?
好吧,首先让我们最后描述一下阅读代码的含义。 绝对不同于您最喜欢的小说书,对吗? 但是让我们先定义代码本身。 如果您尝试用自己的语言提出应用程序代码的定义,则可能看起来像这样:
代码是一组指令(在文件之间传播),可根据用户行为和当前环境状态遵循和转换数据以进行预定义的旅程。
现在,当我们知道什么是代码时,更容易理解我们在阅读代码时试图达到的目标。 我们想:
- 找出应用程序中主要旅程的关键步骤(例如,用户注册,订单提交等)
- 找出可能影响特定旅程中数据流的指令
- 找出当前环境状况或可能影响环境状况的情况
我们希望很快找到答案。 并在我们心中永远拥有这些知识。 因为如果您有这样的想法,您可以看到将整个应用程序逻辑映射到codebase的全景 。 你感到那种力量,不是吗?
您有一个错误,并且您已经知道它为什么会发生,以及即使不阅读代码也应更改代码的哪一行。 或者,他们向您询问了有关新功能的信息,并且您已经知道应该预先对哪个文件进行重构以保持体系结构整洁。
然后你醒了。 听起来太甜蜜,难以置信。 还是我们可以做到?
参与代码,而不仅仅是看它
现在您可能会想:“老兄,我在这里发脾气,您为什么要谈论这些显而易见的事情”。 好吧,显而易见的事情, 谁也不会打扰 。 您使用多少种工具或技术来阅读和理解代码? 有效。 这是一个关键词。 如果我们有很多时间,我们可以理解并理解任何代码,但通常情况下我们没有。 通常,我们只是在我们最喜欢的代码编辑器中打开代码库,然后开始混乱地从一个文件跳到另一个文件。 它困扰着我。 我们可以做得更好。
首先。 为了开始理解代码,仅阅读代码是不够的。 您需要深入了解它才能感觉到它。 您需要使用代码,它可以增强您的学习能力 。 这就是为什么重构对理解代码有很大帮助的原因-您可以并行阅读和进行调整。
但是,不仅重构可以做到这一点。 您可以通过编写注释开始对代码进行无害的更改。 您可以开始在代码中留下面包屑 :在代码中标记您曾经去过的地方,您已经看过和分析过的地方,或者只是不想错过的地方,这是非常重要的。 您始终可以将它们用作寻找摆脱代码迷宫之路的线索。
而且,由于我提到了代码迷宫,让我们考虑一下。 也许我们一直都在从错误的位置看代码? 当您已经迷宫深处时,很难从迷宫中找到出路(意思是,很难读取代码行并在脑海中连接点)。 也许,我们应该退后一步。 想象一下,您不在迷宫中,而是从顶部看-不再是迷宫,您可以清楚地看到一切! 而且,既然您正在想象,就考虑一下更疯狂的情况-如果整个迷宫都消失了,并且您已经被引导到应该去的地方,并且寻找什么样的文件,该怎么办? 想象一下,巨大的代码库的所有噪音刚刚消失了。
如果所有这些都可以解决,该怎么办……
请继续关注,更多即将推出。
如果您喜欢这篇文章,并希望获得有关我的下一篇文章的更新,请在twitter @bliashenko上关注我!
From: https://hackernoon.com/how-to-stop-reading-code-and-start-delivering-part-1-6215dd64f507