Hace 9 años | Por --411477-- a storify.com
Publicado hace 9 años por --411477-- a storify.com

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.

Comentarios

D

#9 Vete pensando un lugar adecuado... lol #10 Moooola!

zoezoe

#19 Toy en ello

D

#15 meneando , nas noches

noexisto

#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) lol lol

D

#9 Jojojo ¡queremos foto! lol

atl3

#9 Sir, deliver naww

luisZavaleta

#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.

n

#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

w

#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.

D

#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).

Patxi_

#86 vamos, que han hecho un

gcc python.c -O php

frankiegth

Para #3. Goto #133 && #134.

D

#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).

P

#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.

dreierfahrer

#100 Perdon por el negativo, me se fue la mano

miguelpedregosa

#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.

D

#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.

noexisto

Iba a hacer un chiste sobre lo de Rosa María Artal y BarbieJaputa (@dadelmo pero soy una persona discreta

D

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?

kaoD

¡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.

D

#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.

kaoD

#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)

D

#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.

kaoD

#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.

musg0

#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.

NapalMe

Cuando no programo en ensamblador me siento...sucio....

Amandy

¡Meneado! Venía a publicarlo, pero como siempre, lo busqué antes.

D

#1 Pues hay un sub para estas cosas raras vuestras

D

#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.

D

#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.

c

#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.

D

#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....

D

#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.

D

#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.

D

#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.

D

#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.

c

#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.

Patxi_

#91 ¿Que Composer es mejor que los "gestores de paquetes" de Python?

RivaSilvercrown

lo triste es que el mejor código que estoy viendo últimamente son... exploits. Y cosas en ruby y python.

RivaSilvercrown

#12

D

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.

c

#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.

kaoD

#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é? lol

#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 lol

Además que PyPi es un orto y Pip una mierda de gestor de paquetes (que insisto, PHP es peor lol)

D

#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.

M

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.

D

#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.

M

#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...

M

#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...

D

#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.

mangrar_2

#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.

D

#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

kaoD

#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.

D

#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.

kaoD

#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 lol

"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.

M

#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...

kaoD

#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 lol 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!

D

#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.

kaoD

#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).

D

#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.

D

#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

D

#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.

kaoD

#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.

D

#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

kaoD

#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?

D

#75 ya no me acuerdo de todo eso, me he hecho un choni de la programación con php

D

#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 lol

kaoD

#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.

D

#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.

D

#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.

kaoD

#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.

D

#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 lol

D

#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.

nergeia

#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*

frankiegth

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.

habitante5079

#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.

dreierfahrer

#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...

M

#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.

D

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.

D

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.

D

#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....

D

#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.

D

#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

D

#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 lol.

D

#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...

D

#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

a

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.

c

Por cierto, la recomendación del Cormen está bien, aunque en mi opinión hay alternativas mejores. Al menos no ha recomendado el Brassard...

D

#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 lol.

D

#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...

D

#51 Habrá pocos servicios webs implementados en Python...

S

dejad de menear el envio que ni con esas os va a dar una vuelta en su ferrari roll

D

Interesante lo de tirarse a por Python y dejar PHP.

D

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

D

#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.

D

#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

D

#40 A lo que me refiero es que PHP tienes que instalarlo y Perl suele venir ya preparado para servir a un sistema Unix.

D

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...

D

#45 Lo que haces en Python, también. Solo te hace falta tener Python en vez de PHP en el servidor.

D

#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

ktzar

#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

audacious

¿Consejos para programar bien de parte de gallir? Esto es una broma ¿no?

D

Yo de programar cero, estoy empezando a leer visual Basic. Lo que aquí se comenta me suena a chino

D

#97 Como decían en el colegio: si no entiendes una palabra, usa el diccionario. Hoy el diccionario es Google, la Wikipedia, etc.

1 2 3