非常小的程序,以提高编程技巧?

Bla*_*ary 65 c java

我意识到要成为更好的程序员,你需要编程!显然,练习越多,你就越好.

我的问题是这个.我目前在大学,我发现我的课程负担有点令人生畏,而且我没有很多空闲时间.我认为我不能真正承担一个大项目,特别是我认为我不会有动力去看它,我会更容易继续推迟,以支持应有的工作.学校.

但我还是想练习.所以我正在寻找任何可以在相当短的时间内完成编程挑战的资源.理想情况下,我可以在不到10小时的工作时间内完成这项工作(每天工作超过一小时),如果不是更小的话.

我听说过Google Code Jam,但我不确定它指定的程序的长度,也不确定技能水平.

有没有人有建议?甚至可能有关不同功能的教程纲要可能也很有用.例如,关于文件IO的教程是值得的(如果我还不知道的话),即使它可能是一个相当小的主题.

Nix*_*Nix 33

你应该研究代码katas,它们正是你所说的.简短的练习旨在完善您的编码/思考能力.

其他参考:

  1. http://kata.coderdojo.com/wiki/Overview_of_Learning_Resources


sch*_*der 20

项目欧拉有一些非常有趣的数学/数字相关问题,从容易到非常具有挑战性.您可以选择您选择的语言并仅提交解决方案(大整数).提交正确的解决方案后,您可以访问论坛/评论页面,其他人发布了他们的评论和解决方案.


dys*_*oko 17

根据经验,我建议您重复执行一项任务并将其转换为程序.我还建议,严肃地说,重新发明轮子,以便进行编程练习.不要让人们因为它已经存在而告诉你不要做某事.如果您不知道它是如何工作的,请尝试自己编写.

我并不完全知道你所处的编程水平,但是不要尝试做任何过于疯狂的事情,这只是一个消极因素(比如试图为PS3编写游戏).

如果您已经可以使用IO导航,那么您应该尝试真正学习如何有效地使用集合.我认为我做过的最好的练习之一是重写Java TreeMap类.这是一个巨大的挑战,我通过这样做学到了很多东西.


以下是练习作业的一些建议:

获取一个包含大量信息的文本文件,抓取任何内容,如果您愿意,可以从这里获取一些内容:http://www.gutenberg.org/并制作一个程序来执行以下操作:

  1. 读入文件
  2. 创建单词及其出现的集合
  3. 创建一组字谜
  4. 创建单词集合及其出现位置(行#,单词位置)
  5. 开发文件中单词的统计数据 - 意思是 - 将每个单词视为个体 - 在单词之前和之后出现.
  6. 从文件中删除所有空格
  7. 将所有上述数据写入自己的文件

我最喜欢做的事情之一就是弄乱网页数据,转到投票网站,找到一个包含表格形式的民意调查数据的页面并执行以下操作:

  1. 下载数据
  2. 解析数据并将表格数据转换为CSV文件
  3. 在Excel中打开它没有错误

或者只是查找任何站点并从中提取数据,只需确保该站点是机器人友好的http://www.robotstxt.org/,您不希望任何一个站点感觉它受到攻击.大多数情况下,这通常不是问题,因为如果您阅读该网站的使用条款,它明确规定您可以下载1份您正在查看的内容,只要您不打算出售它.当然,每个站点都会发生变化.


转到网站并以编程方式从页面中获取所有链接.


这是一个有趣的,Susan程序(我不记得为什么它被命名为Susan),我最初在Unix环境中使用C程序和两个Bourne shell脚本编写.这个程序的想法是分叉4个子进程,并为每个进程提供如下任务:

子1:读入文件,创建每个单词的字典及其在文件中的位置,将其输出到文件中.

子2:获取Child 1的输出并重建文档,将其输出到文件中.

孩子3:接受孩子2的输出并做孩子1再次做的事

孩子4:接受孩子3的输出并做孩子2再次做的事

这里的目标是在Child 4输出它之后获得原始文件的精确副本.这很有挑战性,有点没有意义,但这个练习的目的是为了练习.

在您的情况下,不要觉得您需要使用不同的线程,您可以只使用具有两个不同功能的单个程序,并按顺序调用它们.


再一次,不确定你是否处于这个级别,但尝试用递归替换你的程序中的任何"for"或"foreach"循环,就像练习一样.递归是一个痛苦的屁股,但知道和理解是有价值的.

这些是一些我认为能真正帮助你提高技能的建议.

请享用


Fáb*_*rez 9

我喜欢SPOJProject Euler来快速编程挑战和练习.


Nik*_*bak 5

Code Jam是一个很好的编程竞赛,但正如你所提到的,大多数问题都不适合初学者.

过去的topcoder算法竞赛中存在很多问题.(它们已经持续了大约10年一个月的约2次,所以有很多.)
难度范围从第二师的非常简单(但仍然有趣)的问题到非常困难.此外,还有一些包含解决方案和实时环境的社论,您可以在其中提交和测试代码.您还可以从其他人的提交中学习.

检查问题列表.
topcoder的另一个优点是他们持有的常规在线竞赛.我发现与其他人实时竞争是一种很大的动力.

这里是更多的问题档案,像SPOJ,UVATimus,虽然他们很少提供的解决方案,甚至暗示.


Kev*_*ker 3

http://codegolf.stackexchange.com可能有一些您喜欢的编程挑战。该网站上的很多答案都是打高尔夫球的(他们用最少的字符实现了该程序),但肯定有一些有趣的例子可供学习。

  • 这肯定不是一个好的做法,因为最终的短代码在现实生活中并不是你所需要的,它主要违背所有的编码风格。 (2认同)