您认为教人们将汇编语言(某种变体)作为第一门编程语言有多么出色的主意?与学习Java或Python相比,这将花费更多的精力,但是从“第一天编程”(至少与许多高级语言相比)开始,人们或多或少会对机器有很好的了解。你怎么看?至少对于那些愿意付出额外努力的人来说,这是一个现实的想法吗?的优点和缺点?
注意:我不是老师,只是好奇
您认为教人们将汇编语言(某种变体)作为第一门编程语言有多么出色的主意?与学习Java或Python相比,这将花费更多的精力,但是从“第一天编程”(至少与许多高级语言相比)开始,人们或多或少会对机器有很好的了解。你怎么看?至少对于那些愿意付出额外努力的人来说,这是一个现实的想法吗?的优点和缺点?
注意:我不是老师,只是好奇
Answers:
用汇编代码激发新的程序员是很困难的。动态的问候,用户网站更轻松,更轻松。我并不是说基本课程是相同的,但是入门课程将具有大量鼓舞人心的内容,否则将没有第二门课程。
我记得我早期的编程课程是用Scheme讲授的,而令我沮丧的是,我不能轻易地编译成.exe并“运行”程序(我认为MS Visual Basic就是编程的全部)。直到几年后,我才真正掌握了自己一直在使用的强大工具。我认为,如果我首先有一些较实际的东西的早期经验,那我会更欣赏它,并将这些课程更好地掌握。
我认为对于软件工程专业和CS学生来说,这都是一个糟糕的主意,一般来说,对编程而不是电子学感兴趣的任何人。
它可以做,但它并不意味着它应该做。过去,用家用计算机做一些非常酷的事情的方法是首先学习组装。那是因为早期的硬件限制-高级语言还不够强大和不够快。如今,您可以使用更高级的语言在更短的时间内完成更酷的工作。
听起来更有趣的是,为一个简单的游戏编写一个快速的原型,玩弄算法上的变化,或者在寄存器和低级内容中苦苦挣扎?
我认为这不是一个糟糕的主意,但是您要给这些学生做一个程序有多复杂?组装需要做很多工作。一旦他们对在较低层次上的工作有所赞赏,就可以从最基础的内容开始,然后将它们转移到更容易使用的地方。初学者有时会在脑海中产生想法,他们将编写下一个Halo,MS Office或AutoCAD或类似的东西,而当他们看到用一种简单的汇编语言进行的工作量很大时,他们可能会被吓跑,所以要弄清楚有比组装更好的东西,一旦他们看到了概念,就将它们转移到那。您也可以尝试与C之类的东西同时进行assemlby教学。
另外,哪种汇编语言?我有点回想起MIPS相对容易使用,并且我认为它可以在仿真器中运行,因此没有危险,即使实际工具可能比现在的机器还好,也不会对实际机器造成问题。
如果操作正确,这可能会很好地工作。请注意...
可以肯定的是,如果人们首先学习汇编,他们就会成为了不起的程序员。
这让我想起了我学会了如何驾驶。我妈妈坚持
在无人驾驶汽车上学习之前,除非您获得信心,然后您才能驾驶我们的手动汽车。
她的理由是她不希望我一次又一次地分心。
将其应用到学习如何编程的过程中,是否有必要一次将所有东西都扔给学习者?他们了解变量是什么,同时了解可以在哪种寄存器中存储多少数据?
超过一半我的课我们失败装配类,这是一组谁,在那个时候,曾经认为自己有知识的编程2年以上的人。
我个人的喜好是,如果我不得不再次学习所有内容,那就是从一种对我尽可能多的语言开始。然后,据我所知,向后过渡到较低级别的语言。
至少对于那些愿意付出额外努力的人来说,这是一个现实的想法吗?
没有
但人们会对机器有很好的了解
为什么这样有利?您能否提供示例或提示,以证明这可能有什么价值?
的优点和缺点?
优点:无。
缺点:
关于标志,状态和寄存器以及复杂的内存寻址方案,I / O设备和DMA,中断,时钟周期和填充物的混乱琐事。这些都无法帮助您理解现代的基于VM的语言和计算。
与实际应用计算机的实际问题解决方法脱节。
与最终用户的离婚以及他们需要解决的实际数据和处理问题。
对机器和虚拟机,编译器和解释器以及构成整个世界的整个乌龟堆的不必要的解释。
他们最终到达的高级语言中有许多详细的“这是'对象'的物理实现”。
它们最终到达的高级语言中有许多详细的“这就是方法函数的分配方式”。
很多“这不适用于80386,但确实适用于80586芯片组”的解释。
许多使ASM程序执行的低级OS API调用看起来似乎可以被某人使用。
第一种编程语言的目的不是掌握芯片组。
第一种编程语言的重点是
了解如何考虑计算。
了解如何进行有用的数据处理。
了解如何完成工作。设计-代码-测试。
如果要负责设计课程,则在第一学期我将同时运行两门课程:asm +基本计算机组织/架构,以及在Scheme中创建的基于SICP的课程。第二学期将围绕Scheme中的数据结构和基本算法进行。
第二年将是为期一年的项目,使用Delphi,C ++或C#中的一个,专注于现代软件设计(OO设计,某些功能设计,软件工程,版本控制等)。
效果应该是在抽象和实践两方面打下坚实的基础,并在第三和第四年进行深入的课程学习。
我曾经参加过计算机科学入门课程,但我认为这是一个坏主意。
话虽如此,我确实认为汇编/计算机硬件应该是非常早期的课程-理想情况下,应该是专业的第一季度。让学生掌握一种高级语言,然后立即进入低级硬件领域,然后再转向数据结构-理想情况下,这是一种需要内存管理的语言。
大会是我的第二语言,仅次于BASIC。但是,当我学习的时候却是另一回事。我的Commodore 64提供了其他语言,但是如果您希望任何事情看起来很快,或者想一次完成一件以上的事情,则需要学习汇编语言以及如何使用中断。为Commodore提供了窗口系统的图形环境操作系统(GEOS)也全部组装在一起。总的来说,这是我见过的最好的汇编API。这也是我使用的唯一可用来设置代码样式的平台。没错,您可以使用斜体和不同的字体大小-事实证明对阅读注释有用。
我从Commodore的工作原理中学到了很多,但是Motorolla芯片的操作码非常简单。保持少于255个操作码彼此分离并不是很困难。我无法将我在Motorolla 6510芯片上的经验与对Intel 8086的编程相提并论。这些芯片和系统体系结构太不同了。我想我在升级到Amiga的Motorolla 68000芯片时也会遇到同样的麻烦。
简而言之,我必须全心不同意任何人说汇编应该是一种很好的母语。原因如下:
如今,汇编语言用于加速某些有限的操作,在这些有限的操作中,手工汇编比编译器生成的汇编要快。应用程序的主要结构是使用C,C ++等高级语言完成的。当然,如果您开始编写编译器,则汇编编程将变得非常重要。我们当中有多少人这样做?
我认为汇编语言只有在您专注于以下方面时才有意义:
如果没有对此领域的关注,这只是一种简单的语言,往往会教会不良的组织习惯。工具包中的机器级编码是很好的工具,它可以了解事物的工作原理,但这不是一种很好的第一语言。
我会引起对高级语言感兴趣的人。然后教C ++;然后进行汇编,重点介绍C ++编译器如何生成汇编代码。理解v表和其他高级语言功能将大大帮助开发人员思考语言的真正工作方式,而不仅仅是在“魔术”下提交信息。