<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: Viva a diversidade!</title>
	<atom:link href="http://log4dev.com/2007/09/27/viva-a-diversidade/feed/" rel="self" type="application/rss+xml" />
	<link>http://log4dev.com/2007/09/27/viva-a-diversidade/</link>
	<description></description>
	<lastBuildDate>Fri, 25 Nov 2011 22:30:00 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
	<item>
		<title>By: Turing completeness (Pra que linguagens de programação?) &#171; Log4Dev</title>
		<link>http://log4dev.com/2007/09/27/viva-a-diversidade/comment-page-2/#comment-94</link>
		<dc:creator>Turing completeness (Pra que linguagens de programação?) &#171; Log4Dev</dc:creator>
		<pubDate>Fri, 19 Oct 2007 01:49:06 +0000</pubDate>
		<guid isPermaLink="false">http://blog.job4dev.com/?p=189#comment-94</guid>
		<description>&lt;p&gt;[...] mais lidos AJAX em 20 minutosGPS + Google MapsViva a diversidade!Otimização de código javascriptMyFaces e Spring Web FlowConcatenação eficiente de Strings em [...]&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>[...] mais lidos AJAX em 20 minutosGPS + Google MapsViva a diversidade!Otimização de código javascriptMyFaces e Spring Web FlowConcatenação eficiente de Strings em [...]</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Raphael Lullis</title>
		<link>http://log4dev.com/2007/09/27/viva-a-diversidade/comment-page-2/#comment-80</link>
		<dc:creator>Raphael Lullis</dc:creator>
		<pubDate>Thu, 18 Oct 2007 18:59:04 +0000</pubDate>
		<guid isPermaLink="false">http://blog.job4dev.com/?p=189#comment-80</guid>
		<description>&lt;p&gt;Bruno, vou ser o cara que desautoriza o dono. Responda o quanto quiser.&lt;/p&gt;

&lt;p&gt;Só peço que você veja - com atenção - os links que eu passei, ok?&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Bruno, vou ser o cara que desautoriza o dono. Responda o quanto quiser.</p>

<p>Só peço que você veja &#8211; com atenção &#8211; os links que eu passei, ok?</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Bruno</title>
		<link>http://log4dev.com/2007/09/27/viva-a-diversidade/comment-page-2/#comment-79</link>
		<dc:creator>Bruno</dc:creator>
		<pubDate>Thu, 18 Oct 2007 18:52:50 +0000</pubDate>
		<guid isPermaLink="false">http://blog.job4dev.com/?p=189#comment-79</guid>
		<description>&lt;p&gt;Raphael, gostaria muito de te responder mas infelizmente o Miguel me proibiu de continuar esta discussão aqui... :)&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Raphael, gostaria muito de te responder mas infelizmente o Miguel me proibiu de continuar esta discussão aqui&#8230; <img src='http://log4dev.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>]]></content:encoded>
	</item>
	<item>
		<title>By: Miguel Galves</title>
		<link>http://log4dev.com/2007/09/27/viva-a-diversidade/comment-page-2/#comment-97</link>
		<dc:creator>Miguel Galves</dc:creator>
		<pubDate>Wed, 17 Oct 2007 16:50:06 +0000</pubDate>
		<guid isPermaLink="false">http://blog.job4dev.com/?p=189#comment-97</guid>
		<description>&lt;p&gt;Comentou e ainda por cima criticou o autor do post. 21 anos sem...&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Comentou e ainda por cima criticou o autor do post. 21 anos sem&#8230;</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Raphael Lullis</title>
		<link>http://log4dev.com/2007/09/27/viva-a-diversidade/comment-page-2/#comment-96</link>
		<dc:creator>Raphael Lullis</dc:creator>
		<pubDate>Wed, 17 Oct 2007 16:38:45 +0000</pubDate>
		<guid isPermaLink="false">http://blog.job4dev.com/?p=189#comment-96</guid>
		<description>&lt;p&gt;Miguel, nunca satisfeito... quando posta e ninguém comenta, reclama. Quando posta e comentam, reclamam também. &lt;i&gt;People are so hard to please&lt;/i&gt;.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Miguel, nunca satisfeito&#8230; quando posta e ninguém comenta, reclama. Quando posta e comentam, reclamam também. <i>People are so hard to please</i>.</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Miguel Galves</title>
		<link>http://log4dev.com/2007/09/27/viva-a-diversidade/comment-page-2/#comment-95</link>
		<dc:creator>Miguel Galves</dc:creator>
		<pubDate>Wed, 17 Oct 2007 16:35:32 +0000</pubDate>
		<guid isPermaLink="false">http://blog.job4dev.com/?p=189#comment-95</guid>
		<description>&lt;p&gt;Caros...depois de quase 60 respostas, considero que esgotamos este assunto, certo?&lt;/p&gt;

&lt;p&gt;Raphael e Bruno: o primeiro que postar mais alguma resposta neste tópico sofrerá as consequencias da maldição do editor do blog que vos fala: 7 anos sem....&lt;/p&gt;

&lt;p&gt;Sem mais, despeço me&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Caros&#8230;depois de quase 60 respostas, considero que esgotamos este assunto, certo?</p>

<p>Raphael e Bruno: o primeiro que postar mais alguma resposta neste tópico sofrerá as consequencias da maldição do editor do blog que vos fala: 7 anos sem&#8230;.</p>

<p>Sem mais, despeço me</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Raphael Lullis</title>
		<link>http://log4dev.com/2007/09/27/viva-a-diversidade/comment-page-2/#comment-77</link>
		<dc:creator>Raphael Lullis</dc:creator>
		<pubDate>Wed, 17 Oct 2007 16:29:11 +0000</pubDate>
		<guid isPermaLink="false">http://blog.job4dev.com/?p=189#comment-77</guid>
		<description>&lt;p&gt;&lt;i&gt;nem por isto Java tem o pattern Iterator embutido em si&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;The joke is on you, dude.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;
for thing in L:
    try:
         thing.aMethod()
    except NotImplemented: pass
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;É tudo que eu preciso para fazer tudo que se dá na sua definição do GoF, inclusive &lt;i&gt;support polymorphic iteration&lt;/i&gt;. Então, se eu consigo fazer de forma razoavelmente natural usando o idioma acima, &lt;i&gt;para quê, catzo, eu preciso me preocupar com Iterator pattern?&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;Não dá pra sacar que tudo isso que você tá colocando - a sua preocupação em me mostrar como é o jeitinho certo de se fazer Patterns, chamar de &quot;equívoco&quot; a definição do cara, etc - é um reflexo do fato de você estar acostumado a pensar as coisas no &quot;Java way of life&quot;?&lt;/p&gt;

&lt;p&gt;Voltando ao ponto inicial, do primeiro comentário: não gosto de Java justamente por querer me impor essa disciplina. O código em Python acima funciona, é direto, limpo e logicamente claro. E, mais importante, ninguém vai falar &quot;você tá sendo burro e não tá usando OO direito&quot;. Ninguém vai querer me acusar de erro conceitual.&lt;/p&gt;

&lt;p&gt;Agora, se eu quisesse fazer isso na sua linguagem favorita? (contribuição do Miguel)&lt;/p&gt;

&lt;p&gt;&lt;code&gt;
for(Object o: L){
try{
   Method m = o.getClass().getMethod(&quot;aMethod&quot;);
  m.invoke(o);
}catch(NoSuchMethodException e){
}
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Com certeza, não é algo que possa ser chamado de &quot;bom código OO&quot;. Para cada ação que eu quisesse adicionar no loop, eu teria que adicionar duas linhas de código.&lt;/p&gt;

&lt;p&gt;Com certeza, &lt;i&gt;em Java (ou C++)&lt;/i&gt;você vai querer criar uma interface. Aliás, você é &lt;b&gt;praticamente obrigado&lt;/b&gt;. Qualquer pessoa que fizesse isso em código de produção ia tomar um chute no traseiro depois de qualquer code review. Com certeza, você vai querer me dar um sermão sobre o fato de já existir um design pattern que já demonstra a forma &quot;correta&quot; de se fazer um Iterator.&lt;/p&gt;

&lt;p&gt;Olha só: &lt;i&gt;eu não quero aprender isso&lt;/i&gt;. Eu não quero ter que me submeter a uma disciplina para começar a expressar uma idéia. Eu só quero demonstrar pro computador rapidamente &quot;cada objeto da sua lista tem que fazer tal coisa, se o objeto for capaz de fazer tal ação&quot;. Isso é o que eu chamo de &quot;poder de expressão&quot;.&lt;/p&gt;

&lt;p&gt;Francamente, me diga: pq é tão difícil você me responder mais ou menos desse jeito:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&quot;Pô, Lullis, Java-a-Linguagem tem sim uma série de limitações. Mas se eu pesar os prós (faço aqui uma lista de coisas boas: X, Y e Z) e contras da linguagem e comparar com as linguagens que estavam disponíveis na época, JaL era uma excelente opção. Eu acho que compensou fazer o investimento em aprender e trabalhar com Java&quot;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Se sua resposta tivesse seguido esse caminho, não teríamos nenhuma discussão. Mas você tá sendo o language troll, ao querer racionalizar e justificar os problemas da linguagem. Parece coisa de torcedor de time de futebol: olha as virtudes do time quando ganha; quando perde, fica arrumando desculpa ou tentando racionalizar a derrota.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p><i>nem por isto Java tem o pattern Iterator embutido em si</i></p>

<p>The joke is on you, dude.</p>

<p><code>
for thing in L:
    try:
         thing.aMethod()
    except NotImplemented: pass
</code></p>

<p>É tudo que eu preciso para fazer tudo que se dá na sua definição do GoF, inclusive <i>support polymorphic iteration</i>. Então, se eu consigo fazer de forma razoavelmente natural usando o idioma acima, <i>para quê, catzo, eu preciso me preocupar com Iterator pattern?</i></p>

<p>Não dá pra sacar que tudo isso que você tá colocando &#8211; a sua preocupação em me mostrar como é o jeitinho certo de se fazer Patterns, chamar de &#8220;equívoco&#8221; a definição do cara, etc &#8211; é um reflexo do fato de você estar acostumado a pensar as coisas no &#8220;Java way of life&#8221;?</p>

<p>Voltando ao ponto inicial, do primeiro comentário: não gosto de Java justamente por querer me impor essa disciplina. O código em Python acima funciona, é direto, limpo e logicamente claro. E, mais importante, ninguém vai falar &#8220;você tá sendo burro e não tá usando OO direito&#8221;. Ninguém vai querer me acusar de erro conceitual.</p>

<p>Agora, se eu quisesse fazer isso na sua linguagem favorita? (contribuição do Miguel)</p>

<p><code>
for(Object o: L){
try{
   Method m = o.getClass().getMethod("aMethod");
  m.invoke(o);
}catch(NoSuchMethodException e){
}
</code></p>

<p>Com certeza, não é algo que possa ser chamado de &#8220;bom código OO&#8221;. Para cada ação que eu quisesse adicionar no loop, eu teria que adicionar duas linhas de código.</p>

<p>Com certeza, <i>em Java (ou C++)</i>você vai querer criar uma interface. Aliás, você é <b>praticamente obrigado</b>. Qualquer pessoa que fizesse isso em código de produção ia tomar um chute no traseiro depois de qualquer code review. Com certeza, você vai querer me dar um sermão sobre o fato de já existir um design pattern que já demonstra a forma &#8220;correta&#8221; de se fazer um Iterator.</p>

<p>Olha só: <i>eu não quero aprender isso</i>. Eu não quero ter que me submeter a uma disciplina para começar a expressar uma idéia. Eu só quero demonstrar pro computador rapidamente &#8220;cada objeto da sua lista tem que fazer tal coisa, se o objeto for capaz de fazer tal ação&#8221;. Isso é o que eu chamo de &#8220;poder de expressão&#8221;.</p>

<p>Francamente, me diga: pq é tão difícil você me responder mais ou menos desse jeito:</p>

<ul>
<li>&#8220;Pô, Lullis, Java-a-Linguagem tem sim uma série de limitações. Mas se eu pesar os prós (faço aqui uma lista de coisas boas: X, Y e Z) e contras da linguagem e comparar com as linguagens que estavam disponíveis na época, JaL era uma excelente opção. Eu acho que compensou fazer o investimento em aprender e trabalhar com Java&#8221;.</li>
</ul>

<p>Se sua resposta tivesse seguido esse caminho, não teríamos nenhuma discussão. Mas você tá sendo o language troll, ao querer racionalizar e justificar os problemas da linguagem. Parece coisa de torcedor de time de futebol: olha as virtudes do time quando ganha; quando perde, fica arrumando desculpa ou tentando racionalizar a derrota.</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Bruno</title>
		<link>http://log4dev.com/2007/09/27/viva-a-diversidade/comment-page-2/#comment-98</link>
		<dc:creator>Bruno</dc:creator>
		<pubDate>Wed, 17 Oct 2007 15:00:29 +0000</pubDate>
		<guid isPermaLink="false">http://blog.job4dev.com/?p=189#comment-98</guid>
		<description>&lt;p&gt;Raphael, uma resposta parcial e rápida:
No link que você passou sobre desing patterns em python, o primeiro que o autor descreve, o Iterator, está &lt;strong&gt;totalmente errado!!!&lt;/strong&gt;.
Não quero nem ver o resto... Mas faço questão de passar por todos eles mais tarde.&lt;/p&gt;

&lt;p&gt;Motivação para o pattern Iterator [GoF]:
&lt;blockquote&gt;
An aggregate object such as a list should give you a way to access its elements without exposing its internal structure.
&lt;/blockquote&gt;
Aplicação [GoF]:
&lt;blockquote&gt;
Use the Iterator pattern:
&#160;&#160;* to access an aggregate object&#039;s contents without exposing its internal representation.
&#160;&#160;* to support multiple traversals of aggregate objects.
&#160;&#160;* &lt;strong&gt;to provide a uniform interface for traversing different aggregate structures&lt;/strong&gt; (that is, to support polymorphic iteration).
&lt;/blockquote&gt;&lt;/p&gt;

&lt;p&gt;Olha a explicação simplória do cara:
&lt;blockquote&gt;
Iterators are built into the Python language. Anything that is iterable can be iterated, including dictionaries, lists, tuples, strings, streams, generators, and classes for which you implement iterator syntax.
&lt;/blockquote&gt;&lt;/p&gt;

&lt;p&gt;Dizer isto aliás não faz o menor sentido!
Java em sua API tem a interface &lt;code&gt;Itarable&lt;/code&gt; em todas suas coleções, nem por isto Java tem o pattern Iterator embutido em si, e&lt;/p&gt;

&lt;p&gt;Dizer que python tem estruturas &lt;em&gt;built in&lt;/em&gt; que implementam algum pattern não quer dizer que usando python ele já vai implementar em suas classes/estruturas estes mesmos patterns, ou ainda dizer que não haverá nunca necessidade de você implementar &lt;em&gt;manualmente&lt;/em&gt; tal padrão de desenho.&lt;/p&gt;

&lt;p&gt;Cara, que equívoco gigantesco este artigo que você mandou!!!&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Raphael, uma resposta parcial e rápida:
No link que você passou sobre desing patterns em python, o primeiro que o autor descreve, o Iterator, está <strong>totalmente errado!!!</strong>.
Não quero nem ver o resto&#8230; Mas faço questão de passar por todos eles mais tarde.</p>

<p>Motivação para o pattern Iterator [GoF]:
<blockquote>
An aggregate object such as a list should give you a way to access its elements without exposing its internal structure.
</blockquote>
Aplicação [GoF]:
<blockquote>
Use the Iterator pattern:
&nbsp;&nbsp;* to access an aggregate object&#8217;s contents without exposing its internal representation.
&nbsp;&nbsp;* to support multiple traversals of aggregate objects.
&nbsp;&nbsp;* <strong>to provide a uniform interface for traversing different aggregate structures</strong> (that is, to support polymorphic iteration).
</blockquote></p>

<p>Olha a explicação simplória do cara:
<blockquote>
Iterators are built into the Python language. Anything that is iterable can be iterated, including dictionaries, lists, tuples, strings, streams, generators, and classes for which you implement iterator syntax.
</blockquote></p>

<p>Dizer isto aliás não faz o menor sentido!
Java em sua API tem a interface <code>Itarable</code> em todas suas coleções, nem por isto Java tem o pattern Iterator embutido em si, e</p>

<p>Dizer que python tem estruturas <em>built in</em> que implementam algum pattern não quer dizer que usando python ele já vai implementar em suas classes/estruturas estes mesmos patterns, ou ainda dizer que não haverá nunca necessidade de você implementar <em>manualmente</em> tal padrão de desenho.</p>

<p>Cara, que equívoco gigantesco este artigo que você mandou!!!</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Raphael Lullis</title>
		<link>http://log4dev.com/2007/09/27/viva-a-diversidade/comment-page-2/#comment-99</link>
		<dc:creator>Raphael Lullis</dc:creator>
		<pubDate>Wed, 17 Oct 2007 03:58:52 +0000</pubDate>
		<guid isPermaLink="false">http://blog.job4dev.com/?p=189#comment-99</guid>
		<description>&lt;p&gt;Bruno, só vou responder todas as suas asneiras depois que você assistir o vídeo. Você quer racionalizar a sua escolha por Java, tudo bem. Não me importo. Trabalhe com o que quiser.&lt;/p&gt;

&lt;p&gt;Mas antes de sair vomitando respostas quilométricas, faça o dever de casa. Todas as coisas que você está falando aí, já foram ditas:&lt;/p&gt;

&lt;p&gt;1) Esqueça a plataforma. Você não precisa de Java-a-Linguagem para ter os recursos de Java-a-Plataforma. Não queira usar a Plataforma como muleta para sua escolha. Escolha, aliás, que nem deve ter sido sua. Sou capaz de apostar que você acabou aprendendo Java por necessidade do mercado, pensando na grana. &lt;i&gt;Não, não estou te julgando por isso.&lt;/i&gt; Só estou querendo dizer que são poucas as pessoas que escolhem programar em Java &lt;i&gt;por ver nela uma linguagem com features interessantes&lt;/i&gt;. Só escolhe Java quem compara com linguagens &quot;piores&quot; como C, VB, C++, etc.&lt;/p&gt;

&lt;p&gt;2) Pergunta: se você acha que é, no início, tão priotário ter um ambiente estável e com performance quanto uma linguagem mais flexível e que der &lt;i&gt;poder&lt;/i&gt; ao desenvolvedor, pq &lt;b&gt;são são tão poucas as startups de sucesso que usam Java&lt;/b&gt;? Se a escolha de linguagem é algo irrelevante, não seria de se esperar que não houvesse correlação entre linguagem de desenvolvimento/habilidade do desenvolvedor/nível de risco do projeto/sucesso da empresa?&lt;/p&gt;

&lt;p&gt;3) Tarefa extra: lê isso aí e pára de me encher o saco.&lt;/p&gt;

&lt;p&gt;http://www.ginstrom.com/scribbles/2007/10/08/design-patterns-python-style/&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Bruno, só vou responder todas as suas asneiras depois que você assistir o vídeo. Você quer racionalizar a sua escolha por Java, tudo bem. Não me importo. Trabalhe com o que quiser.</p>

<p>Mas antes de sair vomitando respostas quilométricas, faça o dever de casa. Todas as coisas que você está falando aí, já foram ditas:</p>

<p>1) Esqueça a plataforma. Você não precisa de Java-a-Linguagem para ter os recursos de Java-a-Plataforma. Não queira usar a Plataforma como muleta para sua escolha. Escolha, aliás, que nem deve ter sido sua. Sou capaz de apostar que você acabou aprendendo Java por necessidade do mercado, pensando na grana. <i>Não, não estou te julgando por isso.</i> Só estou querendo dizer que são poucas as pessoas que escolhem programar em Java <i>por ver nela uma linguagem com features interessantes</i>. Só escolhe Java quem compara com linguagens &#8220;piores&#8221; como C, VB, C++, etc.</p>

<p>2) Pergunta: se você acha que é, no início, tão priotário ter um ambiente estável e com performance quanto uma linguagem mais flexível e que der <i>poder</i> ao desenvolvedor, pq <b>são são tão poucas as startups de sucesso que usam Java</b>? Se a escolha de linguagem é algo irrelevante, não seria de se esperar que não houvesse correlação entre linguagem de desenvolvimento/habilidade do desenvolvedor/nível de risco do projeto/sucesso da empresa?</p>

<p>3) Tarefa extra: lê isso aí e pára de me encher o saco.</p>

<p><a href="http://www.ginstrom.com/scribbles/2007/10/08/design-patterns-python-style/" rel="nofollow">http://www.ginstrom.com/scribbles/2007/10/08/design-patterns-python-style/</a></p>]]></content:encoded>
	</item>
	<item>
		<title>By: Bruno</title>
		<link>http://log4dev.com/2007/09/27/viva-a-diversidade/comment-page-2/#comment-100</link>
		<dc:creator>Bruno</dc:creator>
		<pubDate>Tue, 16 Oct 2007 22:41:48 +0000</pubDate>
		<guid isPermaLink="false">http://blog.job4dev.com/?p=189#comment-100</guid>
		<description>&lt;p&gt;Eu sei que isto está se arrastando mas eu preciso exercer meu direito de resposta.&lt;/p&gt;

&lt;blockquote&gt;
- Você não me mostrou onde e como JaL possui maior capacidade de expressão do que outras linguagens mais modernas (First-class functions, closures… essas coisas que você diz, no seu próprio blog, que são desnecessárias e que devem ficar fora da linguagem). O maior ponto da minha crítica, a capacidade de expressão da linguagem, você trata como algo supérfluo.
&lt;/blockquote&gt;

&lt;p&gt;Vamos chegar nisto.&lt;/p&gt;

&lt;blockquote&gt;
    - Onde em sua “resposta de cabo a rabo” você me mostra features que só JaL tem? Se você me der isso, aí você teria uma prova razoável de poder de expressão. E, catzo, não venha usar a JVM como argumento: se vale para JVM, isso quer dizer que eu posso programar em, sei lá, Scala, e aí eu teria o poder da JVM E os recursos de Scala.
&lt;/blockquote&gt;

&lt;p&gt;Você é quem fez um alarde dizendo que Java era uma linguagem para code-monkeys por ter sido concebida com uma sintaxe simples (eu diria elegante). Eu digo que a sintaxe de Java não atrapalha em absolutamente nada a plataforma como um todo. O que Java tem como plataforma excede de longe o que python tem em termos de expressividade. E falando de sintaxe java é muito mais conciso e expressivo do que C++ e até do que python no momento de declarar métodos de uma classe, já que em python temos que repetir a declaração do ponteiro &lt;code&gt;self&lt;/code&gt; sempre na assinatura dos métodos.&lt;/p&gt;

&lt;blockquote&gt;
- Design Patterns. Seja realmente “coerente” e “lógico”:
1) Faça uma compilação de todos os design patterns e implemente-os em C, C++, Java, Python, Ruby e Lisp.
2) Faça uma análise e veja o quanto alguns desses patterns são diretos nas linguagens dinâmicas, ou nas linguagens que tem os tais do “carboidratos sintáticos”.
3) Perceba o quanto esses Patterns acabaram sendo catalogados para suprir as deficiências de linguagens OO estáticas.
4) Pare pra pensar que ninguém da GoF iria ganhar dinheiro se vivessem de livros sobre Design Patterns em linguagens dinâmicas.
&lt;/blockquote&gt;

&lt;p&gt;Já falei sobre isto em meu último post que foi uma resposta parcial e rápida a este. Sua concepção de linguagens dinâmicas é totalmente errônea.
Você citou depois o Visitor em LISP utilizando o mecanismo &lt;em&gt;double-dispatch&lt;/em&gt;, ainda quero mesmo ver o video que você mandou, mas estou curioso, é só este pattern que você encontrou automaticamente embutido em LISP? (digo LISP apenas porque não faz sentido dizer linguagens dinâmicas aqui)&lt;/p&gt;

&lt;p&gt;Se for só 1 pattern contra os muitos catalogados desde 1994 então acho que tem mesmo é muito pattern por ai que pode ser utilizado em outras linguagens, correto?&lt;/p&gt;

&lt;blockquote&gt;
O que enche o saco dessa nossa briga é o seguinte: se você reconhecesse que JaL tem sim limitações, mas que essas limitações não são relevantes para você, não teríamos discussão.
&lt;/blockquote&gt;

&lt;p&gt;Não tem &lt;code&gt;generator expressions&lt;/code&gt;, fato. Isto faz java uma linguagem inferior? Como plataforma ainda? De maneira alguma! Pois insisto não faz sentido falar de Java como ferramenta para uso real sem considerar sua plataforma.&lt;/p&gt;

&lt;p&gt;Eu ainda estou para ver um argumento que me faça usar Python ao invés de Java para por exemplo sistemas web/corporativos ou mesmo aplicações gráficas &lt;em&gt;stand alone&lt;/em&gt;. Mas pode ser que tenha alguma API super útil só implementada em python, que eu precise muito, ai sim teríamos alguma coisa...&lt;/p&gt;

&lt;blockquote&gt;
Foi unicamente por isso que eu propus o exercício: inverta os papéis e ataque você a linguagem. Se você não conseguir, fica clara a sua visão de JaL como perfeita, livre de defeitos, e aí caímos justamente no tipo de discussão que o Miguel falou no post. Inútil e infantil. Se for pra ficar nesse tipo de discussão tola, prefiro falar de futebol.
&lt;/blockquote&gt;

&lt;p&gt;Eu simplesmente refutei seus argumentos fortíssimos contra Java, baseados unicamente na sintaxe da linguagem. Você levantou grandes equívocos sobre uma ferramenta que eu conheço e Miguel pediu minha opinião a respeito, aqui estamos.&lt;/p&gt;

&lt;blockquote&gt;
Paulo,
Você inverteu a lógica. Não é o fato de programar em Python que implica em ser um bom hacker. É o fato de só ser capaz de aprender e lidar com linguagens menos expressivas que indica um sujeito fraquinho.
&lt;/blockquote&gt;

&lt;p&gt;Me recuso a comentar isto... Ou melhor, vou comentar, que mágica tem em usar as ultra sofisticadas e complexas funções &lt;code&gt;map&lt;/code&gt;, &lt;code&gt;filter&lt;/code&gt; e &lt;code&gt;reduce&lt;/code&gt;? Nada! É simples, e &lt;code&gt;generator expressions&lt;/code&gt;? Também não tem nenhuma mágica ai! &lt;strong&gt;Garanto que entender o paradigma de modelos orientados a objetos e funcional sim, estes são dificeis de entender, requerem muito estudo e mais dificeis ainda de se dominar! A sintaxe expressiva de python? Mamão com açucar, sinceramente&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
Eu disse que a linguagem Java foi projetada com o intuito de ser uma linguagem mais segura que as alternativas da época E que pudesse ser facilmente aprendida, para que a Sun pudesse vender certificações para massas de code-monkeys.
&lt;/blockquote&gt;

&lt;p&gt;Concordo que a indústria de certificações existe e que a Sun explora mesmo este nicho. Culpa dos empregadores que veêm algum valor nisto, hehe.&lt;/p&gt;

&lt;blockquote&gt;
Traduzindo: não quero dizer que “toda pessoa que programa em JaL é um code-monkey”. Quero dizer, entretanto, que uma pessoa que só programa em Java (ou só programa em C#, ou VB, ou Delphi) e não consegue assimilar conceitos presentes em outras linguagens com certeza não poderá ser chamada de “bom hacker”.
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Só um comentário aqui, Python não adiciona NENHUM conceito em cima de Java!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;É uma linguagem com inferência de tipos, algo que eu espero que Java nunca tenha, e acredito, não tendo isto Java ganha inúmeras vantagens. Fora isto tem um interpretador mais lento, provavelmente gerenciador de memória menos sofisticado/eficiente e um menor número de Aplicações, frameworks e APIs.&lt;/p&gt;

&lt;p&gt;Nem por isto tenho pouco interesse em python, pelo contrário, sei que existe uma comunidade vibrante por trás desta ferramenta e admiro muitas de suas facetas, mas... para muitos casos acho Java ainda uma ferramenta mais aplicável, para outros acredito que python possa servir melhor.&lt;/p&gt;

&lt;blockquote&gt;
Sobra ainda o conjunto “péssimos programadores que tentam trabalhar com linguagens mais poderosas e complexas”. Esse conjunto, quase certamente, eu me incluo.
&lt;/blockquote&gt;

&lt;p&gt;Não vi esta complexidade toda em python, não estou conseguindo ver.&lt;/p&gt;

&lt;blockquote&gt;
E você tem razão: quem usa Java não quer se preocupar com problemas resolvidos
&lt;/blockquote&gt;

&lt;p&gt;Mas quem quer se preocupar com problemas já resolvidos?! Para quê? Reiventar a roda? Você tem todo este tempo sobrando para isto?&lt;/p&gt;

&lt;blockquote&gt;
e só quer gastar seu tempo no desenvolvimento do business.
&lt;/blockquote&gt;

&lt;p&gt;Não é resolvendo os problemas de negócio que se ganha dinheiro??&lt;/p&gt;

&lt;blockquote&gt;
Isso em economês seria traduzido para “agregar valor à empresa através da implementação de um conhecimento específico, ao invés de criar um novo conhecimento e um novo mercado”.
&lt;/blockquote&gt;

&lt;p&gt;Mas o que usar java (sem inferência de tipos, generator expressions, map, reduce, filter e lambda) pode impedir a criação de &lt;q&gt;um novo conhecimento e um novo mercado&lt;/q&gt;?
&lt;strong&gt;Percebe como sua lógica tem um exagero tremendo?&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
Mas, olha só: pelo que você tá falando, a empresa que você trabalha faz tanta pesquisa quanto o lugar que eu trabalhava antes. Não é apenas pesquisa. É pesquisa orientada a uma solução já conhecida. O seu produto é novo, mas ele veio para solucionar um problema que já foi identificado por outra empresa. Na prática, ainda faz parte do “mundo enterprise”.
E os que não estão nesse mundo, nem tem esse tipo de prioridade? E os que querem criar um negócio novo mas não tem a menor idéia de qual vai ser o produto final? Exemplo: o pessoal do YouTube começou a trabalhar com a idéia de fazer uma agência de encontros! Qual era o “conhecimento específico” que eles tinham a respeito do produto? Nenhum!
&lt;/blockquote&gt;

&lt;p&gt;Mas Raphael, os problemas existem independente da linguagem de programação usada para a construção de sua solução! Que isto tem com Java ou Python?&lt;/p&gt;

&lt;blockquote&gt;
Você acha que esses caras tem que trabalhar pensando em fazer um plano no MS Project e começar a fazer uma modelagem OO das possíveis entidades que vão fazer parte do sistema deles? Preocupar-se com “boas práticas de programação”? Preocupar-se com escalabilidade? Performance? Claro que não! Tudo isso é secundário
&lt;/blockquote&gt;

&lt;p&gt;Cara, eu realmente acho que os caras do YouTube começaram tudo pensando sério em performance pelo simples fato do serviço deles só ser útil se atender a milhares de usuários o tempo todo.&lt;/p&gt;

&lt;blockquote&gt;
quando a pessoa está tentando apenas criar algo que possa chamar a atenção dos consumidores ou de um investidor. Para esses caras, escalabilidade é um “bom problema”, pq é um sinal que o cara já tem seu número de usuários crescendo. Resolver problemas de performance é um “bom problema”, pq é sinal que seu sistema já está sendo minimamente utilizado.
&lt;/blockquote&gt;

&lt;p&gt;Bom, ai quando chegamos neste ponto você vai reinventar a roda? Resolver problemas já solucionados? Ou vai usar algo que já está pronto, funciona, etc e tratar de preocupar-se com os problemas dos seus usuários? O problema deles não é ter um servidor web que rode em cluster, o problema destes é colocar seus videos on line. Servidor web que rode em cluster tem o Tomcat ai, feito por colaboradoes que só se dedicam a isto o ano inteiro, neste caso você faria uma solução in house enquanto seus usários migram para o concorrente?&lt;/p&gt;

&lt;blockquote&gt;
O difícil é o primeiro usuário. Arrumar alguém de fora que veja valor no seu produto. E para conseguir esse primeiro usuário, muito vai ter que ser alterado, re-escrito, re-projetado, jogado fora, reciclado, muita coisa vai ter que ser adicionada… O que é melhor para eles? Ferramentas que permitam que eles trabalhem de forma mais abstrata possível (poder de expressão) e tenham flexibilidade para mudarem o design rapidamente, ou o fato de contar com “tecnologia há mais de 10 anos no mercado”?
&lt;/blockquote&gt;

&lt;p&gt;Problemas de negócio a parte como como conseguir o 1o. usuário fogem do escopo da discussão e nada tem a ver com ela, mas certamente tecnologias estáveis sem dúvida alguma estarão na minha lista! Acima dos tais &lt;code&gt;expression generators&lt;/code&gt;. Agora &lt;strong&gt;não vejo como inferência de tipos pode ajudar uma pessoa a mudar seu design rapidamente&lt;/strong&gt;, se é isto mesmo que você quis dizer.&lt;/p&gt;

&lt;p&gt;Se você mudar as operações que uma classe possui com inferência de tipos ou não seu código não vai mais funcionar, a diferença é que em uma linguagem estaticamente tipada como Java estes erros são todos muito bem enumerados pelo seu compilador, e com qualquer ferramentinha com um mínimo de dignidade é só um click do mouse para ir direto ao erro. Ao passo que com linguagens como python este erro só se daria em tempo de execução, é bom você ter Testes Unitários em Python também, uma técnica que nasceu na cultura Java.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;PS. Eu acho os &lt;code&gt;expression generators&lt;/code&gt; de python bem legais, só não são nenhuma bala de prata.&lt;/em&gt;&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Eu sei que isto está se arrastando mas eu preciso exercer meu direito de resposta.</p>

<blockquote>
- Você não me mostrou onde e como JaL possui maior capacidade de expressão do que outras linguagens mais modernas (First-class functions, closures… essas coisas que você diz, no seu próprio blog, que são desnecessárias e que devem ficar fora da linguagem). O maior ponto da minha crítica, a capacidade de expressão da linguagem, você trata como algo supérfluo.
</blockquote>

<p>Vamos chegar nisto.</p>

<blockquote>
    &#8211; Onde em sua “resposta de cabo a rabo” você me mostra features que só JaL tem? Se você me der isso, aí você teria uma prova razoável de poder de expressão. E, catzo, não venha usar a JVM como argumento: se vale para JVM, isso quer dizer que eu posso programar em, sei lá, Scala, e aí eu teria o poder da JVM E os recursos de Scala.
</blockquote>

<p>Você é quem fez um alarde dizendo que Java era uma linguagem para code-monkeys por ter sido concebida com uma sintaxe simples (eu diria elegante). Eu digo que a sintaxe de Java não atrapalha em absolutamente nada a plataforma como um todo. O que Java tem como plataforma excede de longe o que python tem em termos de expressividade. E falando de sintaxe java é muito mais conciso e expressivo do que C++ e até do que python no momento de declarar métodos de uma classe, já que em python temos que repetir a declaração do ponteiro <code>self</code> sempre na assinatura dos métodos.</p>

<blockquote>
- Design Patterns. Seja realmente “coerente” e “lógico”:
1) Faça uma compilação de todos os design patterns e implemente-os em C, C++, Java, Python, Ruby e Lisp.
2) Faça uma análise e veja o quanto alguns desses patterns são diretos nas linguagens dinâmicas, ou nas linguagens que tem os tais do “carboidratos sintáticos”.
3) Perceba o quanto esses Patterns acabaram sendo catalogados para suprir as deficiências de linguagens OO estáticas.
4) Pare pra pensar que ninguém da GoF iria ganhar dinheiro se vivessem de livros sobre Design Patterns em linguagens dinâmicas.
</blockquote>

<p>Já falei sobre isto em meu último post que foi uma resposta parcial e rápida a este. Sua concepção de linguagens dinâmicas é totalmente errônea.
Você citou depois o Visitor em LISP utilizando o mecanismo <em>double-dispatch</em>, ainda quero mesmo ver o video que você mandou, mas estou curioso, é só este pattern que você encontrou automaticamente embutido em LISP? (digo LISP apenas porque não faz sentido dizer linguagens dinâmicas aqui)</p>

<p>Se for só 1 pattern contra os muitos catalogados desde 1994 então acho que tem mesmo é muito pattern por ai que pode ser utilizado em outras linguagens, correto?</p>

<blockquote>
O que enche o saco dessa nossa briga é o seguinte: se você reconhecesse que JaL tem sim limitações, mas que essas limitações não são relevantes para você, não teríamos discussão.
</blockquote>

<p>Não tem <code>generator expressions</code>, fato. Isto faz java uma linguagem inferior? Como plataforma ainda? De maneira alguma! Pois insisto não faz sentido falar de Java como ferramenta para uso real sem considerar sua plataforma.</p>

<p>Eu ainda estou para ver um argumento que me faça usar Python ao invés de Java para por exemplo sistemas web/corporativos ou mesmo aplicações gráficas <em>stand alone</em>. Mas pode ser que tenha alguma API super útil só implementada em python, que eu precise muito, ai sim teríamos alguma coisa&#8230;</p>

<blockquote>
Foi unicamente por isso que eu propus o exercício: inverta os papéis e ataque você a linguagem. Se você não conseguir, fica clara a sua visão de JaL como perfeita, livre de defeitos, e aí caímos justamente no tipo de discussão que o Miguel falou no post. Inútil e infantil. Se for pra ficar nesse tipo de discussão tola, prefiro falar de futebol.
</blockquote>

<p>Eu simplesmente refutei seus argumentos fortíssimos contra Java, baseados unicamente na sintaxe da linguagem. Você levantou grandes equívocos sobre uma ferramenta que eu conheço e Miguel pediu minha opinião a respeito, aqui estamos.</p>

<blockquote>
Paulo,
Você inverteu a lógica. Não é o fato de programar em Python que implica em ser um bom hacker. É o fato de só ser capaz de aprender e lidar com linguagens menos expressivas que indica um sujeito fraquinho.
</blockquote>

<p>Me recuso a comentar isto&#8230; Ou melhor, vou comentar, que mágica tem em usar as ultra sofisticadas e complexas funções <code>map</code>, <code>filter</code> e <code>reduce</code>? Nada! É simples, e <code>generator expressions</code>? Também não tem nenhuma mágica ai! <strong>Garanto que entender o paradigma de modelos orientados a objetos e funcional sim, estes são dificeis de entender, requerem muito estudo e mais dificeis ainda de se dominar! A sintaxe expressiva de python? Mamão com açucar, sinceramente</strong>.</p>

<blockquote>
Eu disse que a linguagem Java foi projetada com o intuito de ser uma linguagem mais segura que as alternativas da época E que pudesse ser facilmente aprendida, para que a Sun pudesse vender certificações para massas de code-monkeys.
</blockquote>

<p>Concordo que a indústria de certificações existe e que a Sun explora mesmo este nicho. Culpa dos empregadores que veêm algum valor nisto, hehe.</p>

<blockquote>
Traduzindo: não quero dizer que “toda pessoa que programa em JaL é um code-monkey”. Quero dizer, entretanto, que uma pessoa que só programa em Java (ou só programa em C#, ou VB, ou Delphi) e não consegue assimilar conceitos presentes em outras linguagens com certeza não poderá ser chamada de “bom hacker”.
</blockquote>

<p><strong>Só um comentário aqui, Python não adiciona NENHUM conceito em cima de Java!</strong></p>

<p>É uma linguagem com inferência de tipos, algo que eu espero que Java nunca tenha, e acredito, não tendo isto Java ganha inúmeras vantagens. Fora isto tem um interpretador mais lento, provavelmente gerenciador de memória menos sofisticado/eficiente e um menor número de Aplicações, frameworks e APIs.</p>

<p>Nem por isto tenho pouco interesse em python, pelo contrário, sei que existe uma comunidade vibrante por trás desta ferramenta e admiro muitas de suas facetas, mas&#8230; para muitos casos acho Java ainda uma ferramenta mais aplicável, para outros acredito que python possa servir melhor.</p>

<blockquote>
Sobra ainda o conjunto “péssimos programadores que tentam trabalhar com linguagens mais poderosas e complexas”. Esse conjunto, quase certamente, eu me incluo.
</blockquote>

<p>Não vi esta complexidade toda em python, não estou conseguindo ver.</p>

<blockquote>
E você tem razão: quem usa Java não quer se preocupar com problemas resolvidos
</blockquote>

<p>Mas quem quer se preocupar com problemas já resolvidos?! Para quê? Reiventar a roda? Você tem todo este tempo sobrando para isto?</p>

<blockquote>
e só quer gastar seu tempo no desenvolvimento do business.
</blockquote>

<p>Não é resolvendo os problemas de negócio que se ganha dinheiro??</p>

<blockquote>
Isso em economês seria traduzido para “agregar valor à empresa através da implementação de um conhecimento específico, ao invés de criar um novo conhecimento e um novo mercado”.
</blockquote>

<p>Mas o que usar java (sem inferência de tipos, generator expressions, map, reduce, filter e lambda) pode impedir a criação de <q>um novo conhecimento e um novo mercado</q>?
<strong>Percebe como sua lógica tem um exagero tremendo?</strong></p>

<blockquote>
Mas, olha só: pelo que você tá falando, a empresa que você trabalha faz tanta pesquisa quanto o lugar que eu trabalhava antes. Não é apenas pesquisa. É pesquisa orientada a uma solução já conhecida. O seu produto é novo, mas ele veio para solucionar um problema que já foi identificado por outra empresa. Na prática, ainda faz parte do “mundo enterprise”.
E os que não estão nesse mundo, nem tem esse tipo de prioridade? E os que querem criar um negócio novo mas não tem a menor idéia de qual vai ser o produto final? Exemplo: o pessoal do YouTube começou a trabalhar com a idéia de fazer uma agência de encontros! Qual era o “conhecimento específico” que eles tinham a respeito do produto? Nenhum!
</blockquote>

<p>Mas Raphael, os problemas existem independente da linguagem de programação usada para a construção de sua solução! Que isto tem com Java ou Python?</p>

<blockquote>
Você acha que esses caras tem que trabalhar pensando em fazer um plano no MS Project e começar a fazer uma modelagem OO das possíveis entidades que vão fazer parte do sistema deles? Preocupar-se com “boas práticas de programação”? Preocupar-se com escalabilidade? Performance? Claro que não! Tudo isso é secundário
</blockquote>

<p>Cara, eu realmente acho que os caras do YouTube começaram tudo pensando sério em performance pelo simples fato do serviço deles só ser útil se atender a milhares de usuários o tempo todo.</p>

<blockquote>
quando a pessoa está tentando apenas criar algo que possa chamar a atenção dos consumidores ou de um investidor. Para esses caras, escalabilidade é um “bom problema”, pq é um sinal que o cara já tem seu número de usuários crescendo. Resolver problemas de performance é um “bom problema”, pq é sinal que seu sistema já está sendo minimamente utilizado.
</blockquote>

<p>Bom, ai quando chegamos neste ponto você vai reinventar a roda? Resolver problemas já solucionados? Ou vai usar algo que já está pronto, funciona, etc e tratar de preocupar-se com os problemas dos seus usuários? O problema deles não é ter um servidor web que rode em cluster, o problema destes é colocar seus videos on line. Servidor web que rode em cluster tem o Tomcat ai, feito por colaboradoes que só se dedicam a isto o ano inteiro, neste caso você faria uma solução in house enquanto seus usários migram para o concorrente?</p>

<blockquote>
O difícil é o primeiro usuário. Arrumar alguém de fora que veja valor no seu produto. E para conseguir esse primeiro usuário, muito vai ter que ser alterado, re-escrito, re-projetado, jogado fora, reciclado, muita coisa vai ter que ser adicionada… O que é melhor para eles? Ferramentas que permitam que eles trabalhem de forma mais abstrata possível (poder de expressão) e tenham flexibilidade para mudarem o design rapidamente, ou o fato de contar com “tecnologia há mais de 10 anos no mercado”?
</blockquote>

<p>Problemas de negócio a parte como como conseguir o 1o. usuário fogem do escopo da discussão e nada tem a ver com ela, mas certamente tecnologias estáveis sem dúvida alguma estarão na minha lista! Acima dos tais <code>expression generators</code>. Agora <strong>não vejo como inferência de tipos pode ajudar uma pessoa a mudar seu design rapidamente</strong>, se é isto mesmo que você quis dizer.</p>

<p>Se você mudar as operações que uma classe possui com inferência de tipos ou não seu código não vai mais funcionar, a diferença é que em uma linguagem estaticamente tipada como Java estes erros são todos muito bem enumerados pelo seu compilador, e com qualquer ferramentinha com um mínimo de dignidade é só um click do mouse para ir direto ao erro. Ao passo que com linguagens como python este erro só se daria em tempo de execução, é bom você ter Testes Unitários em Python também, uma técnica que nasceu na cultura Java.</p>

<p><em>PS. Eu acho os <code>expression generators</code> de python bem legais, só não são nenhuma bala de prata.</em></p>]]></content:encoded>
	</item>
</channel>
</rss>

