代码完整声明,您应该将代码编写成语言,而不是代码中的代码。他们的意思是
不要将编程思维限制在语言自动支持的概念上。最好的程序员会考虑他们想要做的事情,然后他们会评估如何使用可供他们使用的编程工具来完成他们的目标。(第34.4章)
这难道不导致在所有语言中都使用一种编程风格,而不管现有语言的特殊优点和弱点吗?
或者,以一种更可回答的方式提出这个问题:
你会不会建议一个人应该尽量用自己语言的细节来对自己的问题进行巧妙的编码,还是应该从整体上寻找最优雅的解决方案,即使这意味着你需要实现不存在于自己语言中的可能令人尴尬的构造?
发布于 2012-02-27 08:43:36
还有一种更好的方法:完全忘记你可怜的固定编程语言。用您刚刚发明的语言对您的问题进行编码,从相关问题域的特定术语派生出来,尽可能自然地对其进行编码,然后才考虑实现这种新的编程语言或将您的代码简化到现有语言的限制。
这种方法称为面向语言的编程。有许多有效实现特定领域语言的技术,这对于Ruby社区来说是一个特别热门的话题。
发布于 2012-12-14 08:23:19
我相信正确的答案,以及这本书的意图是:
一个人应该尽量把自己的问题与自己语言的具体内容结合起来。
通过将程序编写成一种语言,我总是认为它是在使用该语言的正常风格之外的技术,这样做会带来好处。这是以一种风格在所有语言中写作的一个关键区别。
例如,学习Haskell极大地提高了我使用高阶函数的能力。现在,在用c#进行编程时,我更经常地使用各种IEnumerable方法,比如Select,因为使用这些方法比编写for循环带来更干净的代码。由于我的haskell经验,我也倾向于更频繁地使用pass和使用函数(即Func<int, int>)。由于这一点,我对继承的使用已经减少,而且大多数情况下结果是更简单的代码。
但是,在c#中,我不使用monads之类的概念,也不使用代数数据类型。这是因为两者都不能在c#中清楚地表示出来,也没有什么好处可以用来交换很多不知名的东西。
所以我用语言的工具来使用我所拥有的技能来达到最好的效果。我相信这是在用语言编程。
发布于 2013-08-21 03:07:03
你会不会建议一个人应该尽量用自己语言的细节来对自己的问题进行巧妙的编码,还是应该从整体上寻找最优雅的解决方案,即使这意味着你需要实现不存在于自己语言中的可能令人尴尬的构造?
关键是优秀的程序员没有语言。书中的引语谈到了“可供使用的编程工具”--这意味着如果您了解perl和Java,那么也许您应该使用perl进行快速的字符串操作。编程语言不是限制我们的框,而是我们用来解决问题的工具。这是(国际海事组织)正在完成的规则。不要在编程语言/环境框中编写代码,将最好的解决方案放入您、您的问题和解决方案的最佳编程语言/环境中。
https://softwareengineering.stackexchange.com/questions/137069
复制相似问题