主观性在编程中扮演的角色有多大?

Bob*_*Bob 8 language-agnostic

我经常读到可读性和可维护性的重要性.或者,我阅读了关于哪些语法功能不好或好的非常强烈的意见.或者讨论某些范式的价值观,比如OOP.

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

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

有时候我认为它起着很大的作用.软件开发人员在某种程度上是工程师,也是人.编程的很大一部分是处理人类可读的代码.这与数学或物理学或其他具有非常精确和结构化规则的学科非常不同.在这里,确切的结构和规则大部分都在空中,随心所欲地变化,因此存在的语言数量.一个人可能会发现一种语言非常易读,而另一个人可能会发现他们自己的语言最令人欣慰.

与实践相同.一个人可能不喜欢某些公认的做法.我自己发现将类分成不同的文件是非常难以理解的.

但是,我不能说规则一般没有帮助.某些做法已经并确实使生活更轻松.新语言产生了语法和结构,使生活更轻松.即使给了一大批不同的人群,代码也很容易阅读和维护.所以也许这些事情并不像我想象的那么主观.

在某种程度上,它让我想起了UI设计.当然这是主观的,但是有一个完整的学科参与制作良好的用户界面,它往往有效.

对于可维护性,可读性和其他最佳实践背后的想法,是否存在一些非主观的内容?当一个人开发新语言或想到新的实践时,有什么东西可以掌握吗?

Dan*_*ory 1

可以说,你的问题实际上是关于编程(数学、算法和科学)与软件工程(主观、可变和以人为本)之间的区别。

伟大的程序员不一定是伟大的软件工程师,反之亦然。这两种技能虽然无论如何都不排斥,但重叠程度却比最初看起来要少。它们的相对重要性在很大程度上取决于项目:一个出色的程序员单独工作可以创造出令人惊叹的技术天才示例,而其他人无法理解或维护它并不重要,因为他无论如何都不会共享代码。但是进入企业环境——比如公司内部软件开发——我很乐意用十个“洞穴巨魔”天才来交换一个了解可读性和文档重要性的平庸程序员。

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

大多数软件工程原理都是建立在经验而不是客观规律的基础上的。就像社会科学一样,我们研究、学习、适应和应用——但并不能真正保证结果。我们只能说,在大多数群体中,有些事情似乎比其他事情更有效。