这是个含糊不清的问题,所以我先道歉。
当软件变得“更聪明”时,我倾向于把它解释为仅仅是说它涵盖了更多的边缘情况。首先,这是对的吗?
假设是这样的话,这是否意味着软件中满是if/switch语句,以确保输入得到正确的处理,从而使其“更智能”?
这种想法让我觉得代码最终会变得臃肿和混乱。我遇到了这样一个问题,我想要处理这些边缘案例,但我不想仅仅忽略一些最佳实践来充实我的代码。我遗漏了什么?
发布于 2013-10-11 18:08:24
当软件变得“更聪明”时,我倾向于把它解释为仅仅是说它涵盖了更多的边缘情况。首先,这是对的吗?
有时候,是的。一般来说,没那么多。
考虑一下拼写检查器。“更聪明”的拼写检查器可能包含更正建议。它可能会变得更聪明,但能够通过移动键盘上靠近的字母来检测排字。这些不检查任何额外的边缘情况,他们做了更多的工作,以提供更好的结果。
假设是这样的话,这是否意味着软件中满是if/switch语句,以确保输入得到正确的处理,从而使其“更智能”?
很少有。更常见的情况是,使用不同的算法来解决问题的“更困难”变体,或者至少以“容易”问题为代价或通过消耗时间/资源来提供更好的结果。
我遇到了这样一个问题,我想要处理这些边缘案例,但我不想仅仅忽略一些最佳实践来充实我的代码。
有时,边缘情况需要这种条件逻辑,但它们通常可以通过更通用的解决方案或数据的更一般视图来处理。
这并不能保证A和B的解决方案不一定比A、B和C的解决方案更复杂。
发布于 2013-10-11 19:05:22
I would have written a shorter letter, but I did not have the time.
~ 布莱斯·帕斯卡
智能软件并不一定更大,但在大多数情况下是这样。
在最好的情况下,智能软件根本不允许您遵循错误路径。通过控制可能发生的情况,可以减少要编码的病例总数。
例如,三个标志A、B、C提供最多8个排列。如果您只需要这8种排列中的3种,并且软件阻止选择其他5种,那么您已经编写了较少的代码。因此,更智能的应用程序可以更小。
但是边缘病例总是会出现,并且很难控制与这些边缘情况相关的排列。因此,应用程序需要更多的条件检查和错误路径代码。在这种情况下,聪明确实意味着更大。
我用Pascal的话开始我的回答,因为它确实抓住了你的问题提出的难题。如果给定时间,您将有更少的代码提供更多的功能。但这也需要或暗示着对问题的牢固理解和找到有力解决办法的能力。经常,我们没有时间来创建雄辩的解决方案,我们的应用程序代码库也因此增长了更大的比例。
发布于 2013-10-11 18:05:21
正如FrustratedWithFormsDesigner所提到的,更有可能的是,不覆盖边缘情况会产生不正确或容易出错的软件。更不用说边缘情况处理不善(如缓冲区溢出、sql注入等)所造成的安全风险。
软件的智能取决于你的定义,它可能指的是能够机器学习的软件,也可能是指那些能优雅地处理输入和错误并为最终用户提供帮助的软件。例如,当搜索查询不返回结果时,建议提供与其相关的链接。自动完成与建议的条款等..。
现在,让你的应用程序“更聪明”并不一定会使你的应用程序变得臃肿或更大。高效且编写良好的算法可能会防止代码膨胀,更不用说大多数情况下,已经有现成的库和框架可以帮助您完成基本的工作,而不会使代码膨胀。
例如,当处理来自用户的清理输入时,一个rails程序员可以使用验证助手方法,而不是创建一个开关盒块或一个大型的if else块。这大大减少了执行表单验证所需的代码数量,更不用说它使您的工作更容易了。
在编程中,做事情的方法总是不止一种,所以如果你认为你正在做的事情会导致你的代码库膨胀,退一步,重新检查你的代码,也许你可以更好地编码它,使膨胀降到最低。
https://softwareengineering.stackexchange.com/questions/214188
复制相似问题