Skip to content

Commit fc2a4de

Browse files
intro: concepts section
- index: Clojure big ideas - functional vs imperative style coding - video presentations from the Clojure author, Rich Hickey
1 parent df26ebb commit fc2a4de

File tree

4 files changed

+150
-4
lines changed

4 files changed

+150
-4
lines changed
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
# Clojure from the Author
2+
3+
A series of important videos from Rich Hickey, the author of Clojure who spent over 2 years designing core of Clojure around the concept of simplicity. Since then Rich has stewarded the continued design and development of Clojure, along with the Cognitect team, ensuring Clojure stays true to is founding principles.
4+
5+
!!! HINT "Try Clojure in the REPL"
6+
The videos can be watched at any time during the journey into Clojure.
7+
8+
An effective way to learn and become comfortable with Clojure is to write code and evaluate it in the REPL.
9+
10+
Presentations by Rich Hickey are an excellent way understand the design philosophy behind Clojure and support adoption of Clojure as a highly effective language for software development.
11+
12+
## Expert to Expert: Rich Hickey and Brian Beckman - Inside Clojure
13+
14+
Discussing some of the key characteristics of the Clojure language and why those decisions were taken
15+
16+
<p style="text-align:center">
17+
<iframe width="560" height="315" src="https://www.youtube.com/embed/wASCH_gPnDw" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
18+
</p>
19+
20+
## Clojure made simple
21+
22+
Covers the major problems with software development and the challenges most programming languages fail to tackle completely.
23+
24+
Discusses a simple approach to software development and the big picture view of how Clojure solves these problems
25+
26+
<p style="text-align:center">
27+
<iframe width="560" height="315" src="https://www.youtube.com/embed/VSdnJDO-xdg" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
28+
</p>
29+
30+
## Simplicity Matters
31+
32+
!!! QUOTE Rich Hickey, Clojure Benevolent Dictator for Life
33+
As we move forward we have to take what we already have and make that [software] do more, make it do things differently, make it do things better,
34+
35+
... as we try to take on manipulating software we are ... challenged to understand it in order to make that happen.
36+
37+
... I'll contend that you will completely be dominated by complexity. I don't care what processes you are using, I don't care how well you test or anything else.
38+
39+
Complexity will dominate what you do.
40+
41+
<p style="text-align:center">
42+
<iframe width="560" height="315" src="https://www.youtube.com/embed/rI8tNMsozo0" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
43+
</p>
44+
45+
## Discussing Design
46+
47+
<p style="text-align:center">
48+
<iframe width="560" height="315" src="https://www.youtube.com/embed/MCZ3YgeEUPg" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
49+
</p>
50+
51+
## The value of values
52+
53+
Rich Hickey provides analysis of the changing way we think about values (not the philosophical kind) in light of the increasing complexity of information technology and the advent of Big Data
54+
55+
<p style="text-align:center">
56+
<iframe width="560" height="315" src="https://www.youtube.com/embed/-6BsiVyC1kM" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
57+
</p>
58+
59+
Also see the related video: [Database as a value by Rich Hickey](https://youtu.be/EKdV1IgAaFc){target=_blank}
60+
61+
<p style="text-align:center">
62+
<iframe width="560" height="315" src="https://www.youtube.com/embed/EKdV1IgAaFc" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
63+
</p>
64+
65+
## Understanding Clojure as a programming language
66+
67+
<p style="text-align:center">
68+
<iframe width="560" height="315" src="https://www.youtube.com/embed/ROor6_NGIWU" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
69+
</p>

docs/introduction/concepts/index.md

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
# Clojure concepts
2+
3+
Clojure is an elegant language for a more civilized development experience.
4+
5+
Clojure supports the creation of simple software systems using immutable values and encouraging a pragmatic approach to pure functional design.
6+
7+
A simple syntax means Clojure is quick to learn and a wide range of open source libraries provides a rapid way to build any kind of software. Designed as a hosted language, Clojure runs on many platforms including the Java Virtual Machine, GraalVM, Microsoft.Net, JavaScript engines. Simple host language interoperability provides access to libraries from a wide range of programming languages, further extending the reach of Clojure.
8+
9+
!!! HINT "Experiment with the Clojure language to help understand concepts"
10+
Spend some time eevaluating code in the REPL and then revisit this section to get a deeper understanding of the design and philosophy of the Clojure approach to functional programming.
11+
12+
Clojure concepts are easier to relate to whist practicing with Clojure and building Clojure software solutions.
13+
14+
## Ten Big Ideas plus one
15+
16+
The key to understanding Clojure is ideas, not language constructs but the concepts that shape the language.
17+
18+
Each of these ideas is valuable by itself, not only in Clojure. Taken together, however, they Begin to fill in the picture of why Clojure is changing the way many programmers think about software development.
19+
20+
1. [Extensible Data Notation](https://github.com/edn-format/edn){target=_blank}
21+
2. [Persistent Data Structures](https://clojure.org/reference/data_structures){target=_blank}
22+
3. [Sequences](https://clojure.org/reference/sequences){target=_blank}
23+
4. [Transducers](https://clojure.org/reference/transducers){target=_blank}
24+
5. [Specification](https://clojure.org/about/spec){target=_blank}
25+
6. [Dynamic Development](https://clojure.org/about/dynamic){target=_blank}
26+
7. [Async Programming](http://clojure.com/blog/2013/06/28/clojure-core-async-channels.html){target=_blank}
27+
8. [Protocols](https://clojure.org/reference/protocols){target=_blank}
28+
9. [ClojureScript](https://clojurescript.org/){target=_blank}
29+
10. [Logic query](http://docs.datomic.com/query.html){target=_blank} / [Logic Programming](https://github.com/clojure/core.logic){target=_blank}
30+
11. [Atomic Succession Model](https://clojure.org/about/concurrent_programming){target=_blank}
31+
32+
Stuart Halloway presents [Clojure in 10 big ideas (plus one)](https://vimeo.com/223240720){target=_blank} in the following video, also see [presentation Content](https://github.com/stuarthalloway/presentations/wiki/Clojure-in-10-Big-Ideas){target=_blank}
33+
34+
<p style="text-align:center">
35+
<iframe src="https://player.vimeo.com/video/223240720" width="640" height="360" frameborder="0" allow="autoplay; fullscreen" allowfullscreen></iframe>
36+
</p>
37+
38+
* 2013 [RuPy slides](https://github.com/stuarthalloway/presentations/blob/master/Barnstorming_2013/ClojureInTenBigIdeas.pdf?raw=true){target=_blank}
39+
* 2017 [Chicago JUG slides](https://github.com/stuarthalloway/presentations/blob/master/ClojureInTenBigIdeas-Jun-2017.pdf?raw=true){target=_blank}
40+
41+
## Antithesis of Clojure and simple software design
42+
43+
In Narcissistic Design by Stuart Halloway, the antithesis of the Clojure view of software development is presented as a description of how unproductive and valueless much of the software industry has been in the past.
44+
45+
Its essentially a guide on what to avoid if you are a responsible and professional software developer.
46+
47+
<p style="text-align:center">
48+
<iframe width="560" height="315" src="https://www.youtube.com/embed/LEZv-kQUSi4" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
49+
</p>
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# What is Functional Programming
2+
3+
Functional programming can seem quite different from imperative programming used in languages like C, C++ and Java.
4+
5+
Imperative languages may seem easier initially, as defining one step after another is familiar approach to many things in live. As the scale of a system grows, so does complexity. Imperative languages applied object oriented design to manage complexity with varied rates of success.
6+
7+
When shared mutable state is common in an OO design, then a system quickly becomes complex and very difficult to reason about.
8+
9+
Functional programming is actually simpler that the OO approach, although initially it may be unfamiliar and not considered as easy. As systems grow in complexity, the building blocks are still simple and deterministic, creating a system that is far easier to reason about.
10+
11+
## Imperative programming languages
12+
13+
In Imperative languages code is written that specifies a **sequential of instructions** that complete a task. These instructions typically **modifies program state** until the desired result is achieved.
14+
15+
Variables typically represent **memory addresses that are mutable** (can be changed) by default.
16+
17+
![Imperative program - conceptual view](https://raw.githubusercontent.com/practicalli/graphic-design/live/clojure/theory/functional-programming-imperative-program.png)
18+
19+
## Functional programming languages
20+
21+
Individual tasks are small and achieved by passing data to a function which returns a result.
22+
23+
Functions are **composed** together to form more complex tasks and satisfy larger business logic. These composed functions pass the result of their evaluation to the next function, until all functions in the composition have been evaluated.
24+
25+
The entire functional program can be thought of as a single function defined in terms of smaller ones.
26+
27+
Program execution is an **evaluation of expressions**, with the nesting structure of function composition determining program flow.
28+
29+
Data is **immutable** and cannot be change once created. Changes are expressed as new values, with complex values [sharing common values](/data-structures/shared-memory.md) for efficiency.
30+
31+
![Functional program - conceptual view](https://raw.githubusercontent.com/practicalli/graphic-design/live/clojure/theory/functional-composition-illustrated.png)

mkdocs.yml

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -129,9 +129,6 @@ nav:
129129
- Concepts:
130130
- introduction/concepts/index.md
131131
- Functional vs Imperative: introduction/concepts/what-is-functional-programming.md
132-
- From The Author: introduction/concepts/clojure-made-simple.md
133-
# - introduction/concepts/purpose.md
134-
# - introduction/learning-clojure.md
135-
# - introduction/who-uses-clojure.md
132+
- From The Author: introduction/concepts/from-the-author.md
136133
- Contributing: introduction/contributing.md
137134
- Writing Tips: introduction/writing-tips.md

0 commit comments

Comments
 (0)