11 historias e 1 segredo

82
11 HISTÓRIAS E 1 SEGREDO Luiz Borba http://borba.blog.br

Upload: luiz-borba

Post on 22-Nov-2014

316 views

Category:

Technology


1 download

DESCRIPTION

Curiosidades sobre linguagens de programação. Apresentação realizada no Startup Dev Day.

TRANSCRIPT

Page 1: 11 historias e 1 segredo

11 HISTÓRIAS E 1 SEGREDO

Luiz Borbahttp://borba.blog.br

Page 2: 11 historias e 1 segredo

1989

Estu

dant

e

1991

Prog

ramad

or

1994

Empr

eend

edor

Anali

sta de

Tecno

logia

1998

Líder

Técnico

2000

2001

Arquiteto de

Software

2005

Scrum Master

2010

Consultor em

Tecnologia

2014(?)

Consultor em

NegóciosQuem é

Luiz Borba?http://borba.blog.br

Page 3: 11 historias e 1 segredo

O Pirulito

Page 4: 11 historias e 1 segredo

“All non-trivial abstractions, to some degree, are leaky.”

- Joel Spolsky

Page 5: 11 historias e 1 segredo

Linguagens de programação são leaky

abstractions.

Page 6: 11 historias e 1 segredo
Page 7: 11 historias e 1 segredo

Temos obrigação de conhecer o que a

linguagem que utilizamos faz por debaixo dos panos.

Page 8: 11 historias e 1 segredo

“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

Page 9: 11 historias e 1 segredo

Mergulhe

Page 10: 11 historias e 1 segredo

O bug existencial

Page 11: 11 historias e 1 segredo

“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

Page 12: 11 historias e 1 segredo

Qual a melhor forma de

aprender uma linguagem?

Page 13: 11 historias e 1 segredo

A Internet não esteve sempre

por aqui...

Page 14: 11 historias e 1 segredo

NÃO HÁ NADA DE ERRADO EM

LER LIVROS

Page 15: 11 historias e 1 segredo

Não programe por coincidência.

Page 16: 11 historias e 1 segredo

Aprenda

Page 17: 11 historias e 1 segredo

Eis o mistério da FÉ

Page 18: 11 historias e 1 segredo

|”May 2013” can’t be found|

”””May 2013”” can’t be found”

”\”May 2013\” can’t be found”

‘”May 2013” can\’t be found’

Page 19: 11 historias e 1 segredo

#include <stdio.h> main()[ int value = 1;  while(value<=3) [ printf(|Value is %d\n|, value); value++; ]  return array{1};]

Page 20: 11 historias e 1 segredo

Qual a origem do QWERTY?

Page 21: 11 historias e 1 segredo

O KALQ vinga?

Page 22: 11 historias e 1 segredo
Page 23: 11 historias e 1 segredo

Não há progresso sem desafios. Desafie o

“status quo”

Page 24: 11 historias e 1 segredo

Desafie

Page 25: 11 historias e 1 segredo

Tanto faz dá na cabeça quanto na

cabeça dá?

Page 26: 11 historias e 1 segredo

sort(lista) ou

lista.sort()

Page 27: 11 historias e 1 segredo

Reflita

Page 28: 11 historias e 1 segredo

Mister M

Page 29: 11 historias e 1 segredo

salvar(objeto) { broker.beginTrans(); broker.save(objeto); broker.commit();}

Page 30: 11 historias e 1 segredo

salvar(objeto) { broker.save(objeto);}

<transactional-methods> <method>salvar</method></transactional-methods>

Page 31: 11 historias e 1 segredo

@Transactionalsalvar(objeto) { broker.save(objeto);}

Page 32: 11 historias e 1 segredo

Aspect-Oriented Programming

(AOP) é bacana

Page 33: 11 historias e 1 segredo

Aspect-Oriented Programming

(AOP) é pura bosta

Page 34: 11 historias e 1 segredo

Esse livro é bom pra

caralho

Page 35: 11 historias e 1 segredo

...já esse livro é uma

merda

Page 36: 11 historias e 1 segredo

“Eu vou desdizerAquilo tudo que eu lhe disse antesEu prefiro serEssa metamorfose ambulanteDo que ter aquela velha opiniãoFormada sobre tudo”

Page 37: 11 historias e 1 segredo

Mude

Page 38: 11 historias e 1 segredo

Funcional ou Orientado a Objeto?

Page 39: 11 historias e 1 segredo

“Software is getting slower faster than hardware

becomes faster.”

- Niklaus Wirth

Page 40: 11 historias e 1 segredo

•Funções de alta ordem•Imutabilidade•Sem efeitos colaterais•Pattern Matching•Recursão•Currying•Lazy Evaluation•Continuations•Closures•Functional Composition•Referencial Transparency•Monads

Page 41: 11 historias e 1 segredo

Linguagens Multi-Paradigmáticas

Page 42: 11 historias e 1 segredo

Antene-se

Page 43: 11 historias e 1 segredo

Vietnã da computação

Page 44: 11 historias e 1 segredo

Object-Relational Mapping (ORM)

Linguagens Orientadas a Objetos

Banco de Dados Relacionais

Page 45: 11 historias e 1 segredo

NoSQL

mas nada é para sempre

Page 46: 11 historias e 1 segredo

Experimente

Page 47: 11 historias e 1 segredo

COBOL morreu

Page 48: 11 historias e 1 segredo

ou CONSERVADORA

Java é uma linguagem REVOLUCIONÁRIA

Page 49: 11 historias e 1 segredo
Page 50: 11 historias e 1 segredo
Page 51: 11 historias e 1 segredo

ENTERRE

Page 52: 11 historias e 1 segredo

A Pior Linguagem do Mundo

Page 53: 11 historias e 1 segredo

‘5’ + 3 = 53‘5’ - 2 = 2

‘’ == ‘0’ // false 0 == ‘’ // true

false == undefined // falsefalse == null // falsenull == undefined // true

Page 54: 11 historias e 1 segredo

Qual a linguagem?

Page 55: 11 historias e 1 segredo

ACEITE

Page 56: 11 historias e 1 segredo

Linguagem Verde

Page 57: 11 historias e 1 segredo

Consumo de energia é cada dia mais importante

Page 58: 11 historias e 1 segredo

Teremos linguagens onde poderemos medir o consumo do código

produzido?

Page 59: 11 historias e 1 segredo

Viaje

Page 60: 11 historias e 1 segredo

O que você quer ser quando

crescer?

Page 61: 11 historias e 1 segredo

É possível ser programador e ganhar

dinheiro?

Page 62: 11 historias e 1 segredo

SEJA FIEL A VOCÊ

Page 63: 11 historias e 1 segredo

...e o segredo?

Page 64: 11 historias e 1 segredo

Rust

Page 65: 11 historias e 1 segredo

“Rust is a general purpose, multi-paradigm, compiled

programming language developed by Mozilla Research”

- Wikipedia

Page 66: 11 historias e 1 segredo

Está sendo usada para criar o Servo, um novo browser

engine experimental

Page 67: 11 historias e 1 segredo
Page 68: 11 historias e 1 segredo

C++ não é apropriada para criar sistemas paralelos e seguros ao mesmo tempo

Page 69: 11 historias e 1 segredo

Rust foi projetada para ter a mesma performance de C/C++ mas sem o mesmo

risco de bugs ou falhas de segurança

Page 70: 11 historias e 1 segredo

fn main() { println(“hello world”);}

Page 71: 11 historias e 1 segredo

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)) } } }}

Page 72: 11 historias e 1 segredo

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

Page 73: 11 historias e 1 segredo

let hi = "hi";let mut count = 0;

while count < 10 { io::println(fmt!("count: %?", count)); count += 1;}

Imutável por default

Page 74: 11 historias e 1 segredo

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

Page 75: 11 historias e 1 segredo

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 wellorigin.y += 1.0; // ERROR: assigning to immutable field

Structs

Page 76: 11 historias e 1 segredo

fn line(a: int, b: int, x: int) -> int { a * x + b}

Funções

Page 77: 11 historias e 1 segredo

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

Page 78: 11 historias e 1 segredo

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 (@)

Page 79: 11 historias e 1 segredo

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 (&)

Page 80: 11 historias e 1 segredo

Freezing

let mut x = 5;{ let y = &x; // x is now frozen, it cannot be modified}// x is now unfrozen again

Page 81: 11 historias e 1 segredo

use core::task::spawn;

// Print something profound in a different task using a named functionfn print_message() { println("I am running in a different task!"); }spawn(print_message);

// Print something more profound in a different task using a lambda expressionspawn( || println("I am also running in a different task!") );

// The canonical way to spawn is using `do` notationdo spawn { println("I too am running in a different task!");}

Tasks

Page 82: 11 historias e 1 segredo

OBRIGADO!

Luiz Borbahttp://borba.blog.br