A presentation designed to get someone started with a clojure development environment and on the path to learning clojure.

presentation.tex 5.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. \documentclass{beamer}
  2. \title{Beginning Clojure}
  3. \subtitle{from theory to code}
  4. \author{Lily Carpenter}
  5. \institute{https://gitlab.com/azrazalea/}
  6. \mode<presentation> {\usetheme{Dresden}}
  7. \date{}
  8. \usepackage[latin1]{inputenc}
  9. \usepackage{times}
  10. \usepackage[T1]{fontenc}
  11. \usepackage[english]{babel}
  12. \usepackage{hyperref}
  13. \usepackage{minted}
  14. \usepackage{upquote}
  15. \AtBeginDocument{%
  16. \def\PYZsq{\textquotesingle}%
  17. }
  18. \begin{document}
  19. \begin{frame}
  20. \titlepage
  21. \end{frame}
  22. \begin{frame}
  23. \frametitle{Summary}
  24. \tableofcontents
  25. \end{frame}
  26. \section{Clojure in Theory}
  27. \begin{frame}
  28. \frametitle{Reasons for Clojure}
  29. \begin{itemize}
  30. \item{A Lisp}
  31. \item{for Functional Programming}
  32. \item{symbiotic with an established Platform}
  33. \item{designed for Concurrency}
  34. \end{itemize}
  35. \url{http://clojure.org/rationale}
  36. \end{frame}
  37. \begin{frame}
  38. \frametitle{Fundamental Concepts of Clojure}
  39. \begin{itemize}
  40. \item{Simplicity}
  41. \item{Freedom to focus}
  42. \item{Empowerment}
  43. \item{Clarity}
  44. \item{Consistency}
  45. \end{itemize}
  46. \textit{The Joy of Clojure} by Michael Fogus
  47. \end{frame}
  48. \begin{frame}
  49. \includegraphics[keepaspectratio=true,width=.75\paperwidth]{clojure_foundations.png}
  50. \textit{The Joy of Clojure} figure 1.1
  51. \end{frame}
  52. \section{Development Environments}
  53. \begin{frame}
  54. \frametitle{Development Environments}
  55. In order of popularity.
  56. \begin{itemize}
  57. \item{Emacs (The one true operating system)[use CIDER]}
  58. \item{Cursive (IntelliJ plugin now, standalone in the future)}
  59. \item{Vim (fireplace.vim seems to be the popular plugin)}
  60. \item{Light Table (Default clojure support?)}
  61. \end{itemize}
  62. \url{https://cognitect.wufoo.com/reports/state-of-clojure-2014-results/}
  63. \end{frame}
  64. \begin{frame}
  65. \frametitle{Emacs}
  66. \begin{itemize}
  67. \item{Large learning curve if you haven't used it before.}
  68. \item{I generally recommend heavy use of emacs if and only if you plan on customizing your own config.}
  69. \item{Most popular clojure IDE by a large margin.}
  70. \item{Not specific to clojure.}
  71. \end{itemize}
  72. \url{http://www.braveclojure.com/basic-emacs/}
  73. \end{frame}
  74. \begin{frame}
  75. \frametitle{Cursive}
  76. \begin{itemize}
  77. \item{``Just works'', simple to setup and start using.}
  78. \item{May be better if you want to avoid the emacs learning curve.}
  79. \item{Narrowly the second most used clojure IDE over vim with fireplace.}
  80. \item{Not yet a 1. 0 release.}
  81. \item{IntelliJ is not specific to clojure.}
  82. \end{itemize}
  83. \url{https://cursiveclojure.com/}
  84. \end{frame}
  85. \begin{frame}
  86. \frametitle{Vim}
  87. \begin{itemize}
  88. \item{Well supported for vim veterans.}
  89. \item{Would not recommend personally if you don't already know vim (learn emacs instead).}
  90. \item{Not specific to clojure.}
  91. \end{itemize}
  92. \url{https://github.com/tpope/vim-fireplace}
  93. \end{frame}
  94. \begin{frame}
  95. \frametitle{Light Table}
  96. \begin{itemize}
  97. \item{Another ``just works'' kind of option.}
  98. \item{Don't have to install anything extra for clojure support (though you'll want a build environment).}
  99. \item{Not specific to clojure}
  100. \end{itemize}
  101. \url{http://docs.lighttable.com/}
  102. \end{frame}
  103. \section{Build Environments}
  104. \begin{frame}
  105. \frametitle{Build environments}
  106. \begin{itemize}
  107. \item{Leiningen (98\% of clojurists use per survey)}
  108. \item{Boot (cool newcomer to the scene, worth trying out probably)}
  109. \end{itemize}
  110. \url{http://leiningen.org/}
  111. \url{https://github.com/tailrecursion/boot}
  112. \end{frame}
  113. \section{Simple Examples}
  114. \begin{frame}[fragile]
  115. \frametitle{Hello World}
  116. \begin{minted}{clojure}
  117. (ns hello-world.core
  118. (:gen-class)) ; Generate a java class
  119. (defn -main
  120. "I don't do a whole lot ... yet."
  121. [& args]
  122. (println "Hello, World!"))
  123. \end{minted}
  124. \end{frame}
  125. \begin{frame}[fragile]
  126. \frametitle{Thread First Macro}
  127. \begin{minted}{clojure}
  128. (-> "a b c d"
  129. .toUpperCase ; Calling directly to java
  130. (.replace "A" "X")
  131. (.split " ")
  132. first)
  133. \end{minted}
  134. \url{http://clojuredocs.org/clojure.core/->}
  135. \end{frame}
  136. \begin{frame}[fragile]
  137. \frametitle{Thread Last Macro}
  138. \begin{minted}{clojure}
  139. (->> (range)
  140. (map #(* % %)) ; Anonymous function
  141. (filter even?)
  142. (take 10)
  143. (reduce +))
  144. \end{minted}
  145. \url{http://clojuredocs.org/clojure.core/->>}
  146. \end{frame}
  147. \begin{frame}[fragile]
  148. \frametitle{Anonymous Functions}
  149. \begin{minted}{clojure}
  150. (fn [x y]
  151. (+ x y))
  152. #(+ %1 %2)
  153. #(+ % %) ; Only takes 1 argument
  154. \end{minted}
  155. \end{frame}
  156. \section{Resources}
  157. \begin{frame}
  158. \frametitle{Learning}
  159. \begin{itemize}
  160. \item{Clojure for the Brave and True \url{http://www.braveclojure.com/}}
  161. \item{\textit{The Joy of Clojure} \url{http://www.joyofclojure.com/}}
  162. \end{itemize}
  163. \end{frame}
  164. \begin{frame}
  165. \frametitle{Reference}
  166. \begin{itemize}
  167. \item{Grimoire \url{http://conj.io/}}
  168. \item{Clojure Docs \url{https://clojuredocs.org/}}
  169. \item{Cheatsheets \url{https://github.com/jafingerhut/clojure-cheatsheets}}
  170. \item{Clojure Toolbox(library listing) \url{http://www.clojure-toolbox.com/}}
  171. \end{itemize}
  172. \end{frame}
  173. \begin{frame}
  174. \frametitle{Practice}
  175. \begin{itemize}
  176. \item{4clojure \url{http://www.4clojure.com/}}
  177. \item{Clojure Koans \url{http://clojurekoans.com/}}
  178. \item{Exercism(not clojure specific) \url{http://exercism.io/}}
  179. \end{itemize}
  180. \end{frame}
  181. \section{Questions?}
  182. \begin{frame}
  183. \begin{center}
  184. \Huge Questions?
  185. \end{center}
  186. \end{frame}
  187. \end{document}