<div dir="ltr"><div>Existe o problema das culturas.<br></div><div class="gmail_extra"><br></div><div class="gmail_extra">Se eu não sei programar, o que eu usar, seja C, Haskell ou Perl, vai sair esquisito. Talvez funcione. Talvez resolva o meu problema. A questão é que a linguagem evolui assim como a sua comunidade. Hoje tem uma parte da comunidade que defende boas praticas, que defende testes, que defende um codigo legivel.</div>
<div class="gmail_extra"><br></div><div class="gmail_extra">Recentemente eu trabalhei num projeto Ruby ( <a href="https://github.com/peczenyj/MooseX">https://github.com/peczenyj/MooseX</a> ) e vou dizer, eu consigo produzir um codigo talvez até mais legivel em Ruby do que em Perl. Porém vc tem casos onde a galera abusa do fato da linguagem possuir classes abertas e não raro alguem injeta 500 metodos sem vc saber em alguma classe tipo Object ou String. Eis o problema da cultura: não é só pq eu posso que eu devo fazer. Existem praticas para produzir algo que seja usavel por um grupo maior de pessoas e que seja possivel dar manutenção num futuro proximo.</div>
<div class="gmail_extra"><br></div><div class="gmail_extra">Estou trabalhando em Perl 5.12.2 e usando Moo. Eu tento usar nomes legiveis para as minhas variaveis, eu tento adicionar comentarios / pod quando preciso fazer algo obscuro</div>
<div class="gmail_extra"><br></div><div class="gmail_extra">por exemplo:</div><div class="gmail_extra"><br></div><div class="gmail_extra"><div class="gmail_extra">sub _generate_random_foo {</div><div class="gmail_extra">
my ($thing) = @_;</div>
<div class="gmail_extra"><br></div><div class="gmail_extra"> # to generate random foo based on the thing:</div><div class="gmail_extra"> # 1 - sha1_hex of thing, to generate a hexadecimal hash</div><div class="gmail_extra">
# 2 - pick two first hexdigits (returns 0x00 <= x <= 0xff)</div><div class="gmail_extra"> # 3 - convert from hex to decimal (returns 0 <= x <= 255)</div><div class="gmail_extra"> # 4 - apply 100 * value / 256 to rescale between 0 <= x < 100</div>
<div class="gmail_extra"> # 5 - truncate to integer</div><div class="gmail_extra"> # 6 - abs returns a positive integer or zero</div><div class="gmail_extra"> # 7 - modulus 100 will ensure it will return something less than 100</div>
<div class="gmail_extra"> # we will return a number between zero and 99</div><div class="gmail_extra"><br></div><div class="gmail_extra"> abs( int( 100 * hex( substr( sha1_hex($thing), 0, 2 ) ) / 0x100 ) ) % 100;</div>
<div class="gmail_extra">}</div><div><br></div></div><div class="gmail_extra">os dois ultimos passos eu adicionei de paranoia depois que acharam "coisas estranhas acontecendo".</div><div class="gmail_extra"><br>
</div><div class="gmail_extra">qual o limite para isso ser legivel ou não? um bom processo de code review. Se eu simplesmente remover os comentarios alguem vai perder 20 minutos no futuro tentando entender essa porra.</div>
<div class="gmail_extra"><br></div><div class="gmail_extra">Eu fui programar em Java semana passada. Cara que dificuldade que é fazer um simples join ",", @array ! Eu preciso usar uma biblioteca externa pra fazer isso. E adicionar uma biblioteca externa significa depender de maven ( ou graddle) pra fazer alguma coisa que eu queria que tivesse 0 dependencias externas. No fim eu posso criar uma classe "Util" que vai ter esse tipo de coisa. E Javadoc. Ou posso socar um foreach + StringBuilder no meio da minha logica e ficar com um metodo de 75 linhas no fim das contas. A minha dificuldade? estou fazendo sozinho, ninguem pra revisar ou criticar o meu codigo.</div>
<div class="gmail_extra"><br></div><div class="gmail_extra">Existem formas de analisar o codigo ( dependendo da linguagem ) e achar problemas, metodos muito complexos, problemas de cobertura de teste, etc. Esse tipo de ferramenta ajuda (E MUITO) mas não faz o trabalho humano.</div>
<div class="gmail_extra"><br><div class="gmail_quote">2014-02-27 9:55 GMT-03:00 Blabos de Blebe <span dir="ltr"><<a href="mailto:blabos@gmail.com" target="_blank">blabos@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div dir="ltr">Pra quem for continuar no assunto, seguem apenas umas considerações menores e de pouca importância:<div><br></div><div><a href="https://metacpan.org/pod/Devel::Cover" target="_blank">https://metacpan.org/pod/Devel::Cover</a></div>
<div><a href="https://metacpan.org/pod/Perl::Critic" target="_blank">https://metacpan.org/pod/Perl::Critic</a><br></div><div><a href="https://metacpan.org/pod/Perl::Tidy" target="_blank">https://metacpan.org/pod/Perl::Tidy</a><br>
</div><div><a href="https://metacpan.org/pod/Test::Most" target="_blank">https://metacpan.org/pod/Test::Most</a><br>
</div><div><br></div><div>Algo ainda mais irrelevante:</div><div><br></div><div><a href="https://metacpan.org/pod/Catalyst" target="_blank">https://metacpan.org/pod/Catalyst</a><br></div><div><a href="https://metacpan.org/pod/Mojolicious" target="_blank">https://metacpan.org/pod/Mojolicious</a> (pra focar num flame de cada vez)<br>
</div><div><a href="https://metacpan.org/pod/DBIx::Class" target="_blank">https://metacpan.org/pod/DBIx::Class</a><br></div><div><a href="https://metacpan.org/pod/Template" target="_blank">https://metacpan.org/pod/Template</a><br>
</div><div><br></div><div>
Eu to falando irrelevante, não pelos módulos em si, mas pela minha abordagem na resposta. Eu não vou nem usar argumentos mais sólidos que isso.</div><div><br></div><div>Agora, criatura das neves, se com pelo menos isso, você ( um você genérico, ninguém pessoalmente ok!? ) ainda acredita em Perl write-only, Papai Noel ou no Pé Grande, nada pessoal, mas não me venha dizer que você é o experiente grande programador foda do alto da montanha, porque, desculpa, você não é.</div>
<div><br></div><div>Se com todos esses frameworks de apoio ( pra citar o mínimo ) você ainda escreve código tosco, **você** é o tosco, não a linguagem.</div><div><br></div><div>Um código é tão ruim quanto a competência do infeliz que o escreveu, e não por causa da linguagem.</div>
<div><br></div><div>Existe Perl tosco? Sim. Existe. Tem coisas que eu diria que é Shell Script com shebang perl.</div><div><br></div><div>Mas se em 2014 você usa perl-5.18.2 pra escrever lixo, você é o tosco. E se em 2014 você ainda propaga essa ladainha, desculpa cara, sai dos anos 90 e vem viver no presente.</div>
<div><br></div><div>Eu não sou tão velho assim, mas com 15 anos de mercado, já trabalhei com algumas coisas (e ambientes) bem bizarras e posso garantir que não só em Perl, mas em PHP, Java, C, .NET e coisinhas da moda (só pra citar as que eu já trabalhei), dá pra achar coisas que vão te fazer sentir vontade de parir a própria mãe só pra matar ela no berço por ter te criado e educado ao ponto de vc ser obrigado a ver certos códigos. É triste.</div>
<div><br></div><div>Por que a linguagem é write-only? Não, criatura, por que quem escreveu é um imbecil.</div><div><br></div><div>Assim como existem pedreiros ruins, médicos ruins, professores ruins, surpresa, supressa, oh, existem programadores ruins! Nossa!</div>
<div><br></div><div>Eu não vou nem entrar no mérito do gestor que te proíbe de refatorar aquele código legado porque "mexer em código que está funcionando é desperdício". Pra esse já me faltam adjetivos, talvez eu devesse aprender klingon.<br>
</div><div><br></div><div>E só pra deixar claro aqui, eu to criticando, o cara que hoje, faz coisa tosca sabendo que é tosco e dá a desculpa esfarrapada de que é culpa da linguagem.</div><div><br></div><div>A existência de um legado, que foi construído dentro de um contexto particular, embora questionável, é outro papo. Muito embora eu já tenha pegado muito código legado do século passado, que é bem melhor escrito que os de hoje.</div>
<div><br></div><div>[]'s</div><div><div><div><br></div><div><br><div class="gmail_extra"><br><br><div class="gmail_quote">2014-02-27 8:27 GMT-03:00 Alceu Rodrigues de Freitas Junior <span dir="ltr"><<a href="mailto:glasswalk3r@yahoo.com.br" target="_blank">glasswalk3r@yahoo.com.br</a>></span>:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">Em <a href="tel:27-02-2014%2001" value="+12702201401" target="_blank">27-02-2014 01</a>:05, Blabos de Blebe escreveu:<div>
<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
A concepção de programadores experientes sobre Perl, pelo menos por onde passei, é > que Perl ainda é linguagem "write-only"<br>
</blockquote>
<br>
Não tão experientes pelo visto...<br>
<br>
Mas isso é só um comentário pessoal e não agrega nada à thread que<br>
aliás, WTF o que eu to fazendo!? Passou, passou, passou...<br>
<br>
</blockquote>
<br></div>
Pelo contrário, faz parte do problema conforme descrito pelo Geraldo. Acho totalmente válido seu comentário, apesar de não ajudar muito. :-)<br>
<br>
É difícil desfazer preconceitos e geralmente leva tempo... algumas vezes eu acho que nem vale a pena tentar.<div><br>
<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
Talvez seja uma boa realizar o trabalho sujo numa outra máquina,<br>
produzir os comandos de shell e enviá-los pra esse servidor via ssh ou<br>
algo parecido.<br>
</blockquote>
<br></div>
Concordo. Ele só precisar saber o horário de verão, e se usar Perl é um "problema" porque ninguém conhece, pode usar shell script mesmo, comparar $TZ para saber que época do ano está e usar ssh/telnet para executar o programa do HP Open View lá no True64, já com o valor de timezone.<br>
<br>
[]'s<span><font color="#888888"><br>
Alceu</font></span><div><div><br>
<br>
=begin disclaimer<br>
Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>
SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org" target="_blank">SaoPaulo-pm@pm.org</a><br>
L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/<u></u>listinfo/saopaulo-pm</a>><br>
=end disclaimer<br>
</div></div></blockquote></div><br></div></div></div></div></div>
<br>=begin disclaimer<br>
Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>
SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org">SaoPaulo-pm@pm.org</a><br>
L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>
=end disclaimer<br>
<br></blockquote></div><br><br clear="all"><div><br></div>-- <br>Tiago B. Peczenyj<br>Linux User #405772<br><br><a href="http://about.me/peczenyj" target="_blank">http://about.me/peczenyj</a>
</div></div>