На моих семинарах по кодированию часто возникает вопрос: «Что теперь?». Это часто исходит от кого-то, у кого за плечами несколько онлайн-курсов и книг. Обычно они имеют общее представление о языке, но не уверены в специфике синтаксиса. Другими словами, отсутствие свободного владения языком сдерживает их.

Вот два ответа на вопрос «что теперь».

Первый – «работать над чем-то». Найдите личный проект, внесите свой вклад в что-то. Конкретизируйте свой профиль на github.

Другой ответ касается того, что часто удерживает этих людей от работы над проектами и от получения работы на этом языке. Им не хватает беглости, которая приходит от большого количества практики. Расширенная практика в языке программирования развивает беглость речи так же, как практика игры на музыкальном инструменте развивает виртуозность. Принципы игры на фортепиано, вероятно, можно объяснить вам за день, но если вы хотите играть как Лян Лян, вам лучше быть готовым практиковаться до крови!

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



CodeWars — это сайт с тысячами тренировочных задач (называемых ката как упражнения в боевых искусствах) на нескольких десятках языков. Это займет вас на некоторое время. Уровень сложности варьируется от тривиального до очень сложного.



Exercism.io — хороший способ попрактиковаться в дизайне через тестирование (TDD). Вы загружаете клиент, который получает тесты для каждой из задач. Вы строите свой код в соответствии с функциональными требованиями и в процессе проходите различные тестовые случаи. Распространенным источником разочарования здесь являются изменения в коде, которые проходят одни тесты и ломают другие. В то время как упражнения на CodeWars, как правило, небольшие, они намного длиннее. Несколько лет назад об упражнениях писали в статье Wired.



HackerRank — этот сайт более открыто направлен на то, чтобы его заметили потенциальные работодатели. Некоторые мероприятия здесь спонсируются компанией. По большому счету формат похож на CodeWars.



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



Наконец, мы должны упомянуть D ailyProgrammer, Reddit, который еженедельно публикует задачи по программированию (в трех уровнях сложности) и где люди обсуждают решения на разных языках.

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

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



Одним из сайтов, который хорошо воспроизводит условия интервью, является Pramp.com. Он объединяет вас с другим человеком, и вы по очереди просите друг друга решить проблему вслух, как на реальном собеседовании. Каждый раз, когда вы записываетесь на пробное собеседование, вы будете задавать своим партнерам одну и ту же проблему, а это значит, что через некоторое время вы знаете ее наизнанку и умеете давать им подсказки, когда это необходимо.



Еще один хороший сайт для практики интервьюирования — interviewing.io. Это похоже на Pramp, за исключением того, что здесь интервьюеры из технологических компаний. Дополнительным бонусом является то, что если вы действительно хорошо справляетесь с собеседованиями, вас могут пригласить на собеседование в одну из этих компаний по-настоящему.

Одна из ключевых вещей, которую вы должны будете сделать во время таких интервью, — это сравнить различные потенциальные решения и оценить их влияние в памяти и времени. Этот след описывается с помощью нотации большой O.

Несколько ресурсов, которые помогут вам понять это, — это несколько видео FreeCodeCamp (одно о основной идее, а другое с некоторыми примерами).

Также есть (бесплатный) курс Udacity по подготовке к техническим собеседованиям.



Эти ресурсы должны занять вас на некоторое время. Делайте понемногу каждый день, и вы далеко продвинетесь.