Esta semana ha estado cargada de chamba, pero me ha servido para el tema de hoy, ya que buena parte del trabajo que hice tiene que ver con el título del post.
Recapitulando un poco, ya he comentado que una computadora solo puede trabajar mediante programas, un programa es una serie de instrucciones sobre como debe comportarse la computadora, que son proporcionadas por personas conocidos como programadores y lo hacen mediante una especie de lenguaje que les permita interactuar con la computadora.
Pero hay un detalle, que los programadores son humanos, aparte de que en ocasiones ellos solo se dedican a darle las instrucciones que alguien más le pasa no son deducidas por ellos, así que está muy presente el factor humano que es común, el error.
Así, que un programa es muy propenso a que sufra de errores durante el desarrollo de las instrucciones que genera. Estos errores pueden ser por descuidos del programador, porque el usuario hace cosas con el programa que no se supone que haría, o porque alguna circunstancia especial se da que provoca el fallo.
Un caso típico de error sería un programa que hace cálculos matemáticos, y haga una división entre 0. Puede ser porque el programador olvido revisar que el número que de el usuario no sea un 0, o porque en una serie de cálculos anteriores se obtiene un 0 que normalmente no tendría que salir. Otro posible error de cálculo es que el usuario en vez de dar un número, da una letra como dato, al programador no se le ocurrió que el usuario pudiera hacer este brillante movimiento y no le dio instrucciones para manejar ese caso.
En pocas palabras los errores pueden salir en cualquier parte, y aunque se prevean todos los posibles casos para prevenirlos, siempre habrá por allí alguno que no se previó acechando para hecharnos a perder el programa. Es el eterno pleito entre los que usan los programas y los que lo hacen, quien tiene la culpa de que ocurriera el error, si unos por hacer tonterías con el programa o los otros por no preveer que las harían.
Esto ocurre a todos los niveles, sino basta ver el montón de actualizaciones que tienen los programas como el windows, el office, el firefox, alguna distribución de linux, si esto pasa a esos niveles de empresas, que no pasara en un grupito de programación independiente.
Ahora, lo que puse de bichos en el título, es porque a estos errores se les da el nombre genérico de bug, que es como se le denomina de manera general a los insectos o como decimos en español, a los bichos. Cuenta la leyenda que allá por los años de la década de los 40's, cuando las computadoras eran monstruos que gastaban más electricidad que toda la cuadra, para poder representar los bits no usaban pequeños elementos electrónicos, sino que usaban interruptores eléctromagéticos, que abrían y cerraban un circuito (cableado, nada de chipsitos), como un apagador de la luz para mostrar el 1 o el 0 del dato.
Uno de estos monstruos, el Mark II tuvo un fallo en uno de los programas que ejecutaba, al revisar el resultado de la operación y checar el circuito que proveía el dato, se descubrió que uno de los interruptores que debería haberse cerrado para marcar un 1 permaneció abierto marcando un 0, el motivo, una polilla, que entro en el cableado y quedo atrapada entre los dos platinos de contacto del interruptor, por lo que al reportar la causa del motivo, la respuesta fue clara, fue por un bicho, un bug. Hay una foto que prueba el hecho. Si bien leí por allí que ya desde antes se usaba el término bug para referirse a un comportamiento extraño en un sistema, fue la primera vez que se asoció a la computación.
Estos bugs también ocurren en los juegos, que a fin de cuentas, son programas, uno clásico ocurre en el pacman, que ocurre al llegar al nivel 255 del juego (yo con trabajos llegaba al 10), y es que al terminar este, el juego intenta cargar uno nuevo, el 256, pero la variable que controlaba esto era de 8 bits, por lo que solo se puede almacenar hasta el 255 (el numero 0 también cuenta), entonces ocurre un error interno y aparece lo siguiente:
Algo similar ocurre en super mario bros 1, hay un "truco" que permite obtener muchas vidas, pero si uno se pasa de lanza y sacas más de 255, la variable se desborda, y te quedas sin vidas.
Los errores pueden tener distinta gravedad y consecuencias, desde que solo se vean cosas extrañas, que provoquen que la computadora se atore o se cierre el programa que ejecutamos, hasta que borren o hechen a perder información importante.
En fin, los bugs (o glitchs como se conocen ahora en épocas de metrosexuales), son una constante, y tarde o temprano nos va a ocurrir alguno, ya sea jugando, o trabajando en la computadora, mientras existan humanos manejando o programando software, estarán latentes. Por cierto, en la semana me toco corregir varios bugs de unos programas que se usan en la empresa, por eso se me fijo el tema jeje.
Parte de mi trabajo, aparte de la elaboración de programas, es la búsqueda de bugs para realizar correctivos (más vale que nos estalle una aplicación en el laboratorio que en el cliente jeje). Te sorprendería la cantidad de cosas que, aparte del error humano, pueden suceder: Coredumps, desbordamientos de buffer, memsets mal inicializados, etc... :)
ResponderEliminarPues, ahora que estoy metido en esto de la programada de videojuegos, te puedo decir que la máxima sobre el usuario y la computadora ("Si se diseña un programa a prueba de idiotas, siempre habrá un idiota ingenioso que sabrá estropearlo") se cumple. Además el proceso de identificar los "bugs", llamado "debuggear" (pochismo, lo sé) es innecesariamente complicado con el Wii, ya que usamos el motor de juego de un tercero (Unity-3D).
ResponderEliminar