diff --git a/Programming Languages/Clojure/readme.md b/Programming Languages/Clojure/readme.md new file mode 100644 index 00000000..017953aa --- /dev/null +++ b/Programming Languages/Clojure/readme.md @@ -0,0 +1,726 @@ +# Clojure + +Clojure is a high level, dynamic functional programming language. It is designed, based on the LISP programming language, and has compilers that makes it possible to be run on both Java and .Net runtime environment. +It is based on the LISP programming language which makes its code statements smaller than traditional programming languages.It is a functional programming language. +It focuses on immutability which is basically the concept that you should not make any changes to objects which are created in place. +It can manage the state of an application for the programmer. +It supports concurrency. + +This currated collection of resources are fairly comprehensive and covers various functions involved in Clojure. All the functions are explained using examples for easy understanding. + + +## Table of Contents + +- [Clojure](#clojure-1) + - [Introduction](#introduction) + - [Fundamentals](#fundamentals) + - [Collections](#collections) + - [Namespaces and Libraries](#namespaces-and-libraries) +- [Editors and Environment Setup](#editors-and-environment-setup) +- [Programming at the REPL](#programming-at-the-repl) +- [Database](#database) +- [Data Validation](#data-validation) +- [Testing and Debugging](#testing-and-debugging) + - [Testing](#testing) + - [Debugging](#debugging) +- [Youtube](#youtube) +- [Books](#books) +- [Courses](#courses) +- [Communities](#communities) +- [Websites](#websites) +- [Conclusion](#conclusion) + +### Clojure +> This currated collection of resources are fairly comprehensive and covers various functions involved in Clojure. + +### Introduction + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Resource NameDescription
Overview of ClojureAn overview of the Clojure programming language.
What is Clojure?A blog post explaining what Clojure is.
History and Evolution of ClojureAn article detailing the history and evolution of Clojure.
Key Features and AdvantagesAn article highlighting the key features and advantages of Clojure.
Clojure vs. Other Lisp DialectsA comparison of Clojure and other Lisp dialects.
Functional ProgrammingAn introduction to functional programming concepts in Clojure.
Setting Up ClojureA guide on how to set up Clojure.
Installing ClojureA detailed guide on installing Clojure.
Setting Up a Development EnvironmentInstructions on setting up a development environment for Clojure.
+ +### Fundamentals + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Resource NameDescription
Basic SyntaxIntroduction to the basic syntax of Clojure.
Symbols and Data Types (Numbers, Strings, Keywords, Symbols)Overview of Clojure's symbols and data types.
Basic Arithmetic and String OperationsGuide to performing arithmetic and string operations in Clojure.
Comments and DocumentationInformation on writing comments and documentation in Clojure.
Clojure - REPLIntroduction to the Read-Eval-Print Loop (REPL) in Clojure.
Clojure - VariablesGuide on using variables in Clojure.
Clojure - LoopsOverview of loop constructs in Clojure.
Clojure - Decision MakingIntroduction to decision-making constructs in Clojure.
Clojure - FunctionsGuide to defining and using functions in Clojure.
Clojure - NumbersOverview of number operations in Clojure.
Clojure - RecursionIntroduction to recursion in Clojure.
Clojure - File I/OGuide to file input and output operations in Clojure.
Clojure - Exception HandlingOverview of exception handling in Clojure.
+ +### Collections + + + + + + + + + + + + + + + + + + + + + + +
Resource NameDescription
ListsGuide to using lists in Clojure.
VectorsOverview of vectors in Clojure.
MapsIntroduction to maps in Clojure.
SetsGuide to using sets in Clojure.
+ + +### Namespaces and Libraries + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Resource NameDescription
NamespacesOfficial documentation on namespaces in Clojure.
Creating and Using NamespacesGuide on creating and using namespaces in Clojure.
Namespace Aliasing and ReferencingDiscussion on aliasing and referencing namespaces.
Using LibrariesOverview of using libraries in Clojure.
The Clojure EcosystemExploration of the Clojure ecosystem, particularly for web development.
Finding and Using Libraries with LeiningenGuide to adding libraries to Clojure projects using Leiningen.
Popular LibrariesOverview of popular libraries in the Clojure ecosystem.
+ +### Editors and Environment Setup +> Setting up Clojure development environments using various editors like Cursive, Emacs, Vim, VS Code, and Sublime. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Resource NameDescription
Cursive with IntelliJIntelliJ plugin for Clojure development, offering robust support and integration.
clojure-extrasAdditional features for Clojure development in IntelliJ.
EmacsCIDER, the Clojure Interactive Development Environment that Rocks, for Emacs.
VimVim plugin for Clojure development with a powerful interactive environment.
Calva with VS CodeVS Code extension for Clojure and ClojureScript, providing interactive development support.
Sublime with Clojure SublimedSublime Text plugin for Clojure, offering syntax highlighting and other features.
Visual Studio Code - CalvaComprehensive Clojure development support for VS Code, including REPL integration and debugging.
+ +### Programming at the REPL +> Provides guides on programming at the REPL, including basic usage, data visualization, navigating namespaces, and enhancing workflow. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Resource NameDescription
IntroductionAn introduction to programming at the REPL (Read-Eval-Print Loop) in Clojure, explaining its importance and benefits.
Launching a basic REPLA guide on how to launch a basic REPL in Clojure, providing step-by-step instructions for setting it up.
Basic UsageExplains the basic usage of the REPL in Clojure, covering evaluation, printing results, and interacting with expressions.
Data Visualization at the REPLGuidance on visualizing data at the REPL in Clojure, including techniques for displaying data structures and results.
Navigating namespacesExplains how to navigate namespaces at the REPL in Clojure, covering techniques for exploring and managing namespaces.
Enhancing your REPL workflowProvides tips and techniques for enhancing your workflow at the REPL in Clojure, including customization and productivity tools.
Guidelines for REPL-Aided DevelopmentOffers guidelines and best practices for leveraging the REPL for development in Clojure, covering topics such as testing and debugging.
+ +### Database +> Introduces various databases and libraries available for data storage and manipulation in Clojure. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Resource NameDescription
DatomicDatomic is a database with an emphasis on immutability and time.
xtdbxtdb is a bitemporal database for SQL, Datalog & graph queries.
DatahikeDatahike is a durable, immutable, append-only database with time-traveling queries.
DatascriptDatascript is an immutable in-memory database and Datalog query engine in ClojureScript.
DatalevinDatalevin is a distributed database designed to support a high volume of concurrent writes and reads.
next.jdbcnext.jdbc is a Clojure wrapper for JDBC, providing a simpler, more idiomatic way to interact with databases.
clojure.java.jdbcclojure.java.jdbc is a low-level JDBC wrapper for Clojure, providing direct access to SQL operations.
clojure.jdbcclojure.jdbc is a high-level JDBC library for Clojure, providing a more functional approach to database operations.
cravendbcravendb is a Clojure client for RavenDB, a distributed document database.
MongerMonger is a MongoDB driver for Clojure, providing a simple and idiomatic way to interact with MongoDB.
MongloriousMonglorious is a MongoDB driver for Clojure, built on top of the official MongoDB Java driver.
clj-rethinkdbclj-rethinkdb is a RethinkDB driver for Clojure, providing a simple and idiomatic way to interact with RethinkDB.
ReviseRevise is a RethinkDB client for Clojure, designed to be fast, efficient, and easy to use.
SpandexSpandex is an ElasticSearch client for Clojure, providing a high-level abstraction over the ElasticSearch REST API.
ElastischElastisch is a comprehensive ElasticSearch client for Clojure, providing a wide range of features and utilities.
neoconsneocons is a Neo4j client for Clojure, providing a simple and idiomatic way to interact with Neo4j.
AliaAlia is a Cassandra client for Clojure, offering a flexible and efficient way to work with Cassandra databases.
aerospike-cljaerospike-clj is an Aerospike client for Clojure, providing seamless integration +
+ +### Data Validation +> Presents tools and libraries for validating data in Clojure applications. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Resource NameDescription
GuardrailsGuardrails is a data validation library for Clojure, providing tools for defining and enforcing data schemas.
MalliMalli is a data validation library for Clojure, offering a concise syntax for defining and validating complex data structures.
ValidateurValidateur is a library for data validation in Clojure, providing a range of built-in validators and support for custom validation rules.
Prismatic's schemaPrismatic's schema is a data validation and specification library for Clojure, allowing developers to define and validate data schemas.
BouncerBouncer is a data validation library for Clojure, providing tools for defining and enforcing data validation rules.
clovaclova is a data validation library for Clojure, offering a simple and expressive syntax for defining and validating data structures.
OrchestraOrchestra is a library for data validation and transformation in Clojure, providing tools for defining complex validation rules.
structstruct is a data validation library for Clojure, offering tools for defining and validating data structures with a focus on performance and simplicity.
domaintypesdomaintypes is a library for defining and validating domain-specific data types in Clojure, providing tools for ensuring data integrity and consistency.
+ +### Testing and Debugging +> Resources for testing and debugging Clojure code, including libraries, tools, and techniques. + + +### Testing + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Resource NameDescription
ExpectationsExpectations is a minimalist, expressive, extensible testing framework for Clojure and ClojureScript.
MidjeMidje is a testing framework for Clojure that enables a more flexible, readable, and enjoyable approach to testing.
test-doublestest-doubles is a library for creating test doubles in Clojure, including mocks, stubs, spies, and fakes.
kaochakaocha is a next-generation test runner for Clojure, designed for simplicity, speed, and extensibility.
StateFlowStateFlow is a property-based testing library for Clojure, providing powerful tools for specifying and testing stateful systems.
DatestDatest is a lightweight, yet powerful testing library for Clojure, offering a simple and intuitive way to write and run tests.
+ +### Debugging + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Resource NameDescription
flow-storm-debuggerA visual debugger for Clojure, providing powerful tools for inspecting and debugging running code.
playbackplayback is a tool for recording and replaying execution traces in Clojure, enabling easy debugging and analysis of program behavior.
tools.tracetools.trace is a library for tracing function calls in Clojure, allowing developers to observe and analyze program execution.
debuggerdebugger is a simple debugging tool for Clojure, providing basic features for inspecting and stepping through code.
debug-repldebug-repl is a Clojure REPL with enhanced debugging capabilities, allowing developers to interactively debug code.
ritzritz is a comprehensive debugging toolkit for Clojure, providing a range of tools for inspecting, tracing, and debugging code.
redlredl is a lightweight debugging library for Clojure, offering simple tools for inspecting and evaluating code in the REPL.
limit-breaklimit-break is a debugging library for Clojure, providing tools for tracing and inspecting function calls.
spyscopespyscope is a library for visualizing data flow in Clojure, helping developers understand and debug complex data transformations.
aprintaprint is a library for pretty-printing Clojure data structures, making it easier to inspect and debug complex data.
packed-printerpacked-printer is a library for compactly printing Clojure data structures, useful for debugging and inspecting large data sets.
prettypretty is a library for pretty-printing Clojure data structures with customizable formatting options.
proneprone is a debugging library for Clojure, providing tools for inspecting and handling exceptions in development and production environments.
figwheelfigwheel is a live reloading tool for ClojureScript development, allowing developers to see changes in their code instantly as they edit.
ultraultra is a comprehensive debugging tool for ClojureScript development, providing a range of features for inspecting, tracing, and profiling code.
mate-cljmate-clj is a debugging toolkit for Clojure, providing tools for tracing, inspecting, and debugging code in development and production environments.
+ +### Youtube +> Curated list of YouTube channels and videos for learning Clojure concepts and practices. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Resource NameDescription
Misophistful's channelUnderstand concepts such as list comprehension, threading macros, generative testing, destructuring, core.match, and introductions to Light Table, Datomic, and Game development with Clojure.
Fred Overflow's channelIntroductions to Functional programming and TDD with Clojure.
Clojure Pills screencastIntroduction to Clojure one function at a time.
Clojure Pills screencastFun and beginner-friendly content related to the overall Clojure ecosystem.
Data persistence with Postgres, Clojure and JDBCFocus on data persistence using Postgres, Clojure, and JDBC.
Clojure Tutorials by Timothy BaldridgeAdvanced videos on core.async, transducers, transients, logic programming, and a "Function of the day" series.
Clojure koans videosThe author guides you through the Koans from clojurekoans.com.
Clojure for the WebA great video about how to start using Clojure for the web.
+ +### Books +> Recommendations for books covering Clojure programming, ranging from beginner to advanced levels. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Resource NameDescription
Clojure for the Brave and TrueGood for beginners on Clojure, covers all the core features of the language. It has a free version available.
Descobrindo ClojureGood for beginners on functional programming in general, especially for Portuguese speakers. It guides you through functional concepts without academic jargon. Entirely in Brazilian Portuguese.
Clojure, The Essential ReferenceExtensive reference to the standard library with clear explanations, real-world examples, and background information. Designed to be used as a reference.
Getting ClojureCovers basic, intermediate, and advanced topics, explaining core aspects of Clojure, good practices, and functional programming concepts.
The Joy of ClojureA good reference book that goes deep into each core aspect of Clojure and explains them in detail.
ClojureScript: Up and RunningIntroduction to using ClojureScript, a variant of Clojure for web development.
Clojure ProgrammingA comprehensive guide to learning Clojure programming, covering a wide range of topics and practical examples.
Joy of ClojureAn in-depth exploration of Clojure, explaining core concepts and providing detailed examples.
Programming ClojureA practical guide to Clojure programming, offering insights and examples for building robust applications.
+ +### Courses +> Online courses and tutorials for learning Clojure programming. + + + + + + + + + + + + + + + +
Resource NameDescription
Alura Clojure courseAlura is a paid platform for learning technologies, aimed at Portuguese-Brazilian speakers.
Building Microservices with ClojureLearn to set up, build, and deploy microservices with Clojure using the Pedestal library. The course is in video format.
+ +### Communities +>Platforms and forums where Clojure developers can engage, seek help, and share knowledge. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Resource NameDescription
Official Stack Overflow style Q&A forumCommunity-driven question and answer forum for Clojure-related queries.
Clojurians SlackA great place to get help and connect with other Clojure developers.
Clojurians ZulipZulip chat archive for Clojurians.
Clojurians DiscordJoin the Clojurians community on Discord for discussions and support.
Reddit communitySubreddit for discussions, news, and information about Clojure.
Clojureverse communityForum for Clojure developers to discuss and share information.
+ +### Websites +>Useful websites, tutorials, and platforms for learning Clojure and accessing related resources. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Resource NameDescription
Clojure koansLearn Clojure using the Koan style, a "fill the blanks" approach to programming exercises.
PracticalliPractical approaches to learning Functional Programming with Clojure through YouTube broadcasts, screencasts, and online guides.
ClojurecademyAn online learning platform focused on teaching Clojure and its ecosystem, similar to Codecademy.
Clojure newbie guideA quick guide to Clojure and its ecosystem designed for beginners.
4ClojureA collection of Clojure exercises that cover the entire core aspects of the language.
Exercism clojurePlatform for leveling up programming skills through exercises, including a specific track for Clojure.
ClojureThe official website for Clojure, providing comprehensive resources, documentation, and community links.
Clojure SlackA Slack community for Clojure developers to share knowledge, ask questions, and collaborate on projects.
clojuredocsA community-powered documentation and example repository for Clojure.
clojure-docComprehensive documentation and tutorials for learning and using Clojure.
The Clojure ToolboxA categorized directory of libraries and tools for Clojure.
ZEEF/ClojureA curated collection of Clojure resources and links.
+ + +## Conclusion + +Clojure offers a powerful and expressive programming language for building robust and scalable applications. With its functional programming paradigm, extensive libraries, and strong community support, Clojure is an excellent choice for both beginners and experienced developers alike. + +Whether you're just starting with Clojure or looking to enhance your skills, the resources provided in this README cover a wide range of topics, from the fundamentals to advanced techniques, testing, debugging, and more. Additionally, the supportive communities, online courses, books, and YouTube channels offer ample opportunities for learning and growth in the Clojure ecosystem. + +These resources help you embark on your journey with Clojure and empower you to build innovative and efficient solutions. + +Happy coding !! \ No newline at end of file