Programar * em * um idioma x escrever código C em Ruby

10

Código estados completos que você deve código de brindes em uma linguagem em oposição ao código no mesmo. Com isso, eles querem dizer

Não limite seu pensamento de programação apenas aos conceitos que são suportados automaticamente pelo seu idioma. Os melhores programadores pensam no que querem fazer e depois avaliam como atingir seus objetivos com as ferramentas de programação à sua disposição. (capítulo 34.4)

Isso não leva ao uso de um estilo de programação em todas as linguagens existentes, independentemente dos pontos fortes e fracos da linguagem em questão?

Ou, para colocar a pergunta em um formato mais responsável:

Você sugeriria que alguém tentasse codificar o problema da maneira mais clara possível com os detalhes de sua linguagem ou deveria procurar a solução mais elegante em geral, mesmo que isso signifique que você precise implementar construções possivelmente constrangedoras que não existem nativamente na linguagem de alguém?

bastibe
fonte
5
+1 boa pergunta. Eu posso escrever em Perl em meia dúzia de idiomas diferentes, neste momento.
21412 Ray Dan
@Dan Ray - estranho! Eu sempre escrevo C em Perl.
James Anderson

Respostas:

7

Existe uma abordagem ainda melhor: esqueça a sua patética linguagem de programação fixa. Codifique seu problema em uma linguagem que você acabou de inventar, derivada dos próprios termos do domínio do problema relevante, codifique-o da maneira mais natural possível e só então pense em implementar essa nova linguagem de programação ou reduzir seu código às limitações do idioma existente.

Essa abordagem é chamada de programação orientada a linguagem . Existem muitas técnicas de implementação eficiente de linguagens específicas de domínio , e esse é um tópico especialmente importante para a comunidade Ruby.

SK-logic
fonte
11
A comunidade Haskell também adota linguagens específicas de domínio, e a linguagem de programação Haskell é particularmente adequada para implementá-las.
27612 Tdammers
A implementação de um sistema de script personalizado baseado em uma linguagem incorporada como Lua ou Tkl é considerada uma DSL para escrever? Se sim, como você lida com as deficiências de, por exemplo, Lua?
bastibe 27/02
@Paperflyer, em alguns casos, faz sentido implementar linguagens sobre algo como Lua (especialmente se for Metalua), mas é mais fácil escrever um compilador adequado para a maioria das DSLs típicas.
SK-logic,
@ Tdammers, sim, Haskell e Scala são todos sobre DSLs. Mas sou do lado sombrio da Força: minha abordagem preferida é a metaprogramação. Acredito que intérpretes ad hoc são quase sempre inferiores aos compiladores.
SK-logic
2
@tdammers, uma DSL implementada em cima de funções de alta ordem é praticamente um intérprete ad hoc. Você não pode estender a sintaxe Haskell da mesma maneira que estende, digamos, Lisp. Mesmo com o Template Haskell. É uma maneira totalmente diferente (e, eu diria, limitada) de implementar DSLs. Tudo bem em muitos casos, mas, para qualquer coisa realmente complexa, leva a implementações totalmente ilegíveis, enquanto uma metaprogramação em vários estágios é apenas trivial, não importa quão grande e estranha seja sua DSL.
SK-logic,
2

Acredito na resposta correta, e a pretendida pelo livro é:

deve-se tentar codificar o problema da maneira mais ordenada possível com os detalhes de sua linguagem

Ao programar em uma linguagem, sempre presumi que fosse usar técnicas fora do estilo normal da linguagem , o que levaria a um benefício . Essa é a principal diferença para escrever em um estilo em todos os idiomas.

Por exemplo, aprender Haskell melhorou bastante minha habilidade no uso de funções de ordem superior. Agora, ao programar em c #, uso vários IEnumerablemétodos, como Selectmais frequentemente, pois o uso desses métodos leva a um código mais limpo do que a criação de loops. Também costumo usar as funções pass e use (ie Func<int, int>) com mais frequência devido à minha experiência com haskell. Meu uso da herança caiu devido a isso e, na maioria das vezes, o resultado é um código mais simples.

No entanto, não uso conceitos como mônadas ou tipos de dados algébricos em c #. Isso ocorre porque nenhum deles é claramente representável em c # e leva a pouco benefício em troca de muita obscuridade.

Então, eu uso as ferramentas da linguagem para usar as habilidades que tenho para o melhor efeito. Eu acredito que está programando na linguagem.

David Miani
fonte
0

Você sugeriria que alguém tentasse codificar o problema da maneira mais clara possível com os detalhes de sua linguagem ou deveria procurar a solução mais elegante em geral, mesmo que isso signifique que você precise implementar construções possivelmente constrangedoras que não existem nativamente na linguagem de alguém?

O ponto é que bons programadores não têm uma linguagem. A citação do livro fala sobre "ferramentas de programação à sua disposição" - ou seja, se você conhece perl e Java, talvez deva usar perl para a manipulação rápida de strings. Linguagens de programação não são caixas para nos limitar, mas ferramentas que usamos para resolver problemas. Isto é (imo) o que o Code Complete está chegando. Não codifique em uma caixa de linguagem / ambiente de programação, coloque a melhor solução na melhor linguagem / ambiente de programação para você, seu problema e sua solução.

Telastyn
fonte