Successfully reported this slideshow.
Five Languages   in a Moment        Sergio Gil
Sergio Gil Pérez de la Manga            @porras
I   Creating Software
I   Ruby
“Excusatio non petita,accussatio manifesta”
2005
2005
“Learn a new language each year”
2006
2006   Ruby
2006   Ruby2007
2006   Ruby2007    -
2006   Ruby2007    -2008
2006   Ruby2007    -2008    -
2006   Ruby2007    -2008    -2009
2006   Ruby2007    -2008    -2009    -
2006   Ruby2007    -2008    -2009    -2010
2006   Ruby2007    -2008    -2009    -2010    -
Ruby isawesome!!
2010
THE   POWERCONTINUUM
Highest levelLowest level
Highest level                MachineLowest level
Highest level                Assembler                MachineLowest level
Highest level                   C                Assembler                MachineLowest level
Highest level                  Java                   C                Assembler                MachineLowest level
Highest level                  Ruby                  Java                   C                Assembler                Mach...
Abstractions are tools for the mind
1
Created by Joe Armstrong at Ericsson in 1986
Functional Language
Functional LanguageConcurrency Oriented
Functional LanguageConcurrency OrientedDistribution Oriented
Functional LanguageConcurrency OrientedDistribution Oriented   Error Tolerant
Functional Programming
http://www.defmacro.org/ramblings/fp.html
Side effects free programming
x = x + 1
> X = 1.
> X = 1.> X.1
> X = 1.> X.1> X = 2.** exception error
Pattern Matching
> Point = {point, 15, 20}.
> Point = {point, 15, 20}.> {point, X, Y} = Point.
> Point = {point, 15, 20}.> {point, X, Y} = Point.> X.15
> Point = {point, 15, 20}.> {point, X, Y} = Point.> X.15> Y.20
Lists
ListsHead and Tail
ListsHead and Tail    [H|T]
> L = [1, 2, 3, 4].
> L = [1, 2, 3, 4].> [H|T] = L.
> L = [1, 2, 3, 4].> [H|T] = L.> H.1
> L = [1, 2, 3, 4].> [H|T] = L.> H.1> T.[2, 3, 4]
Functions
double(X) -> X * 2.
fact(0) -> 1;fact(X) -> X * fact(X - 1).
sum([]) -> 0;sum([H|T]) -> H + sum(T).
sum([]) -> 0;sum([H|T]) -> H + sum(T).map(_, [])    -> [];map(F, [H|T]) -> [F(H) | map(F, T)].
sum([]) -> 0;sum([H|T]) -> H + sum(T).map(_, [])    -> [];map(F, [H|T]) -> [F(H) | map(F, T)]....
area({rectangle, Width, Height}) -> Width * Height;area({square, X})                -> X * X;area({circle, R})            ...
area({rectangle, Width, Height}) -> Width * Height;area({square, X})                -> X * X;area({circle, R})            ...
class Rectangle  def initialize(width, height)    @width = width    @height = height  end  def area    @width * height  en...
def area(*args)  case args[0]  when :rectangle    args[1] * args[2]  when :square    args[1] * args[1]  when :circle    3....
Concurrency
Pid = spawn(Fun).
Pid ! Message.
receive  Pattern -> Expression;  Pattern -> Expressionend
Remember map?map(_, [])    -> [];map(F, [H|T]) -> [F(H) | map(F, T)].
pmap(F, L) ->  Parent = self(),  Pids = map(fun(I) ->                spawn(fun() ->                  Parent ! {self(), F(I...
pmap(F, L) ->  Parent = self(),  Pids = map(fun(I) ->                spawn(fun() ->                  Parent ! {self(), F(I...
xN
Distribution Oriented
More interesting things about Erlang
More interesting things about Erlang   Error control, even distributed
More interesting things about Erlang   Error control, even distributed                 OTP
More interesting things about Erlang  Error control, even distributed                OTPWeb development with ChicagoBoss
You should try Erlang if...
...you want to play with functional programming
...youre interested in writing parallel programs
2
Haskell
Created by Simon Peyton Jones in 1990
Pure functional language
Pure functional language    Lazy evaluation
Pure functional language       Lazy evaluationStrict but powerful type system
mymap _ [] = []mymap f (x:xs) = f x : map f xs
Haskell Type System
Haskell Type System      Strong
Haskell Type System      Strong       Static
Haskell Type System      Strong       Static     Inferred
Char
Char[Char]
Char[Char]String
Char[Char]StringInteger
Char[Char]StringInteger([Char], Integer)
data BookInfo = Book Int String [String]
data BookInfo = Book Int String [String]myBook = Book 987987 "About Wadus" ["Fulano", "Mengano"]
data Color =   Red           |   Yellow           |   Green           |   RGB Int Int Int
data Color =   Red           |   Yellow           |   Green           |   RGB Int Int Intyellow = Yellowblack = RGB 0 0 0
Type System + Pattern Matching
data Shape = Circle Float           | Rectangle Float Float           | Square Float
data Shape = Circle Float           | Rectangle Float Float           | Square Floatarea (Circle r)      = r * 3.14area (R...
data Shape = Circle Float           | Rectangle Float Float           | Square Floatarea (Circle r)      = r * 3.14area (R...
data Shape = Circle Float           | Rectangle Float Float           | Square Floatarea (Circle r)      = r * 3.14area (R...
data Shape = Circle Float           | Rectangle Float Float           | Square Floatarea (Circle r)      = r * 3.14area (R...
More Functional Programming
square_all list = map (n -> n^2) list> square_all [1, 2, 5][1,4,25]
square_all list = map (n -> n^2) listsquare_all list = map (^2) list> square_all [1, 2, 5][1,4,25]
square_all list = map (n -> n^2) listsquare_all list = map (^2) listsquare_all = map (^2)> square_all [1, 2, 5][1,4,25]
Laziness
@articles = Article.where(:status => published)
@articles = Article.where(:status => published)<% @articles.each do |article| %><h2><%= article.title %></h2><p><%= articl...
@articles = Article.where(:status => published)<% @articles.limit(5).each do |article| %><h2><%= article.title %></h2><p><...
wadus 1 + 2
iforelse cond a b = if cond                    then a                    else b
iforelse cond a b = if cond                    then a                    else b> iforelse True (1 + 2) (3 + 4)3
iforelse cond a b = if cond                    then a                    else b> iforelse True (1 + 2) (3 + 4)3> iforelse ...
You should try Haskell if...
...you tried the functional paradigm       and want to go further
...you want to see your belief“types are useless” challenged
...you want to write extremellyefficient programs in a high level             language
3
Common Lisp
Invented by John McCarthy in 1958
Invented by John McCarthy in 1958
Lots ofIrritatingSuperfluousParentheses
HOMOICONIC
“property of someprogramming languages,    in which the primary        representation of programs is also a data  structur...
CODE = DATA
(1 2 3 ("wadus" 5) (1.3 1.7))
(1 2 3 ("wadus" 5) (1.3 1.7))[1, 2, 3, ["wadus", 5], [1.3, 1.7]]
(+ (* 3 5) (/ 10 2))
(+ (* 3 5) (/ 10 2))         20
(1 2 3 ("wadus" 5) (1.3 1.7))    (+ (* 3 5) (/ 10 2))
(1 2 3 ("wadus" 5) (1.3 1.7))    (+ (* 3 5) (/ 10 2))         CODE = DATA
Lisp has no syntax
Valid Lisp code is composed of  lists whose first element is thename of a function and the rest are       the parameters pa...
Macros
Metaprogramming
Metaprogramming is creating and manipulating                   code
Metaprogramming is creating and manipulating                   code                   lists
LISt Processing
(defmacro backwards (code)
(defmacro backwards (code)  (reverse code))
(defmacro backwards (code)  (reverse code))(backwards  ("wadus" print))
(defmacro backwards (code)  (reverse code))(backwards  ("wadus" print))(print "wadus")
You should try Common Lisp if...
...you want to take a flight in a retrofuturist jetpack
...you like metaprogramming
...you want to try one of the  most abstraction-capableand still efficient languages
...you want to understandwhy Lisp-lovers love Lisp so           much
4
Created by Rick Hickey in 2007
Lisp meets XXI century
Lisp meets the JVM
Lisp meets the JVMLisp meets purelly functional programming
Lisp meets the JVMLisp meets purelly functional programming           Lisp meets laziness
Lisp meets the JVMLisp meets purelly functional programming           Lisp meets laziness         Lisp meets concurrency
Clojure is a Lisp
More laziness
(def whole-numbers (iterate inc 1))
(def whole-numbers (iterate inc 1))(first whole-numbers); 1
(def whole-numbers (iterate inc 1))(first whole-numbers); 1(take 5 whole-numbers); (1 2 3 4 5)
(def whole-numbers (iterate inc 1))(first whole-numbers); 1(take 5 whole-numbers); (1 2 3 4 5)(last whole-numbers) ; => CA...
(defn fibonacci []  (map first (iterate (fn [[a b]] [b (+ a b)]) [0 1])))
(defn fibonacci []  (map first (iterate (fn [[a b]] [b (+ a b)]) [0 1])))(take 20 (fibonacci)); (0 1 1 2 3 5 8 13 21 34 55...
STM
(def fulano-balance (ref 100))(def mengano-balance (ref 80))
(def fulano-balance (ref 100))(def mengano-balance (ref 80))(dosync  (ref-set fulano-balance (+ @fulano-balance 20))  (ref...
(def fulano-balance (ref 100))(def mengano-balance (ref 80))(dosync  (ref-set fulano-balance (+ @fulano-balance 20))  (ref...
(def fulano-balance (ref 100))(def mengano-balance (ref 80))(dosync  (ref-set fulano-balance (+ @fulano-balance 20))  (ref...
(dosync  (alter fulano-balance + 20)  (alter mengano-balance - 20))
(dosync  (alter fulano-balance + 20)  (alter mengano-balance - 20))@fulano-balance; 140
(dosync  (alter fulano-balance + 20)  (alter mengano-balance - 20))@fulano-balance; 140@mengano-balance; 40
More interesting things about Clojure
More interesting things about ClojureWeb development with Compojure
More interesting things about ClojureWeb development with Compojure
You should try Clojure if...
...you like both Lisp and the functional approach
...you need/want Java/JVM interoperability
5
Ujfalusi
<
>
-
http://github.com/porras/          ujfalusi
You should create your own language if...
...you want to learn about how   languages internally work
...you want to have fundoing something very geek
...your favorite playerleaves your team and   breaks your heart
And thewinneris...
ME!
Fun
New abstractions
New tools
Polyglotism
Go out
Play
Break something
Have fun
Thank you! :)
Five Languages in a Moment
Five Languages in a Moment
Five Languages in a Moment
Five Languages in a Moment
Five Languages in a Moment
Five Languages in a Moment
Five Languages in a Moment
Five Languages in a Moment
Five Languages in a Moment
Five Languages in a Moment
Five Languages in a Moment
Five Languages in a Moment
Five Languages in a Moment
Five Languages in a Moment
Five Languages in a Moment
Five Languages in a Moment
Five Languages in a Moment
Five Languages in a Moment
Five Languages in a Moment
Five Languages in a Moment
Five Languages in a Moment
Five Languages in a Moment
Five Languages in a Moment
Five Languages in a Moment
Five Languages in a Moment
Five Languages in a Moment
Five Languages in a Moment
Five Languages in a Moment
Five Languages in a Moment
Five Languages in a Moment
Five Languages in a Moment
Upcoming SlideShare
Loading in …5
×

Five Languages in a Moment

1,723 views

Published on

Published in: Technology
  • Be the first to comment

Five Languages in a Moment

  1. 1. Five Languages in a Moment Sergio Gil
  2. 2. Sergio Gil Pérez de la Manga @porras
  3. 3. I Creating Software
  4. 4. I Ruby
  5. 5. “Excusatio non petita,accussatio manifesta”
  6. 6. 2005
  7. 7. 2005
  8. 8. “Learn a new language each year”
  9. 9. 2006
  10. 10. 2006 Ruby
  11. 11. 2006 Ruby2007
  12. 12. 2006 Ruby2007 -
  13. 13. 2006 Ruby2007 -2008
  14. 14. 2006 Ruby2007 -2008 -
  15. 15. 2006 Ruby2007 -2008 -2009
  16. 16. 2006 Ruby2007 -2008 -2009 -
  17. 17. 2006 Ruby2007 -2008 -2009 -2010
  18. 18. 2006 Ruby2007 -2008 -2009 -2010 -
  19. 19. Ruby isawesome!!
  20. 20. 2010
  21. 21. THE POWERCONTINUUM
  22. 22. Highest levelLowest level
  23. 23. Highest level MachineLowest level
  24. 24. Highest level Assembler MachineLowest level
  25. 25. Highest level C Assembler MachineLowest level
  26. 26. Highest level Java C Assembler MachineLowest level
  27. 27. Highest level Ruby Java C Assembler MachineLowest level
  28. 28. Abstractions are tools for the mind
  29. 29. 1
  30. 30. Created by Joe Armstrong at Ericsson in 1986
  31. 31. Functional Language
  32. 32. Functional LanguageConcurrency Oriented
  33. 33. Functional LanguageConcurrency OrientedDistribution Oriented
  34. 34. Functional LanguageConcurrency OrientedDistribution Oriented Error Tolerant
  35. 35. Functional Programming
  36. 36. http://www.defmacro.org/ramblings/fp.html
  37. 37. Side effects free programming
  38. 38. x = x + 1
  39. 39. > X = 1.
  40. 40. > X = 1.> X.1
  41. 41. > X = 1.> X.1> X = 2.** exception error
  42. 42. Pattern Matching
  43. 43. > Point = {point, 15, 20}.
  44. 44. > Point = {point, 15, 20}.> {point, X, Y} = Point.
  45. 45. > Point = {point, 15, 20}.> {point, X, Y} = Point.> X.15
  46. 46. > Point = {point, 15, 20}.> {point, X, Y} = Point.> X.15> Y.20
  47. 47. Lists
  48. 48. ListsHead and Tail
  49. 49. ListsHead and Tail [H|T]
  50. 50. > L = [1, 2, 3, 4].
  51. 51. > L = [1, 2, 3, 4].> [H|T] = L.
  52. 52. > L = [1, 2, 3, 4].> [H|T] = L.> H.1
  53. 53. > L = [1, 2, 3, 4].> [H|T] = L.> H.1> T.[2, 3, 4]
  54. 54. Functions
  55. 55. double(X) -> X * 2.
  56. 56. fact(0) -> 1;fact(X) -> X * fact(X - 1).
  57. 57. sum([]) -> 0;sum([H|T]) -> H + sum(T).
  58. 58. sum([]) -> 0;sum([H|T]) -> H + sum(T).map(_, []) -> [];map(F, [H|T]) -> [F(H) | map(F, T)].
  59. 59. sum([]) -> 0;sum([H|T]) -> H + sum(T).map(_, []) -> [];map(F, [H|T]) -> [F(H) | map(F, T)]....
  60. 60. area({rectangle, Width, Height}) -> Width * Height;area({square, X}) -> X * X;area({circle, R}) -> 3.14159 * R.
  61. 61. area({rectangle, Width, Height}) -> Width * Height;area({square, X}) -> X * X;area({circle, R}) -> 3.14159 * R.> area({square, 3}).9
  62. 62. class Rectangle def initialize(width, height) @width = width @height = height end def area @width * height endendclass Square def initialize(x) @x = x end def area @x * @x endendclass Circle def initialize(r) @r = r end def area 3.14159 * @r endend
  63. 63. def area(*args) case args[0] when :rectangle args[1] * args[2] when :square args[1] * args[1] when :circle 3.141519 * args[1] endend
  64. 64. Concurrency
  65. 65. Pid = spawn(Fun).
  66. 66. Pid ! Message.
  67. 67. receive Pattern -> Expression; Pattern -> Expressionend
  68. 68. Remember map?map(_, []) -> [];map(F, [H|T]) -> [F(H) | map(F, T)].
  69. 69. pmap(F, L) -> Parent = self(), Pids = map(fun(I) -> spawn(fun() -> Parent ! {self(), F(I)} end) end, L), gather(Pids).
  70. 70. pmap(F, L) -> Parent = self(), Pids = map(fun(I) -> spawn(fun() -> Parent ! {self(), F(I)} end) end, L), gather(Pids).gather([]) -> [];gather([Pid|T]) -> receive {Pid, Result} -> [Result|gather(T)] end.
  71. 71. xN
  72. 72. Distribution Oriented
  73. 73. More interesting things about Erlang
  74. 74. More interesting things about Erlang Error control, even distributed
  75. 75. More interesting things about Erlang Error control, even distributed OTP
  76. 76. More interesting things about Erlang Error control, even distributed OTPWeb development with ChicagoBoss
  77. 77. You should try Erlang if...
  78. 78. ...you want to play with functional programming
  79. 79. ...youre interested in writing parallel programs
  80. 80. 2
  81. 81. Haskell
  82. 82. Created by Simon Peyton Jones in 1990
  83. 83. Pure functional language
  84. 84. Pure functional language Lazy evaluation
  85. 85. Pure functional language Lazy evaluationStrict but powerful type system
  86. 86. mymap _ [] = []mymap f (x:xs) = f x : map f xs
  87. 87. Haskell Type System
  88. 88. Haskell Type System Strong
  89. 89. Haskell Type System Strong Static
  90. 90. Haskell Type System Strong Static Inferred
  91. 91. Char
  92. 92. Char[Char]
  93. 93. Char[Char]String
  94. 94. Char[Char]StringInteger
  95. 95. Char[Char]StringInteger([Char], Integer)
  96. 96. data BookInfo = Book Int String [String]
  97. 97. data BookInfo = Book Int String [String]myBook = Book 987987 "About Wadus" ["Fulano", "Mengano"]
  98. 98. data Color = Red | Yellow | Green | RGB Int Int Int
  99. 99. data Color = Red | Yellow | Green | RGB Int Int Intyellow = Yellowblack = RGB 0 0 0
  100. 100. Type System + Pattern Matching
  101. 101. data Shape = Circle Float | Rectangle Float Float | Square Float
  102. 102. data Shape = Circle Float | Rectangle Float Float | Square Floatarea (Circle r) = r * 3.14area (Rectangle w h) = w * harea (Square x) = x * x
  103. 103. data Shape = Circle Float | Rectangle Float Float | Square Floatarea (Circle r) = r * 3.14area (Rectangle w h) = w * harea (Square x) = x * xcircle = Circle 5rectangle = Rectangle 2 3square = Square 1.5
  104. 104. data Shape = Circle Float | Rectangle Float Float | Square Floatarea (Circle r) = r * 3.14area (Rectangle w h) = w * harea (Square x) = x * xcircle = Circle 5rectangle = Rectangle 2 3square = Square 1.5-- > area circle-- 15.700001
  105. 105. data Shape = Circle Float | Rectangle Float Float | Square Floatarea (Circle r) = r * 3.14area (Rectangle w h) = w * harea (Square x) = x * xcircle = Circle 5rectangle = Rectangle 2 3square = Square 1.5-- > area circle-- 15.700001-- > :type area-- area :: Shape -> Float
  106. 106. More Functional Programming
  107. 107. square_all list = map (n -> n^2) list> square_all [1, 2, 5][1,4,25]
  108. 108. square_all list = map (n -> n^2) listsquare_all list = map (^2) list> square_all [1, 2, 5][1,4,25]
  109. 109. square_all list = map (n -> n^2) listsquare_all list = map (^2) listsquare_all = map (^2)> square_all [1, 2, 5][1,4,25]
  110. 110. Laziness
  111. 111. @articles = Article.where(:status => published)
  112. 112. @articles = Article.where(:status => published)<% @articles.each do |article| %><h2><%= article.title %></h2><p><%= article.body %></p><% end %>
  113. 113. @articles = Article.where(:status => published)<% @articles.limit(5).each do |article| %><h2><%= article.title %></h2><p><%= article.body %></p><% end %>
  114. 114. wadus 1 + 2
  115. 115. iforelse cond a b = if cond then a else b
  116. 116. iforelse cond a b = if cond then a else b> iforelse True (1 + 2) (3 + 4)3
  117. 117. iforelse cond a b = if cond then a else b> iforelse True (1 + 2) (3 + 4)3> iforelse False (1 + 2) (3 + 4)7
  118. 118. You should try Haskell if...
  119. 119. ...you tried the functional paradigm and want to go further
  120. 120. ...you want to see your belief“types are useless” challenged
  121. 121. ...you want to write extremellyefficient programs in a high level language
  122. 122. 3
  123. 123. Common Lisp
  124. 124. Invented by John McCarthy in 1958
  125. 125. Invented by John McCarthy in 1958
  126. 126. Lots ofIrritatingSuperfluousParentheses
  127. 127. HOMOICONIC
  128. 128. “property of someprogramming languages, in which the primary representation of programs is also a data structure in a primitive type of the language itself”
  129. 129. CODE = DATA
  130. 130. (1 2 3 ("wadus" 5) (1.3 1.7))
  131. 131. (1 2 3 ("wadus" 5) (1.3 1.7))[1, 2, 3, ["wadus", 5], [1.3, 1.7]]
  132. 132. (+ (* 3 5) (/ 10 2))
  133. 133. (+ (* 3 5) (/ 10 2)) 20
  134. 134. (1 2 3 ("wadus" 5) (1.3 1.7)) (+ (* 3 5) (/ 10 2))
  135. 135. (1 2 3 ("wadus" 5) (1.3 1.7)) (+ (* 3 5) (/ 10 2)) CODE = DATA
  136. 136. Lisp has no syntax
  137. 137. Valid Lisp code is composed of lists whose first element is thename of a function and the rest are the parameters passed
  138. 138. Macros
  139. 139. Metaprogramming
  140. 140. Metaprogramming is creating and manipulating code
  141. 141. Metaprogramming is creating and manipulating code lists
  142. 142. LISt Processing
  143. 143. (defmacro backwards (code)
  144. 144. (defmacro backwards (code) (reverse code))
  145. 145. (defmacro backwards (code) (reverse code))(backwards ("wadus" print))
  146. 146. (defmacro backwards (code) (reverse code))(backwards ("wadus" print))(print "wadus")
  147. 147. You should try Common Lisp if...
  148. 148. ...you want to take a flight in a retrofuturist jetpack
  149. 149. ...you like metaprogramming
  150. 150. ...you want to try one of the most abstraction-capableand still efficient languages
  151. 151. ...you want to understandwhy Lisp-lovers love Lisp so much
  152. 152. 4
  153. 153. Created by Rick Hickey in 2007
  154. 154. Lisp meets XXI century
  155. 155. Lisp meets the JVM
  156. 156. Lisp meets the JVMLisp meets purelly functional programming
  157. 157. Lisp meets the JVMLisp meets purelly functional programming Lisp meets laziness
  158. 158. Lisp meets the JVMLisp meets purelly functional programming Lisp meets laziness Lisp meets concurrency
  159. 159. Clojure is a Lisp
  160. 160. More laziness
  161. 161. (def whole-numbers (iterate inc 1))
  162. 162. (def whole-numbers (iterate inc 1))(first whole-numbers); 1
  163. 163. (def whole-numbers (iterate inc 1))(first whole-numbers); 1(take 5 whole-numbers); (1 2 3 4 5)
  164. 164. (def whole-numbers (iterate inc 1))(first whole-numbers); 1(take 5 whole-numbers); (1 2 3 4 5)(last whole-numbers) ; => CATACROKER!
  165. 165. (defn fibonacci [] (map first (iterate (fn [[a b]] [b (+ a b)]) [0 1])))
  166. 166. (defn fibonacci [] (map first (iterate (fn [[a b]] [b (+ a b)]) [0 1])))(take 20 (fibonacci)); (0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 15972584 4181)
  167. 167. STM
  168. 168. (def fulano-balance (ref 100))(def mengano-balance (ref 80))
  169. 169. (def fulano-balance (ref 100))(def mengano-balance (ref 80))(dosync (ref-set fulano-balance (+ @fulano-balance 20)) (ref-set mengano-balance (- @mengano-balance 20)))
  170. 170. (def fulano-balance (ref 100))(def mengano-balance (ref 80))(dosync (ref-set fulano-balance (+ @fulano-balance 20)) (ref-set mengano-balance (- @mengano-balance 20)))@fulano-balance; 120
  171. 171. (def fulano-balance (ref 100))(def mengano-balance (ref 80))(dosync (ref-set fulano-balance (+ @fulano-balance 20)) (ref-set mengano-balance (- @mengano-balance 20)))@fulano-balance; 120@mengano-balance; 60
  172. 172. (dosync (alter fulano-balance + 20) (alter mengano-balance - 20))
  173. 173. (dosync (alter fulano-balance + 20) (alter mengano-balance - 20))@fulano-balance; 140
  174. 174. (dosync (alter fulano-balance + 20) (alter mengano-balance - 20))@fulano-balance; 140@mengano-balance; 40
  175. 175. More interesting things about Clojure
  176. 176. More interesting things about ClojureWeb development with Compojure
  177. 177. More interesting things about ClojureWeb development with Compojure
  178. 178. You should try Clojure if...
  179. 179. ...you like both Lisp and the functional approach
  180. 180. ...you need/want Java/JVM interoperability
  181. 181. 5
  182. 182. Ujfalusi
  183. 183. <
  184. 184. >
  185. 185. -
  186. 186. http://github.com/porras/ ujfalusi
  187. 187. You should create your own language if...
  188. 188. ...you want to learn about how languages internally work
  189. 189. ...you want to have fundoing something very geek
  190. 190. ...your favorite playerleaves your team and breaks your heart
  191. 191. And thewinneris...
  192. 192. ME!
  193. 193. Fun
  194. 194. New abstractions
  195. 195. New tools
  196. 196. Polyglotism
  197. 197. Go out
  198. 198. Play
  199. 199. Break something
  200. 200. Have fun
  201. 201. Thank you! :)

×