Hola Doscientos cincuenta y seis días del año están en pleno apogeo, y los muchachos de Avito y yo queremos felicitar a todos los que leen este blog el día del programador y sumergirse un poco en la nostalgia.
Debajo del corte, recordamos en honor de las vacaciones nuestras primeras líneas de código. Y también: el código y los programas que más recordamos. Y decir por qué. Y, por supuesto, ¡esperamos sus historias en los comentarios!

¿Qué tipo de lenguaje de programación hay en la imagen?Estamos nostálgicos hoy, así que elegimos COBOL para felicitarnos. Fue el primer lenguaje de programación estandarizado (estandarizado en 1960). Esto significa que un programa escrito en una computadora podría compilarse y ejecutarse en otra computadora sin ninguna modificación. En aquellos días, esto era un gran avance, otros lenguajes requerían un refinamiento de los programas al intentar ejecutarlos en otra computadora, a menudo era difícil y largo.
Feliz Día del Programador en COBOL se ve exactamente así. (Gracias por la excursión y el código pik4ez ).
¿De qué trata esta publicación?
La idea de la publicación nació durante la fiesta corporativa de verano, cuando mis colegas y yo de repente comenzamos a hablar sobre los primeros pasos en la programación. E iseregin y yo decidimos recoger sus recuerdos y compartirlos con el público. Entonces ...
Primeras líneas de código
¿Parece interesante en las primeras líneas de código? Algunos también lo pensaron al principio.
Dev 1: pensé que todos tenían la primera línea de código algo así como:
!#/bin/bash echo "Hello World"
Dev 2: En nuestra área fue antes: MsgBox "Hello World"
. Porque aún tenía que intentar encontrar un disco con Linux.
La discusión, se podría decir, comenzó desde los primeros comentarios en el chat. Y luego obtuvimos algunas respuestas interesantes y detalladas que queremos compartir. Eso es lo que nos dijeron los colegas de Avito.

Andrey Shodan Aksyonov, Jefe de Infraestructura de Búsqueda: “Las primeras líneas de código que básicamente ingresé en la computadora definitivamente no eran mías. Estos fueron algunos programas básicos extraños que reimprimí de las revistas (debido a una dura infancia, juguetes de ocho bits). Pero recuerdo exactamente cómo otras personas usaron mi programa por primera vez.
Esta fue la era del fin del DOS. Escribí un programa ensamblador que capturó la pantalla en modo gráfico. Además, en contraste con todo lo que estaba en el "mercado", ella hizo frente a todos los modos de video en general, incluidos los hackers completamente locos. Por ejemplo, si el modo de operación VGA estándar era 320x200 y 256 colores, entonces las personas que usaban algunos trucos nefastos y reprogramaban el controlador, que impulsa los rayos a través del tubo MDG, alcanzaron 360x240. Logré escribir un programa que se ocupó de todo esto, capturó la pantalla (memoria de video), la guardé en un archivo y luego, desde este volcado, pude guardarlo hábilmente como una utilidad fuera de línea separada. Llevé este programa al final, lo publiqué en Internet y lo olvidé con éxito.
Han pasado casi 12-15 años desde ese momento. Recibí un correo electrónico Tal hoja, como si Leo Tolstoi escribe, en tres hojas, y esta es solo la primera frase. “Hola, soy camionero de Canadá. Usuario activo de su programa. No tengo dinero, pero tengo cinco hijos. Y encontré la computadora número 486 en el basurero, además robé algunos juegos antiguos en Internet, y ahora mis hijos están jugando juegos diferentes en esta computadora. Al mismo tiempo, su juego favorito no sabe cómo guardar nada: es imposible guardar una tabla de honor común, ni siquiera un puntaje alto, e incluso no se puede tomar una captura de pantalla, porque se usa algún tipo de modo de video adicto. Y su utilidad hace un excelente trabajo de esto, y los niños lo usan constantemente. Sí, yo mismo, sucede entre vuelos ... Entonces, como somos usuarios activos de su antiguo programa, decidí alentarlo. Aquí hay un código de transferencia de Western Union de $ 20 ". Prácticamente lloré y decidí que en el día más oscuro, cuando finalmente llegue y tenga hambre, aquí tomaré este MTCN (código de transferencia), lo cobraré y la puerta. Desafortunadamente, han pasado muchos años más desde entonces, por lo que no se sabe dónde está MTCN ahora. Quizás haya en los viejos archivos de correo, si no los he perdido durante este tiempo. Lo reconozco en el día más negro.

Artyom Razinov, un desarrollador líder de iOS: “En quinto grado, escribí el código por mi cuenta en el programa infantil Logo Mira, mientras que todos los otros muchachos más exitosos jugaban. Creé un programa y funcionó. Ese día decidí convertirme en programador ".

Daniil Popov, desarrollador senior de Android: s := width * height;
“Era una línea en Pascal que calculaba el área del rectángulo. El caso fue en cursos de programación para estudiantes de octavo grado. Lo que más me impresionó fue que puedo dar comandos a la computadora, y los ejecuta implícitamente. Una especie de maestro de máquinas. Desde entonces, realmente me encanta cuando la secuencia acumulada de acciones (algoritmo) conduce al resultado ".

Dmitry Belov, desarrollador senior de backend: “Esta fue la primera orden en freelance extranjero. Estudiantes hambrientos, quería ganar al menos un poco de dinero, y no era tan importante sobre qué escribir: casi no había conocimiento, para estudiar de todos modos desde cero.
Recibí una orden para hacer una tarjeta flash animada. Tuve que aprender un poco de Action Script. Stackoverflow aún no estaba allí, tuve que leer la documentación.
El cliente estaba satisfecho, logré completar el proyecto de inmediato. Ganó sus primeros quince dólares en freelance ".

Ilya Gribov, desarrollador front-end: “Me gustaba programar desde el octavo grado de la escuela (Basic, Pascal), pero luego hubo un largo descanso. Regresó a este negocio solo después de la universidad, ¡y tuvo que recordar mucho!
Invierno, 6 a.m., café fuerte, antes de ir a trabajar (luego trabajé en TI)
static void main(String[] args) { System.out.println("!"); }
Emociones: ¿QUÉ ES String [] args ??? ”.

Vladimir Akimov, desarrollador front-end senior: “Mi primera línea de código fue escrita porque realmente quería entrar en el hangout de rap. Tenía unos 17 años, no sabía cómo rapear y escribir música, y decidí ingresar a un equipo genial a través del diseño.
Entonces nadie participó en la promoción de artistas independientes en Internet. Entonces, los amigos dibujarán la portada, lanzarán el disco y lo distribuirán a sus amigos. Y había un sitio de MySpace donde se podía diseñar de manera genial la página de un músico. Vi cómo lo hacen los extranjeros. En algún momento, me encontré con un chico que vivía en Alemania e hizo una página para Seryoga. ¿El que cantó "Black Boomer, recuerda"? Decidí espiar cómo hacer esto. MySpace fue colocado en las mesas, tomé toda esta página, entendí su idea y la tomé prestada.
Mis primeras páginas fueron similares a sus páginas. Lo hice uno tras otro, intenté promocionarlos. Así que me hice amigo de un equipo. Hubo un diseñador que me invitó a escribir el código y se tomó las fotos. Comenzamos a crear páginas de MySpace para todos nuestros artistas populares de rap ruso. Y luego fui invitado a trabajar en la oficina de MySpace St. Petersburg para trabajar.
Luego escribí muchas líneas de código allí, del mismo tipo, tabular: era CSS y diseño, nada complicado. Ahora cualquier junior lo resolverá y lo hará más fresco. Pero luego fue un "wow", porque trabajamos con IE5 y otros navegadores, para lo cual tuvimos que hacer mucha magia.
Si no fuera por esta historia, no estaría involucrado en la programación, no vendría a diseñar, no entendería lo que es ".

Konstantin Seleznev, desarrollador de backend: “Mi compañero de clase me“ enganchó ”a la programación en séptimo grado (realmente, como una droga):
- Pss, hombre, ¿quieres algo de programación? Me dijo algo así, me entregó un disco con Borland Development Studio y una gran colección de artículos sobre Delphi.
Más tarde, en uno de estos artículos, encontré lo siguiente: “Conozcamos al usuario. Por ejemplo, de repente mostramos el mensaje "Es hora de dormir" y ... ¡apagamos el monitor! La manivela no podrá encenderla ... ". ¡Probé el código que figura en el artículo y todo funcionó para mí! Me sentí como un verdadero hacker!
Sin embargo, después de eso tuve que reiniciar la computadora, porque realmente no pude volver a encender el monitor ".
procedure TForm1.Button1Click(Sender: TObject); begin MessageDlg(' . . !', mtInformation, [mbOk], 0); SendMessage(Application.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, 0); end;
Y aquí hay historias del podcast líder Podlodka.

Stas Tsyganov, Jefe de Desarrollo Móvil, Tutu.ru: “Mi madre trabajaba como maestra de ciencias de la computación y tuve acceso a las computadoras bastante temprano. Y mi primera experiencia de programación fue Cucaracha para MS-DOS. Aprendí con interés que todavía está viva e incluso portada a Windows.
5
Y el primer código que tuve fue algo como esto ".

Egor Tolstoy, Gerente de Desarrollo de Plataformas de Aplicaciones, Avito: “Hace unos diez años, vine a visitar a mi hermano mayor, que luego tenía su primera computadora, en MS-DOS. Además de las mellas rampantes en el primer GTA (en la localización rusa se llamaba el hermoso nombre "Avtovor") y Duke Nukem descubrimos la programación por nosotros mismos. Las matemáticas no me atrajeron mucho entonces, ¡pero la ramificación lógica y el dibujo eran perfectos! Entonces, el primer programa fue la generación de composiciones suprematistas a partir de círculos y líneas: CIRCLE(10, 10), 50
”.

Katya Petrova, Jefa de Desarrollo, Frontend Architecture, Avito: “Hacer que una tortuga en el mundo de los logotipos dibuje círculos y escribir“ Hola mundo ”en Pascal en las lecciones de informática fue, por supuesto, entretenido e informativo. Pero fue aún más divertido en el octavo grado conducir jefes en el WoW Classic (que aún no era convencional). Así que aquí están mis primeras líneas de código realmente ÚTILES ".
#showtooltip Regrowth /cast [@mouseover,exists,help][@player] Regrowth(Rank 5)

Eugene Catella, Jefe de Desarrollo Móvil, Yandex. Transporte: “En algún momento del octavo o noveno grado me interesé en la programación, así que mis padres me compraron un libro sobre Turbo Pascal. Todavía recuerdo que ella era roja. Y al principio había cosas simples, como ciclos y condiciones. Y luego, al parecer, el primer capítulo terminó con una historia sobre lo que es la recursividad. Y era necesario resolver el enigma sobre la torre de Hanoi. Por lo tanto, a excepción de Hello Worlds, puede considerarse mi primer programa ".
La línea de código más memorable.
Por supuesto, la discusión no se limitó a las primeras líneas de código. Y también hablamos sobre el código, que por varias razones realmente recordamos.

Andrey Shodan Aksyonov, jefe de infraestructura de búsqueda: “Érase una vez, cuando trabajaba en desarrollo de juegos, tontamente escribimos nuestro propio motor con nuestras manos. En general, esto no se puede hacer, es imposible, pero nadie nos dijo esto. Por lo tanto, escribimos desde cero nuestro propio motor y todas las herramientas para desarrollar el juego, y lo desarrollamos, y logramos hacer todo esto en tres años. Bueno, y en particular durante esta igrostroy se me ocurrió e hice este tipo de finta inteligente con mis oídos. En la primera generación de aceleradores gráficos programables, donde los sombreadores se acababan de conectar, hubo un breve período en el que la GPU se podía programar en ensamblador y presentar instrucciones para las ranuras con las manos. Luego, esta función se deshabilitó, solo quedaba HLSL, pero al principio era posible. Así que logramos usar cuatro texturas a la vez en una sola pasada (esto es trivial), y al mismo tiempo contar la iluminación, un mapa de irregularidades, proyectar sombras y algo más (pero nadie sabía cómo). Nuestra compañía entonces tenía, si no 3 conocimientos, luego 2 conocimientos, esto era lo principal. Luego, después de un año o dos, cuando la tecnología avanzó y perdió algo de relevancia, con el permiso de las autoridades, publiqué un artículo en el libro ShaderX4 sobre esto. Fue una solución de ingeniería honesta muy hermosa, por lo que no me avergüenzo hasta el día de hoy. ¡Pero esta no es una línea de código, sino diez enteras!
Listing 5. #define POW c3 // c3.b=B, c3.a=A, for m=2. see [Beaudoin02] dp3_sat r1.rgb, t1_bx2, t2_bx2 // (1) (NH) dp3_sat r0.rgb, t1_bx2, v1_bx2 // (2) (NL) +mad_x4_sat r0.a, r1.b, POW.a, POW.b // (2) (NH)*A+B mul_x4_sat r1.rgb, r0.a, r0.a // (3) (NH)^n +mad r1.a, t0.b, SPECK.b, SPECK.a // (3) specshadow mul_sat r0.rgb, r0, r1_bx2.a // (4) (NL)*diffshadow +mul_sat r0.a, r1.b, r1.a // (4) ((NH)^n)*specshadow mad_sat r0.rgb, r0, DIFF, v0 // (5) (NL)*shadow*diffcol+ambi +mul_sat r0.a, r0.a, t1.a // (5) ((NH)^n)*shadow*specmap mul_sat r0.rgb, r0, t3 // (6) diffmap*difflighting mad_sat r0.rgb, r0.a, SPEC, r0 // (7) result +mov r0.a, t3.a // (7) diffuse map alpha

Daniil Popov, desarrollador senior de Android:
i = 0x5f3759df - ( i >> 1 );
Este es un fragmento de una función que calcula la raíz inversa rápida de x. Dichos cálculos son necesarios en los motores de juego para calcular la iluminación del escenario. Este código ilegible se hizo ampliamente conocido después del lanzamiento de Quake III: Arena.
Cuando vi este código, por primera vez me di cuenta claramente de la brecha gigantesca entre el código legible y el óptimo.

Ilya Gribov, desarrollador front-end: “Recuerdo este código. Pensé: "¡Qué simple y conciso!)".
>>> comp_list = [x ** 2 for x in range(7) if x % 2 == 0] >>> print(comp_list) // [4, 16, 36]

Mikhail Yudin, desarrollador senior de Android: “Escribí un árbol rojo-negro como estudiante de segundo año en acm.timus.ru usando el libro de Corman, y algo salió disparado, y verifiqué esto para determinar la igualdad nula. Esta situación es imposible. Me escribieron que soy Kommersant (como verdadero, duro) ".
if (this == null)

Nikolai Ryabov, desarrollador senior de front-end: “De alguna manera, en mi primer trabajo relacionado con el front-end, donde todavía era un joven muy, muy verde, el mismo desarrollador novato me lanzó esta línea para pensar, con las palabras: "Amigo, he estado tratando de entender qué es y cómo funciona, ¡suframos juntos!" Como resultado, mi cabeza estaba ocupada solo con esto y después de un par de horas todavía me di cuenta de lo que era y lo que obtendríamos como resultado. Pero no pude explicarlo entonces.
const foo = Function.prototype.call.bind(Array.prototype.slice)
Ya mucho más tarde, comencé a usar este fragmento para entrevistas, y mostró excelentes resultados: una vez que tuve el problema de encontrar un buen desarrollador para transferirle todas mis competencias en mi trabajo anterior, y en una de las conferencias conocí a una persona notable y en el medio el café lo invitó a contar cómo funciona este código. Se las arregló, a diferencia de muchos candidatos a quienes entrevisté antes. Como resultado, estuvo a la altura de las expectativas cuando hice los arreglos para su trabajo. Y hasta el día de hoy me gusta lanzar este rompecabezas y mirar las expresiones faciales, aunque este código ya no es relevante en relación con el lanzamiento de los nuevos estándares ECMAScript ".
Y no solo el código
Quiero finalizar esta publicación citando al colega de Andrei Shodan , Aksyonov:
“En general, una historia generalmente no se limita a una línea de código. E incluso un pequeño fragmento en diez líneas es extremadamente raro. Y las historias más encantadoras, probablemente nunca sobre el código, sino principalmente sobre las personas, sobre cómo este código los afectó. Y qué tipo de línea de código estaba específicamente allí, o qué específicamente un estúpido error de dos caracteres no tiene importancia ".
Algunas de las historias que se cuentan aquí, se grabaron en video y se publicaron en nuestro canal de YouTube. Visítanos si te gusta el video.
Una vez más, felicitaciones a todos los programadores (y al mismo tiempo a aquellos que trabajan en estrecha colaboración con ellos). Pase este día agradable e interesantemente.
¡Y comparte en los comentarios las líneas e historias que más recuerdas!