Giter VIP home page Giter VIP logo

enterprise-clojure-training's Introduction

Enterprise Clojure Training

"Clojure is serious business!" — Timothy Pratley

A Clojure training course for Developers and Senior Developers working on Enterprise software.

Please visit the Website to see the precompiled course material.

A list of companies and individuals offering Clojure training is here this page.

Rationale

Clojure has been in the "adopt" zone of the Thoughtworks tech radar since 2014. But companies face the challenge of how to prepare their staff to be productive using Clojure. Creating a structured enterprise style course material will enable more people to offer Clojure courses suitable for companies wanting to adopt Clojure.

Usage

Slides have Keyboard shortcuts.

Contributing

If you have suggestions on how to improve this course, I would love to hear them. Issues welcome. Pull requests welcome.

Developing

The manual and slides source material are under the docs directory. The material is written in asciidoc (.adoc) format, which gets compiled to HTML and PDF. They are built to HTML and PDF using Asciidoctor, and output to the site directory. Refer to the Writer’s Guide for syntax. Asciidoctor provides excellent document producing features and allows slides to be generated as RevealJS slideshows.

When editing the material, there are many live preview tools to chooose from here. I use the IntelliJ plugin as it is simple to install and works well. There is also a ./watch.sh command to build when the source file changes. The Web (Epiphany) browser reloads from disk when the HTML file changes.

Building

The easiest way to build is to run

./bb.sh

This script relies on bundler (See The Ruby way for more info). It will install dependencies and build the documents into html/pdf.

With installed CLI tools.

You can install asciidoctor, asciidoctor-pdf, and ascidoctor-revealjs locally and run

./build.sh

But installing these tools is a bit of a pain…​ so two ways to get the dependencies are provided:

The Ruby way

Requires Ruby.

You don’t need to install Asciidoctor. Asciidoctor is a dependency specified in the Gemfile. However you will need Ruby and Bundler to pull down the Asciidoctor and RevealJS plugin dependencies.

Requires Bundler:

gem install bundler

Pull the dependencies:

bundle --path=.bundle/gems --binstubs=.bundle/.bin

Now you can call the build script:

bundle exec ./build.sh

The ./bb.sh just does these two steps for you.

Rebuild on file modified

To have the build watch for file changes and rebuild automatically:

./watch.sh

You need entr (Event Notify Test Runner) installed for watch to work, I highly recomend it.

brew install entr

Or

apt install entr

The Docker way

Alternatively, if you prefer pulling a Docker image over installing dependencies:

docker run -v $(pwd):/documents/ asciidoctor/docker-asciidoctor /documents/build.sh

Deploying

TravisCI automatically deploys the latest version to GitHub Pages. Build Status

Manual deployment:

./deploy.sh

enterprise-clojure-training's People

Contributors

dependabot[bot] avatar echeran avatar rogererens avatar timothypratley avatar yatesco avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

enterprise-clojure-training's Issues

Syntax highlighting!

Hi,

Please add syntax highlighting for better readability to the code snippets!

Thank you.

Rephrase last question of chapter 1

The last question "How many digits are in 5 factorial?" should have the answer 3.
One can get that with "(count (str (* 5 4 3 2 1))" but the count and str functions have not been introduced yet. So I think the question might better be rephrased to something like "How much is 5 factorial?"

Compare to Mockito

People taking the course may be familiar with Mockito; so it would be useful to contrast this against with-redefs.

Move macros to the end, but make sure people can identify macros earlier

EC> Also, I think macros are not easy to wrap your mind around right off the bat, so you probably have heard me feel opinionated on this before, but I think either the macros chapter should be moved to the end, or it should be split into "using macros" and "creating macros", and the creating macros should certainly be moved to the end. People get frustrated at the first moment that they don't get something.

Improve macros motivation

EC>I understand macros best when I think of them as building up forms (in a "text-ish" (symbolic) space) destined to be run through "eval" (converts "text-y" forms of symbols into their resulting values). I got confused but I consulted Brave & True, which I think illustrates that point decently.

Broken link

Hi, this link goes to what it looks like a Vietnamese gaming site:

link

functional-programming chapter; improve examples and explain iterate

your exercises for functional-programming chapter rely heavily on iterate, but that's not brought up in the chapter. Exercise for the author: how do you solve those problems without iterate? (Doable, in theory.) More seriously, it might be better to defer those exercises in favor of something more related to map, reduce, and/or filter.

Also, maybe have an exercise to just rewrite an existing super nested expression using a threading macro, since the topic was covered? Ex, when already given:

(defn count-i-before-e
  [s]
  (count (filter #(= % [\i \e]) (partition 2 1 (seq s)))))

Try: (count-i-before-e "sieve") and (count-i-before-e "seize") Now rewrite using thread-last macro (->>):

(defn count-i-before-e
  [s]
  (->> s
       seq
       (partition 2 1)
       (filter #(= % [\i \e]))
       count))

I think some work can go into exercises for map/reduce/filter to replace the ones using iterate, what do you think? I would need some time to think on what to come up with ideas for that.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.