对于初级程序员来说,什么是“真正的”编程示例?

时间:2009-02-11 06:28:26

标签: parsing expression math

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

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

这是一个非常有趣的例子,虽然对很多初学者来说可能是复杂的一面。

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

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

10 个答案:

答案 0 :(得分:5)

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

当然,并非所有人都认为游戏比计算器更有趣。这真的取决于程序员。

答案 1 :(得分:4)

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

如果您想了解编程,您需要找到一个能够让您理解的域名。找到可以通过编程解决的挑战。

当他们提出你感兴趣的内容时,我同意其他人的看法。游戏似乎是一个共同点。当我反思我学习编程的经验(太多年前)时,涉及数学问题和一个简单的游戏。

然而,在我创建一个有用的小程序帮助业务人员解决实际问题之前,我认为我并不真正了解软件的强大功能。因为我有一个“客户”,所以我有很大的动力。我没有得到报酬,但客户需要这个程序。与这种情况有关的真诚的痛苦(要让我的工作更快完成)。

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

我最好的早期作品之一就是帮助一家小型印刷厂(大约在1985年没有软件),他们在估算工作岗位方面做出了艰苦的努力,以制定出不是亏钱者的建议。我问了很多关于销售小姐和运营经理的问题。显然有一个共同的痛点和一个非常简单的计算的交叉点,我可以自动化。我花了几天时间学习Lotus 1-2-3(电子表格适合你年轻人)足以编写一些宏。我很有动力。我有激情。我看到了哪里可以有所作为。而且,最重要的是,让我学习一些简单的编程。

拥有真实的人,真正的问题和非常简单的解决方案可能是您作为初学程序员所需要的灵感。不要试图写一个会计系统。只需要把一个人的沮丧情绪带走。你可以在这方面取得成功。

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

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

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

祝你好运。

答案 2 :(得分:2)

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

答案 3 :(得分:1)

棋盘游戏设计和编码很有趣,因为它们有很多形状和难度

从tic-tac-toe到跳棋到垄断,它为教育目的重新发明轮子!

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

答案 4 :(得分:0)

从小处开始。做你感兴趣的例子。每次都伸展自己一点点。每走一步都要感到舒服,以至于你有信心知道自己在做什么,然后在下次尝试更难的事情。

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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

类似于算术表达式求值程序的一个好处是它是一个可以启动非常小的项目(使其仅使用格式“X SYMBOL Y”,其中X和Y是单位数字,SYMBOL必须是加号)然后你慢慢地将功能扩展到一个复杂系统的位置。

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

尝试考虑在重复的计算机上执行的操作,并且可以轻松实现自动化。然后尝试提出如何制作一个程序,为您自动执行该任务。它可以是任何东西,无论是每15分钟弹出一次提醒,还是伸展你的腿或定期清理你的临时目录。

答案 7 :(得分:0)

这项任务的问题在于它是复杂的而不是与生活有关的。我不需要另一个计算器。

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

答案 8 :(得分:0)

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

我希望看到一个真实的例子,而不仅仅是很多简单的“Hello World”程序。

答案 9 :(得分:0)

我一直认为,实施某种游戏是学习语言各种功能的充分动力。特别是纸牌游戏,因为它们通常具有简单的规则集来实现,但从抽象的角度来看足够复杂。

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