Um programador deve ter aulas de redação para aprimorar a expressividade do código?

15

Dado que os programadores são autores e escrevem código para expressar pensamentos e conceitos abstratos, e um bom código deve ser lido por outros programadores sem dificuldades e mal-entendidos, um programador deve ter aulas de redação para escrever um código melhor?

Abstrair conceitos e problemas / entidades do mundo real é uma parte importante da escrita de um bom código, e um bom domínio da linguagem usada para codificação deve permitir que o programador expresse seus pensamentos mais facilmente ou de uma maneira melhor. Além disso, ao tentar escrever ou reescrever algum código para torná-lo melhor, muito tempo pode ser gasto na decisão dos nomes de funções, variáveis ​​ou estruturas de dados.

Eu acho que isso também pode ajudar a evitar a criação de código com mais de um significado, geralmente causa de mal-entendidos entre diferentes programadores. O código deve sempre expressar claramente sua função sem ambiguidade.

Jose Faeti
fonte
2
Seria bom que as pessoas aprendessem a escrever claramente depois de atingirem os maiores de 18 anos, especialmente quando usam um idioma estrangeiro (como é o caso em TI). A questão é se existe um método de ensino que possa alcançar bons resultados em um tempo relativamente curto. Lembro-me de quando entrei na universidade, recebi um curso de inglês científico, acho que me ajudou um pouco (sim, eu costumava escrever pior que isso :)).
NoChance
1
O que é "expressividade de código"? Entendo que é algo que não seja a expressividade de uma linguagem de programação , porque nenhuma quantidade de lições de escrita vai mudar isso ...
Andres F.
1
blog.codinghorror.com/recommended-reading-for-developers -> Ver código completo 2. Melhor livro sobre "como escrever código corretamente" que eu já li.
Machado
1
@ JosephFaeti, então você tem um bom gosto em livros, senhor. :-) Páginas intermináveis ​​discutindo como escrever corretamente uma declaração "se"? Conte comigo. :-)
Machado

Respostas:

25

1. Aulas de redação? Na verdade não.

Escrever código fonte é diferente o suficiente de escrever um livro.

Embora ambos busquem os mesmos objetivos: sendo o mais inequívoco possível e fáceis de entender, estão fazendo isso de uma maneira muito diferente, e as coisas que um escritor deve aprender não são as mesmas que um desenvolvedor de software deve aprender.

Exemplo 1: figuras de linguagem

As figuras de linguagem são valiosas ao escrever romances, poesias etc., pois aumentam a expressividade da escrita.

Qual foi a última vez que você viu um oxímoro ou litotes no código-fonte ? Ajudaria tê-los ou seria extremamente prejudicial para qualquer desenvolvedor que precisará manter esse código-fonte mais tarde?

Exemplo 2: vocabulário

Vocabulário rico é muito apreciado na literatura. O vocabulário de William Shakespeare, por exemplo, é de vinte mil a vinte e cinco mil palavras. Um vocabulário mais rico torna mais interessante a leitura de um romance ou poema.

Quando você escreve o código-fonte, espera que seja lido por pessoas que não falam inglês muito bem . Mostrar quão bem você conhece o inglês seria extremamente prejudicial para o seu código. Se você conhece uma palavra sofisticada que significa exatamente o que precisa, mas sabe que muitas pessoas não sabem o significado dessa palavra, deve encontrar um sinônimo menos expressivo ou um conjunto de palavras que expliquem o significado. Um vocabulário de alguns milhares de palavras geralmente é suficiente para um determinado projeto.

Observe um aspecto importante: embora o Google Translate possa ser de grande ajuda para um falante não-nativo, há dois problemas com qualquer tradutor:

  • Um par de idiomas não tem necessariamente uma correspondência de 1: 1 entre as palavras. Algumas palavras não têm tradução em outros idiomas, ou várias palavras podem se traduzir em uma única palavra em um idioma estrangeiro. Por exemplo, em russo, há uma quantidade enorme de palavras direcionadas a estados específicos de neve e clima frio, e traduzi-las em francês ou espanhol é geralmente impossível sem perder sua especificidade.

  • Às vezes, uma palavra tem vários significados e o significado é deduzido do contexto. O Google Translate, apesar de sua alta qualidade, geralmente não pode indicar o significado de nenhuma das situações mais básicas.

Exemplo 3: expressões

As expressões também tornam a prosa mais rica. Um autor espera que o leitor tenha uma certa quantidade de cultura geral e aproveita essa oportunidade para tornar o texto mais expressivo.

Da mesma forma que no exemplo anterior, essas expressões podem ser muito problemáticas quando lidas por pessoas que não são falantes nativos. Mas se o vocabulário geral geralmente pode ser traduzido, as expressões são muito mais problemáticas.

Por exemplo, o inglês não é meu primeiro idioma e, diariamente, encontro expressões, inclusive aqui no StackExchange, que não conheço. Eu tento adivinhar o significado deles, e às vezes estou certo. Mas às vezes eu estou errado, e pesquisar essas expressões no Google não ajuda.

Um usuário em seu comentário me lembrou um exemplo que me fez sofrer por um longo tempo quando comecei a programar: a agulha do PHP e palheiro . Eu não tinha conhecimento da figura correspondente do discurso, portanto, toda vez que estava lendo a documentação, fiquei pensando sobre o que é isso. Desnecessário dizer que os C # sequence.Contains(element)ou os excelentes Python element in sequencesão uma alternativa muito melhor. Bem, pelo menos, os desenvolvedores que não sabem hebraico também tiveram que sofrer de PHP , mas essa é uma história diferente.

Exemplo 4: referências culturais

Referências culturais. Na literatura, é tentador incluir elementos de uma determinada cultura, e isso também torna o livro mais rico e, às vezes, mais interessante de ler.

No entanto, o código é endereçado a desenvolvedores de todo o mundo. Portanto, o que é uma referência óbvia para um desenvolvedor italiano pode não ser tão óbvio para um russo, e o que todo garoto ou garota indiana conhece pode não ser necessariamente conhecido por um programador americano.

O mesmo usuário que falou sobre a agulha e o palheiro também deu um excelente exemplo dessa referência cultural: o Graal. Quem não sabe o que é Graal? Bem, quero dizer, é "Graal" em francês, "Grial" em espanhol e ... "Kutsal Kâse" em turco, mas ainda assim. No entanto, quantos desenvolvedores americanos ou europeus conhecem a história medieval da China ou da Índia? Por que alguém presumiria que todo programador chinês e indiano precisa conhecer a referência do Santo Graal?

2. Lições para escrever código fonte expressivo? Certo.

  • Qualquer desenvolvedor deve aprender a escrever código fonte expressivo.

  • Qualquer desenvolvedor deve explicar por que o comentário está em:

    int j = i + 1; // Creating i and adding 1 to it.
    

    é ruim, mesmo aparte do fato de estar totalmente errado.

  • Qualquer desenvolvedor deve entender a refatoração básica e como isso ajuda a tornar o código fonte mais expressivo.

  • Qualquer desenvolvedor deve lembrar que 20% do tempo é gasto desenvolvendo código e 80% do tempo mantendo-o. Para alguns projetos, é mais como 5% - 95%.

  • etc.


Em essência, a programação está próxima da documentação técnica. Uma pessoa que escreve uma folha de especificações para um parafuso precisa ter aulas de redação? Na verdade não. O mesmo se aplica aos desenvolvedores. Qualquer pessoa deve escrever sem cometer erros de ortografia em todas as palavras, e qualquer pessoa deve poder comunicar suas idéias com clareza suficiente. Além disso, não tenho certeza de como as aulas de redação seriam mais úteis do que, digamos, um curso de ciência da computação ou segurança de TI ou qualquer outra coisa.

A expressividade do código fonte pode ser aprendida por outros meios. superM mencionou um deles em sua resposta : ler um bom código. Eu posso mencionar alguns outros:

  • Lendo livros como Beautiful Code ou Code Complete,

  • Solicitando que um desenvolvedor mais experiente revise seu código,

  • Compreender padrões e como e quando usá-los.

Arseni Mourzenko
fonte
+1 boa resposta. Ser expressivo e conciso é muito importante, mas escrever lições pode não ser o melhor uso do tempo de treinamento. Esforçar-se conscientemente para escrever códigos óbvios e autoexplicativos é algo que todos deveriam fazer, e acho que o resto simplesmente se encaixa sem a necessidade de lições reais.
Daniel B
Há documentação, e-mails, ... assim como código - a parte escrita da comunicação com seus colegas de trabalho, chefes, usuários, futuro eu etc. etc. Mas, por favor, sem poesia.
Steve314
Eu entendi. Na verdade, eu estava pensando mais sobre o uso de linguagens específicas de domínio. Cheguei a um ponto em que me sinto mais confortável em programar em uma linguagem específica de domínio, em vez de usar a sintaxe básica de uma linguagem de programação de uso geral. Isso torna seu código mais facilmente compreensível e direto, mesmo para não programadores. Fiquei me perguntando se isso era devido ao meu vocabulário ruim de inglês, daí o pensamento sobre escrever aulas.
Jose Faeti 6/09/12
Resposta geralmente boa, mas vi figuras de linguagem no código. Por exemplo, uma das poucas boas características do PHP é que todas as suas funções de busca / busca procuram agulhas nos palheiros.
user949300
@ user949300: e essa é uma das razões pelas quais eu odiava tanto o PHP. Como um falante de inglês não nativo, eu não conhecia a expressão correspondente e, para mim, esses termos foram úteis. Compare-o com os C # sequence.Contains(element)ou os excelentes Python element in sequence. Portanto, não, figuras de linguagem não têm lugar nas APIs.
Arseni Mourzenko
11

um programador deve ter aulas de redação para escrever um código melhor?

Não. Um programador deve ter aulas de redação para aprender a escrever uma prosa melhor. Um programador deve ter aulas de programação para aprender a escrever um código melhor. Apesar de algumas semelhanças, escrever prosa e escrever código são bem diferentes.

Isso não quer dizer que os programadores não devam ter aulas de redação. Eles deviam! Algumas razões:

  • Escrever é uma habilidade essencial para qualquer pessoa educada. Você parecerá mais inteligente se conseguir escrever bem.

  • Apesar de seus melhores esforços, os programadores frequentemente precisam se comunicar com outros seres humanos, geralmente usando a palavra escrita.

  • Você aprende habilidades além da escrita nas aulas de redação, e essas são geralmente úteis para os programadores. Por exemplo, você aprenderá a discutir o trabalho de outras pessoas sem ferir seus sentimentos, e aprenderá a aceitar críticas de outras pessoas sem levar para o lado pessoal.

Caleb
fonte
Essa é a questão. Mesmo que seu código não seja necessariamente melhor, você se tornará uma pessoa melhor, principalmente na comunicação com outros programadores ou colegas de trabalho. Acho que minha pergunta deveria ter sido formulado de forma diferente :)
Jose FAETI
2
Muito isso. Ser capaz de escrever prosa bem é uma habilidade fundamental para qualquer profissional
Zachary K
6

Meu código depende cada vez mais da criação de um vocabulário compartilhado entre os negócios e as equipes técnicas. Eu diria que melhorar suas habilidades de escrita pode ajudar a reduzir a ambiguidade e mal-entendidos nesses esforços, mas não é provável que ajude a expressividade do seu código.

A noção literária de expressividade não é a mesma que a noção de expressividade de programação. Em muitos casos, a ambiguidade na linguagem pode ser usada como um dispositivo literário, mesmo na não ficção, de uma forma que aumenta a expressividade, porque desencadeia várias associações culturais, linguísticas e simbólicas no leitor, intencionais e não intencionais. Esse tipo de expressividade não é desejável na programação; abstração é mais valiosa que ambiguidade. Na programação, a abstração aumenta a flexibilidade, talvez com algum custo de carga cognitiva. A abstração na forma literária pode ter o oposto do efeito que tem na programação: quanto mais abstrata sua escrita, maior a probabilidade de o leitor ter a percepção de que você não está dizendo nada. Todos os símbolos e associações que resultam da fala concreta têm valor,

No entanto, um programador não é uma máquina. Os seres humanos se beneficiam de maneiras muitas vezes inesperadas do crescimento intelectual e emocional. Melhorar sua escrita pode resultar em maior empatia do cliente, porque você se força a enfrentar os desafios da comunicação; talvez você sinta esse cliente que diz o que quer, depois o entrega e ele percebe que não é o que eles precisam. Talvez você apenas aprenda a se concentrar no que não foi dito.

Talvez aprender a jogar argila em uma roda de oleiro o ajude a começar a ver paralelos entre artesanato e desenvolvimento de software. Estudar a maneira como os arquitetos da construção se comunicam pode levar a uma apreciação mais forte da construção de um vocabulário de padrões de design em programação. O estudo da biologia pode levar a idéias fascinantes sobre como as formigas e as abelhas encontram e se comunicam sobre as fontes de alimentos e como esses mecanismos simples podem ser traduzidos em algoritmos de busca de caminhos.

Aprender coisas fora do seu domínio principal vale a pena porque pessoas curiosas são melhores desenvolvedores do que pessoas que não são.

Pelo que vale, eu era quase um especialista em literatura; Acabei mudando para Estudos da Ásia Oriental, porque estava mais interessado nas aulas que ministrava naquele departamento. Há uma chance de eu não estar na indústria se não tivesse estudado Estudos do Leste Asiático, porque o efeito colateral de estudar japonês me tornou mais valioso na época, quando uma empresa de software me contratou em parte devido a habilidades linguísticas. Eu ainda tinha que criar um portfólio mais profundo de habilidades técnicas, mas os efeitos colaterais não intencionais de aprender qualquer coisa podem torná-lo um profissional de software melhor e mais relevante.

JasonTrue
fonte
+1: "Meu código depende cada vez mais da criação de um vocabulário compartilhado entre a empresa e as equipes técnicas.": Ponto muito importante! Muitos bugs são originários de mal-entendidos porque os analistas e os desenvolvedores usam um determinado termo para duas coisas diferentes.
Giorgio
4

Quando os projetos de programação falham, geralmente ocorre devido à falha na comunicação, geralmente em torno dos requisitos. Embora uma compreensão medíocre do inglês possa ser suficiente para escrever código, ser um bom comunicador é essencial para escrever o código certo. Nesta era da comunicação baseada em texto e de trabalho remoto, a escrita em inglês é uma habilidade de comunicação muito importante.

Dito isto, sua pergunta é escrita de uma maneira muito clara e concisa - melhor do que a maioria dos programadores com quem trabalhei. Não tendo visto seu código, sugiro que você se concentre em se expressar na linguagem de codificação de sua escolha. Para Java, recomendo o livro de Joshua Bloch, "Effective Java".

GlenPeterson
fonte
Obrigado, estou tentando o meu melhor! Na verdade, cheguei ao ponto em que a sintaxe de uma linguagem de programação de propósito geral não é suficiente para me expressar ao codificar. Agora estou programando ferramentas de pré-processador para aprimorar a sintaxe da linguagem e implementando linguagens específicas de domínio para o mesmo assunto, o que talvez seja melhor do que tentar forçar a expressividade em uma linguagem de programação de uso geral.
Jose Faeti 6/09/12
3

Como escritores são ensinados lendo clássicos do mundo, os programadores são educados lendo boas códigos. Mas há um pequeno problema. Embora existam gigantes reconhecidos na literatura, existem poucos na programação. E se houver, eles podem "falar" um idioma diferente. (Não tenho certeza de que seja razoável aconselhar a leitura do código-fonte Minix por Tanenbaum)

Existem muitas maneiras populares de tornar o código mais legível (=> manutenciável), como escrever comentários, dar nomes significativos etc. Além disso, muitas empresas estabelecem suas regras para escrever código, e isso facilita tudo.

De qualquer forma, como muitos escritores excelentes, os programadores nunca estão felizes com seu próprio código. Portanto, saber quando parar é tão importante quanto escrever código de qualidade.

superM
fonte
2

Eu sempre acho que parar depois de cada pedaço de código que você escreve e lê-lo novamente, imaginando que você nunca viu isso antes, me leva muito longe com isso.

Melhor ainda é pedir a um amigo que esteja familiarizado com a programação que leia seu código sem dizer o que ele faz.

Eliot Ball
fonte
0

Eu não acho que isso vai ajudar; a escrita criativa é sobre tramas e desenvolvimento e diálogo de personagens, não sobre expressar conceitos técnicos com clareza. A escrita técnica pode ajudar, mas duvido - são apenas tipos muito diferentes de escrita!

e observe que o código "legível" é subjetivo e, principalmente, uma questão de estilo sintático e expressões comuns (que variam entre idiomas e até entre equipes)

escolher bons nomes para variáveis ​​e classes e métodos, no entanto, é importante. Todo desenvolvedor se torna, até certo ponto, um especialista no assunto em certos aspectos do domínio em desenvolvimento; portanto, o uso correto da terminologia do domínio é fundamental.

revisões por pares podem ajudá-lo a criar vocabulário e confiança

Steven A. Lowe
fonte
0

Certamente há uma grande diferença entre escrever código e escrever em prosa.

Na prosa, as frases são conectadas (ou separadas) pelo tempo (da maneira que elas se seguem para alcançar um fim ou significado), mas no código (eficiente) você pode (re) carregar partes da 'história' de tabelas com repetições ações / respostas. Portanto, a interação com o leitor (em prosa) ou usuário (de código) é totalmente diferente.

De outra maneira, escrever prosa 'legal' e escrever código 'legal' são semelhantes: aprender a escrever (código ou prosa) é um processo que envolve muitos erros (ou pensar / testar melhorias ou reformular) para obtê-lo ' elegante'.

Eu acho que o sistema periódico químico de elementos é elegante, por causa da maneira muito compacta que descreve algumas propriedades fundamentais dos materiais básicos que usamos, um pouco como código eficiente, mas certamente não é prosa. Uma piada tem muitas qualidades em prosa (levando você a um certo humor, mantendo-o e depois mudando, quando inesperado), mas essa é uma prática terrível de codificação.

Mas ambos os tipos de escrita pedem habilidade.

MoonLightning
fonte
-1

inglês básico e gramática são suficientes para um programador do meu ponto de vista. Mas qualquer coisa que interrompa uma rotina de programação monótona será sempre rejuvenescedora e, portanto, as lições de redação serão relaxantes para os programadores.

rajesh singh
fonte
4
Uma rotina de programação monótona talvez fosse melhor abordada por uma modificação de carreira do que por escrever lições.
Eliot Ball