E, novamente, o 256º dia do ano

Oi Duzentos e quinquagésimo sexto dia do ano estão em pleno andamento, e os caras de Avito e eu queremos parabenizar a todos que lêem este blog no dia do programador e mergulhar um pouco na nostalgia.


Sob o corte, lembramos em homenagem ao feriado nossas primeiras linhas de código. E também - o código e os programas que mais nos lembramos. E diga o porquê. E, claro, estamos ansiosos por suas histórias nos comentários!



Que tipo de linguagem de programação está na imagem?

Hoje somos nostálgicos, por isso escolhemos a COBOL para parabéns. Foi a primeira linguagem de programação padronizada (padronizada em 1960). Isso significa que um programa gravado em um computador pode ser compilado e executado em outro computador sem nenhuma modificação. Naquela época, essa era uma grande inovação, outras linguagens exigiam refinamento dos programas ao tentar executá-las em outro computador, muitas vezes era difícil e demorado.


Feliz dia do programador na COBOL é exatamente assim. (Obrigado pela excursão e código pik4ez ).


Sobre o que é este post?


A idéia do cargo nasceu durante a festa corporativa do verão, quando meus colegas e eu de repente começamos a conversar sobre os primeiros passos da programação. E Iseregin e eu decidimos coletar suas memórias e compartilhar com o público. Então ...


Primeiras linhas de código


Parece tão interessante nas primeiras linhas de código? Alguns também pensaram assim no começo.


Dev 1: Eu pensei que todos tinham a primeira linha de código, algo como:


!#/bin/bash echo "Hello World" 

Desenvolvedor 2: Em nossa área, foi mais cedo: MsgBox "Hello World" . Porque você ainda tinha que tentar encontrar um disco com o Linux.


A discussão, poder-se-ia dizer, já começou desde as primeiras observações no chat. E então obtivemos algumas respostas interessantes e detalhadas que queremos compartilhar. Foi o que os colegas da Avito nos disseram.


imagem

Andrey Shodan Aksyonov, chefe da infraestrutura de pesquisa: “As primeiras linhas de código que eu basicamente inseri no computador definitivamente não eram minhas. Esses foram alguns programas básicos estranhos que eu reimprimi em revistas (por causa de uma infância difícil, brinquedos de oito bits). Mas lembro exatamente como outras pessoas usaram meu programa pela primeira vez.

Esta foi a era do fim do DOS. Eu escrevi um programa assembler que capturou a tela no modo gráfico. Além disso, em contraste com tudo o que havia no "mercado", ela lidou com todos os modos de vídeo em geral, incluindo os hackers completamente insanos. Por exemplo, se o modo de operação VGA padrão fosse de 320x200 e 256 cores, as pessoas que usavam algum tipo de hackers vis e reprogramavam o controlador, que aciona os raios pelo tubo MDG, atingiam 360x240. Eu consegui escrever um programa que lidava com tudo isso, capturou a tela (memória de vídeo), salvou em um arquivo e, a partir desse despejo, você poderia habilmente .bmp salvá-lo como um utilitário offline separado. Eu trouxe esse programa até o fim, postei na Internet e esqueci com sucesso.

Quase 12 a 15 anos se passaram desde aquele momento. Eu recebi um email. Essa folha, como se Leo Tolstoi escrevesse, em três folhas - e essa é apenas a primeira frase. “Olá, sou caminhoneiro do Canadá. Usuário ativo do seu programa. Não tenho dinheiro, mas tenho cinco filhos. E encontrei o 486º computador no depósito de lixo, além de roubar alguns jogos antigos na Internet, e agora meus filhos estão jogando loucamente jogos diferentes nesse computador. Ao mesmo tempo, o jogo favorito deles não é capaz de salvar nada: é impossível salvar uma placa de honra comum, nem mesmo uma única pontuação máxima e nem uma captura de tela não pode ser feita, porque algum tipo de modo de dependência de drogas é usado. E seu utilitário faz um excelente trabalho nisso, e as crianças o usam constantemente. Sim, eu mesmo, acontece, entre vôos ... Então, como somos usuários ativos do seu programa antigo, decidi incentivá-lo. Aqui está um código de transferência de US $ 20 da Western Union. ” Eu praticamente chorei e decidi que no dia mais escuro, quando finalmente chegar, e vou passar fome, aqui vou pegar esse MTCN (código de transferência), descontá-lo e sair pela porta. Infelizmente, muitos anos se passaram desde então, então não se sabe onde está o MTCN agora. Talvez haja nos antigos arquivos de correio, se eu não os perdi durante esse período. Eu reconheço no dia mais negro.

imagem

Artyom Razinov, desenvolvedor líder de iOS: “Na quinta série, escrevi o código por conta própria no programa infantil Logo Mira, enquanto todos os outros caras mais bem-sucedidos jogavam jogos. Eu criei um programa e funcionou. Naquele dia, decidi me tornar um programador. "



imagem

Daniil Popov, desenvolvedor sênior do Android: s := width * height; “Era uma linha em Pascal que calculava a área do retângulo. O caso ocorreu em cursos de programação para alunos da oitava série. O que mais me impressionou foi o fato de eu poder dar comandos ao computador e os executar implicitamente. Uma espécie de mestre de máquinas. Desde então, eu realmente amo quando a sequência de ações (algoritmo) incorporada leva ao resultado. ”

imagem

Dmitry Belov, desenvolvedor sênior de back-end: “Este foi o primeiro pedido de freelancers estrangeiros. Alunos famintos, eu queria ganhar pelo menos um pouco de dinheiro, e não era tão importante no que escrever: quase não havia conhecimento, para estudar de qualquer maneira do zero.

Recebi um pedido para fazer um cartão flash animado. Eu tive que aprender um pequeno roteiro de ação. O Stackoverflow ainda não estava lá, tive que ler a documentação.

O cliente ficou satisfeito, consegui concluir o projeto imediatamente. Ele ganhou seus primeiros quinze dólares em freelance ".

imagem

Ilya Gribov, desenvolvedor front-end: “Eu gostava de programar na 8ª série da escola (Basic, Pascal), mas depois houve uma longa pausa. Ele voltou a esse negócio somente depois da universidade e teve que se lembrar muito!
Inverno, 6 horas da manhã, café forte, antes de ir trabalhar (então eu trabalhei em TI)

 static void main(String[] args) { System.out.println("!"); } 


Emoções: O QUE É String [] args ??? ”.

imagem

Vladimir Akimov, desenvolvedor sênior de front-end: “Minha primeira linha de código foi escrita porque eu realmente queria entrar no hangout de rap. Eu tinha cerca de 17 anos, não sabia como fazer rap e escrever música, e decidi entrar em uma equipe legal através do design.

Então ninguém estava envolvido na promoção de artistas independentes na Internet. Assim, os amigos desenham a capa, lançam o disco e distribuem para os amigos. E havia um site no MySpace onde você podia criar uma página de músico de maneira legal. Eu assisti como os caras do exterior fazem isso. Em algum momento, me deparei com um cara que morava na Alemanha e fiz uma página para Seryoga. Aquele que cantou "Black Boomer, lembra"? Eu decidi espionar como fazer isso. O MySpace estava deitado em mesas, peguei esta página inteira, entendi a idéia dele e a emprestei.

Minhas primeiras páginas eram semelhantes às páginas dele. Eu fiz um após o outro, tentei promovê-los. Então fiz amizade com uma equipe. Havia um designer que me convidou para escrever o código e tirou as fotos. Começamos a criar páginas do MySpace para todos os nossos populares artistas de rap russos. E então fui convidado a trabalhar no escritório do MySpace em São Petersburgo para trabalhar.
Então eu escrevi muitas linhas de código lá - do mesmo tipo, tabular: era CSS e layout, nada complicado. Agora, qualquer júnior descobrirá e o tornará mais legal. Mas foi um “uau”, porque trabalhamos com o IE5 e outros navegadores, para os quais tivemos que fazer muita mágica.

Se não fosse essa história, eu não estaria envolvido em programação, não viria para o design, não entenderia o que é ".

imagem

Konstantin Seleznev, desenvolvedor de back-end: “Meu colega de classe“ me viciou ”em programar na sétima série (verdadeiramente, como uma droga):
- Pss, cara, você quer alguma programação? - algo assim, ele me disse, me entregou um disco com o Borland Development Studio e uma enorme coleção de artigos sobre o Delphi.

Mais tarde, em um desses artigos, encontrei o seguinte: “Vamos conhecer o usuário. Por exemplo, de repente exibimos a mensagem "Está na hora de dormir" e ... cortamos o monitor! A manivela não poderá ligá-la ... ". Eu tentei o código fornecido no artigo e tudo deu certo para mim! Eu me senti como um hacker de verdade!

No entanto, depois disso, tive que reiniciar o computador, porque realmente não consegui ligar o monitor novamente. ”

 procedure TForm1.Button1Click(Sender: TObject); begin MessageDlg(' .   .     !', mtInformation, [mbOk], 0); SendMessage(Application.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, 0); end; 



E aqui estão as histórias do principal podcast Podlodka.


imagem

Stas Tsyganov, chefe de desenvolvimento móvel do Tutu.ru: “Minha mãe trabalhava como professora de ciências da computação e eu tive acesso aos computadores muito cedo. E minha primeira experiência em programação foi o Cucaracha para MS-DOS. Aprendi com interesse que ela ainda está viva e até portada para o Windows.

    5   


E o primeiro código que eu tinha era algo assim. ”

imagem

Egor Tolstoy, gerente de desenvolvimento de plataformas de aplicativos da Avito: “Cerca de dez anos vim visitar meu irmão mais velho, que tinha seu primeiro computador, de volta ao MS-DOS. Além dos cortes desenfreados no primeiro GTA (na localização russa, foi chamado o belo nome "Avtovor") e no Duke Nukem, descobrimos a programação para nós mesmos. A matemática não me atraiu muito na época, mas ramificação e desenho lógicos estavam certos! Portanto, o primeiro programa foi a geração de composições suprematistas a partir de círculos e linhas: CIRCLE(10, 10), 50 ”.

imagem

Katya Petrova, Chefe de Desenvolvimento, Frontend Architecture, Avito: “Forçar uma tartaruga nos mundos dos logotipos a desenhar círculos e escrever“ Hello world ”em Pascal nas aulas de ciência da computação foi, é claro, divertido e informativo. Mas foi ainda mais divertido na 8ª série dirigir chefes no WoW Classic (que ainda não era popular). Então, aqui estão minhas primeiras linhas de código realmente úteis. "

 #showtooltip Regrowth /cast [@mouseover,exists,help][@player] Regrowth(Rank 5) 



imagem

Zhenya Catella, chefe de desenvolvimento móvel da Yandex.Transport: “Em algum momento da 8ª ou 9ª série, fiquei interessado em programação, então meus pais me compraram um livro sobre o Turbo Pascal. Ainda me lembro que ela era vermelha. E no começo havia coisas simples, como ciclos e condições. E então, ao que parece, o primeiro capítulo terminou com uma história sobre o que é recursão. E foi necessário resolver o quebra-cabeça sobre a torre de Hanói. Portanto, exceto no Hello Worlds, ele pode ser considerado meu primeiro programa. ”

A linha de código mais memorável


Obviamente, a discussão não se limitou às primeiras linhas de código. E também conversamos sobre o código, que por várias razões realmente lembramos.


imagem

Andrey Shodan Aksyonov, chefe da infraestrutura de pesquisa: “Era uma vez, quando eu trabalhava no desenvolvimento de jogos, tola- mente escrevíamos nosso próprio mecanismo com as mãos. Em geral, isso não pode ser feito, é impossível, mas ninguém nos disse isso. Portanto, escrevemos do zero nosso próprio mecanismo e todas as ferramentas para o desenvolvimento do jogo, construímos esse jogo e conseguimos fazer tudo isso em três anos. Bem, e em particular durante esse igrostroy, eu inventei e fiz esse tipo de finta inteligente com meus ouvidos. Na primeira geração de aceleradores gráficos programáveis, onde os shaders foram acoplados, houve um curto período em que a GPU poderia ser programada em linguagem assembly e estabeleceu instruções para os slots com as mãos. Em seguida, esse recurso foi desativado, apenas o HLSL foi deixado, mas no início era possível. Então, conseguimos usar quatro texturas de cada vez em uma passagem (isso é trivial) e, ao mesmo tempo, contar a iluminação, um mapa de irregularidades, sombras projetadas e outras coisas (mas ninguém sabia como). Nossa empresa então tinha, se não 3 know-how, então 2 know-how, esse era o principal. Depois de um ano ou dois, quando a tecnologia avançou e perdeu sua relevância, com a permissão das autoridades, publiquei um artigo no livro ShaderX4 sobre isso. Era uma solução de engenharia honesta muito bonita, pela qual não tenho vergonha até hoje. Mas essa não é uma linha de código, mas dez inteiras!

  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 



imagem

Daniil Popov, desenvolvedor sênior do Android:

 i = 0x5f3759df - ( i >> 1 ); // what the fuck? 


Este é um trecho de uma função que calcula a raiz inversa rápida de x. Tais cálculos são necessários nos mecanismos de jogo para calcular a iluminação do palco. Este código ilegível tornou-se conhecido após o lançamento do Quake III: Arena.

Quando vi esse código, pela primeira vez percebi claramente a gigantesca lacuna entre o código legível e o ideal.

imagem

Ilya Gribov, desenvolvedor front-end: “Lembro-me deste código. Pensei: "Como é simples e conciso!)".
 >>> comp_list = [x ** 2 for x in range(7) if x % 2 == 0] >>> print(comp_list) // [4, 16, 36] 



imagem

Mikhail Yudin, desenvolvedor sênior do Android: “Eu escrevi uma árvore de vermelho-preto como estudante do segundo ano no acm.timus.ru usando o livro de Corman, e algo saiu do céu e verifiquei isso por igualdade nula. Esta situação é impossível. Eles escreveram para mim que eu sou Kommersant (como verdadeiro, duro). ”

 if (this == null) 



imagem

Nikolai Ryabov, desenvolvedor sênior de front-end: “De alguma forma, no meu primeiro trabalho relacionado ao front-end, onde eu ainda era um júnior muito, muito verde, o mesmo desenvolvedor iniciante jogou essa linha para pensar comigo, com as palavras: "Amigo, estou tentando entender o que é e como funciona - vamos sofrer juntos!" Como resultado, minha cabeça estava ocupada apenas com isso e depois de algumas horas eu ainda percebia o que era e o que entraríamos em confusão como resultado. Mas não pude explicar isso então.

 const foo = Function.prototype.call.bind(Array.prototype.slice) 


Já muito depois, comecei a usar esse trecho para entrevistas, e ele mostrou excelentes resultados: uma vez que tive o problema de encontrar um bom desenvolvedor para transferir para ele todas as minhas competências em meus trabalhos anteriores, e em uma das conferências conheci uma pessoa notável e entre outras. o café o convidou para contar como esse código funciona. Ele conseguiu, ao contrário de muitos candidatos que eu entrevistei antes. Como resultado, ele cumpriu totalmente as expectativas quando eu organizei o seu emprego na época. E até hoje eu gosto de jogar esse quebra-cabeça e olhar para expressões faciais, embora esse código não seja mais relevante em conexão com o lançamento dos novos padrões do ECMAScript. ”

E não apenas o código


Quero terminar este post citando o colega de Andrei Shodan , Aksyonov:


“Em geral, uma história geralmente não se limita a uma linha de código. E mesmo um pequeno trecho em dez linhas é extremamente raro. E as histórias mais encantadoras, provavelmente nunca sobre o código, mas principalmente sobre as pessoas, sobre como esse código as afetou. E que tipo de linha de código estava especificamente lá ou que erro estúpido de dois caracteres é completamente sem importância. ”

Algumas das histórias contadas aqui são gravadas em vídeo e postadas em nosso canal no YouTube. Passe por aqui se você gostou do vídeo.


Mais uma vez, parabéns a todos os programadores (e ao mesmo tempo aqueles que trabalham em estreita colaboração com eles). Passe este dia de forma agradável e interessante.
E compartilhe nos comentários as linhas e histórias de que mais se lembra!

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


All Articles