我和我的一个朋友昨天讨论了编写大型C ++软件与将其视为新兵之间的区别。
是否有可能因为一种软件一次只能完成一行,并且此过程类似于我们(人类)如何学习事物并在另一种之上构建事物,所以编写大型软件实际上比阅读并理解其功能容易。 (逐步执行代码会有所帮助,但您需要一起记住多个类/源文件,甚至都不知道它们是为什么编写的,多线程代码会增加恶意点)?
一开始听起来很奇怪,但经过一番思考,这似乎是合理的
我和我的一个朋友昨天讨论了编写大型C ++软件与将其视为新兵之间的区别。
是否有可能因为一种软件一次只能完成一行,并且此过程类似于我们(人类)如何学习事物并在另一种之上构建事物,所以编写大型软件实际上比阅读并理解其功能容易。 (逐步执行代码会有所帮助,但您需要一起记住多个类/源文件,甚至都不知道它们是为什么编写的,多线程代码会增加恶意点)?
一开始听起来很奇怪,但经过一番思考,这似乎是合理的
Answers:
根据我的经验,我将按照最简单到最困难的顺序对以下活动进行排名。
以上排名得出2条结论
当然,好的代码和坏的代码是广义的概括。我建议使用“代码完整和干净的代码”,以获取有关良好代码的更多详细信息。
这个问题引起了错误的共识。http://en.wikipedia.org/wiki/False-consensus_effect
不同的人学习和吸收信息的方式不同。它类似于听觉学习者,视觉学习者和动觉学习者。对于某些人来说,阅读代码更容易,对于其他人来说,创建代码更容易。对我来说,是后者。对于我团队中的其他人,它是前者。我不认为找到某种共识或多数意见是有用的。最好了解一下您的大脑如何吸收和学习信息,并利用这些知识使自己变得更好,并学会接受不同的人。
编写大型C ++软件与将其理解为新兵之间的区别
这与读写软件之间的区别不是一回事。当您刚接触项目时(尤其是刚接触公司时),您不仅需要了解代码的功能,而且还有很多要学习的东西。要了解代码为什么要执行其工作,通常需要了解业务的运作方式以及项目与组织其余部分的关系。简而言之,在没有充分的背景知识的情况下,阅读代码比阅读代码要慢,困难得多。
还有就是在编写全新的代码之间的差异新建项目和读取和修改现有的代码,但我不会说一个必然更容易比其他的,只是不同。当您创建新的东西时,您不必担心如何使代码与已经存在的东西一起工作,但是您确实需要担心使您的项目具有足够的可扩展性和适应性,以至于在将来仍然有用。 。在处理现有项目时,通常可以使用已有的内容作为指导,但是必须首先了解已有的内容。
作为“新兵”,通常最好在现有项目上工作,因为它可以帮助您学习所有未知的知识:业务如何运作,各个项目如何协同工作,编码标准和实践,甚至(尤其是)可以改进的地方。
与其他人编写的代码相比,大多数程序员发现更容易理解他们自己编写的代码。这是由于您提到的逐行学习,以及个人风格和才能的问题。这就是为什么要进行大量车轮改造的原因。
但是,那是树木的景色。森林的观点是,与从头开始编写代码相比,读取代码要容易得多。例如,是否更容易从头开始编写新的文字处理器,或者足够好地学习现有代码库以进行改进?
当您开始阅读代码时,可以想到无数种使代码更易于阅读的方法。您花了第一时间只是在四处寻找代码,试图弄清楚这片土地的状况,有时在架构中完全想出自己想怎么做。但是,即使在非常庞大的代码库中,与创建该应用程序已经投入的数十万工时相比,您可能仍需要花费40-80个小时来旋转轮子。
编写软件的人几乎总是对程序有最好的了解,这仅仅是因为在编写程序时就知道其逻辑和他/她的思考过程。
我不认为就易于理解而言,编写代码与阅读代码完全没有可比性。一方面,由于了解与每个代码部分,所使用的库等相关的上下文,仅编写软件就可以更好地理解该特定软件。但是,阅读其他人编写的代码可能很难理解。真正的软件,但是从理解语言的角度来看,它可以提供您可能未考虑使用的新的工作方式或使用库的见解,从而使编写代码变得更加轻松。
就构建知识而言,我认为阅读代码和编写代码是紧密联系的,并且在许多方面是相互依赖的。编写代码的经验使您易于理解其他代码,而阅读代码使您可以更轻松地编写代码(通过新的逻辑概念,使用库等)。
我个人认为这是不言而喻的,但是我从来没有完全确定它是否适合整个编程人群。例如,我认识一些非常有才华的编码人员,他们比阅读文档更能高兴地挑选别人的代码并理解它们,就像是他们自己的一样。
这就引出了一个问题:这重要吗?
如果您正在阅读代码,则很可能是在进行更改而不是重写。即使您正在重写它,也可能会以新的语言/版本来编写它,因此您不一定必须以相同的方式编写代码。我要说的是,并非总是需要始终了解所有代码。
所有这些都是正确的,较新的开发方法(例如BDD)确实认识到,从代码中清楚业务逻辑很重要,而不是简单地将代码作为驱动机器的一种手段。当然,这并不是什么新鲜事物-自从Donald Knuth的开创性工作:Literate Programming以来,这个概念就一直存在。
我很喜欢StMotorSpark的答案,只是补充说:
它取决于很多因素,例如,不能是是或否的问题: