En su artículo What Languages Fix, Paul Graham, autor de Hackers & Painters y fundador de Y Combinator examinaba hace unos años algunos de los lenguajes de programación más conocidos desde una óptica interesante: los problemas que sus creadores intentaban solucionar al crearlos. Hoy me he vuelto a encontrar con este texto y he dedicado unos minutos a traducirlo y a crear una representación gráfica en forma de línea de tiempo que podéis ver a continuación.
#10:
#8#9 programar con tarjetas perforadas era mucho mas exigente que con Pascal, nada de arreglos estáticos, ni declarar cosas 2 veces, ni seperar declaraciones y demás, no, tenías que agujerear punto por punto para poder hacer una rutina de programación medianamente estructurada. Lo que hace que cosas como Pascal y los demás lenguajes sean en realidad un juego de niños. Le debo mucho a las viejas y confiables tarjetas perjoradas.
#8:
#5 Es que a programar se aprende en Pascal. Acierto bastantes veces, viendo el código de alguien, en saber si ha aprendido a programar en Pascal o no. Da gusto ver esos códigos.
Y después de Pascal, C. A partir de C, puede uno irse por los mundos de fantasía, lenguajes especializados, o lo que sea.
Obviamente, es mi opinión y blah blah blah.
#4:
C no nació porque el ensamblador fuera demasiado bajo nivel, ese fue B, C fue la evolución de B para añadir tipos de datos y estructuras de las que B carecía. Se puede decir que C también solucionaba eso por extensión, pero el que hizo el cambio fue B.
#1:
Java y NET intentaban solucionar el problema de que las cosas pudieran hacerse de forma sencilla, sin necesitar de 200.000 certificados y consultorías. Y han sido un gran éxito por ello, una vez convencieron a todos los directivos que no sabían nada de desarrollo.
#146:
#21 Aparentemente hay mucha gente orgullosísima de tener que hacer por cojones gestión manual de memoria, cuando primero, no es difícil, sólo rutinario (las opiniones de gente que empieza no se deberían tener en cuenta, porque es lógico que les parezca difícil si no tienen los conceptos básicos claros aún) y segundo, introduce inherentemente muchísimos errores potenciales. Si alguna vez os preguntasteis por qué tantos juegos se retrasan o tienen tantos bugs y cuelgues, echadle una buena parte de la culpa a C++, cuando hay alternativas como D que resolverían muchos de estos problemas y mejorarían enormemente los tiempos de desarrollo. No es que sea yo el que haya inventado esta queja, por cierto, muchos programadores y diseñadores de proyectos grandes ya se quejaron en su día de esto y la cantidad de tiempo y dinero que hacía perder.
Tanto es así, que hoy día la inmensa mayoría de juegos utilizan un lenguaje de scripting (Lua, Python, ...) para la "miga" del juego y se dejan los lenguajes de bajo nivel para el propio motor de scripting y lo que necesita rapidez máxima (gráficos, etc.).
El no tener que administrar memoria manualmente, hoy por hoy y en la mayoría de aplicaciones (quitando sistemas en tiempo real y similares), es un avance gigantesco, ya que permite concentrarse en resolver el problema y no perder el tiempo en un código repetitivo que no aporta nada excepto ego al programador de turno. Eso sí, para aprender a programar debería usarse un lenguaje que necesitase administrar memoria manualmente, porque aunque sea una habilidad que tiene menos uso hoy en día, siempre hay situaciones en las que es necesario (y además es pedagógicamente imprescindible si se quiere entender de verdad la programación).
Realmente para tener una visión más o menos amplia del asunto hay que haber programado en varios lenguajes y paradigmas.
#31:
#23 "Creo que Phyton me gusta y tiene la filosofía de ser, ante todo, robusto y anti-chapuceros."
Quitáoslo de la cabeza. Anti-chapuceros no hay nada. Poned a un chapucero con cualquier lenguaje y saldrá una chapuza. Tienen sus propios caminos.
#141:
#140 Sacado de la wiki: "Era conocido por su baja opinión de la sentencia GOTO en programación, que culminó en 1968 con el artículo Go To Statement Considered Harmful (La sentencia Goto considerada perjudicial), visto como un paso importante hacia el rechazo de la expresión GOTO y de su eficaz reemplazo por estructuras de control tales como el bucle while"
"Respecto a su carácter árido y ácido, conocidas son su oposición a la instrucción GOTO y al lenguaje BASIC («mutila la mente más allá de toda recuperación»). Alan Kay expuso que 1 en informática, la arrogancia se mide en nanodijkstras"
jajaja q buena!
#68:
#9#11#16 vaya me alegro de ver a más gente a la que le parece bien aprender con un lenguaje fuertemente tipado en vez de protestar con un "buaaaaa el Pascal/Ada/Modula2 no se usa en el mundo real".
Yo estoy totalmente de acuerdo, de hecho yo aprendí C antes de llegar a la Universidad (y antes de C ensamblador, sí, era un poco rarito) y tuve que quitarme unas cuantas malas costumbres que había cogido.
#115:
#68 Pascal puede que no se use, pero Ada todavia si.
#8#9#11#16 Eso pasa cuando una universidad se plantea enseñarte a programar y otras enseñarte un lenguaje de programación.
Yo también tuve la suerte de aprender en Pascal y en Ada. Y fue genial.
#9:
#8 Totalmente de acuerdo. Una sintaxis que obliga a declarar e implementar por separado, incluso a declarar algunas cosas dos veces. Sólo se pueden usar arreglos estáticos. Nada de tipos dinámicos, ni Objects, ni otros juguetes, tipado fuerte y estricto. En las declaración de las clases hay que decirlo todo, nada se infiere. Y un largo etc. Al final te haces un programador a prueba de todo al que cualquier otro lenguaje te parece un juego de niños. Le debo mucho al viejo y confiable Pascal.
#29:
#26 precisamente los cirujanos prefieren operar por laparoscopia cuando tienen la ocasión para no tener que abrir al paciente. Cualquier profesional se centra en solucionar un problema de la manera más rápida y eficiente posible, no en disfrutar haciéndolo de la manera más difícil. Eso yo lo hago en mi tiempo libre, en el que de hecho programo en ensamblador para plataformas retro.
#61:
Me encanta el de "Sun controla Java" que viene a significar algo así como "No hay motivo alguno excepto que soy Microsoft y quiero que te comas mi lenguaje de mierda rollo Java"
Eso sí, como leí en el primer tutorial cuando tuve que aprender C#, "este lenguaje también es multiplataforma como Java,... funciona en todas las versiones de Windows". Con dos cojones
#78:
#c-72" class="content-link" style="color: rgb(, , )" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment//order/72">#72 Sí. Hice un servidor en C# para un MMO y se está ejecutando en un servidor dedicado Linux, accediendo a una base de datos MySQL a través de MySQL Connector .Net, y lleva varios años funcionando sin incidencias. Como curiosidad te diré que ha dado menos problemas funcionando en Linux que en Windows.
#92:
#5 Si aprendiste en Basic, no me extraña que no sepas programar.
It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration. Edsger Dijkstra.
Es prácticamente imposible enseñar a programar bien a estudiantes que han sido previamente expuestos a Basic: como programadores potenciales esán mentalmente mutilados sin esperanza de regeneración.
#120:
Los lenguajes de alto nivel son para nenazas, yo aprendí a programar sólo con ceros y unos, y cuando se acababan los unos sólo con ceros, aquellos sí que eran tiempos difíciles.
#6:
¿Qué intentaba arreglar cada lenguaje de programación?
C no nació porque el ensamblador fuera demasiado bajo nivel, ese fue B, C fue la evolución de B para añadir tipos de datos y estructuras de las que B carecía. Se puede decir que C también solucionaba eso por extensión, pero el que hizo el cambio fue B.
Java y NET intentaban solucionar el problema de que las cosas pudieran hacerse de forma sencilla, sin necesitar de 200.000 certificados y consultorías. Y han sido un gran éxito por ello, una vez convencieron a todos los directivos que no sabían nada de desarrollo.
#1 Te invitaba a una cerveza por esa gran verdad ....y añado:
- Ruby y CSS3 intentaba solucionar la necesidad de hacer sentirnos a los peludos programadores como estrellitas y unos gafa pasta de lo mas Hipster.
- Vala, Buu y demás inventos de la comunidad Gnome intentaban solucionar la necesidad de mantener un buen escritorio como Gnome2 mientras estaban emborrachandose en alguna convención Guadec.
#27 En realidad Vala intentaba solucionar el hecho de que los programadores de Gnome no tienen huevos para escribir código en C++ (y yo me incluyo), así que necesitaban algo que hiciese olvidar a GObject.
#14 Yo aprendí primero BASIC y luego ensamblador en mi viejo y confiable Z80 (MSX). Era una gozada escribir cualquier chorradilla y ver como iba infinitamente (jaja, 3Mhz) más rápido que con BASIC.
#c-14" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/1957841/order/14">#14#19 yo también empecé con BASIC en un Amstrad y luego me pasé a ensamblador, pero del PC 8086. Luego Pascal, que fue mi lenguaje de desarrollo durante años en el entorno Delphi, después me pasé a C y luego a C++ para desarrollar rutinas gráficas de alto rendimiento. Actualmente programo en C# que para mí es una maravilla, después de tantos años de sufrimiento da gusto olvidarse de la gestión manual de memoria. Vale que Java también tiene recolector de basuras, pero no se puede comparar el caos de librerías de Java con el bien estructurado y eficiente framework de .Net, también uso AS3 en desarrollo de aplicaciones Flash y estoy bastante satisfecho con él.
#21 Ser informático y decir que da gusto olvidarse de la gestión manual de memoria es como ser cirujano y decir que da gusto olvidarse de mirar por dentro a los pacientes....
#26 ¿o ser arquitecto y decir que da gusto olvidarse de como se prepara el ormigón armado? ¿o ser ingeniero de teleco y decir que da gusto olvidarse de como se fabrica un cable de fibra óptica? ...
#28#29 ¡No se puede comparar! En vez de preparar hormigón armado es investigar en nuevos materiales, aunque operes por laparoscopia sigues mirando dentro del paciente, etc.
El jugar con buffers que necesitas redimensionar en caliente en tiempos inferiores a ms o se te va el margen de tiempo para realizar la operación, gestión de áreas de memoria contigua porque va a ser usada para DMA, cacharrear con FPGAs conectadas al bus de memoria, todo ese tipo de cosas son las que le dan vidilla a ser un programador.
#c-37" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/1957841/order/37">#37 Si aprendes C# aprendes Java, lo llamaron C# por cuestiones legales, si no se llamaría Java de Microsoft.
#35 Lo que es lamentable es que hay programadores que no entienden la diferencia entre estructurado y OO, eso si que es lamentable, también es lamentable que hay programadores que no entienden de cuestiones de calidad en la programación, ni tampoco saben trabajar en equipo, etc. etc. ... y es que programar es mucho más que programar. Hacer una edificio es mucho más que poner ladrillos o desarrollar una red de comunicación es mucho más que tirar cable, y este razonamiento tiene que ver con lo que digo aquí #12
#c-35" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/1957841/order/35">#35El jugar con buffers que necesitas redimensionar en caliente en tiempos inferiores a ms o se te va el margen de tiempo para realizar la operación, gestión de áreas de memoria contigua porque va a ser usada para DMA, cacharrear con FPGAs conectadas al bus de memoria, todo ese tipo de cosas son las que le dan vidilla a ser un programador.
Y todas esas cosas y muchas más son las que yo hago en mi casa por diversión. Cuando se trata de hacer un programa a nivel profesional fiable, mantenible, respetando patrones de diseño y metodologías, y además hacerlo en tiempo, te aseguro que C# es la octava maravilla.
#55 Oye, oye, que muchos programamos en C++ usando patrones, testeo unitario y metodologías ágiles en entornos laborales porque necesitamos poder acceder a operaciones de bajo nivel para obtener un código optimizado.
Y en lo que respeta a la gestión de memoria, teniendo claro el concepto de propiedad de un objeto (que objeto es el propietario, y por tanto responsable de liberarlo, de que otro objeto), es tan trivial como en cualquier otro lenguaje.
#62 Quizás porque si te fijas demasiado en la sintaxis no te fijas tanto en el contenido ... bueno vale, como veo que te cuesta te lo explico. Como para mi lo importante es que se me entienda, intento no cometer errores ortográficos ni gramaticales, pero tampoco me obsesiono, si no pongo el signo de admiración es porque, de forma implicita, te sigo dejando claro cual es mi planteamiento.
A veces los errores favorecen al contenido, por ejemplo, al escribirlo me di cuenta que so, listooo!!! tenía mala sintaxis, ya que lo que quería decir es so listo, pero luego pensé que era mejor tratarte como a una acémila. (todo esto con humor, incluso con cariño)
#70 Mira, ya me has llamado so listo y acémila... Que paso de ver si escribes con faltas o no. Lo único es que algunas faltas duelen a la vista, y tu 'ormigón' lo ha hecho.
#77 Si lo haces por mi mejor que pases, porque lo tengo clarísimo.
Yo también paso de explicarte que lo importante es el contenido y no tanto la sintaxis ... por cierto, curioso que esta conversación se desarrolle en un hilo sobre programación
Y la comprensión de los contenidos escritos dependen directamente de la sintaxis (que no de la ortografía, que también). Otra cosa es que ni sepas sintaxis, ni sepas programar decentemente, ni sepas ortografía, ni sepas vocabulario castellano, como es el caso.
#c-100" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/1957841/order/100">#100
Con lo leido aquí has llegado a la conclusión de que no se programar, pues he programado en Pascal, Módula, Java (mucho), C, C++, php, C#, PL/SQL, etc. etc. etc., te puedo decir que vivo de ello y bastante bien.
Aunque la "rapidez" de tus razonamientos y tu atrevimiento me indican que es inútil, intentaré aclararte un par de cuestiones. En lengua la sintaxis es la parte que estudia de qué forma se relacionan las palabras y la ortografía es el conjunto de reglas y convenciones que rigen el sistema de escritura, por lo tanto tienes razón en lengua ortografía es distinto de la sintaxis.
Pero ¿que pasa en programación? En este caso la sintaxis es la forma visible del lenguaje de programación, es decir, en programación no hay ortografía ya que las reglas y convenciones que rigen el sistema de escritura están dentro de la sintaxis de programación ... curioso ¿verdad?. Como está claro que no lo entiendes te pongo un ejemplo, en programación si te equivocas con un ; el programa no funciona y es un error de sintaxis. Es lo que tiene la lengua castellana, que es muy rica, y es lo que tiene la realidad, que es difícil de encasillar.
Con respecto a la ortografía, estoy absolutamente de acuerdo con García Márquez, para mi el mejor escritor en castellano vivo y quizás el mejor escritor en castellano de la historia.
#77 Que conste que no te he llamado acémila. Lo que ha ocurrido es que, por temas circustanciales y con un objetivo jocoso te he tratado como tal, que es muy diferente.
#26 precisamente los cirujanos prefieren operar por laparoscopia cuando tienen la ocasión para no tener que abrir al paciente. Cualquier profesional se centra en solucionar un problema de la manera más rápida y eficiente posible, no en disfrutar haciéndolo de la manera más difícil. Eso yo lo hago en mi tiempo libre, en el que de hecho programo en ensamblador para plataformas retro.
#33 somos más de lo que parece. Si no has ido nunca deberías pasarte por Retromadrid (no sé si hay un Retrobcn). El movimiento de desarrollo para plataformas retro es bestial, de hecho se están publicando bastantes juegos nuevos para Spectrum, Amstrad, MSX... sí, en pleno 2013!
#c-21" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/1957841/order/21">#21 Precisamente C# no destaca por su gestion de memoria. Trata de hacer simulaciones en tiempo real o invertir una matriz de 1 Giga y luego me comentas lo bien que va el recolector de basura.
Lo normal es empezar con C y luego aprender primero C# antes que C++.
#c-40" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/1957841/order/40">#40 con dos cojones! aprendes un lenguaje de los años 70, luego uno del siglo XXI y luego te vas a uno de los años 80. A eso le llamo yo estar a la última, sí señor. ¿Sabías que se puede mezclar C# con C++? En los casos que mencionas lo normal es hacer el 99% del programa en C# y la parte más crítica en C++, incluso en ensamblador. Lo que no es normal es tener que hacer malloc() y free() para poner un puto botón en la pantalla. Además, no todo el mundo se dedica a 'invertir matrices de un Giga', que dicho sea de paso no parece una operación muy complicada. Yo he desarrollado un FPS en 3D para XBox íntegramente en C#, no sé si eso te vale como ejemplo.
#54 Yo he hecho un juego (más bien demo, por ahora) tipo Minecraft en C++ sin un sólo malloc(), si te sirve de ejemplo para ilustrar que estás diciendo una salvajada.
#49 Entonces prefiero C, es más flexible y deja ver mejor quién va a ser un chapuzas. Antes de entregar el código hay que dejarlo limpio y ordenado.
#56 Sí, claro, pero creo que se estaba hablando de un lenguaje para aprender. Antes de poder programar con limpieza en C tienes que aprender a ser limpio
#71 El caso es que mientras tú te preocupas de los smart pointers, el ha avanzado mucho más en su proyecto, y va a funcionar igual (y probablemente con menos problemas).
No hablo por cuento, he programado en ambos cosas complejas y hoy día complicarse la vida (excepto para proyectos personales) es masoquismo puro. Excepto que lo que interese no sea hacer las cosas bien y rápido, sino vacilar de tus habilidades.
#21 Aparentemente hay mucha gente orgullosísima de tener que hacer por cojones gestión manual de memoria, cuando primero, no es difícil, sólo rutinario (las opiniones de gente que empieza no se deberían tener en cuenta, porque es lógico que les parezca difícil si no tienen los conceptos básicos claros aún) y segundo, introduce inherentemente muchísimos errores potenciales. Si alguna vez os preguntasteis por qué tantos juegos se retrasan o tienen tantos bugs y cuelgues, echadle una buena parte de la culpa a C++, cuando hay alternativas como D que resolverían muchos de estos problemas y mejorarían enormemente los tiempos de desarrollo. No es que sea yo el que haya inventado esta queja, por cierto, muchos programadores y diseñadores de proyectos grandes ya se quejaron en su día de esto y la cantidad de tiempo y dinero que hacía perder.
Tanto es así, que hoy día la inmensa mayoría de juegos utilizan un lenguaje de scripting (Lua, Python, ...) para la "miga" del juego y se dejan los lenguajes de bajo nivel para el propio motor de scripting y lo que necesita rapidez máxima (gráficos, etc.).
El no tener que administrar memoria manualmente, hoy por hoy y en la mayoría de aplicaciones (quitando sistemas en tiempo real y similares), es un avance gigantesco, ya que permite concentrarse en resolver el problema y no perder el tiempo en un código repetitivo que no aporta nada excepto ego al programador de turno. Eso sí, para aprender a programar debería usarse un lenguaje que necesitase administrar memoria manualmente, porque aunque sea una habilidad que tiene menos uso hoy en día, siempre hay situaciones en las que es necesario (y además es pedagógicamente imprescindible si se quiere entender de verdad la programación).
Realmente para tener una visión más o menos amplia del asunto hay que haber programado en varios lenguajes y paradigmas.
Me encanta el de "Sun controla Java" que viene a significar algo así como "No hay motivo alguno excepto que soy Microsoft y quiero que te comas mi lenguaje de mierda rollo Java"
Eso sí, como leí en el primer tutorial cuando tuve que aprender C#, "este lenguaje también es multiplataforma como Java,... funciona en todas las versiones de Windows". Con dos cojones
#61 en realidad funciona en todas las plataformas que pueden correr Mono, que en la práctica son todas las plataformas. Eso sí, no es por obra y arte de Microsoft precisamente.
¿Has tenido algún sistema en producción corriendo así bajo Mono y comprobado que sea estable? Lo digo realmente con curiosidad, porque mi primera reacción sería no fiarme.
#c-72" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/1957841/order/72">#72 Sí. Hice un servidor en C# para un MMO y se está ejecutando en un servidor dedicado Linux, accediendo a una base de datos MySQL a través de MySQL Connector .Net, y lleva varios años funcionando sin incidencias. Como curiosidad te diré que ha dado menos problemas funcionando en Linux que en Windows.
#c-78" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/1957841/order/78">#78 Wow, en realidad tiene su ironía que te funcione mejor en Linux
Yo tuve que andar aprendiendo C# por requerimientos de un cliente (gran empresa con departamento de informática formado por gente con muchos certificados Microsoft a la que no puedes sacar de ahí), hasta que por fin empiezan a ceder. Pero mira, lo de montar un Mono bajo Linux cuando te requieran C# es algo que me apunto, siempre es una victoria aunque sea parcial, y por supuesto más aún si encima va mejor.
#5 Es que a programar se aprende en Pascal. Acierto bastantes veces, viendo el código de alguien, en saber si ha aprendido a programar en Pascal o no. Da gusto ver esos códigos.
Y después de Pascal, C. A partir de C, puede uno irse por los mundos de fantasía, lenguajes especializados, o lo que sea.
#8 Totalmente de acuerdo. Una sintaxis que obliga a declarar e implementar por separado, incluso a declarar algunas cosas dos veces. Sólo se pueden usar arreglos estáticos. Nada de tipos dinámicos, ni Objects, ni otros juguetes, tipado fuerte y estricto. En las declaración de las clases hay que decirlo todo, nada se infiere. Y un largo etc. Al final te haces un programador a prueba de todo al que cualquier otro lenguaje te parece un juego de niños. Le debo mucho al viejo y confiable Pascal.
#8#9 programar con tarjetas perforadas era mucho mas exigente que con Pascal, nada de arreglos estáticos, ni declarar cosas 2 veces, ni seperar declaraciones y demás, no, tenías que agujerear punto por punto para poder hacer una rutina de programación medianamente estructurada. Lo que hace que cosas como Pascal y los demás lenguajes sean en realidad un juego de niños. Le debo mucho a las viejas y confiables tarjetas perjoradas.
#9#8 Debo ser yo el raro, aprendí con pseudocógido y a continuación me puse directamente con C en el ciclo superior. Luego al meterme en ingeniería Pascal me parecía un auténtico coñazo...
#36 Bueno, es que si ya sabes C, Pascal no te sirve de nada. Y Pascal al final es poco más que pseudocódigo en inglés, sólo que lo puedes ejecutar, así que tampoco hay mucha diferencia.
#9#11#16 vaya me alegro de ver a más gente a la que le parece bien aprender con un lenguaje fuertemente tipado en vez de protestar con un "buaaaaa el Pascal/Ada/Modula2 no se usa en el mundo real".
Yo estoy totalmente de acuerdo, de hecho yo aprendí C antes de llegar a la Universidad (y antes de C ensamblador, sí, era un poco rarito) y tuve que quitarme unas cuantas malas costumbres que había cogido.
#11 Yo en la Universidad no podía con Ada. El rollo de UnboundedtoStringtoUnboundedtoStringto... Me parecía totalmente intragable.
Eso sí, como otros por ahí, aprender Pascal antes que C me pareció una gran idea. Me habría vuelto loco si de primeras me meten C y sus bonitos punteros.
#41 Al Pascal le ocurre lo mismo que al Fortran, todavía hay muchos canosos que lo utilizan. Y que conste que el Fortran entra dentro de mi categoría de lenguajes decentes, pero cuando ves que todavía programan en Fortran 77 te dan ganas de buscar un Pentium 2 para compilar su código ;P
#67 Y eso que todavía no te has metido con metaprogramación. Pero eso que comentas ya existe en Java en .Net.
#5 Si aprendiste en Basic, no me extraña que no sepas programar.
It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration. Edsger Dijkstra.
Es prácticamente imposible enseñar a programar bien a estudiantes que han sido previamente expuestos a Basic: como programadores potenciales esán mentalmente mutilados sin esperanza de regeneración.
#92 A mí esta frase me parece una chorrada aunque la haya dicho el Papa de Roma. Conozco excelentes programadores que empezaron con BASIC por la sencilla razón de que fue lo primero a lo que tuvieron acceso como críos y fue con lo que empezaron a cacharrerar. Probablemente sin BASIC en aquella época habría menos programadores hoy.
A los académicos les gustan mucho las torres de marfil.
#5 Igualico que yo. Y siguen siendo los únicos lenguajes que uso, para mis "pequeñas" necesidades informáticas. También uso Gambas y Lázarus, pero es lo mismo.
#2 Sin embargo LISP es un lenguaje tan antiguo como potente, y que permite todavía hoy día hacer cosas que en otros lenguajes es extremadamente enrevesado o imposible.
Su sintaxis es horrible, eso sí, aunque hay versiones edulcoradas que pueden ser más fáciles de digerir.
#2 La mayoría de lenguajes de programación se basan en la idea de computación de la máquina de Turing.
LISP y sus descendientes sin embargo se basan en el cálculo lambda de Church. Esta forma de definir el concepto de computación es más matemática, más abstracta y mucho más elegante.
C no se creó porque Ensamblador fuera a demasiado bajo nivel, sino porque los demás lenguajes eran de demasiado alto nivel. De hecho, el propio lenguaje se creó para poder crear el sistema operativo UNIX, algo que no hubiera sido posible, por ejemplo, en el Pascal de la época.
Curiosamente a nadie le dio por mejorar Cobol, debe ser que es el lenguaje perfecto. O quizá que los que comienzan programando en Cobol, quedan tan abducidos, que les es imposible imaginar nada fuera de el.
#47 el hecho de que C sea un subconjunto de C++, y que un programa de C compile perfectamente con un compilador de C++ no es más que una casualidad cósmica.
#53 No, no y no. C y C++ son lenguajes completamente diferentes y tienen filosofias inherentes completamente diferentes. C++ se ha diseñado para ser un 95% compatible con C y ahí termina la relación entre ambos.
Un programador de C declararía las variables de este forma
int *a;
Mientras que un programador de C++ las declara como
int* a;
#85#88 claro que son lenguajes distintos, y claro que tienen filosofías distintas (uno es orientado a objetos y el otro no).
La cuestión original que se intenta rebatir es al que dijo "C++ no tiene nada que ver con C".
Y por muy de listo que vaya #88, C++ es un superconjunto de C. Y si no, que me muestre un ejemplo de código en C que no compila con un compilador de C++.
#95#99#102
Mi primer trabajo donde empecé a aprender a programar fue una beca en la que tuve que pasar un código de C a C++, osea, que cambiabas el Makefile para que lo compilara como C++.....y ala...a disfrutar. Tarde dos meses en poder hacer que compilara.
Asi que tus ultimas palabras #95 son un poco atrevidas...
#47 Quizás exagero, pero la típica visión que tenemos de C++ es que es C con clases... y eso se queda muuuy corto (STL con sus maravillosos string, vector y map, templates, etc...)
A mi se me quedó el culo torcido cuando vi que se podían ordenar vectores con:
#67 C++ tiene muchísimas cosas, es su virtud y su pega. Creo que querían añadirle como estándar la librería Boost también, aunque no sé cómo anda el asunto, ni las conocía hasta hace nada.
#67 Bueno, ese for con auto se puede en el nuevo estándar C++11, en el C++ que se venía utilizando hasta hace unos años había que andarse con los iteradores.
#c-67" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/1957841/order/67">#67
Cierto, aunque no es nada que no tenga Java ni C#
#67 Pues si ves cosas como los array slices de Python y como se pueden hacer iteraciones y expresiones con ellos de forma super elegante, te vas a quedar picueto.
Mi eje cronológico aprendiendo lenguajes de programación: Modula2 -> C -> Ensamblador -> Java -> Javascript -> Python.
De momento me quedo con Java como preferido, lástima que no se pueda usar para hacer pequeños scripts como con Python, pero es que no me gustan los lenguajes que no tienen tipado estricto: demasiadas guarradas he visto ya en JS, muchas alentadas por la propia especificación del lenguaje.
Yo aprendí en PASCAL, luego salté al BASIC hasta que descubrí Delphi: Entorno gráfico y Object Pascal, lo puto mejor. Todavía no he visto nada mejor en programación para aplicaciones de escritorio que Delphi 5: sin "maquinas virtuales", robusto, aplicaciones rápidas, conexión con BBDD perfecta, ... Todavía estoy esperando a que salga algo tan bien hecho y con tanto "cariño" como Borland Delphi.
Creo que Phyton me gusta y tiene la filosofía de ser, ante todo, robusto y anti-chapuceros.
#23 Es imposible hacer algo a prueba de chapuceros, porque los chapuceros son muy listos y siempre encuentran la manera de usar mal lo que les pongas delante. Sea lo que sea. Hasta un botijo.
El Tao engendró al lenguaje de máquina. El lenguaje de máquina engendró al ensamblador.
El ensamblador engendró al compilador. Ahora existen diez mil lenguajes.
Cada lenguaje tiene su propósito, aunque sea humilde. Cada lenguaje expresa el Yin y el Yang del software. Cada lenguaje tiene su lugar dentro del Tao.
AS1: Porque los diseñadores también tienen derechos.
AS2: Hay demasiadas CPU funcionando bien. Pon un enterFrame en tu vida.
AS3: No nos hemos cargado todas las CPU que queríamos.
Starling: Hay demasiadas GPU funcionando bien.
#25 Java sí (o al menos así lo vendían cuando salió), pero .net no, solo rula en Windows (y en otros sistemas con emuladores, pero el objetivo de .net no era funcionar en cualquier máquina, el de Java sí).
Por cierto, el autor de la lista ha oido campanas pero no sabe de dónde. Cuando apareció PL/1 (en los 60!) la versión de fortran que existía era Fortan-66 (ni siquiera Fotran-IV). Además de pocos tipos de datos (enteros, reales y Hollerith) ese Fortran tenía como estructuras de control el IF aritmético, el DO por contador y el GOTO. PL/I es un lenguage fuertemente tipado, estructurado (al nivel de PASCAL) y sobre todo -y ese fué su principal problema- muy completo. Con PL/I puedes programar al nivel de bit (MULTICS está programado en PL/I, y buena parte de z/OS en PL/X, que es un pariente cercano) o a nivel de registro de datos (al más puro estilo COBOL), sin olvidar la programación científica (tiene los mismos tipos de datos del Fortran, más soporte nativo para números complejos). Digo que ese es su problema porque los compiladores de PL/I son enormes, y el lenguage es muy complicado de parsear (hay muchas dependencias de contexto, un parser generado con lexx+yacc no sirve).
Decir que PL/I apareció porque "fortran tenía pocos tipos de datos" es ignorancia pura.
#76 Qt tal como dice #84, Qt es una librería C++ para, entre otras cosas, hacer interfaces gráficas.
Aunque está escrito en C++ tiene bindings para un montón de lenguajes, como Java y Python (lo que quiere decir que puedes usar Qt desde esos lenguajes)
Personalmente Qt es mi librería favorita para realizar interfaces gráficas
A mí hace unos años en un grado superior me dieron clase de C. Ahora estoy estudiando C++ por mi cuenta y voy a empezar otro grado superior donde me van a dar C#. ¿Qué opinión os merece esa progresión? ¿Debería aprender Java?
#c-37" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/1957841/order/37">#37 Para el C++ autodidacta, te recomiendo encarecidamente "Addison Wesley - Accelerated C++ Practical Programming by Example", en el que se ve que C++ no tiene nada que ver con C
A riesgo de que me vapulee alguien, si vas a estudiar C# yo pasaba de Java por el momento. En cambio, si que me pondría a aprender python, lenguaje interpretado, que te será muy útil incluso en tu vida diaria
#44 ¿C++ nada que ver con C? Si su nombre lo dice todo: "Incremento de C". Evidentemente un programa orientado a objetos es completamente diferente de uno en C pero ambos lenguajes comparten mucho.
Comentarios
C no nació porque el ensamblador fuera demasiado bajo nivel, ese fue B, C fue la evolución de B para añadir tipos de datos y estructuras de las que B carecía. Se puede decir que C también solucionaba eso por extensión, pero el que hizo el cambio fue B.
#4 pero B apenas se usó. Fue casi más un boceto de C que un lenguaje propiamente dicho.
Java y NET intentaban solucionar el problema de que las cosas pudieran hacerse de forma sencilla, sin necesitar de 200.000 certificados y consultorías. Y han sido un gran éxito por ello, una vez convencieron a todos los directivos que no sabían nada de desarrollo.
#1 Te invitaba a una cerveza por esa gran verdad ....y añado:
- Ruby y CSS3 intentaba solucionar la necesidad de hacer sentirnos a los peludos programadores como estrellitas y unos gafa pasta de lo mas Hipster.
- Vala, Buu y demás inventos de la comunidad Gnome intentaban solucionar la necesidad de mantener un buen escritorio como Gnome2 mientras estaban emborrachandose en alguna convención Guadec.
#27 En realidad Vala intentaba solucionar el hecho de que los programadores de Gnome no tienen huevos para escribir código en C++ (y yo me incluyo), así que necesitaban algo que hiciese olvidar a GObject.
¿Qué intentaba arreglar cada lenguaje de programación?
El ego de sus creadores.
php: los demás lenguajes son muy ordenados...
(PD: sí, programo en PHP)...
#22 "php: los demás lenguajes son muy ordenados..."
Amén, hermano.
Diría que a su altura está solo javascript
#30 Tu no has visto ASP
Sois todos unas nenazas. El verdadero programador se ha forjado en los infiernos del ensamblador.
#14 Yo aprendí primero BASIC y luego ensamblador en mi viejo y confiable Z80 (MSX). Era una gozada escribir cualquier chorradilla y ver como iba infinitamente (jaja, 3Mhz) más rápido que con BASIC.
#c-14" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/1957841/order/14">#14 #19 yo también empecé con BASIC en un Amstrad y luego me pasé a ensamblador, pero del PC 8086. Luego Pascal, que fue mi lenguaje de desarrollo durante años en el entorno Delphi, después me pasé a C y luego a C++ para desarrollar rutinas gráficas de alto rendimiento. Actualmente programo en C# que para mí es una maravilla, después de tantos años de sufrimiento da gusto olvidarse de la gestión manual de memoria. Vale que Java también tiene recolector de basuras, pero no se puede comparar el caos de librerías de Java con el bien estructurado y eficiente framework de .Net, también uso AS3 en desarrollo de aplicaciones Flash y estoy bastante satisfecho con él.
#21 Ser informático y decir que da gusto olvidarse de la gestión manual de memoria es como ser cirujano y decir que da gusto olvidarse de mirar por dentro a los pacientes....
#26 ¿o ser arquitecto y decir que da gusto olvidarse de como se prepara el ormigón armado? ¿o ser ingeniero de teleco y decir que da gusto olvidarse de como se fabrica un cable de fibra óptica? ...
#28 #29 ¡No se puede comparar! En vez de preparar hormigón armado es investigar en nuevos materiales, aunque operes por laparoscopia sigues mirando dentro del paciente, etc.
El jugar con buffers que necesitas redimensionar en caliente en tiempos inferiores a ms o se te va el margen de tiempo para realizar la operación, gestión de áreas de memoria contigua porque va a ser usada para DMA, cacharrear con FPGAs conectadas al bus de memoria, todo ese tipo de cosas son las que le dan vidilla a ser un programador.
#c-37" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/1957841/order/37">#37 Si aprendes C# aprendes Java, lo llamaron C# por cuestiones legales, si no se llamaría Java de Microsoft.
#35 Lo que es lamentable es que hay programadores que no entienden la diferencia entre estructurado y OO, eso si que es lamentable, también es lamentable que hay programadores que no entienden de cuestiones de calidad en la programación, ni tampoco saben trabajar en equipo, etc. etc. ... y es que programar es mucho más que programar. Hacer una edificio es mucho más que poner ladrillos o desarrollar una red de comunicación es mucho más que tirar cable, y este razonamiento tiene que ver con lo que digo aquí #12
#42 Claro que no lo saben, hasta que le ven las orejas al lobo... O mueren o aprenden.
#c-35" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/1957841/order/35">#35 El jugar con buffers que necesitas redimensionar en caliente en tiempos inferiores a ms o se te va el margen de tiempo para realizar la operación, gestión de áreas de memoria contigua porque va a ser usada para DMA, cacharrear con FPGAs conectadas al bus de memoria, todo ese tipo de cosas son las que le dan vidilla a ser un programador.
Y todas esas cosas y muchas más son las que yo hago en mi casa por diversión. Cuando se trata de hacer un programa a nivel profesional fiable, mantenible, respetando patrones de diseño y metodologías, y además hacerlo en tiempo, te aseguro que C# es la octava maravilla.
#55 Oye, oye, que muchos programamos en C++ usando patrones, testeo unitario y metodologías ágiles en entornos laborales porque necesitamos poder acceder a operaciones de bajo nivel para obtener un código optimizado.
Y en lo que respeta a la gestión de memoria, teniendo claro el concepto de propiedad de un objeto (que objeto es el propietario, y por tanto responsable de liberarlo, de que otro objeto), es tan trivial como en cualquier otro lenguaje.
#35 lo siento, te he votado negativo cuando quería ocultar los comentarios. Te he votado positivo en #26 para compensar.
#28 'ormigón'... mira que la tilde está bien puesta, pero sin la hache se merece el típico "ahhh, mis hojos!!
#38 Creo que no es para tanto ... por cierto en castellano la admiración se pone también al principio de la frase ... so, listooooooo!!!!!!
#45 Ya, y tampoco ojos se escribe con hache. Por eso entrecomillo la expresión...
Por cierto, ya que te pones puntilloso, ¿por qué no pones tu tampoco el signo de admiración?
Ainss..
#62 Quizás porque si te fijas demasiado en la sintaxis no te fijas tanto en el contenido ... bueno vale, como veo que te cuesta te lo explico. Como para mi lo importante es que se me entienda, intento no cometer errores ortográficos ni gramaticales, pero tampoco me obsesiono, si no pongo el signo de admiración es porque, de forma implicita, te sigo dejando claro cual es mi planteamiento.
A veces los errores favorecen al contenido, por ejemplo, al escribirlo me di cuenta que so, listooo!!! tenía mala sintaxis, ya que lo que quería decir es so listo, pero luego pensé que era mejor tratarte como a una acémila. (todo esto con humor, incluso con cariño)
#70 Mira, ya me has llamado so listo y acémila... Que paso de ver si escribes con faltas o no. Lo único es que algunas faltas duelen a la vista, y tu 'ormigón' lo ha hecho.
#77 Si lo haces por mi mejor que pases, porque lo tengo clarísimo.
Yo también paso de explicarte que lo importante es el contenido y no tanto la sintaxis ... por cierto, curioso que esta conversación se desarrolle en un hilo sobre programación
#83
Ortografía != sintaxis.
Y la comprensión de los contenidos escritos dependen directamente de la sintaxis (que no de la ortografía, que también). Otra cosa es que ni sepas sintaxis, ni sepas programar decentemente, ni sepas ortografía, ni sepas vocabulario castellano, como es el caso.
#c-100" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/1957841/order/100">#100
Con lo leido aquí has llegado a la conclusión de que no se programar, pues he programado en Pascal, Módula, Java (mucho), C, C++, php, C#, PL/SQL, etc. etc. etc., te puedo decir que vivo de ello y bastante bien.
Aunque la "rapidez" de tus razonamientos y tu atrevimiento me indican que es inútil, intentaré aclararte un par de cuestiones. En lengua la sintaxis es la parte que estudia de qué forma se relacionan las palabras y la ortografía es el conjunto de reglas y convenciones que rigen el sistema de escritura, por lo tanto tienes razón en lengua ortografía es distinto de la sintaxis.
Pero ¿que pasa en programación? En este caso la sintaxis es la forma visible del lenguaje de programación, es decir, en programación no hay ortografía ya que las reglas y convenciones que rigen el sistema de escritura están dentro de la sintaxis de programación ... curioso ¿verdad?. Como está claro que no lo entiendes te pongo un ejemplo, en programación si te equivocas con un ; el programa no funciona y es un error de sintaxis. Es lo que tiene la lengua castellana, que es muy rica, y es lo que tiene la realidad, que es difícil de encasillar.
Con respecto a la ortografía, estoy absolutamente de acuerdo con García Márquez, para mi el mejor escritor en castellano vivo y quizás el mejor escritor en castellano de la historia.
http://www.mundolatino.org/cultura/garciamarquez/ggm6.htm
#77 Que conste que no te he llamado acémila. Lo que ha ocurrido es que, por temas circustanciales y con un objetivo jocoso te he tratado como tal, que es muy diferente.
#26 precisamente los cirujanos prefieren operar por laparoscopia cuando tienen la ocasión para no tener que abrir al paciente. Cualquier profesional se centra en solucionar un problema de la manera más rápida y eficiente posible, no en disfrutar haciéndolo de la manera más difícil. Eso yo lo hago en mi tiempo libre, en el que de hecho programo en ensamblador para plataformas retro.
#29 Vaya, pensaba que era el único bicho raro
#33 somos más de lo que parece. Si no has ido nunca deberías pasarte por Retromadrid (no sé si hay un Retrobcn). El movimiento de desarrollo para plataformas retro es bestial, de hecho se están publicando bastantes juegos nuevos para Spectrum, Amstrad, MSX... sí, en pleno 2013!
#43 Jejeje yo tiro más a PDP-8, PDP-10 Y PDP-11
#c-21" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/1957841/order/21">#21 Precisamente C# no destaca por su gestion de memoria. Trata de hacer simulaciones en tiempo real o invertir una matriz de 1 Giga y luego me comentas lo bien que va el recolector de basura.
Lo normal es empezar con C y luego aprender primero C# antes que C++.
#c-40" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/1957841/order/40">#40 con dos cojones! aprendes un lenguaje de los años 70, luego uno del siglo XXI y luego te vas a uno de los años 80. A eso le llamo yo estar a la última, sí señor. ¿Sabías que se puede mezclar C# con C++? En los casos que mencionas lo normal es hacer el 99% del programa en C# y la parte más crítica en C++, incluso en ensamblador. Lo que no es normal es tener que hacer malloc() y free() para poner un puto botón en la pantalla. Además, no todo el mundo se dedica a 'invertir matrices de un Giga', que dicho sea de paso no parece una operación muy complicada. Yo he desarrollado un FPS en 3D para XBox íntegramente en C#, no sé si eso te vale como ejemplo.
#54 Yo he hecho un juego (más bien demo, por ahora) tipo Minecraft en C++ sin un sólo malloc(), si te sirve de ejemplo para ilustrar que estás diciendo una salvajada.
#49 Entonces prefiero C, es más flexible y deja ver mejor quién va a ser un chapuzas. Antes de entregar el código hay que dejarlo limpio y ordenado.
#56 Sí, claro, pero creo que se estaba hablando de un lenguaje para aprender. Antes de poder programar con limpieza en C tienes que aprender a ser limpio
#56 Se puede saber más información de este juego?
#21 #54 ¿No conoces los smart pointers? http://en.wikipedia.org/wiki/Smart_pointer
#71 El caso es que mientras tú te preocupas de los smart pointers, el ha avanzado mucho más en su proyecto, y va a funcionar igual (y probablemente con menos problemas).
No hablo por cuento, he programado en ambos cosas complejas y hoy día complicarse la vida (excepto para proyectos personales) es masoquismo puro. Excepto que lo que interese no sea hacer las cosas bien y rápido, sino vacilar de tus habilidades.
#21 Aparentemente hay mucha gente orgullosísima de tener que hacer por cojones gestión manual de memoria, cuando primero, no es difícil, sólo rutinario (las opiniones de gente que empieza no se deberían tener en cuenta, porque es lógico que les parezca difícil si no tienen los conceptos básicos claros aún) y segundo, introduce inherentemente muchísimos errores potenciales. Si alguna vez os preguntasteis por qué tantos juegos se retrasan o tienen tantos bugs y cuelgues, echadle una buena parte de la culpa a C++, cuando hay alternativas como D que resolverían muchos de estos problemas y mejorarían enormemente los tiempos de desarrollo. No es que sea yo el que haya inventado esta queja, por cierto, muchos programadores y diseñadores de proyectos grandes ya se quejaron en su día de esto y la cantidad de tiempo y dinero que hacía perder.
Tanto es así, que hoy día la inmensa mayoría de juegos utilizan un lenguaje de scripting (Lua, Python, ...) para la "miga" del juego y se dejan los lenguajes de bajo nivel para el propio motor de scripting y lo que necesita rapidez máxima (gráficos, etc.).
El no tener que administrar memoria manualmente, hoy por hoy y en la mayoría de aplicaciones (quitando sistemas en tiempo real y similares), es un avance gigantesco, ya que permite concentrarse en resolver el problema y no perder el tiempo en un código repetitivo que no aporta nada excepto ego al programador de turno. Eso sí, para aprender a programar debería usarse un lenguaje que necesitase administrar memoria manualmente, porque aunque sea una habilidad que tiene menos uso hoy en día, siempre hay situaciones en las que es necesario (y además es pedagógicamente imprescindible si se quiere entender de verdad la programación).
Realmente para tener una visión más o menos amplia del asunto hay que haber programado en varios lenguajes y paradigmas.
Pero es cierto que Fortran da miedo.
Me encanta el de "Sun controla Java" que viene a significar algo así como "No hay motivo alguno excepto que soy Microsoft y quiero que te comas mi lenguaje de mierda rollo Java"
Eso sí, como leí en el primer tutorial cuando tuve que aprender C#, "este lenguaje también es multiplataforma como Java,... funciona en todas las versiones de Windows". Con dos cojones
#61 en realidad funciona en todas las plataformas que pueden correr Mono, que en la práctica son todas las plataformas. Eso sí, no es por obra y arte de Microsoft precisamente.
http://www.mono-project.com/Main_Page
#66
¿Has tenido algún sistema en producción corriendo así bajo Mono y comprobado que sea estable? Lo digo realmente con curiosidad, porque mi primera reacción sería no fiarme.
#c-72" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/1957841/order/72">#72 Sí. Hice un servidor en C# para un MMO y se está ejecutando en un servidor dedicado Linux, accediendo a una base de datos MySQL a través de MySQL Connector .Net, y lleva varios años funcionando sin incidencias. Como curiosidad te diré que ha dado menos problemas funcionando en Linux que en Windows.
#c-78" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/1957841/order/78">#78 Wow, en realidad tiene su ironía que te funcione mejor en Linux
Yo tuve que andar aprendiendo C# por requerimientos de un cliente (gran empresa con departamento de informática formado por gente con muchos certificados Microsoft a la que no puedes sacar de ahí), hasta que por fin empiezan a ceder. Pero mira, lo de montar un Mono bajo Linux cuando te requieran C# es algo que me apunto, siempre es una victoria aunque sea parcial, y por supuesto más aún si encima va mejor.
¡¡Hey!! Yo aprendí a programar en Basic y luego aprendí programación estructurada en Pascal. Ambas salen en el gráfico.
Y no sé programar.
#5 Es que a programar se aprende en Pascal. Acierto bastantes veces, viendo el código de alguien, en saber si ha aprendido a programar en Pascal o no. Da gusto ver esos códigos.
Y después de Pascal, C. A partir de C, puede uno irse por los mundos de fantasía, lenguajes especializados, o lo que sea.
Obviamente, es mi opinión y blah blah blah.
#8 Totalmente de acuerdo. Una sintaxis que obliga a declarar e implementar por separado, incluso a declarar algunas cosas dos veces. Sólo se pueden usar arreglos estáticos. Nada de tipos dinámicos, ni Objects, ni otros juguetes, tipado fuerte y estricto. En las declaración de las clases hay que decirlo todo, nada se infiere. Y un largo etc. Al final te haces un programador a prueba de todo al que cualquier otro lenguaje te parece un juego de niños. Le debo mucho al viejo y confiable Pascal.
#8 #9 programar con tarjetas perforadas era mucho mas exigente que con Pascal, nada de arreglos estáticos, ni declarar cosas 2 veces, ni seperar declaraciones y demás, no, tenías que agujerear punto por punto para poder hacer una rutina de programación medianamente estructurada. Lo que hace que cosas como Pascal y los demás lenguajes sean en realidad un juego de niños. Le debo mucho a las viejas y confiables tarjetas perjoradas.
#10
Salvo que lo hayan cambiado, las tarjetas no son un lenguaje, son un soporte
Y por cierto, no eran nada confiables (se te caían, se desordenaban, se perdían)
#15 Si programas en PASCAL guardando en ese soporte (tarjetas perforadas) ya nada se puede interponer en tu camino y te haces inmortal.
#57 nada como los viejos y fiables disquettes de 5 1/4
#15 Todo el mundo recuerda a Apu Nahasapeemapetilon...
#10 Uno no sabe lo que es un "error de compilación" hasta que se le cae un taco de tarjetas perforadas al suelo...
#84 Qt = Cute = bonito, "mono"
#9 #8 Debo ser yo el raro, aprendí con pseudocógido y a continuación me puse directamente con C en el ciclo superior. Luego al meterme en ingeniería Pascal me parecía un auténtico coñazo...
#36 Bueno, es que si ya sabes C, Pascal no te sirve de nada. Y Pascal al final es poco más que pseudocódigo en inglés, sólo que lo puedes ejecutar, así que tampoco hay mucha diferencia.
#9 #11 #16 vaya me alegro de ver a más gente a la que le parece bien aprender con un lenguaje fuertemente tipado en vez de protestar con un "buaaaaa el Pascal/Ada/Modula2 no se usa en el mundo real".
Yo estoy totalmente de acuerdo, de hecho yo aprendí C antes de llegar a la Universidad (y antes de C ensamblador, sí, era un poco rarito) y tuve que quitarme unas cuantas malas costumbres que había cogido.
#68 Pascal puede que no se use, pero Ada todavia si.
#8 #9 #11 #16 Eso pasa cuando una universidad se plantea enseñarte a programar y otras enseñarte un lenguaje de programación.
Yo también tuve la suerte de aprender en Pascal y en Ada. Y fue genial.
#8 Ada también es guay para aprender.
#11 Aquí uno que aprendió a programar en Ada, un gran acierto por parte de mi facultad.
#16 Me encantaba...
#11 #16 Aquí otro. Ada mola
#11 #16 y aquí otro...
#11 Yo en la Universidad no podía con Ada. El rollo de UnboundedtoStringtoUnboundedtoStringto... Me parecía totalmente intragable.
Eso sí, como otros por ahí, aprender Pascal antes que C me pareció una gran idea. Me habría vuelto loco si de primeras me meten C y sus bonitos punteros.
#97 Sí, ADA es un poco pedante
#8 ¿Por qué? ¿Qué tiene de especial Pascal? Yo aprendí con C y ahora me va a tocar darle a Pascal en la Universidad
#41 C te deja hacer demasiadas guarradas. PASCAL te obliga a ser más limpio.
#41 Al Pascal le ocurre lo mismo que al Fortran, todavía hay muchos canosos que lo utilizan. Y que conste que el Fortran entra dentro de mi categoría de lenguajes decentes, pero cuando ves que todavía programan en Fortran 77 te dan ganas de buscar un Pentium 2 para compilar su código ;P
#67 Y eso que todavía no te has metido con metaprogramación. Pero eso que comentas ya existe en Java en .Net.
#5 Si aprendiste en Basic, no me extraña que no sepas programar.
It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration. Edsger Dijkstra.
Es prácticamente imposible enseñar a programar bien a estudiantes que han sido previamente expuestos a Basic: como programadores potenciales esán mentalmente mutilados sin esperanza de regeneración.
#92 Al revés, BASIC te controla mucho que no te inventes cosas, cosas que C así te deja, por tanto, aprendes a hacer las cosas con cuidado y bien.
LISP y PROLOG y aquellos maravillosos árboles genealógicos para saber de quien era tio PEPE y cuantos abuelos tenía MARIA
#94 Siii jaja lo recuerdo cuando aprendí PROLOG, era como los juegos esos de lógica de los tebeos...
#92 Dijkstra? El del algoritmo loco de matemática discreta? jamás aprendí a pronunciar su apellido
#92 A mí esta frase me parece una chorrada aunque la haya dicho el Papa de Roma. Conozco excelentes programadores que empezaron con BASIC por la sencilla razón de que fue lo primero a lo que tuvieron acceso como críos y fue con lo que empezaron a cacharrerar. Probablemente sin BASIC en aquella época habría menos programadores hoy.
A los académicos les gustan mucho las torres de marfil.
#5 Igualico que yo. Y siguen siendo los únicos lenguajes que uso, para mis "pequeñas" necesidades informáticas. También uso Gambas y Lázarus, pero es lo mismo.
Lisp: Las máquinas de Turing son una forma extraña de describir computación
Sí, vamos, y por eso sacaron algo tan poco extraño como Lisp.
Prolog y LISP, un pasote.
#2 Te parece raro porque no sabes contar paréntesis Si puedes hacer un buen juego con un lenguaje, ese lenguaje mola.
#2 Sin embargo LISP es un lenguaje tan antiguo como potente, y que permite todavía hoy día hacer cosas que en otros lenguajes es extremadamente enrevesado o imposible.
Su sintaxis es horrible, eso sí, aunque hay versiones edulcoradas que pueden ser más fáciles de digerir.
#2 La mayoría de lenguajes de programación se basan en la idea de computación de la máquina de Turing.
LISP y sus descendientes sin embargo se basan en el cálculo lambda de Church. Esta forma de definir el concepto de computación es más matemática, más abstracta y mucho más elegante.
C no se creó porque Ensamblador fuera a demasiado bajo nivel, sino porque los demás lenguajes eran de demasiado alto nivel. De hecho, el propio lenguaje se creó para poder crear el sistema operativo UNIX, algo que no hubiera sido posible, por ejemplo, en el Pascal de la época.
Curiosamente a nadie le dio por mejorar Cobol, debe ser que es el lenguaje perfecto. O quizá que los que comienzan programando en Cobol, quedan tan abducidos, que les es imposible imaginar nada fuera de el.
#17 Las últimas versiones de COBOL para el mainframe tienen orientación a objetos. Que sí, que sí, que NO es una broma!
http://pic.dhe.ibm.com/infocenter/pdthelp/v1r1/topic/com.ibm.entcobol.doc_5.1/PGandLR/tasks/tpoot02.html
#47 el hecho de que C sea un subconjunto de C++, y que un programa de C compile perfectamente con un compilador de C++ no es más que una casualidad cósmica.
#53 No será más bien que C++ es un superconjunto de C?
#53 No, no y no. C y C++ son lenguajes completamente diferentes y tienen filosofias inherentes completamente diferentes. C++ se ha diseñado para ser un 95% compatible con C y ahí termina la relación entre ambos.
Un programador de C declararía las variables de este forma
int *a;
Mientras que un programador de C++ las declara como
int* a;
#85 #88 claro que son lenguajes distintos, y claro que tienen filosofías distintas (uno es orientado a objetos y el otro no).
La cuestión original que se intenta rebatir es al que dijo "C++ no tiene nada que ver con C".
Y por muy de listo que vaya #88, C++ es un superconjunto de C. Y si no, que me muestre un ejemplo de código en C que no compila con un compilador de C++.
#95 C++ no es orientado a objetos... tiene objetos, que no es lo mismo. Usarlos depende del programador.
#95 Esto compila en un compilador de C y no compila en un compilador de C++
int *array = malloc(sizeof(*array) * n);
Sólo tienes que buscar por Internet para encontrar más ejemplos.
#99 Tampoco puedes usar funciones sin declararlas en C++ y en C sí, ¿y? Eso no cambia el hecho de que C++ es una extensión de C.
#95 #99 #102
Mi primer trabajo donde empecé a aprender a programar fue una beca en la que tuve que pasar un código de C a C++, osea, que cambiabas el Makefile para que lo compilara como C++.....y ala...a disfrutar. Tarde dos meses en poder hacer que compilara.
Asi que tus ultimas palabras #95 son un poco atrevidas...
#53 ¿Estás troleando o lo dices en serio? Da igual, porque en los dos casos estás haciendo el ridículo.
#47 Quizás exagero, pero la típica visión que tenemos de C++ es que es C con clases... y eso se queda muuuy corto (STL con sus maravillosos string, vector y map, templates, etc...)
A mi se me quedó el culo torcido cuando vi que se podían ordenar vectores con:
std::sort(myvector.begin(), myvector.end());
O recorrer vectores con:
for (auto i : vec ) {
cout
#67 C++ tiene muchísimas cosas, es su virtud y su pega. Creo que querían añadirle como estándar la librería Boost también, aunque no sé cómo anda el asunto, ni las conocía hasta hace nada.
#67 Bueno, ese for con auto se puede en el nuevo estándar C++11, en el C++ que se venía utilizando hasta hace unos años había que andarse con los iteradores.
#c-67" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/1957841/order/67">#67
Cierto, aunque no es nada que no tenga Java ni C#
#67 Pues si ves cosas como los array slices de Python y como se pueden hacer iteraciones y expresiones con ellos de forma super elegante, te vas a quedar picueto.
Mi eje cronológico aprendiendo lenguajes de programación: Modula2 -> C -> Ensamblador -> Java -> Javascript -> Python.
De momento me quedo con Java como preferido, lástima que no se pueda usar para hacer pequeños scripts como con Python, pero es que no me gustan los lenguajes que no tienen tipado estricto: demasiadas guarradas he visto ya en JS, muchas alentadas por la propia especificación del lenguaje.
No veo porque daba tanto miedo Fortran. Este ejemplo de código en la wikipedia no parece tan intimidatorio:
http://upload.wikimedia.org/wikipedia/commons/thumb/5/58/FortranCardPROJ039.agr.jpg/800px-FortranCardPROJ039.agr.jpg
Yo aprendí en PASCAL, luego salté al BASIC hasta que descubrí Delphi: Entorno gráfico y Object Pascal, lo puto mejor. Todavía no he visto nada mejor en programación para aplicaciones de escritorio que Delphi 5: sin "maquinas virtuales", robusto, aplicaciones rápidas, conexión con BBDD perfecta, ... Todavía estoy esperando a que salga algo tan bien hecho y con tanto "cariño" como Borland Delphi.
Creo que Phyton me gusta y tiene la filosofía de ser, ante todo, robusto y anti-chapuceros.
#23 "Creo que Phyton me gusta y tiene la filosofía de ser, ante todo, robusto y anti-chapuceros."
Quitáoslo de la cabeza. Anti-chapuceros no hay nada. Poned a un chapucero con cualquier lenguaje y saldrá una chapuza. Tienen sus propios caminos.
#31 Ahí le has dado. Como no puedo darte más positivos ... !BRAVO¡¡¡
#23 Es imposible hacer algo a prueba de chapuceros, porque los chapuceros son muy listos y siempre encuentran la manera de usar mal lo que les pongas delante. Sea lo que sea. Hasta un botijo.
#23 Es algo que nunca entendí, por qué se cargaron Delphi (pascal) que era lo mejor en mi opinión.
Eso sí, VB, NET y Java para mi lo peor que existe en programación.
El Tao engendró al lenguaje de máquina. El lenguaje de máquina engendró al ensamblador.
El ensamblador engendró al compilador. Ahora existen diez mil lenguajes.
Cada lenguaje tiene su propósito, aunque sea humilde. Cada lenguaje expresa el Yin y el Yang del software. Cada lenguaje tiene su lugar dentro del Tao.
Pero no programes en COBOL si puedes evitarlo.
Tao de la programación. Libro 1, versículo 2.
Todo lo que no sea programar en ensamblador es de nenazas.
Las mentes lúcidas de mi universidad nos hicieron aprender el "imprescindible" Modula2 jajaja
AS1: Porque los diseñadores también tienen derechos.
AS2: Hay demasiadas CPU funcionando bien. Pon un enterFrame en tu vida.
AS3: No nos hemos cargado todas las CPU que queríamos.
Starling: Hay demasiadas GPU funcionando bien.
Java y .Net tratan de solucionar el problema que cualquier codigo funcione en cualquier maquina sin necesidad de compilarlo.
#25 Java sí (o al menos así lo vendían cuando salió), pero .net no, solo rula en Windows (y en otros sistemas con emuladores, pero el objetivo de .net no era funcionar en cualquier máquina, el de Java sí).
El artículo debería ser clasificado como de humor, porque lo que plantea es erroneo, irrelevante ... una absoluta gilipollez.
ENGINEERS CAN WRITE FORTRAN IN ANY LANGUAGE
#DontPanicMofo #WhoCares? #AreYouScare?
Por cierto, el autor de la lista ha oido campanas pero no sabe de dónde. Cuando apareció PL/1 (en los 60!) la versión de fortran que existía era Fortan-66 (ni siquiera Fotran-IV). Además de pocos tipos de datos (enteros, reales y Hollerith) ese Fortran tenía como estructuras de control el IF aritmético, el DO por contador y el GOTO. PL/I es un lenguage fuertemente tipado, estructurado (al nivel de PASCAL) y sobre todo -y ese fué su principal problema- muy completo. Con PL/I puedes programar al nivel de bit (MULTICS está programado en PL/I, y buena parte de z/OS en PL/X, que es un pariente cercano) o a nivel de registro de datos (al más puro estilo COBOL), sin olvidar la programación científica (tiene los mismos tipos de datos del Fortran, más soporte nativo para números complejos). Digo que ese es su problema porque los compiladores de PL/I son enormes, y el lenguage es muy complicado de parsear (hay muchas dependencias de contexto, un parser generado con lexx+yacc no sirve).
Decir que PL/I apareció porque "fortran tenía pocos tipos de datos" es ignorancia pura.
¿Y Modula2? ¿Es que nadie se acuerda de Modula2?
#74 Y también Component Pascal
Pues yo programo en ABAP (con tono de "Yo me llamo Ralph")
¿Y que me decís de Qt?
#76 Qt no es un leguaje de programación, son librerías para hacer interfaces gráficas, con botones, treeviews, etc..
#84 Ya. No creí necesario señalarlo.
A mi me parece cojonudo, pero no lo he probado "a fondo".
#76 Qt tal como dice #84, Qt es una librería C++ para, entre otras cosas, hacer interfaces gráficas.
Aunque está escrito en C++ tiene bindings para un montón de lenguajes, como Java y Python (lo que quiere decir que puedes usar Qt desde esos lenguajes)
Personalmente Qt es mi librería favorita para realizar interfaces gráficas
solo los autenticos hombres han desarrollado algo en COBOL en su vida. he dicho.
A mí hace unos años en un grado superior me dieron clase de C. Ahora estoy estudiando C++ por mi cuenta y voy a empezar otro grado superior donde me van a dar C#. ¿Qué opinión os merece esa progresión? ¿Debería aprender Java?
#c-37" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/1957841/order/37">#37 Para el C++ autodidacta, te recomiendo encarecidamente "Addison Wesley - Accelerated C++ Practical Programming by Example", en el que se ve que C++ no tiene nada que ver con C
A riesgo de que me vapulee alguien, si vas a estudiar C# yo pasaba de Java por el momento. En cambio, si que me pondría a aprender python, lenguaje interpretado, que te será muy útil incluso en tu vida diaria
#44 ¿C++ nada que ver con C? Si su nombre lo dice todo: "Incremento de C". Evidentemente un programa orientado a objetos es completamente diferente de uno en C pero ambos lenguajes comparten mucho.
#44 Ese libro que dices lo tengo, y tambien este otro:
http://www.amazon.co.uk/C-Primer-Stanley-B-Lippman/dp/0321714113/ref=sr_1_1?ie=UTF8&qid=1372321309&sr=8-1&keywords=primer+c%2B%2B
Los saqué de la lista de mejores libros de C++ en StackOverflow, eran los dos primeros. Supongo que no voy mal encaminado.
habría que inventar algo para arreglar la mente de algun@s...