11 historias e 1 segredo

651 views

Published on

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

Published in: Technology
  • Be the first to comment

11 historias e 1 segredo

  1. 1. 11 HISTÓRIAS E 1 SEGREDOLuiz Borbahttp://borba.blog.br
  2. 2. 1989Estudante1991Programador1994EmpreendedorAnalistadeTecnologia1998LíderTécnico20002001Arquiteto deSoftware2005ScrumMaster2010Consultor emTecnologia2014(?)Consultor emNegóciosQuem éLuiz Borba?http://borba.blog.br
  3. 3. O Pirulito
  4. 4. “All non-trivial abstractions,to some degree, are leaky.”- Joel Spolsky
  5. 5. Linguagens deprogramação são leakyabstractions.
  6. 6. Temos obrigação deconhecer o que alinguagem queutilizamos faz pordebaixo dos panos.
  7. 7. “When someone says: ‘Iwant a programminglanguage in which I needonly say what I wish done’,give him a lollipop.”- Alan J. Perlis
  8. 8. Mergulhe
  9. 9. O bugexistencial
  10. 10. “The most likely way for theworld to be destroyed, mostexperts agree, is by accident.Thats where we come in; werecomputer professionals. Wecause accidents.”- Nathaniel Borenstein
  11. 11. Qual a melhorforma deaprender umalinguagem?
  12. 12. A Internet nãoesteve semprepor aqui...
  13. 13. NÃO HÁ NADADE ERRADO EMLER LIVROS
  14. 14. Não programe porcoincidência.
  15. 15. Aprenda
  16. 16. Eis o mistérioda FÉ
  17. 17. |”May 2013” can’t be found|”””May 2013”” can’t be found”””May 2013” can’t be found”‘”May 2013” can’t be found’
  18. 18. #include <stdio.h> main()[int value = 1; while(value<=3)[printf(|Value is %dn|, value);value++;] return array{1};]
  19. 19. Qual a origem do QWERTY?
  20. 20. O KALQ vinga?
  21. 21. Não há progresso semdesafios. Desafie o“status quo”
  22. 22. Desafie
  23. 23. Tanto faz dá nacabeça quanto nacabeça dá?
  24. 24. sort(lista)oulista.sort()
  25. 25. Reflita
  26. 26. Mister M
  27. 27. salvar(objeto) {broker.beginTrans();broker.save(objeto);broker.commit();}
  28. 28. salvar(objeto) {broker.save(objeto);}<transactional-methods><method>salvar</method></transactional-methods>
  29. 29. @Transactionalsalvar(objeto) {broker.save(objeto);}
  30. 30. Aspect-OrientedProgramming(AOP) é bacana
  31. 31. Aspect-OrientedProgramming(AOP) é pura bosta
  32. 32. Esse livroé bom pracaralho
  33. 33. ...já esselivro é umamerda
  34. 34. “Eu vou desdizerAquilo tudo que eu lhe disse antesEu prefiro serEssa metamorfose ambulanteDo que ter aquela velha opiniãoFormada sobre tudo”
  35. 35. Mude
  36. 36. Funcional ouOrientado a Objeto?
  37. 37. “Software is getting slowerfaster than hardwarebecomes faster.”- Niklaus Wirth
  38. 38. •Funções de alta ordem•Imutabilidade•Sem efeitos colaterais•Pattern Matching•Recursão•Currying•Lazy Evaluation•Continuations•Closures•Functional Composition•Referencial Transparency•Monads
  39. 39. Linguagens Multi-Paradigmáticas
  40. 40. Antene-se
  41. 41. Vietnã dacomputação
  42. 42. Object-Relational Mapping(ORM)Linguagens Orientadas a ObjetosBanco de Dados Relacionais
  43. 43. NoSQLmas nada é para sempre
  44. 44. Experimente
  45. 45. COBOL morreu
  46. 46. ou CONSERVADORAJava é uma linguagemREVOLUCIONÁRIA
  47. 47. ENTERRE
  48. 48. A Pior Linguagemdo Mundo
  49. 49. ‘5’ + 3 = 53‘5’ - 2 = 2‘’ == ‘0’ // false0 == ‘’ // truefalse == undefined // falsefalse == null // falsenull == undefined // true
  50. 50. Qual a linguagem?
  51. 51. ACEITE
  52. 52. LinguagemVerde
  53. 53. Consumo de energia é cadadia mais importante
  54. 54. Teremos linguagens ondepoderemos medir oconsumo do códigoproduzido?
  55. 55. Viaje
  56. 56. O que você querser quandocrescer?
  57. 57. É possível serprogramador e ganhardinheiro?
  58. 58. SEJA FIELA VOCÊ
  59. 59. ...e o segredo?
  60. 60. Rust
  61. 61. “Rust is a general purpose,multi-paradigm, compiledprogramming languagedeveloped by Mozilla Research”- Wikipedia
  62. 62. Está sendo usada para criaro Servo, um novo browserengine experimental
  63. 63. C++ não é apropriada paracriar sistemas paralelos eseguros ao mesmo tempo
  64. 64. Rust foi projetada para tera mesma performance deC/C++ mas sem o mesmorisco de bugs ou falhas desegurança
  65. 65. fn main() {println(“hello world”);}
  66. 66. 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: %dn", name, num))}}}}
  67. 67. TypeMemory safetyConcurrencyGenericsException handlingMemory modelCompilation modelsystem static, nominal, linear, algebraic, locally inferredno null or dangling pointers, no buffer overflowslightweight tasks with message passing, no shared memorytype parameterization with type classesunrecoverable unwinding with task isolationoptional task-local GC, safe pointer types with region analysisahead-of-time, C/C++ compatible
  68. 68. let hi = "hi";let mut count = 0;while count < 10 {io::println(fmt!("count: %?", count));count += 1;}Imutável por default
  69. 69. 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
  70. 70. 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 fieldStructs
  71. 71. fn line(a: int, b: int, x: int) -> int{a * x + b}Funções
  72. 72. Owning Pointers (~)fn f() {let x: ~int = ~1024; // allocate space and initialize an int// on the heapprintln(fmt!("%d", *x));} // <-- the memory that x pointed at is automatically freed herelet x = ~5;let z = x; // no new memory allocated, x can no longer be used
  73. 73. fn foo() {let x: @int = @1024; // allocate space and initialize an int// on the heapbar(x); // pass it to `bar`println(fmt!("%d", *x)); // print it on the screen} // <-- the memory can be freed herefn 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 hereManaged Pointers (@)
  74. 74. 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 referencefor dogs.each |dog| {println(fmt!("Say hello to %s", dog.name));}println(fmt!("And the winner is: %s!", winner.name));} // <-- all dogs destroyed hereBorrowed Pointers (&)
  75. 75. Freezinglet mut x = 5;{let y = &x; // x is now frozen, it cannot be modified}// x is now unfrozen again
  76. 76. 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
  77. 77. OBRIGADO!Luiz Borbahttp://borba.blog.br

×