Как освоить новый язык программирования за одну ночь?

Как некоторые разработчики осваивают новый язык программирования за одну ночь? Своими советами поделились пользователи сайта Quora. Самые интересные ответы - в нашем материале.

 

Боб Кернс, программист и разработчик языков программирования, стаж 45 лет

В общем, языки программирования не так сложны. Стоит только освоить несколько языков, понять общую идею и останется лишь запоминать ключевые слова и правила синтаксиса. Гораздо больше трудностей вызывают сложные интерфейсы программирования приложений (API).

Еще более сложными являются среды выполнения языков. Это тот набор API, который идет вместе с языком – возьмите, например, Java. Список пакетов классов занимает не одну страницу. Я работаю с Java уже около 20 лет. И все еще остаются части библиотеки рабочих программ, с которыми я не знаком. Некоторые из них новые, некоторые старые, а я их просто ни разу не использовал.

Экосистемы (доступные библиотеки) даже сложнее. Никто полностью не знает экосистемы таких устойчиво функционирующих языков, как Java или JavaScript. Они растут и развиваются быстрее, чем человек способен отследить.

Google и сарафанное радио тут как раз кстати.

 

Дэйв Бэггет, сотрудник №1 в Naughty Dog; соучредитель ITA Software

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

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

Освоение некоторых языков на высоком уровне занимает многие годы. Хотя многие считают себя экспертами в С++, я буду искренне удивлен, если доскональная проверка 10000 таких экспертов поможет нам обнаружить больше одного профессионала, который на самом деле знает язык на уровне, необходимом для написания компилятора или правильного ответа на спорный вопрос, касающийся синтаксиса или семантики. Я кодирую на С с 1979, а на С++ с 1994 и я даже близко не являюсь экспертом в С++. Хотя я никогда к этому и не стремился.

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

 

Амо Хьюигл, программист

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

Первое, что я сделал – это попытался понять свой проект и требования. Как только мне стали понятны требования и я разобрался в логической схеме внедрения, я выучил в Интернете несколько основных синтаксических правил, необходимых для внедрения моей схемы.

На следующее утро я приступил к работе над проектом. И хотя поначалу я столкнулся с некоторыми проблемами, в интернете было достаточно полезной информации для исправления синтаксических ошибок. В течение следующих 2-3 дней я продолжил работу над проектом и овладел языком программирования, что позволило мне без особых трудностей справиться с проектом. Моим единственным девизом стала фраза: «К концу дня я должен знать об этом языке больше, чем я знал вчера».

Несколько важных моментов, которые помогли мне в изучении языка:

1) Проект. Поскольку существовал проект, связанный с языком, я мог постепенно осваивать язык.

2) Обширные знания в области программирования. На тот момент я уже хорошо владел другими языками программирования, что помогло мне быстро «впитать» важные принципы нового языка.

3) Последовательность. Очень важно быть последовательным в учебе. Лучше учиться по 2 часа в день в течение недели, чем 14 часов за один раз.

 

Вим тен Бринк, более 40 лет самостоятельно развиваю навыки программирования

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

Большинство языков включает в себя всего три элемента: утверждения, условия и циклы. Часто именно они группируются в методах, функциях или операциях, создающих из них «составных операторов». Принцип ориентирования на объект состоит в присоединении составных операторов к записи данных, и вы получаете общую структуру наследования. Часто интерфейсы могут применяться к классам для того, чтобы «трансформировать» различные классы в похожие. А остальное по большому счету – только разница в синтаксисе.

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

 

Ирэн Бернард, программирую с 80-х годов

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

Разница между языками программирования, как правило, также незначительна, как и отличие интерфейса Microsoft Office Word от интерфейса LibreOffice Write. Оба выполняют одни и ту же функции (форматируют текст, его стили, параграфы, заголовки, разделы, страницы и т.д., включая таблицы/списки/изображения/и т.д., добавим сюда проверку правописания, подсчет слов, автоматическую настройку полей, создание оглавления и т.д.), используя схожие методы. Пользователь просто нажимает на другие кнопки, расположенные в других местах.

Тоже самое и с языками, вещи называются по-разному, пунктуация различна, «грамматика» может различаться – но до тех пор, пока оба языка работают на основе одной парадигмы программирования, на этом различия и заканчиваются. Если они работают на разных парадигмах (напр., процедурное не объектно-ориентированное против объектно-ориентированного, или императивное против декларативного и т.д.), тогда это будет скорее походить на сравнение Word и Exel… они выполняют разные функции по-разному (даже несмотря на то, что один мог бы достичь той же цели, однако будут использованы новые пути).

Когда языки работают на основе разных парадигм, становится сложновато. Например: переход от С к С++ кажется несложным, но для того, чтобы в полной мере изучить С++, программисту необходимо понять объектное ориентирование, с которым он(а) никогда не сталкивал(а)ся в С. Именно ЭТО займет много времени, особенно потому, что в остальном С++ очень похож на С (даже пунктуация и грамматика остаются неизменными). Но допустим, кто-то переходит с Python на Ruby… Языки очень похожи, небольшая разница в грамматике, некоторые различия в пунктуации – меня тянет сказать, что программисту, «хорошо» владеющему Python, должно быть несложно выучить Ruby за 1-2 дня.

Еще одно. Что вы подразумеваете под «освоением» языка? Например: опытный программист, владеющий С++, может легко выучить Python за один день. Но насколько хорошо он/она будет знать Python? Что насчет создания списков синтаксическими методами, а не используя циклы?

Подобные вещи обычно предваряют новые модели, с которыми программист мог до этого не сталкиваться, но в то же время их вовсе не обязательно знать, чтобы использовать язык. Является ли знание таких моментов обязательным условием для того, чтобы заявить, что вы овладели Python? Обычно это называют «свободным владением» <вписать язык здесь>. Знакомство с тонкостями может занять больше одного дня, но даже в таком случае, как только вы изучите их в одном языке, вы обнаружите нечто похожее и в других.

 

Скотт Гартнер, программирую на протяжении 33 лет

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

Однако процесс осваивания языка – это все-таки именно процесс, а не одноразовое действие. Программирую на C# уже на протяжении 12 лет и до сих пор продолжаю учить этот язык. Я работаю с PHP около 9 лет, с Java – около 8, и я могу дальше продолжить этот список. Я свободно владею всеми этими, а также многими другими языками, но суть заключается в том, что процесс изучения нового не прекращается никогда. Если бы я захотел вернуться к языку Java, мне бы пришлось потратить достаточное количество времени, чтобы освежить в памяти многие моменты.  Я больше не работаю с этим языком, но  я все равно продолжаю читать новости, касающиеся его.

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

 

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

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

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

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

 

Стив Кук, участвую на различных уровнях разработки программного обеспечения на протяжении 20 лет

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

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

Изучение нового языка с большего занимает не более нескольких дней, если даже не один день… Но подождите, что же именно я имею в виду под этими словами?

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

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

Ключевые вопросы, на которые стоит обратить внимание:

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

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

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

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

По этой причине я бы посоветовал потратить время на изучение, а может даже и на овладение Assembler, С, С++, а также на Java и C#. Это даст вам четкие теоретические знания, а также понимание базового уровня. Как только вы освоите их, стоит переходить к изучению языков, основанных не на языке С. Это будет наверняка непростой задачей, так как придется в некоторой степени изменить ход мышления, но такими языками, как python или lisp, действительно стоит овладеть. 

 

Марк Бадиола, INFJ, программист, блогер, иллюстратор

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

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

Я предпочитаю следовать трем простым рекомендациям:

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

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

3. Используйте интернет. Пункт номер 2 подскажет вам направление. С его помощью вы узнаете, что вам необходимо искать. Вместо запроса «обучающая программа для языка Х», поиск можно начать с чего-то более конкретного, например «определение классов в языке Х». Лично я не могу воспринимать и запоминать информацию, которая не нужна мне прямо сейчас. К примеру, зачем изучать все типы циклов, если в данном приложении все они мне не понадобятся? Я буду искать информацию о них только тогда, когда они мне будут нужны.

Само собой разумеется, что я веду речь о моем стиле обучения. Другие люди учатся совершено по-другому.

Версия для печатиВерсия для печати

Рубрики: 

  • 1
  • 2
  • 3
  • 4
  • 5
Всего голосов: 6
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!

Комментарии

Аватар пользователя mike

Двойка. За недобросовестный заголовок. Так как выучить за ночь невозможно, в чём профи единодушны.  Пятёрка за тему. Так как по тексту есть ключевые высказывания. Позволю себе  их резюмировать. Для изучения языка нужно следующее.

1. Реальный проект (цель).

2. Знания, как устроен комп, софтинг, RDB, сети и Интернет.

3. Последовательность изучения -- от простого к сложному.

4. При затруднениях -- ройте  Интернет.

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

Добавлю: платные курсы -- РАЗВОД лохов. Только систематическое образование (в т.ч. и самообразование) результативно. И главное: нет цели (проекта) -- НЕТ РЕЗУЛЬТАТА. Сподобившиеся на "переобучение", так и запишите. crying

Минусуйте, минусуйте -- внимание приятно. Зато правда. Суровая правда жизни.cheeky

P.S. Ночной креатив существует! Хотя и нельзя освоить новый язык, но сделать  дитё  -- вполне. smiley

 

 

 

-1
Аватар пользователя mental

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

Аватар пользователя mike

mental пишет:

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

LOL! Фреймворк -- это объект общего назначения не привязанный к IDE. Для интерфейса приложения с миром. Остальное -- МОЗГАМИ и "парой операторов". Программа -- это не то, что дают в школе. Это обработка событий, сообщений, принятие решений, потоки, мьютексы, семафоры и т.д. Этим занимаются фреймворки?! Поведение закладывает программист. Точка.

Изучать фреймворки не сложно -- есть доки с описаниями методов и свойств. Фоеймворки деривативны. Написать свой просто -- бери готовый, да развивай. Но без умения работать "парой операторов" лучше не браться. crying  Кстати, о фреймворках у меня были статьи в бумажных "Вестях", поищите, если не лениво.

Владение языком  доводится до автоматизма годами. (Гуманитариям, уповающим на курсы.)smiley

 

+1

За ночь? Фигня. Я любой язык за час изучу. Вплоть до китайского.

:) Вот только говорить на нем или программировать после такого изучения фик получится.

Как в том анекдоте:

- Девушка, а Вы с какой скорость печатаете?

- 3000 знаков в минуту!

- ?!

- Только вот в итоге какая-то фигня получается...

Аватар пользователя Petro46

mike пишет:

mental пишет:

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

LOL! Фреймворк -- это объект общего назначения не привязанный к IDE. Для интерфейса приложения с миром. Остальное -- МОЗГАМИ и "парой операторов". Программа -- это не то, что дают в школе. Это обработка событий, сообщений, принятие решений, потоки, мьютексы, семафоры и т.д. Этим занимаются фреймворки?! Поведение закладывает программист. Точка.

Изучать фреймворки не сложно. Для них есть доки с описаниями методов и свойств. Они деривативны. Написать свой просто -- бери готовый, да развивай. Но без умения работать "парой операторов" лучше не браться. crying  Кстати, о фреймворках у меня были статьи в бумажных "Вестях", поищите, если не лениво.

Владение языком  доводится до автоматизма годами. (Гуманитариям, уповающим на курсы.)smiley

 

Фреймворк:-) Все же без IDE с ним ой как сложно працаваць:-)

 

 

Аватар пользователя mike

smiley

Без IDE непросто и вне фреймворков.

Увы, каждый язык и операционная среда имеют свои семейства фреймворков. Например, для С++ их не менее полутора десятка. Среди них есть кроссплатформенные и нативные. Последние работают быстрее.

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

Всё зависит от задачи. Задача первична.

 wink

Аватар пользователя Petro46

Нет вопросов. Мы учили Java и решили написать игру "Змейка" но на С++. Не удалось. Не смогли совладать с Open GL, ставили всякую хрень, вроде Delphi но это все брошено и под "Win" работает совсем криво. Ну или руки у нас - кривые. Между тем - змейка, это задача для первоклассника, владеющего основами программирования. Берете любой алгоритм, который работает на графах и добавляете проверки на "яблочко", на препятствие, на границу матрицы, добавляете нужные функции (наращивание тела, уход в сторону, сокращение, самоуничтожение), на каждом ходу двигаете корпус свитчем или что там придумаете... И вперед. Но на С++ не решилось, зато легко решилось на Java. Там все есть

Я был думал написать статью сюда, но тут статьи такие теперь не нужны. 

 

+1
Аватар пользователя mike

Решилось на Java...

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

Аватар пользователя savely

> Вот кто меня разубедит?

А зачем? ;) Надо будет - перейдешь. Не надо будет - не перейдешь. 

Аватар пользователя mike

Я был думал написать...

"I was thinking to write..." или "I had been thinking to write..." -- как правильно в данном контексте? Имхо и то, и то неверно. Короче, "There was a thought..." -- была мысля. У меня тоже была. Метнуть бисер. Но зачем? Тут сейчас приветствуется другой контент, например, кучаинафигнужныхфоток или "как я училась эксплуатировать палку" (для селфи). И, что характерно, пипл это хАвает куда охотнее, чем всякий мозговой выпот. Что очень хорошо согласуется с теорией профессора С.В.Савельева.