在我的一门C++课程完成期末考试后,我又做了一次选修课(显然期末考试已经结束了,所以大多数人都没有去),但我没有别的事可做,所以我去了。
我的教授长篇大论地谈到了作为一名软件工程师在语言教条主义与习语之间的不同之处。他提到教条是要轻描淡写的。一个优秀的程序员会让他们的设计模式和代码风格为人所知,但他们会怀疑每一个决策都是实际的还是教条的。这个开发人员是因为教条主义或者习以为常而在这个项目中注入了OOP吗?
习语与以一种被语言普遍接受为“最佳实践”的方式书写语言有关。当你在学习一门口语时,一位说话者可能会一对一地从他们的母语中翻译出来,这可能会让你理解其中的要点,但是一位母语为另一种语言的人可能会用不同的/更好的方式来表达它。
教授敦促我们学习成语并对教条提出质疑。我想我明白他说的是什么,但我仍然对这两者之间的区别以及它如何适用于编码感到困惑。
有没有人能澄清一下他的意思,或者提供一些例子,比如盲目遵循教条,而不是学习成语。
谢谢!
发布于 2022-05-07 10:06:00
几天后,我看到没有人接电话,我将带你沿着这条路走下去,希望这将是旅程中的下一个步骤,它将在你的教授打开的门的精神中丰富你的编码能力。
首先,我的背景,所以你可以理解,这不是一个现成的答案,而是一个经过几十年的编码。我的第一台电脑是Atari 800,我的第一次编程是用Fortran 77使用关键的打孔机,所以是的,我经历了很多计算机革命。
当我开始编程的时候,OOP,函数式编程,机器智能等等,都不是用在关于编程的口语化演讲中,现在这些词已经像蚂蚁一样常见了。
也许我对惯用的编码方式和教条的编码方式以及强迫自己思考整个过程中的每一件事最让人吃惊的经历是,当我将一些神经网络代码从Python翻译成F#时。由于神经网络依赖于可变的矩阵,而Python很容易处理这些可变矩阵,因此使用Python很容易使用神经网络。
F#是函数式的,主要的成语之一是不可变的数据。知道这将是一个非常糟糕的想法,我在F#中创建了一个不可变的矩阵,并运行了代码。不用说,内存使用是固定的,IIRC很快导致堆栈溢出。显然,矩阵必须被编码为可变的,这使我进入了一个我觉得我在背弃使用F#的原因的世界。最后,代码按预期工作,我从这段经历中学到了很多东西,它让我想起了这句话。
像专业人士一样学习规则,这样你就可以像艺术家一样打破规则。巴勃罗·毕加索
现在回答你的问题
习惯于代码和教条,为什么区别很重要?
如果您编写的代码将由其他人编写和读取,特别是在生产环境中,那么您需要编写首先正确工作的代码,然后编写易于理解的代码,以便能够维护它。如果您用一种编程语言编写非惯用代码,那么其他人就很难理解它,通常表示您不完全理解编程语言,而且代码分析工具通常很难进行分析,因为它可能是他们无法解释的一个角落情况,他们无法解释导致错误进入生产的原因。
如果您在一段时间后使用多种语言编写代码,您将看到每种语言都有其周围的一个社区,而且它们通常具有不同的精神气质。事实上,看看每种编程语言通常都有一个不同的工具链。人们不仅需要学习语言的习惯性,还需要学习社区的风气。
如果您希望您的代码在生产中有一个长期的、富有成效的生命,那么编写它,以便社区能够使用它,理解它,并可能将它作为一个示例。如果它不是惯用的,它有更高的机会去咬天堂,并被某种习语所取代。
典范是一个在编程之外出现许多成语的例子。
我最喜欢也是最简单的例子之一是在写整数的时候。
整数的规范形式是1。
但这些也是整数1的有效形式。
01
001
0001
00001
假设一个世界的使用者没有使用整数的规范形式,而是使用不同的数字表示,例如罗马、巴比伦、玛雅等(参考)。
现在,想象一下去杂货店,用一个不同的数字系统来计算一些东西的价格。
附带说明:
在翻译代码时,我问了几个问题--所以,这里有一个主要问题,其他问题大约在同一时间框架内。
https://stackoverflow.com/questions/72065347
复制相似问题