Programação para não programadores. Biografia de junho

Prefácio: Esta é uma história sobre livros para quem decide aprender programação por conta própria. Mas como a leitura da lista de livros seria entediante, decidi complementá-la com minha biografia.

Então ... eu tenho mais de quarenta anos. Sou linguista pela educação, trabalho no campo científico. Eu nunca me deparei com programação, embora formalmente fiz aulas de informática na escola, que na verdade se resumiram a digitar um programa no BASIC a partir de um manual de treinamento e a ver o misterioso DOS no computador do professor. Ah, sim, ainda havia um conhecimento muito breve de Fokal, mas, novamente, tudo estava estritamente de acordo com o manual de treinamento.



Como sou orfanato, depois da escola consegui entrar na universidade local sob a cota da Faculdade de Agricultura. O estudo terminou exatamente um ano depois devido à aversão à disciplina escolhida. Na verdade, é difícil para mim imaginar que a maioria das pessoas com dezoito anos é capaz de determinar com precisão seus objetivos profissionais e de vida. Li biografias de pessoas como Ilon Mask, que começou a programar desde o berço, ou o fundador da Teranos, que já havia montado seu laboratório de química em casa aos cinco anos de idade.

A maioria das pessoas, como eu, no entanto, é uma manada de animais seguindo as tendências. Nós não entramos na universidade por causa de um desejo de conhecimento, mas simplesmente porque todo mundo faz isso. Bem, ninguém também quer se juntar ao exército. Existem mais indivíduos sortudos que propositalmente ingressam em universidades promissoras para especialidades promissoras, seguindo os conselhos de seus pais, mas isso é novamente uma questão de sorte, conexões e dinheiro. Quando criança, eu adorava assistir “Homens e mulheres inteligentes” e, francamente, era difícil para mim imaginar que, por exemplo, crianças que cumpriam sentenças ou que sofrem de alcoolismo poderiam ter participado em massa deste programa.

O país estava se preparando ativamente para a segunda campanha chechena, e todas as pessoas inquietas e ociosas foram massivamente transportadas para postos de recrutamento. Decidi não tentar a sorte e fui para o outro lado do país, longe do escritório militar de registro e alistamento, para trabalhar como trabalhador no porto. Tenho um cérebro bastante lento, portanto, somente após vários anos de comunicação produtiva com a maioria intelectual “ferida” e com seus irmãos mais bem-sucedidos que já embarcaram no caminho do sucesso, percebi que a perspectiva de ser um verme impotente no fundo da sociedade é um prazer muito duvidoso . O ensino superior era a única porta da escada social.

Então, entrei no linguista. Porque Porque a universidade local ensinou lingüística e porque o corpo docente alvo tinha vagas no orçamento. Linguística ... Uma especialidade muito interessante. Lingüística é uma ciência sobre a estrutura de uma língua, mas, como regra, a grande maioria dos linguistas tem dificuldade em dominar sua língua nativa, sem mencionar as línguas estrangeiras. O pai da linguística moderna Noam Chomsky fala apenas inglês e entende algumas frases em hebraico, no entanto, isso não o impediu de desenvolver uma poderosa teoria da gramática das línguas, usada ativamente por milhões de pessoas que trabalham no campo da linguística.

E esse recurso da linguística foi minha chance de passar para o próximo passo. Se uma universidade formar centenas de especialistas do mesmo tipo com um conjunto básico de conhecimentos, de acordo com os requisitos do Ministério da Educação, a melhor maneira de se destacar da multidão seria aprender algumas línguas estrangeiras. Como não queria perder a universidade, tive que largar o emprego no porto e conseguir um vigia noturno na escola. 4000 rublos por mês. Todos os dias, aveia e massas. Mas, por outro lado, há muito tempo livre que eu fazia nos trabalhos de casa e aprendia especialidades adicionais. Além do inglês ensinado na universidade, eu decidi aprender francês. Porque Porque é a língua oficial da diplomacia, uma segunda língua na ONU e, no final, a língua dos países economicamente desenvolvidos.

Tomando um tutorial de francês em minhas mãos, pela primeira vez na minha vida, perguntei-me: na verdade, eu tenho conhecimentos de idiomas? Como posso ter certeza de que ler um livro e fazer todos os exercícios não será uma perda de tempo? O trabalho de um vigia com um salário mínimo poderia ser trocado pela posição de comerciante em um shopping próximo ou pelo lugar de um trabalhador de armazém em uma cervejaria, mas nesse caso eu não teria tempo para a auto-educação. De um modo geral, dei um passo em direção ao desconhecido.

Trabalhe um dia em três. Reescrever palestras. Lição de casa. Curso. Tutorial de francês. Dois anos depois, cheguei a um nível que me permitia ler pequenos artigos de jornal e escrever ensaios diretos. O grande problema era falar e ouvir, então tive que me matricular em cursos de idiomas e sentar na farinha de aveia de manhã à noite. Um ano depois, passei no exame no nível B2, que permite a entrada em universidades estrangeiras.

A questão da capacidade de linguagem permaneceu em aberto. Por que eu aprendi francês? Por causa da perseverança ou por causa das habilidades genéticas? Ou juntos por causa de ambos? Meus pensamentos foram interrompidos por uma ligação para o reitor. “Você tem DELF B2? Tudo bem. Assinamos um acordo com a Universidade de Brest sobre o intercâmbio de estudantes. Você ficará por três meses. "

Na companhia de vários majores provinciais, fui à Bretanha. Bolsa de 500 euros por mês, o fim de aveia. Brest é uma cidade provinciana de escândalo médio, na qual, exceto o porto, não há entretenimento. Meus companheiros cuspiram em seus estudos desde o primeiro dia e foram para Paris. E fui regularmente a palestras, depois do almoço, no laboratório, onde solicitava como assistente voluntariamente. O contato com os professores foi estabelecido.

Retorno ao interior da província nativa. O francês de conversação tornou possível entrar no departamento de cooperação internacional em sua universidade de origem. Mais dois anos. Graduação. Lançamento. Eu tenho trinta anos O escritório de registro e alistamento militar me apresenta uma identificação militar marcada como "reserva comum". Vou para Rennes para um programa de bolsas de mestrado. 750 euros por mês, alguns anos de palestras, exames e estágios. Oferecem-me para passar por uma competição por um contrato estatal para escrever uma dissertação. O concurso foi concluído com sucesso. Quatro anos, 1.600 euros por mês após impostos. Tese é defendida. Estou indo para Xangai, este é o meu primeiro pós-doutorado.

1000 euros por mês. Para a China e mesmo para Xangai, um salário aceitável é bastante aceitável. No entanto, este é o meu teto. O crescimento da carreira é possível, mas exigirá um esforço tremendo. O candidato ao cargo de professor assistente deve ter um estoque de várias dezenas de publicações em periódicos dignos e experiência em vários países. Um período de pensamento pesado começou. Apesar de anos de esforço e diploma, acabei no nível que eu teria sem o francês com aveia. Além disso, apesar do profundo conhecimento em lingüística, não gostei dessa profissão.

A perspectiva de ser um eterno pós-doutorado e fazer negócios não amados não me agradou, e muitas vezes comecei a ficar deprimido. Para colocar meu cérebro em ordem, comecei a praticar esportes. Primeiro dia Running 100 metros. Eu estou morto Eu nunca corri na minha vida, contornei as barras horizontais. Eu era o alvo favorito dos punks. No entanto, os cem metros deram frutos: a depressão não aconteceu. O cérebro começou a trabalhar e analisar a realidade.

O filme “A Touch of Sin”, um episódio com um operário de fábrica se jogando pela janela por causa da desesperança. Eu posso correr 1 quilômetro. Estou lendo um artigo crítico sobre o filme. Três quilômetros. O roteiro foi baseado em eventos reais que ocorreram nas fábricas de Fokskonna, conhecidas por suas condições de trabalho desumanas. Cinco quilômetros, quadris de chumbo, mas parece que sou capaz de correr mais alguns. Terry Gough anuncia o downsizing do Foxcon e a criação de uma empresa totalmente automatizada.

Eu parei Eu tenho pós-queima. Aqui está, a tendência. O mundo está se movendo rapidamente em direção à robotização total. O Carrefour substitui os caixas por scanners automáticos. O Cathay Bank está reformando seu departamento de atendimento ao cliente da mesma maneira. Trabalhadores do metrô de Paris em greve devido à abertura de uma nova linha automatizada. Eu tenho que começar a aprender programação ou ficar fora do ar para sempre.

Sempre acreditei sinceramente que todas as pessoas têm seus próprios limites no campo da aquisição de conhecimento. E sempre achei que a programação é uma área restrita na qual não tenho permissão para entrar. Apesar da minha idade, lembro-me muito bem da sensação de embotamento que eu sentia toda vez que digitava programas no manual de instruções no teclado dos computadores das escolas. Os camaradas administraram a tarefa em cinco minutos e até conseguiram escrever algumas linhas adicionais que fizeram o computador chiar com um alto-falante e piscar com o cursor. No entanto, suei de lado e não consegui nem executar o programa a partir do manual de treinamento.

O esporte e o trabalho de longo prazo como vigia mudaram minha atitude em relação a essa questão. Se eu conseguir me superar e correr oito quilômetros, se puder pacientemente me sentar em um tutorial de francês e escrever horas de exercícios, certamente aprenderei programação. Bem, se não posso, pelo menos vou tentar.

Então, o que ensinar, por onde começar? Quora, StackExchange, Habr. As línguas mais populares e populares: Python, Java, JavaScript. Definitivamente, não quero aprender programação na web. Esculpir belos locais no cenário de fumaça chinesa fedorenta e uma praia repleta de garrafas de plástico é, na minha opinião, o auge da hipocrisia. A realidade virtual deve ser verdadeira.

Em geral, a escolha recaiu sobre Python. Todo mundo diz que é uma linguagem muito fácil. É exatamente disso que eu preciso. Então, o livro de Dawson. Cheguei aos ciclos e estou cansado de tudo. Em algum lugar dentro de mim havia uma consciência de insatisfação com o curso escolhido. Além disso, o autor optou por escrever o jogo como o principal motivador para os alunos de línguas. Por um lado, a guerra na Síria, milhões de refugiados, terrorismo, aquecimento global. E neste momento, adultos com uma sólida educação fundamental estão sentados em poltronas e escrevendo jogos. Sim ... Mas, no entanto, o livro de Dawson ainda é muito distinto. E o IDE oferecido com o livro facilita o conhecimento do idioma.

Em termos de conhecimento, não aprendi nada útil com o livro, pelo contrário, tinha ainda mais perguntas. Por exemplo: como o sistema operacional é gravado e como é gravado no disco rígido. Como as mensagens são transmitidas pela rede? Por que os gráficos têm gráficos ruins e o Windows possui 16 milhões de cores? O livro de Dawson teve que ser deixado de lado e novamente perdido em pensamentos.

Há um filme alemão chamado Who I Am. O herói do filme quer se juntar à companhia de hackers e eles pedem que ele demonstre seu conhecimento. Eles dizem: lá tem uma central elétrica, desligue-a. Um candidato a hackers se senta em um laptop e digita o código no teclado. As pessoas atrás dele respeitosamente dizem: oh, você sabe como baixar o nível! Você está conosco. Esta frase está profundamente enraizada no meu cérebro. Nível baixo ... Parece que esta é a chave para as respostas às minhas perguntas.

Então, você precisa aprender a programação do básico, do assembler. Quora, StackExchange, Habr. Um conjunto de livros sobre montador. Algumas semanas para se familiarizar com cada livro. O abismo da desesperança. Cada livro sugere aprender assembler a partir de uma perspectiva de linguagem de alto nível, na maioria das vezes C. Pedagogicamente, isso está incorreto. É assim que os alunos de russo devem dominar a sintaxe de frases complexas e depois seguir para o alfabeto. A partir daqui, a propósito, o segundo problema segue: o autor assume que o assembler não é um noob e sabe o que e onde clicar para iniciar o depurador e, de fato, em qual ambiente de desenvolvimento você deve escrever código. Ah, sim: os livros didáticos se concentram principalmente no FASMe ou no TASMe quando se trata de autores russos. Eu nunca vi o Linux, portanto, no FASM, há uma cruz. O TASM não possui um ambiente de desenvolvimento coerente, e é por isso que também é "não".

Várias semanas de pesquisas online foram bem-sucedidas. Encontrei um livro que poderia ser colocado sob o título "alteração da mente". Kip Irwin, sétima edição. Por que este livro é tão bom? Irwin é um músico por formação e com uma tese, que não o impediu de entrar na faculdade novamente em uma idade madura como programador. Ele estudou a língua por conta própria como um hobby, então entende perfeitamente todas as dificuldades que um iniciante pode encontrar. Seu livro explica tudo: onde clicar, o que ver, como instalar. Um excelente curso introdutório sobre Visual Studio, IAMM, DOS e um pouco de C ++. E o principal é exercícios.

Sou pós-doutorado, trabalho em um laboratório livre de poeira, meu chefe não fica entediado e não me faz trabalhar horas extras. O período noturno das seis às doze é dedicado à montagem e programação em geral. O primeiro exercício é como minha primeira corrida de cem metros. O principal é perceber que a programação e, em geral, a busca de uma solução para um problema é um processo não-aceitável e não-linear. Esse processo requer custos imprevisíveis: talvez alguns minutos ou talvez alguns dias. O principal é lembrar o seu sucesso anterior: se da última vez que decidi me exercitar com dois asteriscos, dessa vez também decidirei.

Juntamente com o primeiro problema resolvido, chegou-se ao entendimento de que a programação não pode ser ensinada. Você pode aprender algumas centenas de algoritmos, mas ainda chegará o dia em que você precisará criar algo novo. E então nenhum Donald Knut pode ajudar. É possível desenvolver habilidades de programação? Lomonosov disse que o melhor exercício para o cérebro é a matemática. Portanto, além do assembler, era necessário atualizar o conhecimento sobre matan e começar a estudar matemática discreta. Mais uma vez a farinha de escolha, mas mais simples. Matanalysis, livro de Stuart, sexta edição. Matemática Discreta, Kenneth Rosen, Sétima Edição.

Existem muitas discussões na rede sobre a inutilidade do acma. Estou extremamente satisfeito por ter aprendido o básico deste idioma. A programação de baixo nível torna possível entender coisas não óbvias para linguagens de alto nível, como a operação da pilha de memória e por que ocorre o estouro, qual é o perigo de recursão, a importância fundamental de uma lista vinculada para sistemas de armazenamento de memória, etc. O principal é que o ACM ensina uma abordagem enxuta aos recursos do computador e, consequentemente, ao consumo de energia. Se eu fosse bilionário, adoraria investir no desenvolvimento de sistemas como o MenuetOS. Bem, ou pelo menos apertou a mão de seus desenvolvedores.

Nove meses no Irvine, conhecendo o FreeDOS, aprendendo a biblioteca C padrão e os primeiros passos em C ++. Uma breve introdução às tecnologias SSE no Kusswurm Handbook. O chefe me chama em seu escritório e declara que meus êxitos duvidosos no campo científico não permitem que ele prorrogue meu contrato. Não é de surpreender: da manhã à noite, meus colegas suam os projetos, esquecem suas vidas pessoais e lutam até a morte com editores e revisores de cada artigo, e fico fora do tempo contratado no laboratório e corro para casa para me dedicar à montagem, e geralmente penso mais em programação do que sobre o trabalho.

Em geral, tenho seis meses antes de sair e preciso adicionar gás. Pondo de lado a matemática discreta. Preciso começar a aprender uma linguagem de alto nível e a escolha cai, naturalmente, em C ++. Já estou em "você" com o Visual Studio, então tudo deve ser fácil. A propósito, C é um subconjunto de C ++, então você pode matar dois coelhos com uma cajadada só.

Cruzes. Na minha opinião, existem alguns livros didáticos dignos: Prata e Deitel. Prata é bastante detalhada em alguns lugares. O Deitel é simples, mas explica tudo do ponto de vista da OOP. Com esses livros didáticos, minha primeira imersão no mundo dos objetos começou. Como meu cérebro estava irremediavelmente corrompido pelo montador, usei o livro de Deutel apenas como fonte de informações adicionais. O autor dedica um capítulo inteiro à descrição da “força, poder e beleza” da OLP, sem se preocupar em descrever as falhas do conceito. Por exemplo, Irwin diz abertamente na introdução que escrever software de linguagem assembly é uma ideia doentia, mas todos devem conhecer assembler. Prata também não vai longe demais e descreve a OLP com moderação. Deitel diz: OOP é legal, então vamos usá-lo. 2 + 2? Não há problema: crie uma classe, alguns construtores, métodos de herança e operadores de sobrecarga. Resposta: 4.

Um homem foi a um restaurante e pediu espaguete. O garçom trouxe uma colher, um garfo e um canudo. O cliente pensa: bem, como eles trouxeram um tubo, ele deve ser usado. E começa a chupar, por sua vez, massas. Simples, poderoso e bonito. Isso não é uma crítica ao POO, apenas me parece que tudo tem suas próprias áreas de aplicação e limitações. OOP provavelmente é bom em gráficos, onde cada objeto no visor corresponde a um objeto criado a partir da descrição na classe. Mas aqui me lembro do livro de Abrash, que escreveu jogos em puro assembler. Ou Xavier Niel, proprietário da operadora de celular francesa Free. Ele fundou a escola "42", onde os candidatos, após vários meses de preparação, são convidados a escrever um videogame em C. Você pode ficar sem OOP.

Outro problema de linguagem são os ponteiros. Centenas de artigos e cartas raivosas ao editor também são dedicadas a este tópico. Um ponteiro de montador é uma coisa muito simples e não requer nenhum cérebro especial para entender. Implementar ponteiros em C / C ++ é realmente um problema. Não quero me debruçar sobre os meandros, só quero dizer que ponteiros com castas e uma dúzia de asteriscos entre parênteses realmente causam um desmaio.Por que você não conseguiu criar algo mais inteligível como ESI / EDI e colchetes?

Uma semana antes de sair. Linguista. Mais do que ensino superior. Criatura absolutamente inútil no mercado de trabalho. Eu tenho uma escolha: faça uma pesquisa de emprego ou gaste o dinheiro acumulado em viagens e lazer. A China ainda é um país bonito. Rodovia Hansu, Qinghai, Xinjiang, Karakorum. Meu currículo enviado há alguns meses ficou sem resposta. Estou sentado no laboratório e navegando no site da universidade. "O laboratório de inteligência artificial está procurando pessoas com mestrado e habilidades de programação." Eles me respondem em cinco minutos. Encontro em uma hora.

O chef está interessado no meu passado e faz algumas perguntas sobre a minha motivação. Ele é estatístico em treinamento, nunca programou, então liga para o pós-doutorado para me testar. Algoritmos para converter frases e encontrar palavras são fáceis. Métodos genéticos e modelos de Markov ... um zero completo. O chefe me diz: você tem exatamente o conhecimento que uma pessoa autodidata comum poderia ter. Assembler não conta, é inútil. Mas isso me dá uma chance, porque eu tenho conhecimento de línguas estrangeiras e capacidade de aprender. Ele está trabalhando no corpus da língua chinesa e planeja expandir para as línguas indo-européias. Um pós-doc próximo diz que você precisa aprender padrões. A OLP é inevitavelmente como o colapso do imperialismo ...

Então, o primeiro dia. Ambiente de desenvolvimento - Visual Studio. Língua - Com Sharp. Minha tarefa é estudar o software em que eles começaram a trabalhar há dez anos. A linguagem da sintaxe é próxima do C ++, mas existem muitos métodos desconhecidos para mim, então, novamente, tenho que procurar um livro e resolver os exercícios. Desta vez, a escolha recai no livro búlgaro escrito pelos fundadores da Telerik. Um excelente livro para quem deseja aprender linguagem e algoritmos ao mesmo tempo.

A propósito, Prata descreveu filas e pilhas, mas isso foi feito em um estilo não-imperativo: eles dizem: vamos resolver esse problema com a ajuda da pilha. E que tipo de pilha é e de onde veio não é conhecido. Os búlgaros descrevem cada algoritmo e explicam que gama de tarefas pode ser resolvida com a ajuda deles. Uma vez, li os tópicos do StackExchange no início da minha juventude e muitas vezes caíam em estupor por causa de frases como "árvores negras e vermelhas". Agora me deparo com isso, mas pelo menos imagine o que é uma "árvore" em geral. O livro dos búlgaros teve que ser complementado pelo livro do polonês Marcin Yamro. Algoritmos limpos, tudo é simples e claro. Padrões: Judith Bishop.

Inteligência artificial e o corpo da língua chinesa. Sharpe não é suficiente. Precisa aprender o banco de dados. SQL, referência Agarwal. Ótimo livro, explicações claras. Algoritmos e bancos de dados são seguidos pelo WPF e WPF Cookbook de Petzold. O XAML é fácil de aprender, mas as ligações e MVVMs que o acompanham ainda não são entendidas.

Um ano de trabalho no desenvolvimento da inteligência artificial como um júnior. Ou seja, no ambiente acadêmico não existe um engenheiro de software. Somos todos assistentes de pesquisa. Todo mundo tem seu próprio projeto, e como ele será implementado é um assunto pessoal de todos. Eu já mencionei que meu chefe nunca programava. Para ele, o principal requisito é a integração com software previamente escrito, isso é tudo. Às vezes, converso com colegas que trabalhavam anteriormente em um ambiente corporativo. Aparentemente, temos um ambiente descontraído, tudo é dispensado sem verificar a qualidade do código. Padrões juntam poeira em uma prateleira.

Ainda não sei se quero continuar trabalhando como programador no futuro e procurar um emprego mais bem remunerado em uma empresa privada, mas já tenho certeza de que não quero fazer IA. Como dizem nossos parceiros americanos, a IA é um hype de 99%. Fraude. Terry Gough certamente será capaz de automatizar a correia transportadora da Foxconn. Trabalhadores do metrô, caixas em supermercados e funcionários de call center também congelam porque esse é um trabalho de algoritmo. Um computador, no entanto, nunca substituirá um professor, um médico ou um engenheiro. E eu pessoalmente não confio no robô para controlar meu carro.

Ah, esqueci: sou lingüista e ainda inútil no mercado de trabalho. Onde ele está, a tendência? O que você precisa aprender para se manter à tona? Bem, eu vou ver as notícias novamente. Sim, os canadenses prenderam a filha do proprietário da Huawei. Os alemães estão preocupados com a vulnerabilidade dos sistemas de telecomunicações estatais à ameaça chinesa. A Nokia ainda não atingiu o nível tecnológico da Huawei, então o dilema está se formando na Alemanha: ou espere alguns anos para que as empresas locais dêem à luz um substituto decente para os produtos chineses e, ao mesmo tempo, ponham fim ao salto econômico. Ou atualize a rede móvel local para 5G, confiando apenas nos produtos potencialmente inseguros dos comunistas. Parece-me que devo começar a cavar nessa direção. C, Linux, redes, engenharia elétrica, padrões de telecomunicações. Este é o meu próximo passo.

Conclusão Todas as perguntas que comecei a fazer a partir do momento em que o tutorial em francês foi aberto pela primeira vez permaneceram sem resposta. É possível desenvolver a capacidade de idiomas ou é uma característica inata de uma pessoa? Lógica, abstração e programação são um problema semelhante. Os neurofisiologistas afirmam que o hemisfério esquerdo do cérebro é precisamente responsável pelas habilidades de linguagem de uma pessoa e por sua capacidade de raciocinar logicamente. Meu cérebro foi inicialmente propenso a atividades analíticas ou foi o resultado de circunstâncias da vida? Por que eu era uma criança apática sem nenhum interesse e, quando passei dos vinte anos, subitamente ganhei perseverança e capacidade de absorver volumes de informações bastante sensíveis?

A questão não é de forma alguma ociosa, porque os caixas dos supermercados, após as demissões em massa, terão que se adaptar de alguma forma às novas condições. Se o pensamento lógico é o resultado do treinamento, os caixas não precisam se preocupar. Os programadores atuais terão que se preocupar por causa do aumento da concorrência. Se o pensamento lógico estiver codificado com genes, o governo terá que se preocupar, porque os caixas terão que alimentar alguma coisa. Bem, todos os tipos de combatentes pela igualdade e igualdade de oportunidades para todos também precisarão de alguma forma chegar a um acordo com essa verdade desconfortável.

Bem, à custa de objetivos na vida. Os leitores deste artigo devem ter uma sensação de perplexidade: uma testa saudável, dizem eles, mas ainda está correndo nos estagiários. A realização do que eu gostaria de fazer veio depois que meu cientista me apresentou o livro “O homem que plantou as árvores”, de Jiono. Depois disso, ataquei a publicação de nosso cientista Zimov in Nature, descrevendo o primeiro projeto de geoengenharia no leste da Sibéria. Ainda há um maravilhoso trabalho de zoólogos de Novosibirsk, liderando trabalhos de adaptação de leões às condições do inverno polar. Eu gostaria de fazer exatamente isso. Por 20.000 rublos por mês.

Boa sorte a todos!

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


All Articles