Quando a programação “adequada” não importa mais?


49

Eu tenho construído um jogo android no meu tempo livre. Está usando a biblioteca libgdx , então um pouco do trabalho pesado é feito para mim.

Durante o desenvolvimento, selecionei descuidadamente tipos de dados para alguns procedimentos. Eu usei uma hashtable porque queria algo próximo a uma matriz associativa. Valores-chave legíveis por humanos. Em outros lugares para conseguir coisas semelhantes, eu uso um vetor. Eu sei que a libgdx tem classes vector2 e vector3, mas nunca as usei.

Quando me deparo com problemas estranhos e procuro ajuda no Stack Overflow, vejo muitas pessoas redefinindo as perguntas que usam um determinado tipo de dados quando outro é tecnicamente "adequado". Como usar um ArrayList porque ele não requer limites definidos versus redefinir um int [] com novos limites conhecidos. Ou mesmo algo trivial como este:

for(int i = 0; i < items.length; i ++)
{
    // do something
}

Eu sei que ele avalia item.length em cada iteração. No entanto, também sei que os itens nunca terão mais de 15 a 20 itens. Por isso, devo me preocupar em avaliar itens.length em cada iteração?

Fiz alguns testes para ver o desempenho do aplicativo usando o método que acabei de descrever versus o adequado, siga o tutorial e use os tipos de dados exatos sugeridos pela comunidade. Os resultados: A mesma coisa. Média de 45 fps. Abri todos os aplicativos na guia telefone e galáxia. Não faz diferença.

Então, acho que minha pergunta é: existe um limite quando não importa mais ser adequado? Tudo bem dizer - "desde que o trabalho seja feito, eu não me importo?"


4
É uma questão de magnitudes. Tente criar bancos de dados com vários terrabytes atendidos no mundo real com pesquisas e agregações em tempos de resposta de subsegundos com milhares de solicitações por minuto. Seu problema não é grande o suficiente. Embora sua abordagem seja boa, se você seguir esse caminho até sua conclusão inevitável, é doloroso que leva tempo para chegar.
Jimmy Hoffa

8
Se seu idioma tivesse um loop FOR real, esse problema de avaliação múltipla não estaria acontecendo. Infelizmente, a sintaxe C exige isso, porque não é realmente um loop FOR; é um laço WHILE usando uma peruca e óculos de nariz grande, e é necessário aceitar qualquer condição arbitrária (ou nenhuma) para a finalização do laço.
Mason Wheeler

2
Eu vejo a sua edição, mas se você está tentando convencer que ficar bêbado e imprudente é bom em qualquer contexto, exceto em uma festa na sexta-feira à noite com um motorista designado, você provavelmente está latindo na árvore errada.
22712 Robert

17
Como você sabe que 'avalia' item.length em cada iteração? Compiladores são bastante inteligentes. E mesmo que ele busque repetidamente item.length, e daí? Eu odiaria ver código como 'int itemsLength = items.length; for (; i <itemsLength; ...) ', a menos que haja um problema de desempenho medido.
usar o seguinte

6
Sua coisa items.length não tem absolutamente nada a ver com "programação adequada". É uma micro-otimização, e bons programadores sabem que não devem perder tempo até que executem um criador de perfil e saibam onde estão os problemas reais de desempenho. As micro-otimizações e o bom estilo de programação geralmente são opostos, não a mesma coisa.
22612 Michael Borgwardt

Respostas:


65

Você escreve um programa para resolver um problema. Esse problema é acompanhado por um conjunto específico de requisitos para resolvê-lo. Se esses requisitos forem atendidos, o problema é resolvido e o objetivo é alcançado.

É isso aí.

Agora, a razão pela qual as melhores práticas são observadas é porque alguns requisitos estão relacionados à capacidade de manutenção, testabilidade, garantias de desempenho e assim por diante. Consequentemente, você tem aquelas pessoas chatas como eu que exigem coisas como o estilo de codificação adequado. Não é preciso muito esforço para cruzar seus T's e pontuar seus I's, e é um gesto de respeito para aqueles que precisam ler seu código mais tarde e descobrir o que ele faz.

Para sistemas grandes, esse tipo de restrição e disciplina é essencial, porque você precisa se comportar bem com os outros para que tudo funcione e minimizar a dívida técnica para que o projeto não caia sob seu próprio peso.

No extremo oposto do espectro estão os utilitários únicos que você escreve para resolver um problema específico no momento, utilitários que você nunca mais usará. Nesses casos, o estilo e as melhores práticas são completamente irrelevantes; você junta a coisa, executa e segue com a próxima.

Então, como em muitas coisas no desenvolvimento de software, isso depende.


11
Eu tendem a concordar. No trabalho, não faço perguntas, é cruzada e pontilhada. Mas considere que muitas coisas que faço no trabalho são uma coisa que realmente não precisa ser mantida. Passando tendência tipo de coisas. Aplicativos de aniversário, coisas que vêm e vão. Tudo bem lá, mas eles realmente não precisam ser.
Kai Qing #

21
Pode-se argumentar que ser disciplinado o tempo todo facilita a disciplina quando você precisa. Algumas pessoas fazem perguntas no Stack Overflow sem pressionar a tecla Shift, usando a lógica de que podem transmitir adequadamente suas idéias sem ela, e que o idioma inglês é algo fluido e evolutivo de qualquer maneira. Não acho nada mais irritante, exceto, talvez, criadores de vírus que pensam que meu tempo de CPU está livre.
22412 Robert

2
@KaiQing Alguém precisa entregar a você um aplicativo herdado de 5 mloc que nasceu em pascal e transportado para frente desde então, após sua primeira tentativa de adicionar ou alterar qualquer funcionalidade desse aplicativo, você perceberia imediatamente por que as melhores práticas existem e são esclarecidas.
Jimmy Hoffa

5
@KaiQing, o Angry Birds tem que rodar em várias plataformas e, se o jogo travar por 2 segundos, x% da platéia desistirá, o que significa y menos dólares para o pessoal do Angry Birds. Aposto que foi escrito com muito, muito cuidado. Talvez isso responda sua pergunta. Se o código é apenas para você, quem se importa com o que você faz? Se houver tempo em dinheiro ou outras pessoas em jogo, é melhor você tomar muito, muito cuidado.
Charles E. Grant

2
@KaiQing Ninguém pode dizer o limite para isso, é variável de projeto para projeto e em cada projeto ao longo do tempo. O número de variáveis ​​que afetam o limite entre a manutenção e a manutenção do sistema: LOC, Base de usuários, Base de desenvolvedores, Tipo de aplicativo (criptografia x crud x drivers), Robustez de recursos, Requisitos de redundância, Criticidade de software (servidor de e-mail x . de vida de suporte de dispositivo vs. clock widget), plataformas suportadas, Tecnologia pilha, Quantidade de dados que está sendo transacionado ou analisado, as restrições de auditoria históricos e muitos mais efeitos coisas como código ruim pode ser
Jimmy Hoffa

18

Há uma citação antiga e sábia: "Não siga os passos dos sábios da antiguidade. Procure o que eles procuravam". Existem razões para todas as regras de codificação 'adequada'. Saber por que essas regras existem é mais importante do que saber quais são essas regras.

Existe uma regra de que você não deve colocar um teste que possa ser recalculado repetidamente em um loop for como esse. Nos casos em que a regra foi inventada para remediar (onde o desempenho seria realmente diferente), faz sentido. Nesse caso, há apenas uma resposta certa. No seu exemplo, sabe-se que não há diferença de desempenho e que não pode haver mais do que algumas dúzias de iterações. Nesse caso, existem duas respostas corretas, seja para aplicar a regra de qualquer maneira, já que é simples e não prejudica nada e pode ajudar a formar bons hábitos, ou ignorar a regra, pois não há diferença de desempenho com que se preocupar.

Eu prefiro a primeira resposta certa e você parece preferir a segunda. Você não está errado sobre isso. Acho que você está errado em sua idéia do que é a programação 'adequada'. Não se trata de seguir um conjunto de regras selecionadas aleatoriamente que não o ajudam e não têm nenhum objetivo. Você não corrigindo o loop for no exemplo está realmente seguindo uma regra muito boa contra a otimização prematura.

Uma programação realmente adequada é seguir boas regras que fazem sentido de maneira inteligente.


Eu não diria que prefiro o segundo. Alguém editou meu post para remover a parte de fazer este jogo para Android quase completamente bêbado (apenas por diversão) e, como resultado, fico surpreso ao ver que minhas escolhas bêbadas não fizeram diferença no desempenho. Substituí algumas classes estranhas por outras adequadas para testar. Eu concordo que embora sabendo existem as regras é mais importante do que saber quais são as regras ...
Kai Qing

Além disso, minha ideia de programação "adequada" é o culminar das opiniões repetitivas da comunidade stackoverflow, além da coleção de programadores que vieram e se foram na empresa em que trabalho. Alguns com formação em CI, outros autodidatas. Existe uma opinião comum para basear as coisas e eu tendem a concordar com o que todo mundo diz coletivamente antes de decidir que uma maneira é certa e outra é errada. Obrigado por participar.
Kai Qing #

11
Se parecia que eu estava te repreendendo por violar as regras, então eu expressei mal. Nenhuma das coisas que você falou sobre fazer é contra a qual eu me oponho. Eu estava tentando apontar que o "espírito da lei" é mais importante que a "letra da lei".
Michael Shaw

Heh, não, eu não acho que você estava me repreendendo. Eu estava apenas sendo comunicativo. Fiz essa pergunta por um motivo e fico feliz que muitas pessoas tenham respondido sem votar.
Kai Qing

10

A maneira correta de analisar isso é diminuir os retornos: comparar o benefício adicional do desenvolvimento do programa com o custo do desenvolvimento adicional.

Retornos decrescentes ocorrem quando o benefício marginal é menor que o tempo / esforço marginal.

Você pode fazer um argumento comercial para items.lengthsair do forcircuito? Economicamente, essa mudança pode justificar o tempo gasto tentando justificá-la? Como não há diferença na experiência do usuário, você nunca receberá nada nem pelo tempo gasto medindo (exceto uma lição útil para lembrar). Os usuários não gostarão mais do programa do que gostam e mais cópias não serão vendidas como resultado dessa alteração.

Isso nem sempre é fácil de avaliar, porque os casos de negócios estão cheios de incógnitas e riscos e, portanto, são suscetíveis de serem vítimas de fatores não considerados que só se tornarão óbvios em retrospectiva. As alterações propostas podem ser completamente não triviais, de modo que elas fazem uma grande diferença.

O tipo de pensamento com retornos decrescentes pode significar uma busca por desculpas para não se tomar alguma ação e evitar correr riscos, o que, em retrospectiva, pode revelar-se uma série de oportunidades perdidas.

Mas às vezes é óbvio quando não fazer algo. Se alguma parte do desenvolvimento parece exigir que um milagre econômico ocorra apenas para pagar pelo custo do desenvolvimento (ponto de equilíbrio), provavelmente é uma má idéia.


Muito bem escrito. No meu caso, nunca houve retorno planejado. Qualquer retorno pode ser incidental, mas não deve ser descartado, pois acho que alguns dos maiores sucessos começaram como um golpe de sorte. Em termos de trabalho do cliente, onde não há muito dinheiro em jogo, pode haver apenas um agravamento se o aplicativo travar ou algo se tornar um pequeno inconveniente, é um limite mais grosso. Se os benchmarks parecerem bons, mas o código for conhecido por não ser o mais eficiente, ninguém jamais o auditará antes dos tempos de progresso do código e talvez exija uma migração de qualquer maneira ... difícil dizer sobre isso.
Kai Qing #

De fato. Nem sempre podemos apresentar algum tipo de caso objetivo. Nem todo mundo valoriza o programa da mesma maneira. Suponha que o principal utilitário do programa seja o prazer de trabalhar nele. Isso pode não ser benéfico para mais ninguém e ninguém pagará pelas melhorias (se houver usuários além do programador), mas é suficiente para justificar melhorá-lo de qualquer forma.
Kaz

Duas palavras úteis para adicionar à sua resposta muito bem escrita - "Investimento especulativo" - você faz isso porque especula que haverá um retorno no futuro.
mattnz

@mattnz - o que você diz é verdade, pois ninguém faz algo sem retorno, mesmo que o retorno seja uma boa risada. Quase todos os meus projetos pessoais são feitos para o humor. Quase todos eles fazem o suficiente para justificar seus requisitos. Nenhum deles me permitiu sair.
Kai Qing #

Exatamente todo mundo. Então, primeiro determinamos o que esperamos obter ao escrever este programa, ou continuando a fazê-lo. Que algo pode estar "passando o tempo de forma que seja divertido". Mas, mesmo assim, podemos pensar: trabalhar em tal e tal coisa em tal e tal programa é a melhor maneira de obter o máximo de diversão ou dedicamos tempo a outra coisa.
Kaz

3

Quando você não deve se importar com o seu código ser "adequado"

  • Se você conseguir responder à meta de negócios e mantê-la ao longo do tempo com pouca sobrecarga. (os usuários não veem a fonte antes de pagarem)
  • MVP / POC - Se escrever código adequado significa perder tempo com um conceito antes que você saiba como ganhar dinheiro com ele (se você gastar anos e 45 milhões de dólares escrevendo seu aplicativo e acabar fechando a loja porque não tinha mercado, ninguém se importa com o quanto adequado era o código)
  • Quando havia uma situação de risco de vida (por exemplo, o protótipo 1 do homem de ferro era um truque sujo, mas o tirava da caverna, certo?)
  • ou se você simplesmente não sabe escrever código adequado (se alguém conseguir ganhar a vida escrevendo código inadequado, no desemprego de hoje, eu digo, é melhor escrever código ruim do que ficar sem-teto)
  • se você simplesmente sabe o que está fazendo ou pensa que pode se safar fingindo que faz

Quando escrever o código adequado

  • Se houver um impacto comercial significativo, por exemplo, o desempenho afetará a receita ou impedirá as vendas
  • Se não for adequado, manter o código se torna um problema comercial (altos custos de manutenção)
  • Se você é um programador conhecido que trabalha em um grande projeto de código aberto
  • O mesmo para uma grande empresa que contribui com uma biblioteca interna para o mundo
  • Se você quiser mostrar seu trabalho como portfólio em futuras entrevistas

11
Infelizmente, há outro na lista de não se importar em ser adequado que muitas pessoas são abençoadas por não saber: quando um cliente vomita um sistema antigo sob seus cuidados e diz que precisa fazer isso em uma semana. Às vezes, o tempo e / ou o orçamento não se prestam à codificação adequada e sua atenção no projeto é mais uma graça do que uma transação comercial. Por exemplo, se o código deles usa métodos amplamente obsoletos, mas precisa de algumas correções (falando em um cenário da web). Não pode consertar a coisa toda. Deve ficar sujo.
Kai Qing

"Se não for adequado, manter o código se torna um problema comercial (altos custos de manutenção)." Esse limite é realmente consideravelmente mais baixo do que a maioria dos desenvolvedores inexperientes tendem a acreditar. Escrever código sólido geralmente se paga em questão de horas, não dias ou meses.
PeterAllenWebb

2

O desempenho é sua principal preocupação? É isso que você está tentando maximizar?

Nesse caso, há uma lição fundamental a aprender e, se você o fizer, será um dos poucos.

Não tente "pensar" o que você deve fazer para torná-lo mais rápido - isso é suposição. Se você está perguntando "Devo usar essa classe de contêiner ou aquela?" Ou "Devo colocar lengthna condição de loop?", Você é como um médico que vê um paciente e tenta decidir qual tratamento dar sem realmente questionar ou examinar o paciente.

Isso é adivinhação. Todo mundo faz isso, mas não funciona.

Em vez disso, deixe o próprio programa dizer qual é o seu problema. Aqui está um exemplo detalhado.

Você vê a diferença?


Eu diria que minha única preocupação foi que, em meus testes, não notei diferenças de desempenho entre o uso inadequado e adequado de tipos de dados para o cenário especificado. Como na sua sugestão, sobrecarreguei a classe com mais dados para ver se era pouco demais para fazer a diferença. No final, ambos tiveram o mesmo desempenho. É verdade que estou apenas fazendo um jogo básico de RPG. Não é como software bancário ou algo complexo. Mas isso me fez pensar se seria melhor para os negócios não serem tão adequados o tempo todo.
Kai Qing

Como o desempenho é sua preocupação, você deve perguntar ao programa o que deve estar olhando, não perguntar se sua pergunta pré-concebida faz a diferença. Por favor, clique neste link e faça o que diz. Ele lhe dirá em que momento o programa está realmente gastando, e que lhe mostrará como torná-lo mais rápido.
Mike Dunlavey

Bem, o desempenho foi minha base para o procedimento de questionamento, não necessariamente uma preocupação. Eu não estou olhando para benchmark por dizer. Apenas observar que o código ineficiente não fez diferença no desempenho. É essencialmente transparente para o usuário a eficiência ou ineficiência do programa, tornando irrelevante a preocupação por esse perfil. Concedido, eu tinha que ter alguma preocupação em compará-lo em primeiro lugar, mas era principalmente curiosidade. E se o produto estiver concluído e estiver visivelmente lento, sim, um criador de perfil faz sentido. Obrigado pelo link
Kai Qing

2

Sua pergunta é "desde que faça o trabalho, eu não ligo?"

Minha resposta é: "você nunca sabe o que acontecerá com o seu código". Eu estive envolvido em muitos projetos que começaram como "ei, deixe-me escrever uma coisa rápida para cuidar do problema do usuário". Escreva, coloque lá fora, nunca mais pense nisso.

Uma vez, aquilo que escrevi se transformou em "ah, agora todo o departamento do usuário quer usar esse código", que antes que eu pudesse me virar se tornou "toda a empresa está usando esse código e agora tenho que provar que ele sobreviverá a uma auditoria" e há uma revisão de código de 20 pessoas agendada para amanhã e algum vice-presidente já a vendeu para nossos clientes ".

Sei que você está "apenas escrevendo um jogo Android no seu tempo livre", mas nunca se sabe se esse jogo decolará e se tornará seu bilhete para a fama e a fortuna. Pior ainda, esse jogo pode se tornar seu ingresso para a infâmia, porque continua batendo nos telefones das pessoas. Você quer ser a pessoa que recebe uma oferta de emprego porque os filhos de alguém não podem parar de jogar seu jogo em seus telefones ou quer ser a pessoa que é difamada em quadros de mensagens como este?


1

A resposta é que isso nunca importa, e sempre importa ...

Isso nunca importa, porque a programação, adequada ou não, é uma maneira de atingir um objetivo, não um objetivo em si. Se esse objetivo for alcançado sem uma programação "adequada", tudo bem (do ponto de vista comercial, geralmente é melhor que o objetivo possa ser alcançado sem programação).

Sempre importa, porque a programação adequada é uma ferramenta que o ajudará a alcançar seus objetivos. A maneira correta de fazer as coisas é simplesmente o reconhecimento de que fazê-lo de outra maneira causa mais dor a longo prazo do que economiza.

O que responde à pergunta de quando você pode ignorá-lo - quando você tem certeza de que outra maneira será mais fácil a longo prazo (possivelmente porque não haverá longo prazo).

Normalmente, as ferramentas únicas são feitas da maneira mais rápida e suja possível, com pouca ou nenhuma verificação de erro ou outra validação, sem registro de exceções, código cut-n-paste com pequenas alterações ou mesmo sem alterações, em vez de funções genéricas, etc. .

Cuidado: às vezes, esses aplicativos rápidos e sujos ganham vida própria, o que significa que todos os atalhos te mordem no ...


11
"nunca" e "sempre" se cancelam. Tornando sua resposta boa e ruim.
Tulains Córdova

@ user1598390: o cancelamento um do outro era o ponto. Cancele o dogma e você ficará com o que parecer útil. E você entenderá errado e aprenderá com isso.
jmoreno

Quero dizer que concordo com você, mas não o levaria a tais extremos. Eu não acho que os offs sejam apenas cuspidos, escapando de testes ou depuração. Só porque ele não é otimizado e perfeitamente projetado não o torna menos um produto se o desempenho e a estabilidade não forem afetados pelo shortcust. Qual é, em última análise, o meu ponto e por que me pergunto por que todo mundo fede tanto a exemplos de codificação que não são de primeira linha. Isso acontece muito no stackoverflow.
Kai Qing

@KaiQing: Testes e depuração acontecem, é claro, mas geralmente são limitados ao que existe no momento - por exemplo, se o processo pode falhar com um arquivo com codificação UTF e nenhum dos arquivos nos quais você está trabalhando você não testa isso. A otimização deve ser feita quando um problema de desempenho for identificado. Quanto ao porquê de um fedor sobre exemplos de codificação não top de linha no SO - acho que isso é uma função dos objetivos do site. Seu objetivo é ser um recurso permanente, assim, o código nas respostas (e até as perguntas) é visto como se fosse um modelo usado por outras pessoas.
jmoreno

1

Ou mesmo algo trivial como este:

for(int i = 0; i < items.length;i ++) {
     // do something 
}

Eu sei que ele avalia item.length em cada iteração. No entanto, também sei que os itens nunca terão mais de 15 a 20 itens. Por isso, devo me preocupar em avaliar itens.length em cada iteração?

Na verdade, no código final, items.length não será avaliado em todas as iterações porque o compilador a otimiza. E mesmo que não fosse, length é um campo público no objeto array; acessá-lo não custa.

Então, acho que minha pergunta para você é a seguinte: Existe um limite quando já não importa> para ser adequado? Tudo bem dizer - "desde que o trabalho seja feito, eu não me importo?"

Realmente depende do que você espera do seu produto final; a diferença entre um produto médio e um ótimo produto depende de detalhes. Um carro como Tata Nano e um carro como Mercedes S "fazem o trabalho" - levam você de um lugar para outro. A diferença está nos detalhes: potência do motor, conforto, segurança e outros. É o mesmo com qualquer produto existente, incluindo produtos de software; por exemplo, por que alguém pagaria ao banco de dados Oracle, IBM ou Microsoft for Oracle, DB2 ou MS SQL Server, já que o MySQL e o Postgre são gratuitos?

Se você deseja prestar atenção aos detalhes e obter um produto de alta qualidade, deve se preocupar com essas coisas (e com outras coisas, obviamente).


Acho que não concordo com isso. No meu post, não menciono diferença no desempenho. Isso sugeriria que não há produto médio ou ótimo, mas um equilíbrio igual, apesar das deficiências de um. Concordo com sua afirmação, no entanto, se houvesse um projeto específico de grande importância que todos estávamos usando como comparação. Mas, abstratamente, a observação geral é que, nesse projeto anônimo, uma classe decididamente ineficiente é executada igualmente com uma classe otimizada. Então, é correto adotar uma atitude descontraída ou argumentar sempre com perfeição?
Kai Qing

@Kai Qing Uma classe única não faz (ou não deveria) fazer muita diferença. Eu disse: se você espera que seu produto seja um produto de alta qualidade, preste atenção nos detalhes (mesmo que isso signifique uma possível otimização pequena ou um design cuidadoso); por outro lado, se a única coisa que você deseja é um sistema funcional, provavelmente você não deve prestar muita atenção a pequenos detalhes.
M3th0dman

Sim, você está certo, não deve fazer diferença, mesmo que apenas um pouco de cuidado seja colocado em seu design. Mas pode fazer a diferença dependendo de sua finalidade ou se, em geral, sua finalidade se transformou ao longo do tempo e se tornou algo que não pretendia ser. Já vi isso antes, mas só estou entrando em uma tangente aqui. Para ser justo, um produto pode ser de alta qualidade sem precisar ser mais do que funcional.
Kai Qing

1

Se você está programando em casa, talvez possa cortar alguns cantos; e quando você está experimentando e testando coisas, isso é completamente justificado.

No entanto, tome cuidado. No exemplo que você dá, não há realmente nenhuma necessidade de cortar esse canto, e você precisa ter cuidado. Isso pode iniciar uma tendência e os maus hábitos que você faz em casa podem se infiltrar no seu código no trabalho. É muito melhor praticar e melhorar os bons hábitos em casa e deixá-los penetrar no seu código no trabalho. Ajudará você e ajudará outros.

Qualquer programação que você faz e qualquer pensamento sobre programação é exercício. Faça valer a pena, caso contrário ele voltará e morderá você.

Olhe para o lado bom embora. Você perguntou sobre isso, então talvez você já esteja ciente do que estou dizendo.


11
Sim, eu sei, mas o ponto principal da pergunta é que, no contexto menor e contido, não parece haver uma razão para ser tão apropriado. Em todos os meus anos de programação, realmente não houve muita especulação para nos morder. Duvido que seja tão adequado. Eu acho que as linguagens e expectativas mudam como um software normal. Alguns menos que outros. Mas, no final, a ineficiência de um projeto só pode ser percebida quando o projeto está no passado e não é mais essencial. Torna difícil justificar a dor de cabeça de ser tão rígido.
Kai Qing

Esse é um argumento justo. As regras de hoje podem ser as restrições de amanhã. Não gosto de me dizerem o que fazer, mas tenho respeito por outras pessoas que foram antes e aprenderam da maneira mais difícil. Às vezes, pode ser interessante descobrir quais regras são úteis e quais já passaram da data de validade.
Daniel Hollinrake

1

Se um fabricante de móveis estivesse fabricando um móvel a ser usado onde a qualidade não era de extrema importância ou onde a qualidade pudesse passar despercebida, eles ainda deveriam tentar corrigir os cortes e fazer um trabalho adequado unindo as peças?

Muitas pessoas vêem o software como habilidade. O que construímos não deve apenas executar uma função, ele precisa ser confiável, sustentável e robusto. Fazer esse software requer habilidade, e essa habilidade vem da prática.

Portanto, mesmo que a escolha de uma construção em loop para o que você está trabalhando hoje possa não importar, o fato de você se esforçar para usar as construções adequadas o tempo todo fará com que, com o tempo, você seja um programador melhor.


Encontrei instâncias na programação em que o código não precisava ser sustentável ou ter um desempenho fora das necessidades. Como os utilitários de quiosque para feiras ou eventos muito específicos e que provavelmente não serão reutilizados. No caso do meu próprio jogo - eu sou o único que o mantém, de modo que o argumento pode não ser o mais aplicável. Eu ainda tenho dúvidas sobre a perspectiva comum sobre "melhor programador" porque a adesão rígida às diretrizes, a manutenção e o uso adequado de tipos de dados podem ser desencorajadores o suficiente para não concluir o projeto. Se o código funciona como esperado, por que aperfeiçoá-lo?
Kai Qing

Mesmo que o software que você está construindo right_now não precise ser mantido, escreva o software como se isso reforçasse suas habilidades de codificação. Quando você finalmente precisar escrever um código de manutenção, poderá fazê-lo mais facilmente.
Bryan Oakley

Eu tenho que escrever código sustentável o tempo todo. Apenas em alguns casos, não precisa ser assim. No entanto, tenho muita experiência, então normalmente sei quando e onde cortar custos. O objetivo deste post era apenas estimular a conversa sobre o limiar do adequado e desleixado para qualquer finalidade. Meu exemplo apenas o escova levemente, já que o exemplo dado é praticamente inofensivo em um aplicativo menor. No entanto, se eu estivesse escrevendo software bancário, nunca seria tão descuidado.
Kai Qing
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.