¿Qué constituye una capacitación efectiva de Perl para desarrolladores que no son de Perl?
cpan timtowtdi (19)
He trabajado con Perl el tiempo suficiente para que muchas de sus idiosincrasias se hayan convertido en una segunda naturaleza para mí. Cuando los nuevos programadores se unen a nuestro grupo, con frecuencia tienen poca o ninguna experiencia con Perl, y generalmente es mi tarea entrenarlos (en la medida de lo necesario). Me gustaría saber en qué concentrarme cuando entrene a un programador que es nuevo en Perl pero que tiene experiencia con otros idiomas (esta pregunta está destinada a ser independiente del lenguaje, pero la mayoría de los desarrolladores con los que he trabajado provienen de Java).
Algunas cosas se me ocurren:
- El uso apropiado de sigils
- Referencias / Desreferencia
- Uso de funciones de lista como map , grep , sort
¿Hay algo en particular en el que le haya resultado útil centrarse cuando ayuda a un programador a realizar la transición a Perl? ¿Destacas las similitudes o las diferencias, o ambas en igual medida?
Comenzaría diciéndoles que siempre usen el mantra mágico:
use strict;
use warnings;
No necesitan saber por qué (todavía).
A continuación, les presentaré el perldoc y les mostraré los conceptos básicos para usarlo (los indicadores -f y -q, perldoc perl y perldoc perltoc, etc.). Necesitan saber dónde buscar cuando tengan preguntas.
Hablaría de contexto de lista escalar vs.
Les presentaría los tipos de datos básicos (escalares, matrices y hashes) y cómo los sigilos siguen el contexto, ¡no el tipo de datos!
Introduzca $_
y @_
. Es fundamental comprender $_
porque se usa en muchos lugares, a menudo implícitamente. @_
es esencial para escribir subrutinas. Las otras variables de puntuación se utilizan con mucha menos frecuencia y pueden esperar.
Preséntelos a expresiones regulares y acostúmbrese a la idea de que las expresiones regulares sean objetos de primera clase en Perl.
Les mostraría brevemente la sintaxis "diagonal" de Perl. Los modismos como next unless /foo/
sean maravillosos una vez que los usa, pero parecen muy extraños cuando provienen de otros idiomas, particularmente los "ortogonales".
No necesita hablar de referencias de inmediato. Deje que espere hasta que estén listos para hacer cosas que requieren estructuras de datos. Funciones como map
y grep
pueden esperar también.
Construye una base sólida en los fundamentos. Déjelos dar pequeños pasos durante un rato, luego mezcle funciones y expresiones idiomáticas más avanzadas.
Este es un detalle único, no una respuesta completa a su pregunta, pero para mí, la marca de alguien verdaderamente orientado hacia Perl es alguien que reemplaza este idioma:
for (my $i = 0; $i < @a; $i++)
{
&do_something_with($array[$i]);
}
con este modismo:
foreach my $a (@array)
{
&do_something_with($a);
}
Enséñeles listas como listas, no solo como matrices. Enseñe las impresionantes estructuras de datos. Enseñe listas, hashes, listas de hashes, hashes de listas, hashes de hashes. Ahí es donde entra en juego el mayor aumento de potencia en comparación con la mayoría de los lenguajes convencionalmente tipados. (Irónicamente, en la tienda de Java a la que me uní este año, nos movemos alrededor de toneladas de estructuras HashMap análogas a la órbita. Demasiadas, de hecho, ¡yo soy el que aboga por hacer un poco menos! Pero en Perl, este tipo de cosas Es vital.)
Francamente, les daría el camello. Es un libro tan entretenido y entretenido, estarán listos para funcionar en poco tiempo. Todavía me río de que ''Perl cree que la verdad es evidente por sí misma'' y deben pasar diez años desde que lo leí por primera vez.
Lo más importante que puede mostrarles es cómo acceder a la documentación y cómo encontrarla ( perldoc perltoc
, perldoc -q $keyword
, perldoc -f $function
etc.).
Perl viene con una gran documentación, que incluye material de referencia y de estilo tutorial. Hacer que sea accesible para el recién llegado es lo más efectivo que puede hacer por ellos.
Me gustaría ir a la variedad de operadores de cotización (de 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 ''''.
La lista puede ser abrumadora (especialmente cuando se agregan delimitadores alternativos), pero extremadamente útil. También ayuda al leer el código, ya que pocos (si los hay) tienen la variedad de citas que tiene Perl.
Otro aspecto sorprendente es el contexto. El hecho de que las funciones o incluso las variables se comporten de manera diferente dependiendo de si se les hace referencia en el contexto de lista o escalar (o nulo) ha sido un detalle importante para los aprendices de Perl.
Por lo general, insisto en funciones integradas de "alto nivel" (map, grep, splice, split). Debido a TMTOWTDI, muchos programadores solo recuerdan los aspectos más familiares de Perl (como los bucles tipo C, substr y el índice) y usan exclusivamente esos.
Después de que estén familiarizados con el idioma, Intermedio Perl y Advanced Perl Programming les puede dar más información sobre el mundo de Perl.
Para los codificadores C ++ / Java / C #, dos diferencias que enfatizo muy claramente por adelantado son las siguientes:
No 1: en Perl casi todo tiene un significado, pero no siempre lo que quieres. Buenos ejemplos incluyen:
- Los nombres de variables sin sigilos no detienen la ejecución, se interpretan como palabras sin formato
- Intenta almacenar una matriz en un escalar y obtienes la longitud
- Intenta almacenar un hash en escalar y obtienes ''a / b'' (cubos en uso frente a cubos totales?)
No 2: en Perl puede inventarse a medida que avanza. En otros trabajos, puede decir "en el hash ''w'' la tecla ''x'' indiza una matriz anónima donde el recuadro ''y'' tiene ''z''" y el intérprete creará y dimensionará todas las variables para usted sobre la marcha.
Probablemente no sea exactamente lo que estás buscando. Disculpas de antemano.
No señalaría las similitudes a menos que sea realmente necesario.
Perl trabaja en su propio mundo. Podrías programar Perl en estilo Java si quieres, pero ¿cuál es el punto?
La lección más importante que aprendí de Perl (y de mis tutores Perl) es "Hay más de una forma de hacerlo". Así que creo que la mejor manera de aprender Perl es adoptar su actitud hacia la programación y apoyar a cada programador a medida que él o ella encuentren su camino.
Los ejemplos que está haciendo, las funciones de lista, etc., son cosas que se obtienen naturalmente con el uso: solo puede comprender su poder una vez que obtenga el "modo de cosas" de Perl.
Solo mis dos centavos.
Solo bromeando, pero haga lo que haga, ¡muestre cosas como esta ÚLTIMA! ;)
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}die@A}R
Solo puedo agregar que alguien proveniente de un lenguaje menos expresivo podría no entender las expresiones hash o las expresiones hash y de corte de matriz. Parece que todos los idiomas tienen una biblioteca PCRE en estos días.
Ah, y para agregar a la idea de Moritz, enseñé a mis compañeros de trabajo precisamente sobre eso.
Además, incluí algunas instrucciones sobre Data :: Dumper, Scalar :: Util, List :: Util y algunos módulos muy útiles como ese.
Y por qué no, revise las mejores prácticas de Perl de Damian y obtenga algunas de las sugerencias más potentes.
como otros dijeron:
use strict;
use warnings;
tal vez
use diagnostics;
para programadores de Java:
use autodie; #or Fatal
English.pm
Alce / Ratón
Perl :: Crítica
perltidy
Me acaban de contratar en este escenario exacto. Soy un desarrollador de C ++ y Java y nunca había tocado Perl hasta mi trabajo actual. Las cosas que tomaron algún tiempo para acostumbrarse también fueron las opciones de sintaxis de Perl idiosincráticas [$ _], $ this = that unless ..., y ver el bosque para los árboles (cualquier cosa que contenga / ^ # + / d / elements). Otras cosas fueron solo el resultado de la casa de programación en la que trabajo [confunde las declaraciones de OO, $ self, y poner 1; al final de los archivos del módulo].
Ahora que he estado aquí un tiempo, veo los elementos de estilo que Perl me ha dado incluso en mis proyectos no laborales. Aborda las tareas, especialmente el masaje de datos, de manera diferente y se siente como una herramienta sólida en mi caja de herramientas.
Dicho todo esto, me entregaron una base de código de alrededor de 35,000 líneas, el libro de camellos y me dijeron que no podía usar CPAN. Han sido seis meses productivos. ^^
Soy un programador de Java que recientemente tuvo que recoger a Perl. La parte a la que más me costó acostumbrarme fueron todas las variables especiales como $ _ $ ~ $ '', etc. Hasta que no se acostumbre a ellos, es difícil hacer un seguimiento de cuál hace qué.
Y, por supuesto, el uso de expresiones regulares.
Por ejemplo, tengo que mantener el código y cuando vi la línea a continuación por primera vez fue un poco confuso. Como programador de Java, parece un galimatías.
next unless "$_" !~ /^#/;
En función de mi experiencia en el lugar de trabajo, recomiendo comenzar con la documentación de Perl (ya tratada aquí) y dedicar un poco de tiempo a mostrar al alumno cómo probar el código en la línea de comandos. Es realmente sorprendente lo rápido que alguien puede aprender un idioma cuando puede probar algo sobre la marcha y hacer correcciones hasta que lo haga bien.
De acuerdo. Claro que necesitas usar estricto en algún momento. Y seguro que quiere usar las bibliotecas en algún momento. Pero estricta es solo la magia básica de inicio de archivo para Perl, y cada idioma tiene bibliotecas. No creo que esas sean las cosas que es muy importante aprender al comenzar.
Cuando comienzas en Perl, pero ya conoces otros idiomas, necesitas saber idiosincrasias locas, como $ a y $ b que son vars especiales, que pueden indexar usando -1, etc.
En retrospectiva, me gusta mucho cómo aprendí Perl: jugando Perl Golf.
Al utilizar un lenguaje hasta tal extremo, te obligas a descubrir todos los aspectos locos de él, y realmente necesitas entender los diferentes constructos. Especialmente si haces esto con un grupo de amigos / colegas / ... esto funciona realmente bien.
(por supuesto, este no debería ser el único entrenamiento;) pero realmente creo que funciona muy bien en algún momento)
Soy propietario y administrador de Perl Training Australia . He enseñado Perl durante aproximadamente ocho años, e informática por más de una década. Tengo opiniones firmes no solo sobre Perl, sino también sobre la enseñanza y la presentación en general. He escrito cientos de páginas de texto sobre Perl, que no voy a repetir aquí, así que lo que voy a darte no es un consejo para enseñar Perl; es meta-consejo en su lugar.
En primer lugar, si su tiempo y presupuesto lo permiten, considere enviar a su miembro del personal a un curso de capacitación profesional de Perl. Los cursos dedicados tienen la ventaja de que no implican interrupciones en el trabajo, no vienen con políticas laborales, y vienen con alguien que está muy familiarizado con las dificultades que las personas tienen cuando aprenden Perl. Por favor, asegúrese de tener un entrenador que sepa sus cosas y sea un miembro activo de la comunidad de Perl; significa que deben ser capaces de responder cualquier pregunta que se les haga, o dirigir al interrogador a una referencia apropiada donde puedan aprender más. Sí, tengo un negocio de entrenamiento de Perl, así que soy muy testarudo aquí.
Si por algún motivo no puede asistir a un curso dedicado, obtenga un libro específicamente diseñado para enseñar a la gente cómo programar en Perl y recorrerlo. Es fácil pasar por alto cosas, o tratar de introducir cosas en el orden incorrecto, o (no lo permita el cielo) enseñar malos hábitos, y todos esos pueden hacer su vida más difícil. A menudo las personas que escriben libros diseñados para enseñar Perl son las mismas personas que tienen negocios exitosos de capacitación en Perl. Si quiere comprar un libro, le recomendaría la última versión de Learning Perl . Si quieres descargar un libro, te recomiendo que tomes las notas del curso de Programación Perl del sitio web de Perl Training Australia .
Ambos libros vienen con ejercicios, y esto me lleva a mi último consejo meta. Asegúrese de que cualquier persona que esté aprendiendo Perl haga los ejercicios . Al aprender nuevas habilidades, es muy fácil pensar que sabes lo que está sucediendo, pero descubre que ponerlas en práctica es más difícil de lo que parece. Este es particularmente el caso de Perl, donde pueden aplicarse conceptos de programación como "contexto", que son raros en otros idiomas. Por lo general, los ejercicios están específicamente diseñados para enseñar cierta habilidad o para resaltar un cierto riesgo; resolver estas cosas durante el aprendizaje es mucho más fácil que descifrarlas en vísperas de la fecha límite del proyecto.
Creo que la "aplicación asesina" de Perl es CPAN ...
Comillas típicas después de navegar por CPAN por primera vez:
"¿Tienes una biblioteca para QUÉ ?"
"¡ Extirpate HTML tiene que ser el mejor nombre de función que haya existido!"
"¿Puedes resumir el texto en Perl?"
Una vez que los programadores ven lo fácil que es hacer cosas difíciles, se venden.
Mira las tablas de contenido de mis libros. Tanto Learning Perl como Intermediate Perl están diseñados para enseñar a los programadores el lenguaje Perl. Cubrimos el 80% de Perl que la mayoría de las personas usa todo el tiempo y lo desarrollamos a partir de años y años de enseñanza de personas Perl. Cada libro está diseñado como un tutorial, y hay ejercicios al final de cada capítulo. También escribí el Libro de trabajo del estudiante de Learning Perl para proporcionar ejercicios adicionales. Programación de Perl es una buena referencia, también.
En realidad, hay muy pocas reglas que necesita saber para "obtener" Perl, y la mayoría de las personas no obtienen estas reglas con solo mirar el código. Algunas cosas para enseñar a los nuevos Perlers que provienen de otro idioma:
- estricto y advertencias
- Contexto escalar versus lista
- alcance dinámico versus léxico
- El sigilo no es el tipo de variable
- Creación y manipulación de lista (map, grep, sort)
- Cómo usar CPAN efectivamente
- Cierres y subrutinas como datos
- Recursion en Perl apesta
Buena suerte :)
Programación de Perl (coautor por # 22483 - buen trabajo Randal, he tenido el mío por cerca de 10 años) fue una gran introducción a Perl. Comenzando con regex, división y ordenamiento de matrices, matrices asociativas, etc. Además de los porqués y las formas de informar en Perl y una referencia de función.
No estoy seguro de cuánto ha cambiado en su tercera edición, pero basaría un curso en él y lo usaría como libro de texto. Es razonablemente escueto y al grano. Además, su curso coincide con su documentación.