Para un chico de Java, Python es un juego anárquico donde cualquiera puede agarrar un palo y comenzar a golpear tu cabeza.
Para un tipo de Python, Java es un universo orwelliano donde estás constantemente encadenado a la visión decreciente de otra persona de cómo funciona el universo.
La verdad es que todo lo que puede hacer en un idioma puede hacerlo en el otro igual de limpio. Sin embargo, como ha mencionado, hay una diferencia importante en ambas comunidades en cuanto a lo que significa limpio .
Manera Java:
un sistema limpio es aquel que hace lo que está destinado y nada más, no permitirá extensiones o modificaciones que vayan en contra de la naturaleza del propósito previsto e intentará hacerlas cumplir tanto como sea posible a través del compilador. La flexibilidad se obtiene mediante la elaboración cuidadosa de interfaces simples dentro de estructuras estrictas. En Java, la caja de arena de uno siempre debe estar claramente delimitada y sobrepasarse, esto se debe a la rápida respuesta del compilador. Java proporciona medios para definir estáticamente estructuras de objetos y crear interacciones dinámicas a partir de instancias de ellos. Cuando trabajo en Java, trato de crear inteligentemente bloques de construcción básicos para una solución con muerte cerebral. Sobre todo trabajo de abajo hacia arriba una vez que tengo una teoría de trabajo sobre cómo abordar el problema.
Java tenderá a producir un gran software que puede abarcar grandes equipos y proporciona herramientas y medios para mantener a raya a la bandada. Si no se controla, esto conducirá a equipos muy separados que trabajen de forma independiente hacia un objetivo cada vez más incierto. Finalmente, cada equipo se convierte en su propia "razón de ser" y el sistema en su conjunto se diluye conduciendo por el mal camino del proyecto principal. Esto puede conducir a excesos de costos extremos y enormes sistemas de software que funcionan y se mantienen mal.
Casi nunca hay una pequeña forma rápida y fácil de hacer cosas en Java, pero el IDE y las herramientas están ahí para realizar tareas dolorosas a solo unos clics de distancia.
Python:
Clean significa conciso y fácil de leer. Un buen sistema de Python está diseñado para permitirle llegar directamente al corazón y exponer sus secretos más íntimos de una manera que pueda comprender del código el uso previsto y el propósito del mismo. También le permitirá diseñar su propia solución extendiendo y / o encapsulando el diseño original para que vaya exactamente en su dirección. Python proporciona medios para crear plantillas de objetos desde las cuales puede cambiar dinámicamente la instancia para que se ajuste a las necesidades disponibles. En python tiendo a resolver el problema de inmediato y luego distribuir el código en una estructura lógica de tal manera que la solución final siga siendo lo más simple y legible posible. En python tiendo a trabajar de arriba hacia abajo y gestionar las complejidades de aumento a través de un enfoque de divide y vencerás.
Los equipos de Python tenderán a producir sistemas ligeros y serán muy rápidos en la entrega de una solución de trabajo. Tienden a ser un grupo muy unido que trabaja indistintamente en cualquier parte del sistema validando la solución de cada uno cada vez que tengan la oportunidad. Se alimentan unos de otros creando una sinergia que es bastante estimulante. Sin embargo, esto crea equipos que son difíciles de escalar a sistemas más grandes y que a menudo golpean una especie de techo de cristal. La introducción de nuevos miembros en el equipo ayudará, pero llevará algún tiempo que el conocimiento se extienda lo suficiente como para que se sienta la productividad adicional. Luego, el equipo se divide y la visión general constante sobre todo el sistema se diluye al igual que la atmósfera de los primeros días. Esto puede conducir a un código demasiado complicado para lo que alguna vez fue un problema simple,
Casi siempre hay una manera rápida y fácil de hacer cosas con Python, pero la complejidad puede ser más difícil de controlar una vez que el sistema alcanza un cierto umbral.
En resumen, ambos tienen un lado oscuro y ambos tienen una fuerza clara. Sin embargo, al pinchar a lo largo de ambas comunidades, encontrará que la fuerza de uno conduce al lado oscuro del otro y viceversa.
De ahí los acalorados debates sobre cuál es el mejor.
Bueno, Python no tiene interfaces, tiene metaclases, y permite escribir pato. Python tiene listas de comprensión, que son muy poderosas y no existen en Java. Java tiene un sistema de tipo rico con muchas estructuras de datos, y Python solo tiene listas. Entonces, si está aprovechando lo que tiene Python en lugar de intentar recrear lo que Java tiene en Python, probablemente esté escribiendo código Pythonic.
Pero en lo que respecta al código OO, hay ciertos fundamentos de estilo que no deberían cambiar de un idioma a otro: siempre debe esforzarse por escribir código que sea tímido y SECO, ya sea que esté escribiendo en Applescript, Python, Java o C ++.
----Editar----
Como @delnan señala pedagógicamente, en realidad hay CINCO tipos de datos compuestos definidos por Python en el nivel de Kernel (list, dict, tuple, set y frozenset, según mi copia de "Python in a Nutshell"). Si bien esto es cierto, en realidad no es relevante para el punto que estoy tratando de hacer: Python se basa en listas como la estructura de datos esencial. Sí, PUEDE usar una lista como una pila, pero puede usar exactamente la misma lista que una cola. Y luego una pila de nuevo.
Java, por otro lado, tiene una estructura de datos del núcleo (matriz, de acuerdo con la "Guía de bolsillo de Java"), pero en general, no se puede hacer mucho en Java sin importar colecciones. Una vez que haga eso, tendrá acceso a una biblioteca de tipos 'rica' (en este sentido me refiero a inmensamente compleja) con la que obtener la misma funcionalidad que tenía con la lista de Python.
Por supuesto, ambos idiomas tienen clases y Java tiene interfaces, pero si bien son tipos de datos compuestos, en realidad no son estructuras de datos en el sentido de un libro de texto.
Una diferencia es que no puede hacer estallar un elemento de una cola de Java, y no puede pasar un objeto de cola de Java a un lugar que espera una lista enlazada de Java. Tal vez por "rico" me refiero a "rígido".
Entonces, para explicar lo que quiero decir al decir "Python solo tiene listas", lo que quiero decir es que puedes hacer casi todo lo que necesitas hacer en Python que harías con las Colecciones de Java usando el tipo de Lista de Pythons. Este tipo único hace el trabajo de muchos tipos en Java.
¿Qué significa esto para el programador de Python? Significa que puede aprovechar el tipo de Lista de Python para escribir código directo y muy concisa sin el uso de bibliotecas adicionales, y la concisión (es decir, la característica de transmitir más valor en menos caracteres) es una característica central del código "Pythonic" .
fuente