Perversiones curiosas del mundo de TI - 3

El Daily WTF ha estado recopilando historias divertidas, salvajes y / o tristes del mundo de TI durante 14 a帽os. Traduje varias historias que me parecieron interesantes. Todos los nombres de compa帽铆as y nombres han sido cambiados. Los problemas anteriores se pueden encontrar bajo la etiqueta " perversiones curiosas ".

imagen

La primera historia: "No solo genial"


[ Original ]

Todos ten铆amos colegas que no pod铆an hacer nuestro trabajo. Jarad tambi茅n tuvo suerte.

Trabaj贸 en Initech en un peque帽o grupo de desarrolladores que crearon un cliente de Windows para clientes que lo usaron para interactuar con su servidor. La compa帽铆a decidi贸 portar la aplicaci贸n de .NET a Java. La gu铆a m谩s importante recomendaba al desarrollador l铆der de Java Kisha, muy respetado, de Intelligenuity como gerente del proyecto. "No se preocupe", dijo la gerencia. "La inteligencia solo contrata a los programadores m谩s brillantes".

En la primera reuni贸n del proyecto, el gerente anunci贸 que usar铆an Eclipse para el proyecto Java. Kisha dijo: 鈥淣o tengo Eclipse. 驴Alguien puede enviar? Jarad le envi贸 un enlace. En la pr贸xima reuni贸n, 茅l le pregunt贸 si ella instal贸 Eclipse. Ella respondi贸 que no pod铆a descargar el medio, por lo que esper贸 a la pr贸xima reuni贸n para pedir ayuda. El gerente corri贸 hacia su auto y resolvi贸 el problema haciendo clic en el enlace de descarga.

Avancemos r谩pidamente a la pr贸xima reuni贸n: Kisha dijo que no pod铆a seguir trabajando porque "Eclipse tiene algunos problemas con el JDK, 驴alguien me lo puede enviar?" Jarad le envi贸 el enlace nuevamente. Unos d铆as despu茅s, en la pr贸xima reuni贸n, dijo: "Eclipse no funciona porque necesita un archivo jar, 驴alguien puede enviarlo?" Y despu茅s de eso, "驴Alguien puede enviarme un c贸digo para crear clases porque Eclipse informa constantemente una NullPointerException ?"

Finalmente, el gerente cambi贸 la estructura de las reuniones. Continuaron sus reuniones regulares de clientes de Windows, pero agregaron una reuni贸n dedicada por separado solo para Kishi. Con el tiempo, result贸 que ella y su esposo eran amigos de un l铆der de muy alto rango y su esposa. Se celebr贸 una reuni贸n separada para "asegurar su trabajo exitoso"; esto significaba que el gerente del equipo escribi贸 un c贸digo para ella.

Una vez, Kisha le dijo al gerente que el cliente ten铆a un problema cr铆tico con el portal web y que se deber铆a realizar una reuni贸n con el cliente lo antes posible para resolver su problema.

El gerente organiz贸 una reuni贸n con el cliente, 茅l mismo, Kishi, Jarad y el gerente del proyecto, para resolver el problema de una vez por todas. El d铆a de la reuni贸n, el cliente se sorprendi贸 por la cantidad de personal y gerentes de soporte t茅cnico. Explic贸: "Um ... el" problema con el portal "fue que le ped铆 a Kisha la URL del portal web. Fue suficiente para enviarle una carta ".

A veces la justicia ocurre en este mundo, y Kisha como resultado perdi贸 su trabajo.

La segunda historia: "picaz贸n de tres meses"


[ Original ]


En marzo de 2016, Ian necesitaba un trabajo. Casi inmediatamente despu茅s del inicio de la b煤squeda, tuvo suerte: encontr贸 una peque帽a startup que necesitaba un trabajador con conocimientos de arquitectura Python y habilidades de dise帽o. "Tiny" porque adem谩s de Ian, la compa帽铆a ten铆a solo tres desarrolladores bajo el liderazgo de su fundador Jack.

La entrevista con Ian fue realizada por el propio Jack. Despu茅s de una prueba t茅cnica, aprendi贸 m谩s sobre el proyecto de la compa帽铆a: un prototipo casi completo de la aplicaci贸n iOS. El usuario sincroniza su tel茅fono con un monitor de frecuencia card铆aca de mu帽eca, despu茅s de lo cual el tel茅fono debe reproducir m煤sica que coincida con las actividades actuales del usuario. El objetivo principal de la aplicaci贸n era ayudar a lograr el pulso necesario durante el entrenamiento. La aplicaci贸n tambi茅n utiliz贸 los aceler贸metros del tel茅fono para rastrear el ritmo del usuario mientras conduc铆a. Estos datos, seg煤n Jack, deber铆an haber sido 煤tiles para los estudios de la enfermedad de Parkinson. Apoy贸 su declaraci贸n con art铆culos cient铆ficos de las mejores universidades. Jack quer铆a que Ian desarrollara un nuevo sistema de back-end para el almacenamiento de datos y el procesamiento de consultas.

Jack era amable y carism谩tico, y su entusiasmo contagiaba a otros. Ian acept贸 de inmediato la oferta y se puso a trabajar al d铆a siguiente. Su oficina era peque帽a, pero todav铆a le pertenec铆a a 茅l solo. Su tarea consist铆a en crear el backend necesario para la aplicaci贸n.

Han pasado dos semanas. Una madrugada del lunes, Jack invit贸 a su equipo de desarrollo a la sala de reuniones. El resplandor de su presentaci贸n en Powerpoint quem贸 la retina.

鈥淟o pens茅 detenidamente. Somos una startup completamente nueva. Nadie sabe de nosotros, 驴verdad? Necesitamos hacer algo para aumentar el conocimiento de la marca. Entonces, decid铆: eliminaremos la parte musical de la aplicaci贸n y nos centraremos 煤nicamente en la recopilaci贸n de datos ".

Ian instintivamente casi dijo "隆驴Qu茅 ?!" Tendr谩n que tirar los resultados de dos semanas de trabajo. Adem谩s, la parte de recopilaci贸n de datos era anteriormente completamente opcional.

Jack cambi贸 a otra diapositiva, que mostraba las m茅tricas que ahora quer铆a rastrear para cada usuario. Hab铆a tantos de ellos que tuve que usar la fuente m谩s peque帽a. Para leer, Ian tuvo que entrecerrar los ojos.

"隆Si juntas un pajar lo suficientemente grande, ciertamente aparecer谩 una aguja en 茅l!", Dijo Jack. 鈥淗aremos que la aplicaci贸n sea gratuita y trabajar con ella implicar谩 un registro obligatorio. Los ingresos reales para nosotros ser谩n los datos recopilados ".

El capital de los inversores se gast贸 en una oficina de lujo en el centro de negocios de la ciudad; Los desarrolladores de aplicaciones gratuitas merecen solo lo mejor. Jack contrat贸 a un segundo desarrollador de iOS, ciencia de datos y pasante.

"Pero no le d茅 al pasante ning煤n trabajo importante", dijo Jack a los empleados a tiempo completo.

Habiendo dominado la nueva situaci贸n, Ian comenz贸 a desarrollar la arquitectura de un nuevo sistema que registrar谩 todos los datos necesarios.

Tres meses despu茅s, Jack tir贸 todo a la basura. "No hay aplicaciones! 隆Necesitamos una nueva direcci贸n de desarrollo! 鈥

La nueva visi贸n de Jack era crear un sitio web en el que las personas tuvieran que indicar las composiciones que escuchan en un sue帽o, durante el entrenamiento y otras actividades.

"A la gente le gusta hablar de s铆 misma", dijo Jack. "隆No debemos pagarles por el hecho de que nos dan sus datos!"

Se contrat贸 a un desarrollador front-end para crear el sitio web. Poco despu茅s de lanzar el sitio, Jack se jact贸 ante los inversores de que hab铆a llegado a un mill贸n de visitantes 煤nicos. De hecho, solo hubo unos 300 registros, la mitad de los cuales fueron creados por una persona.

Ya puedes adivinar lo que sucedi贸 tres meses despu茅s. Jack abandon贸 el sitio web de desarrollo lento en favor del bot Slack, que se supon铆a que respond铆a al comando "Play ${song} by ${artist}" , encontrando la pista en Spotify y vincul谩ndola. Un widget de Spotify reproducir铆a una vista previa de 30 segundos o, si el usuario tiene una cuenta de Spotify Premium, la canci贸n completa.

鈥溌縀so es todo? 驴C贸mo vamos a ganar dinero? 鈥, En este momento, los desarrolladores ya no se conten铆an en sus reclamos.

"La suscripci贸n se pagar谩", respondi贸 Jack con valent铆a.

"驴Para el bot de chat?" "Ian se opuso. 鈥淧ara que funcione completamente, el usuario ya necesita Spotify Premium. Si queremos que la gente pague m谩s all谩 de esto, 隆debemos darles m谩s oportunidades! 鈥

"Nos ocuparemos de esto m谩s tarde", respondi贸 Jack.

Jack encarg贸 al interno que desarrollara el nuevo producto principal de la compa帽铆a, violando los requisitos de Jack hace seis meses. El interno hizo el m谩ximo esfuerzo, pero pronto se vio obligado a regresar a la escuela; c贸digo incompleto sin ceremonia fue lanzado al desarrollador front-end para su revisi贸n. Con la ayuda de uno de los desarrolladores de iOS, lo termin贸. 驴Qu茅 estaba haciendo Ian? Cre贸 un tablero y un registro, porque Jack insisti贸 en que atraen a suficientes usuarios para justificar el esfuerzo.

Pasaron tres meses m谩s. Se agregaron muchas "caracter铆sticas", por ejemplo, el bot le pidi贸 obsesivamente a los usuarios en el canal Slack que lo usaran. Este comportamiento violaba los t茅rminos de uso de Slack, por lo que la aplicaci贸n no estaba permitida en la tienda; El propio Jack tuvo que enviar enlaces a las personas interesadas, para que lo instalaran manualmente. Al principio, el producto fue transferido a 50 compa帽铆as "muy amigables" que Jack conoc铆a personalmente; De estos, solo unos pocos lo instalaron, y a煤n menos continuaron us谩ndolo al d铆a siguiente. Luego, Jack ampli贸 el anuncio a 300 empresas "amigas", pero con el mismo resultado.

El punto de inflexi贸n lleg贸 para Ian cuando Jack comenz贸 a insistir en un tiempo de trabajo adicional, a pesar de que Ian no pod铆a ayudar a otros desarrolladores en sus tareas. Sin embargo, Jack lo oblig贸 a quedarse hasta tarde para "mostrar solidaridad". Esta fue la gota que colm贸 el vaso: Ian escribi贸 una carta de renuncia dos semanas despu茅s. Su 煤ltimo d铆a en el trabajo coincidi贸 con el lanzamiento del bot Slack, durante el cual observ贸 l铆neas muy rectas en el tablero. Cuando finalmente dej贸 la lujosa oficina, la startup todav铆a no gan贸 su primer centavo.

Afortunadamente, Jack ten铆a un plan. Despu茅s de que Ian se fue, comenz贸 de cero y estaba a punto de crear un nuevo producto. No, 茅l no traer谩 dinero, pero primero deben saber sobre la marca.

Tercera historia: "Transportador de respaldo"


[ Original ]

"Um ... 驴puedes mirar algo para m铆?"

Pat dej贸 de programar nuevas funciones y vio el cubo de Milton parado cerca de ella.

"Creo que estoy teniendo problemas", agreg贸 Milton.

Uno de los principales sistemas internos de la compa帽铆a era la tuber铆a de procesamiento de datos. Quiz谩s la palabra "canalizaci贸n" puede considerarse una exageraci贸n, porque en la pr谩ctica son solo unos pocos scripts de shell y programas de Python que extraen datos de archivos, realizan operaciones con estos datos y vuelcan los resultados en otros archivos, que luego son le铆dos por otros scripts. En el proceso de trabajo, la gente usualmente tomaba la 煤ltima versi贸n de los scripts del sistema de control de versiones, los modificaba y los ajustaba para que respondieran a una pregunta espec铆fica relacionada con los datos. Si parec铆a que este proceso en particular podr铆a tener valor, entonces limpiaron el c贸digo y lo agregaron nuevamente al sistema de control de versiones. Si pensaban que ya no necesitaban el c贸digo, simplemente se restablec铆an a HEAD.

Sin embargo, algunos, como Milton, b谩sicamente conservaron su propia copia de todos los guiones. O, como es el caso con Milton, algunas copias. Milton conoc铆a el proceso de procesamiento de datos lo mejor de todo, pero la mayor parte de este conocimiento estaba contenido en su biblioteca personal de scripts.

"Pens茅 que val铆a la pena hacer mis cambios en el sistema de control de versiones", dijo Milton. "Ten铆a un script llamado por un script que fue llamado por el script, y todo depend铆a de un conjunto de variables de shell creadas, por ejemplo $SETUP_DIR ".

Pat asinti贸 con la cabeza.

鈥淎s铆 que quer铆a reorganizar todo esto en un argumento para que otras personas pudieran usar el c贸digo. Lo hice ... pero antes de probar, olvid茅 cambiar los scripts de llamada para que pasen una discusi贸n ".

En particular, el gui贸n de Milton conten铆a esta l铆nea:

#!/bin/sh

rm -rf $SETUP_DIR/*/


Lo refactoriz贸 a la siguiente l铆nea:

#!/bin/sh

rm -rf $1/*/


Los scripts de shell no se preocupan por la existencia de estas variables. Milton ten铆a un entorno persistente por $SETUP_DIR . Pero $1 es el primer argumento, y si no pasa el argumento, estar谩 vac铆o. Por lo tanto, un nuevo script de Milton, cuando se lanz贸 sin argumentos, se implement贸 en rm -rf /*/ , eliminando todo a lo que su cuenta ten铆a acceso.

B谩sicamente, esto condujo a numerosos intentos de eliminar archivos para los que no ten铆a derechos. Adem谩s, esto signific贸 la desaparici贸n de su directorio de inicio con un mont贸n de scripts de spaghetti que eran completamente imposibles de recrear porque nunca entraron en el control de versiones.

"驴Se puede solucionar esto de alguna manera?", Pregunt贸 Milton.

鈥淏ueno, s铆, por supuesto. Todo se puede restaurar desde su 煤ltima copia de seguridad ", dijo Pat.

Aunque se lanz贸 una herramienta de copia de seguridad automatizada en todos los sistemas Windows, no se configur贸 en ning煤n sistema Linux. El departamento de soporte t茅cnico consider贸 que si es lo suficientemente competente t茅cnicamente para trabajar con Linux y escribir scripts de shell, tendr谩 suficiente conocimiento para configurar su propio sistema de respaldo. Especialmente para este prop贸sito, hab铆a una SAN accesible para todos.

"Ah, y yo ... nunca configur茅 una copia de seguridad", susurr贸 Milton. "Bueno ... al menos no empuj茅?"

Pat esperaba que Milton aprendiera la lecci贸n correcta de este error.

Cuarta historia: "驴Qu茅 es un punto flotante?"


[ Original ]

imagen

Hay muchos obst谩culos para los programadores novatos: la diferencia entre declarar una variable e inicializarla, la necesidad de usar a veces punto y coma para completar l铆neas, compensar los errores en uno ... Todos en nuestra industria nos encontramos con ingeniosos programadores autodidactas que pueden crear aplicaciones a gran escala con la arquitectura adecuada, incluso un sue帽o, pero vimos j贸venes autodidactas, que apenas hab铆an dominado los conceptos b谩sicos y pensaban que eso era todo lo que necesitaban. Al final, se necesitan diplomas y educaci贸n formal por una raz贸n.

Esta historia comenz贸 cuando Olaf se gradu贸 de la universidad y trabaj贸 en su primer trabajo real como "programador en pr谩cticas". La compa帽铆a se ha fijado el objetivo de mejorar la gobernanza en el sistema de salud estatal: cualquiera que tenga el dudoso placer de comunicarse con los sistemas de salud dir谩 que esta es una tarea noble. Sin embargo, la compa帽铆a fue fundada por un m茅dico que solo ten铆a un conocimiento superficial en PHP, que estudi贸 de forma independiente cuando se le dio tiempo.

Olaf se puso a trabajar, con la intenci贸n de aplicar su conocimiento de los patrones de dise帽o. PHP es f谩cil de aprender, pero dif铆cil de dominar; muchos ejemplos escritos en software PHP usan objetos divinos, y el c贸digo se mezcla con la presentaci贸n, dos errores graves que, sin embargo, no se mencionan en la mayor铆a de los tutoriales en l铆nea. Olaf comenz贸 a separar la funci贸n del formulario, crear objetos que se pueden usar repetidamente para minimizar el copiar y pegar, y se dedic贸 a otras tareas similares, felizmente convirtiendo el caos del c贸digo que le pas贸 en orden.

Y entonces se encontr贸 en la oficina del jefe, quien hizo los arreglos para que se lavara.

"隆Otros programadores no entender谩n esto!", Grit贸 el jefe. 鈥淓l c贸digo es demasiado complicado. 驴Por qu茅 lo est谩s cambiando? 隆Funciona, ten铆as que dejarlo!

Desalentado, Olaf volvi贸 al trabajo y subi贸 una versi贸n limpia a su rama principal sin ning煤n cambio. Intentando evitar una colisi贸n con malas pr谩cticas, comenz贸 a trabajar en un error en el sistema de contabilidad, que tiene alta prioridad y urgencia, porque se relaciona con la facturaci贸n. Los usuarios pod铆an cargar archivos CSV al servidor con informaci贸n sobre sus gastos, y el sistema resumi贸 los valores por categor铆a y cre贸 informes de facturaci贸n. Sin embargo, en alg煤n lugar del interior, se produjo un error de redondeo, lo que condujo en algunos casos l铆mite importantes a cantidades incorrectas.

Olaf estudi贸 m谩s que sus colegas, pero ninguna capacitaci贸n es integral. R谩pidamente logr贸 determinar que se trataba de un error matem谩tico con un punto flotante. Dado que los n煤meros decimales no pueden representarse en forma binaria con total precisi贸n, en casos l铆mite surgieron errores de c谩lculo. Comenz贸 a buscar las formas correctas de manejar valores decimales en PHP. A diferencia de Node o C #, las bibliotecas externas en PHP son bastante dif铆ciles de conectar, porque este lenguaje no tiene soporte incorporado para la administraci贸n de paquetes. No sab铆a c贸mo agregar una biblioteca capaz de realizar correctamente operaciones matem谩ticas. Dado que el software solo calcul贸 las sumas, Olaf decidi贸 usar matem谩ticas enteras: lea el valor, elimine el punto decimal (para que el valor de 10.50 $ se represente como 1050), realice los c谩lculos y agregue el punto decimal nuevamente cuando se muestre.

A otro joven le gust贸 la idea. El desarrollador senior lo aprob贸, pero el jefe rechaz贸 rotundamente la oferta. 驴C贸mo argument贸 por esto? 鈥淓sto no es un error de coma flotante. Surge debido a un tipeo d茅bil de PHP, el programa intenta sumar los valores como cadenas, no como n煤meros ".

(Para aquellos que tienen curiosidad: PHP no usa el operador + para concatenar cadenas. En cambio, usa el ".". El resultado de "hello " . "world" ser谩 "hello world" ).

Como resultado, el desarrollador senior se dio cuenta de esta decisi贸n: separar la parte completa de la fracci贸n, de modo que $ 10.50 se convirtieron en $ 10.00 y $ 0.50, y luego resumir cada parte por separado.

Olaf no se demor贸, esperando que descubrieran que el error todav铆a estaba en su lugar, porque el programa a煤n procesaba la parte fraccional con centavos como un n煤mero de coma flotante. Encontr贸 un mejor trabajo con un mejor idioma, y 鈥嬧媎ej贸 la empresa.

imagen

Quinta historia: "Seguridad calculada"


[ Original ]

A finales de los a帽os 80, Karl trabaj贸 durante alg煤n tiempo en una empresa de desarrollo de software que se ocupaba de sistemas de avi贸nica y posicionamiento global para clientes militares y civiles. En los negocios, a menudo visitaba a Schlockdeed Corp, un cliente con un contrato para desarrollar una nueva generaci贸n de aviones de combate para el Ej茅rcito de los EE. UU. Debido al estricto secreto de su trabajo, era muy importante garantizar la seguridad.

Cada vez que Carl entraba o sal铆a de la empresa, ten铆a que pasar por el departamento de seguridad. All铆 revis贸 cuidadosamente su malet铆n, chaqueta, lonchera y casi todo, excepto un estudio completo de las cavidades corporales. A pesar de los meticulosos controles diarios en Schlockdeed, algunas de sus "medidas de seguridad" limitaban con lo absurdo.

En esta era de transmisi贸n de informaci贸n a trav茅s del disquete , los programadores a menudo se llevaban con ellos al trabajo y tomaban cajas con disquetes. Schlockdeed , , . 芦 禄. , .

, HP-41CX. , , . HP-41CX .

: 芦, . 禄. . 41CX - ? , ? 芦, CIO. 禄, 鈥 .

, , , 芦禄 . , (Chief Information Officer) . , 80-. , Calculator Inspection Officer.

芦, 禄, 鈥 , . HP-41CX. : 芦 . , , . , !禄 , .

, . . , . AC (Approved Calculator), . HP-41CX, , Schlockdeed . , , 芦 禄 -.

Source: https://habr.com/ru/post/442222/


All Articles