Minha decepção com o software


A essência do desenvolvimento de software
"Precisamos fazer 500 furos na parede, então eu projetei uma broca automática." Ele usa engrenagens elegantes e precisas para ajustar continuamente a velocidade e o torque, conforme necessário.
- Ótimo, ela tem um peso ideal. Carregamos 500 dessas brocas no canhão que fizemos e atiramos na parede.

Faço programação há 15 anos. Ultimamente, porém, durante o desenvolvimento, não era costume pensar em eficiência, simplicidade e perfeição: até o ponto em que me sinto triste pela minha carreira e pela indústria de TI como um todo.

Por exemplo, carros modernos operam, digamos, 98% do que o projeto atual do motor permite fisicamente. A arquitetura moderna usa uma quantidade precisamente calculada de material para cumprir sua função e permanecer seguro nessas condições. Todas as aeronaves convergiram para o tamanho / forma / carga ideais e basicamente parecem iguais.

Somente no software é considerado normal se o programa for executado no nível de 1% ou mesmo 0,01% do desempenho possível. Ninguém parece ter nenhuma objeção. As pessoas têm até orgulho de quão ineficiente é o programa, como "por que se preocupar, os computadores são rápidos o suficiente":

@tveastman : Eu corro um programa Python todos os dias, ele é executado em 1,5 segundos. Passei seis horas e reescrevi no Rust, agora ele roda em 0,06 segundos. Essa aceleração significa que meu tempo será recompensado em 41 anos, 24 dias :-)

Você provavelmente já ouviu este mantra: "O tempo do programador é mais caro que o tempo do computador". Isso significa que estamos gastando tempo com o computador em uma escala sem precedentes. Você compraria um carro com uma vazão de 100 litros por 100 quilômetros? Como cerca de 1000 litros? Com computadores, isso acontece o tempo todo.

Tudo é insuportavelmente lento


Dê uma olhada: os computadores portáteis são milhares de vezes mais poderosos do que aqueles que trouxeram uma pessoa para a lua. No entanto, todo segundo site não pode fornecer rolagem suave de 60 FPS no mais recente MacBook Pro de última geração. Consigo jogar confortavelmente, assistir a vídeos em 4K, mas não rolar páginas da web! Tudo bem?

O aplicativo de email da Caixa de entrada do Google no navegador Chrome do mesmo Google leva 13 segundos para abrir um email de tamanho médio :


Também anima formulários brancos vazios em vez de mostrar seu conteúdo, porque esta é a única maneira de animar algo em uma página da web com desempenho decente. Não, não 60 FPS, mas "o mais rápido possível nesta página". Estou ansioso pelo que a comunidade da web oferecerá quando os monitores de 120 Hz se tornarem mainstream. Eles mal conseguem lidar com 60 Hz.

A atualização do Windows 10 leva 30 minutos . O que pode ser feito por tanto tempo? Este tempo é suficiente para formatar completamente minha unidade SSD, baixar a versão mais recente e instalá-la cerca de 5 vezes seguidas.



Pavel Fatin : Digitar no editor é um processo relativamente simples, de modo que mesmo o 286 poderia fornecer um processo de digitação bastante suave.

Nos editores de texto modernos, os atrasos na digitação são maiores do que no Emacs de 42 anos. Editores de texto! O que poderia ser mais fácil? Para cada pressionamento de tecla, você só precisa atualizar a pequena área retangular na tela, e os editores de texto modernos não podem fazer isso em 16 ms. E isso é muito tempo. MUITOS. Um jogo em 3D preenche a tela com centenas de milhares (!!!) de polígonos pelos mesmos 16 ms e também processa entradas, reconta o mundo e carrega / descarrega dinamicamente recursos. Como assim?

A tendência é que o software não se torne mais rápido e mais funcional. Temos equipamentos mais rápidos nos quais o software com as mesmas funções alterna mais lentamente do que antes. Tudo funciona muito mais devagar que a velocidade máxima. Você já se perguntou por que seu telefone é inicializado de 30 a 60 segundos? Por que ele não pode inicializar, digamos, em um segundo? Não há limitações físicas. Pessoalmente, eu gostaria disso. Eu quero que os desenvolvedores atinjam o limite, usando cada pedaço de desempenho.

Tudo é ENORME


E isso é inchaço. Os aplicativos da Web podem abrir dez vezes mais rápido se você simplesmente bloquear anúncios. O Google está implorando a todos para parar os freios com a ajuda da iniciativa AMP - uma solução técnica que não precisa de tecnologia, apenas um pouco de bom senso. Se você remover o inchaço, a Internet começará a funcionar a uma velocidade louca. É realmente difícil de entender?

O sistema Android sem aplicativos ocupa quase 6 GB . Apenas pense por um segundo quão indecente é o grande número. O que é isso, filmes em HD? Penso principalmente código: kernel, drivers. Alguns outros recursos, é claro, mas eles não podem ser tão grandes. Quantos drivers você precisa para o telefone?



O Windows 95 ocupou 30 MB. Hoje, temos páginas da Web mais pesadas que este SO! O Windows 10 já tem 4 GB, ou seja, 133 vezes mais. Mas é 133 vezes melhor? Quero dizer, funcionalmente eles são quase os mesmos. Sim, temos Cortana, mas duvido que pesa 3970 MB. Mas este é o Windows 10, realmente o Android deve ser uma vez e meia mais?

O aplicativo de teclado do Google, como se nada tivesse acontecido, consome 150 MB. Este programa desenha 30 teclas na tela - é realmente cinco vezes mais complicado que todo o Windows 95? O aplicativo do Google, basicamente apenas um pacote para a Pesquisa na web do Google, ocupa 350 MB! Os serviços do Google Play que não uso (não compro livros, músicas ou vídeos lá) têm 300 MB que ficam aqui e não podem ser excluídos.



Depois de instalar todos os aplicativos necessários (redes sociais, bate-papos, mapas, táxis, bancos, etc.), apenas 1 gigabyte de fotos permanece no telefone. E isso geralmente é sem jogos e música! Lembra dos momentos em que o sistema operacional, os aplicativos e todos os seus dados foram colocados em um disquete?

Seu programa de anotações provavelmente está escrito em Electron e, portanto, vem com um driver para o controle Xbox 360 , ele pode exibir gráficos 3D, reproduzir áudio e tirar fotos usando uma webcam.



O chat de texto simples sempre foi famoso pela velocidade e baixo consumo de memória. Portanto, o Slack é um exemplo de um aplicativo que consome muitos recursos. Quero dizer, conversar e um editor de texto são as coisas mais básicas, eles devem consumir menos recursos. Bem-vindo a 2018.

Você pode dizer que eles pelo menos funcionam. Mas um aumento no tamanho não significa uma melhoria. Isso significa que alguém perdeu o controle. Não sabemos mais o que está acontecendo. Um aumento no tamanho é um aumento na complexidade, uma diminuição no desempenho e na confiabilidade. Isso não é normal e não deve ser considerado normal. Você deve prestar atenção imediatamente ao tamanho inchado - e ficar longe deles.

Tudo apodrece


Um telefone Android de 16 GB era perfeito há três anos. Hoje, ele mal funciona no Android 8.1, porque cada aplicativo dobrou pelo menos sem motivo aparente. Sem recursos adicionais. Eles não se tornaram mais rápidos e a aparência não mudou. Eles estão apenas ... inchados?

O iPhone 4s foi lançado com o iOS 5, mas mal consegue executar o iOS 9. E isso não ocorre porque o iOS 9 é muito melhor - basicamente, o sistema não mudou. Como o novo hardware é mais rápido, eles tornaram o software mais lento. Não se preocupe - você tem novos recursos interessantes, por exemplo ... os mesmos aplicativos funcionam na mesma velocidade! Eu não sei

O iOS 11 parou de oferecer suporte a aplicativos de 32 bits. Isso significa que, se o desenvolvedor não estiver pronto para retornar e atualizar o aplicativo, provavelmente você não verá este excelente programa novamente.

@jckarter : O programa DOS pode funcionar sem alterações em quase todos os computadores criados após os anos 80. O aplicativo JavaScript pode falhar devido à atualização do Chrome de amanhã.

As páginas da web de hoje não funcionarão em nenhum navegador após 10 anos (ou talvez antes).

"Precisamos correr o mais rápido possível para permanecer no mesmo lugar". Mas o ponto? Posso comprar constantemente novos telefones e laptops, como todo mundo, mas faço apenas para poder executar todos os mesmos aplicativos, que se tornaram mais lentos?

Penso que podemos e devemos corrigir a situação. Agora todo mundo está desenvolvendo programas para hoje, ocasionalmente para amanhã. Mas será bom fazer coisas que funcionem um pouco mais.

Pior é melhor


Agora ninguém entende nada. E não quer entender. Estamos apenas lançando besteiras malucas, esperando o melhor e chamando de "bom senso para uma startup".

É solicitado que as páginas da Web sejam atualizadas se algo der errado. Quem tem tempo para encontrar a causa do problema?



Qualquer aplicativo da Web produz um fluxo constante de erros de JS "aleatórios", mesmo em navegadores compatíveis.

Toda a arquitetura do banco de dados web / SQL é construída com base na premissa (mesmo na esperança) de que ninguém alterará os dados enquanto você olha para uma página da web aberta.

A maioria dos aplicativos de colaboração fez o melhor que pôde; existem vários cenários típicos quando eles perdem dados. Vimos o diálogo "Qual versão devo salvar?" Hoje, a barra é tão baixa que os usuários ficam felizes mesmo com esse problema.



E não, no meu mundo a aplicação não é normal, o que diz: "Destruirei parte do seu trabalho, basta escolher qual".

O Linux mata intencionalmente processos aleatórios. E, no entanto, este é o sistema operacional mais popular do servidor.

Todo dispositivo que tenho regularmente falha de qualquer maneira. De tempos em tempos, o monitor da Dell precisa ser reiniciado por possuir software. Airdrop? Você terá sorte se ele encontrar um dispositivo, caso contrário, o que devo fazer? Bluetooth? As especificações são tão complexas que os dispositivos não se comunicam entre si , e reinicializações periódicas são a melhor opção .



E eu nem mencionei a Internet das coisas . É tão além da razão que não há nada a acrescentar.

Eu quero ter orgulho do meu trabalho. Eu quero trabalhar, coisas estáveis. Para fazer isso, você precisa entender exatamente o que estamos desenvolvendo, por dentro e por fora, e isso não pode ser feito em sistemas inchados e excessivamente complicados.

O mesmo caos na programação


Parece que ninguém mais está interessado em soluções de alta qualidade, rápidas, eficientes, duráveis ​​e completas. Mesmo que soluções eficazes sejam conhecidas há muito tempo, ainda enfrentamos os mesmos problemas: gerenciamento de pacotes, sistemas de montagem, compiladores, design de linguagem, IDEs.

Os sistemas de montagem são inerentemente não confiáveis ​​e exigem periodicamente limpeza completa, embora tenham todas as informações sobre deficiência. Nada impede que o processo de montagem seja confiável, previsível e 100% reproduzível. Apenas ninguém pensa que é importante. O NPM está em um estado “às vezes trabalhando” há muitos anos.

@przemyslawdabek: , rm-rf node_modules Node.js/JavaScript.

? , . « »? , - , , .



, , . , Hadoop , .

, .

@rakhim: « » « », «, , ». «», : , .

Linux, Docker , , , . , . , « » Go.  == .


Python , .
. Python — sudo


? « » , . . , - ( ) ( , , ):



.  — . , .

, , . , . AWS. . . , 20 . : - — . , .

. . , , .  — . , , .


, , . , .

, . .



? , 25 ? , . , .

— :

@sahrizv: 2014 — .
2016 — Docker, .
2018 — Kubernetes, Docker.

:

@dr_c0d3: 2000: 100 XML, «» EJB.
2018: 100 YAML, «» .
XML …

, .


. , . () , Android 350 ? , . , ? , , . : « , »? . .

. , , . (iPhone/iOS , Chrome ) , .

— , , . , . , . .


.

(LMAX Disruptor, SBE, Aeron) , .

Xi , , .

, 500 000 . , , .

, . - . , , — , .


. . , . , . - — , , , , , , .

— . - . , . , . - .

: . , , . , , , , , ( !). , . , , . . « , ...» — !

, . , , . , , . , , , .

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


All Articles