Eu sempre desconfio das unânimidades e das coisas “tudo de bom” que existem em TI, e uma delas é o hype envolta de DSLs. Por que ninguém comenta o lado negativo?
Da mesma forma que XML, há a sua utilidade, mas não é a salvação da pátria. Algumas perguntas, responda quem quiser:
No planeta existem bilhões de pessoas que não falam inglês. Apenas uma minoria o faz e nessa minoria não são todos que o dominam 100%. Como uma linguagem “próxima do inglês” pode ser bom nesse contexto?
Como uma “linguagem de programação programável” pode ser melhor do que uma com keywords fixos, onde o usuário aprende uma vez para nunca mais precisar se preocupar? Levando-se em conta a diversidade lingüística no mundo. Não seria pouco pragmático querer que o mundo mude ao invés de se adaptar a ele?
Imaginando a proliferação de DSLs, não chegaremos algum dia num ponto parecido ao que existe com XML hoje?
O que é pior, um projeto usar DSLs cujas sintaxes possuem várias linguagens humanas diferentes (inglês, português, espanhol, etc…) ou apenas em “inglês macarrônico e com diversos erros de grafia”?
Dos que necessitam saber (programadores, analistas de negócio, etc), a GRANDE maioria já sabe inglês (por mais básico que seja), até porque a maioria das linguagens da programação é em inglês. Pros que conhecem o basicão seria praticamente aprender algumas “keywords” extras. Afinal, se o baiano não conhece nem o basicão do inglês e se considera “programador”, não espere nenhum milagre só pelo fato dele estar usando uma DSL.
Aqui você mostra que não entendeu a idéia de DSL. Pense e responda: O que está errado:
Nós programadores pegarmos a realidade do mundo e adaptarmos para o mundo das linguagens da programação?
, ou
As linguagens tentarem se aproximar cada vez mais de uma representação real?
XSD’s, etc, etc?
Porque um projeto precisaria ter sintaxe em inglês, português, espanhol, etc…? :shock:
[quote=plentz]Dos que necessitam saber (programadores, analistas de negócio, etc), a GRANDE maioria já sabe inglês (por mais básico que seja), até porque a maioria das linguagens da programação é em inglês. Pros que conhecem o basicão seria praticamente aprender algumas “keywords” extras.
[/quote]
Os keywords tradicionais “if”, “while”, “class” são fáceis pois bastam serem aprendidos de uma vez e depois nunca mais. Isso já é o que todas as linguagens têm em comum.
A class library já é mais complicado especialmente para iniciantes que tem dificuldade com o inglês. Não é razoável esperar que todo mundo com 15 anos saiba falar inglês fluentemente, e quem aqui já trabalhou no exterior sabe que o inglês praticado nessas escolinhas não ajuda muito também. Muitos que acham que “sabem inglês”, não sabem tanto assim.
No caso de DSLs novas palavras seriam adicionadas além dos keywords tradicionais, exigindo um conhecimento mais profundo da lingua inglesa, isso fora do que já é tradicional. O indivíduo deverá entender a lógica que determinado trecho retrata numa língua não convencionada por padrões como uma linguagem comum, como o Java ou C++, onde a lógica em si seria dada por esses keywords.
A pergunta é: não seria uma desvantagem a diversidade e liberdade de se criarem DSLs nesse quesito?
Talvez o argumento “closer to English” seja bom para alguns contadores de feijão americanos com medo que seus trabalhos sejam enviados para fora.
[quote=plentz]Aqui você mostra que não entendeu a idéia de DSL. Pense e responda: O que está errado:
Nós programadores pegarmos a realidade do mundo e adaptarmos para o mundo das linguagens da programação?
, ou
As linguagens tentarem se aproximar cada vez mais de uma representação real?
[/quote]
Não existe “mundo das linguagens de progração”, existem convenções adotadas para representar determinados conceitos abstratos, e através do uso desses conceitos descrevemos uma solução.
DSLs apenas transformam um punhado de conceitos envolvidos em uma infinidade não determinada de conceitos. Afinal de contas, o que limita a diversidade é a criatividade do programador, apenas, e existem muitos programadeiros que se acham gênios por aí.
O uso disso não é ruim, mas o abuso sim, e o abuso é o que me refiro. Especialmente pelo hype irracional que vemos por aí hoje em dia.
digno de nota: próximo da lingua humana é muito diferente de mais próximo da “realidade”, pois a linguagem é apenas roupagem para as idéias. Qualquer um que fale mais do que uma língua sabe disso. Vendo por esse lado, talvez OO chegue mais perto de uma idéia, pois usa símbolos, do que uma DSL.
Não, a necessidade de se aprender um idioma completamente alienígena para se fazer qualquer coisa como é com alguns frameworks em Java.
A curva de aprendizado…
Você não entendeu. Nem todas as empresas tem 6 funcionários apenas. Basta numa empresa grande o suficiente onde não haja uma forma de forçar um determinado padrão por vários departamentos, ou vários departamentos que diferentes empresas prestadoras de serviços atendam, para se criar a inconsistência de se ter DSLs em diversas línguas, ou pior, em inglês macarrônico.
Visão macro, veja pela visão macro! É lógico se o seu projetoé só você, a sua consciência e Deus isso não vai fazer sentido, mas a dedução é esperada de seres humanos inteligentes.
[quote=Thiagosc]Os keywords tradicionais “if”, “while”, “class” são fáceis pois bastam serem aprendidos de uma vez e depois nunca mais. Isso já é o que todas as linguagens têm em comum.
A class library já é mais complicado especialmente para iniciantes que tem dificuldade com o inglês. Não é razoável esperar que todo mundo com 15 anos saiba falar inglês fluentemente, e quem aqui já trabalhou no exterior sabe que o inglês praticado nessas escolinhas não ajuda muito também. Muitos que acham que “sabem inglês”, não sabem tanto assim.
No caso de DSLs novas palavras seriam adicionadas além dos keywords tradicionais, exigindo um conhecimento mais profundo da lingua inglesa, isso fora do que já é tradicional. O indivíduo deverá entender a lógica que determinado trecho retrata numa língua não convencionada por padrões como uma linguagem comum, como o Java ou C++, onde a lógica em si seria dada por esses keywords.[/quote]
Você está partindo do princípio que uma DSL deve ser construída em inglês. Porque eu não poderia ter uma DSL em português, italiano ou grego?
Se você considera liberdade uma desvantagem, sim, essa é uma desvantagem.
E porque não trazer essas convenções mais próximas das soluções?
Aqui a diversidade de conceitos criativos ficou toda por tua conta, e WTH você tentou dizer?
Porque para você, qualquer coisa nova, que ainda não experimentou, e não chegou a conclusão que é bom por A+B, você considera hype?
[quote=Thiagosc]Não, a necessidade de se aprender um idioma completamente alienígena para se fazer qualquer coisa como é com alguns frameworks em Java.
A curva de aprendizado…[/quote]
Um mal uso não justifica um argumento contrário.
E esperamos que os funcionários dessa empresa com mais de seis funcionários saiba falar inglês então, porque se não souber, vai virar uma macarronada sem tamanho da mesma forma.
person.setNome();
Não vejo porque o fato de ser uma DSL seria prejudicial nesse caso. A merda pode ser feita das duas formas.
Claro, e dedução que faça sentido é mais esperada ainda.
É isso mesmo o que eu quero dizer. Como isso pode ser uma vantagem?? Só você estiver interessado que nenhuma empresa estrangeira possa dar manutenção nos seus sistemas!
Isso parece ser mais anti-globalização do que qualquer coisa.
Liberdade tem seus custos. Não seria algo parecido com a linha de comando Unix? Milhões de comandinhos ao invés de uma interface coesa? Unix é exemplo de usabilidade?
E você poderia me dizer como elas estariam mais próximas das soluções em DSL?
Imagine linha de comando Unix.
E deveríamos aceitar cegamente tudo o que é dito? Eu já experimentei DSL sim, e apenas acho que isso é um tiro no pé.
Parece que em TI, o velho é reempacotado com roupinha nova, e todos cometem os mesmo erros novamente.
Então você concorda que o uso excessivo de DSLs pode levar a problemas de manutenção assim como em outras tecnologias?
[quote=plentz]E esperamos que os funcionários dessa empresa com mais de seis funcionários saiba falar inglês então, porque se não souber, vai virar uma macarronada sem tamanho da mesma forma.
person.setNome();
Não vejo porque o fato de ser uma DSL seria prejudicial nesse caso. A merda pode ser feita das duas formas.
[/quote]
Sim, mas numa linguagem comum o que diz o que está sendo feito são palavras chave fixas. Numa DSL não há como saber!
Se eu erro a grafia de um método, eu sei que aquilo é um método mesmo estando escrito de forma errada. E numa DSL?
Esse linha de raciocínio que tomei partiu do princípio de:
Closer to English -> non sense
Você parece concordar pois sugeriu DSLs escritas em outras línguas.
Palavras são soluções toscas para idéias, e são usadas por falta de coisa melhor.
Alguém aqui já perdeu tempo tentando explicar algo para alguém, e essa pessoa entende tudo errado?
Por que UML é bom? Porque é uma linguagem comum, onde basta bater o olho para saber o que está acontecendo. A comunicação de idéias é mais fácil pois usa símbolos. Da mesma forma que design patterns.
Imagina alguém propondo “fazer toda a documentação em inglês”, não seria isso pedir para problema de comunicação acontecerem?
Faça essa experiência, passe um livro para várias pessoas lerem e pergunte o que o livro diz, cada uma terá uma idéia diferente. Mas por quê? As palavras que elas leram não eram as mesmas?