我们拥有的越来越先进的编译器、语言和框架要么自动执行任务,要么向我们隐藏某些复杂性,它们最终会让我们成为更笨的程序员吗?
Jim C给出了以下计算器的类比:
最近有人用纸和铅笔求平方根吗?我们使用计算器或简单地调用我们最喜欢的编程语言中的函数。我们当中有多少人知道计算器的功能甚至功能?
那么,为什么我们不都告诉我们的孩子忘记学习数学,这就是我们拥有计算器的目的呢?这不会天生就让我们的孩子变得更笨吗?
我们拥有的越来越先进的编译器、语言和框架要么自动执行任务,要么向我们隐藏某些复杂性,它们最终会让我们成为更笨的程序员吗?
Jim C给出了以下计算器的类比:
最近有人用纸和铅笔求平方根吗?我们使用计算器或简单地调用我们最喜欢的编程语言中的函数。我们当中有多少人知道计算器的功能甚至功能?
那么,为什么我们不都告诉我们的孩子忘记学习数学,这就是我们拥有计算器的目的呢?这不会天生就让我们的孩子变得更笨吗?
它们不会让优秀的程序员变得更笨,而是让他们更有效率;但它们使愚蠢的人能够编程并认为他们是伟大的程序员。
澄清:我对愚蠢没有一个准确的定义。从愚蠢我的意思是一般的事情是那些不应该真正成为程序员或应该尝试学习重要事物的人。我见过很多人不能真正编码,只是从这里和那里复制东西。软件质量评估不是一件容易的事。他们最终构建了一个以某种方式工作的糟糕软件(由于存在好的工具),因此他们不会失去工作,并且他们认为自己是优秀的程序员,因此永远不应该尝试学习任何东西。相信我,我在每个优秀的开发人员身上都看到过一件事:“他们从不停止学习,而且他们不会只学习完成工作所需的一段代码。”
这并不意味着 IDE 不好。我爱他们,并认为他们应该尽可能地发展。
我认为他们允许更愚蠢的程序员,他们不会让更愚蠢的程序员。
农民是否因为使用自动化机器种植、收割和维护农作物而变得更笨?
好的任务自动化只会让程序员更高效,而不是更笨。
那么,为什么我们不都告诉我们的孩子忘记学习数学,这就是我们拥有计算器的目的呢?这不会天生就让我们的孩子变得更笨吗?
计算器是一种允许您执行某些任务的工具。当然,您可以进行复杂的数学和多变量集成,但如果不学习数学,您怎么知道您需要在给定时间执行该任务?
编程和 SDK 也是如此,您可以使用预定义的代码投入大量的花里胡哨,但是当您需要编写一些东西来解决问题时,世界上所有的工具和自动化都无法帮助您那里(无论如何,人工智能还没有那么先进;)。
平均而言,是的。:)
它们不会让我们成为更愚蠢的程序员。他们所做的是允许有更多愚蠢的程序员(我想这意味着,平均而言,我们更愚蠢。)拥有更好的工具意味着经验不足且对 CS 概念理解模糊的人仍然可以编写出那些最终工作并做一些有用的事情。这在用汇编语言编写时是不可能的,但在用 VB 编写时却是这样。(当然,当经验不足的人编写大型应用程序时,最终发生 WTF 式灾难的可能性更大,这些应用程序最终在其糟糕的架构的重压下崩溃。)
不可否认,“哑巴”在这里是一个煽动性的词。仅仅因为某人知道的少并不会使他们变得愚蠢,这只意味着他们经验不足。但重点是明白的。
我认为更快的机器让程序员变得更糟......现在大多数程序员花很少的时间编写最佳代码。编译器无法将坏代码优化为好代码。
快速的机器意味着糟糕的程序员可以摆脱糟糕的代码,因为没有人知道它的糟糕之处。在过去,代码必须经过处理和改进,才能运行得足够快,才能以可接受的方式实际工作。
托尼
Visual Studio 是否会腐蚀大脑? ——查尔斯·佩佐德
不,
智能编译器让聪明的程序员专注于真正重要的事情,比如设计好的软件。
s/make/allow/
少一点油嘴滑舌:它们是工具。 工具不会制造任何东西,它们不会让任何工匠变得更好或更糟。强大的工具也不会——它们只是充当杠杆,放大特定工匠的能力(或缺乏能力)。
一些编程工具具有降低进入门槛的效果,如果不是软件工程专业,那么至少可以让应用程序运行。缩短生产工作(或“工作”)应用程序所需的思考量是双向的:称职的专家可以从琐碎的工作中解脱出来,可能会做出伟大的事情,但笨拙的新手有时会将糟糕的代码投入生产,而他们从来没有如果没有“智能”工具,就会开始工作。后一种效应在塑造 BASIC、VB、PHP 的声誉以及最近大量用于 Web 的 MVC 快速开发框架方面的影响可能比前者更大——实际上对这些工具的总体概念也产生了更大的影响。
更智能意味着自动化。做重复性工作不会让任何人变得更聪明,所以答案是否定的。
让我通过使用计算器示例进行扩展。用笔和纸计算平方根的技术只是一个可以学习的过程。知道这个过程并不会让你更聪明,它只是让你在没有计算器的情况下计算平方根。
现在,如果你发现了一种计算平方根的算法,那你就聪明了。
我们的编程工具也是如此。为你做内存管理的语言不会让你变笨,也不会自己做内存管理会让你更聪明。
它让不太熟练的程序员更容易进入该领域,仅此而已。它不会让一个好的程序员变笨。如果他们忽略了可能提高效率的工具,他们就会变得愚蠢。
计算机是增强设备。所以愚蠢的变得更愚蠢,聪明的变得更聪明。
只有你允许他们这样做。
如果你学习了一些困难和挑剔的东西(比如我的 Tandy 102 笔记本电脑),即使使用更智能的工具,你仍然会以这种模式思考。
当然,依靠这些工具来完成工作很容易,为此,我很感激。
例如,您不会教人们如何使用台锯和钻床进行木工 - 您从手锯和螺旋钻或小型手钻开始。这样,当您转向电动工具时,您就不会做一些愚蠢的事情(tm)。
依赖工具很棒——但知道如何在没有工具的情况下做到这一点也很重要。
不,但它确实可以生成更好的程序和代码。
我想说的是高级语言的技能是不同的,你需要更多地考虑抽象,有更多的 API 需要担心,人们期望他们的软件质量更高。由于上述原因,程序员面临着不同的挑战,而工具正在跟上这些挑战。
它们不一定会让程序员变得更笨,但它们可以让程序员变得懒惰。我发现自己这样做有时只是匆匆浏览一些代码并依靠编译器来帮助我找到所有错误,而不是一开始就做对了。
顺便说一句,这不是推荐的做事方式。通常需要更长的时间。
好的,我拥有的前两台计算机是我自己建造的。那时这很聪明,我不太确定现在是否可以很好地利用我的时间。我在 80 年代初混合使用汇编程序和 BASIC 进行编程,当时又很聪明,现在不那么聪明了。
我在这里得到的是上下文已经改变,在计算中,我们不得不用知识的深度来换取知识的广度,而这需要进行必要的“简化”。为了支持“当今计算”所涵盖的大量复杂性和广度的应用程序,我们还被迫在更高的抽象级别上工作。一方面,我们看到领域应用专家使用高度抽象的工具来提供非常好的解决方案,另一方面,我们看到计算技术/编程专家制作出能够推动整个计算行业向前发展的精湛代码。称任何一方为哑巴都是煽动性的,而且可能是辩论中唯一的哑巴。
在这种情况下轻描淡写只是让更多的观众使用现代计算机所具有的有效工具。这是一件好事,铁杆程序员不应该受到威胁,毕竟这是他们的宝贝。
平均而言,是的,它们使程序员变得更笨。但这只是因为它们使不如我们聪明的人更容易接受编程,从而降低了平均“聪明度”。
:-)
一个谴责现代开发环境便利性的聪明程序员可能并不那么聪明。
笨蛋?不必要。如前所述,拥有更智能的工具可以让开发人员专注于更重要的事情,例如使应用程序正常运行。我自己职业生涯中的一个相关轶事:
我不是一个熟练的数学家。我在微积分前不及格(好吧,当然,这是因为我从未做过功课),甚至对一些非常基本的物理公式(例如计算摩擦力)有点生疏。这是因为我完全没有练习,这仅仅是因为我从不使用它。
以导数为例。如果你让我找到函数的导数,我会使用我的 TI-89,因为我不知道如何做到这一点。然而——我认为这更重要——我知道如何使用它。我知道它在哪里有用,为什么要使用它等等。点积是另一个例子。我知道如何使用它来计算 3D 空间中表面的镜面反射,但我不知道如何手动计算它,因为我从来不需要。
我不会因此而称自己为笨蛋。也许是出于实践,但同样有能力。
不,它类似于类固醇(和其他增强体能的药物)——它们让一个伟大的运动员变得更好,但即使我吃了一整间药店的药物,它们也不能让像我这样的人在 10 岁以下跑 100 米。所以,上帝的 IDE、语言或框架可以让你成为一个更好的程序员,但如果你只是依靠它来完成工作,那你就有麻烦了。
我认为没有,但有很多人(非常聪明的人)有不同的想法
我真的推荐这个讲座,这是一个非常有趣的观点和非常好的文章
我不这么认为。更复杂的工具只会让我们的大脑专注于更有趣的问题。
对于我们这些过去已经学会执行上述任务或了解上述复杂性的人来说,我相信它只会让我们更有效率。我们可以更自由地担心其他/更重要的事情。我们可能倾向于要么忘记“当时有多难”,要么抱怨今天的新程序员多么幸运。
对于我们这些刚刚起步并且还没有了解这些细节的人,我相信它只会让我们成为一个不同的品种。不是更笨,只是我们从不同的角度看待不同的问题。
然而,它确实降低了入门门槛,从而使大众更容易接受编程。这是好事还是坏事,值得商榷。
是的,但没关系。最近有人用纸和铅笔求平方根吗?我们使用计算器或简单地调用我们最喜欢的编程语言中的函数。我们当中有多少人知道计算器的功能甚至功能?
你应该知道事情是如何工作的,你想成为更好的程序员或其他任何事情,你应该知道的越多。但一天只有这么几个小时。
更好的工具让我们变得更好。权衡是我们对过程几乎失去控制。
在某种方式
例如,我不知道也不关心如何编写运算符重载,因为我有为我制作它们的工具。我什至不必记住 P/invoke 是如何工作的,因为我拥有的工具会自动创建一个 C++ dll 项目,并[DllImport]
在我的 C# 项目中创建一个。我不必为我的项目编写自动更新程序,因为 ClickOnce 几乎就是它。(而且我不知道它是如何“在引擎盖下”工作的。)
所以,是的,我不那么聪明,因为我对 C++ 程序员知道的许多低级东西一无所知。但我仍然认为我是赢家,因为我可以做得更多。我可以将更多时间花在演示、质量控制以及客户真正想要的那些功能上。此外,深入挖掘 .NET 框架确实需要一些学习,因此需要权衡取舍。
我不会说他们一定会让程序员变得更笨,但我想说的是。对于在当今时代开始开发的人们,不要完全了解幕后正在为我们做的事情有多少。如今,平台中内置了如此多的库,以至于从今天开始的人们根本不知道这一切是如何在某一时刻手工完成的。
但是,我会说,如果没有 Intellisense,我将永远无法回过头来编写一行代码 :)
我认为有必要拥有更智能的工具,以便我们可以从复杂性中抽象出层次。但我认为我们必须能够改变对那些抽象层的访问。我认为程序员会更有效率,但很容易失去许多基本概念的概念。这是一种权衡……好的程序员将是那些继续理解编程基础的人。其他人将是“复制粘贴”和乐高玩家。
相反,更智能的编译器意味着您与计算机的斗争更少,并且可以更多地考虑您是如何尝试做某事的。
如果您正在为汇编程序而苦苦挣扎,那么您几乎永远不会为匿名方法而烦恼。
我会说不。
更智能的编程系统(我认为更高级别的抽象不是自动修复代码的工具)IMNSHO 实际上更难使用。我想出的类比是它们充当长杠杆。你在短端非常努力地推动它,移动它很小的量,就会发生巨大的变化。
弄清楚需要做什么更难,但当你最终完成时,也更难把它搞砸。
更智能的语言、编译器和框架使编程成为可能。我的意思是,如果我们仍然局限于使用汇编语言,你能想象编程的状态吗?哎呀,从头开始。如果我们仅限于 C 或 C++,你能想象编程的状态吗?
编译器、语言和框架的改进使程序员更有效率,前提是他们有良好的学术背景或良好的语义理解。
我知道这是一个旧线程,但仍然想在这里发表我的意见......
它们确实让我们变得更笨,你们中的大多数人已经知道如何以体面的方式编程。为什么?因为你来自一个几乎没有使用框架的时代。
在教育系统中,越来越多的框架被用在课堂上,……而在没有使用框架的课堂上,不鼓励开始编程。学习所有这些代码,而在您的脑海中,您知道有一个工具可以为您完成这一切。您知道在现场/工作场所您必须使用框架才能快速运行。那么为什么要花这么多时间学习代码。
SO:在短期内,对于所有已经了解语言的人来说,不……它不会让你变得更笨
从长远来看....你会看到低等级的程序员变得更好,而优秀的程序员在等级上变得更差。
记住我的话!