O que você considera o primeiro princípio (s) de programação?


59

Eu sempre gostei de me perguntar "qual é o primeiro princípio (s) disso?" depois que aprendi as coisas básicas de algo (por exemplo, programação). É uma pergunta inspiradora, a IMO, que pode forçá-lo a pensar nos princípios mais importantes por trás de algo, especialmente em uma habilidade como programação.

Então, qual você acha que é o primeiro princípio (s) de programação? Vou dar a minha resposta abaixo um pouco mais tarde.


Nós não falamos sobre clube da luta.

Respostas:


97
  1. BEIJO - mantenha-o simples estúpido
  2. SECA - Não se repita
  3. YAGNI - Você não vai precisar disso

O KISS deve ser simples e inteligente. Na primeira vez em que você precisar reescrever uma grande parte do seu código, porque você não criou um design inteligente e extensível, você concorda com isso. :)

8
Eu acho que o KISS deveria ser "Keep It Simple, Stupid!"
Dennis C

Na verdade, estou trabalhando em um post de blog sobre como esses dois são os dois mais próximos e queridos do coração dos programadores e como, ao mesmo tempo, eles são um pouco de oxímoro quantas vezes você precisará escolher um contra o outro

10
Eu também adicionaria YAGNI.

3
@ Programmin Tool - Eu não acho que "estúpido" é supérfluo. Eu acho que transmite que temos uma tendência a querer ser "inteligente" e isso se manifesta como complexidade desnecessária. Na minha opinião, o "estúpido" tenta nos lembrar dessa tendência, ajudando-nos a lembrar o que inicialmente pensamos ser "inteligente" geralmente não é.
codekaizen

37

Escreva um código como se fosse você que tivesse que manter esse código.


Esta é uma heurística muito práticos, 3x :)

19
Escreva o código como se um psicopata portador de machado tivesse que mantê-lo. FTFY.
Ponto e vírgula esquecido

10
... e o psicopata empunhando um machado sabe onde você mora.
CAD cara

2
.., e ele acaba afiada seu machado ...
Roalt

11
... e ele está trabalhando ao seu lado.
31339 Broken_Window

29

Seja o mais preguiçoso possível.


2
Mais uma vez, muito geral, IMO. Isso levanta a questão "Quão preguiçosa é a quantidade adequada de preguiça, realmente?", Porque obviamente "desleixado" é algo que você também não quer ser.

Esta é uma referência ao do perl "preguiça, impaciência e hubris"

Então, estamos falando de diferentes tipos de preguiça? Eu pensei por "preguiçoso" Bob significa "não se incomodam organizar seu código antes que ele fica emaranhado": D

2
Muito geral. Por essa analogia, todas as variáveis ​​e funções teriam uma letra, porque eu era "preguiçoso" para digitar algo significativo. Supondo que eu também tenha que mantê-lo, talvez você esteja correto, porque eu o tornaria o mais facilmente possível de manter.
Kyle Ballard

3
@Kyle: Sim, esse é o ponto. A "verdadeira preguiça" está tornando as coisas mais fáceis para você agora e no futuro. O que acaba sendo o mesmo que fazer as coisas corretamente. Se você fazer menos trabalho agora, mas mais trabalho depois, você não está sendo "tão preguiçoso quanto possível" :)

23

Zen, parte I: programar é apenas a estrada, não o caminho.

Programar é apenas a técnica para ensinar ao computador o que ele precisa fazer. Ser bem-sucedido na criação de software rápido e confiável significa conhecer seus algoritmos, práticas recomendadas e todas as outras coisas não necessariamente conectadas à sua programação (linguagem).

Zen, parte II: Se você estiver com pressa, passeie devagar. Se você realmente estiver com pressa, faça um desvio.

Parece bobagem, mas não se comprometa a comprometer-se (realmente) depois. Eu tenho uma regra: se você está no centro de um programa, tente ser o mais preciso e bom possível. Se você estiver usando métodos do núcleo que são profundos em seu software, tente ser mais rápido na codificação. Se você estiver codificando acima desses dois, poderá ficar um pouco mais desleixado.

Os erros de projeto são os mais difíceis de encontrar e / ou corrigir; o próximo passo são os erros de programação nas partes em que todos confiam, depois as "partes reais do software que mostra". Se você precisar corrigir um erro de design no final de um projeto, ummm, isso não é bom ... ;-)

Zen, parte III: Conheça o seu caminho, Neo.

Conheça seu ambiente, ferramentas e tudo o que você confia diariamente e classifique-o para que funcione para você. Melhor se você usar seu "ambiente" de programação tão natural que você nem precisa pensar nisso. Se você precisar fazer um trabalho, não introduza "coisas novas e sofisticadas", mas faça seu trabalho. Esse material pode ser introduzido em um novo projeto, ou seja, quando você tiver tempo para prepará-lo e usá-lo.


Uh, e depois novamente: Eu desembarcou em terras Zen quando falava sobre a programação :)

@ Parte III - não adicione "coisas novas e sofisticadas", a menos que você seja pago para isso!
314/09 Jason

+1 para a referência Matrix. Eu sou um otário por um bom (que e o Zen. Faz-me pensar em Python) #

19

BEIJO (mantenha-o simples, estúpido).

Realmente implora a pergunta "Como você define simples?" E também "Quando é algo simples demais para a tarefa em questão?" É por isso que você não pode se tornar um bom programador apenas conhecendo o primeiro princípio de programação.


Eu acho que essa é uma regra muito geral. Ele levanta a questão "como você define 'simples', na verdade" ".

3
e se você é estúpido, como saberia se fosse simples?
Steven A. Lowe

Isso é uma boa, Steven :)

11
"É por isso que você não pode se tornar um bom programador apenas conhecendo o primeiro princípio da programação" - adorei.

11
@ Dima: você está certo, quero dizer que qualidade e simplicidade (pelo menos neste caso) são indefiníveis, mas sabemos disso quando a vemos, se nossos olhos estão treinados.
Adriano Varoli Piazza

18

Otimização prematura é a raiz de todo o mal. - Donald Knuth


Seja na implementação OU no design.

16

Não reinvente a roda.


A resposta certa para a pergunta sobre se alguém deve ou não reinventar a roda é sempre "depende". Portanto, "não reinvente a roda" só vai tão longe. Pode servir como uma boa heurística na maioria das vezes, mas não sempre.

5
Algumas "rodas" precisam ser reinventadas.

Diga isso para Dunlop. Ele inventou o pneu. Se não fosse por ele, reinventando o volante, teríamos um passeio bastante acidentado.
Kibbee

3
Que tal: Apenas reinventar a roda se os benefícios vão valer a pena os custos
e.James

16

Entenda o problema primeiro!


Ah, finalmente alguém com este. Você pode beijar, yagni, secar tudo o que quiser. É inútil se você programar algo para nada.

@ e-satis: Sim, o que eu pensei quando respondi isso pela primeira vez. Rolo para todas as respostas e surpreendentemente ninguém postou antes.
OscarRyz 22/06/2009

Boa resposta. Horas e horas são desperdiçadas quando os programadores não entendem adequadamente todos os requisitos de um problema.
31411 Steve Wortham

O problema é: como você sabe que entende o problema?
CamelCamelCamel 17/03

13

YAGNI - Você não precisa disso . A idéia por trás do YAGNI é programar para seus requisitos, não para recursos potenciais em potencial. A premissa é que, mantendo o que você precisa programar, você (entre outras coisas) reduzirá o inchaço do código, reduzirá a complexidade, evitará a fluência de recursos e reduzirá as restrições sobre o que pode ser feito (e como isso pode ser feito) no futuro.

Suponho que funcione em conjunto com o design modular: os recursos futuros podem ser aumentados sem reprojetar o código existente.


12

Saber quando não programar.


o que diabos isso significa?

E quando é isso?

Às vezes, você precisa resolver o problema de um usuário de maneira diferente - não apenas codificar uma solução.

O julgamento humano e a tomada de decisões fazem parte de tudo; às vezes não faz sentido tentar automatizar o julgamento.
S.Lott

11
O que ele quer dizer é que muitos problemas de programação podem ser resolvidos de maneira mais barata e oportuna comprando aplicativos, componentes ou bibliotecas prontos para uso.
Gordon Bell

11

Café dentro, código de saída.


3
Chá no meu caso =)

+1 hmm mais como "Coffee In, Code + muitos intervalos para banheiro?" :) Eu amo tanto de café e chá, eu balance ambas as maneiras ...
Darknight

10

Se não foi testado, está quebrado.


Concordo em que um

7

Existem duas maneiras de construir um design de software: uma maneira é tornar tão simples que obviamente não há deficiências, e a outra maneira é torná-lo tão complicado que não há deficiências óbvias. O primeiro método é muito mais difícil.

- Charles Antony Richard Hoare


6
  1. Distinguir entre causa e efeito (trabalhando com computadores)

  2. Distinguir entre fato e opinião (trabalhando com pessoas)

  3. Tão simples quanto possível, mas não mais simples (design)


5

Programar é um meio, não um fim. Ou talvez "Can não significa que deveria".


5
  1. Entenda por que o programa fará alguém feliz (caso contrário, por que você não está brincando lá fora com todas as outras crianças?). (Essa pessoa pode ser você.)
  2. Desenvolva um modelo conceitual do domínio comercial que capture toda a complexidade necessária e não mais.
  3. Desenvolva um modelo conceitual da arquitetura de software que capture toda a complexidade necessária e não mais.
  4. Implacavelmente mantenha toda a outra complexidade de fora.

bem dito! não poderia concordar mais
Antony

5

Na minha opinião, o princípio mais importante é a redução da complexidade pela criação de boas abstrações .

Isso inclui

  • entender o problema a ser resolvido,
  • projetar uma solução apropriada para ele e
  • implementá-lo,
  • de preferência de uma maneira que mantenha o código compreensível e sustentável,

mas também a determinação do ponto em que parar de criar abstrações e chegar às propriedades fundamentais das tecnologias de implementação (por exemplo, sistema de banco de dados, linguagem de programação) para impedir a criação de complexidade adicional evitável.


4

Programa com um público em mente. Por isso, não assuma que tudo o que você escreve não será lido e mantido por você ou outra pessoa.

Um corolário disso: prove que você entende o problema que está tentando resolver nomeando bem suas variáveis, funções e classes!


4

não funciona até que você mostrou isso em um teste


6
Isso não é verdade, escrevi toneladas de código que funcionam e não são testados! : D

11
"Eu não testei, eu só provaram que ele está correto" :)
Daniel Daranas

4

Pense primeiro, codifique depois.

Você não é nem de longe tão inteligente quanto pensa. Pergunte. Aprenda a valorizar seus colegas.

Ao depurar, a primeira resposta quase sempre estará errada.

O código que você escreve com a intenção de jogar fora tende a se tornar uma pedra angular de processos muito maiores. Nunca deixe nada escrito a esmo.


3

Qualquer problema pode ser resolvido com outra camada de indireção.


Na verdade, ter muitos indiretos é, em si, um problema que espera ser identificado e resolvido. Então ..

resolvido ... por outra camada de indireção! =)
Erik Forbes

Curiosamente, é verdade. Olhe para Primavera ...


3

Princípio: Software é captura de conhecimento .

Consequências: Muitas técnicas de representação do conhecimento, todas baseadas em Abstração . Dá-nos camadas, camadas, encapsulamento, separação de preocupações.

Muitas técnicas para representação de procedimentos, todas baseadas em Sequência , Escolha , Repetição .



3

Sempre escreva um código como se a pessoa que o manteria fosse um serial killer psicótico que sabe onde você mora

Além disso, nunca pense que você sabe tudo sobre programação, continue aprendendo


2

Eu comecei a programar estudando a eletrônica digital, então acho que os portões lógicos básicos (não, e, ou, xor, implica) foram os primeiros princípios da programação.



2

Garbage in - Garbage Out Não importa o quão agradável seja a sua interface do usuário se os dados estiverem ruins.


2

SECO, praticamente tudo o que gera. O KISS é a outra extremidade do ato de equilíbrio para garantir que você não busque a elegância do software em níveis de insanidade.


2

Comece com a saída e trabalhe para trás.

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.