language-agnostic - 如何保持我的代码简单?

标签 language-agnostic

关闭。这个问题需要更多focused .它目前不接受答案。




2年前关闭。










锁定。这个问题及其答案是locked因为这个问题是题外话,但具有历史意义。它目前不接受新的答案或互动。








--编辑--

我相信这是一个可能有多个答案的有效问题(定义为 here )。这不是讨论或投票。此外,这个问题显然不是争论性的,因为到目前为止似乎没有一个受访者相互争论。

——原文——

太棒了!我做了大约 15 年的软件,但我仍然不知道我在做什么 :)

说真的,我仍然在与基础知识斗争:

  • 过度设计与 YAGNI
  • 为了 catch 最后期限而偷工减料与推迟业务
  • 有风险的创新 vs. 乏味的旧东西
  • 享受独自工作的自由与团队的力量

  • 但最糟糕的是代码复杂性。我的代码往往会变得邪恶。几周后它甚至会咬自己。我付出了巨大的努力来保持它的简单、可读、可维护、优雅、美观、内聚、松散耦合,基于很好的直接抽象。但所有这些努力都付之东流!

    不要误会我的意思,按照大多数人的标准,我的代码相当不错。我的意思是它很灵活,或多或少可以进行单元测试,并且可以完成它需要做的事情。然而,这远非如此简单。

    每次更改都需要大量重构。如果另一个人为了添加功能而打开我的代码,他将不得不做一些愚蠢的事情。即使他是天才,即使他是我自己的不熟悉代码库的克隆人,他也不可能做到正确。为什么,看在上帝的份上,为什么会发生这种情况?难道就没有一些方法论,一些技术,一些冥想技术,什么的吗?!

    如何保持我的代码简单?

    最佳答案

    我感觉到你的痛苦,伙计。在复杂系统中争取简单性的斗争就是软件工程的斗争。如果你已经解决了它,你可能没有解决足够困难的工程问题。困难并不总是意味着复杂,它可能是“明天之前实现 x 以防止天塌下来”。

    走向简单...... TDD 提到的很透彻,完全同意。 TDD 是一种让代码专注于它需要做的事情而不是更多的技巧。经常提到的重新因素。完全同意。

    关于简单性与复杂性以及单独工作……不要单独处理传送代码。每次 checkin 都要进行代码审查,并鼓励代码审查者对你进行审查。这将使您走上正轨,以做出正确的妥协和平衡。每天至少与某人讨论一次您的代码。轮换审稿人。我的工作更清晰,与队友一起更好。不在乎它们有多绿。实际上,越环保越好,以确保清晰的代码。

    关于单独工作......单独工作在研发中占有一席之地,而不是交付的代码。充其量,孤独的牛仔项目制作很酷的东西,维护起来非常痛苦。单独完成的工作总是需要一两个月的时间来重新实现和重构为可由凡人维护的代码,并修复一些巨大的疏忽。如果在你发布了牛仔代码之后那一两个月打击了你,那真的很痛苦。

    编辑:在细节方面,我发现有关域驱动设计的各种书籍在提供创建 super 清晰代码的方法方面非常有帮助。虽然 DDD 并不适用于所有问题。

    如果您确实找到了在简单性和过度设计之间取得平衡的答案……好吧,那时我什至不知道该怎么做。我想我会感到无聊并找到另一行工作。

    关于language-agnostic - 如何保持我的代码简单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/816130/

    相关文章:

    algorithm - 在给定范围内查找随机数,排除某些可能的数字

    audio - 如何访问扬声器播放的波形?

    algorithm - 预测一个长过程的完成时间有哪些好的方法?

    algorithm - 创建您自己的 MD5 碰撞

    algorithm - 将这个循环简化为一个方程

    oop - 模型- View - Controller 是糟糕的面向对象设计吗?

    design-patterns - 异步观察者模式

    查看许多不同数组是否是另一个数组的子集的算法?

    windows - 映射网络驱动器的脚本

    design-patterns - 是否有任何理由为非常基本的数据对象提供接口(interface)?