LISP e produtividade no desenvolvimento

Nos últimos dias li uma série de artigos e comentários sobre LISP e em como ela é fantástica.

Ao mesmo tempo, lido diariamente com o produto de várias consultorias e sempre tenho os mesmos problemas.
Atrasos na entrega, vários erros, não suportam a demanda.

Sempre me perguntei: se tem uma linguagem tão boa assim, por que não está todo mundo usando?
Ou pelo menos, por que não tem UMA consultoria utilizando e deixando todas as outras para trás?

A única vez que vi alguém falar “contra”, foi nesse post aqui de um experiente programador LISP:
http://groups.google.com/group/comp.lang.lisp/msg/6f75cfb5a289d3f6?pli=1

O que queria discutir é:

  • Tem alguém utilizando algum dialeto de LISP em softwares reais aqui? É toda essa vantagem?

  • Alguma das “novas” linguagens tem apresentado uma produtividade bem acima da média na prática?

Cada linguagem tem suas particularidades e são mais indicadadas para determinados casos. Agora não é culpa de nenhuma linguagem o problema que você vem tendo em seus projetos. Na verdade os problemas que você tem podem ocorrer com qualquer linguagem.
Pelo que eu li você tem um problema de gerenciamento. Eu recomendaria a você, em vez de buscar uma linguagem, busque uma prática de desenvolvimento ágil, como XP ou Scrum.

Lisp permite adaptar toda a linguagem ao seu programa. A vantagem é que os limites não estão mais na linguagem, mas em vc compreender o seu programa, Lisp é programação sem limites.

Outras linguagens tenho que adaptar meu programa a elas, e isso inclui conhecer suas limitaçōes.

Estilos diferentes, a primeira melhor para protótipos e exploração pessoal, e a segunda para delegar para equipes executarem.

[quote=x@ndy]Cada linguagem tem suas particularidades e são mais indicadadas para determinados casos. Agora não é culpa de nenhuma linguagem o problema que você vem tendo em seus projetos. Na verdade os problemas que você tem podem ocorrer com qualquer linguagem.
Pelo que eu li você tem um problema de gerenciamento. Eu recomendaria a você, em vez de buscar uma linguagem, busque uma prática de desenvolvimento ágil, como XP ou Scrum.[/quote]

Desculpe, acho que não fui bem claro na minha explicação.

Os problemas que tenho não são com meus projetos, mas com projetos contratados de outras consultorias.
Não tenho controle da metodologia de trabalho adotada por cada empresa, mas todas apresentam problemas similares.

Quanto a linguagem, muitas são voltadas para desenvolvimento WEB, então podemos compara-las entre si.
(Considerando as básicas aplicações CRUD/Relatórios de cada dia).

Vejo muita gente dizer que tal linguagem é mais produtiva que outra.
Dizer que todas são equivalentes talvez seja politicamente correto demais.

Queria ler experiência do pessoal que tentou outras linguagens (tal como LISP) e se esse ganho transformou-se em resultados visíveis.

[quote=AbelBueno][quote=x@ndy]Cada linguagem tem suas particularidades e são mais indicadadas para determinados casos. Agora não é culpa de nenhuma linguagem o problema que você vem tendo em seus projetos. Na verdade os problemas que você tem podem ocorrer com qualquer linguagem.
Pelo que eu li você tem um problema de gerenciamento. Eu recomendaria a você, em vez de buscar uma linguagem, busque uma prática de desenvolvimento ágil, como XP ou Scrum.[/quote]

Desculpe, acho que não fui bem claro na minha explicação.

Os problemas que tenho não são com meus projetos, mas com projetos contratados de outras consultorias.
Não tenho controle da metodologia de trabalho adotada por cada empresa, mas todas apresentam problemas similares.

Quanto a linguagem, muitas são voltadas para desenvolvimento WEB, então podemos compara-las entre si.
(Considerando as básicas aplicações CRUD/Relatórios de cada dia).

Vejo muita gente dizer que tal linguagem é mais produtiva que outra.
Dizer que todas são equivalentes talvez seja politicamente correto demais.

Queria ler experiência do pessoal que tentou outras linguagens (tal como LISP) e se esse ganho transformou-se em resultados visíveis.

[/quote]

Ai que tá, a produtividade não vai mudar por forçar as suas consultorias a adotar a linguagem A ou B, o problema continua sendo de gerenciamento. Forçar elas a usar uma outra linguagem não resolve o seu problema.

Claro que cada linguagem pode ser mais produtiva em determinados projetos. Existem projetos nos quais são adotadas mais de uma linguagem devido a complexidade do mesmo. Agora os atrasos não ocorrem devido a isso e sim na forma como é feito o desenvolvimento.

O correto nesse caso seria levantar os motivos dos atrasos, com isso você notará que o problema não está na linguagem. Um exemplo é a taxa de retrabalho do projeto, isso não tem nada haver com a linguagem. Outro seria a taxa de erros do projeto que também não tem nada haver com a linguagem adotada.

Reforço minha colocação que você deve buscar sobre práticas ageis de desenvolvimento e não uma linguagem. Digo isso porque já presenciei projetos em que a escolha de linguagens foi orientada pela “produtividade” das mesmas, terem os mesmos problemas ou até maiores de outros projetos.

Uma frase muito comum em engenharia de software é: Uma mulher leva 9 meses para ter um filho, agora se eu tiver noves mulheres elas não terão um filho em 1 mes.

[quote=x@ndy]
Ai que tá, a produtividade não vai mudar por forçar as suas consultorias a adotar a linguagem A ou B, o problema continua sendo de gerenciamento. Forçar elas a usar uma outra linguagem não resolve o seu problema.

Claro que cada linguagem pode ser mais produtiva em determinados projetos. Existem projetos nos quais são adotadas mais de uma linguagem devido a complexidade do mesmo. Agora os atrasos não ocorrem devido a isso e sim na forma como é feito o desenvolvimento.

O correto nesse caso seria levantar os motivos dos atrasos, com isso você notará que o problema não está na linguagem. Um exemplo é a taxa de retrabalho do projeto, isso não tem nada haver com a linguagem. Outro seria a taxa de erros do projeto que também não tem nada haver com a linguagem adotada.

Reforço minha colocação que você deve buscar sobre práticas ageis de desenvolvimento e não uma linguagem. Digo isso porque já presenciei projetos em que a escolha de linguagens foi orientada pela “produtividade” das mesmas, terem os mesmos problemas ou até maiores de outros projetos.

Uma frase muito comum em engenharia de software é: Uma mulher leva 9 meses para ter um filho, agora se eu tiver noves mulheres elas não terão um filho em 1 mes.[/quote]

Calma cara, me parece que ele esta querendo saber porque consultorias não podem tirar proveito de uma linguagem que é tida como “superior” por seus proponentes. Não acho que ele esteja pensando em “forçar alguém a usar Lisp!”.

[quote=malconL][quote=x@ndy]
Ai que tá, a produtividade não vai mudar por forçar as suas consultorias a adotar a linguagem A ou B, o problema continua sendo de gerenciamento. Forçar elas a usar uma outra linguagem não resolve o seu problema.

Claro que cada linguagem pode ser mais produtiva em determinados projetos. Existem projetos nos quais são adotadas mais de uma linguagem devido a complexidade do mesmo. Agora os atrasos não ocorrem devido a isso e sim na forma como é feito o desenvolvimento.

O correto nesse caso seria levantar os motivos dos atrasos, com isso você notará que o problema não está na linguagem. Um exemplo é a taxa de retrabalho do projeto, isso não tem nada haver com a linguagem. Outro seria a taxa de erros do projeto que também não tem nada haver com a linguagem adotada.

Reforço minha colocação que você deve buscar sobre práticas ageis de desenvolvimento e não uma linguagem. Digo isso porque já presenciei projetos em que a escolha de linguagens foi orientada pela “produtividade” das mesmas, terem os mesmos problemas ou até maiores de outros projetos.

Uma frase muito comum em engenharia de software é: Uma mulher leva 9 meses para ter um filho, agora se eu tiver noves mulheres elas não terão um filho em 1 mes.[/quote]

Calma cara, me parece que ele esta querendo saber porque consultorias não podem tirar proveito de uma linguagem que é tida como “superior” por seus proponentes. Não acho que ele esteja pensando em “forçar alguém a usar Lisp!”.[/quote]

Não estou nervoso, nem foi minha intenção passar essa idéia, realmente creio que o uso da palavra forçar não tenha sido adequado.
Com relação ao que você colocou é uma coisa que eu comentei anteriormente, ou seja, a cada linguagem é mais adequada a determinados problemas. Um projeto muito complexo demanda o uso até de mais de uma linguagem.
A escolha de uma linguagem está relacionada ao problema a ser resolvido e se ela atende bem esse problema. Já falei algo sobre isso em meu blog: http://tekhton.blogspot.com/2011/01/melhor-linguagem-de-programacao-do.html.
O problema que estou vendo é que os problemas realacionados por ele são devidos a falhas no gerenciamento dos projetos pelas consultorias e que a escolha de uma linguagem dita mais “produtiva” não resolveria o problema.
Até pq escolha de uma linguagem deve ser feita conforme o problema a ser resolvido. Uma linguagem mais “produtiva” para um determinado problema não é necessáriamente mais produtiva para outro!

Nervoso não, mas essa idéia de Lisp em consultorias, pode ser assustadora para alguns…

Como eu disse, nessas consultorias eu não influencio, apenas obtenho o produto pronto (atrasado e defeituoso).

A minha meta é para quando eu abrir minha consultoria, escolher as ferramentas certas.

Apesar de concordar que para cada domínio há uma ferramenta melhor, há outros certos “poréns” nessa escolha:

  • A viabilidade de manter uma equipe poliglota (já é difiicil manter uma boa equipe com uma linguagem só).
  • Nem sempre precisamos da MELHOR ferramenta, apenas uma boa o bastante (que amenizaria o problema anterior).

Muitas dessas linguagens comuns (C#, Java, Delphi, Python) são de uso geral e permitem um bom trabalho em vários domínios.
Como disse não estou focando em nichos específicos mas sim nessas aplicações WEB comerciais do dia a dia.

x@ndy, com as metodologias ágeis que você trabalha, você realmente aumentou a produtividade na sua equipe?
Não sofre com esses problemas clássicos que citei? Utiliza vários linguagens no dia a dia?

Por último, associo produtividade a esses problemas, pelo que reparei dos meus tempos de consultoria, o que acontecia:

  • O Cliente queria um prazo que a gente não ia dar conta (nem falo de projeto inteiro, falo de uma funcionalidade em um sistema)
  • Para dar tempo, os testes eram os primeiros a serem cortados.
  • Alocavam júniors para ajudar a entregar a tempo, mas que perdiam mais tempo aprendendo do que desenvolvendo.

Acho que é história real para muitos aqui… no fim todos os problemas citados: atrasos e defeitos.

Minha questão é, se conseguir produzir mais em menos tempo, vou ter tempo pra homologar melhor e cumprir prazos.

LISP foi só um exemplo, pois vejo os amantes da linguagem a idolatrando e não vejo ninguém realmente tirar o crédito.
(Exceto pelo cara do link que postei que depois de 15 anos de LISP diz ser mais produtivo com Python).

Acredito que se temos um problema de processo não importa muito a elegância da sua ferramenta.

Sem querer ofender eu diria para você se concentrar em como escolher:

a) As pessoas certas com quem trabalhar.
b) Os projetos certos (não se meta a fazer projetos que o domínio não seja do seu conhecimento ou esteja fora do seu alcance e etc…)
c) Os prazos certos.
d) Os VALORES certos.
e) Os clientes certos (se possível não financie os problemas dos outros a não ser que sejam muito bem pagos)

Se atingir estes pontos a questão das ferramentas será um detalhe ridiculo.

flws

+1 para o post do fantomas

Produtividade e qualidade não são características da ferramenta, e sim da sua equipe.

Se tiver uma equipe boa, a linguagem/plataforma/ferramenta é o menor dos detalhes.

[quote=AbelBueno]Como eu disse, nessas consultorias eu não influencio, apenas obtenho o produto pronto (atrasado e defeituoso).

A minha meta é para quando eu abrir minha consultoria, escolher as ferramentas certas.

Apesar de concordar que para cada domínio há uma ferramenta melhor, há outros certos “poréns” nessa escolha:

  • A viabilidade de manter uma equipe poliglota (já é difiicil manter uma boa equipe com uma linguagem só).
  • Nem sempre precisamos da MELHOR ferramenta, apenas uma boa o bastante (que amenizaria o problema anterior).

Muitas dessas linguagens comuns (C#, Java, Delphi, Python) são de uso geral e permitem um bom trabalho em vários domínios.
Como disse não estou focando em nichos específicos mas sim nessas aplicações WEB comerciais do dia a dia.

x@ndy, com as metodologias ágeis que você trabalha, você realmente aumentou a produtividade na sua equipe?
Não sofre com esses problemas clássicos que citei? Utiliza vários linguagens no dia a dia?

Por último, associo produtividade a esses problemas, pelo que reparei dos meus tempos de consultoria, o que acontecia:

  • O Cliente queria um prazo que a gente não ia dar conta (nem falo de projeto inteiro, falo de uma funcionalidade em um sistema)
  • Para dar tempo, os testes eram os primeiros a serem cortados.
  • Alocavam júniors para ajudar a entregar a tempo, mas que perdiam mais tempo aprendendo do que desenvolvendo.

Acho que é história real para muitos aqui… no fim todos os problemas citados: atrasos e defeitos.

Minha questão é, se conseguir produzir mais em menos tempo, vou ter tempo pra homologar melhor e cumprir prazos.

LISP foi só um exemplo, pois vejo os amantes da linguagem a idolatrando e não vejo ninguém realmente tirar o crédito.
(Exceto pelo cara do link que postei que depois de 15 anos de LISP diz ser mais produtivo com Python).
[/quote]
Ai que tá, produtividade depende do contexto do trabalho e da escolha da ferramenta certa para cada contexto. Um exemplo é um alicate e um martelo, se eu quiser colocar um prego a ferramenta mais produtiva será o martelo, mas dependendo do quero pregar, se não tenho um martelo em mãos posso usar o alicate, vai dar bem mais trabalho, mas eu até consigo. A mesma coisa se aplica para cortar um pedaço de arame, se não tenho um alicate posso usar o martelo, vai dar mais trabalho, vai ficar um serviço mais groseiro mas eu consigo fazer.

A colocação do Rafael é bem apropriada, eu só acresentária que é também da metodologia adota pela equipe.

[quote=Rafael Nunes]Produtividade e qualidade não são características da ferramenta, e sim da sua equipe.
Se tiver uma equipe boa, a linguagem/plataforma/ferramenta é o menor dos detalhes.[/quote]

A maioria dos projetos você pode resolver com uma equipe generalista, contratando um consultor para problemas especificos. Creio que você pode usar na maioria dos casos Ruby/Java para seus projetos web, mas isso não é uma afirmação pois cada caso é um caso e quem defini a linguagem deve ser o arquiteto da sua equipe e muitas vezes o cliente, que já tem uma base em uma linguagem.

Quanto a produtividade usando métodos agéis isso é fato, se você realmente adota-los, fora a satisfação do cliente. De uma lida no livro Programação Extrema, do Kent Beck, ela fala justamente sobre os problemas que você colocou, como qualidade/prazo/custo/escopo.
Por exemplo, a qualidade é fundamental num projeto, então é uma váriável que não pode ser mexida em XP, então o cliente deve escolher entre escopo/prazo. Se ele quer um escopo maior, terá que dar um prazo maior.
A qualidade se obtem utilizando testes unitários automatizados. Então o programador desenvolve os testes a medida que vai desenvolvendo. Então isso aumenta a qualidade e permite que o código possa ser constantemente alterado, já que um erro inserido por uma modificação será falcilmente detectado pelos testes já existentes.

Outra leitura muito importante é o livro Domain Drive Design do Eric Evans, que fala sobre como criar uma aplicação com foco no problema do cliente.

fantomas, não há motivos pra eu ficar ofendido, suas observações são totalmente válidas.

Meu único ponto de dúvida nisso tudo é, conforme dito pelo Rafael Nunes, se a a ferramenta é realmente um mero detalhe.

Um exemplo seria, em igualdade de condições (boa equipe, domínio conhecido, prazo justo, etc…) você desenvolver um projeto com Struts 1 ou com VRaptor 3… e se fosse com Rails? Será que o resultado seria realmente o mesmo, já que só muda a ferramenta?

x@ndy, concordo que a escolha depende do dominio. Mas como eu disse, não tô comparando ferramentas para tudo e sim num domínio restrito.

Enfim, pelo retorno do pessoal, parece que ninguém acredita que a ferramenta tenha grande impacto na produtividade (desde que seja uma ferramenta destinada aquele fim).

E o fato de não ter aparecido ninguém contando que utiliza a ferramenta XYZ e isso aumentou sua produtividade em 300%, provavelmente prova que isso é o que acontece na prática.

Agradeço a todos pelas opiniões.

edit: x@ndy, conheço as referências que passou, agradeço assim mesmo.

O resultado seria o mesmo, talvez com mais ou menos esforço.
A equipe inteira conhecer as duas ferramentas(Java/Rails) já é bem difícil no mercado, e se conhecer, vai saber o que usar em casa situação.

Por exemplo tem coisas que sou muito mais produtivo fazendo em Python+Django, mas nada que não conseguisse fazer da mesma forma com Java e algum framework Web.

Como disse, se a equipe for boa, tanto faz a ferramenta porque:
Se conhecem várias, vão saber qual usar em cada caso.
Se não conhecem, vão se virar com o que sabem.

Ai que tá! A escolha se deve ser feita em função do domínio! Algumas linguagens/frameworks muitas vezes são melhores para determinados problemas e não são ideiais para outros. A escolha das ferramentas deve ser feita em função do problema. Em alguns casos não haverá diferença, em outros poderá haver. As vezes o dominio pela equipe de uma linguagem, mesma que não seja a mais indicada para aplicação, pode acelerar o desenvolvimento ao contrário da equipe se dedicar a apreender outra linguagem, mas isso nem sempre pode ser verdade se a outra linguagem for mais rápida. Um exemplo é com uma equipe de programadores junior. Muitas vezes é mais indicado a utilização da linguagem ideal pois o tempo de aprendizagem da nova linguagem em conjunto com as facilidades que ela apresenta pode ser mais rápido que uso da linguagem “geral” utilizadas pelos juniors. Isso se ocorrre porque eles não tem um grande domínio dessa linguagem e eles terão que apreender uma série de técnicas avançadas dessa linguagem de modo que a resolver os problemas do dominio.
A grande palavra aqui é sempre DEPENDE!
Para uma boa equipe realmente pd não fazer diferença, mas nem sempre isso pode ser verdadeiro.
O arquiteto do sistema deve conhecer sua equipe e com base nisso e no dominio do problema escolher as melhores ferramentas.

[quote=Rafael Nunes]
Como disse, se a equipe for boa, tanto faz a ferramenta porque:
Se conhecem várias, vão saber qual usar em cada caso.
Se não conhecem, vão se virar com o que sabem.[/quote]
Complementando, se equipe for boa, aprenderá rapidamente a utilizar uma nova ferramenta/linguagem.

[quote=fantomas]
b) Os projetos certos (não se meta a fazer projetos que o domínio não seja do seu conhecimento ou esteja fora do seu alcance e etc…) [/quote]
Isso é já não concordo totalmente. É bom conhecer o dominio antes fechar um contrato? Não é bom, é ótimo. É necessário conhecer o domino antes de fechar um contrato? Não necessáriamente; a não ser que seja um contrato “fechado” com tempo extremamente curto de desenvolvimento, valor extremamente baixo, e que você não saiba absolutamente nada do dominio! Ai você não deve aceitar. Nos outros casos você deve ter alguém do cliente ao seu lado para orientá-lo durante o desenvolvimento. Utilizando DDD isso é facilmente contornável!

Tem muita consultoria baseada nessas ferramentas, acho que o mundo real não é sempre a disneylandia pintada aqui.

Desculpe, mas não entendi seu comentário?

Rafael Nunes wrote:

Como disse, se a equipe for boa, tanto faz a ferramenta porque:
Se conhecem várias, vão saber qual usar em cada caso.
Se não conhecem, vão se virar com o que sabem.

Complementando, se equipe for boa, aprenderá rapidamente a utilizar uma nova ferramenta/linguagem.

Sim, equipes capazes, elas são… bem… mais capazes de escolher a ferramenta mais produtiva para determinada situação. Mas não concordo que a escolha da ferramenta deixe de ser importante por causa disso. Ela apenas é feita de forma pensada, diferente de outras empresas que as escolhem pela capacidade de extrair produtividade de um programador menos treinado para a tarefa.

[quote=malconL]Rafael Nunes wrote:

Como disse, se a equipe for boa, tanto faz a ferramenta porque:
Se conhecem várias, vão saber qual usar em cada caso.
Se não conhecem, vão se virar com o que sabem.

Complementando, se equipe for boa, aprenderá rapidamente a utilizar uma nova ferramenta/linguagem.

Sim, equipes capazes, elas são… bem… mais capazes de escolher a ferramenta mais produtiva para determinada situação. Mas não concordo que a escolha da ferramenta deixe de ser importante por causa disso. Ela apenas é feita de forma pensada, diferente de outras empresas que as escolhem pela capacidade de extrair produtividade de um programador menos treinado para a tarefa.[/quote]
Acho que você não leu meu comentário sobre esse. Eu disse exatamente isso. Tudo depende da equipe que se tem!