2010-03-30 63 views
8

我经常阅读可读性和可维护性的重要性。或者,我读了关于哪些语法特征不好或很好的非常强烈的意见。或者讨论某些范例的价值,如OOP。主观性在编程中扮演的角色有多大?

除此之外,当我阅读有关主观问题的SO或Meta辩论时,我的脑海里浮现出同样的问题。或阅读有关最佳实践的问题,有时会发现自己或其他人不同意。

主观性在编程领域中扮演着什么角色?

有时我觉得它起了很大的作用。软件开发人员是工程师,但也是人。编程的很大一部分是处理人类可读的代码。这与数学,物理学或其他学科的规则非常精确和结构非常不同。在这里,精确的结构和规则大部分在空中,随时随地变化,因此存在语言的数量。一个人可能会发现一种语言非常可读,而另一个人可能会发现他们自己的语言是最令人安慰的。

与实践相同。一个人可能不喜欢某些被接受的做法。例如,我自己发现将课程拆分为不可读的不同文件。

但是,我不能说规则一般没有帮助。某些实践已经并且确实使生活更轻松。新语言引发了使生活更轻松的语法和结构。即使给予了大量不同的人群,但代码的进展当然也更容易阅读和维护。所以也许这些东西不像我想的那样主观。

它让我想起了UI设计的一种方式。当然这是主观的,但是有一个整个学科涉及制作良好的用户界面,它往往工作。

对可维护性,可读性和其他最佳实践背后的想法是否有一些非主观性?当一个人开发新的语言或想到新的实践时,是否有一些有形的东西需要掌握?

+3

如果这个问题被封闭为主观(但我确实希望它不是),这将是讽刺。 – 2010-03-30 23:46:25

+1

主观性 - 它确实是一个灰色区域 – 2010-03-30 23:50:31

+2

关于可读性,我不认为数学和物理与你所说的编程有所不同。我见过一些丑陋的符号和一些描述相同概念的非常美丽的符号。 – 2010-03-31 13:25:32

回答

1

可以说你的问题实际上是关于之间的区别编程,这是数学,算法和科学化,软件工程,这是主观的,可变的,人类为中心的。

伟大的程序员并不一定是伟大的软件工程师,反之亦然。这两种技能虽然不是以任何方式排除,但与最初出现的重叠程度较小。他们的相对重要性在很大程度上取决于这个项目:一个出色的程序员独自工作可以找出令人惊叹的技术天才的例子,并且没有人能够理解或维护它,因为他无论如何都不会分享代码。但是进入一个企业环境 - 比如企业内部软件开发 - 我会很乐意为一位了解可读性和文档重要性的平庸程序员交易10个“洞穴巨魔”天才。

我的经验是,世界需要优秀的软件工程师,而不是需要优秀的程序员。在这个时代,相对较少的人正在编写真正性能至关重要的软件(操作系统内核,编译器,图形引擎,实时嵌入式系统等),互联网让平庸的程序员能够迅速获得算法解决方案,解决他们无法解决的问题独自解决。但几乎每个编写专业代码的人都必须在团队中工作。团队生产力在成员之间有效沟通并有效分配工作量的能力上升和下降,这两种技能非常主观且不可能通过严格公式来证明。

大多数软件工程的原则是建立在经验而非客观规律。就像社会科学一样,我们学习,学习,适应和应用 - 但没有实际的结果保证。我们可以说的是,在大多数群体中,有些事情似乎比其他事情更好。

1

我想,很多它必然受到我们的头脑是多少能够在同一时间处理决定。因此,语言和工具能够让团队或开发人员将问题分解成多块有意义的块,但不会太大以至于难以掌握它们。常见的主题是组织信息的艺术(在这种情况下,代码,逻辑......)。但顺便说一下,这与数学或物理并没有太大的不同。

0

这一切都取决于你的观点:-)

但是,为了回答你的问题,我想一个办法来查看主体是认识到软件的语言,工具和最佳实践交流的共享手段个人之间。是的,编程语言是指导计算机如何行事的正式方式,但是编程语言也可以被看作是定义规范并将规范传达到高级细节的一种方式(代码是最终规范,不是吗? ?)。

至于象我们可能要与主观的软件语言,工具和最佳实践的程度假惺惺,我要说的是,缺乏主体性可能指示以及如何沟通更容易。

是的,个人有在自己的生活习惯和倾向表示一定的倾向,但是这不应该最终太大的关系在发展的理想平台。

1

正如最好的作者从众多款式借用,最优秀的程序员保持一个巨大的模式范围内他们的精神武器。吝啬地遵循一些模式并坚持一些绝对真理既懒惰又危险。

换一种方式,我们依靠机器人的代码审查的日子是我辞职的那一天。

+0

我更喜欢机器人对我见过的一些代码审查者(在成为第2级审稿人之后不必担心修复 - 长话短说) – DVK 2010-03-31 01:23:38

0

谈到我的数学博士的妻子我问数学中是否有任何主观性。她的回答是肯定的,主要是我们作为人类达到答案的方式。

如果数学证明是结果,你如何得到结果可能会有所不同。如果数据集很大,您可能需要使用计算机,这可能会引入错误,从而引发关于这是否是正确方法的争论。或者有时候数学家会对这个理论持不同意见 - 人们试图证明x是真实的,而另一个则试图证明x是错误的。

我认为计算机科学中存在着同样的东西。正确的答案是正确运行的程序,但对于每个项目,正确的定义可能不同。有时候正确意味着没有错误。有时它意味着高效运行。

从这里程序员可以争论如何最好地实现“正确”的结果。一个很好的例子就是FizzBu​​zz应用程序。一个简单的答案只是一个for循环,但Enterprise FizzBuzz也是“正确的”,因为它产生了正确的答案,但由于其过于复杂的想法而被普遍嘲笑为“坏”工程(毕竟它是一个笑话应用程序)。

主观性在编程中扮演的角色有多大?我认为这是我们所做的很大一部分,因为我们是人,因为有多种方式获得“正确”的答案,所以在哪种方式最好的方面存在分歧。

0

研究已经完成,显示某些实践可以降低软件中的缺陷率。例如,一个study发现圈复杂度和容易出错的概率之间有很强的相关性。 Other studies显示设计和代码检查的平均效率分别为55%和60%。因此,对我们来说最好的做法是支持简单性,检查指标并进行代码评审。

虽然我们在这里谈论概率。如果我查看您的代码,我不能保证找到60%的错误。软件开发中的绝对数量也很少;有经验的开发人员知道正确的答案一般是“视情况而定”。也就是说,有很多客观数据对他们有利。

相关问题