#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams

56
Diminuindo sofrimento com código legado de linguagens não mainstreams

Transcript of #DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams

Diminuindo sofrimento com

código legado de linguagens

não mainstreams

Jac Abreu LopesDeveloper sem preconceitosDe Java a Perl sem mimimis

@JacAbreu

MotivaçãoTrabalhar diariamente com um

sistema feito em Perl criado

há 10 anos

MotivaçãoCódigos importantes ao negócio

intocados e intocáveis

Como deixar um dev chocado:Abordar um developer feliz, trabalhando

com a sua tecnologia preferida e avisar que ele trabalhará com algum sistema legado

E AÍ?

O que é legado?

O que é legado?

Sistema feito pelos outros?

O que é legado?Sistema feito pelos outros?

Sistema feito em tecnologia antiga?

O que é legado?Sistema feito pelos outros?

Sistema feito em tecnologia antiga?

Sistema com “cara” de antigo?

O que é legado?Sistema feito pelos outros?

Sistema feito em tecnologia antiga?Sistema com “cara” de antigo?

Sistema sem testes?

Feito pelos outros?

https://github.com/jruby/jruby

+ =

Tecnologia antiga?

C++: 1985 (30 anos)

Python: 1991 (24 anos)

Java: 1995 (20 anos)

Ruby: 1995 (20 anos)

“Cara” de antigo?Vim (1991), Vi (1976)

“Cara” de antigo?Vim (1991), Vi (1976)

Software sem testes é legado?

Geralmente sim.

O que é legado?

Ninguém tem conhecimento das regras de negócio.

O que é legado?Ninguém tem conhecimento das

regras de negócio.

Não atende completamente às necessidades do negócio.

O que é legado?Ninguém tem conhecimento das

regras de negócio.Não atende completamente às

necessidades do negócio.

Evolução arriscada ou muito custosa

“fui alocado sozinho num […] pequeno sistema "legado" extremamente mal feito.

[...] E eu posso dizer "mal feito" porque efetivamente ele não executava como

devia, ou seja, era tecnicamente falho e devolvia muitos erros.”

Fabio AkitaO Mito do Legado

http://www.akitaonrails.com/2012/08/15/off-topic-o-mito-do-legado

O que é uma linguagem não mainstream?

O que é uma linguagem não mainstream?

O que é uma linguagem não mainstream?

O que é uma linguagem não mainstream?

http://redmonk.com/sogrady/2015/01/14/language-rankings-1-15/

O quão popular é uma linguagem?

✓ Google Trends✓ Resultados de busca✓ Empregos✓ Projetos no GitHub✓ Tiobe✓ PYPL PopularitY of Programming Language✓ RedMonk Programming Language Rankings

Linguagens não mainstream são aquelas que não costumam ser

utilizadas em greenfield

O que que o legado tem?

O que que o legado tem?

Abordagens diferentes nosdiferentes módulos do sistema

O que que o legado tem?

Abordagens diferentes nos

diferentes módulos do sistema

Frameworks próprios

O que que o legado tem?

Abordagens diferentes nos

diferentes módulos do sistema

Frameworks próprios

Débitos técnicos acumulados

“Faça qualquer coisa, pois legado ninguém vê”

“É legado, não precisa se preocupar, pode fazer de qualquer jeito”

Sistema utilizado é sistema observado.

Sistema utilizado é sistema passível de requisições de evolução.

Fazer “qualquer coisa” de “qualquer jeito” leva a perder o controle do

sistema

Não se dê ao luxo de perder o controle

Se tem alguém programando, provavelmente tem comunidade.

Encontre-a.

No caso de Perl

✓ http://sao-paulo.pm.org/✓ http://yapcbrasil2015.org/✓ http://perl.org.br/

No caso de Perl (with lasers)

✓ Metacpan https://metacpan.orgA modern CPAN search site, with an open source backend

Não é porque é antigo que não tem

boas práticas

Perl::TidyParses and beautifies perl source

Não é porque é antigo que não tem

boas práticas

Perl Best PracticesStandards and Styles for Developing

Maintainable Code.Partes desatualizadas após o Moo/Moose, mas ainda vale a leitura.

Não é porque é antigo que não tem

boas práticas

Perl::CriticCritique Perl source code for best-practicesMódulo que implementa as indicações do

Perl Best Practices - contempla Moo/Moose

Abordagem Saiba o objetivo do código e decida:

abordagem cirúrgica

ou reformadora?

Não reinvente a rodaFrameworks coorporativos são válidos em casos muito especiais e se mantidos por uma equipe e não por uma pessoa.

Não reinvente a rodaSe necessário, “forke” um framework

mais próximo às necessidades do projeto e adapte.

Seja um bom escoteiroLegado não é bagunça. Um trecho de código bem escrito vale mais do que

nenhum. O próximo dev irá te agradecer.

Documente tudo!Documente o que entendeu e

principalmente o que não entendeu.

Testes de negócioEscreva testes automatizados de

negócio para garantir que entende o que o código faz.

Abra sua mente

Abra sua mente

1. http://www.itexto.net/devkico/?p=20732. http://www.itexto.net/devkico/?p=21063. http://www.computerworld.com.au/article/393903/cobol_dead_yet/4. http://www.akitaonrails.com/2012/08/15/off-topic-o-mito-do-legado5. http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html6. https://github.com/search?utf8=%E2%9C%93&q=language%3APerl&type=Repositories&ref=searchresults7. http://www.tiobe.com/index.php/content/paperinfo/tpci/programminglanguages_definition.html8. http://sogrady-media.redmonk.com/sogrady/files/2015/01/lang.rank_.plot_.q1152.png9. http://redmonk.com/sogrady/2015/01/14/language-rankings-1-15/

10. http://www.cbsi.net.br/2015/03/dada-como-em-extincao-cobol-ainda-ta.html11. https://en.wikipedia.org/wiki/Measuring_programming_language_popularity12. http://pypl.github.io/PYPL.html 13. https://www.blackducksoftware.com/resources/data/this-years-language-use14. http://trendyskills.com/ 15. http://pt.slideshare.net/garux/communities-perl-edition-riojs16. http://pt.slideshare.net/garux/descobrindo-a-linguagem-perl17. https://help.github.com/articles/where-can-i-find-open-source-projects-to-work-on/ 18. https://github.com/trending 19. http://blog.microfocus.com/news/the-legacy-myth-legendary-it/2218/ 20. http://search.cpan.org/~shancock/Perl-Tidy-20140711/lib/Perl/Tidy.pod 21. http://shop.oreilly.com/product/9780596001735.do 22. https://github.com/search?utf8=%E2%9C%93&q=framework23. http://search.cpan.org/~thaljef/Perl-Critic-1.125/lib/Perl/Critic.pm 24. https://en.wikipedia.org/wiki/Programming_languages_used_in_most_popular_websites25. https://www.perl.org/ 26. http://onyxneon.com/books/modern_perl/index.html

Referências

@JacAbreu