¿Cuáles son las similitudes entre Perl y Java? [cerrado]

14

Tengo la mente puesta en que estoy aprendiendo Java como mi segundo idioma (soy un desarrollador de Perl). Pero solo por leer un poco de los tutoriales en línea, realmente no puedo encontrar ninguna similitud entre los dos. ¿Qué me resultará fácil de entender cuando aprenda Java?

Dinámica
fuente
Comience por adelantado decidiendo "¡ME GUSTA ESTE IDIOMA!". Cada vez que te encuentres con algo difícil, solo recuerda tu decisión y ahórrate muchos dientes rechinando y tirando del cabello.
1
Lectura recomendada: Gorilla vs. Shark

Respuestas:

32

Perl es un lenguaje de programación dinámico, de alto nivel, multi-paradigma, interpretado y dinámico. Java es un lenguaje de programación de alto nivel, de propósito general, en su mayoría de un solo paradigma, de tipo estático.

Entonces, ambos son de alto nivel :

Un lenguaje de programación de alto nivel es un lenguaje de programación con una fuerte abstracción de los detalles de la computadora.

y de uso general :

En software de computadora, un lenguaje de programación de propósito general (GPL) es un lenguaje de programación diseñado para ser usado para escribir software en una amplia variedad de dominios de aplicación.

En esencia, esto significa que todo lo que puede hacer con Perl, también puede hacerlo con Java. Y como menciona @KyleHodgson , sus sintaxis derivan de C y C ++ y la sintaxis para cosas simples como forbucles y ifdeclaraciones es esencialmente la misma, y ​​como señala @DipanMehta , ambas son basura recolectada . Y, por supuesto, ambos son extremadamente populares y tienen comunidades vibrantes.

Pero ahí es donde terminan las similitudes. Perl es multi-paradigma, apoyando una amplia gama de paradigmas de programación:

Perl no fomenta un solo paradigma, son esencialmente iguales y eres libre de elegir lo que creas que se adapta mejor a lo que sea que estés construyendo, sin, por supuesto, limitarte a un solo paradigma, puedes mezclar y combinar. Por otro lado, Java es principalmente un lenguaje orientado a objetos basado en clases. Hay soporte para programación genérica, pero como principiante debe pensar en Java como un lenguaje orientado a objetos estrictamente basado en clases.

Entonces, Perl permite más de una forma de estructurar su código 1 , mientras que Java solo una. Eso no es algo malo (o algo bueno), es simplemente diferente. Si no ha escrito ningún código Perl orientado a objetos, Java puede parecer un poco extraño al principio. No se desanime, la orientación a objetos es algo que eventualmente tendrá que aprender, si está considerando una carrera en desarrollo de software, y aprender Java es una buena manera de aprender los conceptos básicos de orientación a objetos, no es una manera perfecta, pero Definitivamente una buena manera.

Y como saben, Perl se interpreta, mientras que Java es ... bueno ... una bestia completamente diferente . En Java, escribe su código como lo haría en Perl, y luego lo compila . El resultado no es un ejecutable, sino un código de bytes de Java . Este formato de intermediación se ejecuta (¡finalmente!) En la máquina virtual Java , que es algo análogo al intérprete de Perl. Se debe instalar una JVM de antemano para que se ejecute un programa Java, de manera similar sobre cómo necesita instalar un intérprete de Perl para ejecutar un script Perl 2 .

Viniendo de un fondo Perl, lo más importante para recordar es el paso de compilación a bytecode: cada vez que realiza un cambio en un archivo fuente Java, necesita volver a compilarlo. Puede parecer una locura al principio, pero la compilación tiene una muy buena consecuencia: su código se verifica por una variedad de errores en esta etapa, y el compilador se niega a finalizar el proceso si hay alguno, y a veces lo ayudará a identificar los errores con mensajes útiles (siempre hay mensajes, pero solo a veces son útiles).

Lo que nos lleva a la última gran diferencia:

Perl es dinámico 3 :

El lenguaje de programación dinámico es un término utilizado ampliamente en informática para describir una clase de lenguajes de programación de alto nivel que ejecutan en tiempo de ejecución muchos comportamientos comunes que otros lenguajes podrían realizar durante la compilación, si es que lo hacen. Estos comportamientos podrían incluir la extensión del programa, agregando un nuevo código, extendiendo objetos y definiciones, o modificando el sistema de tipos, todo durante la ejecución del programa.

y tipeado dinámicamente 4 :

Se dice que un lenguaje de programación se tipea dinámicamente cuando la mayoría de su verificación de tipo se realiza en tiempo de ejecución en lugar de en tiempo de compilación.

y Java se escribe estáticamente :

Se dice que un lenguaje de programación usa escritura estática cuando la verificación de tipo se realiza durante el tiempo de compilación en lugar del tiempo de ejecución.

Lo cual, para decirlo de la manera más simple posible, significa que en Java debe declarar el tipo de sus variables y métodos antes de usarlos. Hay otras diferencias, pero no me gustaría arruinar la diversión de descubrirlas por ti mismo :)

Y, finalmente, hay una diferencia muy importante: Java es el lenguaje ideal de la academia 5 y del mundo corporativo, mientras que rara vez se encontrará con Perl en un entorno académico (donde la conocí por primera vez), y sus perspectivas profesionales se están reduciendo. (todavía hay bastantes trabajos, pero ni mucho menos como Java, lenguajes .Net o PHP). No comentaré las razones, solo estoy exponiendo los hechos (tristes). Como todavía eres muy joven, al aprender Java estarás un poco más preparado para un título en Informática, si eliges seguir ese camino.

No renuncies a Perl, por supuesto, pero explora Java. El hecho de que sean más diferentes que similares también significa que aprenderá enfoques y mentalidades de programación bastante diferentes, es un camino difícil pero que finalmente lo convertirá en un mejor programador.

1 "Tim Toady"

2 La comunidad Perl está explorando activamente la posibilidad de una máquina virtual Perl, a través de Parrot .

3 Dinámico no siempre significa tipeado dinámicamente.

4 Perl se escribe dinámicamente para tipos definidos por el usuario, estáticamente escrito con respecto a la distinción de matrices, hashes, escalares y subrutinas, y fuertemente tipeado a través de use strict, por lo que esencialmente es un lenguaje de sistema de tipo variable, pero para mantener un cierto sentido de cordura, llamémoslo dinámicamente mecanografiado.

5 Hasta el punto de abuso, como Joel Spolsky escribe en The Perils of JavaSchools .

Yannis
fuente
66
En comparación con Perl, Java no es un lenguaje de alto nivel. Se necesita mucho más código Java para escribir algo que el código Perl.
tchrist
1
@tchrist ¿Qué tiene que ver la cantidad de código con respecto a si un idioma es de alto nivel o de nivel más alto / más bajo que otro idioma?
Yannis
1
@YannisRizos Eso es bastante fácil de responder. Si se necesita más código, entonces no se trata de una capa de abstracción lo suficientemente alta. Un ejemplo deslumbrante es el manejo poco fiable de cadenas de Java. No admite el concepto de alto nivel de puntos de código Unicode abstractos, excepto en el motor de expresiones regulares en Java 7. Eso genera una gran cantidad de teclas malarkey debido a lo bajo que se compara un lenguaje Java con Perl.
tchrist
@tchrist La subjetividad del término no permite mucho espacio para una comparación sensata, las líneas son demasiado borrosas y ambos idiomas tienen una gama extremadamente amplia de características, algunas de las cuales son de muy alto nivel y otras de bajo nivel. Entonces, seguiré pensando que están en el mismo nivel y no me preocuparé mucho por eso. Tuve una conversación similar aquí , lo que me inspiró a no perder el tiempo comparando idiomas;)
yannis
@YannisRizos No puede encontrar un concepto de alto nivel en Java del que Perl carece, pero puede encontrar muchos conceptos de alto nivel en Perl del que Java carece. Por lo tanto, Perl es de mayor nivel. Perl tiene punteros de función; Java no lo hace. Perl tiene sobrecarga del operador; Java no lo hace. Perl tiene destructores deterministas; Java no lo hace. Perl puede sobrecargar funciones por tipo de retorno; Java no puede. Puedo seguir así por mucho tiempo. Usted, por supuesto, continuará 'sintiendo' como más le agrade, y por cualquier razón, pero no se debe a un análisis subjetivo.
tchrist
2

Bueno, ambos usan una sintaxis tipo C: punto y coma, llaves y similares. Personalmente, cuando intenté hacer un cambio de Perl a Java hace varios años, lo más importante que me hizo tropezar fue la programación orientada a objetos. Había desarrollado algunos objetos en Perl, pero me dolía la cabeza tratar de imaginar la vida en el Reino de los sustantivos.

Kyle Hodgson
fuente
@downvote, ¿por qué? (No estoy tan enamorado de la respuesta, solo tengo curiosidad por saber qué te pareció tan problemático.)
Kyle Hodgson
1

Tomar una puñalada en una respuesta alternativa, ya que la seleccionada actualmente parece centrarse en las diferencias entre los dos (realmente no hay muchas similitudes entre Perl y Java).

Similitudes

  • Ambos son similares a C (tienen bucles, tirantes y punto y coma)
  • Son principalmente imprescindibles
  • Tampoco producen binarios compilados
  • Ambos son muy maduros
  • Ambos son probados en batalla en la empresa (Perl más como ops glue y Java más como aplicaciones / servicios)
  • Ambos son populares
  • Ambos admiten orientación a objetos
  • Ambos tienen una amplia gama de marcos disponibles
  • Ambos tienen libros publicados sobre ellos.
  • Ambos son de mayor nivel que C / ensamblaje
  • Ambos son "lentos" (para varios escenarios específicos de lentitud en que ninguno de los dos es C / ensamblaje)
  • Ambos administran la memoria automáticamente ("recolección de basura")
  • Tampoco están de moda / cool a partir del verano de 2012
  • Ambos están arraigados en la comunidad de código abierto
  • Ambos están disponibles para muchas plataformas.

Si su código Perl es muy riguroso y ortogonal (bien probado, bien documentado, utiliza Moose u orientación estricta a objetos), esos conceptos se llevarán muy bien a Java, ya que Java es extremadamente ortogonal y no tan expresivo.

Mark Canlas
fuente