O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

Four Languages From Forty Years Ago (NewCrafts 2019)

1.096 visualizações

Publicada em

(More info and video at fsharpforfunandprofit.com/fourfromforty)

The 1970's were a golden age for new programming languages, but do they have any relevance to programming today? Can we still learn from them?

In this talk, we'll look at four languages designed over forty years ago -- SQL, Prolog, ML, and Smalltalk -- and discuss their philosophy and approach to programming, which is very different from most popular languages today.

We'll come away with some practical principles that are still very applicable to modern development. And you might discover your new favorite programming paradigm!

Publicada em: Software
  • DOWNLOAD FULL BOOKS, INTO AVAILABLE FORMAT ......................................................................................................................... ......................................................................................................................... 1.DOWNLOAD FULL. PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... 1.DOWNLOAD FULL. EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... 1.DOWNLOAD FULL. doc Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... 1.DOWNLOAD FULL. PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... 1.DOWNLOAD FULL. EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... 1.DOWNLOAD FULL. doc Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Responder 
    Tem certeza que deseja  Sim  Não
    Insira sua mensagem aqui
  • DOWNLOAD FULL BOOKS, INTO AVAILABLE FORMAT ......................................................................................................................... ......................................................................................................................... 1.DOWNLOAD FULL. PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... 1.DOWNLOAD FULL. EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... 1.DOWNLOAD FULL. doc Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... 1.DOWNLOAD FULL. PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... 1.DOWNLOAD FULL. EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... 1.DOWNLOAD FULL. doc Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Responder 
    Tem certeza que deseja  Sim  Não
    Insira sua mensagem aqui

Four Languages From Forty Years Ago (NewCrafts 2019)

  1. 1. NewCrafts 2019 Four Languages From FortyYears Ago @ScottWlaschin fsharpforfunandprofit.com a.k.a What can we learn from the 1970's?
  2. 2. I'm old … I'm so old that I was actually alive in the 1970's
  3. 3. Me The 1970's
  4. 4. How much do you know about the 1970's?
  5. 5. Do you know these 1970's classics?
  6. 6. Do you know these 1970's classics?
  7. 7. Do you know these 1970's classics? Prolog ML family
  8. 8. What does your toolkit look like?
  9. 9. Does your DIY toolkit look like this? For hammering nails: For screwing things in: For cutting wood: For tightening bolts: I hope not! That would be silly!
  10. 10. Does your programming toolkit look like this? For domain modeling: For complex business rules: For querying data: For live coding: Hmmmm...
  11. 11. Don't use hammers only… …expand your toolkit!
  12. 12. "A language that doesn't affect the way you think about programming, is not worth knowing" – Alan Perlis Galaxy Brain seal of approval
  13. 13. How to expand your toolkit?
  14. 14. The most popular programming languages • Java • JavaScript • C++ • C • C# • Python • PHP • Ruby • Visual Basic • Go
  15. 15. Australian English British English "I speak three languages"
  16. 16. It's a big world out there Not every language looks like C or C# or Java or JavaScript
  17. 17. What programming paradigms do you need to know?
  18. 18. The most important programming paradigms • Imperative-procedural – ALGOL, 1960 • Object-oriented – Simula 1967 – Smalltalk 1976 • Functional – ML 1972 • Symbolic – Lisp 1959 – Maclisp/Scheme 1970's • Logic – Prolog 1973 • Concatenative – Forth 1970 ...and all paradigms had stabilized by mid-1980's Concepts originated in the 1970's...
  19. 19. Are you caught up with the state of the art from 35 years ago?
  20. 20. So… let's go back to the 1970's…
  21. 21. SQL (1974)
  22. 22. SQL background • Part of IBM's System R, the first practical relational database. • Before SQL: the dark ages of proprietary and custom database query APIs.
  23. 23. Learning from SQL #1: A consistent model Everything is a set of relations
  24. 24. TABLE Person | Name | Age | |---------|-----| | Liz | 92 | | Charles | 69 | | Wills | 35 | | Harry | 33 | TABLE ParentChild | Parent | Child | |---------|---------| | Diana | Wills | | Diana | Harry | | Charles | Wills | | Charles | Harry | | Liz | Charles |
  25. 25. | Name | Age | |---------|-----| | Liz | 92 | | Charles | 69 | | Wills | 35 | | Harry | 33 | SELECT Name FROM Person The result is another set of relations
  26. 26. | Name | Age | |---------|-----| | Liz | 92 | | Charles | 69 | | Wills | 35 | | Harry | 33 | SELECT * FROM Person WHERE Age > 50 The result is another set of relations
  27. 27. SELECT Parent,Age FROM Person OUTER JOIN ParentChild WHERE Parent = Person "Set operations, huh? I bet there's a way to do cartesian products then." Consistency => Predictability Here you go:
  28. 28. Learning from SQL #2: Composability It's an expression-oriented language
  29. 29. SELECT Name FROM Person WHERE Age > 50 You can take a query like this:
  30. 30. And embed it as a subquery SELECT Child FROM ParentChild WHERE Parent IN (SELECT Name FROM Person WHERE Age > 50)
  31. 31. And embed *that* as a subquery SELECT Child as Grandchild FROM ParentChild WHERE Parent IN ( SELECT Child FROM ParentChild WHERE Parent IN (SELECT Name FROM Person WHERE Age > 50))
  32. 32. Expressions are great, part 1: Expressions are composable 
  33. 33. There's another reason to prefer expressions over statements… They eliminate many types of error
  34. 34. void ifThenElseStatement(bool aBool) { int result; if (aBool) { result = 42; } printfn("result=%i", result); } How many things could cause problems in this C-like code?
  35. 35. void ifThenElseStatement(bool aBool) { int result; if (aBool) { result = 42; } printfn("result=%i", result); } How many things could cause problems in this C-like code?
  36. 36. void ifThenElseStatement(bool aBool) { int result; if (aBool) { result = 42; } printfn("result=%i", result); } How many things could cause problems in this C-like code?
  37. 37. void ifThenElseStatement(bool aBool) { int result; if (aBool) { result = 42; } printfn("result=%i", result); } How many things could cause problems in this C-like code?
  38. 38. void ifThenElseStatement(bool aBool) { int result; if (aBool) { result = 42; } printfn("result=%i", result); } How many things could cause problems in this C-like code?
  39. 39. public void IfThenElseExpression(bool aBool) { int result = aBool ? 42 : 0; Console.WriteLine("result={0}", result); } The same C-like code written in an expression-oriented way
  40. 40. public void IfThenElseExpression(bool aBool) { int result = aBool ? 42 : 0; Console.WriteLine("result={0}", result); } The same C-like code written in an expression-oriented way
  41. 41. public void IfThenElseExpression(bool aBool) { int result = aBool ? 42 : 0; Console.WriteLine("result={0}", result); } The same C-like code written in an expression-oriented way
  42. 42. public void IfThenElseExpression(bool aBool) { int result = aBool ? 42 : 0; Console.WriteLine("result={0}", result); } The same C-like code written in an expression-oriented way
  43. 43. public void IfThenElseExpression(bool aBool) { int result = aBool ? 42 : 0; Console.WriteLine("result={0}", result); } The same C-like code written in an expression-oriented way int StandaloneSubexpression(bool aBool) { return aBool ? 42 : 0; }
  44. 44. Expressions are great, part 2: Expressions reduce bugs and make refactoring easier 
  45. 45. Learning from SQL #3: It's declarative "What" not "How"
  46. 46. FILE *stream; char *line = NULL; size_t len = 0; ssize_t nread; stream = fopen(argv[1], "r"); while ((nread = getline(&line, &len, stream)) != -1) { /* check what the age is */ if age > 50 fwrite(line, nread, 1, stdout); } free(line); fclose(stream); Example of "How" programming
  47. 47. SELECT * FROM Person WHERE Age > 50 Example of "What" programming
  48. 48. Learning from SQL #4: Separation of concerns It's a QUERY language!
  49. 49. SQL: Separation of concerns • It's a QUERY language, doh! – A Data Query Language • Insert/Update/Delete is a different language – A Data Manipulation Language • Defining tables etc. is a different language again – A Data Definition Language • "SQL" now means all of these together.
  50. 50. What can we learn from SQL? • Consistent model – And predictable • Composable – Because expression-based • Declarative interface – "What", not "how" • Separation of concerns – Reinvented as Command-Query Separation • Interactivity is important – You can play and experiment
  51. 51. Prolog (1972)
  52. 52. Prolog background • First mainstream logic programming language – Designed in Marseille, France. – From "programmation en logique" • European answer to LISP for AI. – But now just as esoteric 
  53. 53. Learning from Prolog #1: A consistent model Everything is a fact or a rule
  54. 54. Facts age(liz,92). age(charles,69). age(wills,35). age(harry,33). parent(charles,wills). parent(charles,harry). parent(liz,charles). Rules grandparent(GP,C) :- parent(GP,P), parent(P,C). isOlder(P1,P2) :- age(P1,A1), age(P2,A2), A1 > A2.
  55. 55. Learning from Prolog #2: It's declarative "What" not "How"
  56. 56. age(liz,92). % is it a fact? true. age(P,92). % P is unbound, so tell me P=liz. age(liz,A). % A is unbound A=92.
  57. 57. grandparent(liz,harry). true. isOlder(wills,liz). false. grandparent(liz,P). % P is unbound P=harry. P=wills. isOlder(P,charles). % P is unbound P=liz. Rules and facts look the same
  58. 58. % what is [1] followed by [2,3] ? append([1], [2,3], X). X = [1,2,3] % only one answer % what do you prepend to [2,3] to make [1,2,3]? append(X, [2,3], [1,2,3]). X = [1] % only one answer % how many ways can you make [1,2,3]? append(X, Y, [1,2,3]). X = [] Y =[1,2,3] % multiple answers X = [1] Y =[2,3] X = [1,2] Y =[3] X = [1,2,3] Y =[] Bi-directional unification is awesome
  59. 59. Prolog demo
  60. 60. What can we learn from Prolog? • Consistent model (again) • Declarative (again) – "What" not "how" in the Sudoku example • Unification is very cool – Bi-directional queries – Ask both "is true?" and "what matches?" • Interactivity is important (again)
  61. 61. ML (1973) Parent of SML, OCaml and F#
  62. 62. ML background • "ML" for "Meta Language" – Designed as part of a theorem-proving system – Not to be confused with Machine Learning. • An impure functional language – Parent of Standard ML, OCaml, F#
  63. 63. Learning from ML #1: A consistent model Functions are "normal" things just like ints, strings, bools, etc.
  64. 64. Don't worry. I'm not going to talk about functional programming.
  65. 65. Learning from ML #2: Type inference
  66. 66. let doSomething f x = let y = f (x + 1) "hello" + y NOTE: I can't show the original ML from the 1970's, so I'm using F# instead.
  67. 67. let doSomething f x = let y = f (x + 1) "hello" + y
  68. 68. let doSomething f x = let y = f (x + 1) "hello" + y Inferred type of doSomething : f:(int -> string) -> x:int -> string
  69. 69. // C# code public IEnumerable<IGrouping<TKey, TSource>> GroupBy<TSource, TKey>( IEnumerable<TSource> source, Func<TSource, TKey> keySelector ) { ... } // F# code let GroupBy source keySelector = ... Benefits of type inference: * Less typing * Less noise, more logic Here's a more complex example
  70. 70. Learning from ML #3: Sensible defaults
  71. 71. Sensible defaults • Immutable by default – Mutable is a special case • Non-nullable types by default – Nullable is a special case • Structural equality by default – Reference equality is special case • Everything must be initialized
  72. 72. Learning from ML #4: Algebraic type system NB: Technically not part of original ML but now a standard part of "ML family"
  73. 73. New types are built from smaller types by: Composing with “AND” Composing with “OR”
  74. 74. Example: pairs, tuples, records FruitSalad = One each of and and Compose with “AND” type FruitSalad = { Apple: AppleVariety Banana: BananaVariety Cherry: CherryVariety }
  75. 75. Snack = or or Compose with “OR” type Snack = | Apple of AppleVariety | Banana of BananaVariety | Cherry of CherryVariety
  76. 76. A real world example of composing types
  77. 77. Some requirements: We accept three forms of payment: Cash, Check, or Card. For Cash we don't need any extra information For Checks we need a check number For Cards we need a card type and card number
  78. 78. type CheckNumber = int type CardNumber = string With an algebraic type system you would probably implement by composing types, like this:
  79. 79. type CheckNumber = ... type CardNumber = … type CardType = Visa | Mastercard type CreditCardInfo = { CardType : CardType CardNumber : CardNumber }
  80. 80. type CheckNumber = ... type CardNumber = ... type CardType = ... type CreditCardInfo = ... type PaymentMethod = | Cash | Check of CheckNumber | Card of CreditCardInfo
  81. 81. type CheckNumber = ... type CardNumber = ... type CardType = ... type CreditCardInfo = ... type PaymentMethod = | Cash | Check of CheckNumber | Card of CreditCardInfo type PaymentAmount = decimal type Currency = EUR | USD
  82. 82. type CheckNumber = ... type CardNumber = ... type CardType = ... type CreditCardInfo = ... type PaymentMethod = | Cash | Check of CheckNumber | Card of CreditCardInfo type PaymentAmount = decimal type Currency = EUR | USD type Payment = { Amount : PaymentAmount Currency : Currency Method : PaymentMethod }
  83. 83. type CheckNumber = ... type CardNumber = ... type CardType = ... type CreditCardInfo = ... type PaymentMethod = | Cash | Check of CheckNumber | Card of CreditCardInfo type PaymentAmount = decimal type Currency = EUR | USD type Payment = { Amount : PaymentAmount Currency : Currency Method : PaymentMethod }
  84. 84. Types can become executable documentation
  85. 85. type Deal = Deck -> (Deck * Card) type PickupCard = (Hand * Card) -> Hand type Suit = Club | Diamond | Spade | Heart type Rank = Two | Three | Four | Five | Six | Seven | Eight | Nine | Ten | Jack | Queen | King | Ace type Card = { Suit:Suit; Rank:Rank } type Hand = Card list type Deck = Card list type Player = {Name:string; Hand:Hand} type Game = { Deck:Deck; Players:Player list } The domain on one screen!
  86. 86. type PaymentMethod = | Cash | Check of CheckNumber | Card of CreditCardInfo
  87. 87. A big topic and not enough time   More on DDD and designing with types at fsharpforfunandprofit.com/ddd
  88. 88. I could do an ML demo here But I won't!
  89. 89. What can we learn from ML? • Consistent model (again) • Expression-based (again) – Everything is composable – Also prevents bugs • Type inference is awesome • Sensible defaults make accidents harder – E.g. immutable by default • Algebraic types are awesome
  90. 90. Smalltalk (1976)
  91. 91. I
  92. 92. Is a simulation of a teletype really the best interface for interacting with an operating system? -- @gambler on HN, Jan 2019
  93. 93. Smalltalk background • Developed at Xerox PARC – Along with the first PC, the first GUI, the first laser printer, ethernet, and more. • Smalltalk introduced – Message-based OO – Model-View-Controller – A windowing IDE – Also had aVM, generational GC, etc.
  94. 94. Smalltalk-80 User Interface
  95. 95. Learning from Smalltalk #1: A consistent model: everything is an object everything is an object everything is an object everything is an object
  96. 96. Learning from Smalltalk #2: Minimal syntax
  97. 97. Learning from Smalltalk #2: Minimal syntax Put the power in the language instead.
  98. 98. Learning from Smalltalk #2: Minimal syntax Put the power in the language instead.
  99. 99. Learning from Smalltalk #3: Late binding If you're going to be a dynamic language, be a really dynamic language.
  100. 100. Learning from Smalltalk #4: Who needs text files? If everything is accessible you have a lot of power
  101. 101. Smalltalk demo
  102. 102. What can we learn from Smalltalk? • A consistent model, again • Minimize syntax and make the language powerful • Be awesome and make people fall in love with you!
  103. 103. Conclusion
  104. 104. What can we learn from the 1970's? • Many great ideas were developed 40 years ago – They should be more widely known • There are many different approaches to solving problems. – A bigger toolbox is a good thing to have – Use the right tool for the job
  105. 105. And one more thing… C-style syntax is not the only possible syntax! – No curly braces – Sentences can end properly, with a period! – No dot syntax (not even in OO Smalltalk)
  106. 106. "A language that doesn't affect the way you think about programming, is not worth knowing" – Alan Perlis So go forth and expand your Galaxy Brain!
  107. 107. Slides and video here fsharpforfunandprofit.com/fourfromforty Thank you! "Domain modelling Made Functional" book fsharpforfunandprofit.com/books @ScottWlaschin Me on twitter

×