Programar es fácil, programar bien es muy difícil. No hay que engañar, que luego abandonan decepcionados a la primera complicación. Problemas complejos + estructuras complejas requieren dominio de algoritmos básicos fundamentales, y conocer la complejidad de cada uno.
|
etiquetas: programar , bien , consejos
Es un error enseñar Java desde el principio, lo experimento desde hace años (ojo, doy clases y veo la diferencia), y expliqué porqué:
- Porque se usa IDE (es casi obligatorio si no eres gurú de Java, y no lo eres cuando comienzas a programar) por lo que ni entienden muy bien qué están haciendo (cosas del autocompletar, por ejemplo) y ni siquiera aprenden a estructurar y sangrar el código (porque ya lo hace el IDE).
- Por obliga a aprenderse "reglas" sin saber muy bien por qué, por ejemplo:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World");
}
}
¿Qué es una clase? ¿qué es una función pública estática de una clase? Para que lo entiendan deben aprender antes conceptos de POO, pero resulta que todavía ni saben lo que es "programar algoritmos en lenguajes imperativos secuenciales" (Java y todos los lenguajes orientados a objetos son eso, fundamentalmente).
Lo mismo en Python:…...
Señor @gallir , soy un absoluto patán con XHTML y PHP. Sin embargo, con Python (estudiando en mi casa fuera del GS de Admón de Sistemas y Redes) se me da mil veces mejor y la estructura me sale sola.
O soy yo o es el lenguaje y la declaración de datos/metadatos para XML.
Creo que son las dos cosas
Por otro lado, odio XML con todas mis fuerzas. Adoro JSON
Al fin alguien que me comprende. En fín, profundizaré lo que pueda en Python y luego C esporádicamente. Llegué (malamente) a punteros y structs y gracias.
EDIT: Hablando de JSON, ví un playlist de emisoras de radio en streaming en ese formato y es una maravilla.(me dió por sacar la lista de URL's en el fichero desde Python y lo logré sencillamente).
Y también te recomiendo registrarte en sitios como Code Academy y similares.
Curioso consejo de alguien que desarrolla en PHP.
PHP a partir de la versión 5.4/5.5 es homologable a otros lenguages scripts del lado del servidor. Aungue entiendo el consejo de Phyton, el problema es que hay menos librerías en este lenguaje y no todo el mundo tiene ganas de reinventar la rueda.
Yo creo que es mil veces mejor que te expliquen que es un puntero y una dirección de memoria que que te digan tu pon este código para hacer esto y ya lo entenderás.
En mi opinión, los mejores lenguajes son principalmente C como lenguaje estructurado y C++ como lenguaje orientado a objetos.
www.izaping.com/wp-content/uploads/2010/09/gato-culo-caca.jpg
Siendo sinceros, el 90% de los programadores no necesitan saber algoritmia porque se dedican a interfaz de usuario y lógica de negocio simple. La gran mayoría de aplicaciones son una capa CRUD bajo una capa de UI específica para el caso de uso y poco más.
*Asumo que no la conoces porque lo más "funcional" que recomiendas es JavaScript.
#28 conoces Rust y Nimrod? A mí Go no me llama nada, me parece una chapuzada y las abstracciones (en especial las de concurrencia como los canales) me parecen contraproducentes.
Por mantener la compatibilidad y demás. Y depender de un intérprete que no forma base del sistema.
Perl sería mas correcto. Está en todas partes y forma parte de la base de todos los Unix.
A mí me parece más importante que se adquiera el hábito de pensar de forma lógica y entender las estructuras, que pegarte con "el metal" cuando, a día de hoy, los punteros se usan poco más que en aplicaciones de alto rendimiento, empotradas o por masoquistas que no se quieren adaptar al siglo XXI.
#25 déjame adivinar: aprendiste a programar en los 90 o principios de los 2000.
Yo aprendi POO con Java y cuando vi C++ no tuve ningun problema en pasarme a C++, yo veo una sintaxis muy clara y sencilla. Aparte de tener la potencia de C y la potencia de orientacion a objetos...
Pues ya van sacando software entre ellos emuladores de GB y demás. Vale, emular una Game Boy no es especialmente "complejo" y con documentacion puedes hacerte la CPU Z80 en dos meses yendo a lo muy lento como un servidor, pero sí que puede llegar a sorprender.
#36 en el C++ que se usa de verdad no tocas punteros, todos son referencias gestionadas. Es prácticamente Java.
La cuestión de C++ es que es fácil dispararte en el pie. Por poner un ejemplo... ¿cada vez que implementas destructor, constructor copia o el operador de copia por asignación, implementas los otros dos?
en.wikipedia.org/wiki/Rule_of_three_(C++_programming)
Puede que Python imponga ciertas prácticas que puedan ayudarte a hacer un código "mejor". Pero no nos equivoquemos, con Python se puede programar mierda igual de bien que con PHP si te lo propones.
Ahora, si necesitas las muletas que te ofrece Python para programar "bien", lo más seguro es que el problema no esté en el lenguaje de programación.
Además, como han comentado anteriormente, con las últimas actualizaciones PHP ha mejorado mucho como lenguaje de programación orientado a objetos. Entre otras cosas, porque no tiene problemas en copiar de nadie. Aquí tenéis un ejemplo, sacado directamente de Python (o al menos yo lo conozco de Python...): es1.php.net/manual/en/language.generators.overview.php
En fin, esta es la misma guerra de siempre. Aunque prácticamente todos los lenguajes de programación te permiten hacer cualquier cosa, cada uno es bueno para lo que es. Y a día de hoy, ningún lenguaje de programación me ha demostrado ser mejor que PHP en lo suyo. Ya sea usando frameworks o sin usarlos.
Y vaya por delante que en realidad soy un enamorado de Python (reconociéndole también algunos defectos). Pero en mi experiencia no cambiaría para la programación web PHP por Python (ni por Java, ni por Ruby, ni por C#... ni un largo etcétera de lenguajes que he probado) si no hay otros imperativos que condicionen mi elección.
He dicho...
Es pasar a Python y sí, ahí ya entiendo mejor los objetos y todo es más simple.
No termino de entenderlo. C vas a "bajo" nivel y puedes ver mejor las cosas.
he podido funcionar perfecto con php, normalmente van en sus repositorios... solo tengo que... yum install php o sudo apt-get install php etc... no tengo ni que bajarme el codigo y compilarlo
Y como framework uso gedit
El problema viene cuando uno no entiende que no es lo mismo un array de enteros que un entero, que ese nombre de variable en realidad lo único que contiene es una dirección de memoria y no el contenido de la misma.
Esas pequeñas sutilizas que en C aprendes cuando quieras volver atrás te vas a hacer un lio porque tu estás acostumbrado a manejar variables y no diferencias entre la pila y el montón. Si no sabes como se maneja la máquina interiormente jamás serás un buen programador.
Mi consejo es que(Aun pagando), vete a que te peguen un buen polvo... Sin coñas
Respecto a Go, obviamente te voy a decir otra vez que prefiero Scala + Akka.
Estoy de acuerdo en lo de empezar por C (o ensamblador) y subir para arriba absorbiendo las abstracciones de cada generación de lenguajes. Y también con lo de estudiar estructuras de datos, algoritmos y las matemáticas necesarias para calcular complejidades. Aunque el resto son un poco consejos de perogrullo.
Hete ahí que diferencie en el comentario entre puntero (apunta inherentemente a memoria, trabajar a bajo nivel) y referencia (una abstracción sobre los primeros).
No veo una ventaja de C++ poder usar punteros. La mayoría de las veces es, si acaso, un inconveniente. ¿Cuándo fue la última vez que usaste aritmética de punteros? Si la respuesta es "todo el rato" estás programando mal (o estás programando en sistemas empotrados). Si la respuesta es "nunca"... ¿cuál es entonces la ventaja de los punteros frente a referencias gestionadas?
"El problema viene cuando uno no entiende que no es lo mismo un array de enteros que un entero, que ese nombre de variable en realidad lo único que contiene es una dirección de memoria y no el contenido de la misma."
No. El problema es que en C/++ la diferencia es sutil. Un int* puede (o no) ser un escalar o un vector. ¿Cómo lo sabes? Inspeccionando el código, no te queda otra... y eso es un puto dolor de culo seas novato o no.
En real-life-C++ usarás librerías estándar que implementen vectores y acabarás programando Java-like.
La culpa de no distinguir entre un escalar int* y un vector int* no es del humano, es de la abstracción (porque tanto C como C++ son abstracciones sobre assembly). En Java no hay pérdida, o es un "int" o es un "List<Integer>". En ese sentido Java gana sobre C/++ igual que Haskell sobre Java.
Pero vamos que tampoco voy a defender a Java
"Esas pequeñas sutilizas que en C aprendes cuando quieras volver atrás te vas a hacer un lio"
¿Y quién quiere volver a atrás? Si no manejas sistemas empotrados o de alto rendimiento no tiene sentido estar tan cerca del "metal". Y si lo haces.... ¿qué
Además que en mi opinión es justo al revés, una vez entiendes la programación a alto nivel puedes "volver atrás" y entender los punteros sin necesidad de pelearte con entender qué es un "statement", qué significa "==" frente a "=", qué cojones es una variable, qué es una función, etc.
Si a alguien le enseñas a programar y a la vez le quieres explicar la diferencia entre * y & pues le vuelves loco sí o sí. Si ya sabe programar, al aprender punteros sólo tiene un problema contra el que enfrentarse.
"Si no sabes como se maneja la máquina interiormente jamás serás un buen programador."
Discrepo. Para mí un buen programador:
- Sabe de algoritmia (lo que bien comenta Gallir).
- Es bueno estructurando.
Saber qué hace la máquina por debajo es lo de menos. Y te lo dice alguien que aprendió con C y fue fan de ASM en su día.
Podemos deducir entonces de tu comentario que todo el SDK de DirectX esta mal progrmaado porque usa punteros en C++ en vez de referencias.
Al igual que el SDK de Qt, OGRE3D, etc...
Dices que apra ser un buen programador hay que "Saber algoritmia" y digo yo que para hacer buenos y eficientes algoritmos necesitarás saber como funciona la máquina a bajo nivel para poder optimizar el algoritmo.
Muy importante también es no practicar siempre sólo, practicar con otros, sentarse con otros programadores a resolver un problema, aprender como otros afrontan los problemas y como van desarrollando las soluciones, no sólo aprender del resultado final sino sentarse con otros y aprender el proceso para alcanzar esos resultados. Participar de comunidades de desarrollo, participar en proyectos open source ayuda en este objetivo.
Y leer, leer y leer buenos libros sobre programación, y por supuesto, no ser tan idiotas de caer en fanatismos y flames ridículos y meter en nuestra caja de herramientas todo lo que pueda ser de utilidad.
¡Pero si Clojure es un amor! A mí me parece sencillísimo. Haskell tampoco es difícil, sólo está mal explicado.
"puedes usar Scala como alternativa intermedia."
Ugh, aquí va a haber hostias
Odio Scala, entre otras cosas porque se queda en "el intermedio" y hereda lo malo de ambos paradigmas. ¡Ojo! Yo empecé con Scala, leyéndome el libro de Odersky del tirón, pero me he dado cuenta a la larga de que meter POO en funcional no sólo es innecesario sino que es contraproducente. Vale, es mejor que POO a secas (bueno, ahora con Java8 ni siquiera) pero es que te cargas todos los beneficios de la PF de un plumazo. IMHO una vez entiendes la PF la POO sólo complica la estructura del programa.
"Lo digo más que nada porque entrar de golpe en la programación funcional viniendo de imperativa, estructuras de datos mutables y POO se hace cuesta arriba."
Pues yo lo que normalmente veo es que la gente razona mejor las estructuras de datos inmutables que las mutables... aunque tienes mucha razón en que cuando ya vienes con la mentalidad imperativa se hace duro.
A mí la PF pura me resultó un cambio radical. Ya no imagino tener que tirar de POO. Me parece mucho más cercano a lo que realmente quiero expresar, más cercano a como funciona el mundo y, sobre todo, mucho más útil en cuanto a reutilización del código.
"(monads, je)"
Esa es una de esas cosas de Haskell que son sencillísimas y la gente las complica tanto al explicarlas que parecen salidas del infierno.
Si mucha gente dice que phyton mola, que ruby mola, que node.js mola... pero aun no he encontrado motivos suficientes para pasarme.
A lo mejor con node.js con eso de que es multihilo se podria jugar bastante para por ej. lo de domotica que tengo que hacer priulas acojonantes en php
Y eso que antiguamente lo hacia muchas partes en shellscript pero al final estoy pasando todo el codigo a php....
También puedes deducir que las APIs son inherentemente no-manejadas en C++ siempre que quieras ser agnóstico en cuanto a bibiotecas (ves, de nuevo otro tiro en el pie de C++) porque no están integradas en el lenguaje y cada cuál usa su abstracción de punteros manejados preferida.
DirectX no te puede exponer los punteros ya manejados, pero tú eres libre de hacerlo (y probablemente sea recomendable).
#55 la optimización del algoritmo pasa por usar punteros un 0% de las veces más o menos Es mucho más importante aprender algoritmia y complejidad para optimizar que aprender cómo funciona la máquina.
Y mi teoría como digo en #50 es que es más fácil el camino inverso: primero aprender a programar y luego bajar al metal. Si tienes que aprender a programar y a la vez cómo funciona la máquina, ¡tienes dos problemas a la vez!
Tampoco soy un experto soy mas bien un superviviente, pero he trabajdo en empresas en que las webs las hacian en c, o c# o en .net y menudos cacaos maravillaos para hacerlo funcionar todo, y unos servidores super caros con licencias windows y su ... madre....
Al final todo está convergiendo a la web, los lenguajes orientados a web tienen ciertas ventajas...
(aunque por ej. enviar datos raw por los sockets en php se me hizo imposible y no me apeteció ponerme con curl... en python los ejemplos que vi eran mas sencillos que en php
Cuando ya entiendes todo eso puedes aprender qué son los punteros de una forma más fácil (sólo tienes que aprender punteros) y sobre todo más profunda (como ya tienes más piezas del puzzle, ves mejor los huecos que te faltan).
$a = 5;
$b = "Hola";
Es más difícil explicarle el sentido de tipo de datos a alguien y porque necesita hacer conversión de tipos que si empezó con C y aprendió que si quería crear una variable de entero debía hacer:
int a = 5;
Las dos variables a son de tipo entero, los dos lo sabemos, un novato no puede captar esas abstracciones en PHP y no entender la diferencia.
pero cuando he programado en java, o c siempre dependia de binarios que no funcionaban en otras plataformas, o de pesados ides piratas que a veces desaparecian y te tocaba aprender otro ide, y dependiente de sistemas operativos...
con php, dame un editor de terxtos y un cacharro que ejecute linux y te hago lo que sea y no necesitamos ni monitores o puertos series ni nada todo via web
Pero vale, siguiendo con tu ejemplo, ¿de verdad te parece más complicado? A mí me parece más simple que primero aprendan a programar y todo sea mágico, y luego les dices:
"Todo lo que has aprendido está muy guay pero varios lenguajes, entre ellos C, además te permiten anotar tipos.
De esta forma el compilador te ayuda, asegurándose de que toda la lógica de tipos sea correcta. Si tu programa compila, al menos ya sabes que no has errado en los tipos y te puedes dedicar a buscar el fallo en otro lado."
Ya sabía programar, y ahora encima entiende por qué existe el sistema de tipos... cosa que no entendería, y sería como tú dices "porque sí", si hubiera aprendido C primero.
Pero gracias a que sabe PHP, ahora le puedes explicar:
"La memoria de tu ordenador en realidad es lineal, no tiene una estructura, no son más que 1s y 0s a cholón. PHP gestiona la memoria por ti, pero en C, al ser más cercano a cómo funciona el ordenador, eres tú el que tiene que hacer las gestiones."
Todo esto le resultará más fácil de comprender si ya sabe qué es una cadena y las ha usado.
Yo creo que es mejor al revés, primero enseñar que hay varios tipos de datos y como se representan en el interior de la máquina, así todo cobra mucho más sentido luego, al menos para mí, no me gusta la magia
$pepito = 12354123452346;
ele...
$ppito = "asgafghafghsdfg";
ele...
$pepito[0] = 123423423;
ele...
Cuando programaba videjouegos en mid2p y solo tenias 64ks... vaya que si interesaba optimizar el java de los cohones, optimizabas hasta el compresor que te hacia el jar
¡Pero no te olvides de explicar lo que son las conveciones de llamada y las diferentes secciones de un ejecutable PE!
Si empezamos con el "mejor no enseñar lo mágico" empiezas a bajar por una pendiente resbaladiza y les acabas enseñando física y diseño de chips.
#74 "supongo que para alguna cosa servirá saber que en c realmente estas reservando un par de bytes para un entero"
Wat?
"que en java realmente son todo strings"
Wat?
Y es lo que hacen en ingeniería informática
Pero no, antes que todo eso empiezan (por lo general) dando lo básico de programación en un lenguaje de "alto" nivel (en mi caso, Pascal).
¡Que no digo que no haya que enseñar las tripas, ojo! Sólo que cuando ya conoces lo básico es más fácil bajar a pegarte con punteros*, igual que cuando ya sabes andar es más fácil correr.
*Punteros que, por cierto, también son magia. En realidad la CPU no entiende de punteros, sólo direccionamiento. Los punteros son una cómoda abstracción que nos hace C.
En la UPM son algo más normales y en primero tienes C y C++ y no tienes ASM
Claro que en la ULPGC te hablo de Ingeniería Informática y en la UPM de Ingeniería de Software, que se supone más especializada.
Te hablo de estas dos universidades porque son en las que he estudiado.
Jo, con lo fácil que era antes con ASM para un Z80 de Spectrum con "randomize usr direccion* e ir cargando todo.
A saber como darán las ingenierías dentro de 20 años...
Con tantas capas va a ser inmanejable.
La verdad que tengo suerte porque entré ya sabiendo programar (ASM incluído) pero vamos, yo me imagino a los compañeros que entaron fresquitos y les pones ASM delante y les da un patatús. ¿Eso de poner ASM de primeras es porque quieren cargarse a la gente o qué?
#80 en el futuro los SOs serán navegadores web. Dentro de navegadores web. Dentro de AÚN MÁS navegadores web. Dentro de un sueño. Dentro de Matrix. Dentro de una tortuga. Y luego tortugas hasta el final.
#81 no es aplicable a tu comentario porque el mismo problema está en PHP (o peor) pero muchas de las bibliotecas que requieren compilar son un orto en Windows. No-recuerdo-cuál biblioteca de OpenGL se negaba a compilar la muy puta, con todo el stack CygWin de por medio. Acabé lanzando una VM y trabajando en Linux
Además que PyPi es un orto y Pip una mierda de gestor de paquetes (que insisto, PHP es peor )
Entonces será el día en que lo deje y me dedique a otra cosa
Fuera coñas, si el futuro es la web y 2000 lenguajes cada día con más inconsistencias que estándares (tjo tjo W3C) mando esto al cuerno.
¿Cuántas plataformas elearning están desarrolladas en Python? Porque en PHP hay cientos y algunas buenísimas, como Moodle.
¿Cuántos CMS hay desarrollados en Python? Me refiero que tengan literalmente miles de módulos, themes y plugins. Porque en PHP hay muchos y algunos bastante buenos, como Drupal o la última version de Joomla.
¿Cuántas plataformas de pago hay en Python? Porque en PHP hay cientos y algunas con miles de themes, plugins y módulos como Magento.
¿Cuántas frameworks tiene Python aparte de Django? Es decir, Django es una muy buena framework, pero cada programador tiene sus manías y para alguno se puede hacer muy pesada o no ir con su filosofía de programación y a todos nos gusta tener alternativas. PHP tiene ahora mismo cientos de frameworks y algunas son muy buenas, como la de Zend, Symfony, Laravel, Yii.
Podría seguir toda la noche pero me imagino captas la idea.
Ojo, que yo desarrollo en Python también y me encanta y en muchas cosas ha sido pionero y los demás les han copiado. Yo todavía recuerdo hace 10 años cuándo descubrí por ejemplo su increíble forma de manejar cadenas, expresiones regulares y muchas otras características avanzadas, pero bueno, si hay más desarrolaldores en PHP es por algo, supongo.
En fin, tú en mi comentario veías "ijnoracia", yo en el tuyo veo fanboyismo desorejado y prepotencia.
* Posibilidades y tratamiento de Objetos
* Caché (OPcache en la 5.5).
* Traits
* Sintaxis varias (arrays): [1, 2, 3]
* Llamadas a funciones en objetos sin necesidad de instanciar: echo (new Car)->door;
* Referencias a indices en devolución directa de un array des una función: echo cars()[0];
* Servidor en línea de comandos.
* Serialización de un objeto por a través de un magic method.
* Nueva API para gestión de contraseñas (5.5).
* Array y String de referencia directa: echo "coche"[3];
* Uso de empty en functiones (Por fin!!!!): if (empty($Car->isBroken()) {
* etc, etc, etc...
Y lo que nos espera en PHP 6 o PHPNG!! Si es que llegamos con fuerzas, visto lo visto con Hack...
El problema de PHP es que es muy sencillo comenzar, y con él se hicieron las mayores chapuzas de la historia de la programación.
Pero me repito, con un buen conocimiento de PHP se pueden hacer virguerías
Luego C# es un gran lenguaje pero la falta de compiladores optimizados a lenguaje máquina lo limitan a desarrollos dónde la velocidad ni el consumo de memoria sean críticos.
Me ha gustado lo que ha dicho sobre las estructuras algorítmicas básicas, son esenciales y ayudan a mantener un código coherente y fácil de leer.
Con lo único que jamás estaré de acuerdo es con lo que dice de Javascript, con los años le he cojido manía pero siempre me ha parecido un lenguaje de script extraordinariamente malo.
Hace años tuve que trabajar con Smalltalk en VisualAge y le acabé cojiendo cariño por la facilidad que tenía para manipular datos.
Python está en web, juegos, CUDA, administración de sistemas, inteligencia artificial, cálculo avanzado... mediante librerías, como comenta #89.
La lista donde se usa Python es enorme. Empezando por el gestor de paquetes de Fedora, Yum.
Lo segundo, de las cosas que comentas, de todas hay alternativas desarrolladas en Python, de mayor o menor calado. CMS hay a punta pala, frameworks igual (no todo es Django gracias a dios, está Flask, Bottle, o liarte la manta a la cabeza con Werkzeug o a pelo y hacer tu propio framework según el estándar WSGI). Lógicamente hay más cosas hechas en PHP orientadas a la web, porque PHP es un lenguaje específico de back-end, no como Python que es un lenguaje de propósito general. (Sí, PHP puede usarse para más cosas aparte de back-end... seamos serios).
Por último, lo que dices de que "hay más desarrolladores de PHP por algo", ese algo es que desarrollar para la web con PHP es muy sencillo, la barrera de entrada es prácticamente inexistente: te instalas un apache y php y con solo poner un echo "Hello world"; ya vale. Con Python pues es más jodido, tienes que tener un proxy inverso, tienes que tener un servidor de aplicaciones tipo gunicorn o mod_python, etcétera. No es trivial. Ahora, que quede claro que el hecho de que haya más desarrolladores de PHP que de Python no se debe en absoluto a que PHP sea un mejor lenguaje, ni de coña.
#44 Me interesa ¿cuál es ese sub?
Y hay muchas alternativas en Python pero no comentas ningunas. Y frameworks salvo Django las demas son de juguete, para universitarios ociosos, pero nadie construye nada serio en ellas. Curioso además que no menciones a Zope, que es la otra única decente, aunque últimamente no está muy bien mantenida ni actualizada.
En cuánto a Python como lenguage de propósito general... va, venga, estando C, C+, C#, Java o incluso Delphi o Cobol nadie utiliza Python para proyectos serios en ciertos ámbitos, aunque en teoría pueda hacerse. Las dependencias de Python, sus gestores de paquetes, etc. a la hora de la verdad son un dolor de muelas. Python es un lenguaje ultrapotente y maduro como scripting, lo demás son cuentos.
Y nadie ha dicho que PHP sea un mejor lenguage, solo que es más sencillo implementar aplicaciones en el universo PHP que lo es en Python, y eso obviamente no es algo a despreciar. El cliente: oye, que quiero que mi web tenga un foro, un blog, una plataforma elearning para dar formación interna y un tienda online para vender gamusinos. Y quiero que tengan además estas características y estas otras y todo integrado y retroalimentado. Y lo quiero para dentro de 3 meses y sin gastarme más de 4.000 euros- En PHP tiene cientos de alternativas sólidas, con cientos de plugins, módulos, themes, y tropecientos programadores especializados en hacer adaptaciones personalizadas. Y todo vía últimamente instalable vía Composer, osea fácil y rápido.
Meanwhile en Python....
Python fué usado en un videojuego español hace la tira de años. Blade, igual te sueña.
Con lo de que nadie utiliza Python para proyectos serios ya te retratas tú solito. Sería muy fácil ponerte ejemplos de cómo Python ha eclipsado a MatLab en desarrollos científicos, pero el dominio de Python en ese área es tan OBVIO que no me voy a molestar. Por lo demás, échale un ojo a este artículo de la Wikipedia en.wikipedia.org/wiki/Python_(programming_language)#Use entiendo que nombres como NASA, Google y tal te sonarán.
Sobre tu último párrafo, pues sí coincido contigo. Python no tiene ni mucho menos la veteranía de PHP en cuanto a desarrollo web, por lo que te comenté en #89, ya que PHP se creó para eso y Python no. Pero es normal, lo raro sería al contrario. Y al tiempo, porque en cuanto el desarrollo web con Python despegue un poco más, no habrá escasez de recursos. Ya para django hay apps de todo lo que comentas, por poner un ejemplo.
PHP está lejos de ser un lenguaje de propósito general.
#94 Sobre proyectos serios...
Blender. Reddit. Enough said.
Pero bueno, tú sigue tirando de wikipedia y de debates teóricos que no van a ninguna parte y llamando "ijnorante" a la peña que yo mientras tanto sigo ganandome la vida con esto, como repito, llevo haciendo ininterrumpidamente los últimos 20 años.
#95 ¿Quién dijo que PHP fuese un lenguage de propósito general? ¿Oyes voces en tu cabeza? ¿Serios problemas de compresión lectora? ¿Quién dijo que Python no era una alternativa seria en muchos ámbitos? Sencillamente, no lo es por ejemplo en una típica aplicación de escritorio, porque para eso hay alternativas mejores, pero en otras muchas pues sí, nadie lo niega.
En fin, si intentas meter baza hazlo al menos no tergiversando lo que otros dicen o explican.
- Todo es una función:
En cualquier lenguaje: myString.split(","); myArray.indexOf(a).
En PHP: explode(",",$myArray); array_search($a,$myArray).
- Hay montones de alias (funciones con nombres diferentes pero que hacen lo mismo o casi), y sus nombres no son para nada descriptivos:
strpos, strrpos, strripos. Si no conocéis PHP ¿qué os dice esos nombres? strripos es el mismo que strrpos, pero insensible a las mayúsculas, y strrpos es lo mismo que strpos pero empezando por la derecha. ¿No era mejor ponerle dos parámetros a strpos y dejarnos de marear con un océano de funciones?
- Los parámetros no son para nada coherentes:
¿Era array_key_exists($array,$key) o array_key_exists($key,$array)? Siempre hay que estar mirando el manual porque en algunas funciones va primero el array y en otras va de último. Y así es en todas las librerías.
- Algunas funciones devuelven FALSE que se confunde con 0:
Normalmente en cualquier lenguaje myString.indexOf(a) devuelve un número que es la posición de a en myString o -1 si no se encuentra.
En PHP strpos($myString,$a) puede devolver FALSE que si no tienes cuidado te lo hace pasar por 0, lo cual indicaría erróneamente que $a está en la posición 0 de la cadena, cuando en realidad no está.
- ¿Cuándo un array es asociativo y cuándo no lo es?
¿Porqué un programador querría tener una estructura que a veces se comporta como un array asociativo (a.k.a. diccionario, map o hash) y a veces como uno secuencial? Y lo peor es que tratar de averiguar si un array es o no asociativo te costará hacer tu propio algoritmo (o copiarlo de Stackoverflow), cuando era tan fácil como hacer un tipo array y un tipo dictionary/hash/map/lo-que-sea.
- ¿include, include_once, require, require_once?
Pero qué mier... ¿Porqué no hacer un único "import" y ya? ¿Qué sentido tiene hacer 4 funciones que hacen casi lo mismo? Ya sé que esto se ha corregido con la versión 5.3, pero aún hay que lidiar con la importación de scripts (porque en realidad no son módulos y mucho menos paquetes) en servidores desactualizados.
- Algunas funciones no lanzan errores capturables con try/catch:
Son especialmente las viejas (como las de mysql) que vienen de PHP4. Por más que las encierres en try/catch, si el php.ini de tu servidor no está correctamente configurado, te llenarán la página con bonitos "warning" y "error".
- Otras falencias menores:
Los engorrosos, feos y totalmente innecesarios $, ->, =>; el engorroso y casi inexistente reflection; el no poder instanciar los arrays con [] y {} como lo hacen los demás (menos Java); la falta de sobrecarga de operadores y []. Al menos ya hay closures.
En fin, si no fuera por las exigencias de los clientes (que quieren compatibilidad con cuanta chapuza le hayan hecho en PHP antes y que corra en cualquier hosting baratillo), ni volteaba a mirar semejante adefesio.