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.
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
">
}
¿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:
print("Hello world")
¿Cuál es más claro y cuál exige menos conocimientos? (y lo puedes hacer en cualquier editor de texto y ejecutar directamente (python hello.py, sin necesidad de IDE o llamadas a builders previas).
Por otro lado, justificar que es bueno "porque lo usan en universidades nórdicas" es una falacia de autoridad de copón. No creo que sus profesores sean mejor que yo, ni que no puedan cometer fallos.
Y sobre ensamblador, no dije que no haya que aprenderlo, sólo que no lo pondría como un requisito fuerte:
1. Estoy hablando de "gente que quiere aprender a programar", no de estudios universitarios de informática (donde sí se lo estudia).
2. Afirmo que se necesita como mínimo saber C para relacionar lo que se programa a como se ejecuta en la arquitectura.
3. Saber más lenguajes de programación siempre es bueno, y nunca diría que no se haga.
4. Yo programo o programé en: Fortran, Basic, Cobol, Prolog, Pascal, Ada, C, C++, Smalltalk, Shell/Bash, awk, Perl, Ruby, Python, Java, Lisp, PHP, Javascript... Es decir, sé un poco de lenguajes, y de todos, Python me parece el más simple y potente para empezar a aprender, y el C un requisito mínimo.
#14:
da igual lo bien q programes, siempre alguien te pedirá que le arregles el ordenador
#166:
#50 Yo creo que tendemos a ser chovinistas los que venimos de la universidad y nos hemos pegado con Pascal, C y posteriormente C++.
No creo que debamos(en terminos laborales) pensar que alguien que aprende Java y sólo Java tenga que ser un mal programador. Probablemente es curioso en su trabajo y respeta las buenas prácticas en la forma de hacer las cosas.
Ahora bien...
Yo estoy corrigiendo exámenes de candidatos para entrar en una empresa importante dedicada a este mundo y he de decir que los que sólo conocen Java, suelen hacer un examen muy bueno en la parte Java que es elemental, pero no captan los detalles del problema, que es donde se dan los puntos, es decir, donde vamos a pillar al examinado. Además, de que cuando se van al resto del examen donde no hay palabra de java, sino de otro lenguaje o directamente pseudocódigo, meten la pata estrepitosamente.
Por otro lado, los que hacen el examen y son de carrera, sin experiencia, suelen fallar en el conocimiento del lenguaje pero demuestran un espabilo mayor allí donde hay problemas lógicos que comprender.
No sé si me explico, pero creo que las tablas en programación (conocer los cimientos de que va todo esto) son necesarias al fin y al cabo.
#118:
Voy a burlarme un poco cambiando la profesión de informático por la de constructor en sus consejos:
Construir una casa es fácil. Construir una casa bien es muy difícil. No hay que engañar, que luego abandonan decepcionados a la primera complicación.
Cuanto más grandes es una casa, más debes pensar en su mantenimiento futuro. Hacerlo bien lleva aún más práctica.
A medida que crece la casa, se necesitan materiales y estructuras más complejas.
Casa compleja con estructuras complejas, requieren el dominio de lo básico.
Y aquí la mayoría peta de forma estrepitosa ¿Pongo un cable de 1.5 ó de 6? ¿Meto un tubo de 80x40 o necesitaré uno de 80x60?
Lo digo fudamentalmente por "enseñar a los niños" y que "todos deben saber un poco de electricidad y fontanería". Bien, pero cuidado en crear falsas espectativas.
Así como todo el mundo no puede ser buen músico, no todo el mundo tiene la capacidad o la voluntad de esforzarse en ser un manitas.
Saber cambiar un enchufe no requiere la experiencia para diseñar, construir y mantener una casa compleja.
Nunca empecéis a diseñar la cocina con el programa de IKEA. Agrega una capa de abstracción muy elevada.
Una excavadora no está mal, pero exige GASOIL, lo que os hace demasiado dependiente de él, y no sabéis ni usar un pico y una pala.
#99:
Cuánto PHPero hay por aquí. No lo toméis a mal, pero PHP no es más chapucero porque no es más viejo. Cada que me toca hacer algo en PHP os juro que me dan ganas de vomitar:
- 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.
#38:
Esa costumbre que se está imponiendo en los últimos tiempos sobre satanizar a PHP porque te permite hacer código horrendo, barbaridades algorítmicas, ... y poniendo a Python como ejemplo de como hacer bien las cosas me parece un sectarismo sin base alguna.
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...): http://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...
#86:
#3 PHP además de divertido es tremendamente potente, sobre todo en las últimas versiones (PHP 5.4 y superiores) con la mejora sustancial en cuanto a:
* 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())
#9:
#0 Si llega a portada me hago mi primer tatuaje, o casi,...tu eliges donde.
#7:
#4 En Menéame usamos mucho de JSON, y haciendo manipulaciones torticeras con él, por ejemplo los gráficos de karma/votos de cada noticias, o los resultados de http://www.meneame.net/trends
#2:
"Si estáis aprendiendo a programar, directo al Python y evitad PHP (enseña malas prácticas y es un lenguaje sin siquiera coherencia)."
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
#3:
#2 PHP es divertido si sabes programar y le encuentras el truco (y te ríes de sus barbaridades, por ejemplo las funciones -tan útiles- de array_*().
Por otro lado, odio XML con todas mis fuerzas. Adoro JSON
#15:
#9 lo he visto en twitter y sin ser de portada dice "verdades de barquero", pero por un tatuaje tiene mi voto (la próxima vez pon "si llega y se mantiene" )
#8:
#6 Si sabes inglés, tienes un montón de títulos online para cada lenguaje de forma gratuíta.
Y también te recomiendo registrarte en sitios como Code Academy y similares.
#5:
Un poco de "pelota" a Gallir por aquí nunca viene mal
#9 lo he visto en twitter y sin ser de portada dice "verdades de barquero", pero por un tatuaje tiene mi voto (la próxima vez pon "si llega y se mantiene" )
#4 En Menéame usamos mucho de JSON, y haciendo manipulaciones torticeras con él, por ejemplo los gráficos de karma/votos de cada noticias, o los resultados de http://www.meneame.net/trends
Esa costumbre que se está imponiendo en los últimos tiempos sobre satanizar a PHP porque te permite hacer código horrendo, barbaridades algorítmicas, ... y poniendo a Python como ejemplo de como hacer bien las cosas me parece un sectarismo sin base alguna.
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...): http://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.
#38 PHP es malo, punto, está mal diseñado, está mal implementado, carece de muchísimas características básicas, permite hacer cosas horribles, es un lenguaje para diseñadores que pseudo-programan. Claro hay genios que pueden hacer programas decentes, pero un hay músicos que podrían hacer canciones decentes usando trastes de cocinan, pero eso no convierte a los trastes de cocina en instrumentos músicales.
La condena que se hace a PHP en este articulo por el Doctor, es como tirarse de cabeza a una piscina vacía. Creo que lo más importante es, antes de ponerse manos a la obra, buscar, comparar y tomar la mejor decisión de usar las librerías/lenguajes apropiado para el problema que tenemos, ahorrando lo máximo en costes y esfuerzo. Para ello suelo buscar por la red y hacer caso omiso a este tipo de condenas personales que se hacen sin aportar ningún dato objetivo. Lo mismo con XML/JSON, me encanta JSON, pero no ofrece la misma robustez que un XML validado con un DTD. no? es un ejemplo.
Tengo experiencia y multitud de proyectos desarrollados en PHP, MySql, javascript que dejarían a menéame en la lógica de un hello world B) :P. Por el lado de procesado/servidor me encanta Perl, la potencia de las bases de datos orientadas a columnas, estudio y selección de algoritmos, procedimientos almacenados, programación del cron de linux, la escalabilidad de las máquinas virtuales, y, sobre todo, la multitud de soluciones libres que disponemos.
Hoy en día no nocesitamos ser Oracle, Microsoft o SAP para hacer algo muy muy grande. Con conocimiento de lo que hay disponible y perdiendo el miedo, eres capaz de hacer casi cualquier cosa.
PD: Me esperaba un articulo que algo sobre buenas practicas, código limpio, control de versiones, entornos colaborativos, etc. En fín, decepción
#38 Python se recomienda sobre todo para empezar, y creo que eso mismo dicen en el artículo, mejor empezar con Python que con PHP, a mi me parece que tiene bastante sentido.
"Si estáis aprendiendo a programar, directo al Python y evitad PHP (enseña malas prácticas y es un lenguaje sin siquiera coherencia)."
Señorgallir , 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.
#3 " 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.
editado:
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).
#3 PHP además de divertido es tremendamente potente, sobre todo en las últimas versiones (PHP 5.4 y superiores) con la mejora sustancial en cuanto a:
* 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())
#2 Hay que distinguir:
- Python es un lenguaje "educativo", junto a Modula, Pascal y alguno más. Te obligan a hacer las cosas bien sí o sí.
- PHP, Perl, C, etc. son en cambio lenguajes "productivos", tienes que venir aprendido de casa o te la pegas de lleno.
Y luego hay cosas como Java, que intentan ser uno y otro, pero que al final acaban siendo más tocapelotas que otra cosa, y cosas como Visual Basic, que no son ni uno ni otro (fuego, mátalo con fuego).
#100 Creo que confundes "productivo" con chapucero. En realidad puedes ser "productivo" mientras realizas buenas prácticas de programación (quienes mantengan tu código -y tú mismo en el futuro- te lo agradecerán), y eso lo puedes lograr en Pascal, Java y hasta PHP. O puedes ser chapucero y terminar antes, pero dejando un desastre sin posibilidades de mantenimiento a futuro, y eso también lo puedes lograr con PHP, Java y hasta Pascal.
Cuánto PHPero hay por aquí. No lo toméis a mal, pero PHP no es más chapucero porque no es más viejo. Cada que me toca hacer algo en PHP os juro que me dan ganas de vomitar:
- 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.
#99 Cualquiera que lleve un tiempo trabajando con PHP sabe que:
- PHP es un basurero (*)
- Puedes pillar módulos, paquetes, etc. de aquí y de allá, y en una tarde montarte una aplicación de 100.000 líneas.
- Sigue siendo mejor que Perl.
*: y eso que no has comentado el basurero de las interfaces, los fallos de punteros como en foreach, y detalles parecidos.
A mi me parecen muy buenos consejos. Sobre los libros, diré que si ponéis el título en Google y añadís la palabra "pdf" a dicha búsqueda...bueno ¿quién sabe?
¡Gallir ya si aprendieras* programación funcional lo flipabas! Viendo tu amor por los algoritmos te encantaría, en especial Clojure (que es más práctico que Haskell y mantiene una gran parte de la pureza).
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.
#30 "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. "
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.
#35 un emulador lo puedes hacer hasta con chips TTL. Yo hablo de comodidad y facilidad de mantenimiento, no de potencia.
#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?
#30 no tienes por qué irte a Haskell o Clojure, que son muy duros, puedes usar Scala como alternativa intermedia. 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 (monads, je).
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.
#47"no tienes por qué irte a Haskell o Clojure, que son muy duros"
¡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.
#47 Hice un curso de programación básica en Coursera porque lo hacían en Racket y me pareció muy cómodo para aprender programación funcional.
El lenguaje tiene niveles y puedes empezar por lo más básico y luego ir subiendo de complejidad. Además puedes usar primitivas de dibujo directamente como tipos de datos lo que hace que sea más entretenido. Me dió la sensación de ser un "Logo" pero en funcional.
Lo malo es que fuera del ámbito del apredizaje no parece que haya proyectos complejos hechos en Racket y se queda como un mero entretenimiento para pasar luego a lenguajes aparentemente menos de juguete.
#81 Por poner ejemplos básicos, ¿cuántos motores de foros hay en Python? Porque en PHP tienes cientos y algunos buenisimos, como phpBB.
¿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.
#85 Primero, en tu comentario en #18 has puesto "librerías". Las cosas que comentas no son librerías. Moodle, Magento, Joomla o Drupal no son librerías. Eso lo PRIMERO.
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.
#c-89" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/2177644/order/89">#89 Veo mucha "ijnorancia" en tu comentario. En modo extenso en software una librería es todo aquel código del que puedas tirar para constuir una aplicación, no tiene solo porque referirse al core en sí del lenguaje.
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.
#91 " 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."
Python fué usado en un videojuego español hace la tira de años. Blade, igual te sueña.
#94 Mira, esta es la típica discusión que he tenido desde hace 20 años con universitarios recien salidos de la carrera, de esos que tienen cuatro pelillos en lo que debería ser una barba y tal. Y al final, cuándo tienen que entregar un trabajo en un tiempo determinado, con unas funcionalidades concretas y ajustandose a un presupuesto, vamos, lo que viene siendo desarrollar un proyecto en el mundo real® normalmente bajan las orejitas y se olvidan rápido de su talibanismo prepubescente.
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.
#91 Déjate de chorradas. Una biblioteca/librería es una cosa, y un proyecto/framework/herramienta es otra. Moodle no es una librería, no intentes hacer lo blanco negro. Y sí, Python tiene más librerías que PHP, sobre todo porque el soporte de módulos es una cosa que está en el lenguaje desde el principio y no un addendum a posteriori como en el caso de PHP.
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 http://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.
Si estáis aprendiendo a programar, directo al Python y evitad PHP (enseña malas prácticas y es un lenguaje sin siquiera coherencia).
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.
#18 veo mucha ignorancia en tu comentario. ¿Qué librerías no has encontrado para Python? Hoy en día Pypi está plagado de bibliotecas de todo propósito, eso sin comentar la basta biblioteca estándar del lenguaje.
#79 osea que tengo suerte porque me han metido alto nivel primero... see what I did there?
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 )
#82 "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. "
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.
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...
#33 Para nada, como apunto en #34 aprendi a programar POO en Java, pero me gusta mas C++, le veo una sintaxis mas clara que otros lenguajes a la hora de definir clases, metodos y ademas puedo trabajar con punteros como en C, etc etc...
#34 No sé, supongo que el que entrara a los 15 años a la programación en C, es ver a C++ como un primo hermano "raro" con objetos y no termino de adaptarme.
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.
#34 Yo al reves, aprendi POO en C++ y luego empece a programar en java. El paso de c++ a Java es muy facil, al reves, jodido. Echo de menos cosas de c++ que no tengo en Java, como la sobrecarga de operadores.
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.
#33 No es porque se usen o se dejen de usar los punteros, tu en Java usarás punteros también, pero te lo camufla como si fuera una variable del tipo en cuestión. Si uno sabe lo que es realmente que cuando creas un array o una cadena tienes un puntero, pues genial porque no tienes que estar teniendo en cuenta que es un puntero y que esa memoria hay que liberarla.
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.
#43"pues genial porque no tienes que estar teniendo en cuenta que es un puntero y que esa memoria hay que liberarla."
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". 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...
#53 no, puedes deducir que la programación 3D está dentro de la programación de alto rendimiento, que era uno de los casos especiales que mencionaba.
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!
#60 Yo discrepo, será que soy raro, pero yo soy de los que prefiere aprender entendiendo las cosas aunque sean más compleja que que me digan esto es así y punto.
#62 no choca una con la otra. Primero puedes aprender qué es una variable, qué es una asignación, que es una función, qué es...
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).
#65 Ya pero si tu te vas a PHP y puedes hacer esto:
$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.
#68 en php la aprendes rápido, cuando les un xml y tienes que hacer (int)$valor pq si no if($valor == 1) no te da ni de coña... todo tiene su gracia, yo he prorgamado poco en c, acutalmente solo para el arduino, y se me hace pesado tener que estar tdo el tiempo definiendolo todo, también es cierto que con los 16ks de arduino es serio lo de definir bien los tipos de datos...
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
#69 Sí, pero entenderá que cuando crear una cadena lo que realmente está creando es una secuencia de caracteres donde la variable a la que la asignamos es solo un puntero al primer carácter? Esas cosas que lenguajes como Java camuflan dentro de un bonito objeto de tipo String.
#71 no, eso no lo entenderá. Pero ahora has vuelto al tema de punteros cuando en #68 hablabas de tipos.
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.
#71 supongo que para alguna cosa servirá saber que en c realmente estas reservando un par de bytes para un entero (o eran 4) y que en java realmente son todo strings... a lo mejor para programar arduino en c y que se te acaban los primeros 16ks echando hostiejas, que es lo mas bajo nivel que alguien puede llegar a programar salvo muy contados casos... pero normalmente...
$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
#73 entonces lo dicho, empecemos a programar con ASM, que eso de los if y los for y los while y los tipos (en efecto, en realidad los tipos son magia también) es magia pura, por no hablar de lo mágico que es poder definir funciones con sus argumentos y esas cosas. Brujería
¡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"
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.
#78 Un chico con suerte, en la ULPGC empiezan con ASM de MIPS y luego ya en el segundo semestre te meten Java. Y en primero aparte de las típicas álgebra, análisis, mates discretas, etc. Tienes Fundamentos físicos y estructura de computadores.
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.
#68 hmm, estábamos hablando de punteros, no de tipado. En Java no hay punteros pero sigue habiendo tipos.
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.
#70 Yo estoy hablando desde el principio de porque lenguaje creo que debería empezarse a aprender a programar.
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
#50 Hablo de aprender, no digo que los punteros sean buenos manejarlos para usarlos siempre (se usan cuando se tienen que usar) digo que se debe aprender como funciona C antes que empezar con las abstracciones de otros lenguajes.
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.
#50 Completamente de acuerdo. Manejar punteros directamente es cada vez más arcaico. Entre la STL, o incluso mejor, usando BOOST, lo que es necesidad de utilizarlos no tienes, la gran mayoría de las veces. A ver, tienes una clase string, la clase vector que almacena lo que quieras, la clase map, que es un diccionario.... Para que quiero un char*?
Y si lo quiero, pues uso punteros inteligentes (que se liberan solos si no les referencian), y tan contento--> unique_ptr en vez de char*
Para #50. '...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...'
Me pongo bastante triste cada vez que se ataca de forma totalmente injusta al ensamblador.
Sin ensamblador ni se podrían programar lenguajes de alto nivel ni se podrian compilar (ni ejecutar). En fin, que sin ensamblador digamos que no tendriamos ni los chips del PC ni PC.
Sin ensamblador no podriamos literalmente hablar directamente con el 'hardware', algo que los sistemas operativos a ciertos niveles agradecen profundamente.
Programar es un campo de muchos ámbitos.
Para resolver problemas de la vida cotidiana la orientación a objetos es perfecta porque el mundo está lleno de objetos reales (e imaginarios) que pueden representarse facilmente.
Para resolver problemas relacionados directamente con los propios ordenadores, tan necesarios ellos, para comunicarse directamente con su hardware, para diseñar cierto tipo de hardware, para facilitar la vida de los humanos via compilarores, para comprender y desarrollar areas básicas de las ciencias de la computación saber que hace la máquina es imprescindible.
#50 Yo creo que tendemos a ser chovinistas los que venimos de la universidad y nos hemos pegado con Pascal, C y posteriormente C++.
No creo que debamos(en terminos laborales) pensar que alguien que aprende Java y sólo Java tenga que ser un mal programador. Probablemente es curioso en su trabajo y respeta las buenas prácticas en la forma de hacer las cosas.
Ahora bien...
Yo estoy corrigiendo exámenes de candidatos para entrar en una empresa importante dedicada a este mundo y he de decir que los que sólo conocen Java, suelen hacer un examen muy bueno en la parte Java que es elemental, pero no captan los detalles del problema, que es donde se dan los puntos, es decir, donde vamos a pillar al examinado. Además, de que cuando se van al resto del examen donde no hay palabra de java, sino de otro lenguaje o directamente pseudocódigo, meten la pata estrepitosamente.
Por otro lado, los que hacen el examen y son de carrera, sin experiencia, suelen fallar en el conocimiento del lenguaje pero demuestran un espabilo mayor allí donde hay problemas lógicos que comprender.
No sé si me explico, pero creo que las tablas en programación (conocer los cimientos de que va todo esto) son necesarias al fin y al cabo.
#c-25" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/2177644/order/25">#25 Hay más alternativas que C++ como lenguaje orientado a objetos con compiladores muy trabajados, está el tan olvidado Eiffel, un lenguaje muy completo y elegante y con excelentes compiladores (pocos eso sí).
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.
#87 Yo he entrado indignado por lo que dice de javascript:
JAVASCRIPT ES UNA MIERDA COMO UN TEMPLO. Con javascript se hacen cosas que quedan chulas en web, pero, en si, es una mierda como un templo. Todo lo que puedes hacer con javascript son castillos de naipes...
#25 Los problemas de C/C++ son dos, primero no tiene estructuras de datos avanzadas estandarizadas (arrays, sets, hashs...), es cierto que con C++11 han mejorado muchísimo la librería estandar, pero antes era un coñazo estar utilizando librerías adicionales o programartelas tu mismo. Por otro lado el tener que preocuparse uno mismo de la gestión de memoria permite mejorar el rendimiento, pero es bastante coñazo a parte de ser muy propenso a que haya fallos o menory leaks.
Si alguien empieza a programar por lo que más quiera que empiece por donde hay que empezar, C, todo lo demás son abstracciones y más abstracciones. Pero lo primero es entender lo que hay debajo no hacer todo en 4 líneas. Cuando aprendes C y entiendes lo que estás haciendo ya lo demás viene solo.
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.
#56 no te digo que no... infinitamente menos que en php, pero no te digo que no, y seguro que es un gran lenguaje aunque he visto videos comparando los 2 lenguajes y criticando php (nunca he visto el video contrario) y las criticas eran absurdas, normalmente pq el que programaba en python no conocia bien php...
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....
#59 Si es que yo no he dicho que ni uso sea mejor que el otro ni lo contrario, solo que has puesto más arriba que usabas PHP porque podías ver lo que hacías en cualquier dispositivo con un navegador. Y yo digo que eso es absurdo. Es como decir que tienes una tele Sony porque puedes ver Telecinco (Dios me libre) como si en el resto de marcas no pudieras ver Telecinco.
#c-61" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/2177644/order/61">#61 no es lo mismo un lenguaje pensando sobre todo para web con las ventajas que eso tiene a uno que está pensado para otras cosas o mas generalista.
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
#c-64" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/2177644/order/64">#64 Hombre precisamente la plataforma .Net con C# y ASP es de lo más elegante y sencillo para programar web. Eso sí, dependes de Microsoft .
#c-66" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/2177644/order/66">#66 mete un servidor c# o .net en una raspberry pi o en una cubox y yo no lo veo sencillo y elegante, lo veo mastodontico y dependiente...
#41 ya te digo en todos los cacharros que te le listado ej: portatiles y pcs x86, con arm cubox, raspberri py, udooo
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
Para programar bien lo que hay que hacer es practicar, practicar y practicar. Como toda actividad compleja requiere años y años de practica hasta que se va desarrollando un nivel aceptable (la famosa teoría de las 10.000 horas).
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.
#51 eso me dijo un informático que programaba en delphy hace años... yo sigo programando en php y todo sigue viendose via web... el... creo que está reciclándose...
yo soy masoquista, programo todo con PHP (y linux shell) desde las webs de mis empresas, los backups, el sistema de domótica, los sensores, arduino... todo con php
#31 yo uso el sistema con procesadores x86 y con arm y con distribuciones variopintas y todos tienen php es decir que no he encontrado sistemas donde no pueda hacer funcionar php bien integrado con linux, si puedo ejecutar linux en un aparato puedo ejecutar php... no se si te refieres a eso... ej: portatiles y pcs x86, con arm cubox, raspberri py, udooo
todo lo que cago en php lo puedo controlar con cualquier dispositivo con navegador... ademas de php uso mysql, html5, css, javascript etc... con eso llevo toda la vida, es cierto que el otro dia intente programar android y estoy verde pq no entiendo nada...
#48 si, bueno si quisiera cambiar, estudiaria pyton y node.js pero todavia no he encontrado nada que no pueda hacer con php,html,mysql,css, linux shell etc... tal vez si me quiero poner a hacer gráficas por ejemplo del sistema de domotica de la tempertaura un año... y cosas asi me limitase un poco php pero seguro que hay librerias graficas con las que jugar desde php copn execs y si toca picar un poco de codigo en python luego se integra en php
#49 para hace gráficas PHP es una pasada. Yo hice hace ya casi una década una web de monitorización de consultas de usuarios para la dgt con carreteras y provincias marcadas por colores en función del uso. Y con PHP. El lenguaje no suele ser importante... Yo uso en el dia a dia 4 o 5 y en mi poco tiempo libre otros 3. Todos tienen esa base común que no hay que reaprender, luego cada uno con particularidades que le dan mucha potencia. Por ejemplo esto de ruby es una pasada:
`6.upto(10) `
Incluso objective c tiene perlitas, una vez superado el periodo de pánico.
Comentarios
da igual lo bien q programes, siempre alguien te pedirá que le arregles el ordenador
#0 Si llega a portada me hago mi primer tatuaje, o casi,...tu eliges donde.
#9 Un "hello world!" donde tu quieras
#9 Vete pensando un lugar adecuado... #10 Moooola!
#19 Toy en ello
#10 Ains... has hablado muy rapido
http://www.izaping.com/wp-content/uploads/2010/09/gato-culo-caca.jpg
#9 lo he visto en twitter y sin ser de portada dice "verdades de barquero", pero por un tatuaje tiene mi voto (la próxima vez pon "si llega y se mantiene" )
#15 meneando , nas noches
#16 Creo que las más grande fue una de JavierB en una noticia chorra que se tatuaba en semejante parte no sé qué frase (es un mnm clásico)
#9 Jojojo ¡queremos foto!
#9 Sir, deliver naww
#4 En Menéame usamos mucho de JSON, y haciendo manipulaciones torticeras con él, por ejemplo los gráficos de karma/votos de cada noticias, o los resultados de http://www.meneame.net/trends
Esa costumbre que se está imponiendo en los últimos tiempos sobre satanizar a PHP porque te permite hacer código horrendo, barbaridades algorítmicas, ... y poniendo a Python como ejemplo de como hacer bien las cosas me parece un sectarismo sin base alguna.
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...): http://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...
#38 PHP es malo, punto, está mal diseñado, está mal implementado, carece de muchísimas características básicas, permite hacer cosas horribles, es un lenguaje para diseñadores que pseudo-programan. Claro hay genios que pueden hacer programas decentes, pero un hay músicos que podrían hacer canciones decentes usando trastes de cocinan, pero eso no convierte a los trastes de cocina en instrumentos músicales.
#38 No puedo estar más de acuerdo contigo.
La condena que se hace a PHP en este articulo por el Doctor, es como tirarse de cabeza a una piscina vacía. Creo que lo más importante es, antes de ponerse manos a la obra, buscar, comparar y tomar la mejor decisión de usar las librerías/lenguajes apropiado para el problema que tenemos, ahorrando lo máximo en costes y esfuerzo. Para ello suelo buscar por la red y hacer caso omiso a este tipo de condenas personales que se hacen sin aportar ningún dato objetivo. Lo mismo con XML/JSON, me encanta JSON, pero no ofrece la misma robustez que un XML validado con un DTD. no? es un ejemplo.
Tengo experiencia y multitud de proyectos desarrollados en PHP, MySql, javascript que dejarían a menéame en la lógica de un hello world B) :P. Por el lado de procesado/servidor me encanta Perl, la potencia de las bases de datos orientadas a columnas, estudio y selección de algoritmos, procedimientos almacenados, programación del cron de linux, la escalabilidad de las máquinas virtuales, y, sobre todo, la multitud de soluciones libres que disponemos.
Hoy en día no nocesitamos ser Oracle, Microsoft o SAP para hacer algo muy muy grande. Con conocimiento de lo que hay disponible y perdiendo el miedo, eres capaz de hacer casi cualquier cosa.
PD: Me esperaba un articulo que algo sobre buenas practicas, código limpio, control de versiones, entornos colaborativos, etc. En fín, decepción
#38 Python se recomienda sobre todo para empezar, y creo que eso mismo dicen en el artículo, mejor empezar con Python que con PHP, a mi me parece que tiene bastante sentido.
Un poco de "pelota" a Gallir por aquí nunca viene mal
"Si estáis aprendiendo a programar, directo al Python y evitad PHP (enseña malas prácticas y es un lenguaje sin siquiera coherencia)."
Señorgallir , 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
#2 PHP es divertido si sabes programar y le encuentras el truco (y te ríes de sus barbaridades, por ejemplo las funciones -tan útiles- de array_*().
Por otro lado, odio XML con todas mis fuerzas. Adoro JSON
#3 " 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.
#3 PHP además de divertido es tremendamente potente, sobre todo en las últimas versiones (PHP 5.4 y superiores) con la mejora sustancial en cuanto a:
* 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())
#86 vamos, que han hecho un
gcc python.c -O php
#3 Yaml > Json
Básico: http://en.wikipedia.org/wiki/Software_design_pattern#Classification_and_list
Para #3. Goto #133 && #134.
#2 Relacionado con lo que dice Gallir sobre PHP: PHP: Un fractal de mal diseño (o mil y un razones para alejarse de PHP)
PHP: Un fractal de mal diseño (o mil y un razones ...
blog.alphasmanifesto.com#44 Me interesa ¿cuál es ese sub?
#2 Hay que distinguir:
- Python es un lenguaje "educativo", junto a Modula, Pascal y alguno más. Te obligan a hacer las cosas bien sí o sí.
- PHP, Perl, C, etc. son en cambio lenguajes "productivos", tienes que venir aprendido de casa o te la pegas de lleno.
Y luego hay cosas como Java, que intentan ser uno y otro, pero que al final acaban siendo más tocapelotas que otra cosa, y cosas como Visual Basic, que no son ni uno ni otro (fuego, mátalo con fuego).
#100 Creo que confundes "productivo" con chapucero. En realidad puedes ser "productivo" mientras realizas buenas prácticas de programación (quienes mantengan tu código -y tú mismo en el futuro- te lo agradecerán), y eso lo puedes lograr en Pascal, Java y hasta PHP. O puedes ser chapucero y terminar antes, pero dejando un desastre sin posibilidades de mantenimiento a futuro, y eso también lo puedes lograr con PHP, Java y hasta Pascal.
#100 Perdon por el negativo, me se fue la mano
#2 discrepo, el problema de PHP es que se popularizó demasiado y la cantidad de código basura que puedes encontrar en Internet es abrumadora.
Eso sí, hasta PHP 5.3 ni siquiera lo puedes considerar como lenguaje de programación.
Cuánto PHPero hay por aquí. No lo toméis a mal, pero PHP no es más chapucero porque no es más viejo. Cada que me toca hacer algo en PHP os juro que me dan ganas de vomitar:
- 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.
#99 Cualquiera que lleve un tiempo trabajando con PHP sabe que:
- PHP es un basurero (*)
- Puedes pillar módulos, paquetes, etc. de aquí y de allá, y en una tarde montarte una aplicación de 100.000 líneas.
- Sigue siendo mejor que Perl.
*: y eso que no has comentado el basurero de las interfaces, los fallos de punteros como en foreach, y detalles parecidos.
Iba a hacer un chiste sobre lo de Rosa María Artal y BarbieJaputa (@dadelmo pero soy una persona discreta
A mi me parecen muy buenos consejos. Sobre los libros, diré que si ponéis el título en Google y añadís la palabra "pdf" a dicha búsqueda...bueno ¿quién sabe?
#6 Si sabes inglés, tienes un montón de títulos online para cada lenguaje de forma gratuíta.
Y también te recomiendo registrarte en sitios como Code Academy y similares.
¡Gallir ya si aprendieras* programación funcional lo flipabas! Viendo tu amor por los algoritmos te encantaría, en especial Clojure (que es más práctico que Haskell y mantiene una gran parte de la pureza).
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.
#30 "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. "
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.
#35 un emulador lo puedes hacer hasta con chips TTL. Yo hablo de comodidad y facilidad de mantenimiento, no de potencia.
#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?
http://en.wikipedia.org/wiki/Rule_of_three_(C%2B%2B_programming)
#30 no tienes por qué irte a Haskell o Clojure, que son muy duros, puedes usar Scala como alternativa intermedia. 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 (monads, je).
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.
#47 "no tienes por qué irte a Haskell o Clojure, que son muy duros"
¡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.
#47 Hice un curso de programación básica en Coursera porque lo hacían en Racket y me pareció muy cómodo para aprender programación funcional.
El lenguaje tiene niveles y puedes empezar por lo más básico y luego ir subiendo de complejidad. Además puedes usar primitivas de dibujo directamente como tipos de datos lo que hace que sea más entretenido. Me dió la sensación de ser un "Logo" pero en funcional.
Lo malo es que fuera del ámbito del apredizaje no parece que haya proyectos complejos hechos en Racket y se queda como un mero entretenimiento para pasar luego a lenguajes aparentemente menos de juguete.
Cuando no programo en ensamblador me siento...sucio....
¡Meneado! Venía a publicarlo, pero como siempre, lo busqué antes.
#1 Pues hay un sub para estas cosas raras vuestras
#81 Por poner ejemplos básicos, ¿cuántos motores de foros hay en Python? Porque en PHP tienes cientos y algunos buenisimos, como phpBB.
¿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.
#85 Mmmm todos los ejemplos que expones son de CGI's para web.
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.
#85 Primero, en tu comentario en #18 has puesto "librerías". Las cosas que comentas no son librerías. Moodle, Magento, Joomla o Drupal no son librerías. Eso lo PRIMERO.
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.
#c-89" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/2177644/order/89">#89 Veo mucha "ijnorancia" en tu comentario. En modo extenso en software una librería es todo aquel código del que puedas tirar para constuir una aplicación, no tiene solo porque referirse al core en sí del lenguaje.
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....
#91 " 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."
Python fué usado en un videojuego español hace la tira de años. Blade, igual te sueña.
#92 Estamos en 2014. Vamos, que en nuestro mundo lo que haya pasado hace 2 años es irrelevante, pues imaginate si hablamos de hace 15 años.
#93 http://en.wikipedia.org/wiki/List_of_Python_software
PHP está lejos de ser un lenguaje de propósito general.
#94 Sobre proyectos serios...
Blender. Reddit. Enough said.
#94 Mira, esta es la típica discusión que he tenido desde hace 20 años con universitarios recien salidos de la carrera, de esos que tienen cuatro pelillos en lo que debería ser una barba y tal. Y al final, cuándo tienen que entregar un trabajo en un tiempo determinado, con unas funcionalidades concretas y ajustandose a un presupuesto, vamos, lo que viene siendo desarrollar un proyecto en el mundo real® normalmente bajan las orejitas y se olvidan rápido de su talibanismo prepubescente.
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.
#91 Déjate de chorradas. Una biblioteca/librería es una cosa, y un proyecto/framework/herramienta es otra. Moodle no es una librería, no intentes hacer lo blanco negro. Y sí, Python tiene más librerías que PHP, sobre todo porque el soporte de módulos es una cosa que está en el lenguaje desde el principio y no un addendum a posteriori como en el caso de PHP.
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 http://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.
#91 ¿Que Composer es mejor que los "gestores de paquetes" de Python?
lo triste es que el mejor código que estoy viendo últimamente son... exploits. Y cosas en ruby y python.
#11 Radio Pyo: live python music!
Radio Pyo: live python music!
acaia.ca#12
Si estáis aprendiendo a programar, directo al Python y evitad PHP (enseña malas prácticas y es un lenguaje sin siquiera coherencia).
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.
#18 veo mucha ignorancia en tu comentario. ¿Qué librerías no has encontrado para Python? Hoy en día Pypi está plagado de bibliotecas de todo propósito, eso sin comentar la basta biblioteca estándar del lenguaje.
#79 osea que tengo suerte porque me han metido alto nivel primero... see what I did there?
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 )
#82 "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. "
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.
No estoy de acuerdo en lo de que C++ sea un "pain in the ass".
En mi opinión, los mejores lenguajes son principalmente C como lenguaje estructurado y C++ como lenguaje orientado a objetos.
#25 Pues puestos a elegir elijo Go. Antes que C++ prefiero C, me parece más facil que C++ incluso siendo este orientado a objetos.
#28 ¿Que complicación ves en C++? http://en.wikipedia.org/wiki/C%2B%2B_classes
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...
#33 Para nada, como apunto en #34 aprendi a programar POO en Java, pero me gusta mas C++, le veo una sintaxis mas clara que otros lenguajes a la hora de definir clases, metodos y ademas puedo trabajar con punteros como en C, etc etc...
#34 No sé, supongo que el que entrara a los 15 años a la programación en C, es ver a C++ como un primo hermano "raro" con objetos y no termino de adaptarme.
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.
#34 Yo al reves, aprendi POO en C++ y luego empece a programar en java. El paso de c++ a Java es muy facil, al reves, jodido. Echo de menos cosas de c++ que no tengo en Java, como la sobrecarga de operadores.
#28 "Antes que C++ prefiero C, me parece más facil que C++ incluso siendo este orientado a objetos"...
Mi consejo es que(Aun pagando), vete a que te peguen un buen polvo... Sin coñas
#24 si nos ponemos así que empiecen con ASM.
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.
#33 No es porque se usen o se dejen de usar los punteros, tu en Java usarás punteros también, pero te lo camufla como si fuera una variable del tipo en cuestión. Si uno sabe lo que es realmente que cuando creas un array o una cadena tienes un puntero, pues genial porque no tienes que estar teniendo en cuenta que es un puntero y que esa memoria hay que liberarla.
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.
#43 "pues genial porque no tienes que estar teniendo en cuenta que es un puntero y que esa memoria hay que liberarla."
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". 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.
#50
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...
#53 no, puedes deducir que la programación 3D está dentro de la programación de alto rendimiento, que era uno de los casos especiales que mencionaba.
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!
#60 Yo discrepo, será que soy raro, pero yo soy de los que prefiere aprender entendiendo las cosas aunque sean más compleja que que me digan esto es así y punto.
#62 no choca una con la otra. Primero puedes aprender qué es una variable, qué es una asignación, que es una función, qué es...
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).
#65 Ya pero si tu te vas a PHP y puedes hacer esto:
$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.
#68 en php la aprendes rápido, cuando les un xml y tienes que hacer (int)$valor pq si no if($valor == 1) no te da ni de coña... todo tiene su gracia, yo he prorgamado poco en c, acutalmente solo para el arduino, y se me hace pesado tener que estar tdo el tiempo definiendolo todo, también es cierto que con los 16ks de arduino es serio lo de definir bien los tipos de datos...
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
#69 Sí, pero entenderá que cuando crear una cadena lo que realmente está creando es una secuencia de caracteres donde la variable a la que la asignamos es solo un puntero al primer carácter? Esas cosas que lenguajes como Java camuflan dentro de un bonito objeto de tipo String.
#71 no, eso no lo entenderá. Pero ahora has vuelto al tema de punteros cuando en #68 hablabas de tipos.
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.
#71 supongo que para alguna cosa servirá saber que en c realmente estas reservando un par de bytes para un entero (o eran 4) y que en java realmente son todo strings... a lo mejor para programar arduino en c y que se te acaban los primeros 16ks echando hostiejas, que es lo mas bajo nivel que alguien puede llegar a programar salvo muy contados casos... pero normalmente...
$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
#73 entonces lo dicho, empecemos a programar con ASM, que eso de los if y los for y los while y los tipos (en efecto, en realidad los tipos son magia también) es magia pura, por no hablar de lo mágico que es poder definir funciones con sus argumentos y esas cosas. Brujería
¡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?
#75 ya no me acuerdo de todo eso, me he hecho un choni de la programación con php
#75 "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."
Y es lo que hacen en ingeniería informática
#77 y así salen
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.
#78 Un chico con suerte, en la ULPGC empiezan con ASM de MIPS y luego ya en el segundo semestre te meten Java. Y en primero aparte de las típicas álgebra, análisis, mates discretas, etc. Tienes Fundamentos físicos y estructura de computadores.
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.
#75 "¡Pero no te olvides de explicar lo que son las conveciones de llamada y las diferentes secciones de un ejecutable PE!"
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.
#68 hmm, estábamos hablando de punteros, no de tipado. En Java no hay punteros pero sigue habiendo tipos.
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.
#70 Yo estoy hablando desde el principio de porque lenguaje creo que debería empezarse a aprender a programar.
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
#50 Hablo de aprender, no digo que los punteros sean buenos manejarlos para usarlos siempre (se usan cuando se tienen que usar) digo que se debe aprender como funciona C antes que empezar con las abstracciones de otros lenguajes.
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.
#50 Completamente de acuerdo. Manejar punteros directamente es cada vez más arcaico. Entre la STL, o incluso mejor, usando BOOST, lo que es necesidad de utilizarlos no tienes, la gran mayoría de las veces. A ver, tienes una clase string, la clase vector que almacena lo que quieras, la clase map, que es un diccionario.... Para que quiero un char*?
Y si lo quiero, pues uso punteros inteligentes (que se liberan solos si no les referencian), y tan contento--> unique_ptr en vez de char*
Para #50. '...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...'
Me pongo bastante triste cada vez que se ataca de forma totalmente injusta al ensamblador.
Sin ensamblador ni se podrían programar lenguajes de alto nivel ni se podrian compilar (ni ejecutar). En fin, que sin ensamblador digamos que no tendriamos ni los chips del PC ni PC.
Sin ensamblador no podriamos literalmente hablar directamente con el 'hardware', algo que los sistemas operativos a ciertos niveles agradecen profundamente.
Programar es un campo de muchos ámbitos.
Para resolver problemas de la vida cotidiana la orientación a objetos es perfecta porque el mundo está lleno de objetos reales (e imaginarios) que pueden representarse facilmente.
Para resolver problemas relacionados directamente con los propios ordenadores, tan necesarios ellos, para comunicarse directamente con su hardware, para diseñar cierto tipo de hardware, para facilitar la vida de los humanos via compilarores, para comprender y desarrollar areas básicas de las ciencias de la computación saber que hace la máquina es imprescindible.
#50 Yo creo que tendemos a ser chovinistas los que venimos de la universidad y nos hemos pegado con Pascal, C y posteriormente C++.
No creo que debamos(en terminos laborales) pensar que alguien que aprende Java y sólo Java tenga que ser un mal programador. Probablemente es curioso en su trabajo y respeta las buenas prácticas en la forma de hacer las cosas.
Ahora bien...
Yo estoy corrigiendo exámenes de candidatos para entrar en una empresa importante dedicada a este mundo y he de decir que los que sólo conocen Java, suelen hacer un examen muy bueno en la parte Java que es elemental, pero no captan los detalles del problema, que es donde se dan los puntos, es decir, donde vamos a pillar al examinado. Además, de que cuando se van al resto del examen donde no hay palabra de java, sino de otro lenguaje o directamente pseudocódigo, meten la pata estrepitosamente.
Por otro lado, los que hacen el examen y son de carrera, sin experiencia, suelen fallar en el conocimiento del lenguaje pero demuestran un espabilo mayor allí donde hay problemas lógicos que comprender.
No sé si me explico, pero creo que las tablas en programación (conocer los cimientos de que va todo esto) son necesarias al fin y al cabo.
#c-25" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/2177644/order/25">#25 Hay más alternativas que C++ como lenguaje orientado a objetos con compiladores muy trabajados, está el tan olvidado Eiffel, un lenguaje muy completo y elegante y con excelentes compiladores (pocos eso sí).
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.
#87 Yo he entrado indignado por lo que dice de javascript:
JAVASCRIPT ES UNA MIERDA COMO UN TEMPLO. Con javascript se hacen cosas que quedan chulas en web, pero, en si, es una mierda como un templo. Todo lo que puedes hacer con javascript son castillos de naipes...
#25 Los problemas de C/C++ son dos, primero no tiene estructuras de datos avanzadas estandarizadas (arrays, sets, hashs...), es cierto que con C++11 han mejorado muchísimo la librería estandar, pero antes era un coñazo estar utilizando librerías adicionales o programartelas tu mismo. Por otro lado el tener que preocuparse uno mismo de la gestión de memoria permite mejorar el rendimiento, pero es bastante coñazo a parte de ser muy propenso a que haya fallos o menory leaks.
PHP es el demonio.
Que más de la mitad de las webs de internet estén escritas en PHP es la prueba de la gran conspiración urdida por el maligno.
Apartaos de PHP mientras podáis, antes de que sea demasiado tarde.
Si alguien empieza a programar por lo que más quiera que empiece por donde hay que empezar, C, todo lo demás son abstracciones y más abstracciones. Pero lo primero es entender lo que hay debajo no hacer todo en 4 líneas. Cuando aprendes C y entiendes lo que estás haciendo ya lo demás viene solo.
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.
#56 no te digo que no... infinitamente menos que en php, pero no te digo que no, y seguro que es un gran lenguaje aunque he visto videos comparando los 2 lenguajes y criticando php (nunca he visto el video contrario) y las criticas eran absurdas, normalmente pq el que programaba en python no conocia bien php...
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....
#59 Si es que yo no he dicho que ni uso sea mejor que el otro ni lo contrario, solo que has puesto más arriba que usabas PHP porque podías ver lo que hacías en cualquier dispositivo con un navegador. Y yo digo que eso es absurdo. Es como decir que tienes una tele Sony porque puedes ver Telecinco (Dios me libre) como si en el resto de marcas no pudieras ver Telecinco.
#c-61" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/2177644/order/61">#61 no es lo mismo un lenguaje pensando sobre todo para web con las ventajas que eso tiene a uno que está pensado para otras cosas o mas generalista.
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
#c-64" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/2177644/order/64">#64 Hombre precisamente la plataforma .Net con C# y ASP es de lo más elegante y sencillo para programar web. Eso sí, dependes de Microsoft .
#c-66" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/2177644/order/66">#66 mete un servidor c# o .net en una raspberry pi o en una cubox y yo no lo veo sencillo y elegante, lo veo mastodontico y dependiente...
#41 ya te digo en todos los cacharros que te le listado ej: portatiles y pcs x86, con arm cubox, raspberri py, udooo
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
Para programar bien lo que hay que hacer es practicar, practicar y practicar. Como toda actividad compleja requiere años y años de practica hasta que se va desarrollando un nivel aceptable (la famosa teoría de las 10.000 horas).
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.
Por cierto, la recomendación del Cormen está bien, aunque en mi opinión hay alternativas mejores. Al menos no ha recomendado el Brassard...
#49 Usa lo que quieras yo solo te digo que la razón de lo que hago en PHP lo puedo usar en un navegador es absurda .
#51 eso me dijo un informático que programaba en delphy hace años... yo sigo programando en php y todo sigue viendose via web... el... creo que está reciclándose...
#51 Habrá pocos servicios webs implementados en Python...
dejad de menear el envio que ni con esas os va a dar una vuelta en su ferrari
Interesante lo de tirarse a por Python y dejar PHP.
yo soy masoquista, programo todo con PHP (y linux shell) desde las webs de mis empresas, los backups, el sistema de domótica, los sensores, arduino... todo con php
#29 Yo no usaría PHP en sistemas...
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.
#31 yo uso el sistema con procesadores x86 y con arm y con distribuciones variopintas y todos tienen php es decir que no he encontrado sistemas donde no pueda hacer funcionar php bien integrado con linux, si puedo ejecutar linux en un aparato puedo ejecutar php... no se si te refieres a eso... ej: portatiles y pcs x86, con arm cubox, raspberri py, udooo
#40 A lo que me refiero es que PHP tienes que instalarlo y Perl suele venir ya preparado para servir a un sistema Unix.
todo lo que cago en php lo puedo controlar con cualquier dispositivo con navegador... ademas de php uso mysql, html5, css, javascript etc... con eso llevo toda la vida, es cierto que el otro dia intente programar android y estoy verde pq no entiendo nada...
#45 Lo que haces en Python, también. Solo te hace falta tener Python en vez de PHP en el servidor.
#48 si, bueno si quisiera cambiar, estudiaria pyton y node.js pero todavia no he encontrado nada que no pueda hacer con php,html,mysql,css, linux shell etc... tal vez si me quiero poner a hacer gráficas por ejemplo del sistema de domotica de la tempertaura un año... y cosas asi me limitase un poco php pero seguro que hay librerias graficas con las que jugar desde php copn execs y si toca picar un poco de codigo en python luego se integra en php
#49 para hace gráficas PHP es una pasada. Yo hice hace ya casi una década una web de monitorización de consultas de usuarios para la dgt con carreteras y provincias marcadas por colores en función del uso. Y con PHP. El lenguaje no suele ser importante... Yo uso en el dia a dia 4 o 5 y en mi poco tiempo libre otros 3. Todos tienen esa base común que no hay que reaprender, luego cada uno con particularidades que le dan mucha potencia. Por ejemplo esto de ruby es una pasada:
`6.upto(10) `
Incluso objective c tiene perlitas, una vez superado el periodo de pánico.
Para ser buen programador, por otro lado, leerse Clean Code. Lo demás son tonterías http://www.amazon.co.uk/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882
¿Consejos para programar bien de parte de gallir? Esto es una broma ¿no?
Yo de programar cero, estoy empezando a leer visual Basic. Lo que aquí se comenta me suena a chino
#97 Como decían en el colegio: si no entiendes una palabra, usa el diccionario. Hoy el diccionario es Google, la Wikipedia, etc.