Diminuindo sofrimento com
código legado de linguagens
não mainstreams
Jac Abreu Lopes
Developer sem preconceitos
De Java a Perl sem mimimis
@JacAbreu
Motivação
Trabalhar diariamente com um
sistema feito em Perlcriado
há 10 anos
Motivação
Có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 Akita
O 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 nos
diferentes 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.org
A modern CPAN search site,
with an open source backend
Não é porque é antigo que não tem
boas práticas
Perl::Tidy
Parses and beautifies perl source
Não é porque é antigo que não tem
boas práticas
Perl Best Practices
Standards 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::Critic
Critique Perl source code for best-practices
Mó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 roda
Frameworks 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 roda
Se necessário, “forke” um framework
mais próximo às necessidades do
projeto e adapte.
Seja um bom escoteiro
Legado 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ócio
Escreva 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=2073
2. http://www.itexto.net/devkico/?p=2106
3. http://www.computerworld.com.au/article/393903/cobol_dead_yet/
4. http://www.akitaonrails.com/2012/08/15/off-topic-o-mito-do-legado
5. http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
6. https://github.com/search?utf8=%E2%9C%93&q=language%3APerl&type=Repositories&ref=searchresults
7. http://www.tiobe.com/index.php/content/paperinfo/tpci/programminglanguages_definition.html
8. http://sogrady-media.redmonk.com/sogrady/files/2015/01/lang.rank_.plot_.q1152.png
9. 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.html
11. https://en.wikipedia.org/wiki/Measuring_programming_language_popularity
12. http://pypl.github.io/PYPL.html
13. https://www.blackducksoftware.com/resources/data/this-years-language-use
14. http://trendyskills.com/
15. http://pt.slideshare.net/garux/communities-perl-edition-riojs
16. http://pt.slideshare.net/garux/descobrindo-a-linguagem-perl
17. 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=framework
23. 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_websites
25. https://www.perl.org/
26. http://onyxneon.com/books/modern_perl/index.html
Referências
@JacAbreu

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

  • 1.
    Diminuindo sofrimento com códigolegado de linguagens não mainstreams
  • 2.
    Jac Abreu Lopes Developersem preconceitos De Java a Perl sem mimimis @JacAbreu
  • 3.
    Motivação Trabalhar diariamente comum sistema feito em Perlcriado há 10 anos
  • 7.
    Motivação Códigos importantes aonegócio intocados e intocáveis
  • 8.
    Como deixar umdev chocado: Abordar um developer feliz, trabalhando com a sua tecnologia preferida e avisar que ele trabalhará com algum sistema legado
  • 9.
  • 10.
    O que élegado?
  • 11.
    O que élegado? Sistema feito pelos outros?
  • 12.
    O que élegado? Sistema feito pelos outros? Sistema feito em tecnologia antiga?
  • 13.
    O que élegado? Sistema feito pelos outros? Sistema feito em tecnologia antiga? Sistema com “cara” de antigo?
  • 14.
    O que élegado? Sistema feito pelos outros? Sistema feito em tecnologia antiga? Sistema com “cara” de antigo? Sistema sem testes?
  • 15.
  • 16.
    Tecnologia antiga? C++: 1985(30 anos) Python: 1991 (24 anos) Java: 1995 (20 anos) Ruby: 1995 (20 anos)
  • 17.
    “Cara” de antigo? Vim(1991), Vi (1976)
  • 18.
    “Cara” de antigo? Vim(1991), Vi (1976)
  • 19.
    Software sem testesé legado? Geralmente sim.
  • 20.
    O que élegado? Ninguém tem conhecimento das regras de negócio.
  • 21.
    O que élegado? Ninguém tem conhecimento das regras de negócio. Não atende completamente às necessidades do negócio.
  • 22.
    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
  • 23.
    “fui alocado sozinhonum […] 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 Akita O Mito do Legado http://www.akitaonrails.com/2012/08/15/off-topic-o-mito-do-legado
  • 24.
    O que éuma linguagem não mainstream?
  • 25.
    O que éuma linguagem não mainstream?
  • 26.
    O que éuma linguagem não mainstream?
  • 27.
    O que éuma linguagem não mainstream?
  • 28.
  • 29.
    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
  • 30.
    Linguagens não mainstreamsão aquelas que não costumam ser utilizadas em greenfield
  • 31.
    O que queo legado tem?
  • 32.
    O que queo legado tem? Abordagens diferentes nos diferentes módulos do sistema
  • 33.
    O que queo legado tem? Abordagens diferentes nos diferentes módulos do sistema Frameworks próprios
  • 34.
    O que queo legado tem? Abordagens diferentes nos diferentes módulos do sistema Frameworks próprios Débitos técnicos acumulados
  • 35.
    “Faça qualquer coisa,pois legado ninguém vê” “É legado, não precisa se preocupar, pode fazer de qualquer jeito”
  • 36.
    Sistema utilizado ésistema observado. Sistema utilizado é sistema passível de requisições de evolução.
  • 37.
    Fazer “qualquer coisa”de “qualquer jeito” leva a perder o controle do sistema Não se dê ao luxo de perder o controle
  • 38.
    Se tem alguémprogramando, provavelmente tem comunidade. Encontre-a.
  • 39.
    No caso dePerl ✓ http://sao-paulo.pm.org/ ✓ http://yapcbrasil2015.org/ ✓ http://perl.org.br/
  • 40.
    No caso dePerl (with lasers) ✓ Metacpan https://metacpan.org A modern CPAN search site, with an open source backend
  • 43.
    Não é porqueé antigo que não tem boas práticas Perl::Tidy Parses and beautifies perl source
  • 44.
    Não é porqueé antigo que não tem boas práticas Perl Best Practices Standards and Styles for Developing Maintainable Code. Partes desatualizadas após o Moo/Moose, mas ainda vale a leitura.
  • 45.
    Não é porqueé antigo que não tem boas práticas Perl::Critic Critique Perl source code for best-practices Módulo que implementa as indicações do Perl Best Practices - contempla Moo/Moose
  • 46.
    Abordagem Saiba o objetivodo código e decida: abordagem cirúrgica ou reformadora?
  • 48.
    Não reinvente aroda Frameworks coorporativos são válidos em casos muito especiais e se mantidos por uma equipe e não por uma pessoa.
  • 49.
    Não reinvente aroda Se necessário, “forke” um framework mais próximo às necessidades do projeto e adapte.
  • 50.
    Seja um bomescoteiro Legado não é bagunça. Um trecho de código bem escrito vale mais do que nenhum. O próximo dev irá te agradecer.
  • 51.
    Documente tudo! Documente oque entendeu e principalmente o que não entendeu.
  • 52.
    Testes de negócio Escrevatestes automatizados de negócio para garantir que entende o que o código faz.
  • 53.
  • 54.
  • 55.
    1. http://www.itexto.net/devkico/?p=2073 2. http://www.itexto.net/devkico/?p=2106 3.http://www.computerworld.com.au/article/393903/cobol_dead_yet/ 4. http://www.akitaonrails.com/2012/08/15/off-topic-o-mito-do-legado 5. http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html 6. https://github.com/search?utf8=%E2%9C%93&q=language%3APerl&type=Repositories&ref=searchresults 7. http://www.tiobe.com/index.php/content/paperinfo/tpci/programminglanguages_definition.html 8. http://sogrady-media.redmonk.com/sogrady/files/2015/01/lang.rank_.plot_.q1152.png 9. 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.html 11. https://en.wikipedia.org/wiki/Measuring_programming_language_popularity 12. http://pypl.github.io/PYPL.html 13. https://www.blackducksoftware.com/resources/data/this-years-language-use 14. http://trendyskills.com/ 15. http://pt.slideshare.net/garux/communities-perl-edition-riojs 16. http://pt.slideshare.net/garux/descobrindo-a-linguagem-perl 17. 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=framework 23. 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_websites 25. https://www.perl.org/ 26. http://onyxneon.com/books/modern_perl/index.html Referências
  • 56.