A mediados de 2018, Guido van Rossum, el creador de Python y también conocido entre la comunidad como el "Dictador Benevolente de por Vida" del desarrollo del lenguaje, decidió que abandonaba el barco y se tomaría unas vacaciones permanentes tras 30 años al mando. Sus razones: estaba cansado del odio y de tener que pelear por propuestas para mejorar Python.
#27:
#24 Alguien que confunde tipado fuerte/débil con tipado estático/dinámico (como tú) sí que no puede considerarse en serio. Ambos son conceptos ortogonales.
Python tiene tipado fuerte, pero no sabes lo que és ni por qué. Python lo que es es dinámico. Prueba a meter otro tipo en una variable que ya lo tenga, a ver qué pasa.
Javascript o PHP tienen tipado débil por ejemplo. Python no.
No tienes ni puta idea. Y lo peor es que el mundo de la programación está lleno de ignorantes que hablan sin saber.
#124:
#13 Pues mira... programo en C, php, javascript, etc. que son lenguajes de sintaxis libre. Para que puedas ser libre de escribir el programa en una sola línea si te da la gana se hacen necesarias las llaves. OK. Pero resulta que NADIE escribe como le da la gana. De hecho se han definido determinadas "reglas" de cómo escribir y al que no lo hace así se lo critica mucho.
Al final resulta que terminas escribiendo con las estructuras bien ordenaditas con tabulaciones, lo cual hace innecesarias las llaves que indican el comienzo y el fin: la propia indentación lo indica. Y eso es lo que hace python. A mi me parece genial porque eso te asegura que las cosas se van a ejecutar como las estás viendo. No hace falta un indicador de donde comienza o termina algo. ¿Cuántas veces una llave mal puesta te vuelve loco hasta que descubres lo que pasaba? Al ser la indentación la que manda eso no puede ocurrir.
#7:
#1 Por lo visto su salud tampoco está muy bien.
El episodio de debates que llevó a quedarnos sin una de las figuras más importantes de la ingeniería informática (el tiempo lo pondrá en su sitio) fue bochornosamente trivial, promovida por un grupo de ofendiditos con más ego que talento.
Tuve la oportunidad de charlar con él hace casi 10 años, y era un tipo humilde y asertivo, poco que ver con el arquetipo de rockstar developer al que nos tiene acostumbrados este tipo de profesionales. Definitivamente no merece lo que le ha pasado.
Más o menos, en la PEP 572 se sugería incluir el operando := para asignar variables usando expresiones, así :
while a:=b.read(10):
print(a)
Es algo trivial porque si no quieres usarlo basta con omitirlo sin más repercusión en retrocompatibilidad.
Por diversos motivos parte de la comunidad se puso en contra, pero algunos decidieron defender su postura apoyándose en ataques personales a Guido.
Guido hasta hace poco era el Dictador Benevolente Vitalicio del lenguaje, y tomaba las decisiones de forma colegiada, pero bajo su firma. Desde entonces ha decidido que el que quiera peces que se moje el culo, especialmente cuando los peces eran gratis.
#23:
#11 Python es el retorno al camino que la informática perdió con el Java. El retorno a la programación intuitiva y simple que nació en los 80 y que posibilitó el salto tecnológico de la revolución digital.
Con Java nunca lo habríamos conseguido.
Ahora solo nos queda enviar al paro o a la cárcel a todos los que aún defienden arquitecturas basadas en Java y el mundo por fin volverá a ser un lugar hermoso y próspero.
#43:
#31 Independientemente de lo mucho o poco que sepas de Python, lo que está claro es que eres un impresentable por dirigirte a las personas de esa manera.
#24 Alguien que confunde tipado fuerte/débil con tipado estático/dinámico (como tú) sí que no puede considerarse en serio. Ambos son conceptos ortogonales.
Python tiene tipado fuerte, pero no sabes lo que és ni por qué. Python lo que es es dinámico. Prueba a meter otro tipo en una variable que ya lo tenga, a ver qué pasa.
Javascript o PHP tienen tipado débil por ejemplo. Python no.
No tienes ni puta idea. Y lo peor es que el mundo de la programación está lleno de ignorantes que hablan sin saber.
#27 Python no tiene tipado fuerte obligatorio como tienen otros lenguajes como Java o C. El tipado que tiene es opcional y solamente en su rama 3.x. Y aún así no es fuerte, es tipado débil. El fuerte es el que tiene C o Ada.
Eres un ignorante que encima te permites el lujo de dar lecciones a los demás. Y el que no tienes ni puta idea eres tú, que insultas sin saber y estás lleno de odio.
#28 Sigues negando la mayor, ¿has leído lo que puse? No sabes ni de lo que estoy hablando, dudo que quepa en tu cabeza. Pero bueno, ser ignorante es libre.
Decir que C tiene tipado fuerte cuando un byte es lo mismo que un char y un puntero puedes cambiarlo por un int y otras muchas promiscuidades y puedes mezclarlo todo como te dé la real gana es de risa. Tiene un tipado tan fuerte que no paran de salir vulnerabilidades cada poco precisamente por ello.
Pero cuando la neurona no da para más, la única deducción posible que os queda mientras os babáis encima es que si ves los tipos es tipado fuerte y si no los ves no.
Si vas a contestar, intenta no cagarte encima por el esfuerzo.
#31 Independientemente de lo mucho o poco que sepas de Python, lo que está claro es que eres un impresentable por dirigirte a las personas de esa manera.
#45 Los ignorantes como yo, agradecemos tus enlaces y apuntes.
Sin embargo, si fueras profe y trataras así a tus alumnos, no tendrías muchas simpatías.
#56 Ya he sido profesor (programación Android) y acabaron muy contentos los alumnos. También fui muchos años monitor de tiempo libre en diferentes ámbitos y nunca tuve un problema para "ganarme" a la gente. De hecho una de las características que más pesan a la hora de que te valoren los demás es precisamente el no dejarse amilanar (que no es lo mismo que abusar).
Sucede que en forma presencial la gente no se atreve a trollear o a abrir tanto la boca sin saber.
Cuando alguien hace una afirmación de ese tipo desde la ignorancia y con la intención de creerse superior y provocando, hay que ponerle en su sitio. No por el propio sujeto, que por mí puede comer una ensalada de cuchillas de afeitar o criar champiñones, es por no extender mitos sobre la materia repetidos hasta la saciedad una y otra vez y que como ofrecen razomaientos fáciles pueden contagiar a gente que tiene menos experiencia.
#63 Eso mismo puedes hacer con C y cosas peores que no te permite hacer Python. Lo que tú has hecho es redefinir una variable, nada más.
Sigues confundiendo fuerte y débil con dinámico y estático.
Python no hace conversiones implícitas como te lo permiten C, Visual Basic o JavaScript. Python está más en la línea de Java.
"Smalltalk, Perl, Ruby, Python, and Self are all "strongly typed" in the sense that typing errors are prevented at runtime and they do little implicit type conversion, but these languages make no use of static type checking: the compiler does not check or enforce type constraint rules. The term duck typing is now used to describe the dynamic typing paradigm used by the languages in this group."
#63 Tengo la impresión de que, en realidad, cuando él habla de tipado fuerte o débil se refiere realmente a esto:
raster@debian:~$ python3
>>> "hola" + 5
Traceback (most recent call last):
File "", line 1, in
TypeError: can only concatenate str (not "int") to str
>>>
raster@debian:~$ python2
>>> "hola" + 5
Traceback (most recent call last):
File "", line 1, in
TypeError: cannot concatenate 'str' and 'int' objects
>>>
raster@debian:~$ gjs
gjs> "hola" + 5
"hola5"
gjs>
Con lo que, aunque en la función puedes meter variables con cualquier tipo, si luego en el código de dentro de la función los tipos no son los esperados, en python acabará dando un error, pero en javascript probablemente no lo de. De ahí que yo, personalmente, sí considere a python como de tipado fuerte, y a javascript de tipado débil.
(aunque luego hay excepciones, como "hola" * 5, pero bueno, ese es un caso específico, en mi opinión 😇 )
Luego lo de que C es de tipado débil, yo diría que no, porque aunque se pueden pasar tipos similares (meter un char donde hay un int), te envía un warning siempre que haga una conversión "problemática". Y un programador que acepte que su código en C compile con warnings no es un buen programador, en mi opinión.
#80 habiendo definiciones claras, no vale la excusa de que "a lo que yo me refiero por tipado fuerte es a...". Python tiene tipado fuerte. c tiene tipado débil. No es cuestión de opinión.
Pues que has sustituido la referencia de a al objeto 4 de tipo "int" por una referencia al objeto a de tipo "str".
Además de demostrar que no tienes ni idea de´la diferencia entre "débilmente tipado" y "dinámicamente tipado", por supuesto.
En términos que hasta alguien más empeñado en diatribas barriobajeras que en aprender algo podría entender: en Python las variables no son cajas, son etiquetas.
#27 y hoy en día, si programas como dios manda, tus funciones no serán de más de 5 líneas y en ellas no harás asignación múltiple a la misma variable (por eso de intentar mutar el estado lo menos posible) así que, con marcar el tipo de los argumentos de la función (PHP 7 ya permite tipar argumentos y retornos) esa "gilipollez" del tipado fuerte... Pierde para mi opinión importancia (siempre he pensado que es más una protección antiñaperos que otra cosa)...
#39 Depende mucho. Tras conocer un lenguaje super estricto como Rust, para cosas como sistemas o programación con asíncrona es muy valioso ya que te evita un montón de errores complicados de evitar y muy fáciles de cometer sin saberlo.
De hecho C y C++ como lenguajes son una mierda pinchada en un palo en este aspecto. Son auténticos coladeros de problemas invisibles. Mucho tipado y mucha historia y no sirven para evitar casi nada en la práctica.
Para la mayoría de casos de aplicaciones no críticas, es sólo relativamente relevante.
#44 bueno, no te quito la razón, pero tenemos que cambiar de objetivo del lenguaje... Y, aún así, con tests y funciones pequeñas y realmente testables... Sigo pensando que es poco necesario, no sé si lo aprovecharán para algún tipo de optimización, quizás ahí si ofrezca ventajas pero fuera de eso... No sé muy bien que ventajas me puede ofrecer...
Más o menos, en la PEP 572 se sugería incluir el operando := para asignar variables usando expresiones, así :
while a:=b.read(10):
print(a)
Es algo trivial porque si no quieres usarlo basta con omitirlo sin más repercusión en retrocompatibilidad.
Por diversos motivos parte de la comunidad se puso en contra, pero algunos decidieron defender su postura apoyándose en ataques personales a Guido.
Guido hasta hace poco era el Dictador Benevolente Vitalicio del lenguaje, y tomaba las decisiones de forma colegiada, pero bajo su firma. Desde entonces ha decidido que el que quiera peces que se moje el culo, especialmente cuando los peces eran gratis.
#12 Una pena que se torne en algo personal, pero estaría de acuerdo en que me parecería mejor no incluirlo.
No tengo claro lo d que simplemente puedas ignorarlo cuando no deja de ser un lenguaje de uso común. En gran medida el propio lenguaje se convierte en decálogo de normas de uso. Ese lenguaje y su sintaxis restringe las cosas que puedes hacer.
#11 Python es el retorno al camino que la informática perdió con el Java. El retorno a la programación intuitiva y simple que nació en los 80 y que posibilitó el salto tecnológico de la revolución digital.
Con Java nunca lo habríamos conseguido.
Ahora solo nos queda enviar al paro o a la cárcel a todos los que aún defienden arquitecturas basadas en Java y el mundo por fin volverá a ser un lugar hermoso y próspero.
#c-24" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/3059149/order/24">#24 Pero vaya chorrada acabas de escribir. Llevo 5 años trabajando con Python y 2 con Java y ... ¿Sabes una cosa que me encanta del Python?
Que cada puta línea de código que escribo sé para qué es y por qué coño esta ahí. Eso no pasa con Java o con C# que si no es por el IDE que te mete código a cascoporro sin saber por qué ni para qué, no podrías escribir ni un puto programa de tirón.
Y de verdad que flipo con todas esas mierdas de la inyección de dependencias. Son parches (malos) por lo fuertemente tipado que es el C# o el Java. Parches para hacer lo que con Python haces de una manera natural ... sin darte apenas cuenta.
Por no hablar ya de leer código que ha escrito otro. En mierdas como Java a veces es una puta pesadilla.
#c-74" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/3059149/order/74">#74 Pero eso no es culpa del lenguaje, si no de las bibliotecas y la metodología de desarrollo que uses. Yo me tiré 2 años programando en C# y lo que vi es que el código era tan compacto como en Python, pero con la ventaja adicional de usar tipado estático.
#c-81" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/3059149/order/81">#81 Sinceramente no le veo ninguna ventaja al tipado estático. Y el código es compacto pero no por el C# en sí, sino por el propio framework que normalmente te obliga a compactar y estructurar. Después de trabajar 3 años en Python y meterme con Java de repente va y me entero de que había una "cosa" llamada inyección de dependencias ... y yo me preguntaba cómo coño no me había enterado de que eso exisitía. Y es que en Python no sólo no es necesario, sino que no tiene ningún sentido. Al final cosas como esa (hay muchas más como los "interfaces" que no son más que un puto parche) son las que hace que tu código se llene de "cosas" que tienen que estar pero sólo tienes una idea "filosófica" de qué coño hacen.
Eso en python no pasa. A mí no me pasó ni cuando empezaba a trabajar con él.
#83 Si no le ves ventajas al tipado estático, es porque no has escrito ningún programa lo suficientemente grande o crítico. Python está muy bien para cosas pequeñas, pero no para un programa de cientos de miles de líneas de código. No sabe que datos acepta y que devuelve cada función, o que te pete el programa en algún punto aleatorio porque no has escrito bien el nombre de una variable no es nada divertido.
Y sí, Java es un horror, en eso estamos los dos de acuerdo, yo lo estoy sufriendo ahora. Pero el mundo del tipado estático es infinitamente más amplio que Java.
#c-86" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/3059149/order/86">#86 No he escrito código en Python de cientos de miles de líneas de código pero sí de decenas de miles de líneas de código y he tenido en python los mismos problemas que en Java o en C#. Porque si Java es un horror, C# es exactamente el mismo horror.
Y esos problemas que tú cuentas los resuelves antes de empezar a escribir planteando la arquitectura y, sobre todo, la estructura de los datos. Que siendo dinámicos en Python y no siendo fuertemente tipado te puedes hacer exactamente el mismo planteamiento pero sin mierdas como los "interfaces", por ejemplo.
#c-88" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/3059149/order/88">#88 A ver, vayamos por partes. Las interfaces de Java son una ñapa que se sacaron por no querer implementar herencia múltiple. C++ no necesita interfaces, y es estático. JavaScript es dinámico, y hasta hace poco su modelo de objetos era infumable.
Y precisamente cuando tienes que manejar estructuras de datos complejas es cuando mas útil resulta el tipado estático. Yo en lenguajes como C++ o C# he definido estructuras muy complicadas con mil templates que en Python serían imposibles de manejar. En un lenguaje estático el compilador te ayuda a verificar que haces un uso correcto de los tipos y de las variables, en uno dinámico tienes que escribir mil tests. ¿Por qué tengo que perder el tiempo verificando yo algo que el compilador puede hacer por mí?
Te lo vuelvo a decir, ni C# tiene porqué ser ningún horror, ni Python es esa maravilla que dices. He visto código en C# muy legible, y código en Python que te hacía querer arrancarte los ojos.
Y en serio, mira más allá de estos lenguajes. Mira lenguajes como Haskell, Rust, la familia ML, Scala, Kotlin, TypeScript, etc. como ejemplo de lenguajes estáticos modernos.
#c-91" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/3059149/order/91">#91 A ver. Reconozco que tengo cierta querencia por Python ya que es el primer POO que aprendí. Y reconzco que Java y C# tienen su cosa. Por ejemplo .. gracias a Java me hice mucho más "fuerte" en la POO ya que Java es la única opción que te deja. Y eso me ayudó a ser mejor y a cambiar mi manera de pensar como programador.
PERO
Lo que yo digo es que el que sea fuertemente tipado o no lo sea, no lo hace mejor o peor. JavaScript es una caca ... pero me gusta lo que se puede hacer con él. TypeScript es básicamente lo mismo pero en "bonito" y con mucha mejor estructura y, sinceramente, creo que la diferencia entre JavaScript y TypeScript es, básicamente, que ves de una manera más sencilla la estructura de los datos y de las clases. Nada más. Hacen casi lo mismo y se ejecutan más o menos en el mismo tipo de entornos.
Luego te encuentras con mierdas como el JQuery que para mi gusto es insoportable. Tiene una sintaxis de locos y hace que cualquier chorrada sea una mierda difícilmente legible.
Y gracias por el comentario de las interfaces. Así es ... un parche porque no admite herencia múltiple. Y yo me pregunto si es un parche porque sí o es un parche porque precisamente el ser tan fuertemente tipado hace muy difícil que el compilador pueda con esa herencia múltiple.
#c-95" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/3059149/order/95">#95 Empecemos por el final
Y gracias por el comentario de las interfaces. Así es ... un parche porque no admite herencia múltiple. Y yo me pregunto si es un parche porque sí o es un parche porque precisamente el ser tan fuertemente tipado hace muy difícil que el compilador pueda con esa herencia múltiple.
El problema de la herencia múltiple es que da lugar a ambigüedades en el caso de que dos o más clases padre definan métodos con el mismo nombre, o que dos o más clases padre hereden de la misma clase abuela. Python lo resuelve aplicando la herencia secuencialmente, en el orden en el que las clases están escritas en el código. C++ utiliza un modelo más complejo pero flexible. En general es un problema bastante difícil de resolver.
Los creadores de Java y de C# decidieron no permitir herencia múltiple, y al final han acabado metiendo interfaces con métodos con implementación por defecto, lo cual es una puta ñapa terrible.
A ver. Reconozco que tengo cierta querencia por Python ya que es el primer POO que aprendí. Y reconzco que Java y C# tienen su cosa. Por ejemplo .. gracias a Java me hice mucho más "fuerte" en la POO ya que Java es la única opción que te deja. Y eso me ayudó a ser mejor y a cambiar mi manera de pensar como programador.
Yo aprendí Python allá por el 2005, porque todo el mundo decía que es un lenguaje maravilloso, y es cierto que se aprende en seguida y que puedes hacer mucho con poco esfuerzo, pero cuando el programa crece se vuelve inmanejable. Java tiene muchas otras malas decisiones, como la carencia de tipos enteros sin signo, la diferencia entre objetos y tipos primitivos, la carencia de tipos por valor, etc. Y luego el puto ecosistema, que está horriblemente inflado y para hacer cualquier tontería tienes que instanciar 20 clases
Lo que yo digo es que el que sea fuertemente tipado o no lo sea, no lo hace mejor o peor. JavaScript es una caca ... pero me gusta lo que se puede hacer con él. TypeScript es básicamente lo mismo pero en "bonito" y con mucha mejor estructura y, sinceramente, creo que la diferencia entre JavaScript y TypeScript es, básicamente, que ves de una manera más sencilla la estructura de los datos y de las clases. Nada más. Hacen casi lo mismo y se ejecutan más o menos en el mismo tipo de entornos.
Una cosa es dinámico/estático, y otra fuerte/débil Lo primero tiene una definición clara, lo segundo no, aunque se suele usar como sinómino de conversión automática de tipos. JavaScript es dinámico y débil, Python es dinámico y fuerte. En general, casi cualquier programador sensato considera el tipado débil como un gran error.
Lo de TypeScript, ¿te parece poco? En mi experiencia cuando programas pasas un 10% del tiempo escribiendo código, y un 90% leyendo. Cualquier cosa que ayude a hacer el código más comprensible es buena.
Luego te encuentras con mierdas como el JQuery que para mi gusto es insoportable. Tiene una sintaxis de locos y hace que cualquier chorrada sea una mierda difícilmente legible.
Yo jQuery lo he usado poco, para hacer cuatro animaciones sencillitas y algún formulario dinámico, y para según que cosas te facilita mucho la vida. Para cosas complejas puede ser bastante loco, pero la verdad es que el desarrollo web en general me parece una puta locura
#81 esa ventaja ya no existe, en las últimas versiones Python (3.6+) soporta el tipado estático. No es perfecto por su naturaleza pero para el 90% del uso que le vas a dar al tipado estático te va a servir y para florituras, programación funcionan, etc... generalmente hay `workarounds`
#92 Lo acabo de mirar y es una avance, pero aún le falta mucho. Para empezar, por lo que estoy viendo los tipos se comprueban en tiempo de ejecución, no de compilación, con lo que pierdes las ventajas de robustez y eficiencia que aporta el tipado estático. Y además al ser algo tan nuevo, muchas bibliotecas no lo soportan aún.
De todas maneras, es curioso que muchos lenguajes dinámicos están adoptando tipado estático opcional, debe ser que es útil
#96 es básico si no haces simplemente scripts. Para la comprobación estática hay que usar mypy, lo ejecutas cuando tú quieras o lo íntegras con tu IDE como cualquier linter y a funcionar.
Python ya soporta programación asíncrona bien hecha y lo siguiente será adoptar cuatro cosas que le faltan para ser un lenguaje válido para programación funcional. La verdad que es bastante normal que siga avanzado tal y como avanza. Es casi un estándar en él mundo del software libre.
#96 no se comprueban en tiempo de compilación (que no hay) ni en tiempo de ejecución. Y en cualquier caso no es un "avance". Python es un lenguaje con tipado dinámico y tiene las ventajas y desventajas del tipado dinámico. Necesitamos variedad de lenguajes potentes y Python está cubriendo un nicho muy importante ahora mismo.
#57 Bajo mi punto de vista tienes parte de razón pero creo que se te nota que la POO no es del todo lo tuyo. Yo pensaba como tú al principio pero cuando se te mete la POO en la cabeza ya no hay manera de escribir código sin ella. Es cierto que cuesta. A mí me costó pero te ahorra chorrecientos IF porque no hay que comprobar ni chequear constantamente ya que está implícito en la estrucutra que has hecho.
Te pongo un ejemplo ... tienes que hacer un IF para ver que se cumple una condición y "disparar" algo ... un proceso, una función, un callback ... lo que sea. Si eso mismo lo haces con POO y un patrón de observadores, ese proceso se disparará solo, sin que tengas nada que comprobar. La condición va implícita en el diseño.
#77: Si, pero imagina que empiezas un proyecto experimento donde no sabes:
- Qué vas a poder hacer y qué no.
- Cómo lo vas a programar.
- Dónde vas a acabar si te lías a añadir cosas.
- Casi ni siquiera qué uso va a tener.
Ya digo que es lo que tiene la programación "casual", que se te ocurre una idea, y primero pruebas a ver qué sale, y luego si funciona lo implementas un poquito mejor y intentas añadir algo, si funciona añades más cosas... así hasta que o bien llegas a una barrera infranqueable (para mi) o bien crees que la idea está lo suficientemente trillada y no da más de si, y como mucho lo decoras, lo traduces al inglés o lo subes a una página web para que la gente lo use, subes el código a Github con algunos comentarios y tratando de explicar lo que haces como buenamente puedes, y finalmente te desentiendes.
Luego miras el código... y vale, será una birria, pero si no se hubiera hecho así, no habría nada.
A veces pasa que tienes la idea, intentas desarrollarla... y no da más de si desde el primer momento, y lo deshechas.
#87 Y cómo crees que empiezo yo cualquier proyecto? O cualquier programa casual? Escribiendo algo que es poco más que un "hello world" y a partir de ahí añadiendo estructura.
Pero la diferencia de hacerlo con POO es que esa estructura se va haciendo grande de una manera casi natural. Cuando no trabajas así, en efecto, el final es de traca. Tienes un huevo de funciones desperdigadas e inconexas que al final se te hace imposible manejar. Eso no pasa con POO ya que aunque el experimento, programa o proyecto sea "casual" tiene estructura nada más empezar.
Como te dije antes cuando se te mete la POO en la cabeza ya no puedes pensar de otra manera pero es un poco como aprender un idioma ... primero vas traduciendo mentalmente a tu idioma materno y acabas sin darte cuenta simplemente expresando tus ideas en ese idioma. Y cuando llegas ahí, ya no hay vuelta atrás.
Es que a veces uno ni siquiera sabe qué va a hacer 30 líneas de código después. Solo tienes un fichero en formato propietario con una imagen incrustada dentro, y la quieres sacar a un "canvas" o a lo que sea mediante JavaScript y una página web. Pues bien, primero empiezas mirando si eres capaz de leer un determinado byte del fichero. ¿Eres capaz de leerlo? Guay. Luego miras a ver si puedes poner un puntito rojo en un "canvas" (lienzo), y pruebas a poner un pixel rojo, y ahí empiezan los problemas, que por el motivo que sea, el "canvas" no hace ni caso, miras códigos, haces cambios a ver si suena la flauta... hasta que al final consigues poner un punto rojo, y entonces ya es cuando te pones a enlazar una cosa y la otra poco a poco hasta que consigues lo que intentabas al principio.
Y luego si todo va bien, lo mismo intentas añadir alguna funcionalidad nueva, algún botón para hacer algo que se te ocurra...
Pero primero tienes que conseguir eso, ser capaz de leer el fichero y de conseguir colocar ese contenido en un lienzo. Para mucha gente es algo obvio, pero para mi, que he estudiado una carrera con una única asignatura de programación... no.
#94Para mucha gente es algo obvio, pero para mi, que he estudiado una carrera con una única asignatura de programación... no.
Nada es obvio y haber estudiado una carrera dedicada a la programación o haber aprendido por tu cuenta requiere (hoy en día gracias a Internet) prácticamente el mismo esfuerzo. Ese esfuerzo lo puedes hacer en tus ratos libres o de 8 a 2 en la facultad. Pero costar a todos nos ha costado.
En cuanto a lo otro que dices es que yo creo de verdad que "no has llegado". Sin ningún ánimo de ofender y sin ir de sobrado. Yo puedo hacer 3 pruebas o 23 para ver cómo coño pongo ese puntito en el canvas pero en cuanto lo he puesto, esas pruebas no son EL CÓDIGO, sino que pasan a formar parte del código. Que es muy distinto. En cuanto resuelvo el problema, le meto estructura a todo y luego lo dejo crecer.
Prueba la próxima vez y verás que aunque cuesta esfuerzo, cuando lo has hecho dices .... coño, qué bonito!! Porque no se trata (para mí) sólo de lo que haces ... sino de cómo lo haces. Y el código a veces lo sientes como si fuera poesía ... lo ves hermoso y no puedes parar de mirarlo una y otra vez. No sé .... tal vez esté exagerando bastante pero yo me siento mejor cuando he escrito algo bueno. No solamente cuando he resuelto un problema (que también me hace sentir bien).
#87#77 Comparto mucho vuestras opiniones, al final se trata de alternativas diferentes con sus pros y sus contras. En general creo que los informáticos valoran poco su formación teórica y muchos programan por improvisación. Respecto al uso de patrones, me parece que tiene el problema que a veces el código que te queda es totalmente irreconocible a menos que conozcas muy a fondo cual es toda la estructura.
También imagina que quieres tocar un código con el que no eres familiar, con el que quieres hacer algo simple, o que tienes que añadir alguna funcionalidad nueva (que quizás ya no sea tan simple). A veces tener diseños muy elaborados se convierte en un obstáculo en el que la lógica de lo que quieres hacer no es evidente porque está oculta en el diseño informático.
#35 Soy de la vieja escuela. No uso ide, solo vim, un lenguaje no debería de ir asociado a la herramienta de introduccion.
Con cualquier otro lenguaje en el editor pulsando un shortcut me queda todo auto indentado, en python eso no es posible.
Ya me direis donde está la ventaja.
En proyectos complejos todas estas mierdas se notan bastante, hice un proyecto con pyqt y nunca mais, mucho más comodo y rápido programar en c++.
#c-40" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/3059149/order/40">#40 si te gusta C, usa C, yo no voy por ahí quejándome de que ADA no sea F#
#76: Si, pero es que C se limita mucho a la consola, salvo que entres en bibliotecas especiales. JavaScript tiene la ventaja de que con un navegador y el bloc de notas ya lo usas.
A ver, que tampoco se cae el mundo por esos defectos, pero a uno le gustaría tener un poco más de control.
#57 como decía el que fue mi jefe y "mentor" por decirlo de alguna forma "quien dice que programa sin usar arquitecturas, patrones, etc miente, los usa lo que pasa es que en su caso son una mierda".
No te lo vayas a tomar como un ataque, hablo de una perspectiva profesional, si es por diversión, no es tu trabajo, etc... Cualquier cosa vale, pero en un trabajo... Cualquier codigo "para leer datos y mostrarlos por pantalla" termina creciendo y a la larga pagas el no haber dedicado un rato a plantear el problema...
#98: Pero como digo en otros comentarios, es que el tipo de programación que hago es muy "casual", no me dedico a ello. Lo mismo no hago otro programa hasta dentro de 6 meses.
El episodio de debates que llevó a quedarnos sin una de las figuras más importantes de la ingeniería informática (el tiempo lo pondrá en su sitio) fue bochornosamente trivial, promovida por un grupo de ofendiditos con más ego que talento.
Tuve la oportunidad de charlar con él hace casi 10 años, y era un tipo humilde y asertivo, poco que ver con el arquetipo de rockstar developer al que nos tiene acostumbrados este tipo de profesionales. Definitivamente no merece lo que le ha pasado.
#7 Pues eso me cuadra bastante más. Curiosamente a la gente sencilla con frecuencia se la tilda de dictadora por no responder a las provocaciones y pasar del tema. El no querer perder el tiempo en cruces de insultos estériles suele ser confundido con un "hace lo que le da la gana".
Han derrocado más personas válidas los ofendiditos que hacen bandera de cualquier gilipollez que cualquier otra cosa.
#pollo Ya has quedado en ridículo antes con el ejemplo que te he puesto, donde claramente se demuestra que no tienes ni idea de lo que hablas. No te hagas más daño, por favor. Aparte de que utilizar el recurso del insulto es lo último que le queda al pobre que se ha quedado sin argumentos.
Vamos a ver cómo de bien lo hacen los que le criticaban.
Ya he visto muchas veces quitar al "malvado dictador" para instaurar una democracia y que la cosa no funcione ni un poco. La mayoría de las veces nadie se atreve a reconocer que el dictador realmente no lo era, y que la ausencia de orden posterior es el principio del fin. Lo he visto en foros, en comunidades virtuales y en mogollón de proyectos.
El infierno está cargado de buenas intenciones ... / #5
#18@admin tomad nota de esta propuesta, que me parece cojonuda. Si añadimos un buscador de wikiquote que enlace las frases con sus autores reales lo bordamos.
#8 Eso es un problema muy propio de las democracias, tener un "dictador" (benévolo o no) puede tener éxito si sabe lo que hace. En una democracia es probable que no tengas rumbo porque las decisiones son consensuadas en cada votación o que la opinión de alguien que no tiene mucha idea valga lo mismo que la de un experto. Sin contar que algunas votaciones dependan de preferencias o beneficios personales.... etc.
Un año (aún) le queda a ese pobre desgraciado que, tras una larga vida y una impecable hoja de servicios, ha tenido sufrir una lenta agonía a manos de una jauría armada con discos flexibles y atrincherada tras oxidados mainframes que, habiendo olvidado lo poco que alguna vez supieron sobre programación, se empecinaron en rechazar los modestos cambios que, como implica el cambio de major, recibió hace ya nueve años.
#41: Pues si no pones IF me dirás a ver cómo lo haces.
A ver, no dudo que a ciertos niveles no pueda haber una forma de programar donde no haya IF, pero a un nivel más general... la gente usa todo lo que tiene a mano y conoce. Si a mi me dices que vuelva a programar una miniaplicación llamada [TEXTO ELIMINADO POR LA CIBERPOLICÍA] o esta que hace [TEXTO ELIMINADO POR LA CIBERPOLICÍA] sin IFs o con menos IFs... posiblemente fuera incapaz de hacerlo.
Es lo mismo que los que dicen que no hay que poner código en el HTML y ni siquiera quieren la llamada a las funciones de los botones... si, muy bien, pero da la casualidad de que a mi eso si me funciona, y el rodeo propuesto no, y yo lo que quiero hacer es leer la imagen de un fichero [TEXTO ELIMINADO POR LA CIBERPOLICÍA] y no un programa que se adhiera a un criterio que en mi opinión complica las cosas de forma innecesaria.
Al que esté programando a alto nivel, bien, pero a los que programamos de forma casual, que tenemos que mirar Google cada poco, pues eso, que pondremos IF, pondremos código en el "onclick" del HTML y seguramente el código de más vueltas de las necesarias, pero al menos funciona, se puede compartir para que lo use quién lo vea interesante, y eso es lo importante.
#47 muchos if son eliminables aplicando ciertos patrones y principios de POO (estrategy, inyección de dependencias, etc). Evidentemente if no es malo y sin if la programacion orientada a objetos se queda en algo un tanto inútil, el problema es el abuso (null checks en tu propio código, if repitidos n veces en una clase que te dan pistas de que en realidad son dos o tres clases diferentes y mierdas así).
#55: Vale, muy bien, pero... ¿Y si solo quiero leer unos valores dentro de un archivo y mostrar el resultado por pantalla, o realizar unos cálculos a partir de unos datos mostrados por el usuario y dibujarlo en pantalla?
¿De verdad merece la pena meterse en POO, hacer complicados diagramas... cuando se busca algo relativamente simple y no ganas dinero por programar? Porque vale, a lo mejor no son aplicaciones escalables, mantenibles y todo eso, pero.... ¿es que a caso iban a ser escaladas? Demasiado si se las mantiene corrigiendo algún error que pudieran tener.
Hay programación a alto nivel, y también a bajo nivel, de gente que usa poco más que el Bloc de notas y como "gestión de versiones" copia y pega el fichero para hacer duplicados, o comparte el código en Github usando arrastrar y soltar.
¿Cuál es el problema?
Los proyectos que son 'libres' o para la comunidad de este calibre: lenguajes, frameworks, etc... no deberían ser el apéndice de nadie. "Muere" el ser que alimenta al apéndice, desaparece la esencia del proyecto y con más o menos suerte podrá o no sobrevivir y evolucionar.
Lo ideal es justamente tener un 'steering committee' o similar que se encargue de gestionar las necesidades de la comunidad de una forma justa, objetiva y democrática. El resto no es más que alimentar el ego de un pseudo-dictador o de un oligopolio que como no suelta el control de su apéndice es quién sabe más del mismo y se puede dar el lujo de decidir qué es bueno y qué no (luego que algunos no se quejen si surge alguna alternativa más democrática que la comunidad adopta en favor de ese apéndice).
Ejemplos no faltan... empezando por el kernel de Linux, cuyo desarrollador principal y creador recientemente se tuvo que tomar unas vacaciones para analizarse a sí mismo y a su ego.
Y creo que nadie discute la experiencia y conocimiento de ésta gente, simplemente la popularización, uso y finalmente dependencia de multitud de otros proyectos hace que algunos de estos se consideren a sí mismos como los únicos que pueden impartir conocimiento y sabiduría sobre su 'creación'. Es decir, el hecho de crear algo y que se popularice no implica que no surja alguien que acabe sabiendo más que tú, y quizás el problema está ahí... que la competencia es feroz y ataca al ego directamente.
#6 no, alt graph y llave, las dos teclas están pegadas, busca otra escusa. #4#3 Lo que si es un crimen es la confusión espacios, tabs, y mierdas, que encima no se ven.
Si haces un paste de algun codigo en un sitio jodido, preparate a sufrir, para encontrar al puto tab (o espacio) de más.
Típico ejemplo de poner algo cool que nadie pedía, con resultado desastroso.
Yo programo en muchos lenguajes, y cuando me toca python me entran los picores solo de preparar el entorno, sorry.
#13 No me compares levantar un entorno python que se hace en 2 patadas.
Con jaleos de Java (tanto el de cárnica como el de Android) o peor el invento ahora de nodejs que hasta ellos mismos lo reconocen con cosas como los boiler plates o los cli o los --init para empezar a hacer un hola mundo.
#90 c++ para apps movil, escritorio y embedded,
golang para server web,
perl para automation en shell,
python para scripting dentro de otros programas y poder manipular sus objetos,
javascript en browser por que no hay más cojones,
c para kernel linux.
#13 Pues mira... programo en C, php, javascript, etc. que son lenguajes de sintaxis libre. Para que puedas ser libre de escribir el programa en una sola línea si te da la gana se hacen necesarias las llaves. OK. Pero resulta que NADIE escribe como le da la gana. De hecho se han definido determinadas "reglas" de cómo escribir y al que no lo hace así se lo critica mucho.
Al final resulta que terminas escribiendo con las estructuras bien ordenaditas con tabulaciones, lo cual hace innecesarias las llaves que indican el comienzo y el fin: la propia indentación lo indica. Y eso es lo que hace python. A mi me parece genial porque eso te asegura que las cosas se van a ejecutar como las estás viendo. No hace falta un indicador de donde comienza o termina algo. ¿Cuántas veces una llave mal puesta te vuelve loco hasta que descubres lo que pasaba? Al ser la indentación la que manda eso no puede ocurrir.
#2 Síii... Deja que el odio crezca en tu interior. Fuerza a todos a destrozar sus manos con absurdos comandos Alt+teclaAlejadaYCercaDelEnter. Siente el poder del mal, deja que entre en tí... la cedilla. Muhahahaha....
#67 Si te va el masoquismo usa uno frances. Tuve una vez que escribir un correo desde un cybercafe en Paris y si no cambio los settings no lo habria terminado nunca.
#2: De hecho en mi opinión deberían inventar un Python con la notación de Javascript, es decir, que puedas definir variables "en serio" (int32, uint64... y si das soporte para tipos extra (punto fijo), mucho mejor), vectores y matrices (de dos dimensiones o más) como tal, y no como estructuras y estructuras anidadas... pero sin la sintaxis de Python donde la indentación juega un papel fundamental y complica bastante en mi opinión la modificación del código, por ejemplo, envolviendo un trozo en un IF porque lo quieres saltar.
Conste que adoro JavaScript, porque para cosas pequeñas va bastante bien, solo necesitas el Bloc de notas de Windows y el mismo navegador FireFox, pero por favor, definir una matriz así es estúpido: https://stackoverflow.com/questions/8301400/how-do-you-easily-create-empty-matrices-javascript
En C es como un vector con unos corchetes adicionales y con esas puedes hacer tantas dimensiones como necesites.
#26 puedes definir variables en serio, hay un módulo estándar llamado ctypes otro llamado array, pero la comprobación estática de tipos, en python, es opcional
lo que no podéis hacer todos es juzgar lo que no conocéis
#38: Si, pero... ¿Y si ponemos las cosas "por defecto" como en C?
Me parece increíble que C, siendo más rígido, maneje mejor algunas cosas que JavaScript. Y bueno, eso se puede arreglar, porque o de no separar con llaves de Python, pues eso, para rehacer el lenguaje desde cero...
Comentarios
#24 Alguien que confunde tipado fuerte/débil con tipado estático/dinámico (como tú) sí que no puede considerarse en serio. Ambos son conceptos ortogonales.
Python tiene tipado fuerte, pero no sabes lo que és ni por qué. Python lo que es es dinámico. Prueba a meter otro tipo en una variable que ya lo tenga, a ver qué pasa.
Javascript o PHP tienen tipado débil por ejemplo. Python no.
No tienes ni puta idea. Y lo peor es que el mundo de la programación está lleno de ignorantes que hablan sin saber.
Aprende un poco anda:
https://www.artima.com/weblogs/viewpost.jsp?thread=7590
https://en.hexlet.io/courses/intro_to_programming/lessons/types/theory_unit
#27 Python no tiene tipado fuerte obligatorio como tienen otros lenguajes como Java o C. El tipado que tiene es opcional y solamente en su rama 3.x. Y aún así no es fuerte, es tipado débil. El fuerte es el que tiene C o Ada.
Eres un ignorante que encima te permites el lujo de dar lecciones a los demás. Y el que no tienes ni puta idea eres tú, que insultas sin saber y estás lleno de odio.
#28 Sigues negando la mayor, ¿has leído lo que puse? No sabes ni de lo que estoy hablando, dudo que quepa en tu cabeza. Pero bueno, ser ignorante es libre.
Decir que C tiene tipado fuerte cuando un byte es lo mismo que un char y un puntero puedes cambiarlo por un int y otras muchas promiscuidades y puedes mezclarlo todo como te dé la real gana es de risa. Tiene un tipado tan fuerte que no paran de salir vulnerabilidades cada poco precisamente por ello.
Pero cuando la neurona no da para más, la única deducción posible que os queda mientras os babáis encima es que si ves los tipos es tipado fuerte y si no los ves no.
Si vas a contestar, intenta no cagarte encima por el esfuerzo.
#31 Independientemente de lo mucho o poco que sepas de Python, lo que está claro es que eres un impresentable por dirigirte a las personas de esa manera.
Relájate que dudo que el tema sea tan serio.
#43 Yo sólo hago reciprocidad. Quien dice gilipolleces, que se enfrente a ellas.
#45 Los ignorantes como yo, agradecemos tus enlaces y apuntes.
Sin embargo, si fueras profe y trataras así a tus alumnos, no tendrías muchas simpatías.
#56 Ya he sido profesor (programación Android) y acabaron muy contentos los alumnos. También fui muchos años monitor de tiempo libre en diferentes ámbitos y nunca tuve un problema para "ganarme" a la gente. De hecho una de las características que más pesan a la hora de que te valoren los demás es precisamente el no dejarse amilanar (que no es lo mismo que abusar).
Sucede que en forma presencial la gente no se atreve a trollear o a abrir tanto la boca sin saber.
Cuando alguien hace una afirmación de ese tipo desde la ignorancia y con la intención de creerse superior y provocando, hay que ponerle en su sitio. No por el propio sujeto, que por mí puede comer una ensalada de cuchillas de afeitar o criar champiñones, es por no extender mitos sobre la materia repetidos hasta la saciedad una y otra vez y que como ofrecen razomaientos fáciles pueden contagiar a gente que tiene menos experiencia.
Y este es un troll conocido.
#43 (aplausos)
#28 Demuestras no tener idea, porque C no tiene tipado fuerte, es tipado débil. C es estático y débil. Python es dinámico y fuerte.
#34 #29
a=4
a='4'
¿Esto es tipado fuerte?
#63 Eso mismo puedes hacer con C y cosas peores que no te permite hacer Python. Lo que tú has hecho es redefinir una variable, nada más.
Sigues confundiendo fuerte y débil con dinámico y estático.
Python no hace conversiones implícitas como te lo permiten C, Visual Basic o JavaScript. Python está más en la línea de Java.
"Smalltalk, Perl, Ruby, Python, and Self are all "strongly typed" in the sense that typing errors are prevented at runtime and they do little implicit type conversion, but these languages make no use of static type checking: the compiler does not check or enforce type constraint rules. The term duck typing is now used to describe the dynamic typing paradigm used by the languages in this group."
#63 Tengo la impresión de que, en realidad, cuando él habla de tipado fuerte o débil se refiere realmente a esto:
raster@debian:~$ python3
>>> "hola" + 5
Traceback (most recent call last):
File "", line 1, in
TypeError: can only concatenate str (not "int") to str
>>>
raster@debian:~$ python2
>>> "hola" + 5
Traceback (most recent call last):
File "", line 1, in
TypeError: cannot concatenate 'str' and 'int' objects
>>>
raster@debian:~$ gjs
gjs> "hola" + 5
"hola5"
gjs>
Con lo que, aunque en la función puedes meter variables con cualquier tipo, si luego en el código de dentro de la función los tipos no son los esperados, en python acabará dando un error, pero en javascript probablemente no lo de. De ahí que yo, personalmente, sí considere a python como de tipado fuerte, y a javascript de tipado débil.
(aunque luego hay excepciones, como "hola" * 5, pero bueno, ese es un caso específico, en mi opinión 😇 )
Luego lo de que C es de tipado débil, yo diría que no, porque aunque se pueden pasar tipos similares (meter un char donde hay un int), te envía un warning siempre que haga una conversión "problemática". Y un programador que acepte que su código en C compile con warnings no es un buen programador, en mi opinión.
#80 habiendo definiciones claras, no vale la excusa de que "a lo que yo me refiero por tipado fuerte es a...". Python tiene tipado fuerte. c tiene tipado débil. No es cuestión de opinión.
#28 Python no tiene tipado fuerte obligatorio
Lo que se conoce en ambientes académicos como "tipado regulero".
No, tiene tipado fuerte... opcional
#28 por si acaso no fueras un troll, estas muy pero muy equivocado. La explicación ya te la han dado, así que poco más te digo.
#27 "Prueba a meter otro tipo en una variable que ya lo tenga, a ver qué pasa."
a = 4
a = 'a'
Esto es totalmente válido en Python. Por tanto no, no es fuertemente tipado. Mientes.
Aprende un poco anda
#29 No lo es. Hala, vete a tomar por culo un poco. Vaya troll de mierda.
#29 si haces eso es para pegarte, no para aprender
#29 eso es tipado dinámico, para comprobar el tipado estricto prueba a sumar un str y un int.
#29 qué pasa
Pues que has sustituido la referencia de a al objeto 4 de tipo "int" por una referencia al objeto a de tipo "str".
Además de demostrar que no tienes ni idea de´la diferencia entre "débilmente tipado" y "dinámicamente tipado", por supuesto.
En términos que hasta alguien más empeñado en diatribas barriobajeras que en aprender algo podría entender: en Python las variables no son cajas, son etiquetas.
#53 que algunos repiten cosas que leen por ahi sin pensarlo. Tengo dos de estos en el curro.
#68 Sólo dos? Qué suerte
#27 y hoy en día, si programas como dios manda, tus funciones no serán de más de 5 líneas y en ellas no harás asignación múltiple a la misma variable (por eso de intentar mutar el estado lo menos posible) así que, con marcar el tipo de los argumentos de la función (PHP 7 ya permite tipar argumentos y retornos) esa "gilipollez" del tipado fuerte... Pierde para mi opinión importancia (siempre he pensado que es más una protección antiñaperos que otra cosa)...
#39 Depende mucho. Tras conocer un lenguaje super estricto como Rust, para cosas como sistemas o programación con asíncrona es muy valioso ya que te evita un montón de errores complicados de evitar y muy fáciles de cometer sin saberlo.
De hecho C y C++ como lenguajes son una mierda pinchada en un palo en este aspecto. Son auténticos coladeros de problemas invisibles. Mucho tipado y mucha historia y no sirven para evitar casi nada en la práctica.
Para la mayoría de casos de aplicaciones no críticas, es sólo relativamente relevante.
#44 bueno, no te quito la razón, pero tenemos que cambiar de objetivo del lenguaje... Y, aún así, con tests y funciones pequeñas y realmente testables... Sigo pensando que es poco necesario, no sé si lo aprovecharán para algún tipo de optimización, quizás ahí si ofrezca ventajas pero fuera de eso... No sé muy bien que ventajas me puede ofrecer...
#9 aquí tienes un buen enlace sobre la historia :
https://hub.packtpub.com/why-guido-van-rossum-quit/
Más o menos, en la PEP 572 se sugería incluir el operando := para asignar variables usando expresiones, así :
while a:=b.read(10):
print(a)
Es algo trivial porque si no quieres usarlo basta con omitirlo sin más repercusión en retrocompatibilidad.
Por diversos motivos parte de la comunidad se puso en contra, pero algunos decidieron defender su postura apoyándose en ataques personales a Guido.
Guido hasta hace poco era el Dictador Benevolente Vitalicio del lenguaje, y tomaba las decisiones de forma colegiada, pero bajo su firma. Desde entonces ha decidido que el que quiera peces que se moje el culo, especialmente cuando los peces eran gratis.
#12 alguien propone cambiar la sintaxis de un lenguaje de programación y responden con ataques personales LOL
#12 Una pena que se torne en algo personal, pero estaría de acuerdo en que me parecería mejor no incluirlo.
No tengo claro lo d que simplemente puedas ignorarlo cuando no deja de ser un lenguaje de uso común. En gran medida el propio lenguaje se convierte en decálogo de normas de uso. Ese lenguaje y su sintaxis restringe las cosas que puedes hacer.
#11 Python es el retorno al camino que la informática perdió con el Java. El retorno a la programación intuitiva y simple que nació en los 80 y que posibilitó el salto tecnológico de la revolución digital.
Con Java nunca lo habríamos conseguido.
Ahora solo nos queda enviar al paro o a la cárcel a todos los que aún defienden arquitecturas basadas en Java y el mundo por fin volverá a ser un lugar hermoso y próspero.
Cc#20
#23 Un lenguaje de programación que no es fuertemente tipado no puede considerarse en serio.
#24
me parto cuando alguien repite algo sin pensarlo, que no puede considerarse serio?
#66 me parto cuando alguien no sabe ni escribir
#70 Espera que copie y peque como tu alguna otra opinión sobre como escribir bien
#c-24" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/3059149/order/24">#24 Pero vaya chorrada acabas de escribir. Llevo 5 años trabajando con Python y 2 con Java y ... ¿Sabes una cosa que me encanta del Python?
Que cada puta línea de código que escribo sé para qué es y por qué coño esta ahí. Eso no pasa con Java o con C# que si no es por el IDE que te mete código a cascoporro sin saber por qué ni para qué, no podrías escribir ni un puto programa de tirón.
Y de verdad que flipo con todas esas mierdas de la inyección de dependencias. Son parches (malos) por lo fuertemente tipado que es el C# o el Java. Parches para hacer lo que con Python haces de una manera natural ... sin darte apenas cuenta.
Por no hablar ya de leer código que ha escrito otro. En mierdas como Java a veces es una puta pesadilla.
Pero bueno, sigue diciendo chorradas sin saber.
#c-74" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/3059149/order/74">#74 Pero eso no es culpa del lenguaje, si no de las bibliotecas y la metodología de desarrollo que uses. Yo me tiré 2 años programando en C# y lo que vi es que el código era tan compacto como en Python, pero con la ventaja adicional de usar tipado estático.
#c-81" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/3059149/order/81">#81 Sinceramente no le veo ninguna ventaja al tipado estático. Y el código es compacto pero no por el C# en sí, sino por el propio framework que normalmente te obliga a compactar y estructurar. Después de trabajar 3 años en Python y meterme con Java de repente va y me entero de que había una "cosa" llamada inyección de dependencias ... y yo me preguntaba cómo coño no me había enterado de que eso exisitía. Y es que en Python no sólo no es necesario, sino que no tiene ningún sentido. Al final cosas como esa (hay muchas más como los "interfaces" que no son más que un puto parche) son las que hace que tu código se llene de "cosas" que tienen que estar pero sólo tienes una idea "filosófica" de qué coño hacen.
Eso en python no pasa. A mí no me pasó ni cuando empezaba a trabajar con él.
#83 Si no le ves ventajas al tipado estático, es porque no has escrito ningún programa lo suficientemente grande o crítico. Python está muy bien para cosas pequeñas, pero no para un programa de cientos de miles de líneas de código. No sabe que datos acepta y que devuelve cada función, o que te pete el programa en algún punto aleatorio porque no has escrito bien el nombre de una variable no es nada divertido.
Y sí, Java es un horror, en eso estamos los dos de acuerdo, yo lo estoy sufriendo ahora. Pero el mundo del tipado estático es infinitamente más amplio que Java.
#c-86" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/3059149/order/86">#86 No he escrito código en Python de cientos de miles de líneas de código pero sí de decenas de miles de líneas de código y he tenido en python los mismos problemas que en Java o en C#. Porque si Java es un horror, C# es exactamente el mismo horror.
Y esos problemas que tú cuentas los resuelves antes de empezar a escribir planteando la arquitectura y, sobre todo, la estructura de los datos. Que siendo dinámicos en Python y no siendo fuertemente tipado te puedes hacer exactamente el mismo planteamiento pero sin mierdas como los "interfaces", por ejemplo.
#c-88" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/3059149/order/88">#88 A ver, vayamos por partes. Las interfaces de Java son una ñapa que se sacaron por no querer implementar herencia múltiple. C++ no necesita interfaces, y es estático. JavaScript es dinámico, y hasta hace poco su modelo de objetos era infumable.
Y precisamente cuando tienes que manejar estructuras de datos complejas es cuando mas útil resulta el tipado estático. Yo en lenguajes como C++ o C# he definido estructuras muy complicadas con mil templates que en Python serían imposibles de manejar. En un lenguaje estático el compilador te ayuda a verificar que haces un uso correcto de los tipos y de las variables, en uno dinámico tienes que escribir mil tests. ¿Por qué tengo que perder el tiempo verificando yo algo que el compilador puede hacer por mí?
Te lo vuelvo a decir, ni C# tiene porqué ser ningún horror, ni Python es esa maravilla que dices. He visto código en C# muy legible, y código en Python que te hacía querer arrancarte los ojos.
Y en serio, mira más allá de estos lenguajes. Mira lenguajes como Haskell, Rust, la familia ML, Scala, Kotlin, TypeScript, etc. como ejemplo de lenguajes estáticos modernos.
#c-91" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/3059149/order/91">#91 A ver. Reconozco que tengo cierta querencia por Python ya que es el primer POO que aprendí. Y reconzco que Java y C# tienen su cosa. Por ejemplo .. gracias a Java me hice mucho más "fuerte" en la POO ya que Java es la única opción que te deja. Y eso me ayudó a ser mejor y a cambiar mi manera de pensar como programador.
PERO
Lo que yo digo es que el que sea fuertemente tipado o no lo sea, no lo hace mejor o peor. JavaScript es una caca ... pero me gusta lo que se puede hacer con él. TypeScript es básicamente lo mismo pero en "bonito" y con mucha mejor estructura y, sinceramente, creo que la diferencia entre JavaScript y TypeScript es, básicamente, que ves de una manera más sencilla la estructura de los datos y de las clases. Nada más. Hacen casi lo mismo y se ejecutan más o menos en el mismo tipo de entornos.
Luego te encuentras con mierdas como el JQuery que para mi gusto es insoportable. Tiene una sintaxis de locos y hace que cualquier chorrada sea una mierda difícilmente legible.
Y gracias por el comentario de las interfaces. Así es ... un parche porque no admite herencia múltiple. Y yo me pregunto si es un parche porque sí o es un parche porque precisamente el ser tan fuertemente tipado hace muy difícil que el compilador pueda con esa herencia múltiple.
#c-95" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/3059149/order/95">#95 Empecemos por el final
Y gracias por el comentario de las interfaces. Así es ... un parche porque no admite herencia múltiple. Y yo me pregunto si es un parche porque sí o es un parche porque precisamente el ser tan fuertemente tipado hace muy difícil que el compilador pueda con esa herencia múltiple.
https://en.wikipedia.org/wiki/Multiple_inheritance#The_diamond_problem
El problema de la herencia múltiple es que da lugar a ambigüedades en el caso de que dos o más clases padre definan métodos con el mismo nombre, o que dos o más clases padre hereden de la misma clase abuela. Python lo resuelve aplicando la herencia secuencialmente, en el orden en el que las clases están escritas en el código. C++ utiliza un modelo más complejo pero flexible. En general es un problema bastante difícil de resolver.
Los creadores de Java y de C# decidieron no permitir herencia múltiple, y al final han acabado metiendo interfaces con métodos con implementación por defecto, lo cual es una puta ñapa terrible.
A ver. Reconozco que tengo cierta querencia por Python ya que es el primer POO que aprendí. Y reconzco que Java y C# tienen su cosa. Por ejemplo .. gracias a Java me hice mucho más "fuerte" en la POO ya que Java es la única opción que te deja. Y eso me ayudó a ser mejor y a cambiar mi manera de pensar como programador.
Yo aprendí Python allá por el 2005, porque todo el mundo decía que es un lenguaje maravilloso, y es cierto que se aprende en seguida y que puedes hacer mucho con poco esfuerzo, pero cuando el programa crece se vuelve inmanejable. Java tiene muchas otras malas decisiones, como la carencia de tipos enteros sin signo, la diferencia entre objetos y tipos primitivos, la carencia de tipos por valor, etc. Y luego el puto ecosistema, que está horriblemente inflado y para hacer cualquier tontería tienes que instanciar 20 clases
Lo que yo digo es que el que sea fuertemente tipado o no lo sea, no lo hace mejor o peor. JavaScript es una caca ... pero me gusta lo que se puede hacer con él. TypeScript es básicamente lo mismo pero en "bonito" y con mucha mejor estructura y, sinceramente, creo que la diferencia entre JavaScript y TypeScript es, básicamente, que ves de una manera más sencilla la estructura de los datos y de las clases. Nada más. Hacen casi lo mismo y se ejecutan más o menos en el mismo tipo de entornos.
Una cosa es dinámico/estático, y otra fuerte/débil Lo primero tiene una definición clara, lo segundo no, aunque se suele usar como sinómino de conversión automática de tipos. JavaScript es dinámico y débil, Python es dinámico y fuerte. En general, casi cualquier programador sensato considera el tipado débil como un gran error.
Lo de TypeScript, ¿te parece poco? En mi experiencia cuando programas pasas un 10% del tiempo escribiendo código, y un 90% leyendo. Cualquier cosa que ayude a hacer el código más comprensible es buena.
Luego te encuentras con mierdas como el JQuery que para mi gusto es insoportable. Tiene una sintaxis de locos y hace que cualquier chorrada sea una mierda difícilmente legible.
Yo jQuery lo he usado poco, para hacer cuatro animaciones sencillitas y algún formulario dinámico, y para según que cosas te facilita mucho la vida. Para cosas complejas puede ser bastante loco, pero la verdad es que el desarrollo web en general me parece una puta locura
#81 esa ventaja ya no existe, en las últimas versiones Python (3.6+) soporta el tipado estático. No es perfecto por su naturaleza pero para el 90% del uso que le vas a dar al tipado estático te va a servir y para florituras, programación funcionan, etc... generalmente hay `workarounds`
#92 Lo acabo de mirar y es una avance, pero aún le falta mucho. Para empezar, por lo que estoy viendo los tipos se comprueban en tiempo de ejecución, no de compilación, con lo que pierdes las ventajas de robustez y eficiencia que aporta el tipado estático. Y además al ser algo tan nuevo, muchas bibliotecas no lo soportan aún.
De todas maneras, es curioso que muchos lenguajes dinámicos están adoptando tipado estático opcional, debe ser que es útil
#96 es básico si no haces simplemente scripts. Para la comprobación estática hay que usar mypy, lo ejecutas cuando tú quieras o lo íntegras con tu IDE como cualquier linter y a funcionar.
Python ya soporta programación asíncrona bien hecha y lo siguiente será adoptar cuatro cosas que le faltan para ser un lenguaje válido para programación funcional. La verdad que es bastante normal que siga avanzado tal y como avanza. Es casi un estándar en él mundo del software libre.
Un saludo.
#96 no se comprueban en tiempo de compilación (que no hay) ni en tiempo de ejecución. Y en cualquier caso no es un "avance". Python es un lenguaje con tipado dinámico y tiene las ventajas y desventajas del tipado dinámico. Necesitamos variedad de lenguajes potentes y Python está cubriendo un nicho muy importante ahora mismo.
#92 no es tipado estático, son "hints" para herramientas de terceros. El intérprete no hace nada con ellos.
#74 Esto mismo es lo que me encanta de Ruby. Cuando abres una clase, te está contando la lógica de negocio como si fuera un manual. Nada más.
Toda la lógica de infraestructura está escondida y se expresa en forma de DSL.
#74 Me parece que no sabes qué es una función ni la encapsulación.
#23 Leo este tipo de mensajes y me parto la caja. Creo que no sois ni medio conscientes que los servidores de medio Internet funcionan con java
#48 y? Eso quiere decir que Java es mejor? Yo creo más bien que los fanáticos de la secta de Java engañaron a mucha gente en los años 00.
#48 si, y el código que mueve el dinerillo en COBOL. Hacemos servidores web en COBOL pues?
#23 Déjalos que ya se crearon su propio infierno
. Tienen que mantener su propio codigo.
#13 Si haces un paste de algun codigo en un sitio
Yo programo en muchos lenguajes
Ya...
#36 ese tipo de programador
#11 Un buen programador es vago por definición: la cosa está en programar la maquina para que hace el trabajo por ti.
#84 Y dejarlo todo de tal modo que los cambios futuros no te amarguen la vida, añado.
#57 Bajo mi punto de vista tienes parte de razón pero creo que se te nota que la POO no es del todo lo tuyo. Yo pensaba como tú al principio pero cuando se te mete la POO en la cabeza ya no hay manera de escribir código sin ella. Es cierto que cuesta. A mí me costó pero te ahorra chorrecientos IF porque no hay que comprobar ni chequear constantamente ya que está implícito en la estrucutra que has hecho.
Te pongo un ejemplo ... tienes que hacer un IF para ver que se cumple una condición y "disparar" algo ... un proceso, una función, un callback ... lo que sea. Si eso mismo lo haces con POO y un patrón de observadores, ese proceso se disparará solo, sin que tengas nada que comprobar. La condición va implícita en el diseño.
Mola la POO. MUCHO
#77: Si, pero imagina que empiezas un
proyectoexperimento donde no sabes:- Qué vas a poder hacer y qué no.
- Cómo lo vas a programar.
- Dónde vas a acabar si te lías a añadir cosas.
- Casi ni siquiera qué uso va a tener.
Ya digo que es lo que tiene la programación "casual", que se te ocurre una idea, y primero pruebas a ver qué sale, y luego si funciona lo implementas un poquito mejor y intentas añadir algo, si funciona añades más cosas... así hasta que o bien llegas a una barrera infranqueable (para mi) o bien crees que la idea está lo suficientemente trillada y no da más de si, y como mucho lo decoras, lo traduces al inglés o lo subes a una página web para que la gente lo use, subes el código a Github con algunos comentarios y tratando de explicar lo que haces como buenamente puedes, y finalmente te desentiendes.
Luego miras el código... y vale, será una birria, pero si no se hubiera hecho así, no habría nada.
A veces pasa que tienes la idea, intentas desarrollarla... y no da más de si desde el primer momento, y lo deshechas.
#87 Y cómo crees que empiezo yo cualquier proyecto? O cualquier programa casual? Escribiendo algo que es poco más que un "hello world" y a partir de ahí añadiendo estructura.
Pero la diferencia de hacerlo con POO es que esa estructura se va haciendo grande de una manera casi natural. Cuando no trabajas así, en efecto, el final es de traca. Tienes un huevo de funciones desperdigadas e inconexas que al final se te hace imposible manejar. Eso no pasa con POO ya que aunque el experimento, programa o proyecto sea "casual" tiene estructura nada más empezar.
Como te dije antes cuando se te mete la POO en la cabeza ya no puedes pensar de otra manera pero es un poco como aprender un idioma ... primero vas traduciendo mentalmente a tu idioma materno y acabas sin darte cuenta simplemente expresando tus ideas en ese idioma. Y cuando llegas ahí, ya no hay vuelta atrás.
#89: tiene estructura nada más empezar.
Es que a veces uno ni siquiera sabe qué va a hacer 30 líneas de código después. Solo tienes un fichero en formato propietario con una imagen incrustada dentro, y la quieres sacar a un "canvas" o a lo que sea mediante JavaScript y una página web. Pues bien, primero empiezas mirando si eres capaz de leer un determinado byte del fichero. ¿Eres capaz de leerlo? Guay. Luego miras a ver si puedes poner un puntito rojo en un "canvas" (lienzo), y pruebas a poner un pixel rojo, y ahí empiezan los problemas, que por el motivo que sea, el "canvas" no hace ni caso, miras códigos, haces cambios a ver si suena la flauta... hasta que al final consigues poner un punto rojo, y entonces ya es cuando te pones a enlazar una cosa y la otra poco a poco hasta que consigues lo que intentabas al principio.
Y luego si todo va bien, lo mismo intentas añadir alguna funcionalidad nueva, algún botón para hacer algo que se te ocurra...
Pero primero tienes que conseguir eso, ser capaz de leer el fichero y de conseguir colocar ese contenido en un lienzo. Para mucha gente es algo obvio, pero para mi, que he estudiado una carrera con una única asignatura de programación... no.
#94 Para mucha gente es algo obvio, pero para mi, que he estudiado una carrera con una única asignatura de programación... no.
Nada es obvio y haber estudiado una carrera dedicada a la programación o haber aprendido por tu cuenta requiere (hoy en día gracias a Internet) prácticamente el mismo esfuerzo. Ese esfuerzo lo puedes hacer en tus ratos libres o de 8 a 2 en la facultad. Pero costar a todos nos ha costado.
En cuanto a lo otro que dices es que yo creo de verdad que "no has llegado". Sin ningún ánimo de ofender y sin ir de sobrado. Yo puedo hacer 3 pruebas o 23 para ver cómo coño pongo ese puntito en el canvas pero en cuanto lo he puesto, esas pruebas no son EL CÓDIGO, sino que pasan a formar parte del código. Que es muy distinto. En cuanto resuelvo el problema, le meto estructura a todo y luego lo dejo crecer.
Prueba la próxima vez y verás que aunque cuesta esfuerzo, cuando lo has hecho dices .... coño, qué bonito!! Porque no se trata (para mí) sólo de lo que haces ... sino de cómo lo haces. Y el código a veces lo sientes como si fuera poesía ... lo ves hermoso y no puedes parar de mirarlo una y otra vez. No sé .... tal vez esté exagerando bastante pero yo me siento mejor cuando he escrito algo bueno. No solamente cuando he resuelto un problema (que también me hace sentir bien).
#87 #77 Comparto mucho vuestras opiniones, al final se trata de alternativas diferentes con sus pros y sus contras. En general creo que los informáticos valoran poco su formación teórica y muchos programan por improvisación. Respecto al uso de patrones, me parece que tiene el problema que a veces el código que te queda es totalmente irreconocible a menos que conozcas muy a fondo cual es toda la estructura.
También imagina que quieres tocar un código con el que no eres familiar, con el que quieres hacer algo simple, o que tienes que añadir alguna funcionalidad nueva (que quizás ya no sea tan simple). A veces tener diseños muy elaborados se convierte en un obstáculo en el que la lógica de lo que quieres hacer no es evidente porque está oculta en el diseño informático.
#13 te pones un autopep8 en tu ide favorito y te ahorras la aspirina.
#13 trabaja con un ide decente y te olvidarás de esos problemas
#35 Soy de la vieja escuela. No uso ide, solo vim, un lenguaje no debería de ir asociado a la herramienta de introduccion.
Con cualquier otro lenguaje en el editor pulsando un shortcut me queda todo auto indentado, en python eso no es posible.
Ya me direis donde está la ventaja.
En proyectos complejos todas estas mierdas se notan bastante, hice un proyecto con pyqt y nunca mais, mucho más comodo y rápido programar en c++.
#52 SI claro, imagínate que te van a operar y el anestesista es de la vieja escuela, whisky y trozo de mandera para morder
#52 vim tiene plug de autopep8, python mode, pylint etc.. asi como 426423674mil plugins de todas clases, no es escusa![:lol: lol](https://cdn.mnmstatic.net/v_149/img/menemojis/36/lol.gif)
Has pasado de hablar de juguetes a decirnos que picas en un pizarrin
#_36 su libro de cabecera
#50 Pues sí, bastantes veces he pasteado de stack overflow. Tu nunca?
#54 cuando estaba aprendiendo, ahora consulto de vez en cuando pero nunca copio y pego, intento entender el código y adaptarlo a mis necesidades.
#50
Casi me orino encima
Con que consigan que un hola mundo de hoy funcione dentro de 10 años ya lo habrán hecho mejor que él.
#c-40" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/3059149/order/40">#40 si te gusta C, usa C, yo no voy por ahí quejándome de que ADA no sea F#
#76: Si, pero es que C se limita mucho a la consola, salvo que entres en bibliotecas especiales. JavaScript tiene la ventaja de que con un navegador y el bloc de notas ya lo usas.
A ver, que tampoco se cae el mundo por esos defectos, pero a uno le gustaría tener un poco más de control.
#57 como decía el que fue mi jefe y "mentor" por decirlo de alguna forma "quien dice que programa sin usar arquitecturas, patrones, etc miente, los usa lo que pasa es que en su caso son una mierda".
No te lo vayas a tomar como un ataque, hablo de una perspectiva profesional, si es por diversión, no es tu trabajo, etc... Cualquier cosa vale, pero en un trabajo... Cualquier codigo "para leer datos y mostrarlos por pantalla" termina creciendo y a la larga pagas el no haber dedicado un rato a plantear el problema...
#98: Pero como digo en otros comentarios, es que el tipo de programación que hago es muy "casual", no me dedico a ello. Lo mismo no hago otro programa hasta dentro de 6 meses.
#100 si sí, por eso te decía que no lo tomes como un ataque
Hastío en lo profundo.
#1 Por lo visto su salud tampoco está muy bien.
El episodio de debates que llevó a quedarnos sin una de las figuras más importantes de la ingeniería informática (el tiempo lo pondrá en su sitio) fue bochornosamente trivial, promovida por un grupo de ofendiditos con más ego que talento.
Tuve la oportunidad de charlar con él hace casi 10 años, y era un tipo humilde y asertivo, poco que ver con el arquetipo de rockstar developer al que nos tiene acostumbrados este tipo de profesionales. Definitivamente no merece lo que le ha pasado.
#7 Cuenta, cuenta. He usado python pero no estaba al tanto de lo que pasaba entre bambalinas
#7 Pues eso me cuadra bastante más. Curiosamente a la gente sencilla con frecuencia se la tilda de dictadora por no responder a las provocaciones y pasar del tema. El no querer perder el tiempo en cruces de insultos estériles suele ser confundido con un "hace lo que le da la gana".
Han derrocado más personas válidas los ofendiditos que hacen bandera de cualquier gilipollez que cualquier otra cosa.
Sin SWIG Python sería otro de esos lenguajes anecdóticos.
#pollo Ya has quedado en ridículo antes con el ejemplo que te he puesto, donde claramente se demuestra que no tienes ni idea de lo que hablas. No te hagas más daño, por favor. Aparte de que utilizar el recurso del insulto es lo último que le queda al pobre que se ha quedado sin argumentos.
Pues muy bien no lo hizo Guido...
El solo consiguio empezar con 1 lenguaje de programacion y acabar con 2....
Vamos a ver cómo de bien lo hacen los que le criticaban.
Ya he visto muchas veces quitar al "malvado dictador" para instaurar una democracia y que la cosa no funcione ni un poco. La mayoría de las veces nadie se atreve a reconocer que el dictador realmente no lo era, y que la ausencia de orden posterior es el principio del fin. Lo he visto en foros, en comunidades virtuales y en mogollón de proyectos.
El infierno está cargado de buenas intenciones ... / #5
#8 Igual que hay un directorio de emojis, Menéame debería incluir un directorio de frases hechas y refranes:
"El camino al infierno está empedrado de buenas intenciones"
#18@admin tomad nota de esta propuesta, que me parece cojonuda. Si añadimos un buscador de wikiquote que enlace las frases con sus autores reales lo bordamos.
#8 Eso es un problema muy propio de las democracias, tener un "dictador" (benévolo o no) puede tener éxito si sabe lo que hace. En una democracia es probable que no tengas rumbo porque las decisiones son consensuadas en cada votación o que la opinión de alguien que no tiene mucha idea valga lo mismo que la de un experto. Sin contar que algunas votaciones dependan de preferencias o beneficios personales.... etc.
#5 realmente empezó con 0 lenguajes de programación, así que ya lo hizo mejor que yo.
#5 Yo no sé tú, pero python2 hace mucho que no lo toco ya.
#5 En realidad acabó con uno, con Python 2.7 concretamente
Un año (aún) le queda a ese pobre desgraciado que, tras una larga vida y una impecable hoja de servicios, ha tenido sufrir una lenta agonía a manos de una jauría armada con discos flexibles y atrincherada tras oxidados mainframes que, habiendo olvidado lo poco que alguna vez supieron sobre programación, se empecinaron en rechazar los modestos cambios que, como implica el cambio de major, recibió hace ya nueve años.
#41: Pues si no pones IF me dirás a ver cómo lo haces.![:lol: lol](https://cdn.mnmstatic.net/v_149/img/menemojis/36/lol.gif)
A ver, no dudo que a ciertos niveles no pueda haber una forma de programar donde no haya IF, pero a un nivel más general... la gente usa todo lo que tiene a mano y conoce. Si a mi me dices que vuelva a programar una miniaplicación llamada [TEXTO ELIMINADO POR LA CIBERPOLICÍA] o esta que hace [TEXTO ELIMINADO POR LA CIBERPOLICÍA] sin IFs o con menos IFs... posiblemente fuera incapaz de hacerlo.
Es lo mismo que los que dicen que no hay que poner código en el HTML y ni siquiera quieren la llamada a las funciones de los botones... si, muy bien, pero da la casualidad de que a mi eso si me funciona, y el rodeo propuesto no, y yo lo que quiero hacer es leer la imagen de un fichero [TEXTO ELIMINADO POR LA CIBERPOLICÍA] y no un programa que se adhiera a un criterio que en mi opinión complica las cosas de forma innecesaria.
Al que esté programando a alto nivel, bien, pero a los que programamos de forma casual, que tenemos que mirar Google cada poco, pues eso, que pondremos IF, pondremos código en el "onclick" del HTML y seguramente el código de más vueltas de las necesarias, pero al menos funciona, se puede compartir para que lo use quién lo vea interesante, y eso es lo importante.
#47 muchos if son eliminables aplicando ciertos patrones y principios de POO (estrategy, inyección de dependencias, etc). Evidentemente if no es malo y sin if la programacion orientada a objetos se queda en algo un tanto inútil, el problema es el abuso (null checks en tu propio código, if repitidos n veces en una clase que te dan pistas de que en realidad son dos o tres clases diferentes y mierdas así).
#55: Vale, muy bien, pero... ¿Y si solo quiero leer unos valores dentro de un archivo y mostrar el resultado por pantalla, o realizar unos cálculos a partir de unos datos mostrados por el usuario y dibujarlo en pantalla?
Demasiado si se las mantiene corrigiendo algún error que pudieran tener. ![:lol: lol](https://cdn.mnmstatic.net/v_149/img/menemojis/36/lol.gif)
¿De verdad merece la pena meterse en POO, hacer complicados diagramas... cuando se busca algo relativamente simple y no ganas dinero por programar? Porque vale, a lo mejor no son aplicaciones escalables, mantenibles y todo eso, pero.... ¿es que a caso iban a ser escaladas?
Hay programación a alto nivel, y también a bajo nivel, de gente que usa poco más que el Bloc de notas y como "gestión de versiones" copia y pega el fichero para hacer duplicados, o comparte el código en Github usando arrastrar y soltar.
¿Cuál es el problema?
Los proyectos que son 'libres' o para la comunidad de este calibre: lenguajes, frameworks, etc... no deberían ser el apéndice de nadie. "Muere" el ser que alimenta al apéndice, desaparece la esencia del proyecto y con más o menos suerte podrá o no sobrevivir y evolucionar.
Lo ideal es justamente tener un 'steering committee' o similar que se encargue de gestionar las necesidades de la comunidad de una forma justa, objetiva y democrática. El resto no es más que alimentar el ego de un pseudo-dictador o de un oligopolio que como no suelta el control de su apéndice es quién sabe más del mismo y se puede dar el lujo de decidir qué es bueno y qué no (luego que algunos no se quejen si surge alguna alternativa más democrática que la comunidad adopta en favor de ese apéndice).
Ejemplos no faltan... empezando por el kernel de Linux, cuyo desarrollador principal y creador recientemente se tuvo que tomar unas vacaciones para analizarse a sí mismo y a su ego.
Y creo que nadie discute la experiencia y conocimiento de ésta gente, simplemente la popularización, uso y finalmente dependencia de multitud de otros proyectos hace que algunos de estos se consideren a sí mismos como los únicos que pueden impartir conocimiento y sabiduría sobre su 'creación'. Es decir, el hecho de crear algo y que se popularice no implica que no surja alguien que acabe sabiendo más que tú, y quizás el problema está ahí... que la competencia es feroz y ataca al ego directamente.
Leyendo vuestros comentarios deduzco que debéis follar una cosa bárbara verdad?
#93 Lo del informático friki que no se ducha, es un poco un tema del pasado. Conozco a bastantes programadores que hacen mucho deporte y se cuidan.
Además, a las mujeres les gustan los tíos inteligentes y con buenos trabajos. 😁
#93: Lo mismo que un oso panda la mayor parte del año.
Seguirá siendo un lenguaje de juguete hasta que no le pongan soporte para corchetes.
#2 calla troll
#6 no, alt graph y llave, las dos teclas están pegadas, busca otra escusa.
#4 #3 Lo que si es un crimen es la confusión espacios, tabs, y mierdas, que encima no se ven.
Si haces un paste de algun codigo en un sitio jodido, preparate a sufrir, para encontrar al puto tab (o espacio) de más.
Típico ejemplo de poner algo cool que nadie pedía, con resultado desastroso.
Yo programo en muchos lenguajes, y cuando me toca python me entran los picores solo de preparar el entorno, sorry.
#13 #6 alt? Sois conscientes de que los creadores de Python (entre otros lenguajes) no usan teclado español no?
#13 No me compares levantar un entorno python que se hace en 2 patadas.
Con jaleos de Java (tanto el de cárnica como el de Android) o peor el invento ahora de nodejs que hasta ellos mismos lo reconocen con cosas como los boiler plates o los cli o los --init para empezar a hacer un hola mundo.
#13 y qué lenguaje te gusta más?
#90 c++ para apps movil, escritorio y embedded,
golang para server web,
perl para automation en shell,
python para scripting dentro de otros programas y poder manipular sus objetos,
javascript en browser por que no hay más cojones,
c para kernel linux.
#13 Pues mira... programo en C, php, javascript, etc. que son lenguajes de sintaxis libre. Para que puedas ser libre de escribir el programa en una sola línea si te da la gana se hacen necesarias las llaves. OK. Pero resulta que NADIE escribe como le da la gana. De hecho se han definido determinadas "reglas" de cómo escribir y al que no lo hace así se lo critica mucho.
Al final resulta que terminas escribiendo con las estructuras bien ordenaditas con tabulaciones, lo cual hace innecesarias las llaves que indican el comienzo y el fin: la propia indentación lo indica. Y eso es lo que hace python. A mi me parece genial porque eso te asegura que las cosas se van a ejecutar como las estás viendo. No hace falta un indicador de donde comienza o termina algo. ¿Cuántas veces una llave mal puesta te vuelve loco hasta que descubres lo que pasaba? Al ser la indentación la que manda eso no puede ocurrir.
#2 sorry por el negativo...
Ha sido leer tu comentario y sentir una ola de odio q me ha hecho votarte negativo...
Te compensare. Aunq tambien te digo q hay soporte para corchetes y para llaves: se usan para listas y para mapas.
#4 Python es el lenguaje que utilizan aquellos niños vagos que no saben ni quieren programar correctamente.
#11 Pues está ya entre los más usados del mundo y subiendo. Quizá lo esté usando alguien más....
#11 Vamos, que la corrección está en el lenguaje, no en el código...
Python es escueto, pero no tanto como tu lenguaje, capaz de demostrar que alguien no sabe programar correctamente en una sola línea
#11 Claro, claro mejor programar todo en ensamblador, o mejor coger dos cables pelados y ahí con 0 y 1.
#11 Cuantos años llevas programado? Porque este comentario tuyo es de novato.
#99 El novato más bien es el que me ha respondido.
#11 Estamos hablando de Python, no de JavaScript
#2 Síii... Deja que el odio crezca en tu interior. Fuerza a todos a destrozar sus manos con absurdos comandos Alt+teclaAlejadaYCercaDelEnter. Siente el poder del mal, deja que entre en tí... la cedilla. Muhahahaha....
#6 programas con teclado en español? Te va el masoquismo? 😐
#67 Si te va el masoquismo usa uno frances. Tuve una vez que escribir un correo desde un cybercafe en Paris y si no cambio los settings no lo habria terminado nunca.
#2 Obvious troll is obvious.
#2: De hecho en mi opinión deberían inventar un Python con la notación de Javascript, es decir, que puedas definir variables "en serio" (int32, uint64... y si das soporte para tipos extra (punto fijo), mucho mejor), vectores y matrices (de dos dimensiones o más) como tal, y no como estructuras y estructuras anidadas... pero sin la sintaxis de Python donde la indentación juega un papel fundamental y complica bastante en mi opinión la modificación del código, por ejemplo, envolviendo un trozo en un IF porque lo quieres saltar.
Conste que adoro JavaScript, porque para cosas pequeñas va bastante bien, solo necesitas el Bloc de notas de Windows y el mismo navegador FireFox, pero por favor, definir una matriz así es estúpido:
https://stackoverflow.com/questions/8301400/how-do-you-easily-create-empty-matrices-javascript
En C es como un vector con unos corchetes adicionales y con esas puedes hacer tantas dimensiones como necesites.
#26 puedes definir variables en serio, hay un módulo estándar llamado ctypes otro llamado array, pero la comprobación estática de tipos, en python, es opcional
lo que no podéis hacer todos es juzgar lo que no conocéis
#38: Si, pero... ¿Y si ponemos las cosas "por defecto" como en C?
Me parece increíble que C, siendo más rígido, maneje mejor algunas cosas que JavaScript. Y bueno, eso se puede arreglar, porque o de no separar con llaves de Python, pues eso, para rehacer el lenguaje desde cero...
#26 "por ejemplo, envolviendo un trozo en un IF porque lo quieres saltar."
Es que eso, por lo general, es un poco chapucilla... Los If, los menos posibles...
#26 ¿Has mirado Nim? https://nim-lang.org/
#82: No, ahora lo miro, aunque parece que no tiene llaves como C, que es algo que me gusta mucho de C o de JavaScript.