Очень небольшие программы для улучшения навыков программирования?

Я понимаю, что для того, чтобы стать лучшим программистом, вам нужно запрограммировать! Так что, очевидно, чем больше практики, тем лучше вы становитесь.

Моя проблема в этом. Я в настоящее время в университете, и я считаю, что моя загрузка курса немного сложна, и у меня нет свободного времени. Я не думаю, что могу действительно взять на себя большой проект, особенно я не думаю, что мне нужно было бы позаботиться о его прохождении, мне было бы легче оставить его в пользу работы, которая должна школа.

Но я все еще хочу практиковать. Поэтому я ищу любые ресурсы, у которых есть проблемы с программированием, которые могут быть завершены за довольно небольшой промежуток времени. В идеале, что-то, что я мог бы сделать за 10 часов работы (так что чуть больше часа работы каждый день), если не меньше.

Я слышал о Google Code Jam, но я не уверен в длине программ, которые он задает, ни в уровне навыков.

Есть ли у кого-нибудь предложения? Возможно, полезен сборник учебных пособий для разных функций. Например, учебник по файлу IO был бы полезен (если бы я этого не знал), хотя это может быть довольно небольшая тема.

Ответ 1

Вы должны изучить код katas, они делают именно то, о чем вы говорите. Короткие упражнения, которые предназначены для совершенствования ваших способностей к кодированию/разуму.

Другие ссылки:

Ответ 2

Project Euler имеет некоторые проблемы, связанные с математикой/числом, которые очень интересны и варьируются от простого до очень сложного. Вы можете выбрать свой язык по выбору и представить только решение (большое целое число). После того как вы отправили правильное решение, у вас есть доступ к странице форума/комментария, где другие разместили свои комментарии и решения.

Ответ 3

Из опыта я рекомендую найти задачу, которую вы повторяете, и превратить ее в программу. Я также рекомендую, серьезно, изобретать колесо, чтобы тренироваться с программированием. Не позволяйте людям говорить вам, чтобы вы не делали что-то только потому, что он уже существует. Если вы не знаете, как это работает, попробуйте написать его самостоятельно.

Я точно не знаю, на каком уровне программирования вы находитесь, но не пытайтесь делать что-то слишком сумасшедшее с места в карьер, это просто демотиватор (например, попытка написать игру для PS3).

Если вы уже можете перемещаться с помощью ввода-вывода, то вам следует попытаться научиться эффективно использовать Коллекции. Я думаю, что одно из лучших заданий, которые я когда-либо делал, - это переписать класс Java TreeMap. Это был огромный вызов, и я многому научился, сделав это.


Вот несколько предложений для практических заданий:

Возьмите текстовый файл с большим количеством информации в нем, возьмите что-нибудь, вы можете получить что-то отсюда, если хотите: http://www.gutenberg.org/ и создайте программу, которая будет выполнять следующие действия:

  • Читайте в файле
  • Создайте коллекцию слов и их вхождений
  • Создать коллекцию анаграмм
  • Создайте набор слов и позиции, в которых они встречаются (строка #, позиция слова)
  • Разрабатывать статистику по словам в файле - значит - обрабатывать каждое слово как отдельное лицо - какие слова встречаются перед ним и после него.
  • Удалите все пустое пространство из файла
  • Запишите все вышеперечисленные данные в свои собственные файлы.

Одна из моих любимых вещей - беспорядок с веб-данными, перейдите на сайт опроса, найдите страницу с данными опроса в табличной форме и выполните следующие действия:

  • Загрузка данных
  • Проанализируйте данные и превратите табличные данные в файл CSV
  • Откройте его в excel без ошибок

Или просто найдите любой сайт и извлеките из него данные, просто убедитесь, что сайт является дружественным к роботу http://www.robotstxt.org/, вы не хотите, чтобы какой-либо сайт чувствовал, что он находится под атакой. Большую часть времени, хотя это обычно не проблема, потому что, если вы читаете условия использования сайта, он четко заявляет, что вам разрешено загружать 1 копию того, что вы просматриваете, пока вы не собираетесь ее продавать. Конечно, это меняется для каждого сайта.


Перейдите на сайт и программно соедините все ссылки с страницы.


Вот забавная, программа Susan (я не помню, почему она называется Susan), которую я изначально написал, используя программу C и два сценария оболочки Bourne в среде Unix. Идея в этой программе состоит в том, чтобы развить 4 дочерних процесса и дать им каждую задачу следующим образом:

Ребенок 1: Читает в файле, создает словарь каждого слова и его позицию в файле, это выводится в файл.

Ребенок 2: принимает Child 1 и реконструирует документ, который выводится в файл.

Ребенок 3: принимает результат 2 ребенка и делает то, что ребенок 1 сделал снова

Ребенок 4: принимает результат 3 ребенка и делает то, что ребенок 2 сделал снова

Цель состоит в том, чтобы иметь точную копию исходного файла, когда Child 4 выводит его. Это непросто и несколько бессмысленно, но суть этого упражнения - получить практику.

В вашем случае не чувствуйте, что для этого вам нужно использовать разные потоки, вы можете просто использовать одну программу с двумя различными функциями и просто вызвать их по порядку.


Опять же, не уверен, что вы еще на этом уровне, но попробуйте заменить любой цикл "for" или "foreach", который у вас есть в вашей программе с рекурсией, так же, как и практика. Рекурсия - это боль в прикладе, но это важно знать и понимать.

Вот некоторые предложения, которые, я думаю, действительно помогут вам обострить ваши навыки.

Enjoy

Ответ 4

Мне нравится SPOJ и Project Euler, чтобы выполнять быстрые задачи программирования и упражнения.

Ответ 5

Code Jam - хороший конкурс программирования, хотя, как вы уже упоминали, большинство проблем не для новичков.

Там есть хороший выбор проблем из прошлых конкурсов алгоритмов topcoder. (Они проводятся ~ 2 раза в месяц уже почти 10 лет, так что их довольно много.)
Трудности варьируются от очень простых (но все же интересных) проблем во 2-м дивизионе очень сложно. Кроме того, есть редакционные статьи с решениями и живой средой, где вы можете отправить и протестировать свой код. Вы также можете учиться на материалах других людей.

Отметьте список проблем.
Другим преимуществом topcoder является то, что онлайн-конкурсы проводятся регулярно. Я считаю, что конкурировать с другими людьми в реальном времени - отличный стимул для мотивации.

Есть еще много проблемных архивов, таких как SPOJ, UVA и Timus, хотя они редко предоставляют решения или даже подсказки.

Ответ 6

http://codegolf.stackexchange.com могут иметь некоторые проблемы программирования по вашему вкусу. Многие ответы на этом сайте играют в гольф (они реализуют программу в наименьшем числе символов), но есть определенные интересные примеры, чтобы учиться.

Ответ 7

Попробуйте записаться на любой курс ИТ на следующих веб-сайтах:

Эти веб-сайты предлагают бесплатные образовательные ИТ-программы из престижных школ, в которых есть много сложных упражнений, чтобы повысить ваши навыки программирования. Из-за этого я научился программировать перколяцию, распознавание образов, прыгающий шар и многое другое. Вы загрузите свою программу после завершения упражнений, и вы будете соответствующим образом оценены (в основном ваша прогама будет проверена).

В конце каждого курса вы даже получите сертификат о завершении. Прохладный право?

Ответ 8

Это зависит от языка, но в прошлом http://rubyquiz.com и http://pythonchallenge.com отлично подойдет для меня, также вы можете присоединиться к инициативе с открытым исходным кодом, потому что обычно помогает вам лучше оценить шансы на просмотр кода.

Ответ 9

Я всегда думал, что практиковать с примерами интервью было отличным способом обострить одно умение и получить доступ к типам проблем, которые вы обычно не решали. Кроме того, если вы собираетесь искать работу, это еще больше помогает.

Вот довольно простой, который я сделал для развлечения на днях:

Напишите рутину для печати чисел 1 до 100 и обратно до 1 снова без используя любые циклы.

В Glassdoor.com есть много хорошего вопроса о собеседовании, представленном людьми, которые действительно получили их в интервью.

Ответ 10

Поскольку вы находитесь в университете и хотите улучшить свои навыки кодирования, книга с тетради "Cracking the Coding Interview" может быть вам подходит, Он получил большие общие вопросы программирования и лакомые кусочки о собеседовании с некоторыми из лучших компаний в области технологий. Мало того, что есть большие вопросы, но есть и достойные проблемы.

[Раскрытие: Я владею книгой, но в противном случае не имею к ней никакой связи.]

Ответ 11

Если вам нравится программирование и вы хотите улучшить свои навыки программиста, вы должны попробовать cocode.co. Это социальный молодой сайт, похожий на StackOverflow, но основанный на публикации и решении проблем программирования вместо того, чтобы задавать вопросы и отвечать на них. От очень простых проблем до очень сложных.

http://cocode.co

Ответ 12

Вы можете попытаться решить проблемы ACM. Там тысячи проблем, и вы можете найти уровень сложности, чтобы вы могли выбрать, какие проблемы делать в первую очередь. Относительный сайт для этого:

http://uva.onlinejudge.org/. Вы можете узнать больше там.

С уважением Арефин

Ответ 13

Это может показаться немного очевидным, но в последнее время я заметил реальный импульс в своих навыках регулярного выражения, просто отвечая на вопросы регулярного выражения в Stack Overflow. Преподавание заставляет вас разбивать проблемы на легко объясняемые части, а также будет направлять ваши исследования в тех случаях, когда вы знаете больше всего, но не совсем всех, о решении.

Я предлагаю найти тему, в которой вы уже несколько разбираетесь, поскольку этот тип вещей не так хорош, как учебник для начинающих. Найдите SO для вопросов, помеченных этой темой, и попытайтесь выяснить ответы. Не просто кодируйте их в голове; идти вперед и записывать их, проверять их и объяснять. Если вы не уверены, что ваш ответ правильный, просто напишите его, не публикуя его.