└── README.md /README.md: -------------------------------------------------------------------------------- 1 | # learning-clojure 2 | Resources and suggestions from the Boston Clojure Group for how to learn Clojure 3 | 4 | ## Curriculum 5 | 6 | ### Beginner 7 | - Environment Setup: Java, Leiningen, IDE (optional) or use [Try Clojure](http://tryclj.com/) 8 | - [Koans](http://clojurekoans.com/) to get a taste of Clojure (low barrier of entry, can try in small chunks, free) 9 | - Setup your favorite text editor for a Clojure dev workflow, particularly including the inline help functionality 10 | - Book or tutorial, one of: 11 | - (easy) Clojure for the brave and true (online tutorial) 12 | - (easy) Living Clojure 13 | - (mid) Clojure Programming 14 | - Do 15 | - Easy [4clojure problems](https://www.4clojure.com/problems) or clojure katas 16 | - Come to the Boston Clojure Group (or local one) 17 | - Get a Clojure mentor (how?) 18 | 19 | ### Advanced 20 | - Build a website with some web framework (ring, compojure, pedestal, etc) 21 | - Give a talk on your local Clojure Group meetup 22 | - Online videos (see list below) 23 | - Conferences 24 | - [Clojure/conj](http://clojure-conj.org/) 25 | - [Clojure/west](http://clojurewest.org/) 26 | - [EuroClojure](http://euroclojure.org/) 27 | - [StrangeLoop](https://thestrangeloop.com/) 28 | - [Poly Conf](http://polyconf.com/) 29 | 30 | ### Expert 31 | 32 | - Contributing to open source projects 33 | - [LightTable](https://github.com/LightTable) 34 | - [Incanter](https://github.com/incanter/incanter) 35 | - how about a list of easier projects people can contribute to? 36 | - [Github search on open clojure(script) issues with label 'helpwanted'](https://github.com/search?l=&q=extension%3Aclj+extension%3Acljs+label%3Ahelpwanted&ref=advsearch&type=Issues&utf8=%E2%9C%93) 37 | - [Github search on open clojure(script) issues with label 'newbie'](https://github.com/search?utf8=%E2%9C%93&q=extension%3Aclj+extension%3Acljs+label%3Anewbie&type=Issues&ref=searchresults) 38 | - Take part in https://clojurecup.com/ 39 | - Work at a [Clojure shop](http://clojure.org/companies) (TODO paste in Boston list) 40 | - Mentor someone to become Clojure programmer 41 | 42 | ### Teacher's Notes 43 | - Consider not mentioning the L-word. 44 | - Clojure's contempt for the comma is inspirational. 45 | - Begin with the value syntax leaving symbols and lists for last. 46 | - Tell them Clojure values are immutable like Java String if they know Java. 47 | - Bring [stickers](http://www.zazzle.com/clojure_stickers_1_5_sheet_of_20-217379761338416613). 48 | 49 | ## Books 50 | ### Beginner Books 51 | 52 | - [Programming Clojure](https://pragprog.com/book/shcloj2/programming-clojure) - Stuart Holloway 53 | - [Clojure for the brave and true](http://www.braveclojure.com/) 54 | - Not yet finished, but good/easy read for people who don't have much of programming background. 55 | - [Living Clojure](http://shop.oreilly.com/product/0636920034292.do) 56 | - Living Clojure starts out with a well-written beginner introduction to Clojure, covering basic syntax and core type and functions in a clear and easy to understand form. After the gentle intro however, there's a fairly abrupt jump to advanced topics including concurrency types, macros, multimethods and protocols. The second half of the book is a list of learning resources plus a curriculum sequence of problems meant to gradually build Clojure proficiency. 57 | - [Clojure from the ground up](https://aphyr.com/posts/301-clojure-from-the-ground-up-welcome) - good for people new to programming 58 | - [ClojureScript: Up and Running](http://shop.oreilly.com/product/0636920025139.do) 59 | - in case you're interested in cljs specifically. Bootstrap environment & get basics of clojure. 60 | 61 | ### Expert Books 62 | - [Clojure Programming](http://www.amazon.com/Clojure-Programming-Chas-Emerick/dp/1449394701/ref=sr_1_1?ie=UTF8&qid=1431646066&sr=8-1&keywords=clojure+programming) - Chas Emerick et. al. 63 | - [Joy of Clojure](http://www.amazon.com/dp/1617291412/ref=sr_1_1?ie=UTF8&tag=fogus-20) - very in depth about Protocols 64 | - [Clojure In Action](http://www.manning.com/rathore/) 65 | - [Java Concurrency in Practice](http://www.amazon.com/Java-Concurrency-Practice-Brian-Goetz/dp/0321349601) (About java but explains the problems Clojure is solving) 66 | - [Mastering Clojure Macros](https://pragprog.com/book/cjclojure/mastering-clojure-macros) 67 | 68 | ### Special Domain 69 | - [Web Development with Clojure](http://www.amazon.com/Web-Development-Clojure-Build-Bulletproof/dp/1937785645/ref=pd_sim_14_2?ie=UTF8&refRID=1XCZZAQS6D1XGFK3SD5Y) 70 | - [Clojure Web Development Essentials](http://www.amazon.com/Clojure-Development-Essentials-Ryan-Baldwin/dp/1784392227/ref=pd_sim_14_10?ie=UTF8&refRID=0CVDV1WMBASVFJSJJJWB) 71 | - [Mastering Clojure Data Analysis](http://www.amazon.com/Mastering-Clojure-Data-Analysis-Rochester/dp/1783284137/ref=pd_sim_14_2?ie=UTF8&refRID=1X482550WHF1S5ESTDBW) 72 | - [Clojure Data Analytics Cookbook](http://www.amazon.com/Clojure-Analysis-Cookbook-Second-Edition/dp/1784390291/ref=pd_sim_14_2?ie=UTF8&refRID=0JG9268N8309HFVKN5PW) 73 | - [Clojure for Machine Learning](http://www.amazon.com/Clojure-Machine-Learning-Akhil-Wali/dp/1783284358) 74 | 75 | ### General Lisp thinking 76 | - [SICP](http://mitpress.mit.edu/sicp/full-text/book/book.html) - theory of programming (CS textbook, written for Scheme) 77 | - [The Little Schemer](http://www.amazon.com/The-Little-Schemer-4th-Edition/dp/0262560992) (only ~50 pages, thinking recursively in Scheme) 78 | - [The Reasoned Schemer](http://mitpress.mit.edu/books/reasoned-schemer) (miniKanren and logic programming in Scheme) 79 | - [On Lisp](http://www.paulgraham.com/onlisp.html) (thinking in Lisp and macrology) 80 | 81 | ## Videos 82 | - [Simple Made Easy](https://www.youtube.com/watch?v=rI8tNMsozo0) - Rich Hickey 83 | - [Are We There Yet](https://github.com/matthiasn/talk-transcripts/blob/master/Hickey_Rich/AreWeThereYet.md) - Rich Hickey 84 | - [SICP Video Lectures](http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-001-structure-and-interpretation-of-computer-programs-spring-2005/video-lectures/) - Hal Abelson and Gerald Jay Sussman 85 | - [The Value of Values](https://www.youtube.com/watch?v=-6BsiVyC1kM) - Rich Hickey 86 | - [Implementation details of core.async Channels](https://vimeo.com/100518968) - Rich Hickey 87 | - [Designing Front End Applications with core.async](http://go.cognitect.com/core_async_webinar_recording) - David Nolen 88 | - [Inside Transducers](https://www.youtube.com/watch?v=4KqUvG8HPYo) - Rich Hickey 89 | - [#Clojure](https://www.youtube.com/playlist?list=PLNJGW63UO7bpKNU1_fpxaQWOgyO_Ubn3l) 90 | - [ClojureTV](https://www.youtube.com/user/ClojureTV/playlists) 91 | 92 | ## Libraries 93 | - [Clojure Werkz](http://clojurewerkz.org/) 94 | - [Arcadia](https://github.com/arcadia-unity/Arcadia) - Clojure in Unity 95 | - [Clojure Toolbox](http://www.clojure-toolbox.com/) 96 | - https://crossclj.info 97 | 98 | ## Tutorials 99 | - [Beginner Web REPL](http://www.tryclj.com/) 100 | - [Clojure MOOC](http://mooc.fi/courses/2014/clojure/) 101 | - http://www.lisperati.com/clojure-spels/casting.html 102 | - [Using Emacs with Clojure](http://www.braveclojure.com/using-emacs-with-clojure/) 103 | - [Light Table interactive ClojureScript tutorial](https://github.com/swannodette/lt-cljs-tutorial) 104 | - [ClojureScript 101](http://swannodette.github.io/2013/11/07/clojurescript-101/) - using core.async to build search for image from wiki 105 | - [om tutorial](https://github.com/omcljs/om/wiki/Basic-Tutorial) 106 | - [Learn Datalog Today](http://www.learndatalogtoday.org/) - [Datalog](http://en.wikipedia.org/wiki/Datalog) tutorial (something you might heard of when looking into Datomic/Datascript) 107 | 108 | ## Problem sites 109 | - http://clojurekoans.com/ 110 | - http://clojurescriptkoans.com/ 111 | - http://www.4clojure.com/problems 112 | - http://exercism.io (great site but the problem set is language-universal and some of them are un-idiomatic in a functional language) 113 | - http://www.codewars.com/ 114 | - https://www.codingame.com/home 115 | 116 | ## Clojure Documentation 117 | - [Grimoire](http://conj.io/) 118 | - http://clojuredocs.org 119 | - http://clojure-doc.org 120 | 121 | ## Build / Dependency Tools 122 | - [Leiningen](http://leiningen.org/) 123 | - [Boot](http://boot-clj.com/) 124 | - [Maven](https://maven.apache.org/) 125 | - [Clojars](https://clojars.org/) 126 | - [cljsjs](http://cljsjs.github.io/) 127 | 128 | ## Editors and IDEs 129 | - Emacs ([cider](https://github.com/clojure-emacs/cider) , company-mode, auto-complete, [smartparens](https://github.com/Fuco1/smartparens) ) (spacemacs?) Aquamacs! 130 | - Vim ([fireplace](https://github.com/tpope/vim-fireplace), [vim-leiningen](https://github.com/tpope/vim-leiningen), paredit, [rainbow-parentheses](https://github.com/eapache/rainbow_parentheses.vim)) 131 | - IntelliJ ([Cursive](https://cursiveclojure.com/)) 132 | - Eclipse ([Counterclockwise](http://doc.ccw-ide.org/documentation.html)) 133 | - [Light Table](http://lighttable.com/) 134 | - [Sublime Text](https://sublimetext.com/) (+ [paredit](https://github.com/odyssomay/paredit) & [lisp-indent](https://github.com/odyssomay/sublime-lispindent)) 135 | - [Textmate](https://macromates.com/) 136 | - [Atom](https://atom.io/) - clojure mode, paredit, nrepl-eval, emacs bindings 137 | 138 | ## Testing 139 | - [midje](https://github.com/marick/Midje) 140 | - [clojure.test](http://blog.jayfields.com/2010/08/clojuretest-introduction.html) 141 | - [test.check](https://github.com/clojure/test.check) 142 | 143 | ## ClojureScript 144 | - [figwheel](https://github.com/bhauman/lein-figwheel) - lein plugin to enable livereload experience (blogpost with demo) 145 | - [datascript](https://github.com/tonsky/datascript) - Immutable database and Datalog query engine in ClojureScript 146 | - [om](https://github.com/omcljs/om)/[reagent](https://github.com/reagent-project/reagent)/[quiescent](https://github.com/levand/quiescent)/[rum](https://github.com/tonsky/rum) 147 | - [chestnut](https://github.com/plexus/chestnut) 148 | - [devcards](https://github.com/bhauman/devcards) 149 | 150 | ## Clojure in Production 151 | - usual Jar deployment workflows 152 | - docker-clojure 153 | 154 | ## Alternative platforms 155 | - ClojureScript 156 | - [Python](http://halgari.github.io/clojure-py/) 157 | - [CLR](https://github.com/clojure/clojure-clr) 158 | - [Pixie](https://github.com/pixie-lang/pixie.git) 159 | 160 | ## Clojure-inspired / transpilers 161 | - [wisp](https://github.com/Gozala/wisp) (JavaScript Lisp) 162 | - [Hy](http://docs.hylang.org/) (Python Lisp) 163 | 164 | ## Clojure Presentations 165 | - [Better Living Through Clojure](https://docs.google.com/presentation/d/1y8TJECz9b1n_gTgeL2qdXWXThkiPnZ1gXGozfkPsWcY/edit#slide=id.p) - MIT IAP 2015 Presentation 166 | 167 | ## Clojure Online Forums / Sites / Newsletters 168 | - Clojure IRC Channel #clojure [log](http://clojure-log.n01se.net/) 169 | - ClojureScript IRC Channel #clojurescript [logs](http://logs.lazybot.org/irc.freenode.net/%23clojurescript) 170 | - [Clojure Google Group](https://groups.google.com/forum/#!forum/clojure) 171 | - [ClojureScript Google Group](https://groups.google.com/forum/#!forum/clojurescript) 172 | - [Clojure Users](https://www.linkedin.com/groups?home=&gid=1058217) on LinkedIn 173 | - [Clojure Subreddit](http://www.reddit.com/r/clojure) 174 | - Clojure Gazette - Newsletter by Eric Normand 175 | 176 | ## Single Topic Posts 177 | - [Clojure Destructuring](http://blog.jayfields.com/2010/07/clojure-destructuring.html) - Jay Fields 178 | 179 | ## Meta-lists 180 | - [Top Clojure Articles article](http://adambard.com/blog/greatest-clojure-hits/) 181 | - [Awesome Clojure](https://github.com/razum2um/awesome-clojure) 182 | - [Learn Clojure](http://learn-clojure.com/) 183 | - [Clojure stuff](https://github.com/mindreframer/clojure-stuff) by @mindreframer 184 | 185 | ## Cheatsheets 186 | - [ClojureScript](- http://cljs.info/cheatsheet/) 187 | - [Clojure](http://clojure.org/cheatsheet) 188 | - [Paredit](http://emacswiki.org/emacs/PareditCheatsheet) 189 | 190 | ## Common Beginner Hurdles 191 | - Environment setup (Cider and Leiningen helped me) 192 | - [So many parens](http://www.thejach.com/imgs/lisp_parens.png)!! (But not so many as other LISPs!) 193 | - Immutable everything 194 | - Writing loops 195 | - [Contrib library got reorganized](http://dev.clojure.org/display/community/Where+Did+Clojure.Contrib+Go) 196 | - there needs to be a resource to help solve [command line bullshittery](http://pgbovine.net/command-line-bullshittery.htm) 197 | - Emacs [C-x M-c M-](https://i2.wp.com/imgs.xkcd.com/comics/real_programmers.png?resize=740%2C406) [16-fingers](http://fc04.deviantart.net/fs71/i/2011/029/8/3/emacs_user_at_work_by_earlcolour-d38aj2x.jpg) bullshittery 198 | - Doubt about the usefulness of LISP (stereotype about it being a dead language used only [for AI](https://image.slidesharecdn.com/clojure-110806031926-phpapp01/95/clojure-7-728.jpg)) I think this is totally dated - the grad students and other younger people I work with know nothing about this. Put another way, it's irrelvant. 199 | 200 | ## Boston Clojure Group Resources 201 | - [Boston Clojure Group Meetup](http://www.meetup.com/Boston-Clojure-Group/) - Usually the 3rd Thursday of every month at Akamai, Kendall Sq. 202 | - [Boston Clojure Group Google Group](https://groups.google.com/forum/#!forum/boston-clojure) 203 | - [Boston Clojure Group Github](https://github.com/boston-clojure) 204 | - Boston Clojure Group Hashtag: #bosclj 205 | 206 | --------------------------------------------------------------------------------