SlideShare uma empresa Scribd logo
1 de 22
Python + Delphi Um relacionamento que está dando certo (Python Cases) 1 Fernando Macedo
Quem? Fernando Macedo Desenvolvedor Delphi/Python Bacharel em Sistemas de Informação (Faculdade Impacta de Tecnologia) Mestrando em Gestão do Conhecimento e Sistemas Inteligentes (IPEN-USP) Membro da APyB 2
Onde? Esys Colibri 23 anos de experiência 15.000 clientes 35.000 PDVs instalados 100 revendedores em todo o País Suporte 24/7 em todo o Brasil Atualização constante às novas leis 3
O que? Caso da Esys na utilização de Python no Colibri 8 Integração entre Python e Delphi 4
Cenário Software PDV Mesa Balcão Ficha Entrega Contexto Empresa tradicional - 23 anos Aplicação comercial Ambiente Windows (MS, C# e Delphi) Nova versão 5
Os problemas Módulo de relatórios Formatação embutida no aplicativo Manutenção difícil Integração com terceiros Implementações específicas 6
7 Relatórios texto: Antes    { Layout da linha levando em conta qtd fracionada }     TmpStr := '%s%-2.0f ' + Trim(strFormatDesc);     if QtdeFracionada then       TmpStr := '%s%3.3f ' + Trim(strFormatDesc);       TmpStr := Format(TmpStr, [strTagIni, fQuantidade, strDescr]);       lstMarchador.Add(TrimAcentos(Tmpstr) + strTagFim);     sLineMarchadorAgrup:= sLineMarchadorAgrup+';'+TrimAcentos(Tmpstr) + strTagFim;       if dmVenda.qryColibriBN_LUGARMESA.AsBoolean then       TmpStr := TmpStr + FormatFloat(' #0', MyMaterial[i].LugarMesa);       TmpStr := TmpStr + strTagFim;     lstRemota.Add(TrimAcentos(TmpStr)); 
O desafio dos relatórios Premissas Gerar a mesma configuração de arquivos; Simples; Suportar troca em run-time; Suportar loops aninhados, do tipo mestre-detalhe; Mesma origem dos dados para os relatórios visuais; Ter toda a infra construída em dias, e não em meses. 8
Por que Python? Expressividade Legibilidade de código Codificação rápida Vasta coleção de bibliotecas Recurso X, Y, Z 9
A linguagem certa E não sabendo que era impossível,     Python foi lá e fez! Solução da infra em 2 dias! Ganhou moral. 10
Resultados Premissas atendidas Plus: Extensão e customização por clientes 11
Depois 12 {%extends"relatorio-base.template"%} {%setpag = impressaoNumero%} {%settot = impressaoTotal%}   {%- block relatorio %} {%blockcabecalhoscoped -%} {%filtercompexp%}Conta{{venda.codigoDoTicket}}{{'=' * 5}}{{pag}}/{{tot}}{%endfilter%} Mov.: {{dataContabil}} - Imp.: {{data}} - {{hora}}h PDV: {{maquina|semAcentos}} Caixa: {{caixa|semAcentos}} Garcom: {{garcom|semAcentos}} SEQ: {{venda.sequencia}} {%- endblockcabecalho %}   %- block corpo -%}{{render_cancelado() }} {%foriteminitens -%} {{render_item(item) }} {%endfor -%}{{render_cancelado() }}{%- endblock corpo %}
Integração Desktop GUI http://www.python.org/about/apps/ Scripting Extending Upgrade tecnológico 13
DriverPython 14
Uso do P4D 15 type   EngineDoPython = class   private class var     _Eng: TPythonEngine;     _IO: TPythonInputOutput;     _Dir: string;   private const     NOME_DLL = 'python27.dll';     NOME_BIBLIOTECA = 'python27.zip';   public  [...]     class procedure AdicionarDiretorioAoPath(umDiretorio: string);     class property Engine: TPythonEngine read ObterEngine;     class property DirDoPython: string read _DirDoPython write _DirDoPython;     class property Iniciado: Boolean read ObterIniciado;     class property IO: TPythonInputOutput read _IO;   end;
Uso do P4D 16 class constructor EngineDoPython.Create; begin   _Eng := TPythonEngine.Create(nil);   _IO := TPythonInputOutput.Create(nil);   _Eng.DllName := NOME_DLL;   _Eng.PyFlags := _Eng.PyFlags + [pfIgnoreEnvironmentFlag];   _Eng.IO := _IO; end; class procedure EngineDoPython.Iniciar; begin   _Eng.DllPath := arquivos.NormalizarPasta(DiretorioDoPython);   arquivos.ExecutarNaPasta(DiretorioDoPython,     procedure begin       _Eng.LoadDll();       SysModule.path.append(_Eng.DllPath);       SysModule.path.append(_Eng.DllPath + NOME_BIBLIOTECA);     end); end;
O que pode ser feito? Módulos *.pyd Executar códigos Python; Expor classes Delphi ao Python; 17
Problemas e riscos CTypes Manifesto Pessoal Disseminar conhecimento à equipe Continuidade do projeto Python4Delphi Suporte a futuras versões 18
Minhas impressões A ilusão de que verificação de tipos em tempo de compilação resolve todos os problemas Python Oferece alto nível de abstração Escreve-se menos código Maior produtividade Python não se põe entre o desenvolvedor e o problema 19
Links http://code.google.com/p/python4delphi/ http://code.google.com/p/pyscripter/ 20
Obrigado! Dúvidas? Contatos fgmacedo@gmail.com @fgmacedo www.esys.com.br 21
22

Mais conteúdo relacionado

Destaque

Resolvendo problemas de performance em aplicações Delphi e bancos de dados
Resolvendo problemas de performance em aplicações Delphi e bancos de dadosResolvendo problemas de performance em aplicações Delphi e bancos de dados
Resolvendo problemas de performance em aplicações Delphi e bancos de dadosAndreano Lanusse
 
Introdução FireDAC Acesso multi-banco para Delphi e C++ Builder
Introdução FireDACAcesso multi-banco para Delphi e C++ BuilderIntrodução FireDACAcesso multi-banco para Delphi e C++ Builder
Introdução FireDAC Acesso multi-banco para Delphi e C++ BuilderDiego Rosa
 
R ou Python para análise de dados
R ou Python para análise de dadosR ou Python para análise de dados
R ou Python para análise de dadosCiência e Dados
 
Novas ferramentas Python para Análise de Dados
Novas ferramentas Python para Análise de DadosNovas ferramentas Python para Análise de Dados
Novas ferramentas Python para Análise de DadosCiência e Dados
 
Web Scraping: aplicações nos negócios e na ciência
Web Scraping: aplicações nos negócios e na ciênciaWeb Scraping: aplicações nos negócios e na ciência
Web Scraping: aplicações nos negócios e na ciênciaSidney Roberto
 
Capturando a web com Scrapy
Capturando a web com ScrapyCapturando a web com Scrapy
Capturando a web com ScrapyGabriel Freitas
 
Datasnap com FireDAC - Embarcadero Conference 2015
Datasnap com FireDAC - Embarcadero Conference 2015Datasnap com FireDAC - Embarcadero Conference 2015
Datasnap com FireDAC - Embarcadero Conference 2015Kelver Merlotti
 
Python ¿2 vs 3?
Python ¿2 vs 3?Python ¿2 vs 3?
Python ¿2 vs 3?Joel Rivera
 
Desenvolvendo web crawler/scraper com Python
Desenvolvendo web crawler/scraper com PythonDesenvolvendo web crawler/scraper com Python
Desenvolvendo web crawler/scraper com PythonRoselma Mendes
 
Crawleando a web feito gente grande com o scrapy
Crawleando a web feito gente grande com o scrapyCrawleando a web feito gente grande com o scrapy
Crawleando a web feito gente grande com o scrapyBernardo Fontes
 
Extraindo dados públicos na marra com Python
Extraindo dados públicos na marra com PythonExtraindo dados públicos na marra com Python
Extraindo dados públicos na marra com PythonPedro Valente
 
Tutorial Django + Python
Tutorial Django + PythonTutorial Django + Python
Tutorial Django + PythonMateus Padua
 
Nova Infraestrutura JSON: System.JSON na prática
Nova Infraestrutura JSON: System.JSON na prática Nova Infraestrutura JSON: System.JSON na prática
Nova Infraestrutura JSON: System.JSON na prática Mario Guedes
 
Django - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com PythonDjango - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com PythonIgor Sobreira
 
Criação de uma base de dados para gestão de uma biblioteca
Criação de uma base de dados para gestão de uma bibliotecaCriação de uma base de dados para gestão de uma biblioteca
Criação de uma base de dados para gestão de uma bibliotecaDavid Canjamba 2D
 

Destaque (20)

Resolvendo problemas de performance em aplicações Delphi e bancos de dados
Resolvendo problemas de performance em aplicações Delphi e bancos de dadosResolvendo problemas de performance em aplicações Delphi e bancos de dados
Resolvendo problemas de performance em aplicações Delphi e bancos de dados
 
Introdução FireDAC Acesso multi-banco para Delphi e C++ Builder
Introdução FireDACAcesso multi-banco para Delphi e C++ BuilderIntrodução FireDACAcesso multi-banco para Delphi e C++ Builder
Introdução FireDAC Acesso multi-banco para Delphi e C++ Builder
 
Open datasets
Open datasetsOpen datasets
Open datasets
 
R ou Python para análise de dados
R ou Python para análise de dadosR ou Python para análise de dados
R ou Python para análise de dados
 
O que é Data Science?
O que é Data Science?O que é Data Science?
O que é Data Science?
 
Novas ferramentas Python para Análise de Dados
Novas ferramentas Python para Análise de DadosNovas ferramentas Python para Análise de Dados
Novas ferramentas Python para Análise de Dados
 
Web scraping
Web scrapingWeb scraping
Web scraping
 
Web Scraping: aplicações nos negócios e na ciência
Web Scraping: aplicações nos negócios e na ciênciaWeb Scraping: aplicações nos negócios e na ciência
Web Scraping: aplicações nos negócios e na ciência
 
Scraping
ScrapingScraping
Scraping
 
Capturando a web com Scrapy
Capturando a web com ScrapyCapturando a web com Scrapy
Capturando a web com Scrapy
 
Datasnap com FireDAC - Embarcadero Conference 2015
Datasnap com FireDAC - Embarcadero Conference 2015Datasnap com FireDAC - Embarcadero Conference 2015
Datasnap com FireDAC - Embarcadero Conference 2015
 
Python ¿2 vs 3?
Python ¿2 vs 3?Python ¿2 vs 3?
Python ¿2 vs 3?
 
RESTful com json
RESTful com jsonRESTful com json
RESTful com json
 
Desenvolvendo web crawler/scraper com Python
Desenvolvendo web crawler/scraper com PythonDesenvolvendo web crawler/scraper com Python
Desenvolvendo web crawler/scraper com Python
 
Crawleando a web feito gente grande com o scrapy
Crawleando a web feito gente grande com o scrapyCrawleando a web feito gente grande com o scrapy
Crawleando a web feito gente grande com o scrapy
 
Extraindo dados públicos na marra com Python
Extraindo dados públicos na marra com PythonExtraindo dados públicos na marra com Python
Extraindo dados públicos na marra com Python
 
Tutorial Django + Python
Tutorial Django + PythonTutorial Django + Python
Tutorial Django + Python
 
Nova Infraestrutura JSON: System.JSON na prática
Nova Infraestrutura JSON: System.JSON na prática Nova Infraestrutura JSON: System.JSON na prática
Nova Infraestrutura JSON: System.JSON na prática
 
Django - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com PythonDjango - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com Python
 
Criação de uma base de dados para gestão de uma biblioteca
Criação de uma base de dados para gestão de uma bibliotecaCriação de uma base de dados para gestão de uma biblioteca
Criação de uma base de dados para gestão de uma biblioteca
 

Semelhante a Python + Delphi: Um relacionamento que está dando certo

Propostas de atendimento aos cartórios de Registro de Imóveis - Desenvolvedor...
Propostas de atendimento aos cartórios de Registro de Imóveis - Desenvolvedor...Propostas de atendimento aos cartórios de Registro de Imóveis - Desenvolvedor...
Propostas de atendimento aos cartórios de Registro de Imóveis - Desenvolvedor...IRIB
 
Expresso 3 - um caso de sucesso do PHP no governo
Expresso 3 - um caso de sucesso do PHP no governoExpresso 3 - um caso de sucesso do PHP no governo
Expresso 3 - um caso de sucesso do PHP no governoFlávio Lisboa
 
AutomationEdge Robotic Process Automation Quality Nextech Service Desk Digital
AutomationEdge Robotic Process Automation Quality Nextech Service Desk Digital AutomationEdge Robotic Process Automation Quality Nextech Service Desk Digital
AutomationEdge Robotic Process Automation Quality Nextech Service Desk Digital Jorge Biesczad Jr.
 
Como escolher sua plataforma de e commerce
Como escolher sua plataforma de e commerceComo escolher sua plataforma de e commerce
Como escolher sua plataforma de e commerceRafael Campos
 
Dextra Sistemas: A linguagem PHP no modelo de Fábrica de Software
Dextra Sistemas: A linguagem PHP no modelo de Fábrica de SoftwareDextra Sistemas: A linguagem PHP no modelo de Fábrica de Software
Dextra Sistemas: A linguagem PHP no modelo de Fábrica de SoftwareDextra
 
Apresentação da Comunidade PHPDF
Apresentação da Comunidade PHPDFApresentação da Comunidade PHPDF
Apresentação da Comunidade PHPDFDaniel Maffioletti
 
Forca de Digital & RPA
Forca de Digital & RPAForca de Digital & RPA
Forca de Digital & RPAEduardo Britto
 
Pentaho Day 2015 - Universidade Positivo - Multi Tenancy com Pentaho na Sage
Pentaho Day 2015 - Universidade Positivo - Multi Tenancy com Pentaho na SagePentaho Day 2015 - Universidade Positivo - Multi Tenancy com Pentaho na Sage
Pentaho Day 2015 - Universidade Positivo - Multi Tenancy com Pentaho na SageVinicius Elyseu
 
Segunda Empregável - Edição 00
Segunda Empregável - Edição 00Segunda Empregável - Edição 00
Segunda Empregável - Edição 00Fernando Anselmo
 
AutomationEdge Quality Nextech
AutomationEdge Quality NextechAutomationEdge Quality Nextech
AutomationEdge Quality NextechJorge Biesczad Jr.
 
Projeto TCOS - III ENSOL
Projeto TCOS - III ENSOLProjeto TCOS - III ENSOL
Projeto TCOS - III ENSOLAécio Pires
 
Fábrica de Software da Procempa - Palestra no 6o Fórum Internacional Software...
Fábrica de Software da Procempa - Palestra no 6o Fórum Internacional Software...Fábrica de Software da Procempa - Palestra no 6o Fórum Internacional Software...
Fábrica de Software da Procempa - Palestra no 6o Fórum Internacional Software...Éberli Cabistani Riella
 
O que você acha que sabe sobre banco de dados
O que você acha que sabe sobre banco de dadosO que você acha que sabe sobre banco de dados
O que você acha que sabe sobre banco de dadosMatheus de Oliveira
 
ARPO - Business Modeler: Apresentação da Solução
ARPO - Business Modeler: Apresentação da SoluçãoARPO - Business Modeler: Apresentação da Solução
ARPO - Business Modeler: Apresentação da SoluçãoDC-DinsmoreCompass
 
CakePHP com sotaque brasileiro
CakePHP com sotaque brasileiroCakePHP com sotaque brasileiro
CakePHP com sotaque brasileiroJuan Basso
 

Semelhante a Python + Delphi: Um relacionamento que está dando certo (20)

Propostas de atendimento aos cartórios de Registro de Imóveis - Desenvolvedor...
Propostas de atendimento aos cartórios de Registro de Imóveis - Desenvolvedor...Propostas de atendimento aos cartórios de Registro de Imóveis - Desenvolvedor...
Propostas de atendimento aos cartórios de Registro de Imóveis - Desenvolvedor...
 
Expresso 3 - um caso de sucesso do PHP no governo
Expresso 3 - um caso de sucesso do PHP no governoExpresso 3 - um caso de sucesso do PHP no governo
Expresso 3 - um caso de sucesso do PHP no governo
 
AutomationEdge Robotic Process Automation Quality Nextech Service Desk Digital
AutomationEdge Robotic Process Automation Quality Nextech Service Desk Digital AutomationEdge Robotic Process Automation Quality Nextech Service Desk Digital
AutomationEdge Robotic Process Automation Quality Nextech Service Desk Digital
 
Como escolher sua plataforma de e commerce
Como escolher sua plataforma de e commerceComo escolher sua plataforma de e commerce
Como escolher sua plataforma de e commerce
 
Tcc
TccTcc
Tcc
 
Dextra Sistemas: A linguagem PHP no modelo de Fábrica de Software
Dextra Sistemas: A linguagem PHP no modelo de Fábrica de SoftwareDextra Sistemas: A linguagem PHP no modelo de Fábrica de Software
Dextra Sistemas: A linguagem PHP no modelo de Fábrica de Software
 
Apresentação da Comunidade PHPDF
Apresentação da Comunidade PHPDFApresentação da Comunidade PHPDF
Apresentação da Comunidade PHPDF
 
Forca de Digital & RPA
Forca de Digital & RPAForca de Digital & RPA
Forca de Digital & RPA
 
Pentaho Day 2015 - Universidade Positivo - Multi Tenancy com Pentaho na Sage
Pentaho Day 2015 - Universidade Positivo - Multi Tenancy com Pentaho na SagePentaho Day 2015 - Universidade Positivo - Multi Tenancy com Pentaho na Sage
Pentaho Day 2015 - Universidade Positivo - Multi Tenancy com Pentaho na Sage
 
Segunda Empregável - Edição 00
Segunda Empregável - Edição 00Segunda Empregável - Edição 00
Segunda Empregável - Edição 00
 
Webinar Magento Commerce
Webinar Magento Commerce Webinar Magento Commerce
Webinar Magento Commerce
 
AutomationEdge Quality Nextech
AutomationEdge Quality NextechAutomationEdge Quality Nextech
AutomationEdge Quality Nextech
 
Projeto TCOS - III ENSOL
Projeto TCOS - III ENSOLProjeto TCOS - III ENSOL
Projeto TCOS - III ENSOL
 
Institucional quality 2020
Institucional quality 2020Institucional quality 2020
Institucional quality 2020
 
Tcos Fisl
Tcos FislTcos Fisl
Tcos Fisl
 
Fábrica de Software da Procempa - Palestra no 6o Fórum Internacional Software...
Fábrica de Software da Procempa - Palestra no 6o Fórum Internacional Software...Fábrica de Software da Procempa - Palestra no 6o Fórum Internacional Software...
Fábrica de Software da Procempa - Palestra no 6o Fórum Internacional Software...
 
O que você acha que sabe sobre banco de dados
O que você acha que sabe sobre banco de dadosO que você acha que sabe sobre banco de dados
O que você acha que sabe sobre banco de dados
 
ARPO - Business Modeler: Apresentação da Solução
ARPO - Business Modeler: Apresentação da SoluçãoARPO - Business Modeler: Apresentação da Solução
ARPO - Business Modeler: Apresentação da Solução
 
CakePHP com sotaque brasileiro
CakePHP com sotaque brasileiroCakePHP com sotaque brasileiro
CakePHP com sotaque brasileiro
 
Novidades do .Net 4.0
Novidades do .Net 4.0Novidades do .Net 4.0
Novidades do .Net 4.0
 

Python + Delphi: Um relacionamento que está dando certo

  • 1. Python + Delphi Um relacionamento que está dando certo (Python Cases) 1 Fernando Macedo
  • 2. Quem? Fernando Macedo Desenvolvedor Delphi/Python Bacharel em Sistemas de Informação (Faculdade Impacta de Tecnologia) Mestrando em Gestão do Conhecimento e Sistemas Inteligentes (IPEN-USP) Membro da APyB 2
  • 3. Onde? Esys Colibri 23 anos de experiência 15.000 clientes 35.000 PDVs instalados 100 revendedores em todo o País Suporte 24/7 em todo o Brasil Atualização constante às novas leis 3
  • 4. O que? Caso da Esys na utilização de Python no Colibri 8 Integração entre Python e Delphi 4
  • 5. Cenário Software PDV Mesa Balcão Ficha Entrega Contexto Empresa tradicional - 23 anos Aplicação comercial Ambiente Windows (MS, C# e Delphi) Nova versão 5
  • 6. Os problemas Módulo de relatórios Formatação embutida no aplicativo Manutenção difícil Integração com terceiros Implementações específicas 6
  • 7. 7 Relatórios texto: Antes    { Layout da linha levando em conta qtd fracionada }     TmpStr := '%s%-2.0f ' + Trim(strFormatDesc);     if QtdeFracionada then       TmpStr := '%s%3.3f ' + Trim(strFormatDesc);       TmpStr := Format(TmpStr, [strTagIni, fQuantidade, strDescr]);       lstMarchador.Add(TrimAcentos(Tmpstr) + strTagFim);     sLineMarchadorAgrup:= sLineMarchadorAgrup+';'+TrimAcentos(Tmpstr) + strTagFim;       if dmVenda.qryColibriBN_LUGARMESA.AsBoolean then       TmpStr := TmpStr + FormatFloat(' #0', MyMaterial[i].LugarMesa);       TmpStr := TmpStr + strTagFim;     lstRemota.Add(TrimAcentos(TmpStr)); 
  • 8. O desafio dos relatórios Premissas Gerar a mesma configuração de arquivos; Simples; Suportar troca em run-time; Suportar loops aninhados, do tipo mestre-detalhe; Mesma origem dos dados para os relatórios visuais; Ter toda a infra construída em dias, e não em meses. 8
  • 9. Por que Python? Expressividade Legibilidade de código Codificação rápida Vasta coleção de bibliotecas Recurso X, Y, Z 9
  • 10. A linguagem certa E não sabendo que era impossível, Python foi lá e fez! Solução da infra em 2 dias! Ganhou moral. 10
  • 11. Resultados Premissas atendidas Plus: Extensão e customização por clientes 11
  • 12. Depois 12 {%extends"relatorio-base.template"%} {%setpag = impressaoNumero%} {%settot = impressaoTotal%}   {%- block relatorio %} {%blockcabecalhoscoped -%} {%filtercompexp%}Conta{{venda.codigoDoTicket}}{{'=' * 5}}{{pag}}/{{tot}}{%endfilter%} Mov.: {{dataContabil}} - Imp.: {{data}} - {{hora}}h PDV: {{maquina|semAcentos}} Caixa: {{caixa|semAcentos}} Garcom: {{garcom|semAcentos}} SEQ: {{venda.sequencia}} {%- endblockcabecalho %}   %- block corpo -%}{{render_cancelado() }} {%foriteminitens -%} {{render_item(item) }} {%endfor -%}{{render_cancelado() }}{%- endblock corpo %}
  • 13. Integração Desktop GUI http://www.python.org/about/apps/ Scripting Extending Upgrade tecnológico 13
  • 15. Uso do P4D 15 type   EngineDoPython = class   private class var     _Eng: TPythonEngine;     _IO: TPythonInputOutput;     _Dir: string;   private const     NOME_DLL = 'python27.dll';     NOME_BIBLIOTECA = 'python27.zip';   public [...]     class procedure AdicionarDiretorioAoPath(umDiretorio: string);     class property Engine: TPythonEngine read ObterEngine;     class property DirDoPython: string read _DirDoPython write _DirDoPython;     class property Iniciado: Boolean read ObterIniciado;     class property IO: TPythonInputOutput read _IO;   end;
  • 16. Uso do P4D 16 class constructor EngineDoPython.Create; begin   _Eng := TPythonEngine.Create(nil);   _IO := TPythonInputOutput.Create(nil);   _Eng.DllName := NOME_DLL;   _Eng.PyFlags := _Eng.PyFlags + [pfIgnoreEnvironmentFlag];   _Eng.IO := _IO; end; class procedure EngineDoPython.Iniciar; begin   _Eng.DllPath := arquivos.NormalizarPasta(DiretorioDoPython);   arquivos.ExecutarNaPasta(DiretorioDoPython,     procedure begin       _Eng.LoadDll();       SysModule.path.append(_Eng.DllPath);       SysModule.path.append(_Eng.DllPath + NOME_BIBLIOTECA);     end); end;
  • 17. O que pode ser feito? Módulos *.pyd Executar códigos Python; Expor classes Delphi ao Python; 17
  • 18. Problemas e riscos CTypes Manifesto Pessoal Disseminar conhecimento à equipe Continuidade do projeto Python4Delphi Suporte a futuras versões 18
  • 19. Minhas impressões A ilusão de que verificação de tipos em tempo de compilação resolve todos os problemas Python Oferece alto nível de abstração Escreve-se menos código Maior produtividade Python não se põe entre o desenvolvedor e o problema 19
  • 21. Obrigado! Dúvidas? Contatos fgmacedo@gmail.com @fgmacedo www.esys.com.br 21
  • 22. 22