非常小的程序来提高编程技能?
我意识到要成为一个更好的程序员,你需要编程! 所以显然练习越多,你就越好。
我的问题是这个。 我目前在大学,我觉得我的课程负担有点令人生畏,而且我没有很多空闲时间。 我不认为我真的可以承担一个大项目,特别是我不认为我必须有动力去完成这个项目,只是为了继续推迟工作,学校。
但我仍然想练习。 所以我正在寻找可以在相当短的时间内完成编程挑战的任何资源。 理想情况下,我可以在10小时的工作时间内完成工作(所以每天工作只需一个多小时),如果不是更小的话。
我听说过Google Code Jam,但是我不确定它指定的程序的长度,也不知道它的技能水平。
有没有人有build议? 甚至可能是一个教程不同function的纲要可能是有用的。 例如,一个关于文件IO的教程是值得的(如果我还不知道的话),尽pipe它可能是一个相当小的话题。
你应该看看代码卡塔斯 ,他们正是你所说的。 简短的练习,旨在完善您的编码/ thining能力。
其他参考:
欧拉项目有一些math/数字相关的问题,非常有趣,从容易到非常具有挑战性。 你可以select你所select的语言,只提交解决scheme(一个大的整数)。 提交正确的解决scheme后,您可以访问论坛/评论页面,其他人发表评论和解决scheme。
从经验中,我build议find一个重复的任务,把它变成一个程序。 我也推荐,认真地重新发明轮子,以便练习编程。 不要让别人告诉你不要因为它已经存在而做某些事情。 如果你不知道它是如何工作的,请尝试自己写。
我不完全知道你的编程水平,但不要试图做任何太过疯狂的事情,那只是一个狂热者(比如试图为PS3写游戏)。
如果你已经可以用IO导航,那么你应该尝试真正学习如何有效地使用集合。 我认为我所做的最好的做法之一是重写Java TreeMap Class。 这是一个巨大的挑战,我从中学到了很多东西。
以下是练习作业的一些build议:
以一个文本文件,其中有相当数量的信息,抓住任何东西,你可以从这里得到的东西,如果你想: http : //www.gutenberg.org/,并做一个程序,将执行以下操作:
- 阅读文件
- 创build一个单词集合和它们的出现次数
- 创build一个anagrams的集合
- 创build单词集合及其出现的位置(行号,单词位置)
- 开发文件中的单词的统计数据 – 意思是把每个单词作为一个个体来对待 – 哪些单词出现在它之前和之后。
- 删除文件中的所有空格
- 将所有上述数据写入自己的文件
我最喜欢做的事情之一是乱七八糟的networking数据,去投票的网站,find一个页面,以表格forms轮询数据,并执行以下操作:
- 下载数据
- 通过数据parsing并将表格数据转换为CSV文件
- 在Excel中打开它没有错误
或者只是寻找任何网站,并从中提取数据,只要确保该网站是机器人友好http://www.robotstxt.org/ ,你不希望任何一个网站感到受到攻击。 大多数情况下,这通常不是问题,因为如果您阅读网站的使用条款,则明确指出,只要您不打算出售,您就可以下载任何正在查看的任何副本。 当然,每个站点都会改变。
转到一个网站,以编程方式获取页面上的所有链接。
这是一个有趣的,苏珊计划(我不记得为什么它被命名为苏珊),我最初使用C程序和两个Bourne shell脚本在Unix环境中编写。 在这个程序中的想法是分叉4个subprocess,并给他们每个任务像这样:
孩子1:读入一个文件,创build每个单词的字典及其在文件中的位置,这被输出到一个文件。
孩子2:接受孩子1的输出并重build文档,这被输出到一个文件。
孩子3:接受孩子2的输出,然后再做孩子1
孩子4:接受孩子3的输出,然后再做孩子2
这里的目标是一旦Child 4输出它就有一个原始文件的完全复制品。 这是有挑战性的,有些没有意义,但是这个练习的重点在于练习。
在你的情况下,不要觉得你需要使用不同的线程,你可以使用一个具有两个不同function的程序,只需要按顺序调用它们。
再一次,不知道你是否处于这个级别,但是尝试用recursionreplace程序中的“for”或“foreach”循环,就像练习一样。 recursion是一个痛苦的屁股,但知道和理解是有价值的。
这些是我认为能够帮助你提高技能的一些build议。
请享用
我喜欢SPOJ和欧拉项目 ,快速编程挑战和练习。
Code Jam是一个很好的编程竞赛,不过,正如你所提到的,那里的大部分问题都不适合初学者。
过去的topcoderalgorithm竞赛有很多问题。 (他们每月举行两次,已经有近10年了,所以还有很多。)
第二师的难度范围非常简单 (但仍然有趣),非常困难。 此外,还有社论提供解决scheme和现场环境,您可以提交和testing您的代码。 你也可以从其他人的意见中学习。
检查问题列表 。
topcoder的另一个优势是他们持有的常规在线竞赛。 我发现,与其他人实时竞争对动机是一个很大的提升。
还有更多的问题档案,如SPOJ , UVA和Timus ,虽然他们很less提供解决scheme,甚至暗示。
http://codegolf.stackexchange.com可能会有一些编程挑战,你喜欢。; 网站上的很多答案都是打高尔夫的(他们用最less的字符来实现这个程序),但肯定有一些有趣的例子可以学习。
尝试在以下网站上注册任何IT课程:
- Coursera
- EDX
- Udacity
这些网站提供从知名学校免费教育信息技术课程,其中有很多具有挑战性的练习,以提高您的编程技能。 我已经学会了编程渗滤,模式识别,弹跳球以及更多有趣的东西。 您将在完成练习后上传程序,并将相应地进行评分(基本上,您的程序将被检查)。
在每门课程结束时,您甚至会收到完成证书。 很酷吗?
这取决于语言,但在过去的http://rubyquiz.com和http://pythonchallenge.com对我来说确实很棒,你也可以join到一个开源的计划中,因为这通常会帮助你更好的阅读代码。;
我一直认为用抽样面试的问题来练习是提高自己的技能并接触到你通常无法解决的问题的好方法。 另外,如果你打算找工作,那么它会帮助你更多。
这是我前几天做的一个很简单的:
编写一个例程来打印数字1到100,并再次回到1,而不使用任何循环。
Glassdoor.com有很多很好的面试问题的人提出的,他们实际上在接受采访。
由于你在大学,并希望提高你的编码技能, 打印编码面试的硬拷贝书可能是一个很好的适合你。 这里有很多一般的编程问题和关于与一些最好的科技公司面谈的花絮。 不仅有很多问题,还有不错的问题分解。
[披露:我拥有这本书,但没有任何关联。]
如果你喜欢编程,并想提高你的程序员的技能,你必须尝试cocode.co 。 这是一个社交年轻网站,类似于StackOverflow,但基于发布和解决编程挑战,而不是问及回答问题。 从非常容易的挑战到非常困难的挑战。
您可以尝试解决ACM问题。 有成千上万的问题,你可以find难度级别,所以你可以select首先要做的问题。 这个官方网站是:
http://uva.onlinejudge.org/ 。 你可以在那里了解更多。
问候arefin
这似乎有点显而易见,但是我刚刚注意到我的正则expression式技巧最近刚刚从回答Stack Overflow的正则expression式问题中得到了真正的提升。 教学迫使你把问题分解成容易解释的部分,并且还将指导你在那些你知道最多,但不是全部解决scheme的场合进行研究。
我build议找一个你已经有点熟练的话题了,因为这种types的东西不像初学者的教程那么好。 search标有该主题的问题,并尝试找出答案。 不要只把它们编码在你的头上, 继续写下来,testing它们,并解释它们。 如果您不确定您的答案是否正确,只需将其写入即可。