labloguera.net/blogs/aclemente/archive/2008/01/24/c-c-y-los-...
por JyQ el 02-06-2008 12:28 UTC, publicado el 02-06-2008 13:17 UTC
Interesante artículo que reflexiona acerca de lo que se enseña en los primeros cursos de las carreras de ingeniería informática y similares, una opinión sobre la abstracción conceptual que la programación ha sufrido a lo largo de los años.
#3Pues tienen razón, yo he pensado lo mismo con los lenguajes de programación modernos. Si usamos todos Java que tiene un Colector de Basura ¿Quién va a saber que se tiene que manejar la memoria? ¿A quién le va a quedar el concepto de apuntador? Alguien tiene que saberlo porque EXISTE, pero cada vez menos personas lo van a aprender.
#5mmm... En la universidad de Extremadura se enseña C++ como primer lenguaje (y ensamblador también aunque con menos profundidad). Y trabajamos con punteros y abstraemos del lenguaje, entendiendo que estás haciendo...
;)
#14#5 En la de Barcelona también, pero creo que no se trata de eso. El problema es que te enseñan como base algo que después desaparece. Será la evolución?
#15Hola, soy el autor del artículo. En mi facultad comenzábamos con C. Cuando yo comencé en 2001, sí hacían hincapié con C y los punteros, actualmente se enseña C pero no se enseña los punteros, lo cual me parece una genial gilipollez (para ello podrían comenzar enseñando Java no?)
Y si, yo he colgado el otro artículo hoy y ya no colgaré más hasta pasado un tiempo asi que emilius podrá estar tranquilo que no molestaré más por ahora jejeje.
#19En la Universidad de Cádiz afortunadamente damos C en el primer año y parte del segundo, y después C++ para POO y Análisis de Algoritmos. La verdad es que no concibo una carrera de informática en la que los alumnos no sepan qué es un puntero y cómo aprovechar la memoria. Con lo útil que es pasar las cosas por referencia.
#16 De nefasto nada. Al contrario, es mejor empezar por lo hardcore y luego pasar a lenguajes más suaves, que al contrario: Sería muy peligroso acostumbrarse a las std::list y que luego te hagan hacer una lista en C con punteros. Mejor tener una base en condiciones como la que da C a pelo.
#21#11,#12 ..En Teleco en Gran Canaria(ULPGC),empiezan con ADA y luego meten C++ por ahí.Algo parecido pasa en la facultad de Informática,que empiezan con ADA y ya luego enseñan C y C++,y ensamblador desde primero (MIPS).Por lo tanto,punteros a punta pala.
#24Recuerdo una escuela donde se enseñaba COBOL y casi casí había que perforar la puta pantalla del terminal con el vi para aprender el utilísimo Método de Jackson. Esto en 1996, 6 créditos. Naturalmente, aprender eso abre tu mente a nuevas experiencias como ser porculizado el resto de tu vida en la industria cárnica nacional.
#26En la Universidad de Huelva se empieza ahora con C++ y se dan punteros con new y malloc. En otras asignaturas se trabaja con memoria dinámica en C y C++, pero sólo una minoría usa Java o .Net.
Está claro que los lenguajes y entornos de desarrollo han evolucionado notablemente y eso también se nota con el manejo de la memoria dinámica. El desarrollo en Java o .Net es más rápido que en C++ por este motivo, pero los programas en C++ con una gestión de memoria manual pueden ser más rápidos y eficientes. Bajo mi punto de vista, como ingeniero que maneja bien los tres lenguajes, prefiero usar Java o .Net y comprarle al cliente un Quad Core :D
#28En la Universidad de Granada tambien trabajamos mucho con punteros y hacemos gran hincapié en la abstracción. Se empieza con C++. Los de teleco empiezan con Java y bueno... creen que el puntero es lo que mueven por la pantalla.
Intentan que no hagamos mucho uso de la STL y sus maravillosos contenedores y tal, sino que, si necesitamos algo, lo implementemos nosotros. Ahora acabamos de terminar una práctica (un tetris muy chulo) en el que estaba terminalmente prohibido el uso de la STL. Ésto último quizás no venga mucho al cuento, pero quería que supierais que al menos aquí se enseñan un poco las tripas del lenguaje.
#30A mi me parece que el del artículo está un poco "obcecado" con C y C++ a bajo nivel.
Python por ejemplo te da una versatilidad inimaginable, te pueden llamar para que hagas una modificacion al programa que haga mil cosas y en una tarde la tienes lista.
C y C++ (a bajo nivel: punteros, etc...) está bien, a mi modo de ver, para gente que se va a pegar con el hardware.
Y Python es un buen lenguaje para comenzar porque ENAMORA, conozco muchos casos (yo uno de ellos :-D y eso que antes me he pegado con C++ y Java)
Eso sí, antes de dar cualquier lenguaje de programación hay que entender cómo funciona a nivel interno el software con el hardware.
#33Pues yo aprendí con Pascal en el módulo, luego también vi C en la universidad, y he programado en Delphi/Java/PL, etc.
Y la verdad ... los punteros se puede decir que forman parte de la base, pero de ahí a decir que vas a programar peor por no haberlos empleado (o programar mejor por haberlos "visto") hay un trecho muy grande que no me atrevería a cruzar.
Por ejemplo, en ningún lenguaje de programación de los que he utilizado "profesionalmente" he utilizado directamente los punteros (al menos directamente, sí he utilizado componentes que los usan), y la gestión de la memoria casi siempre se limita a hacer un .free de los objetos que has dejado de utilizar (por poner un ejemplo), y no creo que la calidad de un algoritmo que pueda hacer se vea afectada por eso.
Igual conceptualmente tiene un sentido que se vean, pero igual sentido le veo a que se vea la programación orientada a objetos, que es lo que realmente van a "tocar" cuando trabajen.
Y sí es verdad que se está perdiendo el concepto de optimizar las cosas, pero según he visto, eso lo pierde igual la gente que ha visto C que la que no (mandan las prisas, no otra cosa).
Más me preocupa a mi que por ejemplo no se vea NADA de optimización de base de datos (menudas selects hacen algunos iluminados), que hacen más daño que la no-optimización de ciertos algoritmos.
De todas maneras la orientación de la mayoría de lenguajes de programación va más encaminada a hacer programación de alto nivel, no volver al ensamblador. Puede ser importante verlo, pero la verdad es que me parece más por nostalgia que por real aplicación posterior de esos conocimientos ...
Seguro que nosotros nos habremos perdido miles de cosas que generaciones anteriores habían estudiado en la universidad y se estiran los pelos de la misma manera diciendo "pero como pueden NO haber visto X".
#34#27 La verdad es que "el bizco" como tú lo llamas, Fco. Palomo y algunos otros son de lo mejor que he visto en mi vida. Aunque también hay otros que vamos... de puta pena.
Sobre lo de la Esther Gadeschi no lo sé, no he llegado a Base de Datos todavía xD Ya veremos el año que viene.
#35En Industriales de la UPM aprendemos a programar con TurboPascal y si que usamos punteros, pero sé que en Teleco (tb de la UPM) lo primero que dan es Java.
#36A los que dicen lo del ensamblador. Estoy de acuerde, se debe enseñar y se debe saber. vtortola me ha entendido mal, lo que pretendo decir es que al menos se debe "conocer" que existen los punteros, por supuesto que es un "coñazo terrible" trabajar con ellos pero es que de hecho, no se trabaja con ellos en general. Todo lo que he escrito en el artículo se basa en eso: enqueesalgoquesedebeconocerpuesasífuncionaunamáquina.
Sobre lo de que el artículo es "obcecado" en C C++: sí, es evidente, pues ese es su título jajaja.
#38Desde que ví este código para limpiar la pantalla ya no me asusto de nada:
for(int i=0;i<100;i++)
printf("/n"); //La barra es al revés que no me deja ponerla jeje
y eso sin contar las reservas de vectores y matrices 1000dimensionales....
Por alguna razón se llama "Metodología y Tecnología de la Programación" y no "Chapurrea con C"
Propongo que publiquen el código más burro que hayan visto nunca :lol:
#39He hecho teleco en Málaga y no he dado NADA de JAVA, sino C++ (y sí me he hartado de trabajar con punteros)y ensamblador. Pero bueno, si se quiere despretigiar a los telecos, adelante, no es nuevo entre muchos informaticos.
#43#39, aquí no se está desprestigiando a nadie. Cada uno cuenta sus experiencias, y la mía, como alumno de una facultad de Informática y Telecomunicaciones (ETSIIT de la UGR) y compañero de piso de un teleco, es que ellos no tienen ni zorra idea de qué es un puntero. Usan Java y te aseguro que no entienden la mitad de lo que hacen, al menos en primero.
#47Aun no conozco a nadie que haya hecho un modulo de informática o la carrera de informática (cualquiera) que no haya dado C o C++ en profundidad.
Yo he cursado DAI y primero es todo C con punteros y luego en la ingenieria tecnica en Fundamentos de programación 2, Programación orientada a objetos, Programación y estructuras de Datos y en Diseño y Analisis de algoritmos es todo C++ puro ¿Que facultades no dan C++? porque me quitan la mitad del temario
#48Pues yo estoy en la EUI (escuela universitaria de Informatica) de la Politecnica de Madrid y en esta universidad de empieza con PASCAL, luego en segundo mas Pascal. Ensamblador y C y si quieres aumentar los conocimientos como optativas tienes C++ y Java asique por la parte que me toca, segun este articulo saldre muy preparada.
No se en que universidades han hecho el estudio pero en España no.
#50Desde luego... la gente se pone con esas cosas tan modernas como el java que ya es imposible encontrar un buen ingeniero que se las apañe con las tarjetas perforadas, menos mal que yo lo di es segundo de carrera!!!
#54#42 no sé donde has hecho teleco pero yo no me estoy inventando nada. #43, no digo que aquí se esté despretigiando pero si que he oido muchas veces criticas a los telecos por parte de informáticos y bueno, es normal, que no sepamos tanto como los informaticos ya que no hemos hecho esa carrera. Un saludo
#58En teleco Vigo se empieza por ensambladoryPascal. Luego empiezan a aparecer asignaturas en las que se programa en C y C++. Perdón pero de punteros sabemos un rato. Mi primer contacto con Java fue en una asignatura de 5º.
#54 Les molesta que sepamos hacer también su trabajo </talibán>
#59#56 exacto. No tiene sentido despretigiar ("los de teleco creen que un puntero es el puntero del raton JE JE JE"), ya que cada uno debe saber de lo suyo, es justamente lo que queria decir.
#65#9 en la Facultat d'Informàtica de Barcelona, hace 4 o 5 años, las prácticas de Introducción a la Programación (aka P1) se hacían con Java (y la teoría con pseudocódigo)
yo si que me echo las manos a la cabeza. Python esta muchísimo mas fuertemente tipado que C y C++. Precisamente, las guarradas que te deja hacer el compilador de C/C++ con respecto a los tipos es uno de sus mayores peligros para los novatos.
#69Pues yo estudié C en el colegio. Luego en la facultad empezamos con Pascal el primer año y en segundo utilizamos Java para prácticas de algoritmos y C para prácticas de sistemas operativos. También algo de ensamblador, y otros lenguajes (prolog, caml). A partir de tercero ya no te enseñaban muchos lenguajes nuevos, usabas el más adecuado (bueno, en 5º me enseñaron C# para .NET, o aprendías por tu cuenta si querías otros, yo python para una asignatura de lenguajes naturales).
Y yo, como soy una enamorada de los punteros y de lo que puedes hacer con ellos (sobre todo después de una asignatura de diseño de sistemas operativos muy particular), sigo con mi C de toda la vida... aunque creo que voy a tener que empezar a usar C# (porque en lo que hago todo el mundo lo usa, así que si quiero reutilizar sus códigos o para que ellos usen el mío es lo más sensato...)
#70#64#27#34 Agradezcamos que Ge siga dandonos clases, gracias a el no somos un vulgar picateclas. Y si coincido con theom3ga, menos mal que estan ahí.
Yo no podria decir nada bueno de Gadeshi, no se me ocurre, excepto que me debe una disculpa publica.
#71Hola, soy el autor del artículo. Quería agradecer todos los comentarios -los buenos y en especial los malos- que me han hecho ver los errores en los que he incurrido al escribir este artículo y que me dan una buena lección para escribir nuevos artículos mejor. Mis ideas siguen siendo las mismas aunque muchos de vosotros seáis gente que lleva más de 30 años en la profesión, pues gracias a los punteros pude comprender como funcionaba una computadora y un compilador sin mucho más que estudiar.
#73Ya que nadie lo ha mencionado y aunque algunos se echen las manos a la cabeza, un gran porcentaje (diría del orden de la mitad) de los códigos para simulación de ciencia básica que corren en los grandes supercomputadores (BlueGene, MareNostrum, etc), están desarrollados en FORTRAN (en el cual TODO son punteros, pues nada se pasa por referencia). En el fondo es parecido a C, pero con sintaxis más simple: es la forma más sencilla de centrarse en implementar los cálculos sin complicarse la vida haciendo virtuosismos de programación.
Saber cómo están organizadas las cosas en memoria es FUNDAMENTAL y todo el mundo debe tener un conocimiento mínimo de lo que se trae entre manos.
#74#72, en la facultad de informática de barcelona, el paso ha sido al revés, se ha pasado de Java a C++ en las asignaturas de primero. De todas formas, siempre se ha tocado C y ensamblador en la rama de las asignaturas del departamento de arquitectura de computadores (aunque evidentemente no con tanta profundidad como en cualquier asignatura del departamento de lenguajes y sistemas informáticos...).
#77Esto me recuerda al chiste de Dilbert, que era algo asi:
-"En mis tiempos no programabamos con estas tonterias. Lo haciamos a base de 0`s y 1`s. Y a veces ni unos teniamos. Yo escribi un programa de una agenda unicamente a base de 0."
-Usted al menos tenia 1`s. Nosotros teniamos la I mayuscula.
#78#70 Muchos años despues (casi 15), si a alguien le tengo que dar las gracias seria solo al bizco porque entre la Gadeschi, Antoñita y Mr. Oui ibamos apañados. Sin embargo y a pesar de todos ellos, bastante lejos he llegao... en todos los sentidos. XD
#80#13 En EHU (Universidad del Pais Vasco Programación 1 y 2 se da en ADA.
A mi me parece bien empezar con C ya que luego pasar a otros lenguajes es más fácil que al revés.
#81Es mentira que no se utilicen otros lenguajes. En la EUITIO (Oviedo) Java, Prolog, Ensamblador de IA32, PHP, C, C++, C#, PL/SQL... sin hablar de optativas, donde alguna por ejemplo tienes como practica el hacerte tu lenguaje de programacion, asi como otras donde se aprende programacion declarativa... etc etc etc
Vamos, completito... y yo no veo bien empezar con C, la verdad, me parece un acierto empezar con Java, un lenguaje sencillo que te permite aprender los fundamentos y, sobre todo, orientación a objetos. Mucha gente que viene de programación estructurada luego no pilla los objetos bien, y creo que tener clara la POO es, al menos, tan complejo como acordarte de liberar memoria (y si no estais de acuerdo, tendriais que ver las barbaridades que hacen algunos)
#86En Ingeniería Informática de la UAH (Universidad de Alcalá de Henares) se nos enseña Pascal durante todo el primer curso, y en el segundo y tercero te exigen C y Java, pero sin enseñártelos.
En cambio sí te enseñan (en 2º y 3º) ensamblador de 80x86 y DLX, CAML, LISP, Prolog... cómo mola esto de la Universidad XD
Llevo 3 años y estoy en 3º, así que esto es algo actual y no un lejano recuerdo jaja
#89Mantengan vivo el recuerdo de los punteros y canten esta canción al ritmo del porrompompero:
Esto lo haremos con un vector --perdón, puntero, perdón, perdón pun- perdón pun- perdón puntero, perdón, perdón pun- perdón puntero, perdón, perdón pun- perdón perdón!
#91Con el triunfo de los lenguajes de programación afeminados (java, c#, visual basic) con recolección de basura ya no quedan verdaderos hombres que desarrollan en C++ que usan llamados a rutinas en ensamblador.
Y la cosa va para peor: los nuevos programadores no tienen ni idea de que es una lista doblemente enlazada o un grafo en el fondo.. solo usan el TList, el TTree o como se llamen esas APIs afeminadas para manejar estructuras de datos que te lo hacen todo.
#92La pregunta es se quiere aprender a manejar punteros o a resolver problemas , porque son dos cosas diferentes.
Los punteros son un detalle particular del lenguaje que se usa, en realidad no es parte del problema a resolver, sino es complejidad añadida por la herramienta para resolver el problema.
A mi me da igual que se enseñe en Java, en c, en Modula 2(con el que yo aprendi en la UMA), o en Lisp(como en el MIT) lo importante es aprender a resolver problemas. Y de eso es lo que deberia ir un primer curso de programacion.
#94> Explicame tu para que me sirve reimplementar una lista enlazada?
En Java por ejemplo alguien que no ha dado EDA que suele ser la asignatura donde más se pelea uno con estructuras de datos complejas, difícilmente puede entender Collections. Si no sabes lo que es una lista enlazada y cómo se implementa, seguro que te da igual usar ArrayList que LinkedList.
Yo creo que sí es importante haber trabajado con punteros. En Java trabajas con referencias a objetos pero no deja de ser parecido, ¿os suena NullPointer exception?
#98#95 Creo que querías responder a #91 porque yo no he dicho en ningún momento nada de lenguajes afeminados.
Por otro lado, si intentas decir que no interesa en absoluto la diferencia entre LinkedList y ArrayList... espero que no tengas que trabajar en proyectos "serios". Existen grises, ni saberse al dedillo las implementaciones ni ser un ignorante total de EDA. Claro que para entender las implementaciones resulta que es necesario haber jugado con ellas. De lo contrario supongo que también te quejarás de muchas otras cosas que te hicieron estudiar en la facultad.
;)
quedan facultades buenas
Y si, yo he colgado el otro artículo hoy y ya no colgaré más hasta pasado un tiempo asi que emilius podrá estar tranquilo que no molestaré más por ahora jejeje.
Por otra parte enseñar C como primer lenguaje de programación es lo más nefasto que se puede hacer.
#16 De nefasto nada. Al contrario, es mejor empezar por lo hardcore y luego pasar a lenguajes más suaves, que al contrario: Sería muy peligroso acostumbrarse a las std::list y que luego te hagan hacer una lista en C con punteros. Mejor tener una base en condiciones como la que da C a pelo.
Está claro que los lenguajes y entornos de desarrollo han evolucionado notablemente y eso también se nota con el manejo de la memoria dinámica. El desarrollo en Java o .Net es más rápido que en C++ por este motivo, pero los programas en C++ con una gestión de memoria manual pueden ser más rápidos y eficientes. Bajo mi punto de vista, como ingeniero que maneja bien los tres lenguajes, prefiero usar Java o .Net y comprarle al cliente un Quad Core :D
El resto de materias la da gente que no tiene ni puta idea. Sigue "enseñando" Oracle la Gadeshi? XD
Intentan que no hagamos mucho uso de la STL y sus maravillosos contenedores y tal, sino que, si necesitamos algo, lo implementemos nosotros. Ahora acabamos de terminar una práctica (un tetris muy chulo) en el que estaba terminalmente prohibido el uso de la STL. Ésto último quizás no venga mucho al cuento, pero quería que supierais que al menos aquí se enseñan un poco las tripas del lenguaje.
Python por ejemplo te da una versatilidad inimaginable, te pueden llamar para que hagas una modificacion al programa que haga mil cosas y en una tarde la tienes lista.
C y C++ (a bajo nivel: punteros, etc...) está bien, a mi modo de ver, para gente que se va a pegar con el hardware.
Y Python es un buen lenguaje para comenzar porque ENAMORA, conozco muchos casos (yo uno de ellos :-D y eso que antes me he pegado con C++ y Java)
Eso sí, antes de dar cualquier lenguaje de programación hay que entender cómo funciona a nivel interno el software con el hardware.
Y la verdad ... los punteros se puede decir que forman parte de la base, pero de ahí a decir que vas a programar peor por no haberlos empleado (o programar mejor por haberlos "visto") hay un trecho muy grande que no me atrevería a cruzar.
Por ejemplo, en ningún lenguaje de programación de los que he utilizado "profesionalmente" he utilizado directamente los punteros (al menos directamente, sí he utilizado componentes que los usan), y la gestión de la memoria casi siempre se limita a hacer un .free de los objetos que has dejado de utilizar (por poner un ejemplo), y no creo que la calidad de un algoritmo que pueda hacer se vea afectada por eso.
Igual conceptualmente tiene un sentido que se vean, pero igual sentido le veo a que se vea la programación orientada a objetos, que es lo que realmente van a "tocar" cuando trabajen.
Y sí es verdad que se está perdiendo el concepto de optimizar las cosas, pero según he visto, eso lo pierde igual la gente que ha visto C que la que no (mandan las prisas, no otra cosa).
Más me preocupa a mi que por ejemplo no se vea NADA de optimización de base de datos (menudas selects hacen algunos iluminados), que hacen más daño que la no-optimización de ciertos algoritmos.
De todas maneras la orientación de la mayoría de lenguajes de programación va más encaminada a hacer programación de alto nivel, no volver al ensamblador. Puede ser importante verlo, pero la verdad es que me parece más por nostalgia que por real aplicación posterior de esos conocimientos ...
Seguro que nosotros nos habremos perdido miles de cosas que generaciones anteriores habían estudiado en la universidad y se estiran los pelos de la misma manera diciendo "pero como pueden NO haber visto X".
Sobre lo de la Esther Gadeschi no lo sé, no he llegado a Base de Datos todavía xD Ya veremos el año que viene.
Sobre lo de que el artículo es "obcecado" en C C++: sí, es evidente, pues ese es su título jajaja.
for(int i=0;i<100;i++)
printf("/n"); //La barra es al revés que no me deja ponerla jeje
y eso sin contar las reservas de vectores y matrices 1000dimensionales....
Por alguna razón se llama "Metodología y Tecnología de la Programación" y no "Chapurrea con C"
Propongo que publiquen el código más burro que hayan visto nunca :lol:
while(1)
printf(" ");
Limpia mejor xD
Y ensamblador (mips) desde primero.
Te quieres hasta morir xD
Yo he cursado DAI y primero es todo C con punteros y luego en la ingenieria tecnica en Fundamentos de programación 2, Programación orientada a objetos, Programación y estructuras de Datos y en Diseño y Analisis de algoritmos es todo C++ puro ¿Que facultades no dan C++? porque me quitan la mitad del temario
No se en que universidades han hecho el estudio pero en España no.
¿Pasar un puntero por referencia? Será pasar una variable por referencia. Un puntero y una referencia son lo mismo. De hecho, en Java todo son punteros.
#54 Les molesta que sepamos hacer también su trabajo </talibán>
Respecto a Gadeshi, ya os digo yo que sí, aunque ahora es Rioja el que da BD I. Ella sigue con su metodología "Pregunta en el aire"
Oye, que de sufridos UCAdistas semos ¿no? :-P (#34: A ti te he visto por la web de la OSLUCA a menudo, igual hasta te conozco en persona XD)
#TODOS: Perdón por el oftopic :-S
"C y C++ lo tienen todo, [..] y sobre todo, lo que más me gusta: son lenguajes fuertemente tipados."
"Leí un artículo por ahí de alguien que aconsejaba aprender python como primer lenguaje y me echaba las manos a la cabeza. Lo no tipado no me parece elegante, el alumno se creará malos hábitos."
yo si que me echo las manos a la cabeza. Python esta muchísimo mas fuertemente tipado que C y C++. Precisamente, las guarradas que te deja hacer el compilador de C/C++ con respecto a los tipos es uno de sus mayores peligros para los novatos.
Y yo, como soy una enamorada de los punteros y de lo que puedes hacer con ellos (sobre todo después de una asignatura de diseño de sistemas operativos muy particular), sigo con mi C de toda la vida... aunque creo que voy a tener que empezar a usar C# (porque en lo que hago todo el mundo lo usa, así que si quiero reutilizar sus códigos o para que ellos usen el mío es lo más sensato...)
C rocks!!!
Yo no podria decir nada bueno de Gadeshi, no se me ocurre, excepto que me debe una disculpa publica.
Gracias a todos.
Saber cómo están organizadas las cosas en memoria es FUNDAMENTAL y todo el mundo debe tener un conocimiento mínimo de lo que se trae entre manos.
-"En mis tiempos no programabamos con estas tonterias. Lo haciamos a base de 0`s y 1`s. Y a veces ni unos teniamos. Yo escribi un programa de una agenda unicamente a base de 0."
-Usted al menos tenia 1`s. Nosotros teniamos la I mayuscula.
O algo asi.
Edito:
books.google.es/books?id=TsKoTSwET2YCs
A mi me parece bien empezar con C ya que luego pasar a otros lenguajes es más fácil que al revés.
Agur
Vamos, completito... y yo no veo bien empezar con C, la verdad, me parece un acierto empezar con Java, un lenguaje sencillo que te permite aprender los fundamentos y, sobre todo, orientación a objetos. Mucha gente que viene de programación estructurada luego no pilla los objetos bien, y creo que tener clara la POO es, al menos, tan complejo como acordarte de liberar memoria (y si no estais de acuerdo, tendriais que ver las barbaridades que hacen algunos)
Saludos!
void main()
{
printf("Hola mundo");
printf("Este es mi primer programa C");
}
En cambio sí te enseñan (en 2º y 3º) ensamblador de 80x86 y DLX, CAML, LISP, Prolog... cómo mola esto de la Universidad XD
Llevo 3 años y estoy en 3º, así que esto es algo actual y no un lejano recuerdo jaja
Esto lo haremos con un vector --perdón, puntero, perdón, perdón pun- perdón pun- perdón puntero, perdón, perdón pun- perdón puntero, perdón, perdón pun- perdón perdón!
Y la cosa va para peor: los nuevos programadores no tienen ni idea de que es una lista doblemente enlazada o un grafo en el fondo.. solo usan el TList, el TTree o como se llamen esas APIs afeminadas para manejar estructuras de datos que te lo hacen todo.
Los punteros son un detalle particular del lenguaje que se usa, en realidad no es parte del problema a resolver, sino es complejidad añadida por la herramienta para resolver el problema.
A mi me da igual que se enseñe en Java, en c, en Modula 2(con el que yo aprendi en la UMA), o en Lisp(como en el MIT) lo importante es aprender a resolver problemas. Y de eso es lo que deberia ir un primer curso de programacion.
Cualquier otra cosa nimios detalles.
Explicame tu para que me sirve reimplementar una lista enlazada?
DRY (Dont Repeat Yourself)
En Java por ejemplo alguien que no ha dado EDA que suele ser la asignatura donde más se pelea uno con estructuras de datos complejas, difícilmente puede entender Collections. Si no sabes lo que es una lista enlazada y cómo se implementa, seguro que te da igual usar ArrayList que LinkedList.
Yo creo que sí es importante haber trabajado con punteros. En Java trabajas con referencias a objetos pero no deja de ser parecido, ¿os suena NullPointer exception?
Por otro lado, si intentas decir que no interesa en absoluto la diferencia entre LinkedList y ArrayList... espero que no tengas que trabajar en proyectos "serios". Existen grises, ni saberse al dedillo las implementaciones ni ser un ignorante total de EDA. Claro que para entender las implementaciones resulta que es necesario haber jugado con ellas. De lo contrario supongo que también te quejarás de muchas otras cosas que te hicieron estudiar en la facultad.