Historias de un profe particular de programación (o: Apañaos vamos con los ciclos)

Brurbujista

Madmaxista
Desde
18 May 2010
Mensajes
3
Reputación
0
¿Que tiene que ver el hecho de que sea albañil? si no te gusta lo que ha dicho de querida madre, a lo mejor a mí tampoco me ha gustado, pero no conviene medir las aptitudes de la gente por su condición social. a lo mejor ese albañil sabe que si se programa algo más allá del hola mundo siempre se está expuesto a acceder a segmentos de memoria no reservados ya que todo programador puede levantarse con el día espeso, ¿como enseñas a evitar segmentation fault? chicos int x[5] significa que se reserva espacio para 5 enteros que abarcan desde x[0] hasta x[4], acceder a x[5] puede significar acceder a memoria reservada por otro programa lo que ocasionaría que bla bla bla ... , ale, ya está explicado, que más vas a contar? a lo mejor en vez de enseñarles a evitar un segfault es más útil enseñarles a usar un buen debugger ¿no?
 

brunorro

Madmaxista
Desde
13 Dic 2006
Mensajes
4.518
Reputación
4.740
¿Que tiene que ver el hecho de que sea albañil? si no te gusta lo que ha dicho de querida madre, a lo mejor a mí tampoco me ha gustado, pero no conviene medir las aptitudes de la gente por su condición social. a lo mejor ese albañil sabe que si se programa algo más allá del hola mundo siempre se está expuesto a acceder a segmentos de memoria no reservados ya que todo programador puede levantarse con el día espeso, ¿como enseñas a evitar segmentation fault? chicos int x[5] significa que se reserva espacio para 5 enteros que abarcan desde x[0] hasta x[4], acceder a x[5] puede significar acceder a memoria reservada por otro programa lo que ocasionaría que bla bla bla ... , ale, ya está explicado, que más vas a contar? a lo mejor en vez de enseñarles a evitar un segfault es más útil enseñarles a usar un buen debugger ¿no?
Por lo de que sea albañil y sepa programar mejor que yo no lo niego (de hecho soy un zote), pero lo que no me parece lógico es que diga que para programar haya que leerse las especificaciones de C hechas por ISO. Es como si te dicen que para hacer HTML tienes que leerte el draft de la W3C... Y después resulta ser que cosas que te iban en explorer no te van en firefox o similares. Eres dependiente de la implementación del compilador (intérprete en el caso de HTML). Y si no sólo hace falta ver lo que se ha hecho con el estándar SQL, que todo el mundo lo ha deformado como ha querido (MySQL u oracle dónde tienen los Asserts?). Que se puede ser purista, pero no tanto.

Y sobre lo de aprender a usar un debugger... Por poner un símil es como la asistencia del seguro de coche. Para cambiar una rueda no te sale a cuenta llamar, verdad que no ?? Pues ese es el asunto: si has modificado una función y te da un fermoso segmentation fault porque no has contado un posible error en un caso, te sale más a cuenta poner tres chivatos mal contados, recompilar y volver a ejecutar que pasar por el debugger, por lo menos esa es mi experiencia.
 

erpayo

Madmaxista
Desde
22 Ene 2007
Mensajes
8.558
Reputación
7.350
Por lo de que sea albañil y sepa programar mejor que yo no lo niego (de hecho soy un zote), pero lo que no me parece lógico es que diga que para programar haya que leerse las especificaciones de C hechas por ISO. Es como si te dicen que para hacer HTML tienes que leerte el draft de la W3C... Y después resulta ser que cosas que te iban en explorer no te van en firefox o similares. Eres dependiente de la implementación del compilador (intérprete en el caso de HTML). Y si no sólo hace falta ver lo que se ha hecho con el estándar SQL, que todo el mundo lo ha deformado como ha querido (MySQL u oracle dónde tienen los Asserts?). Que se puede ser purista, pero no tanto.

Y sobre lo de aprender a usar un debugger... Por poner un símil es como la asistencia del seguro de coche. Para cambiar una rueda no te sale a cuenta llamar, verdad que no ?? Pues ese es el asunto: si has modificado una función y te da un fermoso segmentation fault porque no has contado un posible error en un caso, te sale más a cuenta poner tres chivatos mal contados, recompilar y volver a ejecutar que pasar por el debugger, por lo menos esa es mi experiencia.
Lo siento, pero no puedo estar más en desacuerdo. La información que puedes obtener con un depurador no te la da ningún chivato y además te evitas tener que ir repasando cada poco el código para limpiar trazas del tipo "dentro del else" o "iteración 1", "iteración 2", etc...
 

brunorro

Madmaxista
Desde
13 Dic 2006
Mensajes
4.518
Reputación
4.740
Lo siento, pero no puedo estar más en desacuerdo. La información que puedes obtener con un depurador no te la da ningún chivato y además te evitas tener que ir repasando cada poco el código para limpiar trazas del tipo "dentro del else" o "iteración 1", "iteración 2", etc...
A ver, estoy de acuerdo que meterte en cosas serias (a la que tengas una estructura de datos dinámica, vaya) sin un debugger es un suicidio. Pero en una práctica sin nada serio pierdes más tiempo buscando dónde poner los breakpoints que metiendo tres chivatos mal contados. Yo acababa metiendo chivatos para saber dónde podía estar el error, y si no lo sacaba, debugger al canto sabiendo dónde meter breakpoint.
 

erpayo

Madmaxista
Desde
22 Ene 2007
Mensajes
8.558
Reputación
7.350
A ver, estoy de acuerdo que meterte en cosas serias (a la que tengas una estructura de datos dinámica, vaya) sin un debugger es un suicidio. Pero en una práctica sin nada serio pierdes más tiempo buscando dónde poner los breakpoints que metiendo tres chivatos mal contados. Yo acababa metiendo chivatos para saber dónde podía estar el error, y si no lo sacaba, debugger al canto sabiendo dónde meter breakpoint.
Evidentemente la utilidad práctica del depurador en una práctica sencilla es limtada, pero es bueno pillar costumbre...

Anda que no me he reído veces que alguien enseñando algo a un cliente va y le salta un alert del tipo "estoy hasta los bemoles de este error" :D
 

rotovator

Madmaxista
Desde
9 Mar 2006
Mensajes
4.418
Reputación
3.142
Lugar
Benifotrem
Estáis teniendo una interesante discusión, pero no os olvídeis de que os estáis desviando. En un ciclo de informática, en dos años, a unos chavales que sólo piensan en jugar al facebook y el fin de semana pintarse la cara (ellas) y trincar (ellos), no se les puede hacer aprender de todo: programar (con todo lo que conlleva), aprender el toolkit o bibliotecas, las bases de datos, y, para colmo, el debugger.

Hay alumnos muy interesados que sí que lo aprenderían todo y más. Pero el resto hace imposible llegar a todos.
 

Bactiman

El eterno aspirante a un pottoka
Desde
4 Jul 2007
Mensajes
3.965
Reputación
1.669
Me parece que el único que programa en Ansi C por estos lares soy yo, y soy de profesión albañil
No voy a entrar a discutir con nadie pero.......... Menudo Nivel veo.

Si alguien tiene ganas de discutir pierde el tiempo, no voy a decir nada más

Para programar en Ansi C
WG14/N1256 Committee Draft — Septermber 7, 2007 ISO/IEC 9899:TC3
Para todo lo demás Master Card
No había leido la entrada.

Yo también he programado en Ansi C y además te lo subo, bajo un entorno UNIX.

Lo que tiene haber librado tantas batallas, pocas cosas quedan por tocar ^^

Saludos,
 

erpayo

Madmaxista
Desde
22 Ene 2007
Mensajes
8.558
Reputación
7.350
Estáis teniendo una interesante discusión, pero no os olvídeis de que os estáis desviando. En un ciclo de informática, en dos años, a unos chavales que sólo piensan en jugar al facebook y el fin de semana pintarse la cara (ellas) y trincar (ellos), no se les puede hacer aprender de todo: programar (con todo lo que conlleva), aprender el toolkit o bibliotecas, las bases de datos, y, para colmo, el debugger.

Hay alumnos muy interesados que sí que lo aprenderían todo y más. Pero el resto hace imposible llegar a todos.
Por eso siendo todavía muy joven me juré solemnemente a mí mismo que jamás me dedicaría a la enseñanza aunque me estuviera muriendo de hambre
 

brunorro

Madmaxista
Desde
13 Dic 2006
Mensajes
4.518
Reputación
4.740
Estáis teniendo una interesante discusión, pero no os olvídeis de que os estáis desviando. En un ciclo de informática, en dos años, a unos chavales que sólo piensan en jugar al facebook y el fin de semana pintarse la cara (ellas) y trincar (ellos), no se les puede hacer aprender de todo: programar (con todo lo que conlleva), aprender el toolkit o bibliotecas, las bases de datos, y, para colmo, el debugger.

Hay alumnos muy interesados que sí que lo aprenderían todo y más. Pero el resto hace imposible llegar a todos.
Qué gran verdad. Mi padre y mi madre han dedicado a la enseñanza más de 30 años y lo más a lo que aspiraban estos últimos años era a que los que valían pudiesen aprender algo.

España, país dónde desde joven al que no tiene ganas de aprender se le aplaude y al que las tiene se le convence de lo contrario... De los 35 de mi clase de 8º de EGB sólo nos sacamos el graduado 15. Me pregunto cómo andará ahora la cosa.
 

Brurbujista

Madmaxista
Desde
18 May 2010
Mensajes
3
Reputación
0
Brunorro, me imagino que el de la foto eres tú depurando con chivatos ¿no? :p en serio, si ya es poco aconsejable monitorizar un programa usando printf's imaginate hacerlo en un entorno con errores, no es cuestión de purismo, es cuestión de utilizar las herramientas adecuadas, depurar como es debido no lleva más tiempo que hacerlo con chivatos si dejas un make preparado

Makefile need debug option

Un saludo
 

chemax

Madmaxista
Desde
20 Abr 2008
Mensajes
751
Reputación
212
Depurador siempre. es vital aconstumbrarse a esta herramienta se tenga o no se tengan problemas.

Otro amigo inseparable y muy recomendable es Valgrind Home

Cuidado con make, te puede volver loco por mucho que uses la opción -g para depurar si no se han actualizado los ".o"
make -B es tu amigo en cada cambio que hagas en las fuentes antes de compilar,
 
Última edición:

Brurbujista

Madmaxista
Desde
18 May 2010
Mensajes
3
Reputación
0
Depurador siempre. es vital aconstumbrarse a esta herramienta se tenga o no se tengan problemas.

Otro amigo inseparable y muy recomendable es Valgrind Home

Cuidado con make, te puede volver loco por mucho que uses la opción -g para depurar si no se han actualizado los ".o"
make -B es tu amigo en cada cambio que hagas en las fuentes antes de compilar,
Efectivamente, muy importante hacer rebuild antes si no se compila desde un principio con la opción -g, otra solución un poco más prossssfesional (aunque para el caso es lo mismo que comenta chemax) sería invocar make con la opción debug y hacer clean desde el propio make, algo parecido a:

make debug

...

CFLAGS = -Wall -pedantic

all: miprograma

debug: CFLAGS += -g
debug: clean
debug: miprograma

miprograma: $(OBJECTS)
$(CC) $(OBJECTS) -o miprograma

clean:
rm -f *.o

...

Creo que ahora si nos estamos saliendo bastante del tema, pero soy de la opinión de que no se debería meter a nadie a programar en un toolkit o db sin antes saber usar make, splint, valgrind, y un debugger ... enseñar gtk o qt es enseñar a un alto porcentaje de alumnos algo que no van a usar nunca, mientras que los complementos mencionados son de uso obligatorio en cualquier programa medio serio.
 

chemax

Madmaxista
Desde
20 Abr 2008
Mensajes
751
Reputación
212
Efectivamente, muy importante hacer rebuild antes si no se compila desde un principio con la opción -g, otra solución un poco más prossssfesional (aunque para el caso es lo mismo que comenta chemax) sería invocar make con la opción debug y hacer clean desde el propio make, algo parecido a:

make debug

...

CFLAGS = -Wall -pedantic

all: miprograma

debug: CFLAGS += -g
debug: clean
debug: miprograma

miprograma: $(OBJECTS)
$(CC) $(OBJECTS) -o miprograma

clean:
rm -f *.o

...

Creo que ahora si nos estamos saliendo bastante del tema, pero soy de la opinión de que no se debería meter a nadie a programar en un toolkit o db sin antes saber usar make, splint, valgrind, y un debugger ... enseñar gtk o qt es enseñar a un alto porcentaje de alumnos algo que no van a usar nunca, mientras que los complementos mencionados son de uso obligatorio en cualquier programa medio serio.
Efectivamente, cierto lo que comentas, ANSI C puro y duro en un editor simple es la base de todo, luego lo que se quiera añadir.

Una cosa muy importante que se deja un poco de lado es el diseño, C sólo da acceso directo a memoria a traves de punteros y unas pocas librerias, ¿Que se puede hacer con tan poca cosa ? todo. con la condición de conocer las reglas de lo que quieres hacer

En mi caso llevo 3 meses leyendo y recogiendo información (No código) de "como se hace un servidor sql" a través de documentación académica de universidades, el código no es complejo cuando conoces las "reglas del negocio" sabes que necesidades tienes
y conoces tus propias limitaciones. creo que esta parte es la mas interesante y en la que menos se enfatiza en la enseñanza
 

robergarc

Madmaxista
Desde
8 Ene 2008
Mensajes
5.092
Reputación
7.046
No sé, yo soy lego en todo esto y esta jerga en la que habláis me suena a chino, pero me parece que al tema al cual brunorro se quería referir es la educación y no la programación.

La suya era, me da, una reflexión docente, no informática.

Digo esto porque este hilo podría ser muy interesante y es ininteligible.

Pero, vaya, que yo no he dicho nada; hablad de lo que os apetezca.
 
Última edición:

Filicuchino

Madmaxista
Desde
1 Feb 2007
Mensajes
729
Reputación
90
¿Por qué empiezan por lo chungo en informática?

Para mí lo primero sería enseñar Java o C# con un IDE decentito.
Primero que sepan la algoritmia, el tema de objetos y demás. Se le da al F5 y a volar. Que falla? al F10 para el debugger. Ni preocuparse de makefiles, headers ni ná. Son como coches automáticos, aunque quieras no los calas, perfectos para aprender (y para usar en bastantes cosas, la verdad sea dicha).

Ya luego hay tiempo para cabrearse con los puñeteros punteros, makefiles y otras milongas de los lenguajes unmanaged.

Para mí C/C++ así a palo seco está enfocado a programación de la chunga : programas que buscan rendimiento (y por ende con pocas capas de abstracción), que buscan trabajar a nivel de hardware (kernel, drivers), o que buscan apurar los recursos disponibles. Pero eso sí, a costa de gastar más tiempo de desarrollo y ser más cuidadoso.