Primero que nada, ¿para qué diablos aprendemos un
lenguaje de programación?
Obviamente, es que nos gusta resolver cositas con la computadora, y disfrutamos ver que una máquina hace automáticamente algo que a nosotros nos llevaría mucho esfuerzo, sudor y lágrimas.
En el fondo, las computadoras son máquinas que nos alivian una buena parte del trabajo intelectual.
No sólo eso, sino que lo hacen con rapidez, a una velocidad de cálculo que los seres humanos no podemos alcanzar.
Esto se vuelve importante porque no sólo ahorramos
esfuerzo, sino también
tiempo.
En cualquier caso, se ahorra
dinero.
Pensemos que el esfuerzo físico o mental nos obliga a ingerir nutrientes, que nos insumen un cierto costo.
Si además podemos producir más resultados en menos tiempo, esto se traduce en un aumento en las ganancias que provienen de nuestro trabajo.
Una ventaja adicional que se gana con las máquinas es que ellas pueden, además, intercambiar información entre sí, de un modo eficiente, y también de bajo costo. Y también es cómodo.
No podemos pasarle a un amigo una fotografía por
teléfono, sólo podemos describírsela, y más o menos.
Un conjunto complejo de datos tampoco es fácil de pasar por
teléfono o telégrafo.Hay millones de transacciones y actos burocráticos que tienen la oportunidad, hoy en día, de automatizarse y terminarse rápidamente gracias a las
computadoras.
Luego de toda esta propaganda pro-computadoras, es hora de que hagamos algo de publicidad en contra.
Las computadoras no son mágicas. Son
máquinas pasivas que requieren que un ser con voluntad le dé órdenes para realizar una tarea. También insumen un costo energético: electricidad (aunque el consumo es bajo comparado con otros electrodomésticos).
Para lograr que la máquina haga algo, tenemos que aceptar el diseño dado por el fabricante, entender cómo trabaja la máquina internamente, y "hacerle tragar" por algún lado una
lista de instrucciones a realizar, a fin de que dé el resultado de un cálculo o una búsqueda de información, o imprima un gráfico, etc.
En la
prehistoria, esto se hacía con "tarjetas perforadas", que eran unos cartones rectangulares en los que se practicaban agujeros, donde se ponían instrucciones de máquina en código binario. Había un dispositivo de lectura de tarjetas que le pasaba los datos a la máquina, la máquina hacía sus pases mágicos, y después el resultado se obtenía, quién sabe dónde (lamparitas iluminadas, otra tarjeta, datos impresos, una cinta de audio
).
A medida que las cosas fueron evolucionando, se logró que una persona tenga en su escritorio un dispositivo con una pantalla cómoda de visualizar, un teclado fácil de usar al estilo de una máquina de escribir, y toda una circuitería miniaturizada, de última tecnología, escondida dentro de una carcaza de la que nadie tiene que preocuparse.
Lo único que hay que hacer ahora es
escribir un programa en un lenguaje (elijan el
C), traducirlo a lenguaje de máquina con un
compilador (como el
GCC), generando un
programa ejecutable (un archivo de extensión
.EXE bajo Windows), que hace lo que queremos que haga: resolver un problemita computacional de algún tipo.
Ahora,
para lograr que la máquina haga algo, tenemos que "estudiar".
Estudiamos las reglas de un
lenguaje de programación (el
C), para ver cómo se escribe un programa (de alto nivel),
y de paso nos damos cuenta de
las herramientas que ese programa nos provee (tipos de datos, manejo de archivos, acceso a memoria, control de flujo de la ejecución, soporte multihilo, librerías gráficas, etc.).
En la medida que el
lenguaje nos ofrece más
herramientas de control sobre nuestra máquina, más y mejores cosas podemos hacer.
Entonces para lograr que nuestros programas hagan lo que deseamos, tenemos que estudiar bien el
lenguaje y sus
librerías.
Si no existe una librería que haga lo que necesitamos, no queda más remedio que "inventarla".
Somos nosotros los que tendremos que
diseñar una librería que resuelva una serie de tareas comunes.
Pero eso no siempre es necesario.Es muy posible que si queremos desarrollar tareas "lindas y divertidas", alguien más ya ha diseñado librerías para resolver ese tipo de cosas.
Así que hay que averiguar quién hizo esas librerías.
Uno podría buscar un catálogo de programadores de todo el mundo, e ir preguntando de a uno quién de ellos hizo una librería que, por ejemplo, permita
hacer figuras geométricas en la pantalla.
Más ágil sería la búsqueda si a la gente del mundillo de la programación le preguntamos si alguno de ellos "conoce a alguien" que haya hecho o tenga a mano la librería que buscamos.
Si hallamos una persona que tenga esa librería, puede que nos regale una copia, o puede que nos la venda.
A veces quien la vende es el mismo autor (y está en su derecho hacerlo), o alguien autorizado por el autor, pero a veces no, y quien nos la vende es un tipo que no tiene relación comercial con el autor. Eso viola los
derechos de propiedad intelectual.
También viola los derechos de autor el conseguir una copia gratuita, de una librería que no tiene autorización de uso comercial, y luego utilizarla para generar un programa con fines comerciales.
O sea que, a pesar de que exista una librería que nos soluciona el problema, resulta que nuestro problema no se puede solucionar, porque la librería
no puede usarse, por cuestiones legales.
Estos impedimentos no son ni de
hardware ni de
software, obviamente.
Ya se trata de cuestiones de tipo "
social", y así vemos como el factor "
social" juega un papel, en este caso negativo o represor, en el desarrollo de una aplicación para la computadora.
Por otra parte, si conseguirmos una copia pirata de una librería, y la usamos en forma privada sólo con fines de aprendizaje o experimentación, entonces es muy probable que no tengamos problemas de tipo legal.
Así, en ese caso, estaríamos resolviendo nuestro problema computacional, aunque no podríamos hacer público nuestro programa así realizado.
Es como resolver la
conjetura de Fermat, y no poder decírselo a nadie.
Sirve para decir que la solución existe, pero no se puede compartir dicha solución.
___________________________
Todo esto nos hace plantear de nuevo la
dimensión "social" de la informática.
¿Para quién realizamos el programa?Por lo general, si sólo lo realizamos para nosotros mismos, tenemos más libertades, porque en nuestra computadora mandamos nosotros, y podemos hacer y deshacer a nuestro antojo.
Cuando uno hace un programa para "alguien más", ya interesa el factor "social" del asunto, y entonces hay que "lidiar con las estupideces del género humano", como por ejemplo, las leyes de derecho de autor.
Así que no es fácil decir si un problema informático está o no resuelto, según cuál haya sido la
motivación social que generó el problema.
Ahora bien. Con las mismas restricciones sociales que antes, podemos entrar en ellas al menos en forma más eficiente.
No vamos a preguntarle al amigo del amigo de un amigo, a ver si nos facilita una librería que nos falta.
Mejor, ya que estamos en la era de
Internet, la
buscamos en la red.
Sin embargo, esta opción no reemplaza a la opción de preguntarle al amigo del amigo de un amigo.
Son posibilidades complementarias.
Así, ponemos la dirección de un
buscador (
Google) en nuestro
navegador (
Firefox), y allí ponemos
"librería para hacer figuras geométricas en C", clic en
"Buscar".
Nos saldrá una lista enorme de enlaces con ese tema.
Lo que hay que hacer luego es entrar en varios de esos enlaces, y ver si realmente tienen lo que buscamos.
Si no, habrá que volver a la página de búsqueda, y probar con otro enlace, y así hasta hallar lo que queremos.
Ahora vemos que, si bien no tenemos que perder precioso
tiempo diseñando nosotros mismos
programando una "librería para hacer figuras geométricas en C",
no obstante igual
perdemos tiempo realizando una búsqueda, que nos puede llevar horas si lo que buscamos está medio "escondido" en Internet.
incluso si encontramos una librería con los requisitos pedidos, tenemos que
renegar con la página de descarga, que a veces tiene virus, troyanos, o bien opciones de descarga inentendibles o confusas, esquivar la publicidad, y prestar atención a que hay muchos botones que dicen "Descargar", bien grandotes, ¡pero que no descargan el software que queremos! No, esos son botones engañosos que esconden publicidad o directamente virus.
Hasta que por fin damos con el "verdadero" botón de
descarga, que probablemente sea "pequeño" y "escondido" quién sabe en qué parte de la página, y la descarga comienza.
Tras descargar la librería, tenemos que investigar un poco
cómo se instala, y cómo se hace para que
encaje con nuestras librerías (del lenguaje
C) que tenemos previamente instaladas.
Esto puede dar un terrible dolor de cabeza porque, digamos la verdad,
nunca se entiende qué diablos hay que hacer ni para qué.
Hasta que finalmente uno termina
adivinando, si tiene suerte, cómo se hace para que la descarga encaje con nuestro sistema
en forma armoniosa.
Luego hay que
aprender a usar la librería, y también hay que
hacer pruebas, hasta que finalmente todo funcione más o menos bien.
Pero puede ocurrir que los resultados obtenidos con esa librería que tanto nos costó bajar, nos sean
decepcionantes.
Entonces tenemos que
desinstalarla, con mucho cuidado para
no hacer daño a la configuración del sistema que teníamos antes.
Si hacemos esto mal, que es lo más probable
, no habrá más remedio que
desinstalar todo, y
volver a instalar todo desde cero.
Todo esto es una pérdida de tiempo, obviamente.Pero a veces también es inevitable.
Y luego se repite el ciclo de búsqueda de una "librería para hacer figuras geométricas en C", y así probamos, instalamos y desinstalamos cosas extrañas, hasta que hallamos algo que nos conforme.
Puede pasar que no encontremos ninguna librería que nos satisfaga del todo, o que nos guste pero que ande mal, o que ande bien, pero que no sabemos configurarla, etc.
Todas estas molestias son el costado negativo del desarrollo informático de estos tiempos, y a los que a nadie parece importarle.
Algunas razones para no estar satisfechos con una librería pueden ser que necesiten características que consideremos indeseables.
Por ejemplo, hay programas o librerías que tienen una licencia de "prueba", o sea que son gratuitas por un tiempo, y
luego hay que pagar para usarlas.
Si no tenemos intención de gastar dinero en estas cosas, es una pérdida de tiempo descargarlas para experimentar con ellas.
Puede darse el caso de programas o librerías que sean
específicos de una plataforma, por ejemplo Windows.
Esto puede importarnos o no, pero si esto supone además que tenemos que aprendernos toda una filosofía de trabajo "bajo Windows" (las famosas
API), eso ya es otra historia.
Debemos tomar la decisión de invertir o no tiempo en eso.Significaría aprender algo nuevo, para un solo sistema operativo, y es algo que
cuesta tiempo.
Si la librería que nos descargamos es gratuita, hermosa, satisface nuestros deseos, es genérica (sirve para casi cualquier sistema operativo: Windows, Linux, etc.), y es más o menos fácil de aprender, estaríamos dispuestos a descargarla y utilizarla.
Aquí surgen otros inconvenientes.Puede que la librería esté hecha con tanto amor, que se volvió
demasiado completa y sofisticada.
Entonces nos será
costoso aprenderla, e innecesario, ya que si sólo queremos hacer cosas sencillas, no sirve de nada aprender toda una filosofía de trabajo asociada a esa librería.
Además, puede ser toda una odisea
encontrar manuales adecuados o claros, o completos, de una librería, incluso de una famosa.
_________________________________________
Otro obstáculo es el idioma.Puede que en castellano encontremos muy poco material asociado a nuestra búsqueda.
Lo recomendable es poner frases en
inglés en el buscador (
Google), tales como "geometrical figures library in C".
A veces una tal búsqueda puede ser infructuosa si nuestra traducción no es afortunada.
Cambiando la palabra "figures" por "shapes", puede que tengamos muchas más posibilidades de éxito.
A continuación, habrá que renegar con las instrucciones en inglés, un idioma que cada vez entiendo menos, porque me gusta más el idioma que me enseñó mi mamá.
Por razones absolutamente misteriosas de "frikilandia", las
librerías que uno necesita bajar no son tan simples de instalar. No basta con apretar un botón que diga "instalar" y listo.
A veces hay "muchos paquetitos" repartidos por ahí, distintos, independientes, pero todos necesarios y relacionados entre sí.
Es muy posible que uno no entienda para qué diablos sirve cada bendito paquetito, ni si le va a hacer falta alguna vez en la vida o no.
Las instrucciones de instalación no son naturales, intuitivas, sino que hay que navegar por la página web, leyendo y releyendo instrucciones, para ver cómo se instala algo, y que, tras instalarlo, lo más probable es que esté todo mal, no funcione nada, y hay que formatear el disco rígido debido al desastre que hicimos instalando y probando cosas nuevas.
Es por esa razón que yo, en este curso de C, hago lo posible para que no haya que instalar prácticamente nada, salvo al principio del curso, y nada más. Y en lo posible también, no cambiar las opciones originales de configuración. Porque cambiar algo en un sistema que usamos para compilar programas en
C, es siempre candidato al desastre.
La consecuencia de todo esto, no es ya que nuestros programas no compilan, no funcionan, o que no podemos hacer exactamente lo que deseamos, sino que
ni siquiera nos funciona el entorno de programación, y a veces el descalabro llega hasta las entrañas del sistema operativo (según qué cosa hayamos instalado, o bien si se nos metieros virus, gusanos, troyanos, etc.).
El resultado es siempre el mismo:
NO FUNCIONA.
Y el objetivo es que las cosas:
FUNCIONEN.
Todo tiene que funcionar, y bien.En la
prehistoria la dificultad era lo primitivo de la tecnología de las computadoras,
luego la dificultad estaba en nuestros conocimientos adquiridos de programación,
después estaban en la disponibilidad o no de ciertas librerías o programas,
y ahora la dificultad está en lo intrincado que resulta instalar armoniosamente un componente a nuestro entorno de programación.
En cualquier caso, se invierte tiempo y esfuerzo.
LAS DIFICULTADES NO DESAPARECEN, SÓLO SE TRANSFORMAN.________________________________
Sin embargo, no todo está perdido, y es ahora cuando recuperamos el
factor "social" de la informática.
Si vemos que nosotros solos no podemos con un problema, para eso está el resto del mundo para que nos ayude.
Aunque la estructura del mundo es capitalista y mercantilista, es muy común encontrar personas que ofrecen ayuda gratuitamente, o que regalan soluciones.
Esto se puede hallar en Organizaciones Sin Fines de Lucro (
ONGs), Institutos de Enseñanza (gratuitos), países donde el ingreso a la Universidad es gratuito, y comunidades virtuales en Internet.
En el caso de
Internet, existieron en un principio las "
listas de correo", que aún hoy están muy activas, pero que casi nadie sabe que existen. Son famosas en el mundillo de los informáticos, o de alguna especialidad técnica en particular.
En las
listas de correo la gente escribe usando un conjunto reducido de caracteres:
ASCII, y hasta es posible que ni siquiera se permitan
subrayados ni resaltados en
negrita o
cursiva, como tanto me gusta usar a mí.
Esto es lógico ya que los sistemas que gestionan
correos electrónicos puede que den resultados anómalos o desagradables, si es que hay algún error o incompatibilidad. Para evitar toda clase de posibles problemas, directamente te prohíben usar características especiales (
HTML) en el correo, y sólo te dejan enviar
texto plano (sin formato).
A veces puede pasar que enviaste un correo sin formato, pero te lo rebotan igual.
¿Por qué ocurre esto? Ocurre porque en realidad los servicios de email modernos ponen de todos modos un "formato básico". No basta conque nosotros no usemos ninguna característica
HTML, sino que
hay elegir específicamente una opción de correo que diga algo como "
texto plano". De esa manera, se envía sólo texto (como un archivo
TXT).
En eso hay un contratiempo, porque la tecnología de la información avanza para hacernos la vida más agradable, nos dicen que el formato
HTML es maravilloso y podemos enviar correos electrónicos bellamente formateados, con fotos y videos, etc., pero resulta que hay gente que no nos deja utilizarlos:
dicen que no, que hay que volver a la prehistoria.
Entonces tenemos que "sintonizar" con esa mentalidad extraña, y tratar de expresarnos en forma escueta y clara, usando sólo
texto plano, incluso en el caso que necesitamos explicar un asunto complejo.
Existen
listas de correo que discuten temas de matemática, por ejemplo, escribiendo exclusivamente en
LaTeX, tal como hacemos nosotros, pero con la diferencia de que ellos nunca pueden ver la formulita en forma agradable como hacemos en este foro.
Y discuten temas complejos de matemática así. Es bastante feo, por no decir otras cosas. Pero es algo que existe.
La necesidad de un
formato que sea "universal", que no esté sujeto a interpretaciones erróneas de los navegadores, o que sea compatible con "todos" los navegadores y sistemas operativos del mundo, lleva a que la gente tome decisiones extremas como el de comunicarse con correos en "
texto plano".
Me cuesta entender que al día de la fecha haya gente que no tenga un navegador de última generación.
Después de todo, son gratuitos.
En realidad,
los correos en texto plano tienen la ventaja de que no saturan los servidores de ciertas páginas web que reciben mucha correspondencia, porque
casi no ocupan memoria, como sí lo harían en caso de que aceptaran elementos multimedia avanzados.
__________________________
Una evolución a las
listas de correo lo son, por supuesto, los
foros de internet, como éste en el que estamos.
La manera de debatir temas en un
foro es más cómoda y más organizada.
Si además el
foro admite capacidades gráficas o multimedia de diversa índole, la comunicación de ideas e información se hace más agradable, fluida y natural.
Si no nos animamos a meternos en el mundillo de las
listas de correo, podemos hacer el intento en los
foros de internet.
Aquí podemos tener distintos tipos de experiencias.
Habrá foros donde se contestan las preguntas de un modo amable, pero escueto y seco.
Hay otros que contestan puras estupideces e ironías, y otros donde se responde con información incompleta, y encima con soberbia, como si el culpable fuera uno.
Si yo pregunto por qué no puedo factorizar el polinomio \( x^2+1 \), puede que me expliquen con cordura diciéndome que "
eso depende del dominio en que considere definido el polinomio, siendo no factorizable en los reales, pero que sí lo es en los complejos".
Cuando me contestan así, me ponen un poco a prueba para ver qué es realmente lo que yo quiero hacer, o cuál es el grado de profundidad que quiero darle a la pregunta.
Entonces ya no es lo mismo que poner una
consulta en Google y
esperar la respuesta.
Ahora
no queda más remedio que interactuar con las personas que están del otro lado de la pantalla, iniciar una
conversación con seres humanos de verdad, y entonces volver a preguntar, hasta que la duda queda resuelta completamente.
Puede haber foros o personas que contesten así: "
Acá, el problema es que vos nunca estudiaste números complejos, y por eso no sabés cómo se hace esto".
Con tonos parecidos se puede encontrar uno en algunos foros, sobretodo si son de una temática más general o más mundana.
Una respuesta así puede desanimarnos a usar los
foros de internet.
Incluso el maltrato o las discusiones con otras personas son algo que es probable que ocurra alguna vez.
Los malentendidos están a la orden del día, por diversas razones, y la gente y sus defectos también.
El costado
social del asunto tiene este aspecto negativo.
Entonces, lo que era un original problema de computación, se convierte ahora en un
drama psicosocial, que nos hace
perder tiempo, discutiendo con personas algo idiotas por un lado, o tratando de entender a personas demasiado técnicas por el otro lado.
Esta interacción también lleva tiempo.Uno tiene que tener
paciencia, y seguir en la búsqueda de foros y personas que sean amables.
No tiene sentido desilusionarse o deprimirse por las malas experiencias con la gente en Internet.Así como en el mundo hay unas 7000 millones de personas, constituyendo una "fauna" de lo más prolífica y exótica, lo mismo pasa con Internet. El mundo entero está ahí adentro, y hay mucha gente desagradable con la que tendremos que lidiar.
La ventaja de Internet es que la pantalla de la computadora nos protege.
Si tenemos que lidiar con un idiota, podemos insultarlo a nuestro antojo, o bien simplemente podemos elegir ignorarlo.
En general ignorar a la gente problemática o que piensa distinto que nosotros, en Internet, es la alternativa más "eficiente".No puede uno perder demasiado tiempo en discusiones personales o filosóficas, porque tenemos que recordar que tenemos un problema que resolver, y que
todo consume tiempo.
O sea que no sólo tenemos que saber "navegar" en la
dimensión "social" de Internet, sino que también tenemos que
resistir tentaciones propias de nuestra propia psicología.
Entre esas tentaciones están los videos graciosos de
Youtube, las películas gratuitas de
SeriesYonkis, las noticias escandalosas de la farándula y el deporte, y así por el estilo.
El
entretenimiento es una
pérdida de tiempo cuando estamos tratando de que nuestro programa "compile" y dé una solución efectiva a un problema.
Sin embargo, los seres humanos no somos máquinas, y
necesitamos unas pequeñas dosis de entretenimiento.
Si no, nos ofuscamos y empezamos a hacer todo mal, y pasaremos horas trabados en algún paso estúpido, en
algo que no vemos por mero cansancio.
O sea que ahora hay que
recobrar la dimensión del entretimiento, darle su justo valor, y dedicarse un poco a los deportes, los juegos, la farándula, etc. Y esto como parte de todo el proceso de
ahorrar tiempo, aunque parezca que no.
Es preferible tener 8 horas de trabajo intercaladas con 2 horas de entretenimiento, que no 12 horas seguidas de trabajo, porque se obtendrán mejores resultados de la 1era forma, y más rápido, a pesar de que los números aparenten lo contrario.
O sea que ahora, para que las cosas
FUNCIONEN estamos considerando los
factores "biológicos" y "psicológicos" de nosotros mismos.
____________________________________
Si ni en los
foros de internet ni en las
listas de correo hallamos soluciones, son posibles otros caminos.
Podemos formar
grupos de intereses comunes en las
redes sociales de Internet, como
Facebook o
Google+.
Se pueden realizar preguntas en páginas como
Yahoo respuestas, aunque es muy probable que allí la gente conteste estupideces. Aún así se puede probar suerte.
Páginas como
Facebook o
Yahoo respuestas no ofrecen una plataforma adecuada para comunicar ideas técnicas complejas. No se pueden escribir
fórmulas en LaTeX, no se puede
formatear texto (que yo sepa).
En cambio en
Facebook al menos se pueden
incrustar imágenes y videos muy fácilmente.
Todo tiene sus pros y sus contras.
La creación o ingreso a una
comunidad virtual en Facebook requiere otra predisposición que para un
foro.
Es común que en Facebook la gente nos haga perder tiempo con impresiones personales, yéndose por las ramas fuera de tema, haciendo chistes, y demás "cositas del face".
Pero si tenemos suerte de dar con gente bien enfocada, es posible generar una experiencia de intercambio interesante.
Allí puede que haya expertos que contesten preguntas (los
Administradores del grupo), pero es muy posible también que eso no sea lo que prevalezca, y que tengamos que mentalizarnos en una "
ayuda recíproca" como modo de acción, es decir, compartiendo información entre todos.
Una herramienta muy poderosa de comunicación es el
chat, aunque casi siempre sólo se usa para conseguir parejas esporádicas por Internet.
Antiguos servicios de
chat como el
ÏRC, eran (y son todavía) algo así como 'listas de correo' en tiempo real, en que la gente puede intercambiar opiniones de temas técnicos, como por ejemplo, el diseño de una librería en
C que permita hacer figuras geométricas.
Los sistemas de
chat más modernos como
MSN Messenger o el de
Yahoo, disponen de opciones para introducir "emoticones", "fotografías" y "videos".
Aunque esta manera de comunicarse instantánea es algo muy bueno, la fama de
Facebook ha diluido un poco el uso del
chat.
No obstante, es claro que siempre se seguirán utilizando, y ahora
MSN evolucionará a
Skype definitivamente, que es
chat con video.
Esta es una comunicación directa ideal, el poder hablar y ver a la persona con la que uno conversa,
es superior y más barato que el uso de llamadas telefónicas a larga distancia.
Por más moderno que esto sea, a veces puede que nos sintamos
tímidos de comunicarnos así con desconocidos, y prefiramos conversar usando meros "caracteres",
a la antigua.
Hay, pues diversas opciones, pero lo que quiero remarcar con esto es que
pueden haber limitaciones psicológicas en donde
la tecnología no muestra impedimento alguno.
Y todo es parte de la misma realidad.
Lo importante de sistemas como
Skype es que, si superamos la timidez, podemos conversar en directo con varias personas. Son las "
llamadas en conferencia". El ahorro de dinero en esto es muy grande.
También se ahorra
tiempo, porque es más fácil explicar lo que queremos si usamos el tono de voz y los gestos adecuados. La conversación con voz y audio es siempre más eficiente.
Entonces puede que tengamos suerte de que consigamos más rápidamente lo que queremos: la dichosa librería que hace figuras goemétricas en
C.
En toda conversación entran los egos y temperamentos en juego, y esto producirá retrasos, ya que hay gente que querrá ser el centro de atención, o querrá hablar primero, etc.
En cualquier caso, esto se aleja de nuestro objetivo de realizar un simple programita en
C, al punto que dan ganas de ponerse a llorar.
¿Todo esto para dibujar un triangulito en mi computadora? ____________________________________________
Hay otros obstáculos a sortear, y tienen que ver
la documentación y el conocimiento.
A veces no nos alcanza una mera respuesta, sino que necesitamos que "alguien" nos dé "algo".
Para eso hay que encontrar las personas que dan "ese algo", y hallar la manera más adecuada de "pedirlo".
Supongamos que queremos un libro en formato
PDF que no se consigue en ninguna parte, pero que el autor eligió regalarlo a quienes se suscriban a su
blog, y se lo pidan amablemente.
Entonces hay que
registrar una cuenta en el servidor que aloja el blog,
después
afiliarse al blog del tipo, esperar a que te
acepta la afiliación,
finalmente dirigirle un mensaje privado, o postear algo en una de sus entradas,
haciendo el pedido del bendito
PDF.
Después esperar a que el tipo tenga ganas de responder, etc.
En otras ocasiones hay gente que sube información a
Wikipedia, en forma voluntaria, pero que se demora un cierto tiempo.
Uno puede hacer el intento de entrar a la
zona de debate de Wikipedia, y hacer una pregunta ahí, a ver si alguien responde, y de paso lo agregan a la entrada de Wikipedia del tema que nos interesa.
Les dejo como ejercicio pensar otras situaciones.
__________________
Pero hay una dimensión más de la
interacción con gente en Internet.
Supongamos que tenemos todo un entorno de programación perfectamente instalado en nuestra computadora, pero que detectamos que no funciona como esperamos, o nos da resultados "erróneos".
¿Qué hacemos?
Lo primero es
revisar nuestro programa, a ver si no hemos metido la pata.
Una vez corregidos los posibles errores de programación, hay que estudiar las
especificaciones técnicas del lenguaje, que por lo general estarán escritas en un documento, que contiene "el estándar".
Si este estándar no existe, hay que buscar un sustituto, averiguar por Internet a ver qué es lo más parecido a un "estándar" que se acepta para un cierto lenguaje, o una librería externa asociada a él.
Si usamos una versión específica de un lenguaje, diseñada por un grupo empresarial específico, tendremos que conseguir un manual, tutorial o información específica de esa versión.
Si las especificaciones técnicas del estándar no nos aclaran la fuente del error, y parece estar todo correcto, entonces hay que fijarse en la
documentación de nuestro compilador particular (
GCC), y ver qué opciones de compilación existen. Puede que haya alguna que nos dé el resultado que deseamos, respecto al comportamiento general esperado para nuestro programa ejecutable.
Lo que hacemos en este curso es configurar el compilador para que funcione según la normativa estándar
C99, por ejemplo, y que además
descarte aquellos aspectos de
GCC que
no son estrictamente soportados por el estándar.
Si todavía las cosas no funcionan bien, quiere decir que, muy posiblemente, exista un
error de diseño en el compilador.
En este caso, podríamos cruzarnos de brazos y decir "esto no tiene más remedio".
Si el compilador funciona mal, pareciera que nada podemos hacer.
Una opción improbable sería ponernos nosotros mismos a
reprogramar el compilador, o
hacer otro nuevo directamente, y que funcione bien... Pero descartemos este enfoque impráctico.
Otra opción es
reclamarle a los diseñadores del compilador que arreglen el error.
Aquí de nuevo tenemos que interactuar con gente.Si los diseñadores son competentes, tendremos suerte y escucharán nuestro pedido.
Si no, puede que obtengamos respuestas soberbias y equivocadas.
En el caso del compilador
GCC las personas involucradas en su desarrollo son bastante amables, aunque están enfocados estrictamente a su tarea, y no conversan demasiado.
Uno va a la página de desarrollo de
GCC, reporta un error, y ellos verifican si de verdad es culpa de ellos o no.
Si no, rechazan el pedido, y te dicen básicamente que "
te las arregles por tu cuenta" con tu error.
Esto puede ocurrir cuando tenemos un problema en nuestra computadora (el
hardware anda mal), o en nuestro
sistema operativo, o bien el problema está relacionado con el
compilador, pero no es culpa de
GCC.
Recordemos que tenemos más o menos unas 3 capas de
herramientas de compilación:
* El compilador (
GCC).
* La biblioteca o librerías (
MinGW).
* Un IDE o entorno integrado de desarrollo (
wxDev-C++).
Estas 3 cosas son bien distintas, las desarrollan grupos de personas diferentes, incluso de páginas webs separadas, y además se pretende que las 3 funcionen juntas, armoniosamente.
Si todo eso funciona en nuestra computadora sin problemas, es casi como un milagro.
Pero cuando algo no funciona, se nos complica la vida, pues tenemos que discernir a quién echarle la culpa, y a quién reclamar.
Una vez que descartamos que los idiotas no somos nosotros mismos, ni Bill Gates,
entonces podemos intentar ver si el error está en otra parte.
Los
diseñadores del compilador se ocupan sólo de aspectos sintácticos, traducción del código fuente a ejecutable, y de los mensajes de error o advertencias que arroja el compilador.
Consultas o reclamos de eso, se hacen a la gente de
GCC.
Cuando lo que no funciona tiene que ver funciones o datos definidos en las
librerías, u otras cuestiones del manejo de los archivos proveídos por la implementación, esto es culpa del equipo de
MinGW.
Cuando en línea de comandos el compilador funciona correctamente, pero en el
IDE tenemos problemas, las cosas no funcionan, se nos cierran ventanas sin explicación, las opciones de configuración que elegimos no tienen efecto, etc., esto empieza a ser culpa de la gente de
wxDev-C++.
Y la única manera de que
nuestro programa compile correctamente es que estos tres grupos de personas se dediquen, cada uno de ellos, a
arreglar lo que ellos mismos hicieron mal.
No podemos esperar que mágicamente lo arreglen, porque a pesar de que hay mucha gente en el mundo, que se encuentra con problemas similares que los nuestros, es muy probable que seamos nosotros los primeros en tener un determinado problema con
el compilador, las librerías o el IDE.
No habrá más remedio que
perder la timidez, registrarse en las páginas webs de esos extraños seres de la informática, prestar atención al modo en que se deben escribir los formularios de informe de errores (llamados
bugs), y decir lo que tenemos que decir: "
tal o cual cosa NO FUNCIONA".
En estos casos el modo adecuado de hacerlo es en
idioma inglés, y además hay que ser lo más
conciso y claro posible. Si vamos a
reportar un error que obtuvimos en un programa, el ejemplo que pongamos tiene que ser bien
sencillo, de ser posible, para que sea
bien clara la fuente del error.
Si nos ponemos muy
verborrágicos, lo más probable es que
no se entienda, y luego les saltará a algunos el "gusanito del orgullo informático", e intentarán hacernos creer que la culpa es nuestra, con una condescendencia un poco disimulada.
En estos casos hay que buscar la manera de insistir, pero al mismo tiempo sin molestar demasiado, porque se enojan enseguida con la gente que se vuelve repetitiva e insistente.
Hay que tener un
tacto especial para opinar en estos sitios webs, sobretodo recordando el contexto: la mayoría de los que están allí son expertos, y no les sobra al tiempo. Hay que ir al grano, sobretodo porque los
problemas de diseño con los que ellos tienen que lidiar son muy complejos.
Si nosotros vemos que nuestro compilador nos arroja un mensaje equivocado y de apariencia tonta, puede que para los ingenieros que deban arreglarlo sea un dolor de cabeza.
El motivo es que un compilador genérico como
GCC, está orientado a funcionar en cientos de máquinas de arquitectura diferente, y también en la mayoría de los sistemas operativos conocidos.
Arreglar un "
bug" implica arreglarlo para todas esas configuraciones posibles.
Requiere un diseño cuidadoso.
Además, es un
trabajo comunitario, con lo cual varias personas contribuyen a un
proyecto global.