Подтвердить что ты не робот

Что представляет собой эффективную подготовку Perl для разработчиков, не являющихся Perl?

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

Мне приходят несколько вещей:

  • Правильное использование сигил
  • Реферирование/разыменования
  • Использование функций списка, таких как карта, grep, сортировка

Есть ли что-то особенное, что вы сочли полезным сосредоточиться на том, чтобы помочь программисту перейти на Perl? Вы подчеркиваете сходство или различия, или оба в равной мере?

4b9b3361

Ответ 1

Ознакомьтесь с оглавлениями для моих книг. Оба Learning Perl и Промежуточный Perl предназначены для обучения программисты на языке Perl. Мы покрываем 80% Perl, которые большинство людей используют все время и разработали, что с лет и лет обучения людей Perl. Каждая книга разработана как учебник, и в конце каждой главы есть упражнения. Я также написал учебное пособие для студентов Perl, чтобы предоставить дополнительные упражнения. Программирование Perl также является хорошей ссылкой.

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

  • строгий и предупреждающий
  • Скалярный контекст контекста
  • динамический и лексический охват
  • Сигила не является типом переменной
  • Создание списка и манипуляция (карта, grep, sort)
  • Как эффективно использовать CPAN
  • Закрытие и подпрограммы в качестве данных
  • Рекурсия в Perl сосет

Удачи:)

Ответ 2

Я думаю, что "приложение-убийца" Perl CPAN...

Типичные кавычки после просмотра CPAN в первый раз:

"У вас есть библиотека для WHAT?
" Extirpate HTML должно быть лучшим именем функции когда-либо! "
" Вы можете summarize текст в Perl? "

Как только программисты видят, как легко делать тяжелые вещи, они продаются.

Затем вы можете показать им perldoc и Camel.

Ответ 3

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

Во-первых, если ваше время и бюджет позволяют, подумайте о том, чтобы отправить своего сотрудника на профессиональный курс Perl. Выделенные курсы имеют то преимущество, что они не приходят с перерывами в работе, они не приходят с политикой на рабочем месте, и они приходят с кем-то, кто очень знаком с трудностями, которые люди испытывают при изучении Perl. Пожалуйста, убедитесь, что у вас есть тренер, который знает их вещи и является активным членом сообщества Perl; это означает, что они должны иметь возможность ответить на любой вопрос, заданный им, или направить собеседника на соответствующую ссылку, где они могут узнать больше. Да, я управляю тренировочным бизнесом Perl, поэтому я сильно упрям ​​здесь.

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

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

Ответ 4

Я начал бы говорить, чтобы они всегда использовали магическую мантру:

use strict;
use warnings;

Им не нужно знать, почему (пока).

Затем я бы представил их perldoc и покажу им основы его использования (флаги -f и -q, perldoc perl и perldoc perltoc и т.д.). Им нужно знать, где искать, когда у них есть вопросы.

Я бы сказал о скалярном контексте списка.

Я бы представил их основным типам данных (скалярам, ​​массивам и хэшам) и тому, как сигилы следуют контексту, а не типу данных!

Ввести $_ и @_. Крайне важно понимать $_, потому что он используется во многих местах, часто неявно. @_ имеет важное значение для записи подпрограмм. Другие переменные пунктуации используются гораздо реже и могут подождать.

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

Я кратко покажу им Perl "диагональный" синтаксис. Идиомы, такие как next unless /foo/, замечательны, когда вы их используете, но кажутся очень чужими, когда приходят с других языков, особенно "ортогональные".

Вам не нужно сразу говорить о ссылках. Пусть это подождет, пока они не будут готовы делать вещи, требующие структуры данных. Такие функции, как map и grep, тоже могут подождать.

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

Ответ 5

Самое главное, что вы можете показать им, - это получить доступ к документации и как ее найти (perldoc perltoc, perldoc -q $keyword, perldoc -f $function и т.д.).

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

Ответ 6

Честно говоря, я бы просто дал им Верблюд. Это такая читаемая и интересная книга, и они будут в кратчайшие сроки. Я все еще смеюсь над тем, что "Perl держит истину, чтобы быть самоочевидной", и, должно быть, прошло десять лет с тех пор, как я впервые прочитал ее.

Ответ 7

Другим удивительным аспектом является контекст. Тот факт, что функции или даже переменные ведут себя по-разному в зависимости от того, ссылаются ли они на список или скалярный (или пустой) контекст, является важной деталью для стажеров Perl.

Я обычно настаиваю на "более высоком уровне" встроенных функций (map, grep, splice, split). Из-за TMTOWTDI многие программисты только помнят более знакомые аспекты Perl (например, циклы C, substr и index) и используют исключительно те.

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

Ответ 8

Вероятно, не совсем то, что вы ищете. Извиняюсь заранее.

Я бы не указал на сходство, если это действительно необходимо.
Perl работает в своем собственном мире. Вы можете запрограммировать Perl в стиле Java, если хотите, но какой смысл?

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

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

Только мои два цента.

Ответ 9

Я программист на Java, который недавно должен был забрать Perl. Часть, с которой мне сложнее всего привыкнуть, были все специальные встроенные переменные, такие как $_ $~ $'и так далее. Пока вы не привыкнете к ним, сложно отслеживать, что делает что-то.

И, конечно, использование регулярных выражений.

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

next unless "$_" !~ /^#/;

Ответ 10

Я бы выбрал множество операторов цитирования (из perlop):

       Customary  Generic        Meaning        Interpolates
           ''       q{}          Literal             no
           ""      qq{}          Literal             yes
           ``      qx{}          Command             yes*
                   qw{}         Word list            no
           //       m{}       Pattern match          yes*
                   qr{}          Pattern             yes*
                    s{}{}      Substitution          yes*
                   tr{}{}    Transliteration         no (but see below)
           <<EOF                 here-doc            yes*

           * unless the delimiter is ''.

Список может быть подавляющим (особенно когда вы добавляете в альтернативные разделители), но чрезвычайно полезен. Это также помогает при чтении кода, поскольку несколько (если есть!) Языков имеют множество кавычек, которые Perl имеет.

Ответ 11

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

О, и чтобы добавить к идее мориц, я обучил своих коллег именно этим.

Кроме того, я включил некоторые инструкции в Data:: Dumper, Scalar:: Util, List:: Util и некоторые очень полезные модули.

И почему бы и нет, посмотрите Damian Perl Best Practices и поймайте несколько более мощных предложений.

Ответ 12

Это одна деталь, а не полный ответ на ваш вопрос, но для меня знак того, кто действительно стал ориентироваться на Perl, - это тот, кто заменяет эту идиому:

for (my $i = 0; $i < @a; $i++)
{
  &do_something_with($array[$i]);
}

с этой идиомой:

foreach my $a (@array)
{
  &do_something_with($a);
}

Научите их спискам как спискам, а не только массивам. Научите потрясающие структуры данных. Научите списки, хеши, списки хэшей, хэши списков, хэши хэшей. То, что самый большой шаг в развитии происходит на большинстве традиционных строго типизированных языков. (По иронии судьбы в магазине Java, к которому я присоединился в этом году, мы прокладываем тонны артезитарно глубоких вложенных структур HashMap. Слишком много, на самом деле, я утверждаю, что делаю это немного меньше! Но на Perl это такая вещь жизненно важно.)

Ответ 13

Просто шутите, но что бы вы ни делали, покажите такие вещи, как this LAST!;)

use integer;@A=split//,<>;sub R{for$i(0..80){next if$A[$i];my%t=map{$_/9
==$i/9||$_%9==$i%9||$_/27==$i/27&&$_%9/3==$i%9/3?$A[$_]:0=>1}0..80;R($A[
$i]=$_)for grep{!$t{$_}}1..9;return$A[$i]=0}[email protected]}R

Ответ 14

как говорили другие:

use strict;
use warnings;

может быть

use diagnostics;

для Java-программистов:

use autodie; #or Fatal

English.pm
Moose/мышь
Perl:: Критик
Perltidy

Ответ 15

Я был просто нанят на этот точный сценарий. Я разработчик С++ и Java и никогда не касался Perl до моей текущей работы. То, что потребовалось некоторое время, чтобы привыкнуть, было идиосинкратическим выбором синтаксиса Perl [$ _], $this = that, если..., и видя лес для деревьев (что-либо содержащее /^ # +\d/elements). Другие вещи были только результатом работы дома программирования, в котором я работаю в [путаных выводах OO, $self и поставке 1; в конце файлов модулей].

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

Все, что было сказано, мне передали кодовую базу около 35 000 строк, книгу верблюдов и сказали, что я не могу использовать CPAN. Это было продуктивно шесть месяцев. ^^

Ответ 16

Программирование Perl (соавтор # 22483 - хорошая работа Рэндала, у меня была моя почти 10 лет) была отличным вступлением к Perl. Начиная с регулярных выражений, режущих и режущих массивов, ассоциативных массивов и т.д. Кроме того, whys и hows отчетов в Perl и справочной функции.

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

Ответ 17

Основываясь на моем опыте на рабочем месте, я бы рекомендовал начать с документации Perl (уже рассмотренной здесь) и потратить некоторое время, показывая ученику, как тестировать код в командной строке. Это действительно удивительно, как быстро кто-то может забрать язык, когда они могут попробовать что-то на лету и внести исправления, пока они не поправятся.

Ответ 18

Для кодеров С++/Java/С# две отличия, которые я очень сильно подчеркиваю, заключаются в следующем:

Нет 1: В Perl почти все имеет смысл, а не всегда то, что вы хотите. Хорошие примеры включают:

  • Переменные имена без сигил не останавливают выполнение - они интерпретируются как простые слова
  • Попробуйте сохранить массив в скаляре, и вы получите длину
  • Попробуйте сохранить хэш в скаляре, и вы получите "a/b" (используемые ведра против общих ковшей?)

Нет 2: В Perl вы можете сделать это, когда идете вперед. В других работах вы можете сказать "в хеш" w ключ "x" индексирует анонимный массив, в котором поле "y" содержит "z", и интерпретатор будет создавать и изменять все переменные для вас, когда вы идете.

Ответ 19

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

Когда вы начинаете в Perl, но уже знаете другие языки, вам нужно знать сумасшедшие идиосинкразии, такие как $a и $b, являющиеся специальными vars, возможность индексирования с использованием -1 и т.д.

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

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

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