De um modo geral, em quais tipos de otimizações você costuma se inclinar ao criar software?
Você é do tipo que prefere otimizar seu design para
- Tempo de desenvolvimento (ou seja, rápido de escrever e / ou mais fácil de manter)?
- Tempo de processamento
- Espaço de armazenamento (RAM, DB, Disco, etc)
É claro que isso é altamente subjetivo ao tipo de problemas que está sendo resolvido e aos prazos envolvidos, então eu gostaria de ouvir sobre os motivos que levariam você a escolher uma forma de otimização em detrimento de outra.
design
optimization
Jason Whitehorn
fonte
fonte
Respostas:
Manutenção
Em seguida, crie um perfil, se necessário, e otimize a velocidade. Raramente eu já precisei de armazenamento - pelo menos não nos últimos 10 anos. Antes disso eu fiz.
fonte
Tempo de Desenvolvimento
Processamento e armazenamento são baratos. Seu tempo não é.
Apenas para observar:
Isso não significa fazer um trabalho ruim ao escrever código apenas para finalizá-lo rapidamente. Significa escrever o código de uma maneira que facilite o desenvolvimento rápido. Também depende inteiramente dos seus casos de uso. Se este for um site simples, de duas ou três páginas, com um formulário de contato, você provavelmente não precisará usar uma estrutura PHP. Algumas inclusões e um script de mala direta aceleram o desenvolvimento. Se, em vez disso, o plano é criar uma plataforma flexível para aumentar e adicionar novos recursos, vale a pena dedicar um tempo para defini-lo adequadamente e codificar adequadamente, pois isso acelerará o desenvolvimento futuro.
Na comparação direta com o tempo de processamento e armazenamento, inclino-me para um tempo de desenvolvimento mais rápido. O uso da função de subtração collectionutils é o método mais rápido e mais eficiente em termos de memória para subtrair coleções? Não! Mas é um tempo de desenvolvimento mais rápido. Se você encontrar gargalos de desempenho ou memória, poderá resolvê-los posteriormente. Otimizar antes que você saiba o que precisa ser otimizado é uma perda de tempo e é contra isso que estou defendendo.
fonte
Experiência de usuário.
Este é o único valor que importa para o seu cliente.
Tempo de desenvolvimento é menos importante. Posso escrever um aplicativo de linha de comando com todos os recursos muito mais rápido que uma GUI, mas se a Sra. Jane não conseguir descobrir como fazê-lo cuspir os relatórios que deseja, será inútil.
A manutenção é menos importante. Posso reparar uma gangorra muito rapidamente, mas se estiver no meio de uma floresta, os usuários não a encontrarão.
O tempo de processamento é menos importante. Se eu fabricar um carro que vá de 0 à velocidade da luz em 60 segundos, os usuários não poderão dirigir.
A estética é menos importante. Eu posso pintar uma Mona Lisa, mas se ela estiver escondida atrás de uma parede, ninguém poderá vê-la.
Experiência do usuário é o único valor que importa. Criar um aplicativo que faça exatamente o que o usuário deseja da maneira que ele espera é a conquista final.
fonte
Há apenas uma coisa para otimizar e é:
O que seus clientes querem
Seus clientes precisam do programa mais rápido possível? Otimize para velocidade.
Seus clientes precisam de confiabilidade absoluta? Otimize para isso.
Eles precisam ser entregues amanhã ou será inútil? Otimize para acelerar o desenvolvimento.
Executando em um dispositivo incrivelmente pequeno e com recursos limitados? Otimize para esses recursos.
fonte
Tempo de processamento
O tempo do meu usuário não é barato. O que vem fácil vai fácil.Acabei de atualizar um aplicativo que utilizo este ano passado. Eles haviam reescrito completamente o aplicativo e, rapaz, foi devagar. Finalmente tive que comprar um computador novo para executá-lo rapidamente. Garanto que não foi barato, mas meu tempo é mais valioso.
fonte
Tenho tendência a limitar o consumo e alocações de memória. Eu sei que é da velha escola, mas:
fonte
Eu diria que otimizo para a eficiência, com a eficiência sendo definida como um compromisso entre o tempo de desenvolvimento, a manutenção futura, a experiência do usuário e os recursos consumidos. Como desenvolvedor, você precisa manipular tudo isso para manter algum tipo de equilíbrio.
Como você alcança esse equilíbrio? Bem, primeiro você precisa estabelecer algumas constantes, como qual é o prazo final, em qual hardware seu aplicativo estará sendo executado e que tipo de pessoa o usará. Sem conhecê-los, você não pode estabelecer o equilíbrio correto e priorizar onde é necessário.
Por exemplo, se você estiver desenvolvendo um aplicativo de servidor em uma máquina poderosa, poderá trocar a eficiência do desempenho para garantir um prazo imutável. No entanto, se o seu desenvolvedor for um aplicativo que precisa responder rapidamente à entrada do usuário (pense em um videogame), será necessário priorizar sua rotina de entrada para garantir que ela não fique atrasada.
fonte
Qualquer que seja a tecnologia de virtualização que estou usando
Lembra-se dos dias em que sistemas com mais de 512 MB de RAM eram considerados de ponta? Passo meus dias escrevendo código para o anterior.
Eu trabalho principalmente em programas de baixo nível que são executados no domínio privilegiado em um ambiente Xen. Nosso limite máximo para o domínio privilegiado é de 512 MB, deixando o restante da RAM livre para uso de nossos clientes. Também é típico limitarmos o domínio privilegiado a apenas um núcleo da CPU.
Então, aqui estou eu, escrevendo código que será executado em um novo servidor de US $ 6k, e cada programa deve funcionar (idealmente) dentro de um limite de 100kb alocado ou evitar completamente a alocação dinâmica de memória.
Conciso, eu otimizo para:
Eu também tenho que ser extremamente diligente quando se trata de tempo gasto esperando por bloqueios, esperando E / S ou apenas esperando em geral. Uma quantidade substancial de meu tempo é destinada a melhorar as bibliotecas de soquetes não bloqueantes existentes e a procurar métodos mais práticos de programação sem bloqueio.
Todos os dias, acho um pouco irônico escrever código como 15 anos atrás, em sistemas comprados no mês passado, devido a avanços na tecnologia.
Isso também é típico para quem trabalha em plataformas embarcadas, embora muitos deles tenham pelo menos 1 GB à sua disposição. Como Jason salienta, também é típico ao escrever programas para serem executados em dispositivos móveis. A lista continua: quiosques, thin clients, molduras, etc.
Estou começando a pensar que as restrições de hardware realmente separam os programadores das pessoas que podem fazer algo funcionar sem se importar com o que realmente consome. Preocupo-me (vote-me se for necessário) que linguagens que abstraem completamente o tipo e a memória verificando o conjunto coletivo de senso comum que (costumava ser) compartilhado entre programadores de várias disciplinas.
fonte
Resultados da pesquisa
Como acadêmico, achei que deveria compartilhar o que otimizar. Observe que isso não é o mesmo que otimizar por um tempo mais curto de desenvolvimento. Muitas vezes, isso significa que o trabalho pode apoiar alguma questão de pesquisa, mas não ser um produto polido e que pode ser entregue. Isso pode ser visto como um problema de qualidade e pode explicar por que muitos dizem que os cientistas da computação (acadêmicos) não têm nenhuma experiência no "mundo real". (Por exemplo, "Eles não saberiam como desenvolver um produto a ser entregue?" )
É uma linha tênue. Em termos de impacto, você quer que seu trabalho seja usado e citado por outros, e o Iceberg Effect de Joel entra em jogo: um pouco de brilho e brilho podem percorrer um longo caminho. Mas se você não estiver criando uma base para outros projetos serem construídos, talvez não consiga justificar o tempo gasto na produção de um produto que pode ser entregue.
fonte
... depois disso tudo o resto
... finalmente, otimizar o desempenho ;-)
fonte
Qualidade / Teste
Otimize para a qualidade, como para garantir que haja tempo no cronograma de desenvolvimento para testes, tanto de unidade quanto de teste após os recursos / fases.
fonte
Depende da necessidade do seu programa.
A maior parte do que faço é fortemente restringida pela capacidade de processamento e memória, mas não passa por muitas mudanças significativas, se houver alguma, na média do ano.
No passado, trabalhei em projetos nos quais o código é alterado com frequência, para que a manutenção se torne mais importante nesses casos.
Também trabalhei em sistemas no passado em que a quantidade de dados é o problema mais significativo, mesmo em disco para armazenamento, mas mais comumente o tamanho se torna um problema quando você precisa mover muito os dados ou lentamente. ligação.
fonte
Elegância .
Se seu código for bem projetado, ele terá vários efeitos:
fonte
Tempo de desenvolvimento, absolutamente. Também otimizo a largura de banda, mas não uso o binário.
fonte
Como faço instalações em vários tipos de sistemas, desde o mainframe da IBM até os PCs, primeiro otimizo a compatibilidade, o tamanho e a velocidade.
fonte
Depende
Se você estiver trabalhando em um sistema de processamento de vídeo incorporado em tempo real, otimizará a velocidade de processamento. Se você estiver trabalhando em um processador de texto, otimizará o tempo de desenvolvimento.
No entanto, em todos os casos, seu código deve funcionar e deve ser mantido.
fonte
Expressividade da minha intenção.
Quero que alguém que esteja lendo meu código possa ver facilmente quais operações eu estava tentando invocar no domínio. Da mesma forma, tento minimizar o lixo não-semântico (chaves, palavras-chave de 'função' em js, etc.) para facilitar a verificação.
É claro que você precisa equilibrar isso com a manutenção. Adoro escrever funções que retornam funções e todos os tipos de técnicas avançadas e elas REALMENTE aumentam meu objetivo, mas se o benefício for pequeno, cometerei um erro ao aderir a técnicas com as quais os programadores jr sólidos estariam familiarizados.
fonte
Todos eles
Tempo de processamento
Os computadores de hoje são rápidos, mas longe do que é suficiente. Existem muitas situações em que o desempenho é crítico - se você fizer o streaming de servidores de mídia.
Armazenamento
Seu cliente pode ter um disco grande, digamos, 1 TB. O que pode ser capturado por 1000 filmes em HD; se você deseja torná-lo um serviço, está longe de ser suficiente, não é?
Tempo de desenvolvimento
Bem, não tenho certeza se isso conta como "otimização", o que faço é usar Java em vez de C ++, e o desenvolvimento fica 10 vezes mais rápido. Sinto que estou dizendo o que penso diretamente ao computador, muito direto frente e totalmente rochas!
BTW eu acredito que para acelerar o desenvolvimento do seu processo de desenvolvimento, você deve escolher java, nunca tente lixo como python ... que afirma que eles podem reduzir o tempo de DEV.
fonte