Alex Miller Keynote "The Amazing Clojure"
Summary
TLDRこのスクリプトでは、クロージャー言語のコミュニティにおける発表の概要が紹介されています。スピーカーはクロージャー言語のコミュニティの協力精神を高く評価し、クロージャー言語がどのようにして素晴らしい場所になるようになったかについて話します。また、クロージャー言語の様々な側面と、将来性についても触れています。さらに、クロージャー言語がどのようにしてデータサイエンスやインタラクティブな開発などの分野で優れた選択肢になる可能性についても議論されています。
Takeaways
- 🎉 大会の紹介と参加者の感謝の言葉から始まります。スピーカーは、コミュニティグループを集めるBig Tenアプローチを高く評価しています。
- 🏗️ スピーカーは、クロージャーを使用して迷路を生成し、それを解くというアイデアを持っていましたが、結果的にうまくいかなかったと反省しています。
- 📚 「The Mazes for Programmers」という本を参考に、迷路アルゴリズムについて話しました。特に、簡単なアルゴリズムと再帰的バックトレーカーアルゴリズムに焦点を当てています。
- 👀 スピーカーは、迷路の解くプロセスで使用されるセルの数が少なく、効率性が低いことに気づきました。
- 🧵 ユニCURSALな迷路について説明し、それらは再帰的バックトレーキングを使用して作成できますが、計算コストが高く、時間がかかることに触れています。
- 💡 ディクスターのアルゴリズムを使用して迷路を解決する方法を紹介しました。これは、迷路を塗りつぶし、最短経路を記録することで行われます。
- 🎂 Clojureの15周年を祝うセレモニーが開催され、コミュニティの貢献者に対して感謝の意が示されました。
- 🌟 Clojureの強みとして、問題解決へのアプローチ、言語の安定性、柔軟性、コミュニティの活発さ、そして高い給与レベルが挙げられました。
- 🛠️ Clojureのツールとエディタは豊富で、コミュニティによってサポートされており、新しい開発者にとってはスタートが容易になっています。
- 🚀 Clojureの未来の重点として、データサイエンスへの焦点、対話型開発の強化、JVMとの相互運用性の改善、そしてツールや開発者の経験の向上が挙げられました。
- 🌐 Clojureのコミュニティは活発であり、継続的なサポートとオープンソース開発者への支援が行われています。
Q & A
プレゼンターはなぜクロージャー言語に興味を持ったのですか?
-プレゼンターはクロージャー言語がどのようにして複雑さを軽減し、システムを構築するプログラマーの問題に対処するのかに興味を持っており、それが彼らをクロージャー言語に惹きつけた要因です。
「The Amazing Closure」というプレゼンテーションの主なテーマは何ですか?
-主なテーマは、クロージャー言語がどのようにして素晴らしいものであるか、そしてその言語を使って迷路(maze)を生成したり解決したりする実験についてです。
プレゼンターはなぜ迷路を生成するアイデアを諦めましたか?
-プレゼンターは迷路を生成するアイデアを試みましたが、話の順序が分からないためにナラティブ構造を作り出すことが難しく、結果的に良い結果を出すことができなかったため諦めました。
迷路アルゴリズムの中で紹介された最も単純なアルゴリズムは何ですか?
-最も単純な迷路アルゴリズムは、左上から始めて右へ移動し、行を作りながらランダムに右へ進むか下に分岐するかを決定するものです。
プレゼンターが好きな迷路アルゴリズムは何ですか?
-プレゼンターが最も好きな迷路アルゴリズムは再帰的バックトレーカー(recursive backtracker)アルゴリズムで、これは迷路を渦巻き状に生成するもので美しく見えると感じています。
ユニカーサル迷路(unicursal maze)とは何ですか?
-ユニカーサル迷路は、スペースを埋めるようなカーブで構成される迷路で、エントリーとエグジットが隣り合っており、一つのパスをたどるだけで迷路全体を通過できます。
プレゼンターはなぜクロージャー言語が好きなのですか?
-プレゼンターはクロージャー言語がドメインの複雑性と人的誤解を軽減し、プログラミング言語の問題に対処するデザイン原則を持っているため好きです。
クロージャー言語の特徴として挙げられたものには何がありますか?
-クロージャー言語の特徴には、不変データ構造、遅延評価、マクロ、ホモアイオスタシー、オープンマップ、オープン多相性などがあります。
プレゼンターはなぜリッチ・ひげ(Rich Hickey)に感謝していますか?
-プレゼンターはリッチ・ひげがクロージャー言語を作成し、彼の問題解決へのアプローチが非常に重要だと考えているため、感謝しています。
クロージャー言語のコミュニティの特徴は何ですか?
-クロージャー言語のコミュニティは活気に満ちており、多くの人々が協力して新しいアイデアを出し、助け合いながらプロジェクトを進めています。
クロージャー言語はどのようにして安定性を保っていますか?
-クロージャー言語は新しい機能を追加する「accretion」、より寛容な「relaxation」、既存の機能を壊さずに進化させるための「新しい名前の使用」などの原則に従って安定性を保っています。
クロージャー言語の柔軟性はどのように表現されますか?
-クロージャー言語はJVM、JavaScript、CLRなどへのデプロイが可能で、様々な環境での使用に柔軟性があります。
クロージャー言語のコミュニティはどのようにして助成されていますか?
-クロージャー言語のコミュニティは多くの企業と個人開発者の支援によって助成されており、これは他の言語コミュニティと比較してもなかなかの数の支援者を持っています。
クロージャー言語の将来についてプレゼンターはどのような考えを持っていますか?
-プレゼンターはクロージャー言語がデータサイエンス分野でもっとも使われるべき言語であり、コミュニティがこの分野での地位を強化するべきだと考えています。
クロージャー言語の教育と普及においてどのような課題がありますか?
-教育と普及においては、言語の選択が既に根強く、学校やブートキャンプでの教育が既に言語の選択に影響を与え、新しい言語を取り入れるサイクルを打破するのが難しいという課題があります。
クロージャー言語の学習においてはどのような障壁があるとプレゼンターは言及していますか?
-プレゼンターはクロージャー言語の学習においては、プレフィックススタイルの記法、カッコの使い方、関数型プログラミング、不変データ、再帰的な思考などがあると言及しています。
クロージャー言語が持つとされる特徴とそれに反する誤解はどのようなものですか?
-クロージャー言語は学習リソースやツール、エディターが豊富であるとされる一方で、適切なツールを見つけることが難しいという誤解もあります。また、学習曲線が緩やかであると誤解されることがありますが、実際は関数型プログラミングや不変データを学ぶ必要があるため学習曲線はあります。
クロージャー言語が今後重点を置くべき分野としてプレゼンターはどのような分野を挙げていますか?
-プレゼンターは今後クロージャー言語が重点を置くべき分野として、データサイエンス、インタラクティブな開発、JVMとの相互運用性、ツールの向上、新しい開発者体験の向上などを挙げています。
クロージャー言語のコミュニティが今後どのようなイベントに参加する予定ですか?
-クロージャー言語のコミュニティは、将来のイベントとして2024年4月27日と28日にクロージャーコンファレンス(Clojure Conj)に参加する予定があり、また2024年9月21日と22日にStrange Loopカンファレンスに参加する予定です。
Outlines
🎉 クロージャーコミュニティへの感謝と講演の紹介
講演者はクロージャーコミュニティへの参加を楽しんでおり、特にビッグテンアプローチと呼ばれるコミュニティグループの取り組みを高く評価しています。講演のテーマは「驚くべきクロージャー」で、迷路を生成し、解決するアイデアを元に話す予定でしたが、実行が難しくなり、代わりに迷路について話すことにしました。
🧩 迷路のアルゴリズムとコードデモ
第1部では迷路に関する話が行われ、1913年のウェブスター辞典による迷路の定義が紹介されています。次に迷路生成アルゴリズムについて説明され、特に単純な右向きのアルゴリズムと再帰的バックトレーカーアルゴリズムが紹介されています。コードデモではRebelを使用して迷路を可視化し、迷路の生成過程をステップバイステップで説明しています。
🔄 ユニカーサル迷路と迷路の解決
ユニカーサル迷路について話し、これは空間を埋める曲線であり、再帰的バックトレーキングを使用して生成されると説明します。しかしながら、デモンストレーション中に環境が壊れてしまい、デモが中断されることになります。
🤔 迷路の解決方法とクロージャーの紹介
迷路の解決方法としてDijkstraのアルゴリズムと再帰的なバックトレーキングについて説明し、その後にクロージャー言語の紹介とその15周年を祝うセレブレーションが行われています。また、クロージャー言語の創設者であるRich Hickeyに感謝の言葉を述べています。
🌟 クロージャー言語の強みとコミュニティ
クロージャー言語の強みとして、ドメインの複雑性と誤解を扱う方法、変数の中心によるプログラミングの問題点、不変データ構造のサポート、情報の多様性、名前の弱いサポートなどが挙げられます。クロージャー言語はこれらの問題に焦点を当てており、そのために開発された言語です。
📈 クロージャー言語の成長と評価
クロージャー言語が仕事で使用される割合が増加し、大企業での利用も増えていると報告されています。クロージャー言語のダウンロード数は月間200万回を超え、ユニークIPからは25万件ものダウンロードがされています。また、クロージャー言語を採用している企業が挙げられ、その中にはニューバンクが1200人以上のクロージャー開発者を抱えていることが紹介されています。
🛠️ クロージャー言語の柔軟性とツール
クロージャー言語はJVM、JavaScript、CLRなどへの展開が可能で、その柔軟性と多様なツールが紹介されています。また、エディタとツールが豊富な環境を提供していると同時に、コミュニティが活発であることも強調されています。
💰 クロージャー言語の経済的価値とコミュニティの支援
クロージャー言語は経済的価値が高いとされ、その安定性と柔軟性、そしてコミュニティの活発さはその理由の一つとされています。また、クロージャー言語に対する様々な形の支援が行われていると報告されており、その中にはニューバンクが月間で約40人の開発者を支援していることも紹介されています。
🚀 クロージャー言語の将来性と課題
クロージャー言語が抱える課題として、既存の言語への固定観念、教育機関への普及の難しさ、親和性の欠如などが挙げられます。一方で、クロージャー言語はデータサイエンス分野での採用を目指すべきであり、その柔軟性とコミュニティのサポートがその成功につながると述べています。
🛑 クロージャー言語の強みと発展の鍵
クロージャー言語は実際の問題解決にフォーカスしており、開発者の迅速なフィードバックとインタラクティブな開発を可能にしています。また、言語の安定性とコミュニティの活発さは、発展の鍵とされています。
🔧 クロージャー言語の開発者体験とツールの進化
クロージャー言語の開発者体験が向上し、ツールが進化していると報告されています。特に、データファインナビゲーション、プログラミング言語との統合、リモートツールとの連携などが挙げられます。
🌐 クロージャー言語の多様な展開とコミュニティイベント
クロージャー言語は多様な環境で展開されており、コミュニティイベントも活発に行われています。クロージャー言語のイベントであるClosure Conが開催され、またStrange Loopという別のイベントも紹介されています。
Mindmap
Keywords
💡クロージャー
💡迷路アルゴリズム
💡ユニカーサル迷路
💡再帰的バックトレーキング
💡関数型プログラミング
💡不変データ
💡コミュニティ
💡柔軟性
💡ツール
💡データサイエンス
Highlights
Speaker expresses appreciation for the community and the Big Ten approach of Recur closure.
Introduction of the talk 'The Amazing Closure' which was initially planned to be in the form of a maze.
Decision to not proceed with the maze format for the talk due to difficulty in building a narrative structure.
Talk divided into three parts: mazes, why closure is awesome, and future closure stuff.
Mazes are defined using 1913 Webster's Dictionary, highlighting the confusion and perplexity associated with them.
Introduction of maze algorithms from the book 'Mazes for Programmers'.
Demonstration of a simple maze generation algorithm using a random walk.
Use of Rebel to create and visualize mazes with perfect properties.
Explanation of Wilson's algorithm for maze generation and its properties.
Recursive backtracker algorithm for generating mazes with pleasing curvy paths.
Challenge of generating a talk in the form of a maze and the switch to unicursal mazes.
Technical difficulties with generating an 8x8 universal maze and the switch to a smaller example.
Dexter's algorithm for maze solving and its implementation.
Closure's 15th anniversary and its focus on reducing programming complexity.
Closure's stability and its cultural value of avoiding breaking changes.
Closure's flexibility with deployment on different platforms like JVM, JavaScript, and CLR.
The thriving Closure community and its continuous growth and support.
Closure's strengths in stability, flexibility, community, and interactive development.
Opportunities for Closure in data science and the importance of interactive development.
Core team priorities for Closure focusing on interactive development, tooling, and performance.
Encouragement for the community to continue moving fast and making stuff with Closure.
Transcripts
uh thank you for the introduction and I
it's a pleasure to be here I really
enjoy uh getting together with closures
and and being able to do this and I
really appreciate the Big Ten approach
that Rec closure has done with bringing
in all the community groups and
everything else
um that's fantastic and and it's it's
been so cool to hear about all the
different
stuff and all the people who are uh
working so hard to make closure in the
closure Community a great place to be so
uh so my talk is called the amazing
closure
which you might also call the uh maze
enclosure
and I had this idea while reading this
book earlier this year
of doing a taught which is a cool book
so you should go check it out
um so I had this idea like what if I
could generate mazes with closure
what if I could solve masses with
closure
what if each cell of a maze represented
a set of slides and then the talk order
was generated from May's solution
this is a really cool idea and it's a
really bad idea also so uh I did this
and it was the results were not good so
it is very hard to build a narrative
structure uh when you don't know the
order that anything's going to be in
um so I I didn't end up doing this so
sorry about that or you're welcome
whichever one is appropriate
um
and so instead this is going to be a
talk in three parts the first part is
going to be about mazes because I did I
wrote a bunch of Base code and it was
fun and so uh I heard yesterday on a
keynote that you're supposed to do
things that are fun so we're gonna do a
little fun first and then we're going to
talk about closure and why closure is
awesome and some of what you've heard
today and we're going to talk a little
bit about uh future closer stuff
so I'm gonna go back to the vehicle the
amazing closure the amazing closure The
Mazes for programmers book do that this
stuff part one mazes all right we're all
caught up so what is a maze so if you
could actually install the 1913
Webster's Dictionary in your dictionary
which I recommend doing
um because it has really cool stuff in
it that's much more interesting than the
one than the dictionaries that are
installed by default so uh these are
some definitions for Maze that were that
are in the Webster's Dictionary uh from
1913 which really gives you a lot of the
confusion perplexity bewilderment
baffling a lot of good words there
um so uh that was indeed my experience
of trying to build a talk that was in
the form of a maze so so but I found a
solution which was to not do that so
um there are a bunch of maze algorithms
um there are probably I don't know 10 15
different ones that are in the book
maybe more if you take some of the
exercises and and ideas in there
um I'm going to talk about two of them
um this is a really simple one I think
this might be one if not the first one
that's in the book
um so the basic idea is starting from
the top left
that you move right
and then uh do so do the top row and
then do the second row third row from
left to right and at each step you
randomly decide to either extend the run
that your the passage you're curving to
the right or end the run that you're on
and carve a random passage down from any
cell in the run that you just made
um so
and I have slides here but that's no
that's no fun right let's do some stuff
and let's just let's do some code stuff
that's more fun so
um
and I'm using Rebel here
and so I have a representation of a map
of a maze which is just a map and it's
got like an adjacency Matrix kind of
thing in it and some other information
[Music]
um but that that's not fun right we need
to actually show this so I wrote a
little viewer for rebel
um to show me that maze so this is just
uh so we can make new mazes lots of
Mazes and all the mazes that we're
talking about are are almost all the
mazes we'll talk about today are perfect
mazes which generally you can pick an
entry and an exit Point anywhere on the
Maze and there should be a path there so
um so you can you can try to pick that
out yourself if you like but
um this is uh just a typical algorithm
and and then I wanted to show I wanted
to show how we're carving which I have
slides for but like I said that's no fun
so here's some code and I thought it'd
be useful if I just went into here and
put a little tap in there
that seems like a good idea right
all right so I made a new one oh look
there's all these mazes here
I'll convenient
all right so I'm gonna
um I'm gonna browse off of that tap
and then we can walk into that and we
can actually step through all the steps
so you can see that as we move to so
we're going to start in the upper left
and in each cell so the first cell we're
going to randomly decide should we carve
down or to the right so we decided to
carve right right right and then we got
to the end of a run so in this step we
carved down instead
um and that ended that run and then so
we start over at the next cell which is
this one right here
lost my there
um so these two they they both basically
carved down so we didn't so several
times I don't know we didn't we just
carved down instead of going to the
right
and we're just going to keep going
so I'm just I'm just re-walking all the
code that had all the things that
happened while I was generating that
maze right
oops Yeah so there we got to the end so
we ended up with a maze right so that's
a really simple algorithm there's some
other ones like that
um you might see that um if you look at
a few of these in a row
so let me go back to
so if you look at a few of these in a
row I'm going to make a few a bunch of
them tell me if you see any similarities
here
look at the bottom row
because the only choice when you get to
the bottom row is going right you can't
carve down all of these have a bottom
row that's open and often you end up
with a right a right column that's
mostly open so this is not there this
can't generate every possible base right
it's it has some biases to it and
there's several algorithms like that
that have some kind of bias built into
it and then there are other ones that do
not
um so this is
there's one called Wilson that makes
mazes
so that's cool
those don't have that property or
there's one called hunt and kill
so these are cool the one I like the
best is actually
um
this one which is a recursive
backtracker algorithm
so this one just tends to make things
that are pleasingly curvy uh if that
makes sense
[Music]
um and this is a very simple algorithm
actually to go in and
and where I'm at
I can't
the stupid things in the way
all right
let's
see if I could find my back tracker in
here somewhere
so same thing here oh I do I was
actually already tapping it so how
convenient
how convenient
I got lots of stuff in the backtrack now
tap now
friends that
um
starting to get a lot of data in here so
all right so the way recursive
backtracking works is uh actually you
get to the right place in here
all right so recursive backtracking
we're just going to carve as far as we
can until we run into a dead end so
do keep carving keep carving keep going
oh wait a dead end right so then you
just pick a random new place that you've
never seen before and start crying new
at it and we picked a place right in
here there wasn't far to go so now we're
going to find a new place which was up
here and now we're going to find a new
place and here we're gonna get a lot of
room to run
then you're going to keep going and
sometimes it takes a while to get
through all of this stuff but in the end
you end up with a cool maze so that's
cool so I'm gonna these are my backup
slides which we don't care about because
everything worked flawlessly
all right
um so an interesting thing I ran into as
I was doing the trying to make a talk
out of this was
um I immediately found when you looked
at the at a maze that um
that often not very many of them would
have uh not very many of the cells would
be involved in the solutions so I guess
I haven't shown this yet
but it's more fun if you solve these
mazes first so let's do that so this is
just amazed with the solution in it
but you notice that the packs the path
length here is 27 there's 64 total
squares so I'm only using like you know
maybe a third or somewhere in the
quarter to a half range in in most in
most mazes so there's a big one but it
seemed like a lot of effort for me to
make slides for all those cells and then
not use a third of them or a half of
them so that made me disappointed so
what I did and said was
um there's another kind of maze called a
unicursal maze and that is basically a
space filling curve
that
um
that will let's see this is so uni
can I do that oh I use the wrong one
[Music]
this is really cursing
news have been here
I bet you I I bet you I know exactly
what happened so I think this threw an
exception which you can't see because
you can't see all of my screen
I think this one
expects there to be a starting cell
which I defaulted other other places
hmm
I don't know what I did
not sad
oh I know exactly what I did so this is
the problem with universal mazes
um so the way you make them unicorn maze
is basically the same as recursive
backtracking
um and then there's uh well so there's
there's two ways to make it one is
actually to take
um do I have
so one is actually to
I was very
I actually missed a slide here I missed
David Bowie so
um Universal mazes are also also called
labyrinths in some places so
um you know had to get a picture David
Bowie in here
um so there's two two ways to make a
universal maze that I know of so one is
to take any perfect mace you already
have and effectively cut the pat cut all
of the paths that you have in half
um
and so as an example here here is a
perfect maze that a 4x4 perfect maze
and so basically I drew a half line
between all of the all of the existing
things and you'll see and you have to
add an extra little close you have to
close off the first spot here to make
the entry point and you then always will
end up with a universal maze that exits
right next to the entrance because we
basically have stolen you know that same
uh entrance path
um this always works uh it's fast and
it's really boring and so that's no fun
um the other way to do it is with
recursive backtracking and so just like
we did uh recursive backtracking before
um you're gonna you wanna keep going
until you hit a dead end
but instead of starting at a random
point you then back up and undo your
path to the point where you can make a
different decision
um this is kind of what's called oh my
God complexity it's it's not it's not
actually exponentially bad it's actually
much worse than that so it's you know
some sort of factorial bad if if you're
if you're super unlucky
um there are tricks so you can do things
like memorize dead paths so that if you
return to them you
um you don't revisit them you can uh you
can think about how to detect the case
where you hit a wall
and you've got live cells on either side
of you you are not going to be able to
revisit both of them so you found a dead
end you don't have to go visit the whole
inner part and stuff like that
um but it's still bad so
um the reason things aren't working is
because uh my computer is thrashing
itself to death trying to make an 8x8
Universal maze right now
um which is bad
um eight by eights take uh can take a
very long time to make so and so so that
was the problem there was that uh I did
too much
um so I'm gonna
um
I am going to
to give up and rebuild my environment
here
this happens
even to me
foreign
yeah so if anybody else there has
imposter syndrome I managed to break my
environment yesterday in a way that
nothing that I had done for the last
several weeks worked
and it took me a good half hour before I
realized what it was
what was it I'm not gonna go into
because I haven't released the code yet
so
um
foreign
let's be a little less ambitious
great
this thing takes a starting
so
let's see if that works I think I'm
connected
foreign
sorry I'm running actually a fairly
large pile of unreleased various bits of
rubble so it's it's not all entirely
baked yet
it's still not connecting for me I don't
know it doesn't matter
um we're gonna go on so
I have slides this is why we prepare so
this is an example of a slide made with
universal recursive backtracking this is
an API 8x8 my computer just accidentally
happened to be very lucky and made this
in 11 milliseconds
um but most of them took more like 20
minutes when I was making them so uh so
this is an example of one that does not
have an entry and exit that both happen
right next to each other it's got
um
yeah here so it's upper left and upper
right are the entry and exit for it so
anyways that's cool so how do we solve
mazes
um Dexter's algorithm we basically you
basically flood the maze record the
distance
um and then from the end choose a path
with decreasing distance and then you
have basically a backwards path of that
point so you just reverse it you can
also do a depth first search with
backtracking and that's basically how
the universal solver it just follows it
uh this is a example of
uh what the distances look like so this
is a pretty big maze and it's flooded
from the upper left basically finding
distances so that the color here is
basically distance from uh zero zero uh
and then if you so wherever you want to
find a path from you basically you can
pick the bottom right and just follow a
decreasing gradient of color until you
get back to the beginning
let me move this out of the way
all right so that was amazed stuff uh
that was fun I I assume you probably are
asking that looks fun can I have that
code and the answer is yes but not now
because it's a big it's a big uh it's a
big mess but uh you know it would be
really cool if it would be to have
something in the clerk Garden that uh
showed off some maze stuff so uh there
maybe I'll do that but probably I won't
have time and I'll just release the base
code somebody else can do that
uh so closure let's talk about some
closure stuff uh recently A bunch of us
got together and celebrated closures
15th anniversary we had a little we also
had a video thing that uh went out from
new bank
um unfortunately Focus was not able to
be there on this weekend so he's not
pictured and also I want to say happy
birthday to focus yesterday was his
birthday
so I will get that in there
um and
I want to uh take this opportunity to
say thank you to rishiki so
um there's a bunch of cool people in the
closure Community
um there's a lot of Amazing Ideas
um a lot of the things that I think are
um are important about closure come come
from obviously from Richard's brain
um I didn't end up at working with Rich
by accident
I looked around and and tried to find
people that uh
um
I thought were doing important work
um and I that's how well one of the ways
that I that I got to closure and
um so I want to thank him for
um making closure and
um the way that he thinks about problems
uh are really important and I say I say
this all with a little bit of
trepidation because there is a lot of uh
pushback in places about the sort of
hero worship of rich or whatever uh and
I think those are fair criticisms
um and closure is not just Rich
obviously there is a huge Community
which we have seen all day yesterday and
today
um and so there are many many people
that make closure great
um but I personally
um think rich is one of the most
important computer scientists of the
last 20 years maybe ever and it's really
all about the way that he approaches
problems and problem solving and
um making that the focus of everything
so this is my mini appreciation for Rich
so thanks Rich
um and when he started closure
um
this is a picture that he's used in some
in some other other talks and things
like that
um the important thing here was trying
to think about what are the problems
that programmers face when we build
systems and the two biggest ones were
domain complexity which is something
that is built into the domain so that's
not something that we inherently can fix
right
um and the second one is misconception
which is just working on the wrong thing
or doing solving the wrong problem
solving the problem wrong there's a lot
of different variants of this again this
is not a programming problem this is a
human problem
um but it is something to keep in mind
as you think hard about you know what am
I doing every day
um and then there's a big slew of
problems that are really important and
are the domain of programming languages
and so
um just looking at a few of these like
uh Place oriented programming the sort
of centrality of mutable places
um and mutable databases both of those
are sort of what he calls place oriented
programming and
um there are so many problems that come
out of that and so his search really was
for how do we how do we work in a way
that is not that and there were a lot of
there was already a lot of work on
immutable data structures and things
like that uh okasaki and all those kinds
of things and
it wasn't until he found the the the
hashary map tree work of uh Bagwell that
this really became a thing that he could
address in the programming language and
I would argue that he has you know
extended that to a large degree into
daytonic which takes the same sort of
approach to data in the database
um weak support for information this is
really the idea here is
um information is sparse it is uh it has
partial information
it has
um increasing information over time as
we work on things we tend to add
attributes to it
um open so open Maps open polymorphism
all those kinds of things it all comes
out of this
um and I'm not going to talk about all
these weak support for names is another
really important one
um but a lot of these are very visible
in design exposure they're still visible
today there's still things we talk about
every day on the closure team or these
exact things so
um that's if if anybody you know has
enjoyed using closure to work on their
systems the focus on these problems is
why that I mean that is the big thing
um so
uh closure work so I want to go through
just some reasons that that I love
closure so closure works and I think it
is clear from the state of closure
survey this is from
um two different questions on there that
people are using closure more and more
for work they're using it more and more
in big organizations
um there are more and more downloads We
just recently crossed two million
downloads a month for the main closure
artifact
um you'll see the unique IPS are not are
are a more complicated picture
um there's a big reason for that which
is that in April we released closure 111
and in June we released closure 112
Alpha One so those two things make
people download new stuff so but you
know there's 250 000 IPS downloading and
closure from somewhere every month so
there's a lot of people out there using
closure
um there are now a bunch of closure
unicorns um new bank I'm somewhat
familiar with
um but other ones that have happened
over the last year or two and imperative
reefy Health apps flyer tax bet I'm sure
there are others that I don't even know
that are on this list
and newbank now has more than 1200
closure developers more than a thousand
microservices I don't even know how much
lines of code millions of lines of code
of closure code so they're a huge a huge
user of both closure and daytonic
um
but also I know these other companies
are as well and there's lots of other
small companies
um
this uh there's this post that Ed Weibel
wrote when
um cognitek joined new bank and
I think I revisit it periodically
because I think it's really it was
really important
um I think it really highlighted a lot
of stuff that newbank found useful
um because they they really made a very
considered choice about which language
to use
um based on managing complexity
um so this is a quote from with a few
minor edits from from that post which is
down down in the footer
um but they knew they wanted to build
something with scale they knew that the
biggest threat to scale was complexity
and they wanted to constrain and
mitigate categories of complexity and so
they were you know reading out of the
tarpet looking at databases that led to
the atomic which led them to closure so
um this is a I think a fascinating way
that a company the size of newbank you
know got started with it so it's a it's
very interesting and I don't think it's
that much different from from some of
the things that Bradford was saying in
his talk
um it we have you know closure is
squarely focused at how do we reduce the
complexity of writing and evolving our
code over time and that's
um that is our uh damper in many cases
that's the thing that stops us from
moving forward
uh closure makes us happy in the stack
Overflow survey closure is one of the
most loved languages
it is also this study that people did of
uh I think it was of
um words in
um different GitHub repos or words or
comments and issues I'm not really sure
I don't remember now exactly what the
details were but you'll see closure here
had the the most uses of you know
awesome cool fun happy helpful and
interesting and and get up repos and
issues and things like that so
um we we like stuff that's cool and it's
a happy community
to in most ways uh closure pays well
um closure has topped this survey I
think every year that we have been
included in it
um there is at least one or two years
where we were not
um so thank you to everybody who keeps
filling it out it uh is really important
for us to show up and be visible in
surveys like this and so I know it's a
pain to go fill out surveys and
sometimes they're long and all that but
it really does help in making us visible
um closure is stable so
um Rich has talked about this a link
breaking changes are breaking so don't
do that instead do things like accretion
which is adding new things relaxation
which is being more tolerant in what you
accept or make a new name instead of
breaking a thing that you have this has
become a cultural value both in the
language and in the libraries
um and it is to all of our benefits so
keep doing it it's awesome
um there are some language features that
help with this things like open Maps
open polymorphism avoiding concretions
all those are things that help with
um help with making closure stable
um some some examples that people talk
about a lot
um riches Rich wrote uh this demo of
ants to a sort of demo some of the
concurrency features of closure which
was I don't know the code dates till you
know 2009 or 10 or something like that
you can find it out there and adjust and
it still runs today uh and the exact
same code runs today
um in current closure just like it did
in closure pre 1.0 wherever that was
um Stu's also famously mentioned that
the code for programming closure which
was the first closure book
continues to uh run with every new
release and and he hasn't modified it
too much I think that's actually
slightly wrong I think there were some
examples that actually did break with
the 1.3 numerix changes but uh in
general that is largely true still
um you may have seen this graph floating
around it's been posted on Twitter and
things like that uh it was this is from
the history of closure paper
um I did the work to make this graph
which involved a pile of python and go
stuff
um and it ironically I went back and
tried to give that to somebody not too
long ago and everything about the python
and go environments that I had had bit
rotted so bad that I could not get any
of it to run anymore it was all
completely broken so it's a little bit
of ironing for you
um just for comparison I wanted to
include a few other ones I think are
interesting so like this is get I think
you should not be surprised by this uh
git is a very stable code base Linux
also a very stable very well-managed
code base uh this is a Scala you might
notice it looks a little different we
call this the slumping cake graph
um and then this is rails which you
might might also suspect would look kind
of similar
um so closure is flexible you can take
closure and you can you can deploy it on
the jvm or to JavaScript or to the CLR
which actually just this week the
closure CLR 1120 Alpha One compatibility
was announced so the closure CLR still
exists I don't know that almost anyone
actually uses it but it still exists
um and David Miller continues to to bash
away at it
um babashka's brought this into the
world of scripting
um and they're you work with graul has
been really amazing and I think has
really pushed that team in interesting
and useful ways and so I'm really glad
that all of that stuff exists
um we've seen closure flutter come out
this year with uh from uh
Kristoff and Baptiste and so again
that's awesome
um and I would also include not as a
host but as sort of a
um access point uh the clj python stuff
which is uh totally awesome to get
access to the python environment
um sort of as an escape hatch
um the the syntax uh you know James
Gosling talked about this yesterday is
kind of interesting is the it separates
syntax and semantics and that ha that
has lots of Pros things like the
homologonicity and macros and all that
kind of stuff but it has the downside of
that you're never exactly sure what
you're seeing what it means and so with
lisp especially you know you can build
these towers of abstraction that are
um that can be hard for people to come
into and understand so you can build a
world that's all your own
um and the problem is that it's all your
own and so it's hard to understand I
think closure is interesting in that
they did not we did not sign up for all
of that flexibility so
um things like uh reader macros custom
reader macros are a thing that
um definitely Fosters this in the in the
commonless world but doesn't exist in in
the closure world so that's that's an
interesting case where we've not not
taking on all of that flexibility
um there are tons of tools um and I want
to mention like we've seen all through
this conference if you've been if you've
watched any part of it you have seen
tons of tools and they're awesome and
you've seen tools talking to each other
in environments tools embedded in
environments and environments embedded
in tools and all this stuff and the cool
thing to think about is what makes all
that work and the answer is Eden like
everybody meets at Eden like you can
just pass these literal data structures
around and know that like whatever tool
you give it to like if it's a closure
aware thing like it's talking Eden right
so I can give it maps and vectors that
and uh and probably even tagged literals
and things like that and have it work so
um so that is the the secret sauce in
the middle of all this stuff uh and so
keep keep building cool things on top of
that
it's an awesome substrate for that
uh the closure Community is lovely
you've seen two days of that here at
this conference
um there so thank you to all of those
people who are doing all this work many
of them are on this call
um many of them are not on the call
um there's tons of people doing stuff
it's amazing when I do the draf every
week it is just shocking to me every
week that there's you know a dozen
videos a dozen blog posts there's dozens
of libraries that are being updated
every single week literally all of the
time so there is no break from it it's
uh
it is a thriving community and anybody
who thinks closure's dead is just
completely not trying to to find it or
trying not to find it because uh uh it
is uh throbbing and alive I would say so
um that's silly
um I I sometimes I think maybe I should
just write a bot that goes out on Hacker
News every six weeks or so and suggests
that some other language is dead just so
we'll throw some more food in the water
um don't do that I'm just kidding
um oh it says sponsorship I think
closure is is maybe not unique there are
definitely
um other language environments that have
different levels of Open Source
sponsorship many of those are are driven
by big companies that have foundations
and things like that
um but but closure really does have an
amazing amount of funding for open
source work
um and I think that is uh pretty great I
I don't think the sort of Grassroots
nature of it is matched by many other
communities that I can think of
um closure us together you know I had a
had some had some time yesterday but
just to resurface that
um they are doing a ton of different
kinds of funding they have there are
dozens of companies and hundreds of
developers that are supporting it uh
that's awesome if you're not supporting
it even you know to a very small amount
and you have the ability to do so I
would encourage you to do so or if your
company uh is not currently supporting I
would encourage you to encourage them to
do that it's good for all of us
um we and we have an open source that
this sort of culture of Grassroots
support of Open Source developers as
well newbank is supporting about 40
developers on a monthly basis which we
don't really talk about enough so I'm
going to write a post about that soon
but
um we are supporting a lot of people I
know that there are lots but when I go
look at those they're you know often 5
10 20 other people supporting
um those those people on projects as
well so uh it's it's certainly not just
newbank there are a lot of people
helping helping each other to uh make
great stuff
so the future
um I should have brought my shades to
where those for that
um so
I wanted to take a few slides just think
about obstacles and spread and some of
these James talked about a little bit
yesterday but
language choices are entrenched you know
it's a big thing to choose a language
and it's very difficult for a company to
change to a new language
um or to have that you know decision
point where they even really consider
another language
um and it's very difficult to get into
schools and boot camps there's there's a
feedback cycle here that you know
schools want to teach languages that
people use people want to use languages
that are taught so it's very difficult
to break into that cycle once you do you
get a virtual cycle there and I think
python definitely you know achieved that
they're they're probably the poster
child of that
um that managed to break into that cycle
enough
um to feed sort of a flywheel of of uh
continued uh people who know the
language but
um it's it's uh it's difficult to break
into that
um we need to be doing what we can to we
the closure Community does a great job
talking to each other
um things like this event and other
events I think we are pretty well
connected in the community to each other
I think we are
um not great at sort of seeking out
external communities to talk to Rich
certainly did a lot of this in the early
days going to talk to you know python
Ruby communities or info queue or you
know strange Loop or things like that
um and we we need to keep doing that
um that's the only way that we're gonna
if you want to grow grow the grow the
bubble you got to go talk to people
outside the bubble so
um as you think about if you if you want
to help with that submitting talks at
conferences is a fantastic way to go
talk to other people that
um that haven't haven't seen closure
um familiarity is a big thing the thing
that which would call easiness
um it's things that are close at hand
right closure is not close at hand for a
lot of people who've been through
um various you know computer science or
Boot Camp or learning
um paths so the prefix style is
difficult for the reasons James talked
about yesterday
um the the parens tend to be a blocker
for some people even if it's silly it is
um functional programming and immutable
data if you go look at uh the I didn't
put it in here but the closure survey
for like what are what are your
obstacles to learning closure in
particular you'll find that functional
programming and immutable data are at
the top
um it is a different Paradigm it's a
different way of thinking about things
and thinking in recursion uh also is
another thing that's difficult getting
out of the loop mindset and into the
working at The Collection level
transforming one collection into another
collection or uh thinking about
recursive algorithms those are things
that it's very those are very natural
ways to structure programs enclosure and
they're very unnatural for for a lot of
other languages so especially the ones
that are taught so
um so there is definitely a learning
curve there
um and I think
a lot of that is unlearning you know so
there's a lot of unlearning that has to
happen uh people who pick up closure is
their first language which is not really
that common but people who do I think
find it to be not that hard so I've
heard that from a number of people who
went that path but
um because they have a little less on
learning to do
um so some ways to turn this into a
positive
um student talk a few years ago about
alien technology and I think that's a I
think talked about that or talking about
it as a superpower talking about it as a
secret leverage things like Paul
Graham's essays about lisp and how that
was their secret weapon and you know
being productive against other you know
similar competitors using other
languages like that the idea here is
there is a more productive way to work
and
um it's not a silver bullet like you're
still writing code you're still fighting
the same problems that you fight in any
other time so it's not uh you know a 10x
kind of a thing but it can definitely be
uh transformative to make this leap and
think in a different way and so
um finding the right way to talk about
that that is alluring and uh brings
people in
um and uh encourages them is the is the
trick so we need to keep doing that I
think that's a cool way to talk about it
um jobs this is a been for any small
Tech anything that's not super widely
spread
um the jobs are not
uh evenly distributed among the people
either by geography or skill level so
the people the things that are you know
there are just hot spot areas where uh
companies that work with closure are and
they typically want more senior level
people
um that's just uh that's just the nature
of this problem so the only way to
really solve that problem is to have
more companies and more developers so
um one way to do that is to hire
non-closure developers and train or
Mentor them so I mentioned before that
newbank has 1200 plus closure developers
um we didn't go out and hire 1200
closure developers right that's just
there there weren't 1200 enclosure
developers to go higher so there were
you know we hired people who were smart
and were wanting to uh wanted to do cool
stuff and we we taught him closure so
um you can do that too
um things that are not obstacles in my
opinion and you're free to fight with me
about this but
um there are so many learning materials
out there for closure people are
continually making them there are really
good old ones
um on the closure team it's people are
like people often ask us on the closure
team why don't you write more learning
material like
Stu and I wrote program enclosure a
corrode closure applied Focus co-wrote
Joy of closure like we've collectively
have written three three I think pretty
good books that if you read all those
and you'd be you'd know a lot at that
point
um they're they're and this is just
scratching the surface there are tons of
other great books out there there are
tons of great online resources out there
um same thing with tools and editors it
used to be a problem to get a good tool
it's not a problem there are there are
plenty of good tools out there and I'm
not saying they're all perfect I'm not
saying they don't all need more things
of course they do that's always the case
um the biggest problem for me is it's
hard to find the right one the one
that's right for you so they're not all
good for people from a Java background
or a python background or a data science
background or whatever so
um I think there's a lot we can do to
um sort of set up starting points and
paths particularly for people coming
from different contexts so that is a
place where I think we could do some
really good work
um and I think it's also so those are
some obstacles but why is closure
compelling if focuses on solving real
problems you get fast feedback
interactive development you can move
fast uh it's the thing that Bradford
talked about
um it's stable so you don't waste time
turning your environment and fixing
stuff that's needlessly broken which is
what happens to me every time I use any
other language pretty much
uh it is flexible you can respond to
requirements all those things about open
systems and evolution over time it's
designed to be flexible you can do a ton
of stuff the community is great you can
get out so many places now uh and the
people are awesome you can have fun
doing it uh it pays well it is low
friction these days you can get started
really really quickly I think I don't
think we do as good a job as we can
explaining that to people so I'll take
that one but uh yes I think it's uh it's
not that hard to get started these days
and
um you can deploy and reach everywhere
like the amount of ecosystem that you
can reach is is really like all of the
major ecosystems today pretty much so
it's pretty awesome
um
some key opportunity areas so it is
ridiculous that closure is not the
favored language for data science
the data language it's
um we are we are just sitting smack dab
in every place where we should be for
this and so
um my Supreme thanks go out to the
cyclos group and all the people who are
working on all those libraries and it
this is not my area of expertise I don't
know this stuff but
um the the work is getting done and we I
super support all that rich supports all
of it rich has said multiple times to me
this year closure should be the best
language for data science the end that
that and I agree so
um the more we can do on that I think
that's a place where uh data science is
not going away it's going to keep
evolving
um we need to get our foot in the door
there
um and make sure the python is not the
only option on the table because
um I want for me closure lets you get
started quickly and make stuff which is
true of python as well
um but I would much rather take the
thing that I made in closure and make
that a production worthy thing like the
path to that is way shorter than doing
it through python I just in my opinion
so
um you're going to end up with a much
better piece of software at the end uh
in that path
my opinion and uh interactive
development closure has always had this
sort of Rapid feedback cycle do the
ruffle
um the tools that people are putting
together today things like you know data
rabbit and the clerk stuff and there's
so many people building amazing tools
with closure it's not accidental it's
closures designed for this thing you
know
um we are this is this is where
um this is where we have always shined
and we should we should continue to push
it as a key thing for closure or a key
selling point for closure it it lets you
work interactively with your program uh
you know as a living thing and it is the
best part of
um of lisp and small talk and all of
that tradition and so
um we are going to keep working on that
so
uh core team priorities
um this is not coming for Rich this is
not a road map this is me just
um sort of reflecting over the things
that we have worked on in the last year
a lot of which is not out yet
um but things around interactive
development we continue to think that's
important we're continuing to do work
with datify nav
um with prouple uh Rebel is sort of a
great tool for uh doing that stuff there
are others now like portal and
um
my mind is losing me but I'm someone's
out there screaming reveal
reveal thank you sorry too many things
in my head
um so all of these take advantage of
data fine nav
um we have identified some issues around
um being able to connect Rubble remotely
I don't know if anybody caught that
earlier but I was actually connecting
Rubble remotely not in proc to calva
when I was doing the maze work
um so we have a working version of that
uh it has some really interesting
reusable Tech underneath it which we're
going to release
um and that should be useful to lots of
other people too not just to Rubble
um I've been doing a lot of work on
ad-libs recently so it's coming we're
going to get it integrated into closure
itself in some way we're trying to work
out the best ways to do that
um and some of that also hooks into
closure CLI a little bit
um so we will always continue working on
improving interop with jvm host
both to get access to new functionality
things like um Loom is a really
interesting and a lot of the value-based
stuff that's coming out in the newest VM
jvms is really interesting and it both
to get us access to those new features
where they make sense for us and also
for performance so that's that work is
never going to stop it's just going to
be a continuing ongoing thing we've done
some some air op work this year which is
not also we had not quite gotten it to
the release point but working on it for
112 time frame
um we'll continue working on tooling
um done a lot this year continue pushing
that pushing that up the hill
um and I think uh working on the new
closure developer experience that really
that's a lot of really website and and
tooling and a lot of different stuff
it's it's just uh like I said it's just
connecting the dots that already exist a
lot of a lot of places uh and uh
thinking about that warm and then uh
I'll include spec we have not sort of
actively working on it the second but we
have been talking about it lately and
and uh hopefully that will get some
Cycles in the new year which I'm sure
lots of people are happy to know
um would like to get the spec 2 work at
least to a point where it's released
even if it's maybe not you know the end
point we would like like to at least get
that to a point where it's out there so
uh so I'm gonna leave you with this uh
move faster Break Stuff but we don't
break things right so we're not going to
do that we're gonna move fast we're
gonna make stuff so I'm making that the
uh and I'm sure Bradford would sign up
for this
um let's keep moving fast and making
stuff and I want to give a big thanks to
the re-closure team uh they've done a
great job and I really appreciate
everything they did putting this
together
and if you're interested in more closure
stuff closure conj is coming April 27th
28th it will be in person in Durham it
will also be streamed online
um so you should be able to get access
to that from anywhere and we would love
to see some of you there and Jordan
mentioned strangely the last stranger
will be September 21st and 22nd next
year in St Louis so
that's all I have
5.0 / 5 (0 votes)