我能写哪些类型的程序来加强/提高我早期技能水平?

4
我即将结束我的编程入门课程,我们正在使用Java,并且到目前为止一直在做命令行程序,没有 GUI,我相当喜欢。到目前为止,在课堂上编程作业有一定的挑战性,但让我希望更多。当我感到无聊时,我想写程序,但总是很难想出该写什么。
我想知道是否有人有任何好的建议,可以在我目前的开发阶段中写出我可以编写或处理的程序,以挑战我并帮助巩固我在课堂上学习的概念。这门课也不是太快进,到目前为止,我们只涵盖了类和对象的内容(尽管还未涉及继承或多态),现在正在使用数组进行操作。由于之前自学过一些,我对我们在课堂上所学的所有内容都感到很舒适。
如果有任何可以让我忙碌起来的事情的建议,将不胜感激。
16个回答

9
我推荐使用欧拉计划。这是一个锻炼你思维的好方法,用一个不熟悉的语言实现解决方案是学习该语言的好方法。

非常好的建议,看起来有很多可以努力的地方。 - David Barry
Project Euler非常好,问题的范围从基本上将问题翻译成代码一直到相当困难的数学问题。 - Jonno_FTW

5
我建议寻找编程卡塔(例如这些)或编程测验。它们通常足够小以作为练习,并具有足够的挑战性,提供学习经验。
此外,尝试阅读代码。找到一个与您感兴趣的问题域相关的开源项目,查看其他人编写的代码。

4

使用GUI编写井字棋游戏


尝试让AI无法被打败(无论如何都能赢或平局),首先在3 X 3上,然后在4 X 4上。这将是一个很好的编程和问题解决活动。 - Jonno_FTW
你可能想先制作一个双人版本。这样写起来会更容易,之后你可以将代码升级为单人模式,在那里你可以让AI无法被打败。 - inspectorG4dget

3
这可能是一个很大的进步,但如果您熟悉数组,请尝试查看一些数据结构,它们非常有用,可以帮助您理解Java概念。
我的一些Java中级项目:
  • 使用Swing框架设计简单的形状
  • 使用FileReader读取文件内容
  • 使用Scanner函数通过控制台接收用户输入

Swing API 有时候很难处理,所以如果一开始不理解,不要灰心丧气。 - inspectorG4dget

3
您可以寻找一个有趣的开源项目,需要协助,并提出您的帮助建议。

帮助可能包括编写文档,因为只有当您理解代码时才能编写出_好的_文档。 - Thorbjørn Ravn Andersen

3
你可能想尝试一种新的编程语言。在学完Java之后,你可以通过尝试C(然后再尝试C++)来降低难度,或者通过尝试Python来提高能力。(如果你喜欢的话也可以尝试Ruby或LISP/Scheme。)
如果你想尝试一种新的语言,首先要找一本教授该语言并带有练习的好书。尝试做这些练习,看看它们是否能激发你做出新的东西。
一旦你学会了Python的基础知识,你可以使用PyGame库编写一些简单的游戏。如果你这样做,你可能需要购买Beginning Game Development with Python and Pygame: From Novice to Professional这本书。
一旦你的游戏运行起来,一定要通过将其放在Github或其他代码共享网站上与世界分享!(一旦你有了一个可用的游戏并分享了它,可能会有人受到启发,将新功能添加到它上面。最终,你的游戏可能会变成一款大作品!)

或者,你可以查看其他人编写的游戏,看看是否受到启发,添加新功能。在PyGame网站上有数十个游戏,处于不同的完成阶段。

P.S. 是的,我在推广Python。我喜欢基本语言的简洁性和高级特性的强大功能。你可以使用Python编写从微不足道的系统管理脚本到高级AI的所有内容。还有其他好的语言,我不想在这里引发语言之争,所以如果你想学习其他东西,那也没问题。

我强烈鼓励你通过编写程序来学习,并强烈建议你尝试不同的语言。我发现,即使是C这种相对原始的语言,在Python中学到的东西也使我成为了一个更好的程序员。经过多年的C语言开发经验,我没有预料到一种执行速度较慢的高级语言会教我很酷的东西,但它确实做到了。


Python是我在上课之前玩得最多的语言,学习Java之后,我应该回去再玩一下。至于下个学期学习新语言,我将参加第二个入门编程课程,继续学习Java,并且我还将学习C/C++编程,所以我期待着同时使用几种语言进行编程。 - David Barry
Python、C/C++、Lisp 和 Perl 可以是拓宽知识的好选择。 - artdanil
如果你想尝试Lisp/Scheme,请获取《The Little Schemer》一书的副本,并完成所有练习。http://mitpress.mit.edu/catalog/item/default.asp?ttype=2&tid=4825 - steveha
请注意,LISP和Scheme是函数式编程语言,因此与面向对象/过程化语言(如Java、Python和C/C++)非常不同。 - inspectorG4dget
这就是为什么我说“即使是”LISP/Scheme,因为它们更加“离经叛道”。但是如果你学会了它们,它们会给你带来宝贵的新视角。Python的一个很棒的特点是:它包含了函数式编程和面向对象编程两方面的内容。你可以从易于入手、类似于Java的内容开始学起,然后逐渐扩展。 - steveha

2
  1. 尝试一个新项目。可以是任何你感兴趣的东西,例如:小游戏、简单音乐播放器、基本图片浏览器/编辑器、简单的网络应用等等。只需选择一个足够小但不太琐碎的项目。这将帮助您更好地了解该语言及其库。

  2. 尝试解决一些简单的问题,如在 SPOJTopCoderProject Euler 等网站上的问题。除了编程实践外,做这些问题有助于更深入地理解和欣赏问题解决和计算机科学的普遍性。

  3. 找一本关于算法和数据结构的好书。CLRS 是我最喜欢的,但实际上任何一本好书都可以。


1
编写一个简单的游戏,如纸牌、迷宫等,是许多开发问题和概念的良好起点。

1

做一些视觉上的东西,会更有趣。创建一个游戏并使用缓动效果。这将迫使您考虑时间、回调和处理用户交互...


1

我最喜欢的编程书籍之一是《Pascal软件工具》。这本书让你实现一些简单的工具,这些工具可以很好地协同工作;基本上,你正在重新发明UNIX的基本命令行工具。

我建议你买一本这本书(亚马逊上说二手书价格从4美元起,包括运费),并尝试用Java重新实现书中的程序。如果你刚刚完成了入门编程课程,你应该能够理解书中的所有内容;你可能不知道如何编写Pascal语言的语法,但你会发现它很容易阅读。

如果你这样做,你将编写匹配字符串、搜索和替换、计算关键字索引和扩展宏等程序。我猜你不必写书中的每个程序,但我希望你至少能通读这本书。

多年前我读过这本书,在“敏捷”实践被编码之前,从中学到了一种有用的敏捷式开发方法。这本书称其为“左角设计”;你从程序的一些有用的微小子集开始,让它工作,然后逐个添加功能,直到完成程序。这本书通过示例向你展示了如何做。

我认为我作为软件开发人员的很多成功都来自于我从这本书中学到的经验教训,我强烈推荐它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接