0

我一直在浏览 Bjarne Stroustrup 的新的编程入门书籍,Programming: Principles and Practice Using C++。它适用于大学一年级计算机科学和工程专业的学生。

在本书的早期,他通过一个有趣的扩展示例来创建一个桌面计算器,在该示例中,他最终在一系列基于语法的协同递归函数中实现了算术表达式求值器(将括号表达式和运算符优先级考虑在内)。

这是一个非常有趣的例子,尽管对于很多初学者来说可以说是复杂的一面。

我想知道这个特定示例的其他内容:通过了解如何实现表达式解析器来学习编程会激发和激励您,还是会因为所有的细节和复杂性而使您气馁?

对于初学者,还有其他好的“真实”编程示例吗?

4

10 回答 10

5

当我第一次学习编程时,我用过的最好的例子是从头开始构建一个文本冒险游戏。基础知识只需要知道如何在屏幕上显示文本、从键盘接收输入以及基本的流控制。但是由于文本冒险总是有空间添加更多的功能/谜题/任何东西,它们可以很容易地适应探索你正在学习的任何语言的各个方面。

当然,并不是每个人都觉得游戏比计算器更有趣。这真的取决于程序员。

于 2009-02-11T07:17:14.337 回答
4

首先,让我说,认知心理学家已经在许多研究中证明,学习中最重要的因素是求知欲

如果你想学习编程,你需要找到一个能激发你理解欲望的领域。寻找可以通过编程解决的挑战。

当其他人提出你感兴趣的东西时,我同意他们的看法。游戏似乎是一个共同点。当我回顾我学习编程的经历时(很多年前),涉及到数学问题和一个简单的游戏。

但是,直到我创建了一个有用的小程序来帮助业务人员解决实际问题时,我才认为我真正理解了软件的力量。我有一个巨大的动力,因为我有一个“客户”。我没有得到报酬,但客户需要这个程序。与这种情况相关的是真诚的痛苦(我必须更快地完成我的工作)。

所以我的建议是与你认识的人交谈,询问他们有什么小烦恼或与计算机相关的障碍。然后尝试修复它。它可能是一个简单的 Web 小部件,可以减少办公室工作人员的重复性手动任务。

我早期最好的作品之一是帮助一家小印刷厂(大约 1985 年没有软件),该印刷厂在估算工作方面苦苦挣扎,以产生不会亏本的提案。我问了销售女士和运营经理的很多问题。显然,一个共同的痛点与一个我可以自动化的非常简单的计算相交。我花了几天时间来学习 Lotus 1-2-3(适合年轻人的电子表格),足以编写一些宏。我很受鼓舞。我有激情。我看到了我可以有所作为的地方。最重要的是,这促使我学习了一些简单的编程。

拥有真实的人、真实的问题和非常简单的解决方案可能是您作为初级程序员所需的灵感。不要试图编写会计系统。只需将某人的沮丧中的一小部分带走即可。你可以在这个成功的基础上再接再厉。

所以,我不会专注于技术(还)。不要担心,“我这样做是最有效的方式吗?” 初学者的主要目标是取得成功,无论多小,并建立信心。

顺便说一句,Lotus 1-2-3 宏集成长为一个完整的工作跟踪系统。非常古老,功能有限,但让那个小印刷店更有利可图。

创造你的动力,激发你的欲望,培养你对编程的热情,就像艺术家用一团粘土揭开杰作一样。并坚持不懈。遇到障碍时不要放弃。有时我们都会被难住。这些是最好的学习时刻,因为人类从失败中学到的东西多于成功。

祝你好运。

于 2009-02-12T21:03:15.150 回答
2

我认为制作像俄罗斯方块文本版本这样的小游戏将是进入编程世界的好方法。

于 2009-02-11T06:33:06.563 回答
1

棋盘游戏的设计和编码都很有趣,因为它们有多种形式和困难

从井字游戏到跳棋到垄断,它为教育目的重新发明了轮子!

我能想到的最好的建议是从你感兴趣的领域中挑选一些东西,因为为了编码而编码可能会削弱你的决心

于 2009-02-11T07:09:49.657 回答
0

从小处着手。做你感兴趣的例子。每次都稍微伸展一下自己。对每一步都感到舒服,直到你有信心知道自己在做什么,然后下次再努力一点。

于 2009-02-11T06:31:30.937 回答
0

我认为任何示例程序都可以帮助您学习一门新语言,但是初学者应该尝试使用在现实世界中易于理解的东西,例如抵押计算器或类似的东西。

于 2009-02-11T06:32:51.197 回答
0

我认为答案是这取决于正在学习如何编程的人。

像算术表达式求值器这样的东西的一个好处是它是一个可以开始很小的项目(使其仅使用“X SYMBOL Y”格式,其中 X 和 Y 是个位数,SYMBOL 必须是加号) 然后您将功能慢慢扩展到复杂系统的地步。

但是,对于不太了解计算机(硬盘、内存等)概念的人来说,这可能不是一个很好的入门项目。

试着想想你在电脑上做的一些重复性的事情,并且可以很容易地自动化。然后尝试想出如何制作一个为您自动执行该任务的程序。它可以是任何东西,无论是每 15 分钟弹出一个提醒以伸展你的腿,还是定期清理你的临时目录。

于 2009-02-11T06:33:21.663 回答
0

这项任务的问题在于它很复杂,与现实生活无关。我不需要另一个计算器。

但是有一次我有一张 CD,CD 的中心附近有划痕,里面有很多有价值的 JPEG 文件。我从磁盘的未划痕部分转储了数据,但所有文件系统肯定都丢失了。所以我写了一个程序来分析转储并将其分成文件。这不是很简单,但却是一个不错且令人兴奋的文件 IO 编程练习。

于 2009-02-11T06:34:18.277 回答
0

示例可能比您尝试自己编写的内容更复杂。跟随别人做某事比自己做更容易。像这个计算器这样的真实示例可能是向某人介绍一种语言的好方法。例如,Practical Common Lisp 从一个内存数据库(我认为是 CD)的示例开始,并将其用作探索语言部分的跳板。

我更喜欢看到随着时间的推移构建的真实示例,而不是许多简单的“Hello World”程序。

于 2009-02-11T06:36:09.613 回答
0

我一直发现,实现某种游戏足以激励学习语言的各种特性。尤其是纸牌游戏,因为它们通常具有简单的规则集来实现,但从抽象的角度来看却足够复杂。

不过,我同意其他所有人的观点:找到你感兴趣的事物的例子。不是每个人都是游戏迷,但像抵押计算器这样的东西会更有趣。

于 2009-02-12T20:35:17.653 回答