Porque aprender várias
linguagens me tornou um DBA
(e desenvolvedor) melhor?
por Dickson S. Guedes
Definição de “melhor”...
É sobre o quê?
● Vou ganhar mais dinheiro?
● Vou ficar mais inteligente?
● Vou aprender novas linguagens de programação?
● Vou dominar o mundo?
● Vou ser mais feliz?
Situação de muitas empresas com
os papéis DBA e DEV
Silo DBA
Silo DEV
Situação de muitas empresas com
os papéis DBA e DEV
PÁ!Silo DBA
Silo DEV
Situação de muitas empresas com
os papéis DBA e DEV
PÁ!
PÁ!Silo DBA
Silo DEV
Situação de muitas empresas com
os papéis DBA e DEV
PÁ!
PÁ!
QUE SILOS SÃO
ESSES?
É sobre o que?
É sobre empatia
É sobre empatia
conhecimento
É sobre empatia
conhecimento
humildade
É sobre empatia
conhecimento
humildade
e acima de tudo ...
entregar valor!
Mas…
como que aprender várias
linguagens vai me
permitir isto?
Então vamos ver alguns exemplos
Java
Muito utilizada no mundo
“Enterprise”
Orientação a Objeto
ORM
Hibernate
Troca de mensagens
@Annotations
Coisas que você verá no Java
● JDBC, Dialect
● compra.getProduto().getCategoria().getNomeCategoria()
● use JOIN FETCH
● PreparedStatement
○ SELECT a, b FROM tb WHERE c = 1234 AND d > 1000;
○ SELECT a, b FROM tb WHERE c = $1 AND d > $2;
Coisas que você verá no Java
● CREATE TEMP TABLE foo -> WITH foo as ( …. )
● Exemplos
…
@Column(name="DESC", nullable=false, length=512)
public String getDescription() { return description; }
@Column(name="ORDER_COST", updatable=false, precision=12, scale=2)
public BigDecimal getCost() { return cost; }
...
C
ponteiros
struct
o cuidado com a memória
o código do PostgreSQL
armazenamento dos dados
o dado crú, o void* e o tipo..
C
● Compatibilidade com vários sistemas operacionais
● Suíte de testes do PostgreSQL
● Usando PostgreSQL no raspberryPI
○ http://www.pgconf.com.br/raspberrypi/
Ruby
Metaprogramação
Migrations
Testes
Rails
tooling: gem, rvm, renv, rails new
Do Ruby ao banco evolutivo e ao pgvm
● Mudanças incrementais
● Git
● Testes
● pgvm inspirado no rvm
● pgxn-utils inspirado no rails new
● method_missing
Python
Zen do Python
Explícito melhor que implícito
Melhor pedir perdão que
permissão e o conceito de
transação
Dataframes
ORM SQL Alchemy
pip
Do Python ao Django, do Django ao SETL
from setl import *
inicializa = [
Initialize(‘inicializa_banco’, force=True),
]
extrai = [
SQL(‘produtos’),
SQL(‘pessoas’),
CSV(‘pedidos_externos’, file=’PED.csv’),
]
finaliza = [
Run(‘limpa_logs’),
]
SETL.run(initializers=inicializa,
extractors=extrai,
finalizers=finaliza);
Javascript
funcional, JSON, Promises
Event driven
async
Data Driven Document (D3.js)
Exemplo D3.js
Data Driven Documents
Javascript
CSV
d3.csv(‘aquivo.csv’, function(data)
{
...
});
Erlang/Elixir
funcional, supervisors, atores,
deixe falhar
não é sobre sintaxe
macros
imutabilidade
pattern matching
recursividade
Me levaram a ...
● PGEx
○ entender o protocolo do PostgreSQL
● ExJSON
○ Só me divertir mesmo…
● Funções de agregação no PostgreSQL
CREATE AGGREGATE e recursividade??
CREATE AGGREGATE media (float8)
(
sfunc = acumula_float8,
stype = float8[],
finalfunc = media_float8,
initcond = '{0,0,0}'
);
acumula_float8 vai concatenando os valores em um array
media_float8 recebe o array no final, soma os valores e divide
pelo número de elementos
Rust
segurança, FFI
escrever em Rust no lugar de C
cross-compilation
Me levou a ...
● prsql
○ um cliente de linha de comando como o psql
Então é uma
questão de ...
Conectar
pontos!
comunicação, percepção,
linguagem, informação, reflexão,
pensamento
O que procurar numa linguagem?
O porquê da linguagem
Porque surgiram?
Ruby:
originalmente planejada e desenvolvida no Japão em 1995, por Yukihiro "Matz"
Matsumoto, para ser usada como linguagem de script.
Matz queria uma linguagem de script que fosse mais poderosa do que Perl, e
mais orientada a objetos do que Python
suporta programação funcional, orientada a objetos, imperativa e reflexiva.
inspirada principalmente por Python, Perl, Smalltalk, Eiffel, Ada e Lisp
Porque surgiram?
Python:
projetada com a filosofia de enfatizar a importância do esforço do programador
sobre o esforço computacional.
prioriza a legibilidade do código sobre a velocidade ou expressividade.
combina uma sintaxe concisa e clara com os recursos de sua biblioteca padrão e
por módulos e frameworks desenvolvidos por terceiros
Porque surgiram?
Javascript:
originalmente implementada como parte dos navegadores web para que scripts
pudessem ser executados do lado do cliente e interagissem com o usuário sem a
necessidade deste script passar pelo servidor, controlando o navegador,
realizando comunicação assíncrona e alterando o conteúdo do documento
exibido.
concebida para ser uma linguagem script com orientação a objetos baseada em
protótipos, tipagem fraca e dinâmica e funções de primeira classe
Porque surgiram?
Erlang
é uma linguagem de programação de uso geral e um sistema para execução
desenvolvida pela Ericsson para suportar aplicações distribuídas e tolerantes a falhas a
serem executadas em um ambiente de tempo real e ininterrupto
hot swapping, criar e gerenciar processos é uma tarefa trivial em Erlang
a comunicação entre processos é feita por troca de mensagens
Algumas palestras que podem explorar melhor os
temas que abordei aqui ...
Como ser um DBA na era DevOps - Sebastian Webber
Criando uma extensão para PostgreSQL - Marcone Viana Peres
Usando PostgreSQL no raspberryPI - Gustavo Sperandio
Go e PostgreSQL, ganhando desempenho em processos de carga de dados -
Marcelo Kruger
Tudo isso foi apenas um índice..
50% concluído
Os outros 50% estão com vocês...
FIM...
twitter.com/guediz | github.com/guedes … e obrigado pelos peixes!

Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhor

  • 1.
    Porque aprender várias linguagensme tornou um DBA (e desenvolvedor) melhor? por Dickson S. Guedes
  • 2.
  • 3.
    É sobre oquê? ● Vou ganhar mais dinheiro? ● Vou ficar mais inteligente? ● Vou aprender novas linguagens de programação? ● Vou dominar o mundo? ● Vou ser mais feliz?
  • 4.
    Situação de muitasempresas com os papéis DBA e DEV Silo DBA Silo DEV
  • 5.
    Situação de muitasempresas com os papéis DBA e DEV PÁ!Silo DBA Silo DEV
  • 6.
    Situação de muitasempresas com os papéis DBA e DEV PÁ! PÁ!Silo DBA Silo DEV
  • 7.
    Situação de muitasempresas com os papéis DBA e DEV PÁ! PÁ! QUE SILOS SÃO ESSES?
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
    Mas… como que aprendervárias linguagens vai me permitir isto?
  • 15.
    Então vamos veralguns exemplos
  • 16.
    Java Muito utilizada nomundo “Enterprise” Orientação a Objeto ORM Hibernate Troca de mensagens @Annotations
  • 17.
    Coisas que vocêverá no Java ● JDBC, Dialect ● compra.getProduto().getCategoria().getNomeCategoria() ● use JOIN FETCH ● PreparedStatement ○ SELECT a, b FROM tb WHERE c = 1234 AND d > 1000; ○ SELECT a, b FROM tb WHERE c = $1 AND d > $2;
  • 18.
    Coisas que vocêverá no Java ● CREATE TEMP TABLE foo -> WITH foo as ( …. ) ● Exemplos … @Column(name="DESC", nullable=false, length=512) public String getDescription() { return description; } @Column(name="ORDER_COST", updatable=false, precision=12, scale=2) public BigDecimal getCost() { return cost; } ...
  • 19.
    C ponteiros struct o cuidado coma memória o código do PostgreSQL armazenamento dos dados o dado crú, o void* e o tipo..
  • 20.
    C ● Compatibilidade comvários sistemas operacionais ● Suíte de testes do PostgreSQL ● Usando PostgreSQL no raspberryPI ○ http://www.pgconf.com.br/raspberrypi/
  • 21.
  • 22.
    Do Ruby aobanco evolutivo e ao pgvm ● Mudanças incrementais ● Git ● Testes ● pgvm inspirado no rvm ● pgxn-utils inspirado no rails new ● method_missing
  • 23.
    Python Zen do Python Explícitomelhor que implícito Melhor pedir perdão que permissão e o conceito de transação Dataframes ORM SQL Alchemy pip
  • 24.
    Do Python aoDjango, do Django ao SETL from setl import * inicializa = [ Initialize(‘inicializa_banco’, force=True), ] extrai = [ SQL(‘produtos’), SQL(‘pessoas’), CSV(‘pedidos_externos’, file=’PED.csv’), ] finaliza = [ Run(‘limpa_logs’), ] SETL.run(initializers=inicializa, extractors=extrai, finalizers=finaliza);
  • 25.
    Javascript funcional, JSON, Promises Eventdriven async Data Driven Document (D3.js)
  • 26.
    Exemplo D3.js Data DrivenDocuments Javascript CSV d3.csv(‘aquivo.csv’, function(data) { ... });
  • 27.
    Erlang/Elixir funcional, supervisors, atores, deixefalhar não é sobre sintaxe macros imutabilidade pattern matching recursividade
  • 28.
    Me levaram a... ● PGEx ○ entender o protocolo do PostgreSQL ● ExJSON ○ Só me divertir mesmo… ● Funções de agregação no PostgreSQL
  • 29.
    CREATE AGGREGATE erecursividade?? CREATE AGGREGATE media (float8) ( sfunc = acumula_float8, stype = float8[], finalfunc = media_float8, initcond = '{0,0,0}' ); acumula_float8 vai concatenando os valores em um array media_float8 recebe o array no final, soma os valores e divide pelo número de elementos
  • 30.
    Rust segurança, FFI escrever emRust no lugar de C cross-compilation
  • 31.
    Me levou a... ● prsql ○ um cliente de linha de comando como o psql
  • 32.
  • 33.
  • 34.
    O que procurarnuma linguagem?
  • 35.
    O porquê dalinguagem
  • 36.
    Porque surgiram? Ruby: originalmente planejadae desenvolvida no Japão em 1995, por Yukihiro "Matz" Matsumoto, para ser usada como linguagem de script. Matz queria uma linguagem de script que fosse mais poderosa do que Perl, e mais orientada a objetos do que Python suporta programação funcional, orientada a objetos, imperativa e reflexiva. inspirada principalmente por Python, Perl, Smalltalk, Eiffel, Ada e Lisp
  • 37.
    Porque surgiram? Python: projetada coma filosofia de enfatizar a importância do esforço do programador sobre o esforço computacional. prioriza a legibilidade do código sobre a velocidade ou expressividade. combina uma sintaxe concisa e clara com os recursos de sua biblioteca padrão e por módulos e frameworks desenvolvidos por terceiros
  • 38.
    Porque surgiram? Javascript: originalmente implementadacomo parte dos navegadores web para que scripts pudessem ser executados do lado do cliente e interagissem com o usuário sem a necessidade deste script passar pelo servidor, controlando o navegador, realizando comunicação assíncrona e alterando o conteúdo do documento exibido. concebida para ser uma linguagem script com orientação a objetos baseada em protótipos, tipagem fraca e dinâmica e funções de primeira classe
  • 39.
    Porque surgiram? Erlang é umalinguagem de programação de uso geral e um sistema para execução desenvolvida pela Ericsson para suportar aplicações distribuídas e tolerantes a falhas a serem executadas em um ambiente de tempo real e ininterrupto hot swapping, criar e gerenciar processos é uma tarefa trivial em Erlang a comunicação entre processos é feita por troca de mensagens
  • 40.
    Algumas palestras quepodem explorar melhor os temas que abordei aqui ... Como ser um DBA na era DevOps - Sebastian Webber Criando uma extensão para PostgreSQL - Marcone Viana Peres Usando PostgreSQL no raspberryPI - Gustavo Sperandio Go e PostgreSQL, ganhando desempenho em processos de carga de dados - Marcelo Kruger
  • 41.
    Tudo isso foiapenas um índice..
  • 42.
    50% concluído Os outros50% estão com vocês... FIM... twitter.com/guediz | github.com/guedes … e obrigado pelos peixes!