我经常读到可读性和可维护性的重要性。或者,我阅读了关于哪些语法功能不好或好的非常强烈的意见。或讨论某些范式的价值观,如OOP。
除此之外,每当我阅读有关主观问题的关于SO或Meta的辩论时,同样的问题浮现在我的脑海中。或者阅读有关最佳实践的问题,有时会发现自己或其他人不同意。
主观性在编程领域中扮演什么角色?
有时我认为它起着重要作用。软件开发人员在某种程度上是工程师,也是人。编程的很大一部分是处理人类可读的代码。这与数学或物理学或其他具有非常精确和结构化规则的学科非常不同。在这里,确切的结构和规则大部分都在空中,随心所欲地变化,因此存在的语言数量。一个人可能会发现一种语言非常易读,而另一个人可能会发现自己的语言最令人欣慰。
与实践相同。一个人可能不喜欢某些公认的做法。我自己发现将类拆分成不同的文件是非常难以理解的。例如。
但是,我不能说规则一般没有帮助。某些做法已经并确实使生活更轻松。新语言产生了语法和结构,使生活更轻松。即使给了一大批不同的人群,代码也很容易阅读和维护。所以也许这些事情并不像我想的那么主观。
它在某种程度上让我想起了UI设计。当然这是主观的,但是有一个完整的学科参与制作良好的用户界面,它往往有效。
对于可维护性,可读性和其他最佳实践背后的想法,是否存在非主观的内容?当一个人开发一门新语言或想到新的实践时,有什么东西可以掌握吗?
答案 0 :(得分:1)
可以说你的问题实际上是关于编程(数学,算法和科学)和软件工程之间的区别,它是主观的,可变的和以人为本的。
优秀的程序员不一定是优秀的软件工程师,反之亦然。这两种技能组合虽然不以任何方式排他性,但它们的重叠程度比最初看起来要少。他们的相对重要性在很大程度上取决于项目:一个出色的程序员独自工作可以发现技术天才的惊人例子,没有其他人可以理解或维护它并不重要,因为他无论如何都不会分享代码。但是进入企业环境 - 就像企业内部软件开发一样 - 我很乐意为一个了解可读性和文档重要性的平庸程序员交换十个“洞穴巨魔”天才。
根据我的经验,世界需要优秀的软件工程师而不是需要优秀的程序员。在这个时代,相对较少的人正在编写真正对性能至关重要的软件(操作系统内核,编译器,图形引擎,实时嵌入式系统等),互联网允许平庸的程序员快速获取算法解决方案,解决他们无法解决的问题单独解决。但几乎所有编写专业代码的人都必须在团队中工作。团队生产力在其成员有效沟通和有效分配工作量的能力上急剧上升和下降,这两种技能非常主观,无法用严格的公式证明。
大多数软件工程原则都建立在经验而非客观规律之上。与社会科学非常相似,我们学习,学习,适应和应用 - 但没有真正的结果保证。我们可以说的是,在大多数群体中,有些事情似乎比其他事情更有效。
答案 1 :(得分:1)
我认为,很多事情必然取决于我们的思维能够一次处理多少。因此,它归结为语言和工具能够让团队或开发人员将问题分解为自己有意义的块,但不是那么大,以至于难以掌握它们。共同的主题是组织信息的艺术(在这种情况下,代码,逻辑......)但顺便说一句,这与数学或物理学没有太大区别。
答案 2 :(得分:1)
正如最好的作者从许多风格中借鉴一样,最好的程序员在他们的心理武器库中保留了大量的模式。斯拉维什遵循一些模式并坚持一些绝对真理既懒惰又危险。
换句话说,我们依赖机器人进行代码审查的那天是我退出的那一天。
答案 3 :(得分:0)
这一切都取决于你的观点: - )
但是为了回答你的问题,我认为观察主观性的一种方法是认识到软件语言,工具和最佳实践是个人之间共享的交流方式。是的,编程语言是指示计算机如何表现的正式方式,但编程语言也可以被视为一种定义和传达规范的方式,以达到高水平的细节(代码是最终的规范,是不是?)。
因此,就我们可能想要关注软件语言,工具和最佳实践的主观性程度而言,我会说缺乏主观性可能表明沟通的便利性。
是的,个人在他们的习惯和倾向中表现出一定的倾向,但在完美的发展平台中,这最终不应该太重要。
答案 4 :(得分:0)
谈到我的数学博士的妻子,我问数学是否有任何主观性。她的回答是肯定的,主要是我们作为人类得到答案的方式。
如果结果是数学证明,那么你得到的结果会有所不同。如果数据集很大,您可能需要使用计算机,这可能会引入错误,因此争论这是否是正确的方法。或者有时数学家可能会对理论产生分歧 - 一方面是试图证明x是真的而另一方试图证明x是假的。
我认为计算机科学中存在同样的事情。正确答案是正确运行的程序,但每个项目的正确定义可能不同。有时正确意味着没有错误。有时它意味着有效运行。
从这里,程序员可以争论如何最好地实现“正确”的结果。一个很好的例子是FizzBuzz应用程序。一个简单的答案只是一个for循环,但是Enterprise FizzBuzz也是“正确的”,因为它产生了正确的答案,但由于它的概念过于复杂,它通常被称为“坏”工程(它是一个毕竟笑话应用程序。)
主观性在编程中扮演的角色有多大?我说这是我们所做工作的一个很大一部分,仅仅因为我们是人,而且因为有多种方法可以得到“正确”的答案,所以对于哪种方式最好是存在分歧。
答案 5 :(得分:0)
已经进行了研究,表明某些实践可以降低软件中的缺陷率。例如,study发现了圈复杂度与易出错概率之间的强相关性。 Other studies表明设计和代码检查的平均有效性分别为55%和60%。因此,赞成简化,检查指标和进行代码审查似乎符合我们的最佳利益。
我们在这里谈论概率。如果我查看您的代码,我不能保证找到60%的错误。软件开发中也很少有绝对的东西;经验丰富的开发人员知道正确答案通常是“取决于”。也就是说,有许多实践对客观数据有利。