Dar a um desenvolvedor uma máquina de desenvolvimento mais lenta resulta em código mais rápido / mais eficiente? [fechadas]


130

Suponha que eu dê aos meus desenvolvedores uma máquina rápida e gritante. O VS2010 baseado em WPF é carregado muito rapidamente. O desenvolvedor cria um aplicativo WPF ou WPF / e que funciona bem em sua caixa, mas muito mais lento no mundo real.

Esta pergunta tem duas partes ...

1) Se eu der a um desenvolvedor uma máquina mais lenta, isso significa que o código resultante pode ser mais rápido ou mais eficiente?

2) O que posso fazer para proporcionar aos meus desenvolvedores uma experiência IDE rápida, enquanto proporcionam experiências de execução 'típicas'?

Atualizar:

Para constar, estou preparando minha resposta imparcial à gerência. Esta não é minha ideia, e vocês estão me ajudando a corrigir os pedidos equivocados do meu cliente. Obrigado por me dar mais munição e referências a onde e quando abordar isso. Marquei casos de uso válidos com +1, como:
- otimizações de programação específicas do servidor
- laboratórios de teste
- a possível compra de um servidor melhor em vez de placas gráficas de primeira linha


20
Talvez eles testem o aplicativo em um PC virtual!
Mark C

209
Estou sem palavras que isso é até uma pergunta. Como isso poderia resultar em algo que não fosse um desenvolvimento mais lento e um moral fraco?
Fosco

76
Desenvolva no estado da arte. Teste na pior máquina que você pode encontrar.
Adam

14
Limpar o chão com uma escova de dentes, em vez de uma esfregona, resulta em um piso mais limpo? Claro que sim, eventualmente. Um operador de esfregona não consegue identificar a sujeira a 150 cm de distância, assim como um operador de escova de dentes a 30 cm de distância. Não tente com um piso grande.
Dbkk 22/10/10

13
Note to self: nunca trabalho para MakerofThings7
matt b

Respostas:


234

absolutamente

Também é verdade que os gerentes devem realizar todas as reuniões em Pig-Latin. Além disso, melhora suas habilidades de comunicação para que sejam prejudicadas ao falar frases simples. Eles terão que confiar mais em expressões faciais e linguagem corporal para expressar sua opinião e todos sabemos que isso é pelo menos 70% de toda a comunicação.

Os CFOs devem usar apenas um ábaco e giz. Caso contrário, eles acabam confiando demais em "dados brutos" e não o suficiente em seu "instinto".

E os vice-presidentes e superiores devem ser obrigados a realizar todas as reuniões importantes de negócios em locais de distração, como campos de golfe, enquanto semi-intoxicados. Oh snap ...


85
Eu gostei do sarcasmo. +1
Terence Ponce

8
Vice-presidentes e superiores costumam fazer networking puro: o ponto da reunião é jogar bêbado no golfe. Quando você chega a um nível realmente alto, pode ficar embriagado e jogar golfe enquanto escolhe os países a invadir e para quem entregar contratos de defesa.
Dan Rosenstark 23/10/10

11
Não vejo sarcasmo aqui. +1
FinnNk

376

A resposta é (eu vou ser ousado e dizer) sempre

NÃO .

Desenvolva o melhor que você pode obter com o seu orçamento e teste a gama de equipamentos min-max spec nos quais você implantará.

Existem emuladores, máquinas virtuais, máquinas reais com testadores que podem testar o desempenho para ver se é um fator.


10
Não posso votar mais de uma vez, embora eu desejasse poder. Eu tenho um computador antigo no qual trabalho e o tempo que o VS2010 leva para realizar algumas tarefas (por exemplo, abrir o projeto) pode ser bastante irritante.
rjzii

108
Você pode fazer o não muito grande e ousado?
dr Hannibal Lecter

4
O teste de aceitação que você faz deve cobrir os requisitos de desempenho. Deve haver requisitos de desempenho. Se você não testar o desempenho, seu testador será chamado de cliente (e você cobrará dinheiro).
Tim Williscroft 22/10/10

2
Eu concordo completamente. Dar a um desenvolvedor máquinas mais lentas não produzirá código melhor. O desenvolvedor ficará frustrado com a máquina e sempre terá algum desconforto. Faz código pior, e eles não conseguem se concentrar muito quando tudo fica parado. Veja, alguém terá um IDE como o Eclipse, digamos 2 livros em PDF, 2 navegadores da Web, um para execução de depuração (no caso de desenvolvimento baseado na Web), um servidor em execução e um reprodutor de música;) Dê a ele uma máquina lenta e ele vai te dar um beijo de despedida.

11
A resposta não está incorreta. A resposta correta é Nooooooooo!
Pekka 웃 23/10/10

70

1) Muito, muito improvável. Não, e seus desenvolvedores podem colocar algo desagradável em seu café por sugerir isso. Tempo que seus desenvolvedores esperam que o código seja compilado ou que o IDE faça o que está fazendo ou seja o tempo que eles não estão gastando para melhorar o código. Também interrompe o fluxo mental. Mantenha a mente no problema, e eles serão muito mais eficientes na solução desse problema.

2) Dê a cada um deles um segundo PC, representando as especificações mais baixas que você deseja que eles realmente suportem, com um comutador KVM para alternar entre essa e sua estação de trabalho real.


Gosto da ideia de usar um KVM com um PC antigo para teste. Dependendo do projeto, pode ser complicado para os desenvolvedores instalar as versões mais recentes na máquina lenta cada vez que criarem uma nova versão.
Al Crowley

4
Outra coisa a considerar é dar a eles uma conta em pelo menos o segundo PC que não tenha privilégios administrativos.
precisa

43

Eu gosto de longos tempos de compilação. Isso me dá mais tempo para trabalhar no meu currículo.


11
hehehe, quanto mais, melhor!
Newtopian

33

Esta é uma péssima ideia. Você deseja que seus desenvolvedores sejam o mais produtivos possível, o que significa oferecer a eles uma máquina o mais rápido possível, para que eles não fiquem o dia inteiro esperando que as coisas sejam compiladas. (Ligeiramente OT, mas também ajuda a não bloquear o acesso a sites potencialmente úteis com o WebSense e similares.) Se você está limitado por ter usuários que ainda executam a tecnologia da Idade da Pedra, precisará de uma máquina de teste com especificações semelhantes e não se esqueça de testar com antecedência e com frequência para garantir que você não esteja seguindo o caminho errado em termos de opções de tecnologia.


quem ... espera um pouco. Se compila foram rápidos, isso não seria mais possível: xkcd.com/303
gbjbaanb

32

O desenvolvimento deve ser feito no melhor ambiente possível. Os testes devem ser feitos no pior ambiente possível.


27

Se eu recebesse uma máquina lenta, passaria o dia otimizando o processo de desenvolvimento e não o código entregue. Então não!


26

Os programadores de sistemas embarcados enfrentam isso o tempo todo! E há uma solução em duas partes:

  1. Seus requisitos precisam especificar o desempenho X no hardware Y.
  2. Teste no hardware Y e, quando você não obtiver desempenho X, erros de arquivo.

Então não importa em que hardware seus desenvolvedores trabalham.

Depois de fazer isso, digamos que equipamentos mais rápidos possam salvar seus programadores meia hora por dia ou 125 horas em um ano. Digamos que eles custem US $ 100.000 por ano com benefícios e despesas gerais (ridiculamente baixas para o Vale do Silício), ou US $ 50 por hora. Essas 125 horas * US $ 50 / hora são US $ 6250. Portanto, se você gastar algo menos que US $ 6250 por ano em hardware de desenvolvimento por programador, estará economizando dinheiro.

É isso que você deve dizer à sua gerência.

Tim Williscroft praticamente disse a primeira metade disso em um comentário e, em um mundo justo, ele obteria metade de qualquer ponto que essa resposta receber.


Adicionado 24 de outubro:

Meu ex-empregador tinha essa teoria e os ajudou a gastar cerca de US $ 100 milhões.

Eles são um conglomerado japonês que estava acostumado a contratar programadores no Japão, Coréia e China. As pessoas lá são legais com o uso de hardware de desenvolvimento ruim, dias de trabalho de 13 horas, dormindo em suas mesas e não tendo uma vida. Então eles descobriram que, quando adquiriram uma empresa notável do Vale do Silício para fazer um sistema operacional para celular baseado em Linux, aqueles californianos tolos que queriam equipamentos modernos eram apenas prima-donnas e não tinham realmente uma boa razão para isso (como produtividade).

Quatro anos depois, o sistema operacional funcionou como uma porcaria, todos os horários foram interrompidos e os clientes ficaram irritados e rescindiram contratos com a direita e a esquerda. Finalmente, o projeto do sistema operacional foi cancelado e uma grande porcentagem da força de trabalho mundial do conglomerado foi demitida no ano passado. E, francamente, eu não gostaria de ter sido um dos executivos que precisou explicar aos acionistas onde todo esse dinheiro e esforço foram.

Não foram apenas as máquinas de desenvolvimento lento que causaram esse fiasco. Havia muitos outros erros estratégicos e táticos - mas eram o mesmo tipo de coisa em que as pessoas que trabalhavam nas trincheiras podiam ver o acidente de trem chegando e se perguntavam por que os tomadores de decisão não podiam.

E a marcha lenta foi certamente um fator. Afinal, se você está disposto a cumprir o prazo, é realmente uma coisa inteligente desacelerar deliberadamente o trabalho?


+1 em trinta minutos pode ser uma estimativa muito modesta em alguns círculos.
justin

20

Na programação, há um velho ditado que diz que "a otimização prematura é a raiz de todo mal ". Eu acho que você conseguiu criar com êxito outra "raiz" (ou pelo menos o primeiro ramo) de todo o mal. A partir de agora, podemos dizer "a desoptimização prematura do desenvolvedor é a raiz de todo mal".

Em suma, a resposta é que isso apenas diminuirá o tempo de desenvolvimento e tornará mais difícil a manutenção. Os tempos de compilação levarão mais tempo, a pesquisa de código no disco será mais lenta, a localização de respostas on-line levará mais tempo e, o mais importante, os desenvolvedores começarão a otimizar prematuramente o código para poderem testar a funcionalidade necessária.

Esse último ponto é a questão mais crítica e não aparece em muitas das outras respostas. Você pode obter sua primeira versão ok, mas, quando quiser atualizar o código no futuro, descobrirá que a otimização prematura dos desenvolvedores afastou o foco do código do bom design e o empurrou para mais perto de "preciso fazer isso em menos trabalho para manter meu trabalho "no estilo de código. Adicionar recursos adicionais se tornará mais difícil, pois as otimizações escolhidas no momento podem ser desnecessárias e bloquear seu código em um caminho de hacks semi-otimizados, além de outros hacks semi-otimizados.

Como exemplo disso, imagine que o requisito mínimo de sistema da sua versão atual é uma máquina de processador único com velocidade um pouco lenta. Você coloca os desenvolvedores nessa caixa e eles criam uma solução intrincada de thread único que depende de muitos hacks porque eles queriam desenvolver o produto rapidamente. Agora, cinco anos depois, você tem uma nova versão do produto que tem um requisito mínimo de uma máquina com processador duplo. Você gostaria de poder separar de maneira limpa as partes do programa que podem ser executadas em paralelo, mas a decisão tomada há cinco anos que obrigou seus desenvolvedores a criar um software hacky agora impede que você use toda a potência do seu novo requisito mínimo .

O que você deve fazer é adicionar uma fase no final do seu ciclo de desenvolvimento em que você faz o teste de aceitação nas caixas de limite inferior. Certamente, parte do código será muito lento por causa da máquina mais rápida do desenvolvedor, mas você pode isolar essa parte e otimizá-la lá. O restante do seu código permanece limpo e com manutenção.

Vejo sua pergunta dizendo: "Posso forçar meus desenvolvedores a otimizarem mais cedo, fornecendo a eles máquinas ruins de desenvolvedor e ainda assim obtendo um bom código?" E a resposta é não.


"Devemos esquecer pequenas eficiências, digamos, 97% das vezes: a otimização prematura é a raiz de todo mal". Ao projetar algo, é uma boa idéia pensar por 2 minutos nos 3%.
Keyo

15

Leitura interessante, todas essas respostas.

Mas acho que a maioria das pessoas que responde aqui está perdendo o objetivo. A questão, como eu li, não é (apenas pelo menos) realmente dar aos desenvolvedores um P1 para criar código mais rápido.

O ponto é que muitos softwares hoje em dia são tão lentos ou até mais lentos que o seftware que usamos no último milênio, apesar dos computadores muito mais potentes. A julgar pelas respostas aqui, a maioria dos desenvolvedores não entende essa dica. Isso é muito óbvio em aplicativos da web. Este site é uma exceção muito boa, mas muitos sites têm uma primeira página em 1 mb. O que eu ganho por esperar pelo download? Eu não sei. Eu acho que parece ser uma ignorância do desenvolvedor que não respeita o tempo que o usuário precisa gastar com ele, ou ainda pior, se você pagar por mb. O fato é que todas essas páginas da web nem mesmo contêm imagens de alta resolução. Freqüentemente, são apenas alguns códigos crap entregues em algum ambiente de desenvolvimento. Bem, é claro que não é um código de porcaria, eu acho, mas não me traz ganhos como usuário.

Em geral, não se trata apenas de otimizar o código, mas também de optar por não incluir as coisas que ficam mais lentas do que as que elas oferecem.

Algumas semanas atrás, iniciei um laptop a partir de 1995. O Windows 3.x estava funcionando rapidamente. O banco de dados do qual devo obter alguns dados foi iniciado antes que a tecla enter fosse totalmente liberada (quase pelo menos).

Sei que hoje obtemos muito mais do nosso software, mas também temos computadores muitas vezes mais rápido. Por que o setor de desenvolvimento não decide manter a velocidade do software a partir de 1995 e fazer as pessoas comprarem novo hardware porque desejam novas funcionalidades. Hoje, é mais parecido com os programas e sites da Web todos os dias obriga as pessoas a comprar novos hardwares para fazer exatamente as mesmas coisas que fizeram anteriormente. Mas é claro, de uma maneira mais extravagante.

Devo dizer que acho que o desenvolvimento do Linux parece lidar melhor com isso. As distribuições Linux estão há muitos anos bem à frente das janelas, mesmo em fantasia com muitas coisas interessantes como janelas animadas. O fato é que eles têm trabalhado nos computadores de hoje e até ontem. Não apenas em equipamentos de ponta.

Até agora, acho que muitos desenvolvedores têm um nível prejudicial de adrenalina. Sim, eu encontrei uma maneira de retribuir uma certa frustração de todos os que esperavam na frente:
servidor sql do escritório (console de gerenciamento de inicialização) arcgis (inicialização e uso) do Acrobat Reader (inicialização) agresso (usando, pelo menos como aplicativo da web) windows (olhando e usando, bem, eu ainda não tentei 7) páginas da web .net (download)

e assim por diante

Eu me sinto bem :-)

Cheers
Nicklas


Este. Este. ESTA. MUITO ISSO. Essa sempre foi minha maior frustração com software. As pessoas gastam mais tempo tentando aprimorar a interface do que realmente se importam com a usabilidade. Um exemplo disso é Android vs. Blackberry. O Android parece mais agradável e pode fazer mais, mas o Blackberry é MUITO mais agradável (e rápido) de usar do que o Android, pelo menos na minha opinião.
kcoppock

11
Concordo plenamente com o argumento de que o software agora é tão rápido quanto há 20 anos para as mesmas funcionalidades. Mas fazer com que os desenvolvedores trabalhem com hardware de 20 anos não fará nada para ajudar no problema. Se a empresa que cria o software não investe em usabilidade e / ou testes de desempenho em hardware mais lento, as coisas pioram, se é que alguma coisa. Este é um debate completamente diferente para o qual a cabeça de um programador não é o único destinatário adequado de um tapa merecido atrás da cabeça.
Newtopian

10

1) Se eu der a um desenvolvedor uma máquina mais lenta, isso significa que o código resultante pode ser mais rápido ou mais eficiente?

Estamos construindo software nas últimas 6 décadas, e ainda temos perguntas como essas? Parece mais uma tentativa de cortar custos. Sem ofensa, mas vamos lá, você acha que a pergunta é lógica? Pense nos seguintes termos (se você puder): você deseja construir um veículo 4x4 que possa operar sob condições adversas, chuva, lama, o que for. Você colocará seus engenheiros e linha de montagem sob os elementos apenas para garantir que o veículo resultante possa operar com eles?

Quero dizer, Jesus Cristo! Há desenvolvimento e há testes. O teste é realizado em um ambiente diferente e mais rigoroso, ou o desenvolvedor sabe como montar um banco de ensaios em seu próprio ambiente de desenvolvimento, de maneira adequada para o teste de estresse. Se ele não puder, substitua-o por um desenvolvedor melhor.

2) O que posso fazer para proporcionar aos meus desenvolvedores uma experiência IDE rápida, enquanto proporcionam experiências de execução 'típicas'?

Você deveria estar perguntando isso aos seus desenvolvedores. E se eles não puderem fornecer uma resposta objetiva e válida, você precisará substituí-los por desenvolvedores reais.

Mas, para entreter a questão, dê a seus desenvolvedores (supondo que você tenha bons desenvolvedores), boas ferramentas e bom hardware, o melhor que você pode pagar. Em seguida, configure um ambiente de linha de base comum mais baixo no qual seu software deve operar. É aí que os testes devem ocorrer. É uma prática de engenharia muito melhor ter um ambiente de teste distinto do ambiente de desenvolvimento (de preferência um que permita realizar testes de estresse).

Se seus desenvolvedores são bons, eles deveriam ter comunicado isso a você (supondo que você tenha solicitado a eles).


11
Estamos construindo software nas últimas 6 décadas, e ainda temos perguntas como essas? - Voto sua resposta, mas encorajo você a examinar a pergunta original de uma perspectiva diferente. De fato, existem muitos gerentes que ignoram os benefícios de máquinas rápidas e poderosas para seus desenvolvedores. Então, com isso em mente, a pergunta original pode ter tentado desiludir esses gerentes da noção ridícula de que máquinas lentas podem de alguma forma levar os desenvolvedores a produzir código mais rápido e eficiente.
Jim G.

11
"2) O que posso fazer para proporcionar aos meus desenvolvedores uma experiência IDE rápida, enquanto proporcionam experiências de execução 'típicas'? Você deve perguntar isso aos seus desenvolvedores." Acredito que este é um site de SE dos programadores, não um site de SE dos gerentes. Ele estava perguntando aos desenvolvedores.
stimpy77

11
"você quer construir um veículo 4x4 que possa operar sob condições adversas, chuva, lama, o que for. Você colocará seus engenheiros e linha de montagem sob os elementos apenas para garantir que o veículo resultante possa operar com eles?" <<< amo a analogia
stimpy77

6

Isso resulta em vários desenvolvedores de merda. Esse material já é difícil o suficiente, não vamos piorar a experiência.

Recomendamos que você tenha um hardware semelhante aos seus usuários em um ambiente de teste ou controle de qualidade para eliminar problemas de desempenho. Essa é uma boa ideia.


8
Desenvolvedores que vadia? De jeito nenhum ...
Jé Queue

6

Vou mudar a norma e dizer sim, SE E SOMENTE, se eles estiverem criando software para servidor. Ria o quanto quiser, mas a equipe mais eficiente que eu já vi foi um grupo de Perl com terminais Wyse. Isso foi no final dos anos 90, era uma loja da Universidade, e eles estavam escrevendo um software de grade espacial (que basicamente apenas calcula). No entanto, eles estavam conversando com alguns modelos RS / 6000 relativamente recentes.

Apenas para acrescentar interesse ao evento, havia um programador cego lá. Fiquei completamente impressionado.

texto alternativo


3
Programador cego? É mesmo possível?
WernerCD 22/10/10

11
@WernerCD, até hoje ainda tento imaginar o poder da mente necessário para acompanhar as linhas de código em minha cabeça.
Jé Queue 22/10/10

3
Sim, a maioria de nós está escrevendo software para servidor ... +1
goodguys_activate 22/10/10

@ MakerOfThings7, me dê mais hardware de servidor a qualquer momento na minha máquina local, gaste $ onde deveria estar (mas dê-me um grande monitor :)) o DC.
Jé Queue 22/10/10

4
Talvez um programador cego possa usar uma tela em braille?
Antsan 22/10/10

5

Esta não é uma má idéia - mas você deseja que seus desenvolvedores tenham um ambiente de programação rápido.

Você pode implementar isso dando a seus programadores duas máquinas - uma caixa de desenvolvimento rápido e uma caixa de produtos mais lenta (possivelmente virtual) para teste.

Alguns ajustes no processo de compilação do VS podem tornar a implantação na caixa de teste a norma, com depuração remota.

Existem outras maneiras de considerar forçar seus codificadores a desenvolver códigos mais eficientes - você pode incluir metas de desempenho e uso de memória em seus testes de unidade, por exemplo. Definir orçamentos para uso da memória também é uma excelente meta. Também definindo orçamentos de peso de página para código html.


5

O problema não é o desenvolvedor criar código ineficiente em uma máquina rápida; o problema é que você não definiu métricas de desempenho que devem ser avaliadas.

Deve ser definido, como parte dos requisitos do produto, um destino específico que possa ser medido em todos os computadores com base na experiência exigida do cliente. Existem muitos sites (Check SpecInt) que permitem relacionar seu computador a outros tipos de computadores.

Isso é bom por vários motivos. Ele permite que você defina o hardware mínimo suportado com mais facilidade para limitar o número de reclamações dos clientes - todos sabemos que a maioria dos softwares é executada na maioria dos computadores, é apenas uma questão de desempenho - se definirmos nossas especificações para que as pessoas atendam aos requisitos mínimos tem um desempenho razoavelmente aceitável, você limita as reclamações dos clientes - e quando um cliente liga, você pode usar os benchmarks para determinar se realmente há um problema ou se o cliente simplesmente não está satisfeito com a forma como o produto deve funcionar.


5

Estou convencido de que ter um computador mais lento para o desenvolvimento resulta em código mais rápido, mas isso tem um preço. A lógica é que experimentei essa experiência em primeira mão: com muito tempo de viagem, comprei um netbook para trabalhar no trem, um netbook mais lento que qualquer outro computador que comprei nos últimos 5 anos. Como tudo é muito lento, vejo muito rapidamente quando algo é insuportavelmente lento neste netbook, e estou ciente dos pontos lentos muito mais rapidamente (não há necessidade de avaliar o tempo todo). Trabalhar em um netbook realmente mudou a maneira como me desenvolvi.

Dito isto, não estou defendendo isso, especialmente em um ambiente profissional. Primeiro, é desmoralizante. O fato de quase todo mundo dizer que a idéia nem fazia sentido mostra que os programadores reagem mal à idéia.

Em segundo lugar, ter tudo mais lento significa que as coisas que você pode querer fazer em uma máquina rápida (leva 1 minuto) não são mais factíveis em uma máquina lenta, devido à preguiça, etc ... É uma questão de incentivo.

Finalmente: o código produzido pode ser mais rápido, mas quase certamente leva mais tempo para produzir.


+1 Mas eu tenho que discordar em alguns pontos. Também comprei um netbook, mas notei que a velocidade não é o problema real, é o tamanho pequeno da tela. 1GHz é rápido o suficiente para pequenos projetos em movimento, mas 1024x600 é pequeno demais .
Joe D

4

Ponto 1, NÃO! O Studio deve ser executado em máquinas decentes e esse requisito só se tornou mais poderoso a cada versão. Na verdade, você pode bloquear algumas versões do studio se ativar o intellisense e usar uma caixa HT de núcleo único.

Para apontar o item 2, existem alguns recursos nos projetos de teste que permitem otimizar alguns recursos. Eles não são perfeitos, mas estão lá. Imagens VPC ou VM de baixa especificação para um bom trabalho de ser restringido também. Eu tive usuários sentados em máquinas ruins para testar ocasionalmente, para que pudessem ver as implicações dos recursos solicitados.


4

Não - na verdade, isso resultaria em mais bugs, porque eles não farão tantos testes e nem usarão ferramentas extras como criadores de perfil. Dê a eles as melhores máquinas que você pode comprar (incluindo hardware de aceleração de gráficos, se você é um desenvolvedor de jogos ou loja de gráficos) e faça testes em VMs. As especificações da VM podem ser ampliadas ou reduzidas conforme necessário.


+1: na verdade, isso resultaria em mais bugs, porque eles não realizam tantos testes e nem usam ferramentas extras como criadores de perfil. - Ótimo ponto. Não vamos esquecer o custo de oportunidade associado a uma máquina de desenvolvimento lento.
Jim G.

4

Eu acho que essa é uma pergunta interessante, e eu não aceitaria um "não" tão rapidamente. Minha opinião é: depende de que tipo de equipe de desenvolvimento estamos falando. Exemplo: se você está liderando um grupo que está concorrendo ao concurso anual de programação da ICFP, talvez ter bons resultados após um pequeno período de desenvolvimento em um cluster HPC não signifique necessariamente que a solução encontrada é boa. O mesmo pode ser dito se você estiver escrevendo algum algoritmo científico ou numérico: no seu antigo AMD Duron 600 MHz com 64 MB de memória, você é forçado a ter cuidado com o modo como está fazendo as coisas, e isso pode afetar até mesmo alguns projetos escolhas.

Por outro lado, um programador / cientista / o que quer que seja que seja cuidadoso de qualquer maneira. Mas me vi escrevendo alguns dos meus melhores códigos quando não tinha computador e precisei fazer anotações no papel. Isso pode não se aplicar a grandes projetos que envolvem grandes estruturas, quando um IDE é estritamente necessário.

Uma coisa é certa: máquinas rápidas e bons resultados imediatos tornam os programadores (ruins) estragados e podem ser uma das razões para algumas das porcarias que encontramos nos computadores.


5
Vou te dizer uma coisa - compre um computador realmente bom e eu troco com você ... :) #
Wonko the Sane

4

Eu trabalho em um pacote que leva cerca de uma hora para ser montado na minha máquina 8G 8 core (versão totalmente limpa). Eu também tenho um laptop final relativamente baixo em que testo. O laptop de baixo custo não gerencia duas compilações completas durante um único dia de trabalho.

Sou mais produtivo na máquina rápida com alguns testes deliberados feitos no laptop ou devo fazer todas as minhas compilações no laptop?

Lembre-se de que esses números não são compostos.

É uma demonstração fraudulenta, pois normalmente não preciso fazer uma compilação limpa todos os dias (posso fazer muitos testes em módulos únicos), mas mesmo as compilações parciais mostram aproximadamente uma diferença de ordem de magnitude nos tempos de compilação / link .

Portanto, o verdadeiro problema é que, na minha máquina mais lenta, uma compilação típica é longa o suficiente para eu tomar uma xícara de café, enquanto na minha máquina mais rápida, só posso saborear um pouco de café.

Do ponto de vista da realização do trabalho, prefiro fazer o desenvolvimento em uma máquina rápida. Posso cumprir prazos com muito mais segurança. Por outro lado, imagino que se o gerenciamento me levasse a desenvolver minha máquina lenta, eu faria muito mais navegação na Web, ou pelo menos a leitura de livros.


De um modo geral, o que há em sua compilação para levar tanto tempo? É vinculado à CPU ou ao disco (qual é o gargalo) Isso seria um problema se algo como o TFS fizesse as compilações para você?
goodguys_activate

11
Você leva meio dia de trabalho para tomar uma xícara de café? Você deve estar trabalhando para o governo.
finnw

E / S ligada na máquina lenta. E / S ainda ligada às vezes na máquina rápida, mas mais um gargalo de CPU. O sistema de compilação atual não gosta de trabalhar em mais de uma lib de uma vez, portanto, algumas CPU e E / S são deixadas no chão quando há menos de 8 arquivos restantes para compilar em qualquer subprojeto. Quanto ao café, eu poderia tomá-lo mais rápido, mas tento limitar minha ingestão; portanto, se eu o bebesse mais rápido, precisaria de outra atividade de tempo ocioso.
Stripes

3

Curiosamente, eu trabalhei em uma startup onde acabamos fazendo isso. Eu acho que realmente funcionou muito bem, mas apenas por causa da situação específica em que estávamos. Era uma loja mod_perl onde o recarregamento automático de classe realmente funcionava corretamente. Todos os desenvolvedores usaram o vim como IDE de sua escolha (ou usaram algum software de edição remota). O resultado final foi que muito pouco tempo (se houver) foi perdido, aguardando o código compilar / recarregar / etc.

Basicamente, eu gosto dessa ideia IFF: há um impacto insignificante no ciclo de desenvolvimento para todos os desenvolvedores e afeta apenas a operação de tempo de execução do seu código. Se seu código estiver compilado, pré-processado, etc, você estará adicionando tempo para "corrigir bug; test; next" no qual os desenvolvedores estão trabalhando.

Do lado interpessoal, as pessoas nunca foram forçadas a usar os servidores lentos, mas se você usasse os servidores lentos, não precisaria fazer nenhuma manutenção ou configuração. Além disso, essa configuração existia desde o início, não consigo imaginar tentando vender isso para uma equipe de desenvolvimento estabelecida.

Depois de reler sua pergunta original, me ocorre que uma coisa que sempre me aterroriza são os ambientes de desenvolvimento que diferem dos ambientes de produção. Por que não usar uma VM para execução de código que pode prejudicar o tempo de execução sem afetar a estação de trabalho dev? Ultimamente, tenho usado / amado o VirtualBox.


3

Também vou reverter a tendência aqui.

Anedota: Eu trabalhei para uma empresa holandesa de desenvolvimento de software que atualizou 286 computadores para 486-es (sim, tenho essa idade). Dentro de semanas, o desempenho de todas as nossas bibliotecas internas caiu 50% e os bugs aumentaram ... Uma pequena pesquisa mostrou que as pessoas não pensavam mais no código durante o processo de depuração, mas recorriam ao código sucessivo 'rápido' -> compilar -> testar -> corrigir (código) etc. ciclos.

Relacionado: quando criei uma subsidiária para a mesma empresa nos EUA, acabei contratando programadores russos porque estavam acostumados a PCs com menos recursos / menos energia e eram codificadores muito mais eficientes.

Percebo que esses eram tempos diferentes e os recursos eram muito mais escassos do que são hoje, mas nunca deixa de me surpreender como, com todo o progresso que foi feito na área de hardware, o resultado líquido parece ser que cada passo adiante é negado pela programação mais superficial que exige especificações mínimas mais altas ...

Portanto ... acho que os programadores devem ser forçados a testar seus aplicativos em máquinas que não excedam as especificações de potência e hardware de computação do 'Average Joe'.


7
O keynote aqui é "test". O sistema ao vivo não precisa carregar um IDE cheio de gordura, executar o back-end localmente, e não em hardware dedicado, executar correio, escritório, etc. ambiente na maioria dos idiomas hoje em dia.
Bill Leeper

3

O hardware é menos dispendioso do que o tempo de desenvolvimento.

A maioria dos gargalos está no banco de dados, não no PC cliente, mas isso não desculpa os testes em máquinas mais lentas que o desenvolvedor. Use ferramentas de teste para testar a otimização.


3

Absolutamente não. Dê aos seus programadores o melhor que o dinheiro do laptop pode comprar, um teclado de sua escolha, várias telas grandes, um escritório particular, sem telefone, refrigerantes gratuitos, todos os livros que eles querem (que sejam relevantes), viagens anuais às principais conferências técnicas e você obterá ótimos resultados. Em seguida, teste nas combinações de hardware / software / navegador / largura de banda dos limites superior e inferior.


2

Este é um pensamento interessante (dar aos desenvolvedores uma máquina lenta pode levá-los a otimizar mais).

No entanto, a solução é estruturada de uma maneira melhor - coloque o tempo de resposta nos requisitos dos programas e tenha uma máquina de baixo custo disponível para teste.

Além disso, se você tiver um idioma / compilador realmente interessante, ele poderá criar maneiras diferentes de gerar código e escolher o melhor. Isso só seria ajudado por um computador mais rápido.


2

Outros responderam que geralmente você deseja que os desenvolvedores tenham máquinas rápidas. Concordo. Não pule na RAM - você quer o máximo de memória possível - alguns processos de construção são muito pesados ​​no uso do disco.

O que você pode querer considerar é se livrar de antivírus em unidades de compilação! Isso apenas diminui a velocidade e pode ser um fator de desaceleração extremamente forte.

Você pode permitir que os desenvolvimentos se desenvolvam no Linux, se possível. As ferramentas são muito melhores para todos os tipos de tarefas extras (apenas grep para algo em um arquivo, etc). Isso também se livra do antivírus.


Não se esqueça dos benefícios de um disco rígido rápido: codinghorror.com/blog/2009/10/…
Jim G.

2

Meu Macbook Pro no trabalho tem alguns anos. Entre o Linux e o Windows (para testar as peculiaridades do IE), bem como alguns navegadores e terminais abertos, a roda giratória do OSX aparece muito. Adivinha o que faço quando gira, sento e espero. Nesse caso, uma máquina lenta reduz a produtividade.


2

Para muitos aplicativos, o problema é conseguir que os desenvolvedores testem com conjuntos de dados do mundo real antes que eles sejam "concluídos". Para aplicativos interativos, seria necessária uma máquina de teste de linha de base / VM.


2

Eu trabalho em uma máquina Windows95 lenta, e isso me permite escrever com eficiência a inteligência artificial do MindForth em Forth e em JavaScript.


2

Perguntar aos programadores se eles devem obter um bom hardware é como perguntar a um homem gordo se ele gosta de comida. Eu sei que essa é a troca subjetiva, mas ainda assim ... vale a pena fazer a pergunta? : P

Dito isto, é claro que concordo com a maioria: NÃO .

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.