在某些特定方面,初学编程很简单。一切都是新鲜而令人兴奋的;你每天都在学习至少十个新知识;你轻松地完成各种编码练习。 随着时间的推移,你会从初学者变成高级初学者。你会意识到,生活不仅仅是一些简单的小难题,即使这些难题有时变得复杂。你开始寻找更大的练习项目,但总是发现项目要么太大要么太小,要么太难要么太简单。你开始感到挫败,觉得自己在努力的过程中遇到了重重障碍。
民间智慧说,进步的最佳方式是进行项目,这个说法是正确的。但应该选择哪些项目呢?进一步的民间智慧建议,从解决自己的问题入手,比如创建一个食谱计划器或锻炼跟踪器。但如果你唯一的问题是还不够熟练呢?即使你找到一个可行的项目想法,也很难判断它是否合适。面部识别是否困难?绘制Google Maps上的自行车路线呢?最后,即使你找到一个有吸引力且合适的项目,还是可能完全卡住。这些挑战会随着经验增加而变得容易,但当你还没有足够经验时,这些问题就显得尤为棘手。
高级初学者的编程项目
为了帮助你渡过难关,我写了一系列博客,名为高级初学者的编程项目。这些是引导项目,你将编写复杂的程序来玩游戏、绘画和运行人工智能。这个系列的主要目标是在引导你前进和让你自己探索之间找到平衡。项目可以用任何编程语言完成,人们已经向我发送了他们用C++、Ruby、Java和Python编写的版本。
每个项目的前半部分被分解成小的阶段。在每个阶段的开始,我们讨论我们想要实现的目标;为什么要实现它;以及如何测试我们所做的是否正确。然后你自己完成这个阶段的编程,尽管我写了参考代码,如果你完全卡住可以参考。在项目的前半部分结束时,你将建立一个功能齐全的核心系统,它可以生成ASCII艺术图像、玩井字棋或运行生命游戏。
后半部分是你独自完成,有一些建议、一份午餐和提醒你小心的提示。到这时,你已经非常熟悉项目的环境,感谢我们在前半部分所做的所有工作。你将能够在这个基础上构建各种扩展。不久之后,你将会提出自己的扩展和项目,到那时你就不再需要我了。
这些项目几乎不使用外部库,这意味着你不需要进行繁琐的故障排除或浏览那些没有教你编程原则的深奥文档。故障排除和浏览不幸仍然是你需要在某个时候培养的技能,但它们不是激发灵感和创造力的方式。这些可以稍后再学。
项目注重方法学——将工作分解成可管理的部分,并在进行的过程中测试每个部分。我们会谈论设计模式和技术,比如模块化、接口、单元测试和缓存,但目的是让你大致了解它们的存在,而不是详述细节。我们的重点是编写能够工作的代码,对它感到满意,然后再回头看看是否可以整理任何东西。
项目
到目前为止,我已经写了6个高级初学者的编程项目,还有几个正在准备中。
1. ASCII Art
用ASCII字符画画。将你的代码连接到你的网络摄像头。
2. Game of Life
运行迷人的康威生命游戏。构建美丽的模式,如Gosper滑翔机枪,并发明自己的细胞自动机。
3. 无敌的井字棋AI
构建一个命令行井字棋游戏,然后使用Minimax算法将其转变为无敌的井字棋AI。
4. Photomosaics
用其他图片画画。学习如何使用缓存和预计算加速代码。
5. 贪吃蛇
构建经典游戏“贪吃蛇”的命令行版本。将其转换为多人Tron游戏。
6. 用户登录
从绝对基础开始,学习现实世界公司如何认证其用户并安全地将密码存储在数据库中。
7. 新推出...高级初学者的编程视频
细致入微、一步一步的PPAB方法登上大屏幕。我们制作了一个终端版本的棋盘游戏“战舰”,并且非常愉快地完成了它。
行动
选择你最感兴趣的项目,试一试。无论你是以疯狂的激情完成它,还是在模棱两可的句子上绊倒并放弃,请让我知道(通过电子邮件或Twitter)。如果任何部分不清楚,我会为你澄清,并利用你的反馈改进项目,如果你已经完成了所有项目,那么我会知道我真的应该赶紧发布项目#6。
祝你好运!