Один тип вопросов, который постоянно возникает на сайте Programmers.SE, - это как изучать определенный язык, если вы знаете несколько других (обычно благодаря большому опыту или образованию).
В некоторых случаях, однако, может понадобиться быстро набрать скорость для работы, для личного развития или даже для проверки горячей новой платформы.
По вашему опыту, какие общие стратегии вы использовали, чтобы быстро освоить новый язык? Существуют ли специфические аспекты языка, на котором вы пытаетесь сосредоточиться, когда начинаете холод? Какие типы ресурсов вы считаете полезными в этом процессе?
Ответы:
Я нашел лучший способ выучить новый язык - это делать, а не просто читать. И поэтому, когда я хочу (или нуждаюсь) выучить новый язык, я обычно читаю несколько глав справочника по синтаксису, но затем я погружаюсь прямо и создаю что-то, а не читаю и читаю книгу за книгой.
Я обнаружил, что по мере возникновения проблем и вопросов, ответы находят (часто в Интернете). Я также думаю, что именно поэтому обучение на рабочем месте так ценно, потому что вы производите рабочий продукт большую часть времени, даже если это черновой вариант - и поэтому вы учитесь на практике.
Я призываю людей просто думать о том, что их интересует, и погружаться прямо в написание кода или создание форм и т. Д.
Позже, после того, как вы создали проект за проектом, хороший справочник научит вас мелким деталям, которые на данный момент вам легче понять.
Кроме того, проекты обычно начинаются с меньшего размера и становятся все более сложными - от простого приложения «Hello World» до небольшого и не очень полезного проекта и далее до полноценного приложения. С точки зрения того, на каких аспектах языка я сосредотачиваюсь, это зависит от прикладного использования языка - я никогда не изучаю каждый API или фреймворк для начала (как, например, с .NET). Это займет слишком много времени. Я изучаю основной синтаксис, а затем разветвляюсь, исследуя каждое расширение по мере необходимости. С менее модульным языком, таким как CSS или XSLT, я просто сначала изучаю самые популярные конструкции и добавляю другие по мере необходимости.
источник
Это работает для меня:
Для чтения об этом шаге я пытаюсь выбрать "ссылку" для языка. Например, "Язык программирования C". Это должно быть сжато, точно, и постепенно наращивать свои знания. Тогда я читаю это от корки до корки. Я быстрый читатель, и я не зацикливаюсь на этом первом чтении. Затем я вернусь к конкретным пунктам и попытаюсь использовать язык. Вероятно, я потрачу больше времени на примеры кода внутри книги.
Первое, что вам нужно, это синтаксис. Не зная, НАЧИНАЕТСЯ ли это НАЧАЛО или {или блочный отступ, или как вы объявляете переменные, вы ничего не можете написать. Автор обычно сначала знакомит с более важными частями, либо у него есть учебное пособие, в котором рассматривается базовое использование языка. Трудно дать более общие рекомендации, потому что некоторые языки сильно отличаются от других. Следующая вещь - это общее понимание языка, какова общая философия, как вы подходите к решению проблем в контексте языка.
Еще одна вещь, которую нужно иметь в виду, это концепция «используй или потеряй». Если вы не использовали язык в течение некоторого времени, вам потребуется некоторое время, чтобы вернуться к скорости (хотя это время будет сокращаться с опытом). Как только вы получите синтаксис языка, вам нужно будет изучить библиотеки и т. Д.
Так что это итеративный процесс. Идти глубже на каждой итерации. Бесконечный. Даже после 20 лет использования языка есть чему поучиться.
источник
Захватите проект реального мира
С моей точки зрения, легче чему-то научиться, когда вам действительно нужно это изучить. Для меня это было с javascript, где я рискнул, приняв большой проект с двухмесячным периодом. Я был там каждый день и каждую ночь, пытаясь добиться результатов для этого внештатного проекта, и через полтора месяца проект был завершен.
Я также случайно выучил немного SQL-кода, затем закончил изучать его в колледже, и, думаю, мне тоже было легче.
Если вы не хотите рисковать ...
Фактический ключ к предыдущему пункту - это решение реальных проблем ... но я лучше работаю в стрессе (мне нравится стресс, я думаю, что это весело, и я могу быть поврежден, так что ...). Если нет, просто зайдите за проектом с открытым исходным кодом, который вас интересует и использует язык, который вы хотите выучить, и попытайтесь внести свой вклад. Если ваш код отстой, вы можете получить некоторую обратную связь в зависимости от сообщества.
Скорее всего, вы добьетесь прогресса, просто изучив код.
Получить все ссылки, которые вы можете
Это включает в себя несколько книг, официальную документацию и все ссылки, которые вы можете получить. Похоже, что таким образом вы будете знать, как делать одно и то же по-разному.
Другие сообщества, такие как форумы, списки рассылки и другие, также считаются ссылками.
источник
Есть много способов выучить новый язык, но не все одинаково эффективны. Я нашел, что эти три руководства работают лучше всего для меня:
Составьте карту того, чего вы не знаете
Заранее определите, что вам нужно выучить. Найдите обзор или общий источник документации, который описывает язык в абстрактных терминах. Исходя из этого, вы обычно можете получить достаточно полный обзор того, что представляет собой язык. Используйте этот обзор, чтобы выделить области, которые вы не знаете, но которые считаются ядром языка. Является ли хвостовая рекурсия концепцией, которую вам нужно выучить, чтобы действительно впитывать язык? Возможно, вам нужно знать свое регулярное выражение гораздо лучше, поскольку язык специализируется на манипулировании строками. Или, может быть, вам действительно придется надеть свою алгебру, поскольку многие понятия в языковой карте напрямую связаны с алгебраическими понятиями.
Получите хорошие ресурсы, которые помогут вам узнать то, чего вы не знаете
Возможно, вы захотите получить хороший справочник по алгебраическим формулам, или, может быть, вы просто хотите купить « Javascript, хорошие части ». Для некоторых кривых обучения эта работа уже частично выполнена. Если вы пытаетесь изучать C # из фона Java (и наоборот), существует множество публикаций в блогах и на сайтах, которые отображают различия и содержат ссылки / ресурсы, которые помогут вам учиться.
Убедитесь, что ресурсы не являются просто ссылками - убедитесь, что они включают тесты или упражнения, которые помогут вам оценить, правильно ли вы изучили концепцию. Читать о хвостовой рекурсии - это одно, а о том, как она реализована на выбранном вами языке, - это другое.
Создайте что-то реальное
Практически невозможно осуществить какое-либо реальное обучение без ощутимой цели. Это особенно верно в отношении прикладного искусства - вот что использует язык программирования. Убедитесь, что у вас есть реальная цель, к которой вы стремитесь - обычно это лучший выбор.
источник
Определите парадигму (ы) программирования
Я обычно определяю основные парадигмы языка. Я думаю о проблемах по-разному в зависимости от парадигмы.
Определить идиомы
У всех языков есть идиомы. Идиомы различаются по размеру и объему от того, как вы структурируете код, вплоть до отдельных фрагментов кода. Вы всегда должны пытаться использовать идиомы языка.
Написать код
Я обычно пишу некоторый функциональный код. Что-нибудь из простого сита для игрушек веб-приложений. Проблемы, которые я выбираю, обычно связаны с тем, для чего я собираюсь использовать язык.
источник
Просто погрузитесь в!
Учитывая, что вы уже знаете, как программировать и знаете несколько языков, за исключением того, что этот язык вводит очень глубокий сдвиг парадигмы, я бы сказал (одновременно):
Учиться, практиковаться, применять (пока не выполнено)
Классические 99 головоломок Prolog (здесь 99 головоломок в Scala ) или Project Euler обычно являются хорошими местами для поиска маленьких головоломок для повторной реализации. Или побродите по StackOverflow и переписайте несколько хороших ответов на вашем целевом языке, стараясь не переписывать построчно, а что-то, что отражает суть вашего нового языка.
Учитесь вместе с головоломками, читайте блоги и эссе, чтобы глубже понять язык, почувствовать инструменты и священные войны вашего нового сообщества, и напишите свой тестовый проект, чтобы применить свои новые найденные знания и навыки, и посмотрите, с какими дорожными неровностями вы столкнетесь.
Говоря о сообществе ...
Поделитесь и выставьте себя. (Не слишком много, хотя.)
Возможно, вам также захочется посетить локальную группу пользователей, найти друзей для кодирования (чтобы получить конструктивную критику и не ограничивать себя особым мышлением) и подписаться на этот страшный IRC-канал или список рассылки, где они пропускают странные слова об AST деревья и напишите философские тирады о том, что монады не являются монадами, и как только вы встретите какую-то странную девушку, вы не сможете вернуться назад .
источник
Я знаю, это звучит неубедительно, но начните кодировать что-то, даже если это глупо, и используйте много Google для вещей, следующих этому шаблону:
как мне сделать [что-то с одного языка] на [другом языке]
Если слова являются общими, используйте цитируемые литералы.
Это достаточно распространенный вопрос, и в большинстве случаев я больше не могу найти ответ, когда нахожу страницу, объясняющую, почему это невозможно сделать.
источник
В качестве конкретного предложения для использования только языка:
Исправить ошибки
Этот процесс, как правило, более эффективен, чем написание еще одной игрушечной программы, но гораздо проще, чем начать свой собственный полный проект с нуля. Вы сталкиваетесь с некоторыми языковыми идиомами в их естественном контексте и (если повезет) с чьим-то представлением о том, как выглядит хороший код.
С другой стороны, это также может быть очень неприятно, особенно если вы выберете неприятную ошибку или разработчики отклонят ваш патч без объяснения причин.
источник