SlideShare uma empresa Scribd logo
1 de 82
Baixar para ler offline
11 HISTÓRIAS E 1 SEGREDO
Luiz Borba
http://borba.blog.br
1989Estudante
1991
Programador
1994
Empreendedor
Analista
de
Tecnologia
1998
Líder
Técnico
2000
2001
Arquiteto de
Software
2005
Scrum
Master
2010
Consultor em
Tecnologia
2014(?)
Consultor em
Negócios
Quem é
Luiz Borba?
http://borba.blog.br
O Pirulito
“All non-trivial abstractions,
to some degree, are leaky.”
- Joel Spolsky
Linguagens de
programação são leaky
abstractions.
Temos obrigação de
conhecer o que a
linguagem que
utilizamos faz por
debaixo dos panos.
“When someone says: ‘I
want a programming
language in which I need
only say what I wish done’,
give him a lollipop.”
- Alan J. Perlis
Mergulhe
O bug
existencial
“The most likely way for the
world to be destroyed, most
experts agree, is by accident.
That's where we come in; we're
computer professionals. We
cause accidents.”
- Nathaniel Borenstein
Qual a melhor
forma de
aprender uma
linguagem?
A Internet não
esteve sempre
por aqui...
NÃO HÁ NADA
DE ERRADO EM
LER LIVROS
Não programe por
coincidência.
Aprenda
Eis o mistério
da FÉ
|”May 2013” can’t be found|
”””May 2013”” can’t be found”
””May 2013” can’t be found”
‘”May 2013” can’t be found’
#include <stdio.h>
 
main()
[
int value = 1;
 
while(value<=3)
[
printf(|Value is %dn|, value);
value++;
]
 
return array{1};
]
Qual a origem do QWERTY?
O KALQ vinga?
Não há progresso sem
desafios. Desafie o
“status quo”
Desafie
Tanto faz dá na
cabeça quanto na
cabeça dá?
sort(lista)
ou
lista.sort()
Reflita
Mister M
salvar(objeto) {
broker.beginTrans();
broker.save(objeto);
broker.commit();
}
salvar(objeto) {
broker.save(objeto);
}
<transactional-methods>
<method>salvar</method>
</transactional-methods>
@Transactional
salvar(objeto) {
broker.save(objeto);
}
Aspect-Oriented
Programming
(AOP) é bacana
Aspect-Oriented
Programming
(AOP) é pura bosta
Esse livro
é bom pra
caralho
...já esse
livro é uma
merda
“Eu vou desdizer
Aquilo tudo que eu lhe disse antes
Eu prefiro ser
Essa metamorfose ambulante
Do que ter aquela velha opinião
Formada sobre tudo”
Mude
Funcional ou
Orientado a Objeto?
“Software is getting slower
faster than hardware
becomes faster.”
- Niklaus Wirth
•Funções de alta ordem
•Imutabilidade
•Sem efeitos colaterais
•Pattern Matching
•Recursão
•Currying
•Lazy Evaluation
•Continuations
•Closures
•Functional Composition
•Referencial Transparency
•Monads
Linguagens Multi-
Paradigmáticas
Antene-se
Vietnã da
computação
Object-Relational Mapping
(ORM)
Linguagens Orientadas a Objetos
Banco de Dados Relacionais
NoSQL
mas nada é para sempre
Experimente
COBOL morreu
ou CONSERVADORA
Java é uma linguagem
REVOLUCIONÁRIA
ENTERRE
A Pior Linguagem
do Mundo
‘5’ + 3 = 53
‘5’ - 2 = 2
‘’ == ‘0’ // false
0 == ‘’ // true
false == undefined // false
false == null // false
null == undefined // true
Qual a linguagem?
ACEITE
Linguagem
Verde
Consumo de energia é cada
dia mais importante
Teremos linguagens onde
poderemos medir o
consumo do código
produzido?
Viaje
O que você quer
ser quando
crescer?
É possível ser
programador e ganhar
dinheiro?
SEJA FIEL
A VOCÊ
...e o segredo?
Rust
“Rust is a general purpose,
multi-paradigm, compiled
programming language
developed by Mozilla Research”
- Wikipedia
Está sendo usada para criar
o Servo, um novo browser
engine experimental
C++ não é apropriada para
criar sistemas paralelos e
seguros ao mesmo tempo
Rust foi projetada para ter
a mesma performance de
C/C++ mas sem o mesmo
risco de bugs ou falhas de
segurança
fn main() {
println(“hello world”);
}
use core::rand::RngUtil;
fn main() {
for ["Alice", "Bob", "Carol"].each |&name| {
do spawn {
let v = rand::Rng().shuffle([1, 2, 3]);
for v.each |&num| {
print(fmt!("%s says: '%d'n", name, num))
}
}
}
}
Type
Memory safety
Concurrency
Generics
Exception handling
Memory model
Compilation model
system static, nominal, linear, algebraic, locally inferred
no null or dangling pointers, no buffer overflows
lightweight tasks with message passing, no shared memory
type parameterization with type classes
unrecoverable unwinding with task isolation
optional task-local GC, safe pointer types with region analysis
ahead-of-time, C/C++ compatible
let hi = "hi";
let mut count = 0;
while count < 10 {
io::println(fmt!("count: %?", count));
count += 1;
}
Imutável por default
fn angle(vector: (float, float)) -> float {
let pi = float::consts::pi;
match vector {
(0f, y) if y < 0f => 1.5 * pi,
(0f, y) => 0.5 * pi,
(x, y) => float::atan(y / x)
}
}
Pattern Matching
struct Point {
x: float,
y: float
}
let mut mypoint = Point { x: 1.0, y: 1.0 };
let origin = Point { x: 0.0, y: 0.0 };
mypoint.y += 1.0; // mypoint is mutable, and its fields as well
origin.y += 1.0; // ERROR: assigning to immutable field
Structs
fn line(a: int, b: int, x: int) -> int
{
a * x + b
}
Funções
Owning Pointers (~)
fn f() {
let x: ~int = ~1024; // allocate space and initialize an int
// on the heap
println(fmt!("%d", *x));
} // <-- the memory that x pointed at is automatically freed here
let x = ~5;
let z = x; // no new memory allocated, x can no longer be used
fn foo() {
let x: @int = @1024; // allocate space and initialize an int
// on the heap
bar(x); // pass it to `bar`
println(fmt!("%d", *x)); // print it on the screen
} // <-- the memory can be freed here
fn bar(x: @int) {
let y: @int = x; // make a new smart pointer to `x`
} // <-- despite `y` going out of scope,the memory is *not* freed here
Managed Pointers (@)
fn dogshow() {
let dogs: [~Dog * 3] = [
~Dog { name: ~"Spot" },
~Dog { name: ~"Fido" },
~Dog { name: ~"Snoopy" },
];
let winner: &Dog = dogs[1];// note use of `&` to form a reference
for dogs.each |dog| {
println(fmt!("Say hello to %s", dog.name));
}
println(fmt!("And the winner is: %s!", winner.name));
} // <-- all dogs destroyed here
Borrowed Pointers (&)
Freezing
let mut x = 5;
{
let y = &x; // x is now frozen, it cannot be modified
}
// x is now unfrozen again
use core::task::spawn;
// Print something profound in a different task using a named function
fn print_message() { println("I am running in a different task!"); }
spawn(print_message);
// Print something more profound in a different task using a lambda expression
spawn( || println("I am also running in a different task!") );
// The canonical way to spawn is using `do` notation
do spawn {
println("I too am running in a different task!");
}
Tasks
OBRIGADO!
Luiz Borba
http://borba.blog.br

Mais conteúdo relacionado

Mais procurados

Android - Dicas de Performance
Android - Dicas de PerformanceAndroid - Dicas de Performance
Android - Dicas de PerformanceAmélia Pessoa
 
Java script para adultos
Java script para adultosJava script para adultos
Java script para adultosDiego Honorio
 
Postgresql + Python = Power!
Postgresql + Python = Power!Postgresql + Python = Power!
Postgresql + Python = Power!Juliano Atanazio
 
Introducao ao Ruby
Introducao ao RubyIntroducao ao Ruby
Introducao ao RubyKlaus Paiva
 
pgBouncer: um aglomerador de conexões para PostgreSQL
pgBouncer: um aglomerador de conexões para PostgreSQLpgBouncer: um aglomerador de conexões para PostgreSQL
pgBouncer: um aglomerador de conexões para PostgreSQLelliando dias
 
Introdução ao Shell Script (versão estendida)
Introdução ao Shell Script (versão estendida)Introdução ao Shell Script (versão estendida)
Introdução ao Shell Script (versão estendida)Hugo Maia Vieira
 
Vale Security Conference - 2011 - 3 - Rener Alberto (Gr1nch) [DC Labs]
Vale Security Conference - 2011 - 3 - Rener Alberto (Gr1nch) [DC Labs]Vale Security Conference - 2011 - 3 - Rener Alberto (Gr1nch) [DC Labs]
Vale Security Conference - 2011 - 3 - Rener Alberto (Gr1nch) [DC Labs]Vale Security Conference
 

Mais procurados (10)

Android - Dicas de Performance
Android - Dicas de PerformanceAndroid - Dicas de Performance
Android - Dicas de Performance
 
Java script para adultos
Java script para adultosJava script para adultos
Java script para adultos
 
Postgresql + Python = Power!
Postgresql + Python = Power!Postgresql + Python = Power!
Postgresql + Python = Power!
 
Introducao ao Ruby
Introducao ao RubyIntroducao ao Ruby
Introducao ao Ruby
 
pgBouncer: um aglomerador de conexões para PostgreSQL
pgBouncer: um aglomerador de conexões para PostgreSQLpgBouncer: um aglomerador de conexões para PostgreSQL
pgBouncer: um aglomerador de conexões para PostgreSQL
 
Arduino e python
Arduino e pythonArduino e python
Arduino e python
 
Introdução ao Shell Script (versão estendida)
Introdução ao Shell Script (versão estendida)Introdução ao Shell Script (versão estendida)
Introdução ao Shell Script (versão estendida)
 
Ecossistema Python
Ecossistema PythonEcossistema Python
Ecossistema Python
 
Vale Security Conference - 2011 - 3 - Rener Alberto (Gr1nch) [DC Labs]
Vale Security Conference - 2011 - 3 - Rener Alberto (Gr1nch) [DC Labs]Vale Security Conference - 2011 - 3 - Rener Alberto (Gr1nch) [DC Labs]
Vale Security Conference - 2011 - 3 - Rener Alberto (Gr1nch) [DC Labs]
 
Shell script
Shell scriptShell script
Shell script
 

Destaque

O ciclo da vida
O ciclo da vidaO ciclo da vida
O ciclo da vidaLuiz Borba
 
Todas as coisas que todo programador não pode deixar de saber
Todas as coisas que todo programador não pode deixar de saberTodas as coisas que todo programador não pode deixar de saber
Todas as coisas que todo programador não pode deixar de saberLuiz Borba
 
Assuntos aleatorios que podem mudar sua vida
Assuntos aleatorios que podem mudar sua vidaAssuntos aleatorios que podem mudar sua vida
Assuntos aleatorios que podem mudar sua vidaLuiz Borba
 
Desconstruindo EJB
Desconstruindo EJBDesconstruindo EJB
Desconstruindo EJBLuiz Borba
 
Arquitetura pragmática
Arquitetura pragmáticaArquitetura pragmática
Arquitetura pragmáticaLuiz Borba
 
Coisas que levei um tempo para aprender
Coisas que levei um tempo para aprenderCoisas que levei um tempo para aprender
Coisas que levei um tempo para aprenderLuiz Borba
 
Os paradoxos de Blub, Python, a décima lei de Greenspun e porque você deveria...
Os paradoxos de Blub, Python, a décima lei de Greenspun e porque você deveria...Os paradoxos de Blub, Python, a décima lei de Greenspun e porque você deveria...
Os paradoxos de Blub, Python, a décima lei de Greenspun e porque você deveria...Luiz Borba
 
Merda Acontece
Merda AconteceMerda Acontece
Merda AconteceLuiz Borba
 
What killed RUP could kill Agile, too
What killed RUP could kill Agile, tooWhat killed RUP could kill Agile, too
What killed RUP could kill Agile, tooLuiz Borba
 
Métricas Em Fabricas De Software
Métricas Em Fabricas De SoftwareMétricas Em Fabricas De Software
Métricas Em Fabricas De SoftwareLuiz Borba
 

Destaque (11)

O ciclo da vida
O ciclo da vidaO ciclo da vida
O ciclo da vida
 
Todas as coisas que todo programador não pode deixar de saber
Todas as coisas que todo programador não pode deixar de saberTodas as coisas que todo programador não pode deixar de saber
Todas as coisas que todo programador não pode deixar de saber
 
Assuntos aleatorios que podem mudar sua vida
Assuntos aleatorios que podem mudar sua vidaAssuntos aleatorios que podem mudar sua vida
Assuntos aleatorios que podem mudar sua vida
 
O futuro
O futuroO futuro
O futuro
 
Desconstruindo EJB
Desconstruindo EJBDesconstruindo EJB
Desconstruindo EJB
 
Arquitetura pragmática
Arquitetura pragmáticaArquitetura pragmática
Arquitetura pragmática
 
Coisas que levei um tempo para aprender
Coisas que levei um tempo para aprenderCoisas que levei um tempo para aprender
Coisas que levei um tempo para aprender
 
Os paradoxos de Blub, Python, a décima lei de Greenspun e porque você deveria...
Os paradoxos de Blub, Python, a décima lei de Greenspun e porque você deveria...Os paradoxos de Blub, Python, a décima lei de Greenspun e porque você deveria...
Os paradoxos de Blub, Python, a décima lei de Greenspun e porque você deveria...
 
Merda Acontece
Merda AconteceMerda Acontece
Merda Acontece
 
What killed RUP could kill Agile, too
What killed RUP could kill Agile, tooWhat killed RUP could kill Agile, too
What killed RUP could kill Agile, too
 
Métricas Em Fabricas De Software
Métricas Em Fabricas De SoftwareMétricas Em Fabricas De Software
Métricas Em Fabricas De Software
 

Semelhante a 11 historias e 1 segredo

Aula 01 python
Aula 01 pythonAula 01 python
Aula 01 pythonTiago
 
TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...
TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...
TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...tdc-globalcode
 
Como adentrar em um mundo livre flisol 2012
Como adentrar em um mundo livre   flisol 2012Como adentrar em um mundo livre   flisol 2012
Como adentrar em um mundo livre flisol 2012Rogerio J. Gentil
 
PHP e a (in)segurança de aplicações
PHP e a (in)segurança de aplicaçõesPHP e a (in)segurança de aplicações
PHP e a (in)segurança de aplicaçõesrjsmelo
 
Introdução a linguagem Python: simples e produtiva
Introdução a linguagem Python: simples e produtivaIntrodução a linguagem Python: simples e produtiva
Introdução a linguagem Python: simples e produtivaÁlvaro Justen
 
Python Mini Ccurso Consegi2011
Python Mini Ccurso Consegi2011Python Mini Ccurso Consegi2011
Python Mini Ccurso Consegi2011Luiz Aldabalde
 
TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... m...
TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... m...TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... m...
TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... m...tdc-globalcode
 
Python No Terra (2006-12-21)
Python No Terra  (2006-12-21)Python No Terra  (2006-12-21)
Python No Terra (2006-12-21)Rudá Moura
 
Backend do Iot com rethinkdb e python
Backend do Iot com rethinkdb e pythonBackend do Iot com rethinkdb e python
Backend do Iot com rethinkdb e pythonAfonso Coutinho
 
InterCon 2016 - Backend do IoT com RethinkDB e Python
InterCon 2016 - Backend do IoT com RethinkDB e PythonInterCon 2016 - Backend do IoT com RethinkDB e Python
InterCon 2016 - Backend do IoT com RethinkDB e PythoniMasters
 
Apostila introducao-shell
Apostila introducao-shellApostila introducao-shell
Apostila introducao-shellMarcio Pereira
 
Por que você deveria aprender python?
Por que você deveria aprender python?Por que você deveria aprender python?
Por que você deveria aprender python?Felipe Volpone
 
Como ter sucesso ministrando uma palestra técnica
Como ter sucesso ministrando uma palestra técnicaComo ter sucesso ministrando uma palestra técnica
Como ter sucesso ministrando uma palestra técnicaElias Nogueira
 
Programação em Shell Script
Programação em Shell ScriptProgramação em Shell Script
Programação em Shell ScriptReinaldo Lima
 
Introdução à Programacao em Processing
Introdução à Programacao em Processing Introdução à Programacao em Processing
Introdução à Programacao em Processing Jorge Cardoso
 

Semelhante a 11 historias e 1 segredo (20)

Aula 01 python
Aula 01 pythonAula 01 python
Aula 01 python
 
TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...
TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...
TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...
 
Cygwin
CygwinCygwin
Cygwin
 
Como adentrar em um mundo livre flisol 2012
Como adentrar em um mundo livre   flisol 2012Como adentrar em um mundo livre   flisol 2012
Como adentrar em um mundo livre flisol 2012
 
PHP e a (in)segurança de aplicações
PHP e a (in)segurança de aplicaçõesPHP e a (in)segurança de aplicações
PHP e a (in)segurança de aplicações
 
Introdução a linguagem Python: simples e produtiva
Introdução a linguagem Python: simples e produtivaIntrodução a linguagem Python: simples e produtiva
Introdução a linguagem Python: simples e produtiva
 
Python Mini Ccurso Consegi2011
Python Mini Ccurso Consegi2011Python Mini Ccurso Consegi2011
Python Mini Ccurso Consegi2011
 
TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... m...
TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... m...TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... m...
TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... m...
 
Python No Terra (2006-12-21)
Python No Terra  (2006-12-21)Python No Terra  (2006-12-21)
Python No Terra (2006-12-21)
 
Backend do Iot com rethinkdb e python
Backend do Iot com rethinkdb e pythonBackend do Iot com rethinkdb e python
Backend do Iot com rethinkdb e python
 
InterCon 2016 - Backend do IoT com RethinkDB e Python
InterCon 2016 - Backend do IoT com RethinkDB e PythonInterCon 2016 - Backend do IoT com RethinkDB e Python
InterCon 2016 - Backend do IoT com RethinkDB e Python
 
Tutorial Shell Script
Tutorial Shell ScriptTutorial Shell Script
Tutorial Shell Script
 
Apostila introducao-shell
Apostila introducao-shellApostila introducao-shell
Apostila introducao-shell
 
Por que você deveria aprender python?
Por que você deveria aprender python?Por que você deveria aprender python?
Por que você deveria aprender python?
 
Como ter sucesso ministrando uma palestra técnica
Como ter sucesso ministrando uma palestra técnicaComo ter sucesso ministrando uma palestra técnica
Como ter sucesso ministrando uma palestra técnica
 
Calourada2010
Calourada2010Calourada2010
Calourada2010
 
Py S60
Py S60Py S60
Py S60
 
Programação em Shell Script
Programação em Shell ScriptProgramação em Shell Script
Programação em Shell Script
 
Games imersivos
Games imersivosGames imersivos
Games imersivos
 
Introdução à Programacao em Processing
Introdução à Programacao em Processing Introdução à Programacao em Processing
Introdução à Programacao em Processing
 

Mais de Luiz Borba

Novas ferramentas para analise de dados
Novas ferramentas para analise de dadosNovas ferramentas para analise de dados
Novas ferramentas para analise de dadosLuiz Borba
 
Dias do futuro presente da programação
Dias do futuro presente da programaçãoDias do futuro presente da programação
Dias do futuro presente da programaçãoLuiz Borba
 
It's the end of design patterns as we know it (and i feel fine)
It's the end of design patterns as we know it (and i feel fine)It's the end of design patterns as we know it (and i feel fine)
It's the end of design patterns as we know it (and i feel fine)Luiz Borba
 
O triunfo dos nerds
O triunfo dos nerdsO triunfo dos nerds
O triunfo dos nerdsLuiz Borba
 
As coisas mudam
As coisas mudamAs coisas mudam
As coisas mudamLuiz Borba
 
Build 2013: O que vi por lá
Build 2013: O que vi por láBuild 2013: O que vi por lá
Build 2013: O que vi por láLuiz Borba
 
Windows 8 a nova corrida do ouro
Windows 8 a nova corrida do ouroWindows 8 a nova corrida do ouro
Windows 8 a nova corrida do ouroLuiz Borba
 
What i dont know about startups
What i dont know about startupsWhat i dont know about startups
What i dont know about startupsLuiz Borba
 
TDD Direto das Trincheiras versao 2
TDD Direto das Trincheiras versao 2TDD Direto das Trincheiras versao 2
TDD Direto das Trincheiras versao 2Luiz Borba
 
TDD direto das trincheiras
TDD direto das trincheirasTDD direto das trincheiras
TDD direto das trincheirasLuiz Borba
 

Mais de Luiz Borba (11)

Novas ferramentas para analise de dados
Novas ferramentas para analise de dadosNovas ferramentas para analise de dados
Novas ferramentas para analise de dados
 
Dias do futuro presente da programação
Dias do futuro presente da programaçãoDias do futuro presente da programação
Dias do futuro presente da programação
 
It's the end of design patterns as we know it (and i feel fine)
It's the end of design patterns as we know it (and i feel fine)It's the end of design patterns as we know it (and i feel fine)
It's the end of design patterns as we know it (and i feel fine)
 
O triunfo dos nerds
O triunfo dos nerdsO triunfo dos nerds
O triunfo dos nerds
 
As coisas mudam
As coisas mudamAs coisas mudam
As coisas mudam
 
Build 2013: O que vi por lá
Build 2013: O que vi por láBuild 2013: O que vi por lá
Build 2013: O que vi por lá
 
Windows 8 a nova corrida do ouro
Windows 8 a nova corrida do ouroWindows 8 a nova corrida do ouro
Windows 8 a nova corrida do ouro
 
Startup tools
Startup toolsStartup tools
Startup tools
 
What i dont know about startups
What i dont know about startupsWhat i dont know about startups
What i dont know about startups
 
TDD Direto das Trincheiras versao 2
TDD Direto das Trincheiras versao 2TDD Direto das Trincheiras versao 2
TDD Direto das Trincheiras versao 2
 
TDD direto das trincheiras
TDD direto das trincheirasTDD direto das trincheiras
TDD direto das trincheiras
 

11 historias e 1 segredo