您是否认为接触BASIC会损害您的思维?[关闭]


32

向以前接触过BASIC的学生教授良好的编程几乎是不可能的:作为潜在的程序员,他们在精神上被肢解,无法重生。

埃德斯·迪克斯特拉Edsger W.Dijkstra)

我对Dijkstra表示敬意,但我不同意他所说/写的一切。我特别不同意35年前写的有关Dartmouth BASIC实现的链接纸上的这句话。

我的许多同事或朋友都是从BASIC开始的程序员,下面的问题给出的答案表明,许多程序员都有在BASIC进行编程的第一次经验。AFAIK的许多优秀程序员都是从BASIC编程开始的。

我不是在谈论Visual Basic或在充满资源的计算机上运行的BASIC的其他“现代”方言。我说的是在“玩具”计算机上运行的BASIC的过去,程序员不得不担心保存小的数字,这些数字不需要计算为字符串即可保存一个可观的字节,因为计算机只有几百个,或者由于缺少更强大的功能,必须使用计算后的goto以及许多其他事情,这些问题要求程序员在做某事并迫使程序员具有创造力之前要三思而行。

如果您曾经在资源有限的机器上使用过往的BASIC经验(请记住,当今的简单微控制器比1975年的计算机拥有更多的资源,您是否认为BASIC可以帮助您的头脑找到更好的解决方案,像工程师或BASIC一样,将您拖到编程的阴暗面,使您在精神上残废?

学会在充满资源的计算机上运行的编程语言,在这种计算机上,新手程序员可以做所有的事情,并且程序运行时没有大问题吗?还是更好地了解程序员在哪里不能出错?

您对BASIC的评价如何帮助您成为更好/更差的程序员?

您是否会向即将到来的程序员教授在2KB(虚拟)计算机上运行的旧BASIC?

当然,仅接触BASIC是有害的。也许您同意我的观点,即现代BASIC并不能提供太多帮助,因为现代BASIC(与其他编程语言一样)提供了使程序员没有更深入思考的功能。

附加信息:为什么选择BASIC?


7
您知道报价大概是35岁吧?
MIA 2010年

2
是。指向Dijkstra的链接具有发布日期。
Maniero

3
也许年轻人不应该回答这个问题:-)
Maniero 2010年

8
35岁,而且我很确定Eddie在写这本书时,他也正在拖钓。我不会读太多。
Carson63000

3
我同意@Carson;我认为长时间暴露于愤世嫉俗,傲慢自大和痛苦的老人对你会更糟。
Mark C 2010年

Answers:


37

引用之时流行的基础知识与我们20年前的情况大不相同。(您是否在“现代”方言中计数?;)

忘记循环,子例程,局部变量以及结构化编程(其中Dijkstra和Knuth是重要的支持者)强调的所有内容。您拥有GOTO,并且喜欢它。

在这种情况下,只知道全局变量的程序员发明了自己的子例程(使用更多的全局变量作为参数和返回值!),并编写了意大利面条式GOTO确实被肢解了。

如果您今天30岁左右或以下,并且Basic是您的第一语言,那不是Dijkstra在谈论的语言。即使您年纪大一点,并且您的第一台Basic也具有其中某些功能,如Murph在下面的评论中所述,它可能仍然不是Dijkstra在谈论的语言。


您已使用我以前不知道的上下文更新了问题:

  • Dijkstra的报价来自1975年。

  • 但直到6版本,你有单独编译的程序-这,我相信,在显示重心的转移的开始远离从GOTO。

  • “在1976年,史蒂夫·加兰(Steve Garland)添加了结构化编程功能,以创建Dartmouth SBASIC,该预编译器产生了版本6的输出...” [ Wikipedia ]引号的上下文显然在我们现在称为控制结构的位置,并且许多用户使用时间本来可以更熟悉第二个最新版本,即Garland版本v5之前的两个版本以及可单独编译的程序之前的两个版本。

  • GOSUB / RETURN仍然仅处理“简单子例程”。

  • “变量名仅限于A到Z,A0到A9,B0到B9,...,Z0到Z9,最多提供286个可能的不同变量。” ...而且它们都是全球性的。


2
我的第一次接触是BASIC(在1979年)-但自相矛盾的是,方言具有参数化的过程,并且您可以在外部文本编辑器中编辑代码,尽管我做了很多事情,但使用的版本不那么优雅。1982年,当我接受结构化编程(和Pascal作为实现该语言的一种语言)的学习时,就像早晨的太阳升起一样……我最后一次在概念上用“适当的”语言(DIBOL)使用GOTO, 1990年……
默夫(Murph)2010年

@Murph:我每年都会使用goto几次……但出于同样的原因,“ goto认为是有害的”是我上面提到的全球goto,而不是本地goto。

1
GOTO又名“大规模随机跳跃”,我很欣赏这篇论文不是关于“什么”,而是关于“如何”,这反过来就是为什么他错了,确实为吸引大标题赢得了广泛报道。(例如,如果您查看Fortran IV,除了使用goto之外,您别无选择,但是,正如我的讲师试图演示的那样-尽管由于引入了Fortran 77而被挫败-您可以使用gotos编写结构良好的代码)
Murph 2010年

我已经完全谈论过旧的BASIC方言。我不知道为什么人们坚持认为我在与现代BASIC对话。对我而言,现代的BASIC破坏了程序员的思维。它几乎可以煮熟所有东西,不需要深入思考。BASIC程序很少超过1或2KLOC,并且很少有超过100个变量,今天通常是一类具有超过此数量的类,并且我发现围绕此计数编写的一些函数不好。我的想法是,Dijkstra接触过最糟糕的BASIC程序员。只有在有限资源的机器上具有BASIC经验的人才能知道。
Maniero 2010年

@bigown:但是,您认为现代到底是什么?对于我来说,将30岁的编程语言称为“现代”绝对是不寻常的。

31

一个人除了吃喝喝,在工作中找到满足感外无能为力。

我先学过BASIC(好吧,我想除了代数之外)。如果它没有严重扭曲我的想法,那么我不确定如何解释接下来的18年...

话说回来,那又如何呢?Dijkstra算法可能也很难教我任何东西,因为我长期接触过BASIC的,但他就会有一个困难,因为他长期暴露于地下松木棺材的时间教我什么。即使除去了这些因素,我仍然从未成为过认真的CS学生,认真的数学学生或任何其他学科的认真学生。像我这样的人与那种程序员Dijkstra希望看到的深渊是如此之大,以至于几乎不可思议……

但是,我们编程。我们对BASIC感兴趣,对FORTRAN感兴趣,对COBOL以及其他所有产品进行了试验,我们还发现了对这些小型机器的喜悦和迷恋,虽然这最初将Edsger先生带到他的领域的机器完全不同,但事实并非如此。更少的呼唤,这是终生爱情的基础。

...或者也许那是残缺不全的人说的...


很细!尽管这是一个严重的问题,
RCProgramming


11

从结构的角度来看,BASIC不比汇编程序或COBOL差。那时,我们现在没有太多的Algol降级语言,Pascal是大多数人第一次对合理的控制结构进行介绍(我不喜欢Pascal的控制结构)。

如果BASIC足以永久性地伤害人们,那么其他早期语言也可以,那么我们就不会受到人们的伤害而无法开发我们今天使用的所有语言。

那时Dijkstra可能正在与那些不是优秀的程序员并且永远不会成为优秀者的人打交道,他们学会了用BASIC做一些事情。这是我可以发表的最慈善的解释。


汇编程序代表您为计算机提供的字节数。您可以BASICAssemblerDijkstra的报价代替,但我认为它是计算机语言,而不是编程语言。虽然+1 :)
极品

1
我的理解是Dijkstra在这里单挑Basic以获得快速的报价,并且会包括其他非结构化环境。

2
当然,Dijkstra可能一直在谈论BASIC以获得良好的声音。但是,我的观点是,早期的计算机语言当然并没有更好的表现,这意味着优秀的程序员要到1960年左右才能开发出来,而任何在此之前开始的人都受到了永久性的损害。
David Thornley 2010年

5
如果你们花时间阅读引用报价的论文,您会发现他还浪费了当时除BASIC之外的其他流行语言。他还批评了人类拟人化计算机的趋势,据我所知;他们讨厌那个。
Huperniketes

2
@Huperniketes:是的,但是Dijkstra对BASIC和COBOL异常敏感。他留下了可以治愈FORTRAN和PL / I病房的感觉。
David Thornley,2010年

6

我在TRS-80和Apple II c / e上通过BASIC学习,并认为自己是一名优秀的程序员。我个人认为没有被先学习BASIC破坏的两个特征是

  1. 我一直在尝试学习更好的方法以更少的努力来完成我想要的事情,这导致学习其他语言以及这些语言的功能,使其变得强大,并且
  2. 我遇到并认识到BASIC作为一种语言存在的问题,尤其是缺少子例程(尽管我没有经验来简洁地描述我现在所遇到的问题)。

我将承认,在纯粹的BASIC程序之后学习面向对象的程序是一阵苦战,但是我不知道那是否与BASIC真正相关,因为那时我也学到了相当多的C语言。 。


6

我也不同意Dijkstra。我觉得很难学习第二语言,是因为范式,而不是因为是BASIC。

BASIC是1985年我在称为TK(类似于Sinclair的个人计算机)的个人计算机上使用的第一门语言。这是一种资源非常有限的机器。那时,我从书中使用十六进制编辑器编写了一个BASIC编译器,以取乐。之后,我买了一本Z80书,学习了8位机器语言。BASIC为此提供了很多帮助。

在我学习了C和Pascal并玩了Assembly for 8080/6之后。MSX-BASIC,MS-DOS时代的Quick Basic ... VB,Delphi,Windows时代的一些Java ...

今天,一项具有进度(4gl)、. net(C#/ VB),php的作品,我感觉不像是独眼巨人。:O)


5

我八岁的时候从苹果克隆开始。

甚至包含一些OOP想法的更高版本的basic(qbasic,Visual Basic等)在8点也没有意义。

提早开始编程是我可以仔细考虑程序流程中问题的原因之一,而这正是太多人无法在该行业中做得很好的原因。

我认为尽早开始通常是有益的,并且与小孩子打交道时需要非常简单的语言。

你的旅费可能会改变...


4

我认为暴露于世界上大多数BASIC 示例的原因是肢解程序员的大脑,而不是语言本身。就像C#程序员浏览MSDN一样,他认为没有必要进行异常处理或确实不需要处理IDisposable类型。


4

如果每个人都无法以当前语言识别问题,并且不仅能够解决这些问题,而且找到另一种解决问题的方法,那么任何人都会遇到问题。

只有在没有行号的情况下,GOTO才是不好的;)


对!GOTO很好;它是邪恶的标签... mwuuuuhahahahaha
Mawg 2015年

3

我目前正在使用BASIC教儿子编写自己的简单游戏。我从未使用过它,我从PowerBuilder和PowerScript开始了我的运营商,然后跳到C / C ++,然后是Delphi。今天,我几乎使用所有可用的语言,并且适应很快,因为所有语言的基础都是相同的,具有不同符号,运算符和符号的数学公式。这也是我在教我儿子的方式,因此他已经可以阅读和解释C ++代码。我儿子12岁。


3

BASIC GOTO是用汇编语言教授思维方式的好方法。它不会破坏人的思想,只会使人的思想远离碳基突触,而更接近硅基晶体管。

但是,让我们将BASIC与LOGO进行比较。BASIC可以使年幼的孩子远离编程,因为编写一个简单有趣的程序,您所能做的就是继续对印刷在杂志上的非常长的程序进行复印,而使用LOGO的单线可以绘制出令人印象深刻的图形,这对吸引孩子至关重要。


因为这样的说法,我对这个答案不满意: 您所能做的就是继续对一本杂志上印刷的非常长的程序进行打字,这只是今天的脚本。真正的未来开发人员正在学习和编写自己的东西。
TecBrat

2

Basic很不错-它很有趣而且很简单它可以生成有趣的2d图形,而其他却不行。我了解(或尝试学习)在我10或12岁时,这是一种有趣的语言,使我对学习更多内容感兴趣关于计算机...


2

我认识的一些最好的程序员很早就接触过Basic编程。它比其他更新语言(具体来说是HLL入门)更“具体”,因此可以为底层计算机的实际工作方式提供更好的感觉。

Dijkstra的引用来自学者试图推动一种趋势的趋势,即朝着由规范设计的可证明正确的结构正确的程序发展的趋势。但这不是大部分行业发展的方式。取而代之的是,许多Web 2.0时代的程序员都在尝试快速原型化某些东西,因为在大多数数学上严格的规范中并没有能证明其依据的代码,因为事情发展得太快了,以至于无法保持竞争力。

因此,当在方法论中进行一些清理时,Basic中的编程有时会鼓励采用“砍刀砍刀”的试错编程方法,这是RAD思维的有用入门。

最后,我要指出,在iPad上运行的至少有5种基本解释器,因此即使在最新的设备上也可以使用该语言。


1

我认为,鉴于此引用已有35年的历史了,它与缺少编程语言中的抽象以及很大程度上要与您想知道如何发展才能回到原来的状态有很大关系。

获得像BASIC这样的语言后,您几乎不会懂得如何进行低级编程,这在过去比现在要重要得多,并且会给您一种错误的印象,即编程比实际要简单。

我记得在三年多的VZ200,C64和Apple] [e BASIC]之后,才15岁就试图学习“机器代码”,这简直是不礼貌的电话。

然而,这些天来,尽管我对这些事情完全不屑一顾,并且您不会发现我以BASIC的名义用任何一种语言愉快地工作(我倾向于对诸如“愚蠢的费舍尔价格语言”之类的监控短语大吼大叫,再一次,我拒绝了我粗心的花括号),我承认,比起35年前(或以我个人的经验和示例为例),使用抽象化CPU力学的语言来进行生产性工作要容易得多。


1

对于我们这些人来说,他们是通过面板上的一组8个开关一次将一个字节的汇编代码加载到Speer Micro-LINC计算机中的,然后在1972年将它们存储在PDP磁带上,我将毫不含糊地断言Dijkstra是一个笨拙的家伙。他鄙视Basic的一切都是关于我正在使用的汇编器的真实话,但是我自己和成千上万的其他人从接触汇编器以及后来的Basic和Fortran以及Cobol和C等中恢复了过来。


1

我在1990年代初期开始使用GW-BASIC进行编程。我没有被肢解。我转向了更好的语言,例如Pascal,C,C ++,Java,C#和Python。

我今天无法编写BASIC程序;我忘记了如何根据行号进行思考。那不是问题。

但是我的BASIC经验对我的大学计算机体系结构课程有很大帮​​助,在那里我必须学习汇编语言(MIPS)。汇编语言的控制流是很多像BASIC的:跳转= GOTO,=树枝IF... GOTOjal(电话)... jr(RET)= GOSUB... RETURN。这就是您需要的所有控制流程!

学会在充满资源的计算机上运行的编程语言,在这种计算机上,新手程序员可以做所有的事情,并且程序运行时没有大问题吗?还是更好地了解程序员在哪里不能出错?

我会说最好在资源有限的计算机上学习。不是因为“程序员不会出错”,而是因为“冷静”的门槛要低得多。新手程序员可能不知道如何为他们的PC打造出色的第一人称射击游戏。但是他们可以为TI-89编写出色的《吃豆人》游戏,并充分利用硬件。那就是一种力量感。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.