Learning

Новые языки программирования появляются чуть ли не каждый день. Dart, Go, Kotlin, Elixir и многие другие! В таких условиях постоянно учиться непросто, но есть некоторые советы, которые помогут вам.

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

Сначала освойте язык. Потом осваивайте фреймворки.

Некоторые зачастую стремятся сразу изучать такие фреймворки как Ruby on Rails, не познакомившись с языком программирования, в данном случае с Ruby. Это огромная проблема, особенно когда речь идет о Rails, которая является для Ruby его DSL (предметно-ориентированным языком программирования).

Решение трудностей программирования.

Существует множество веб-сайтов, таких как LeetCode, HackerRank и Project Euler, которые могут помочь вам достичь свободного владения языком программирования. Вы узнаете с их помощью многое о синтаксисе, библиотеках и логике. Они являются отличный подспорьем при подготовке к интервью с работодателем.

Постоянно обращайтесь на StackOverflow и Code Review.

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

Решающим аргументом является Code Review, StackExchange-сообщество той же сети StackOverflow. Весь смысл Code Review в возможности получить мнение от экспертов о вашем коде, написанном на изучаемом вами языке программирования. Изучите раздел для начинающих и присоединяйтесь к этому удивительному сообществу!

Недавно я обратился туда за анализом кода, нажмите сюда, если вы хотите увидеть результаты моего обращения.

Просматривайте как можно больше кода.

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

Установите инструмент статического анализа кода.

Linter’ы ‑ это инструменты статического анализа программного кода, которые показывают ошибки, идиоматические и стилистические нарушения и ошибки кодирования, а также многое другое. Инструмент статического анализ укажет вам на ошибку, во время исправления которой вы как раз и учитесь программировать. Для Ruby в качестве linter’а я использую RuboCop.

Пишите код идиоматически.

Когда я взялся за Python, я транслировал на него свое знание C#. Это отличный способ освоить новый язык программирования, но этого все же недостаточно для того, чтобы достичь свободного владения языком, потому что при этом вам остается недоступен идиоматической способ программирования на этом языке.

Чтобы проиллюстрировать суть проблемы, предлагаю вам взглянуть на следующий код на Python (выражаю благодарность Oleksandr Kaleniuk):

def matrix_of_floats(matrix_of_anything):
    n = len(matrix_of_anything)
    n_i = len(matrix_of_anything[0])
    new_matrix_of_floats = []
    for i in xrange(0, n):
        row = []
        for j in xrange(0, n_i):
            row.append(float(matrix_of_anything[i][j]))
        new_matrix_of_floats.append(row)
    return new_matrix_of_floats

по сравнению с питоновским способом (идиоматический Python):

def matrix_of_floats(matrix_of_anything):
    return [[float(a_ij) for a_ij in a_i] 
            for a_i in matrix_of_anything]

Чтобы узнать, как писать код идиоматически, вы должны прочитать много кода, написанного профессионалами.

Примечание переводчика:
Ниже идет перевод небольшой заметки, поясняющей, что такое идиоматическое программирование.
Что такое идеоматическое программирование?
В свое время с совершенно не понимал, что означает фраза «идиоматическое программирование», а найти ответ на этот вопрос в Интернете было практически невозможно. Поэтому я думаю, будет очень полезным для начинающих определить, что такое идиоматическое программирование.
Идиоматическое программирование означает, что ваша программа содержит конструкции, которые уникальны для определенного языка программирования; т.е. вы, фактически, используете в своих программах всю выразительную мощь применяемого вами языка программирования.
Небольшая история
Когда я начал программировать в колледже, я знал только C++. Я использовал его и для учебы и создания игр. Я думал (от чего я сейчас часто смущаюсь, оглядываясь назад), что это единственный язык, который стоит знать. Затем мне пришлось изучить Java, программировать на Visual Basic для выполнения небольших халтур во время летних каникул, для создания приложений и игр на C#, а также баловаться некоторыми веб-языками, например PHP. В то время было здорово изучать новые языки, но я писал на каждом из них, как принято в C++. Это как раз и было не идиоматичное программирование.
Это распространенная ошибка среди программистов (присущая программистам с любым уровнем навыков). Все языки программирования построены на схожих базовых конструкциях (переменных, ветвлениях, циклах, функциях и объектах), и очень легко привыкнуть выражать свои мысли одинаково на разных языках.
То же самое относится и к разговорным языкам. Я изучал польский язык в течение целого семестра, но не смог заговорить на этом языке. Я был хорош в лексике и понимал грамматику, однако польский язык очень идиоматический. Я продолжал пытаться переводить свои мысли с английского на польский, и это в итоге никогда не срабатывало.
И именно в этом и заключается красота функциональных языков программирования, таких как Lisp и Haskell. Они вынуждают вас принять свой способ выражения мыслей. Сначала это сложно; но это не только вызов для вас – выразительная сила позволяет достичь удивительного уровня лаконичности ваших программ.
Советую вам для освоения идиоматичного стиля программирования изучить все аспекты используемого вами языка, найти его уникальные конструкций.
Всегда легко остановить на первой версии реализации, но для собственного развития стоит пересмотреть свои программы, чтобы сделать их более идиоматичными.

Создайте что-нибудь!

Это действительно здорово. Основная цель обучения языку программирования состоит в том, чтобы что-то создать с его помощью. Когда я изучал Ruby, я использовал фреймворк Rails для создания блога, приложения todo, клонирования Wikipedia и вэб-сайта Rotten Tomatoes.

Создание чего-нибудь будет способствовать развитию каждого аспекта вашего обучения.

Никогда не сдавайтесь.

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

Путь джедая: while(true) => study()

Я знаю, одного программиста, который изучает C# более 20 лет, и все равно он каждый день обнаруживает что-то новое о C# и .NET. Этот парень – Антонио Маньеро, самый влиятельный член StackOverflow.

Дело в том, что мы никогда не узнаем все о языке, и это будет подталкивать нас постоянно учиться.

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

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

Перевод статьи Vinicius Brasil: How to Learn a New Programming Language or Framework