[Coding4Fun]
- Análise de duas principais linguagens de programação do mercado.
- Design de software baseado em arquitetura de software e evolução de produtos.
Java e Python: Uma análise de arquitetura de software
1. Copyright 2015 Google Inc
TechTalk
Percepções de uma
viagem em dois mundos:
Java e Python
Ryan Padilha (ryan.padilha@gmail.com)
Aperte os cintos e aproveite o melhor do design!
2. Copyright 2015 Google Inc
Focused on software architecture and problem solving
JavaEE expert, SOA specialist and technical writer.
Experience of 13+ years in solution design and development software.
Working on Software Architecture, DevOps Culture and Cloud Computing.
https://ryanpadilha.github.io
http://br.linkedin.com/in/ryanpadilha
Ryan Padilha
3. Copyright 2015 Google Inc
Agenda
Introdução
Design de software em Python
1
2
Design de software em Java3
• Descritivo
• Análise de duas principais linguagens de programação do mercado.
• Design de software baseado em arquitetura de software e evolução de produtos.
Estudo de caso “Quase perfeito”4
5. Copyright 2015 Google Inc
Introdução
Python
• Criada em 1991
• Guido van Rossum (62 anos)
• Baseada em ABC
• Automação tarefas diárias
• Tipagem dinâmica e forte
• Multi-plataforma
• Sintaxe concisa e clara
• Interpretada e compilada
• Possui 33 palavras reservadas
• Grande biblioteca padrão
• Aumentar a produtividade
• Implementação Original CPython
Java
• Criada em 1995
• James Gosling (63 anos)
• Baseada em C++
• Execução neutra em arquitetura
• Tipagem estática e forte
• Multi-plataforma
• Sintaxe verbosa e prolixa
• Compilador JIT e JVM Hotspot
• Possui 53 palavras reservadas
• Ecossistema robusto como plataforma
• Simplicidade na especificação
• Focada a multi-threading e distribuído
Infográfico
6. Copyright 2015 Google Inc
Introdução
Python - Filosofia “Zen of Python”
• “keeping it fun to use”
• Bonito é melhor que feio
• Explícito é melhor que implícito
• Simples é melhor que complexo
• Complexo é melhor que complicado
• Legibilidade importa
• Computação científica, web, IA
• Baixa curva de aprendizagem
Java - Princípios
• “write once run anywhere”
• Simples, orientada a objetos e familiar
• Robusto e seguro
• Arquitetura neutra e portável
• Executar com alto desempenho
• Interpretado, concorrente e dinâmico
• Enterprise server-side, web, mobile
• Alta curva de aprendizagem
7. Copyright 2015 Google Inc
Pesquisas
Stackoverflow - Developer Survey Results 2018 - link
9. Copyright 2015 Google Inc
Pesquisas
Performance Comparison; Java, Python and Go on App Engine - link
10. Copyright 2015 Google Inc
Design de software
• Premissas e orientações:
• Deve ser simples
• Deve ser estável (soluções provadas)
• Não reinvente a roda
• Deve ser suportável, pense na manutenção e evolução
• Não justifique tecnologia pela tecnologia
• Esteja atento aos RNF: volumetria, performance, segurança, escalabilidade,
disponibilidade
• Medida de produtividade: tempo de desenvolvimento, complexidade,
confiabilidade, equação (LoC / Hrs)
• Seja o dono da solução técnica!
11. Copyright 2015 Google Inc
Design de software em Python
• Flask é um microframework baseado em WSGI
• Possui um vasto conjunto maduro de extensões
• Características principais:
• Servidor werkzeug de desenvolvimento e debug integrado
• RESTful request dispatching
• Template engine baseado em Jinja2
• Suporte a cookies seguros (client session)
• Documentação extensa
• Comunidade presente e ativa!
12. Copyright 2015 Google Inc
Design de software em Python
• Confusão ou liberdade para arquitetar aplicações?
• Application Factory
• Blueprints
• Gerenciamento de rotas
• Environment Configuration
• Error Handlers
• Logging e Debugging
• Webservices RESTful
• Renderização de templates
• Conexão com Base de Dados
• Modelo de autenticação e autorização
13. Copyright 2015 Google Inc
Design de software em Python
• Blueprint é usado para organizar o projeto entre componentes distintos
• Escolha seu modelo de acordo com o projeto:
• Estrutura Funcional - flask-website github
• Organização baseada em responsabilidades
• Agrupa arquivos semelhantes
• Estrutura Divisional
• Organização baseada em módulos
• Empacotamento
• http://exploreflask.com/en/latest/index.html
14. Copyright 2015 Google Inc
Design de software em Java
• Spring Framework é baseado nos padrões CDI e IoC
• Simplifica o processo de desenvolvimento em Java
• Características principais:
• Suporte abrangente a infra-estrutura em nível de aplicação
• Recursos organizados em cerca de 20 módulos
• Cria projetos para serem usados, JavaEE foca na padronização
• Estrutura de aplicação leve, emprega o padrão MVC
• Spring Boot com starters e conversão sobre configuração
• Documentação madura e extensa
15. Copyright 2015 Google Inc
Design de software em Java
• Complexidade inicial afasta iniciantes - web e spring
• Arquitetura com visão lógica em camadas
• Diretrizes:
• Alta coesão
• Baixo acoplamento
• Atribuição clara de responsabilidades
• Encapsulamento, modularidade, reuso
• Granularidade no nível correto
• Abstração baseado em interfaces
17. Copyright 2015 Google Inc
• BE: Atlas Authentication Server com Spring Security e JWT
• FE: Flask com Gunicorn e NGINX
Estudo de caso “Quase perfeito”