Gyö*_*sek 35 c language-agnostic optimization premature-optimization
问题似乎已经解决,甚至被打死.聪明的人在这个问题上说过聪明的话.要成为一名优秀的程序员,您需要了解C语言.
或者你呢?
本周我开悟了两次.第一个让我意识到我的假设并不比我背后的知识更进一步,并且考虑到我的机器上运行的软件的复杂性,这几乎是不存在的.但真正开车回家的是Slashdot评论:
最终的结果是,我注意到传统C"裸机"程序员认为实现更高级语言的许多天真的方式.他们在他们影响的项目中做出错误的"优化"决策,因为他们不知道编译器是如何工作的,或者他们理解的天真宏汇编程序模型与良好的运行时系统有多么不同.
然后它击中了我:C只是一个抽象,就像所有其他人一样.即使是CPU本身也只是一种抽象!我从来没有看到它破裂,因为我没有测量它的工具.
我糊涂了.像Dijkstra谈到BASIC一样,我的思想是否已经被肢解,无法恢复?我是否处于不成熟的过早优化状态?对我来说有希望,现在我意识到我什么都不知道吗?有什么需要知道的吗?为什么它如此迷人,我在过去五年写的所有内容都可能是根本错误的?
总结一下:知道更多API文档告诉我的是否有任何价值?
编辑:制作CW.当然这也意味着你现在必须更好地发布解释器/运行时优化的例子:)
Jer*_*fin 38
既不知道C也不了解实施的低层细节也不会伤害你 - 本身.如果你始终以低级别的细节思考和工作,即使这是不合适的,那么能够和将会伤害你的是什么.
俗话说"真正的程序员可以用任何语言编写FORTRAN ".如果你使用C做同样的事情,那不是一个改进.如果您正在编写Lisp,请编写Lisp.如果您正在编写Python,请编写Python.C的适当和合理的不适用于那些(或任何其他任何一个).
一个优秀的程序员需要能够在许多不同的抽象层次上思考,并且(更重要的是)识别并应用适合于手头任务的抽象级别.
了解C的抽象级别并没有受到伤害.对替代品的无知可以(并且将会).
Ark*_*nez 20
知识不会造成伤害.永远.那些在高级语言中编写错误代码的人是因为他们没有正确掌握更高级别的语言,糟糕的开发人员.
使用语言 - 自然(口语)或人工(编程) - 需要思维以某种方式适应.每种语言都有它自己的语法,它自己的词汇表(API)等.如果你主要是一个Java程序员并切换到Ruby,你至少会遵循Java程序员的思维模式,如果不是基本上编写Java代码的话.红宝石.在您开始对新环境(Ruby语法,Ruby API)感到满意并开始编写Ruby代码之前,需要花费一些精力和练习.
因此,该过程是完全正常的,并且先前模式的任何不利影响都是非常短暂的.更重要的是,你学到的每一种语言都会拓宽你的视野,让学习下一个更容易.旅行愉快.:]
编程与编程语言无关.它是关于解决问题.用于解决问题的工具恰好是编程语言.您不编写代码来编写代码,编写代码来执行代码并解决问题.
您对工具的了解越多,就越能越快地解决问题.但是当你在物理上尝试使用锤子将螺丝钉入木头时会遇到严重的麻烦,软件有一个很好的特性:对于任何给定的问题,都有一种荒谬的不同解决方案.
因此,完全有可能用一个锤子敲击一个螺钉,这个角度使得螺钉会告诉木头自己钻一个洞以便螺钉适合.然后你可以将它隐藏在一个按钮后面,用户不会甚至需要知道锤子到底是什么.
虽然它不是最有效的解决方案,但它仍然是一个有效且有效的解决方案.当您使用所使用的工具时,您会发现如何在API未提供螺丝刀时编写螺丝刀.
您知道的工具越多,您知道如何解决任何问题的方式越多,您拥有的选择就越多,您对使用哪种解决方案的决策就越好.为工作选择合适的工具.但是,当你不了解工具和可能的解决方案时,你怎么能这样做?