CULTURA Y TECNOLOGíA

Manual de prácticas para Python desde cero [PDF|900 KiB]

#11 Venga... Javascript? En serio?

Javascript está donde está sólo porque es el único lenguaje que interpretan todos los navegadores, pero como lenguaje de programación es un pastiche que pasará a la historia como la mayor violación del principle of least astonishment (PoLA) de un lenguaje conocido.

Y para muestra... un repo :-D
github.com/denysdovhan/wtfjs (quicir: WTF, JS)

Respecto a Python es precisamente su semántica de líneas e indentación la que lo convierte en uno de los lenguajes más legibles, a mi juicio el más legible, y comprensible incluso por programadores que jamás hayan leído una línea de Python (si es que aún queda alguno).

Comparativamente, el wtfpy, resulta hasta enternecedor.
#107: ¿Sabías que JavaScript también se puede indentar?

De hecho yo rara vez he visto código JS no indentado, y aunque lo viera... ¿Sabías que se puede indentar automáticamente? Y lo que es mejor, adaptarlo a mis ojos, no tener que seguir la forma de ver del creador de Python, que él tendrá sus ojos, pero y no tengo por qué ser igual que él. Porque esa es otra, se piensan que la forma de ver de todo el mundo es igual, no se dan cuenta de que lo que para una persona es demasiado compacto para otra puede estar demasiado disperso. Se piensan que todos salimos de un mismo molde. :palm:

¿Y sabes cuál es para mi la principal diferencia entre JS y Python? Que en JS he podido hacer cosas, en Python NO, lo tuve que dejar por imposible, no soporto eso de tener que estructurar el código con espacios.

En JS si no quiero usar el operador "+" para concatenar cadenas de texto, tengo esa opción, Python en cambio no da ese tipo de libertades, tiene que ser todo como su creador diga.

En mi opinión JS se adapta al programador, en cambio en Python es el programador el que se tiene que adaptar a Python.
#108 ¿Sabías que JavaScript también se puede indentar?
Qué remedio. Aunque desde conocí Typescript no he vuelto a tocar Javascript ni con un palo.

En JS si no quiero usar el operador "+" para concatenar cadenas de texto, tengo esa opción
En Python también:
cadena = ("un trozo" "de la cadena" ", y también puedes" "incluir saltos de línea")
es perfectamente válido.

Más allá de tu experiencia personal con ambos lenguajes o de la mía, que es la de llevar un buen puñado de años ganándome la vida con esto, y de las "formas de ver" y gustos que tenga cualquiera, la legibilidad es un concepto perfectamente cuantificable.

La cuestión no es que "puedas" indentar, sino que la indentación, al tener una semántica, te permite interpretar el código sin buscar relaciones ocultas por llaves. No puedes engañar al ojo con Python. Javascript sin embargo, lo hace constantemente.

Puedes estar seguro de que jamás encontrarás a Javascript en los primeros puestos en una encuesta sobre legibilidad. Aunque quizás sí te encuentres a Coffeescript... cuya diferencia más notable con Javascript consiste en sustituir las llaves por indentación :-D
#111: Yo no me gano la vida programando, pero si uso la programación y puedo decir varias cosas:
- Prefiero la estructuración del código mediante "llaves ocultas" (como dices) a tener que andar quitando y poniendo espacios para hacer una triste prueba para localizar un fallo.
- Yo siempre indento JavaScript y lo hago a mi gusto, no al gusto de los creadores de JS. El código resultante es muy legible a mis ojos.
- Me gusta tener las cosas bien separadas, si tengo un IF me gusta ver la condición entre paréntesis, si no me pones paréntesis me cuesta diferenciarla. Como dije, cada persona tiene sus ojos y yo tengo los míos.

Yo como ejemplo pondría esto:
github.com/shaise/FreeCAD_SheetMetal/blob/917c4fcecde8120b046be213b47d
Mira la línea 157 y siguientes, a lo mejor tú lo ves claro, yo, sin llaves, sin paréntesis... no.

Y eso que está coloreada la sintaxis, con JavaScript yo he usado hasta el Bloc de notas.

¿Resultado? Soy incapaz de programar en Python sin mandarlo a freír espárragos antes de 6 horas de "trabajo", a lo mejor no seré profesional, pero un lenguaje de programación es mejor si es asequible a todo el mundo y no restringido a profesionales.
#113 Joder, es que ya hay que ser cutre para indentar con dos espacios xD

A partir de 157 cada "def" es una función que termina cuando aparece el siguiente el elemento al mismo nivel de indentación. Es decir, es como el formato clásico de lista:

- elemento uno
    - elemento dos
        - elemento tres
- elemento cuatro

Todos ahí vemos claramente que el elemento "dos" está incluido en el "uno", que el "tres" lo está en el "dos" (y por tanto en "uno") y que el elemento "cuatro" está al mismo nivel jerárquico de "uno".

un lenguaje de programación es mejor si es asequible a todo el mundo y no restringido a profesionales

Totalmente de acuerdo. Y esa es la opinión mayoritaria que he escuchado sobre Python, y no tanto sobre Javascript. Con lo de "me gano la vida con ello" no quería dar a entar que por ello mi opinión sobre su legibilidad fuese más válida que la de otros, sino dar a entender que mi experiencia o gusto personal tampoco es un argumento a favor o en contra. La legibilidad es totalmente cuantificable, en base a un montón de parámetros (de los cuales desconozco más de la mitad), y en ese aspecto lenguajes como Python, Haskell o Smallscript aparecen siempre en los primeros puestos.

Obviamente en nuestro caso, que ya sabemos programar, nuestro bagaje pesa más que esos aspectos porque, digámoslo así, tenemos el entendimiento viciado. Y que conste que las llaves no me disgustan en absoluto, mis problemas con Javascript son otros. De hecho Kotlin me parece una auténtica virguería (y me reconcilió con la JVM, algo que no hizo ni Jython). Y Go no estaría mal si no fuese por esa lamentable gestión de errores a las que les ha llevado querer renegar de las excepciones y del try-catch-finally para acabar enmascarándolo en panic, recover y defer.
#115: Yo normalmente indento con uno o dos, si pongo mucho más el código se me hace demasiado disperso. xD

Lo que si tengo que decir es un problema que está apareciendo en JS y en otros lenguajes: el exceso de atajos. Para el que programa mucho están bien, pero para los que no se dedican a ello... es una barrera porque es fácil no saber lo que se hace, con lo que al final es posible que veamos programas "para profesionales" y otros desarrollados a bajo nivel por gente más aficionada donde haya reglas que limiten el número de funciones del lenguaje usado.
#116 Sí, ese riesgo de la "jerga" siempre está ahí, pero por suerte las herramientas de análisis estático en JS están cada vez más pulidas (como "xo") y pueden reparar códigos que a simple vista uno preferiría volver a escribir antes de enfrentarse a ellos :-D

La verdad es que en los últimos años todo mi acercamiento a JS, ya fuese en el front con React o Vue o en back con Node ha sido a través de Typescript. Y ya últimamente, en VSCode, en el que Typescript se integra perfectamente y que han acabado convirtiendo la experiencia de programar para el browser en una actividad insospechadamente placentera xD

Y respecto a los espacios en blanco, debo reconocer que es algo que he tenido que ir corrigiendo a lo largo de los años. Recordándome que los enters son gratis, que el código está hecho principalmente para ser leído y obligándome a pensar en ocasiones en cómo vería ese código si no lo hubiese escritro yo, lo que me ha hecho en muchas ocasiones sustituir one-liners con atajos como los que comentas por dos o tres líneas mucho más evidentes a simple vista.

A mi juicio, que sea sencillo y explícito son las mejores cualidades que puede tener un pedazo de código cualquiera. Y después viene todo lo demás.

menéame