Alguns programadores conhecem alguns segredos que nós outros não? [fechadas]

8

Não vou incomodá-lo com detalhes da minha discussão, por isso a apresentarei na forma de um breve exemplo.

Um cara de java tem seguido artigos e publicações de um programador famoso (uma espécie de Martin Fowler do meu país). Ele diz que está compartilhando alguns segredos que outros programadores famosos não compartilham.

Eu nunca acredito que existem alguns segredos como assistentes na área de programação. Mas alguns programadores que ainda não são bons nessa área acham que outros programadores famosos são bem-sucedidos porque conhecem alguns segredos que nós não conhecemos.

Eu discordo totalmente disso e discuti isso com alguém e, finalmente, ele me disse que você tem 2 anos nessa área e ele (cara de java) é programador profissional de 20 anos, para que ele saiba melhor que você.

Eu queria ter certeza de que não estou errado. É por isso que eu queria saber disso.

Freshblood
fonte
8
Eu responderei depois que você vier à minha casa para tomar uma bebida. Ah, e traga um pouco de cera com você.
58
Nós conhecemos esse cara. Fique longe dele ou você pode se meter em problemas. Os segredos de nossa arte sagrada devem ser mantidos ocultos a todo custo! A guilda de programadores veteranos punirá esse traidor em breve! :-p
Péter Török
15
O grande segredo da boa programação é "escrever a menor quantidade de código claro com um mínimo de complexidade para resolver adequadamente o problema".
dietbuddha
19
20 anos de experiência em Java? ORLY?!?
SK-logic
8
Isso seria de 1 ano de experiência em Java, repetido 19 vezes ...
Martin Blore

Respostas:

54

Eu quase diria que é o oposto ....

Eu trabalhei com pessoas que gostavam de ser complicadas por qualquer motivo. É verdade que eles eram bons programadores - quando tomados no vácuo - mas o código que eles produziam era geralmente bastante obtuso e difícil de manter por outros. Não faz sentido fazer algo inteligente que economize algumas teclas, quando dois anos depois alguém que mantém o código vai perder um dia quando fica perplexo com o truque.

De fato, se eu tivesse que indicar uma das coisas mais importantes que aprendi em meus dez anos de experiência comercial como programador - é que a manutenção é importante . Ele é supremo, muito acima de saber alguns truques e truques obscuros que podem ser úteis em situações raras, mas que quase certamente tornarão a base de código mais difícil de manter a longo prazo.

Para ser sincero, eu diria que toda a codificação deve ser feita de forma que qualquer recém-formado com conhecimentos básicos relativamente básicos no idioma / plataforma em questão possa pegá-lo e trabalhar com ele. Se é tão complicado e obscuro que você precisa de alguém com 20 anos de experiência no idioma / plataforma que conheça todos os pequenos truques internos, então o projeto está em uma terrível dívida técnica.

Bobby Tables
fonte
6
+1, os compiladores também mudam com o tempo, enquanto os hacks que não são mais necessários permanecem em seus lugares.
Obtuso? Você quer dizer obscuro?
Webbiedave 6/06/11
9
@ Bobby: Eu já me deparei com esse tipo de código. Eu ouvi isso descrito como um uso estúpido de inteligência.
Webbiedave 6/06/11
1
@ Kevin - eu não tenho tanta certeza. Algo que um graduado recente poderia entender não é a mesma coisa que um graduado recente poderia realmente escrever. Um código excelente deve ser fácil de entender, pois o graduado possui um conhecimento básico da estrutura e usa um depurador. O código mais decente é bastante fácil de entender, embora geralmente seja a lógica de negócios que pode ser um desafio para aprender para um graduado recente. Provavelmente, essa pessoa não tem conhecimento de domínio, o que pode ser difícil de alcançar.
Morgan Herlocker 6/06/11
2
@ Kevin: Um mestre de karateca usa apenas alguns movimentos básicos, mas aprendeu a aplicá-los em uma variedade infinita. Um mestre carpinteiro usa apenas algumas ferramentas escolhidas, mas aprendeu a aplicá-las em combinação perfeita. Quanto mais experiência ganho, mais acho que é o mesmo em programação. Não que você às vezes não precise de algo esotérico, apenas que raramente é o caso.
Joeri Sebrechts
42

programadores com mais experiência sabem mais coisas

eles não são segredos

Parece que ele está tentando vender alguma coisa!

Steven A. Lowe
fonte
21
+1 para "ele está tentando vender algo para você!" ele certamente é!
Chani
28

"finalmente ele me disse que você tem 2 anos nessa área e ele (cara de java) tem 20 anos de programador profissional, então ele sabe melhor do que você."

<rant>

Eu me deparei com essa merda há mais de 30 anos. Isso me irritou e me irritou ainda mais agora. Chama-se Argumento da Autoridade (AKA Proof by Authority ) e é pura besteira não adulterada * t. Todas as pessoas que conheci que tentaram reivindicar isso por si mesmas tiveram um sério problema de auto-estima ... e muitas vezes sabiam muito menos sobre o assunto do que pretendiam conhecer.

Eu conheci pessoalmente vários programadores assustadores e inteligentes que ainda estavam no ensino médio e estavam codificando há apenas um ano ou dois. Apenas dois exemplos: o sistema original do fórum foi escrito em 1973 por um adolescente de 15 anos e a primeira implementação de mensagens instantâneas para vários usuários foi escrita em 1974 por um adolescente de 13 anos que bebia leite enquanto os outros engenheiros estavam consumindo. uma cerveja na sexta-feira à tarde.

Também conheço alguns dinossauros que não adotam uma nova tecnologia há 10 ou 15 anos. Muitos deles admitem não acompanhar o que está acontecendo no momento, mas há quem veja isso como um distintivo de honra. Não é.

</rant>

Tendo tirado isso do meu sistema, gostaria de expandir um ponto exposto nas respostas do @Bobby Tables e do @Developer Art: usar "segredos", escrever "código inteligente" ou fazer qualquer coisa no código que seja "prova" "de quão obscuro você pode fazer algo está errado . Período. É o ato de uma pessoa imatura e egoísta que não tem em mente os melhores interesses do projeto / empresa. Eles estão colocando minas terrestres de manutenção que sairão em algum momento no futuro, provavelmente depois de terem passado para outras vítimas empregadoras.

O oposto de "inteligente" é escrever um código claro e conciso que use bem a linguagem de programação; usa padrões consistentes de nomeação; comentários apropriados de final de linha; bons comentários em bloco para explicar as principais seções; está documentado (com exemplos, quando apropriado); e testado. É isso que um verdadeiro programador profissional oferece.

E quando terminam, eles se voltam e orientam a próxima geração de programadores profissionais.

Peter Rowell
fonte
8
Não se esqueça o equivalente Stackexchange Proof por Reputation Score
EDA-qa mort-ora-y
+1 para uma atitude que eu gosto.
David Thornley 06/06
Argumentos da própria autoridade de um indivíduo (reivindicando-o por si) são, como você disse, geralmente ocos. No entanto, é provável que argumentos da autoridade de um indivíduo com experiência no assunto sejam válidos. Eles não são prováveis ​​logicamente, e é por isso que são menosprezados em seus links, mas certamente é respeitável.
9139 Kevin Vermeer
3
@ Kevin: Não estou dizendo que uma pessoa com mais experiência (real) provavelmente não esteja certa, mas isso é simplesmente uma probabilidade. Se estivéssemos lidando com uma ciência branda, poderia estar mais pronto para admitir o argumento, mas estamos lidando com uma das ciências mais difíceis mais difíceis que existem. Isso significa que não quero uma opinião ou um "confie em mim", quero fatos frios, duros e prováveis. Muitos anos atrás, encontrei um bug bastante sério no compilador C da Sun. Quando tentei denunciá-lo, um "especialista" da Sun tentou me impressionar: "Esse tipo de bug nunca poderia passar pelo nosso controle de qualidade". Eu disse a ele: "Fale com a mensagem de erro".
9788 Peter Pan,
1
Quanto mais experiência tenho e quanto mais aprendo, mais percebo o quanto não sei e mais humilde me torno. Agora estou completamente certo de que eu não posso escrever Ehlo Wordl corretamente
RobD
25

Não sei ao certo como alguém pode falar com o conhecimento hipotético de outra pessoa, mas minha experiência é que não existem "segredos" para a programação de computadores. De fato, é um domínio quase definido por abertura e compartilhamento de conhecimento. Alguns dos projetos mais complexos (aqueles que poderiam se beneficiar mais desses "segredos") são de código aberto, como o kernel do linux.

Acho que a ideia de que os programadores estão secretamente acumulando técnicas especiais é absurda, mas é muito difícil provar um negativo - especialmente quando é puramente hipotético.

Rein Henrichs
fonte
22

Os únicos segredos que tenho conhecimento são:

  • Nada é tão fácil quanto parece. O que você não vê são todas as minhas tentativas fracassadas.
  • Você nunca deve parar de aprender.
  • Não há substituto para um bom trabalho duro .
barrem23
fonte
Eu concordo com você. Mas ele estava falando alguns segredos, como sobre práticas recomendadas, padrões .. etc
Freshblood
Como você sabe que algo é o melhor, sem antes experimentar o resto? Estou com barrem23 neste. +1.
lightsong
1
verdade, para cada 10 boas linhas de código que você escreve e confirma, provavelmente há 90 linhas de código que você escreveu e excluiu para chegar a essas soluções de 10 linhas.
Lie Ryan
@abhiii: Como você sabe? Pedir aqui (ou no SO) é um bom começo.
Donal Fellows
Eu discordo desse último aforismo. Digamos que um programador, procurando reconhecer todos os caracteres que não sejam minúsculos 'a', passa o dia digitando uma classe de caracteres que contém todos os outros caracteres que podem encontrar no teclado. Isso é um trabalho árduo . No dia seguinte, um programador sênior, bocejando, o substitui por quatro caracteres: [^a]- isso não apenas torna a expressão mais rápida, mas também inclui vários caracteres estendidos / Unicode que o original perdeu. Eu digo que, pelo menos quando se trata de programação, trabalho duro não faz sentido. Não há substituto para o bom trabalho.
Stuart P. Bentley
9

Conheço um segredo que os programadores mais jovens não tendem a conhecer ou aceitar. Quando alguém é avançado o suficiente para entender isso, ele geralmente descobre por conta própria.

<TheSecret> Todo o código é péssimo. Especialmente a sua. A minha também. O código de todos os programadores geniais do mundo --- sim, também é péssimo. Aceite e faça o trabalho da melhor maneira possível. </TheSecret>

Ishpeck
fonte
Ei! MEU código não é péssimo! Oh espere. Desculpa. Entendi errado esse negativo. Sim você está certo. Todo o código é péssimo. A única diferença está no grau de sucção. Isso varia de buracos negros galácticos a aspiradores de pó quebrados.
APENAS MINHA OPINIÃO correta
2
Quando eu fui ensinado sobre testes, o professor nos fez escrever o maior número possível de testes para uma função básica que calculava a área de um triângulo, considerando o comprimento de três lados como parâmetros. Eu tinha certeza de que tinha encontrado uma solução completa de cobertura de testes com meus ~ 11 testes ... até que ela mostrou o número real de testes válidos perto de ~ 111. Percebi que mesmo meu código trivial nunca seria perfeito.
Morgan Herlocker 6/06/11
9

Eu tenho 50 anos de experiência. Aprendi muitas coisas que os programadores mais jovens ainda não aprenderam. Estou perfeitamente disposto a compartilhá-los e tento, de várias maneiras.

Aprender é algo que você precisa fazer.

Costumo ouvir que a manutenção é realmente importante e concordo completamente. No entanto, ele não vem de graça. Pode exigir mais ou menos uma curva de aprendizado por parte do mantenedor.

Um programador recém-formado em Ciência da Computação examinaria meu código e diria que é impossível de manter e cheio de segredos. De fato, ele ou ela simplesmente não termina de aprender coisas novas.

Os pilotos têm um ditado, quando você passa nos testes exigidos e recebe o "bilhete" do seu piloto. Eles dizem que é uma licença para aprender.

A educação não para quando você recebe um diploma. Está apenas começando.

Mike Dunlavey
fonte
2
Se um iniciante no seu código com uma quantidade razoável de entendimento básico (o que a maioria das pessoas qualificaria como mestre em CS) diz que seu código é inalterável, é isso. Manutenção é a medida de entendimento necessária a partir de uma base zero . Todo o código é "sustentável" se você o definir como "qualquer coisa que possa ser entendida, dado ao mundo tempo e tempo suficientes".
Stuart P. Bentley
1
@ Stuart: Se eu posso apenas dar um exemplo. Em 1985, me deparei com o método de execução diferencial . É uma maneira de criar uma linguagem específica de domínio em que o domínio é interfaces de usuário complexas. Ele salva aproximadamente uma ordem de magnitude do código fonte e, depois que você aprende como ele funciona, a maioria das manutenções (alterações de código em resposta a requisitos alterados) são edições muito simples do código-fonte. Esse é o tipo de coisa que eu quero dizer. A manutenção tem o preço de uma curva de aprendizado.
Mike Dunlavey
7

Conhecer pequenos segredos ocultos de certas linguagens ou estruturas de programação tem pouco ou nenhum valor prático.

A maior parte do desenvolvimento prático de software não encontra esses recursos ocultos em sua prática. Ainda mais, uma das práticas recomendadas sugere que você evite deliberadamente se aventurar em áreas ocultas das tecnologias que usa, pois isso torna o código menos sustentável e mais propenso a erros, já que a maioria dos programadores não conhece esses "segredos".

Em vez de gastar / desperdiçar (escolha um) tempo aprendendo os segredos de uma tecnologia específica, geralmente é melhor expandir o alcance de um conhecimento e aprender ferramentas adjacentes ou ainda melhorar suas habilidades de não programação ou aprender mais sobre os negócios em que você está .

Com a velocidade da mudança em nosso campo, não vale a pena investir profundamente em uma ferramenta específica - o conhecimento será preterido em breve.

Agora, somente se você se posicionar como um especialista em tecnologia e pretender oferecer seus serviços de consultoria nesse campo específico, faz sentido investir profundamente. Caso contrário, é um esforço desperdiçado.

user8685
fonte
3
+1 por apontar que "segredos" são secretos por um motivo. Um bom exemplo seria a API do Windows "não documentada", cujo uso torna seus aplicativos insustentáveis.
precisa saber é o seguinte
O fato de o C ++ ter casos de canto e comportamento indefinido não me incomoda muito, porque eu não chego nem perto disso. Saber essas coisas ajuda na depuração de códigos mal escritos.
David Thornley 06/06
5

Você está vendendo uma lista de mercadorias aqui. Alguém está tentando empregar o conceito de Mysterious Secrets ™ que faz de você um Elite Programmer ™ com o objetivo de fazer com que você pague por esses Mysterious Secrets ™. O próximo passo é alguém se oferecendo para ensinar esses segredos misteriosos ™ na forma de vídeos, discursos, podcasts ou livros mal impressos pelo preço baixo e baixo de apenas <insira o que o vendedor achar que você estará disposto a pagar>.

Como posso ter certeza disso? Venho programando desde os anos 70 e conheço uma tonelada métrica a mais de linguagens de programação do que apenas Java. Eu já vi programação (profissional e escolarmente) do menor dos pequenos (sistemas embarcados com centenas de bytes - que são bytes - de RAM) até grandes pedaços de Big Iron ™.

Existe um segredo para ser um bom programador e único: você precisa trabalhar para melhorar a si mesmo constantemente. Quem lhe disser o contrário, é um mentiroso e / ou tolo.

APENAS MINHA OPINIÃO correta
fonte
4

O único segredo que não é conhecido pelos jovens programadores é: os programadores não são tão inteligentes quanto pensam .

Quando você sabe disso, para de escrever um código que não entenderá no próximo mês, começa a apreciar o controle de versão, não corrige o código que já funciona, documenta seu código, não interpreta a especificação, não t recursos de código que possam ser úteis algum dia no futuro, você não rejeita o código legado, ...

Em outras palavras, o segredo é a experiência.

mouviciel
fonte
3

Obviamente, alguém com 20 anos de experiência terá mais, bem, experiência do que alguém com apenas 2 anos. Mas não há segredos - qual seria o objetivo?

(Claro, alguém tentando manter um segredo se dizer que ...)

Dean Harding
fonte
1

Enquanto a experiência importa, podemos aprender com as experiências dos outros. Acabei de ler "The Clean Coder", onde Robert C Martin (tio Bob) compartilha os erros que cometeu e as lições que aprendeu. Muitos dos quais estão listados nas respostas aqui, como continuar aprendendo.

Jeanne Boyarsky
fonte
1

Tudo o que poucos sabem pode ser considerado um segredo.

Tudo o que sabemos hoje foi descoberto.

Então, tudo já foi um segredo.

Algum conhecimento se espalha rapidamente e outros se espalha lentamente.

Alguns programadores nunca descobrem nada eles mesmos (mas podem aplicar segredos de outros com muito sucesso).

Alguns programadores (por exemplo, John Carmack, Ken Perlin, Donald Knuth) parecem tropeçar em um novo segredo todos os dias.

Então, sim, existem programadores que conhecem alguns segredos que nós outros não conhecemos ... ainda.

Andreas
fonte
1

Conhecimento por si só não é poder, eu garanto. No entanto, alguém pode ter desenvolvido suas habilidades além de você, o que pode significar que ele tem dicas e estratégias que podem ajudá-lo a avançar. Observe que há um par de "may" na última frase, pois não é uma certeza de que eles o moverão realmente. Portanto, existe o potencial de que isso não seja nada novo ou chocante para você.

Ao mesmo tempo, existem várias práticas e estratégias que ao mesmo tempo podem parecer radicais, embora hoje as tomemos por garantidas. O controle da fonte, a integração contínua e o teste de unidade eram todos novos em algum momento, certo?

JB King
fonte
1

É possível que você e a maioria das pessoas que estão respondendo a essa pergunta estejam se concentrando demais na palavra "segredo".

Se retirarmos a parte "oculta" dela, sim, é perfeitamente possível que esse programador famoso tenha algumas dicas e truques úteis ou conhecimentos adquiridos com a experiência que, de alguma forma, o beneficiariam. Estou falando de conhecimentos como você encontraria em livros clássicos de SE ou CS, como Rapid Development ou The Pragmatic Programmer . Isso combinado com trabalho duro pode absolutamente ajudar.

Portanto, nesse sentido, o famoso programador de sucesso pode possuir conhecimentos que outras pessoas ainda não possuem.

Mas não há nenhum tipo de receita secreta que transformará um 'programador não tão bom nesta área' em um famoso com muito sucesso.

Nick Knowlson
fonte
0

Não existem pequenos segredos. Somente código complicado ... acabou se transformando em código eficiente e simplificado.

canto da luz
fonte
0

O segredo está no tipo de problema, área do problema e como você o soluciona. Por exemplo, eu escrevi um programa php para abrir um arquivo e ler seus dados e convertê-los em xml. Em seguida, usei esse xml para apresentar dados em diferentes elementos html, por exemplo, caixa de opção etc. Após 1 ano, tivemos um novo programador júnior para participar do como ele era bom em algoritmos, resolveu matematicamente o problema, o que fez o código parecer difícil com as esquerdas de turno e dividir as matrizes etc.etc. mas o tempo de execução foi reduzido em até 40% do que escrevi. Sua abordagem para escrever as declarações php me surpreendeu. Portanto, acredito que existem certos truques que não existem segredos; mais uma coisa é quantas alternativas você pode pensar em sua mente.

Khurram Ijaz
fonte
0

Desculpe se estou perdendo alguma coisa, mas não consegui encontrar isso acima, pelo menos não explicitamente indicado.

O segredo é realmente usar as ferramentas certas para o trabalho. De fato, são as ferramentas que os programadores antigos apreciam e não divulgam com tanta facilidade. Eles falarão com você sobre seus erros de CONCRETE, mas raramente sugerirão qual ferramenta pode ajudá-lo a evitá-los. Suas ferramentas são um dos principais segredos de sua produtividade.

Dando apenas um exemplo, é possível memorizar um livro de 600 páginas sobre serviços da Web, entender os meandros da especificação WSDL (eu tentei uma vez ... compreender os meandros) e ainda não conseguir entender o que há de errado com a API ele usa quando tenta fazer uma chamada para um serviço da web existente.

Por outro lado, pode-se ter pouco conhecimento das especificações (mas uma idéia geral clara) e usar o Wireshark.

Pode-se lembrar de todos os C ++ (oh meu ..) e ainda não entender o que está errado com seu código escrito com vi e compilado com gcc (sem avisos ..). Mas um IDE gráfico com um depurador pode ajudar ..

E então o Google. O maior segredo de todos os dias.

John Donn
fonte
A guilda virá atrás de você por compartilhar o segredo do Google com o mundo. A primeira regra da aliança é não falar sobre o Google.
Ramhound 20/10
Bem, se a aliança quer vir após mim, ele vai ser bastante para mencionar vi em vão ..
John Donne