{"id":18021376,"url":"https://github.com/adityaathalye/clojure-by-example","last_synced_at":"2025-08-10T22:03:10.198Z","repository":{"id":50148511,"uuid":"113309573","full_name":"adityaathalye/clojure-by-example","owner":"adityaathalye","description":"Workshop for programmers who are new to Clojure.","archived":false,"fork":false,"pushed_at":"2024-03-05T07:31:43.000Z","size":205,"stargazers_count":97,"open_issues_count":0,"forks_count":58,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-07-17T16:56:48.718Z","etag":null,"topics":["clojure","clojure-tutorial","study","training-materials","tutorial","tutorial-sourcecode","workshop-material"],"latest_commit_sha":null,"homepage":"https://www.evalapply.org/tags/clojure","language":"Clojure","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/adityaathalye.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-12-06T11:48:10.000Z","updated_at":"2025-07-16T12:07:40.000Z","dependencies_parsed_at":"2024-10-30T06:40:00.690Z","dependency_job_id":null,"html_url":"https://github.com/adityaathalye/clojure-by-example","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/adityaathalye/clojure-by-example","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adityaathalye%2Fclojure-by-example","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adityaathalye%2Fclojure-by-example/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adityaathalye%2Fclojure-by-example/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adityaathalye%2Fclojure-by-example/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/adityaathalye","download_url":"https://codeload.github.com/adityaathalye/clojure-by-example/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adityaathalye%2Fclojure-by-example/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":269794094,"owners_count":24476739,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-10T02:00:08.965Z","response_time":71,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["clojure","clojure-tutorial","study","training-materials","tutorial","tutorial-sourcecode","workshop-material"],"created_at":"2024-10-30T06:09:49.695Z","updated_at":"2025-08-10T22:03:10.160Z","avatar_url":"https://github.com/adityaathalye.png","language":"Clojure","readme":"- [Introduction](#introduction)\n  - [Intended usage](#intended-usage)\n  - [Contributions](#contributions)\n  - [Workshop Goals](#workshop-goals)\n  - [Workshop Anti-Goals](#workshop-anti-goals)\n- [Suggested learning mindset](#suggested-learning-mindset)\n- [Setup Instructions](#setup-instructions)\n- [Course Design Philosophy](#course-design-philosophy)\n- [Credits](#credits)\n- [Copyright and License](#copyright-and-license)\n\n# Introduction\n\nThis workshop aims to get your brain and fingers accustomed to just enough of\nthe [Clojure](https://clojure.org) programming language to start doing useful things with it.\n\nIn other words, \"What could one do with just a _little_ bit of Clojure?\".\n\n## What is Clojure?\n\nClojure is an interactive functional programming language that can run on many platforms\nlike the [JVM](https://clojure.org/about/jvm_hosted), [.NET CLR](https://clojure.org/about/clojureclr), [Javascript](https://clojurescript.org/) (browsers, nodeJS, React Native), as [native binaries](https://github.com/BrunoBonacci/graalvm-clojure) via Graalvm, and even as [shell scripts](https://babashka.org/)!\n\nIt is [used by software teams worldwide](https://clojure.org/community/success_stories#) to deliver\nhigh-value software systems at giant companies like Apple, Walmart, to \"decacorns\"\nlike GoJek, Nubank, to a wide array of startups, and one-person businesses like Partsbox.com.\n\nIts interactivity and dynamism foster a sense of playfulness that attracts all manner\nof [creative makers](http://radar.oreilly.com/2015/05/creative-computing-with-clojure.html)---hobbyist as well as serious artists and musicians.\n\nA small but vibrant [global community](https://clojure.org/community/user_groups) is [busy building amazing things](https://github.com/trending/clojure?since=monthly) with the language.\n\n## Intended usage\n\n- Support a 1-day guided workshop for programmers new to Clojure (not absolute programming beginners).\n- Also function as at-home learning material for said programmers.\n- The `master` branch is heavily commented, for at-home use.\n- A `solutions` branch will be available, as a companion to `master`.\n  But don't peek at it in advance!\n- You may see a `workshop-code` branch. Ignore it. It is meant only for\n  workshop use, and is subject to deletion/re-creation.\n- Incidentally, if you landed here while searching for Hirokuni Kim's\n  \"[Clojure By Example](https://kimh.github.io/clojure-by-example/)\", well, follow the link!\n\n## Contributions\n\n- If you find bugs or errors, please send a PR (but please\n  don't change the course structure or pedagogy).\n\n## Workshop Goals\n\n- Acquire a \"feel\" of Clojure, for further self-study/exploration.\n- Learn how Clojurists usually think with Clojure to solve problems.\n- See how it's not so hard to do surprisingly powerful things with a\n  mere handful of \"primitive\" functions, data structures, and ideas.\n- Get you started with a good development setup and workflow that will\n  serve you well if (when) you continue to program with Clojure, as a\n  hobby, or at work!\n\n## Workshop Anti-Goals\n\n- Try to explain Functional Programming theory or Clojure's innards.\n  (Many free and paid tutorials and books do so very well.)\n- Try to fully cover Clojure primitives/features. (That's homework!)\n- Devolve into language wars, editor wars, syntax wars, type wars...\n  (Life's too short, people.)\n- Focus too much on tooling or operational things. (At least not\n  while there's fun to be had!)\n\n# Suggested learning mindset\n\n- Think of this as an exercise in \"constrained creativity\".\n- Ignore details, achieve much with as little know-how as possible.\n- Focus on what things do; not what they are, or why they are.\n- Inform your _intuition for doing things_, and then use that to\n  dive deeper into all the juicy details at your own pace, later.\n\nTake what is useful, discard the rest.\n\n# Setup Instructions\n\nJust do the following one by one, and you should be fine.\n\n## Java\n\nYou need Java installed.\n\n- Run `java -version` in your terminal.\n- If Java is not installed, please [download and install Java from here](https://adoptopenjdk.net/).\n- Any version should do, but prefer Java 8 or higher. We have not tested\n  this project with Java 7.\n- Once you are done, `java -version` should show you a Java version.\n\n## VSCode + Calva\n\nWe support VSCode + Calva IDE in the classroom for this workshop. We suggest you use this setup, unless of course, you have already configured your favourite editor for Clojure development. We've listed alternate starter kits below (IntelliJ, Vim, Emacs, Atom), _but_ please avoid [bikeshedding](http://catb.org/jargon/html/B/bikeshedding.html) editors. Just complete the workshop first!\n\n- Download and Install [VSCode](https://code.visualstudio.com/).\n- Open VSCode and complete the initialization process.\n- Open the \"Extensions\" Tab and search for \"Calva\", Install the \"Calva:\n  Clojure \u0026 ClojureScript Interactive Programming\" extension.\n- Alternatively you can visit the [Calva page](https://marketplace.visualstudio.com/items?itemName=betterthantomorrow.calva) to install it.\n\nOnce installed:\n\n- Clone the repository on your machine.\n- In VSCode Use File \u003e Open Folder... and open the cloned folder.\n- Notice that Calva activates.\n- Open the [Command Palette](https://code.visualstudio.com/docs/getstarted/userinterface#_command-palette) in VSCode using `⇧⌘P` on Mac or `Ctrl+Shift+P` on other systems.\n- Type \"Calva: Start Project REPL\" and choose \"Calva: Start a Project REPL and Connect (aka Jack-In)\" from the list.\n  - Select `deps.edn` when prompted for Project type. We are using [tools.deps](https://clojure.org/guides/deps_and_cli) for managing the project. You don't need to worry about it's details for this workshop.\n  - VSCode will create a new pane called 'output.calva-repl' and you will see `clj꞉user꞉\u003e` prompt in that screen.\n- You have a working REPL now!\n- Keep the [Paredit guide](https://calva.io/paredit/) handy, editing code will require some understanding of paredit.\n\n## Your favourite editor:\n\nYou may find instructions for your favourite editor at one of these pages. But there are only so many choices. Ultimately, you must pick your poison and run with it:\n\n- [\"Clojure Tools\" at clojure.org](https://clojure.org/community/tools)\n- [\"Essentials\" at clojure-doc.org](http://clojure-doc.org/articles/content.html#essentials)\n- [Christopher Bui says...](https://web.archive.org/web/20181223213500/https://cb.codes/what-editor-ide-to-use-for-clojure/)\n\n# Course Design Philosophy\n\nJust some peoples' opinion. You need not be slave to it ;-)\n\nAlmost anyone can hope to do more with more. Up to a point, that is.\n\nFar too often, we end up doing _less_ with more; bogged down by the\ncomplexity and blinding glitter of too much choice, and overabundance.\n\nFiguring out how to do more with less feeds our curiosity, and it often\nsatisfies and empowers us deeply.\n\nSo, may you stay small and achieve important things.\n\nLive long, and prosper.\n\\\\\\\\//\\_\n\n# Credits\n\n- [clj-pune](https://github.com/clj-pune) people, especially [kapilreddy](https://github.com/kapilreddy), and [jaju](https://github.com/jaju) for critique while making [\"pratham\"](https://github.com/clj-pune/pratham), the precursor to this project.\n- [adityaathalye](https://github.com/adityaathalye), [jysandy](https://github.com/jysandy), and [kapilreddy](https://github.com/kapilreddy) for course design, code reviews, critique, commits, and being the core teaching staff at the first edition of this workshop at IN/Clojure 2018.\n- All the workshop participants, and the many Clojurists who generously donated their time to make it successful.\n- [inclojure-org](https://github.com/inclojure-org) for being the umbrella under which this work happened.\n\n## Copyright and License\n\nCopyright © 2017-2024 [IN/Clojure](http://inclojure.org/).\n\nDistributed under the [MIT license](https://github.com/inclojure-org/clojure-by-example/blob/master/LICENSE).\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadityaathalye%2Fclojure-by-example","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fadityaathalye%2Fclojure-by-example","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadityaathalye%2Fclojure-by-example/lists"}