Как мне быстро освоить новый язык, если я знаю несколько других? [закрыто]

14

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

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

По вашему опыту, какие общие стратегии вы использовали, чтобы быстро освоить новый язык? Существуют ли специфические аспекты языка, на котором вы пытаетесь сосредоточиться, когда начинаете холод? Какие типы ресурсов вы считаете полезными в этом процессе?

user8
источник
6
Я бы сказал, просто сделай это. Официальная документация и Google - единственные ресурсы, которые вам понадобятся.
Фоско
@ Rein Некоторые ответы частично совпадают, но цель этого вопроса - создать канонический ответ на изучение языка (любого языка) как можно быстрее и эффективнее. Другой вопрос - это сочетание рекомендаций книг, ответов, аналогичных приведенным здесь, и общих советов по быстрому обучению (чтение перед сном, чтение языковой спецификации, изучение базового уровня в течение нескольких недель с несколькими различными языки).
Я не уверен, насколько полезен вопрос, который задают. Если я знаю несколько языков программирования, я, вероятно, научился подбирать новый язык, и, вероятно, эффективно. Если я не буду, как я собираюсь извлечь выгоду из этого вопроса?
Дэвид Торнли
1
@ Давид Я знаю полдюжины языков, но я выучил их обычно после занятий в них или после нескольких месяцев работы. Но если мне нужно быстро выбрать язык для новой работы с другой стороны, это мне не поможет. Я не сомневаюсь, что люди, которые выучили несколько языков, нашли способы выучить их быстро: это то, что я надеюсь в ответах.
@ Марк Трапп: Спасибо, это проясняет для меня вещи.
Дэвид Торнли

Ответы:

18

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

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

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

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

Кроме того, проекты обычно начинаются с меньшего размера и становятся все более сложными - от простого приложения «Hello World» до небольшого и не очень полезного проекта и далее до полноценного приложения. С точки зрения того, на каких аспектах языка я сосредотачиваюсь, это зависит от прикладного использования языка - я никогда не изучаю каждый API или фреймворк для начала (как, например, с .NET). Это займет слишком много времени. Я изучаю основной синтаксис, а затем разветвляюсь, исследуя каждое расширение по мере необходимости. С менее модульным языком, таким как CSS или XSLT, я просто сначала изучаю самые популярные конструкции и добавляю другие по мере необходимости.

оборота jqueryrocks
источник
Когда вы говорите «просто сделайте это», есть ли особые аспекты языка, на котором вы сосредотачиваетесь при погружении, чтобы убедиться, что вы подбираете его максимально эффективно? Или вы просто продолжаете делать случайные образцы проектов, пока он не «щелкнет»?
Ну, как правило, проекты начинаются с меньшего размера и становятся все сложнее - от простого приложения «Hello World» до небольшого и не очень полезного проекта, вплоть до полноценного приложения. С точки зрения того, на каких аспектах языка я сосредотачиваюсь, это зависит от прикладного использования языка - я никогда не изучаю каждый API или фреймворк для начала (как, например, с .NET). Это займет слишком много времени. Я изучаю основной синтаксис, а затем разветвляюсь, исследуя каждое расширение по мере необходимости. С менее модульным языком, таким как CSS или XSLT, я просто сначала изучаю самые популярные конструкции и добавляю другие по мере необходимости.
jqueryrocks
2
Вы можете добавить это обратно к своему ответу? Это отличная информация.
5

Это работает для меня:

  1. Читайте об этом.
  2. Используй это.
  3. GOTO 1.

Для чтения об этом шаге я пытаюсь выбрать "ссылку" для языка. Например, "Язык программирования C". Это должно быть сжато, точно, и постепенно наращивать свои знания. Тогда я читаю это от корки до корки. Я быстрый читатель, и я не зацикливаюсь на этом первом чтении. Затем я вернусь к конкретным пунктам и попытаюсь использовать язык. Вероятно, я потрачу больше времени на примеры кода внутри книги.

Первое, что вам нужно, это синтаксис. Не зная, НАЧИНАЕТСЯ ли это НАЧАЛО или {или блочный отступ, или как вы объявляете переменные, вы ничего не можете написать. Автор обычно сначала знакомит с более важными частями, либо у него есть учебное пособие, в котором рассматривается базовое использование языка. Трудно дать более общие рекомендации, потому что некоторые языки сильно отличаются от других. Следующая вещь - это общее понимание языка, какова общая философия, как вы подходите к решению проблем в контексте языка.

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

Так что это итеративный процесс. Идти глубже на каждой итерации. Бесконечный. Даже после 20 лет использования языка есть чему поучиться.

оборота Гай Сиртон
источник
Можете ли вы подробнее рассказать о том, что вы подразумеваете под «читать об этом»? На чем конкретно вы концентрируетесь, когда начинаете читать о новом языке, который хотите выбрать?
@ Марк - посмотри мои правки ... Это то, что ты ищешь?
Гай Сиртон
5

Захватите проект реального мира

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

Я также случайно выучил немного SQL-кода, затем закончил изучать его в колледже, и, думаю, мне тоже было легче.

Если вы не хотите рисковать ...

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

Скорее всего, вы добьетесь прогресса, просто изучив код.

Получить все ссылки, которые вы можете

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

Другие сообщества, такие как форумы, списки рассылки и другие, также считаются ссылками.

dukeofgaming
источник
Я хотел бы добавить «схватить тяжелую проблему реального мира». Выберите что-то, что требует от вас, чтобы получить шею глубоко в первый день. В мой первый день с C # я выяснил, как динамически загружать dll, использовать отражение, чтобы получить классы, и из этого получить список методов. Я изучал тонну в день, никогда раньше не использовал ни одной технологии .net.
Брайан Оукли
2

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

Составьте карту того, чего вы не знаете

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

Получите хорошие ресурсы, которые помогут вам узнать то, чего вы не знаете

Возможно, вы захотите получить хороший справочник по алгебраическим формулам, или, может быть, вы просто хотите купить « Javascript, хорошие части ». Для некоторых кривых обучения эта работа уже частично выполнена. Если вы пытаетесь изучать C # из фона Java (и наоборот), существует множество публикаций в блогах и на сайтах, которые отображают различия и содержат ссылки / ресурсы, которые помогут вам учиться.

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

Создайте что-то реальное

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

blueberryfields
источник
1

Определите парадигму (ы) программирования

Я обычно определяю основные парадигмы языка. Я думаю о проблемах по-разному в зависимости от парадигмы.

Определить идиомы

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

Написать код

Я обычно пишу некоторый функциональный код. Что-нибудь из простого сита для игрушек веб-приложений. Проблемы, которые я выбираю, обычно связаны с тем, для чего я собираюсь использовать язык.

dietbuddha
источник
1

Просто погрузитесь в!

Учитывая, что вы уже знаете, как программировать и знаете несколько языков, за исключением того, что этот язык вводит очень глубокий сдвиг парадигмы, я бы сказал (одновременно):

  • найти любимый проект, чтобы отвезти тебя,
  • и на стороне программы некоторые загадки

Учиться, практиковаться, применять (пока не выполнено)

Классические 99 головоломок Prolog (здесь 99 головоломок в Scala ) или Project Euler обычно являются хорошими местами для поиска маленьких головоломок для повторной реализации. Или побродите по StackOverflow и переписайте несколько хороших ответов на вашем целевом языке, стараясь не переписывать построчно, а что-то, что отражает суть вашего нового языка.

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

Говоря о сообществе ...

Поделитесь и выставьте себя. (Не слишком много, хотя.)

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

оборота хайлем
источник
0

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

как мне сделать [что-то с одного языка] на [другом языке]

Если слова являются общими, используйте цитируемые литералы.

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

Билл
источник
0

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

Исправить ошибки

  1. Найдите интересный проект с открытым исходным кодом на целевом языке, желательно с открытым трекером ошибок, умеренно активной разработкой и приличным набором тестов.
  2. Выберите баг, чтобы исправить, желательно тот, который раздражает вас, когда вы фактически используете программу.
  3. Выясните, почему программа демонстрирует некорректное поведение.
  4. Напишите тесты и код для решения проблемы.
  5. Отправить патч вверх по течению.
  6. Пересматривайте ваш патч, пока разработчики не станут счастливы.
  7. Вернитесь к шагу 1 или 2.

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

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

eswald
источник