Alex Miller Keynote "The Amazing Clojure"

London Clojurians
1 Jan 202351:43

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

00:00

🎉 クロージャーコミュニティへの感謝と講演の紹介

講演者はクロージャーコミュニティへの参加を楽しんでおり、特にビッグテンアプローチと呼ばれるコミュニティグループの取り組みを高く評価しています。講演のテーマは「驚くべきクロージャー」で、迷路を生成し、解決するアイデアを元に話す予定でしたが、実行が難しくなり、代わりに迷路について話すことにしました。

05:01

🧩 迷路のアルゴリズムとコードデモ

第1部では迷路に関する話が行われ、1913年のウェブスター辞典による迷路の定義が紹介されています。次に迷路生成アルゴリズムについて説明され、特に単純な右向きのアルゴリズムと再帰的バックトレーカーアルゴリズムが紹介されています。コードデモではRebelを使用して迷路を可視化し、迷路の生成過程をステップバイステップで説明しています。

10:04

🔄 ユニカーサル迷路と迷路の解決

ユニカーサル迷路について話し、これは空間を埋める曲線であり、再帰的バックトレーキングを使用して生成されると説明します。しかしながら、デモンストレーション中に環境が壊れてしまい、デモが中断されることになります。

15:06

🤔 迷路の解決方法とクロージャーの紹介

迷路の解決方法としてDijkstraのアルゴリズムと再帰的なバックトレーキングについて説明し、その後にクロージャー言語の紹介とその15周年を祝うセレブレーションが行われています。また、クロージャー言語の創設者であるRich Hickeyに感謝の言葉を述べています。

20:07

🌟 クロージャー言語の強みとコミュニティ

クロージャー言語の強みとして、ドメインの複雑性と誤解を扱う方法、変数の中心によるプログラミングの問題点、不変データ構造のサポート、情報の多様性、名前の弱いサポートなどが挙げられます。クロージャー言語はこれらの問題に焦点を当てており、そのために開発された言語です。

25:07

📈 クロージャー言語の成長と評価

クロージャー言語が仕事で使用される割合が増加し、大企業での利用も増えていると報告されています。クロージャー言語のダウンロード数は月間200万回を超え、ユニークIPからは25万件ものダウンロードがされています。また、クロージャー言語を採用している企業が挙げられ、その中にはニューバンクが1200人以上のクロージャー開発者を抱えていることが紹介されています。

30:09

🛠️ クロージャー言語の柔軟性とツール

クロージャー言語はJVM、JavaScript、CLRなどへの展開が可能で、その柔軟性と多様なツールが紹介されています。また、エディタとツールが豊富な環境を提供していると同時に、コミュニティが活発であることも強調されています。

35:10

💰 クロージャー言語の経済的価値とコミュニティの支援

クロージャー言語は経済的価値が高いとされ、その安定性と柔軟性、そしてコミュニティの活発さはその理由の一つとされています。また、クロージャー言語に対する様々な形の支援が行われていると報告されており、その中にはニューバンクが月間で約40人の開発者を支援していることも紹介されています。

40:10

🚀 クロージャー言語の将来性と課題

クロージャー言語が抱える課題として、既存の言語への固定観念、教育機関への普及の難しさ、親和性の欠如などが挙げられます。一方で、クロージャー言語はデータサイエンス分野での採用を目指すべきであり、その柔軟性とコミュニティのサポートがその成功につながると述べています。

45:12

🛑 クロージャー言語の強みと発展の鍵

クロージャー言語は実際の問題解決にフォーカスしており、開発者の迅速なフィードバックとインタラクティブな開発を可能にしています。また、言語の安定性とコミュニティの活発さは、発展の鍵とされています。

50:13

🔧 クロージャー言語の開発者体験とツールの進化

クロージャー言語の開発者体験が向上し、ツールが進化していると報告されています。特に、データファインナビゲーション、プログラミング言語との統合、リモートツールとの連携などが挙げられます。

🌐 クロージャー言語の多様な展開とコミュニティイベント

クロージャー言語は多様な環境で展開されており、コミュニティイベントも活発に行われています。クロージャー言語のイベントであるClosure Conが開催され、またStrange Loopという別のイベントも紹介されています。

Mindmap

Keywords

💡クロージャー

クロージャーは、関数とその関数にアクセス可能な変数をグループ化したデータ構造です。このビデオでは、クロージャー言語の強みとコミュニティの活発さを強調しており、言語の使いやすさと柔軟性に焦点を当てています。例として、ビデオではクロージャー言語がどのようにして問題を解決し、開発者体験を向上させるかについて話されています。

💡迷路アルゴリズム

迷路アルゴリズムとは、コンピュータグラフィックスやゲーム開発などで使用される、迷路を自動生成するアルゴリズムのことです。ビデオでは迷路生成とクロージャー言語の応用について議論しており、迷路を通してクロージャー言語の柔軟性と表現力を説明しています。

💡ユニカーサル迷路

ユニカーサル迷路とは、入り口と出口が一定の迷路のタイプです。ビデオでは、ユニカーサル迷路を生成するアルゴリズムについて説明しており、これはクロージャー言語を使って迷路を表現し、解決する能力を例示するのに役立ちます。

💡再帰的バックトレーキング

再帰的バックトレーキングは、迷路生成アルゴリズムの1つで、再帰関数を使って迷路を生成する方法です。ビデオではこの手法を使って迷路を生成し、クロージャー言語での再帰的な問題解決プロセスを説明しています。

💡関数型プログラミング

関数型プログラミングは、変数の変更を避け、関数としてデータを扱うプログラミングパラダイムです。ビデオではクロージャー言語が関数型プログラミングの原則を採用しており、それがどのようにソフトウェア開発の複雑さを軽減するかを強調しています。

💡不変データ

不変データとは、一度生成されると変更できないデータ構造のことです。ビデオではクロージャー言語が不変データを採用しており、これによりソフトウェアのバグやエラーを減らし、コードの予測可能性を高める利点を説明しています。

💡コミュニティ

コミュニティは、特定の分野や興味を持つ人々が集まって交流する集団です。ビデオではクロージャー言語のコミュニティが活発であり、言語のサポートや発展に貢献していると強調しています。また、コミュニティが提供する様々なツールやライブラリについても触れています。

💡柔軟性

柔軟性とは、変化に応じて適応する能力を指します。ビデオではクロージャー言語の柔軟性が強調されており、さまざまなプラットフォームや要件に応じてコードを展開・変更できるという利点を説明しています。

💡ツール

ツールとは、ソフトウェア開発において役立つプログラムやアプリケーションのことです。ビデオではクロージャー言語とそのコミュニティが提供するツールの豊富さと、それらが開発プロセスを効率化し、簡素化するのに役立つと紹介しています。

💡データサイエンス

データサイエンスは、統計学、コンピュータサイエンス、およびドメイン知識を組み合わせてデータから洞察を得るプロセスです。ビデオではクロージャー言語がデータサイエンス分野でより好まれる言語になる可能性があると示唆しており、その適切なライブラリや機能の強化が行われていると語っています。

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

play00:04

uh thank you for the introduction and I

play00:07

it's a pleasure to be here I really

play00:09

enjoy uh getting together with closures

play00:12

and and being able to do this and I

play00:15

really appreciate the Big Ten approach

play00:17

that Rec closure has done with bringing

play00:19

in all the community groups and

play00:21

everything else

play00:22

um that's fantastic and and it's it's

play00:24

been so cool to hear about all the

play00:26

different

play00:27

stuff and all the people who are uh

play00:29

working so hard to make closure in the

play00:31

closure Community a great place to be so

play00:34

uh so my talk is called the amazing

play00:36

closure

play00:37

which you might also call the uh maze

play00:40

enclosure

play00:42

and I had this idea while reading this

play00:46

book earlier this year

play00:48

of doing a taught which is a cool book

play00:49

so you should go check it out

play00:52

um so I had this idea like what if I

play00:54

could generate mazes with closure

play00:56

what if I could solve masses with

play00:58

closure

play01:00

what if each cell of a maze represented

play01:02

a set of slides and then the talk order

play01:04

was generated from May's solution

play01:06

this is a really cool idea and it's a

play01:09

really bad idea also so uh I did this

play01:12

and it was the results were not good so

play01:15

it is very hard to build a narrative

play01:17

structure uh when you don't know the

play01:19

order that anything's going to be in

play01:21

um so I I didn't end up doing this so

play01:25

sorry about that or you're welcome

play01:27

whichever one is appropriate

play01:30

um

play01:31

and so instead this is going to be a

play01:34

talk in three parts the first part is

play01:35

going to be about mazes because I did I

play01:37

wrote a bunch of Base code and it was

play01:38

fun and so uh I heard yesterday on a

play01:41

keynote that you're supposed to do

play01:42

things that are fun so we're gonna do a

play01:44

little fun first and then we're going to

play01:45

talk about closure and why closure is

play01:47

awesome and some of what you've heard

play01:49

today and we're going to talk a little

play01:52

bit about uh future closer stuff

play01:55

so I'm gonna go back to the vehicle the

play01:56

amazing closure the amazing closure The

play01:58

Mazes for programmers book do that this

play02:01

stuff part one mazes all right we're all

play02:03

caught up so what is a maze so if you

play02:07

could actually install the 1913

play02:08

Webster's Dictionary in your dictionary

play02:10

which I recommend doing

play02:12

um because it has really cool stuff in

play02:14

it that's much more interesting than the

play02:16

one than the dictionaries that are

play02:18

installed by default so uh these are

play02:20

some definitions for Maze that were that

play02:22

are in the Webster's Dictionary uh from

play02:25

1913 which really gives you a lot of the

play02:29

confusion perplexity bewilderment

play02:31

baffling a lot of good words there

play02:34

um so uh that was indeed my experience

play02:38

of trying to build a talk that was in

play02:40

the form of a maze so so but I found a

play02:44

solution which was to not do that so

play02:47

um there are a bunch of maze algorithms

play02:49

um there are probably I don't know 10 15

play02:51

different ones that are in the book

play02:53

maybe more if you take some of the

play02:55

exercises and and ideas in there

play02:58

um I'm going to talk about two of them

play03:01

um this is a really simple one I think

play03:02

this might be one if not the first one

play03:04

that's in the book

play03:06

um so the basic idea is starting from

play03:08

the top left

play03:10

that you move right

play03:12

and then uh do so do the top row and

play03:15

then do the second row third row from

play03:17

left to right and at each step you

play03:19

randomly decide to either extend the run

play03:22

that your the passage you're curving to

play03:25

the right or end the run that you're on

play03:27

and carve a random passage down from any

play03:30

cell in the run that you just made

play03:33

um so

play03:35

and I have slides here but that's no

play03:37

that's no fun right let's do some stuff

play03:39

and let's just let's do some code stuff

play03:41

that's more fun so

play03:43

um

play03:44

and I'm using Rebel here

play03:47

and so I have a representation of a map

play03:49

of a maze which is just a map and it's

play03:52

got like an adjacency Matrix kind of

play03:54

thing in it and some other information

play03:56

[Music]

play03:57

um but that that's not fun right we need

play04:00

to actually show this so I wrote a

play04:01

little viewer for rebel

play04:04

um to show me that maze so this is just

play04:06

uh so we can make new mazes lots of

play04:09

Mazes and all the mazes that we're

play04:11

talking about are are almost all the

play04:14

mazes we'll talk about today are perfect

play04:15

mazes which generally you can pick an

play04:17

entry and an exit Point anywhere on the

play04:19

Maze and there should be a path there so

play04:23

um so you can you can try to pick that

play04:26

out yourself if you like but

play04:28

um this is uh just a typical algorithm

play04:32

and and then I wanted to show I wanted

play04:35

to show how we're carving which I have

play04:37

slides for but like I said that's no fun

play04:40

so here's some code and I thought it'd

play04:43

be useful if I just went into here and

play04:49

put a little tap in there

play04:51

that seems like a good idea right

play04:54

all right so I made a new one oh look

play04:56

there's all these mazes here

play04:59

I'll convenient

play05:00

all right so I'm gonna

play05:03

um I'm gonna browse off of that tap

play05:06

and then we can walk into that and we

play05:09

can actually step through all the steps

play05:11

so you can see that as we move to so

play05:14

we're going to start in the upper left

play05:15

and in each cell so the first cell we're

play05:17

going to randomly decide should we carve

play05:19

down or to the right so we decided to

play05:21

carve right right right and then we got

play05:23

to the end of a run so in this step we

play05:25

carved down instead

play05:29

um and that ended that run and then so

play05:31

we start over at the next cell which is

play05:33

this one right here

play05:37

lost my there

play05:41

um so these two they they both basically

play05:43

carved down so we didn't so several

play05:45

times I don't know we didn't we just

play05:46

carved down instead of going to the

play05:48

right

play05:49

and we're just going to keep going

play05:52

so I'm just I'm just re-walking all the

play05:54

code that had all the things that

play05:55

happened while I was generating that

play05:56

maze right

play06:00

oops Yeah so there we got to the end so

play06:03

we ended up with a maze right so that's

play06:05

a really simple algorithm there's some

play06:06

other ones like that

play06:08

um you might see that um if you look at

play06:10

a few of these in a row

play06:12

so let me go back to

play06:17

so if you look at a few of these in a

play06:19

row I'm going to make a few a bunch of

play06:21

them tell me if you see any similarities

play06:23

here

play06:25

look at the bottom row

play06:27

because the only choice when you get to

play06:29

the bottom row is going right you can't

play06:30

carve down all of these have a bottom

play06:33

row that's open and often you end up

play06:35

with a right a right column that's

play06:37

mostly open so this is not there this

play06:41

can't generate every possible base right

play06:43

it's it has some biases to it and

play06:46

there's several algorithms like that

play06:47

that have some kind of bias built into

play06:49

it and then there are other ones that do

play06:51

not

play06:52

um so this is

play06:55

there's one called Wilson that makes

play06:59

mazes

play07:00

so that's cool

play07:03

those don't have that property or

play07:05

there's one called hunt and kill

play07:10

so these are cool the one I like the

play07:12

best is actually

play07:14

um

play07:15

this one which is a recursive

play07:16

backtracker algorithm

play07:19

so this one just tends to make things

play07:22

that are pleasingly curvy uh if that

play07:26

makes sense

play07:28

[Music]

play07:29

um and this is a very simple algorithm

play07:31

actually to go in and

play07:35

and where I'm at

play07:39

I can't

play07:40

the stupid things in the way

play07:45

all right

play07:49

let's

play07:50

see if I could find my back tracker in

play07:53

here somewhere

play07:56

so same thing here oh I do I was

play07:58

actually already tapping it so how

play07:59

convenient

play08:01

how convenient

play08:04

I got lots of stuff in the backtrack now

play08:07

tap now

play08:13

friends that

play08:19

um

play08:21

starting to get a lot of data in here so

play08:29

all right so the way recursive

play08:31

backtracking works is uh actually you

play08:34

get to the right place in here

play08:41

all right so recursive backtracking

play08:43

we're just going to carve as far as we

play08:45

can until we run into a dead end so

play08:50

do keep carving keep carving keep going

play08:52

oh wait a dead end right so then you

play08:54

just pick a random new place that you've

play08:56

never seen before and start crying new

play08:58

at it and we picked a place right in

play09:00

here there wasn't far to go so now we're

play09:03

going to find a new place which was up

play09:06

here and now we're going to find a new

play09:08

place and here we're gonna get a lot of

play09:10

room to run

play09:11

then you're going to keep going and

play09:13

sometimes it takes a while to get

play09:15

through all of this stuff but in the end

play09:17

you end up with a cool maze so that's

play09:21

cool so I'm gonna these are my backup

play09:25

slides which we don't care about because

play09:27

everything worked flawlessly

play09:31

all right

play09:32

um so an interesting thing I ran into as

play09:34

I was doing the trying to make a talk

play09:37

out of this was

play09:39

um I immediately found when you looked

play09:41

at the at a maze that um

play09:46

that often not very many of them would

play09:51

have uh not very many of the cells would

play09:53

be involved in the solutions so I guess

play09:56

I haven't shown this yet

play09:58

but it's more fun if you solve these

play10:00

mazes first so let's do that so this is

play10:04

just amazed with the solution in it

play10:06

but you notice that the packs the path

play10:08

length here is 27 there's 64 total

play10:11

squares so I'm only using like you know

play10:13

maybe a third or somewhere in the

play10:16

quarter to a half range in in most in

play10:19

most mazes so there's a big one but it

play10:24

seemed like a lot of effort for me to

play10:25

make slides for all those cells and then

play10:28

not use a third of them or a half of

play10:29

them so that made me disappointed so

play10:32

what I did and said was

play10:34

um there's another kind of maze called a

play10:36

unicursal maze and that is basically a

play10:40

space filling curve

play10:42

that

play10:43

um

play10:45

that will let's see this is so uni

play10:53

can I do that oh I use the wrong one

play11:00

[Music]

play11:03

this is really cursing

play11:07

news have been here

play11:09

I bet you I I bet you I know exactly

play11:12

what happened so I think this threw an

play11:14

exception which you can't see because

play11:16

you can't see all of my screen

play11:19

I think this one

play11:22

expects there to be a starting cell

play11:26

which I defaulted other other places

play11:34

hmm

play11:38

I don't know what I did

play11:41

not sad

play11:47

oh I know exactly what I did so this is

play11:50

the problem with universal mazes

play11:52

um so the way you make them unicorn maze

play11:54

is basically the same as recursive

play11:57

backtracking

play11:59

um and then there's uh well so there's

play12:01

there's two ways to make it one is

play12:03

actually to take

play12:06

um do I have

play12:08

so one is actually to

play12:11

I was very

play12:16

I actually missed a slide here I missed

play12:17

David Bowie so

play12:20

um Universal mazes are also also called

play12:22

labyrinths in some places so

play12:24

um you know had to get a picture David

play12:26

Bowie in here

play12:28

um so there's two two ways to make a

play12:30

universal maze that I know of so one is

play12:32

to take any perfect mace you already

play12:34

have and effectively cut the pat cut all

play12:38

of the paths that you have in half

play12:41

um

play12:42

and so as an example here here is a

play12:44

perfect maze that a 4x4 perfect maze

play12:47

and so basically I drew a half line

play12:52

between all of the all of the existing

play12:55

things and you'll see and you have to

play12:57

add an extra little close you have to

play12:58

close off the first spot here to make

play13:01

the entry point and you then always will

play13:04

end up with a universal maze that exits

play13:07

right next to the entrance because we

play13:08

basically have stolen you know that same

play13:11

uh entrance path

play13:14

um this always works uh it's fast and

play13:17

it's really boring and so that's no fun

play13:21

um the other way to do it is with

play13:22

recursive backtracking and so just like

play13:25

we did uh recursive backtracking before

play13:29

um you're gonna you wanna keep going

play13:31

until you hit a dead end

play13:33

but instead of starting at a random

play13:35

point you then back up and undo your

play13:38

path to the point where you can make a

play13:40

different decision

play13:42

um this is kind of what's called oh my

play13:44

God complexity it's it's not it's not

play13:47

actually exponentially bad it's actually

play13:48

much worse than that so it's you know

play13:50

some sort of factorial bad if if you're

play13:53

if you're super unlucky

play13:55

um there are tricks so you can do things

play13:57

like memorize dead paths so that if you

play14:00

return to them you

play14:02

um you don't revisit them you can uh you

play14:06

can think about how to detect the case

play14:10

where you hit a wall

play14:12

and you've got live cells on either side

play14:15

of you you are not going to be able to

play14:18

revisit both of them so you found a dead

play14:20

end you don't have to go visit the whole

play14:22

inner part and stuff like that

play14:25

um but it's still bad so

play14:27

um the reason things aren't working is

play14:29

because uh my computer is thrashing

play14:31

itself to death trying to make an 8x8

play14:33

Universal maze right now

play14:35

um which is bad

play14:37

um eight by eights take uh can take a

play14:40

very long time to make so and so so that

play14:44

was the problem there was that uh I did

play14:46

too much

play14:49

um so I'm gonna

play14:51

um

play14:54

I am going to

play14:59

to give up and rebuild my environment

play15:01

here

play15:05

this happens

play15:09

even to me

play15:18

foreign

play15:28

yeah so if anybody else there has

play15:31

imposter syndrome I managed to break my

play15:33

environment yesterday in a way that

play15:34

nothing that I had done for the last

play15:36

several weeks worked

play15:37

and it took me a good half hour before I

play15:41

realized what it was

play15:43

what was it I'm not gonna go into

play15:44

because I haven't released the code yet

play15:46

so

play15:47

um

play15:50

foreign

play16:00

let's be a little less ambitious

play16:05

great

play16:11

this thing takes a starting

play16:15

so

play16:18

let's see if that works I think I'm

play16:20

connected

play16:22

foreign

play16:39

sorry I'm running actually a fairly

play16:42

large pile of unreleased various bits of

play16:45

rubble so it's it's not all entirely

play16:49

baked yet

play16:51

it's still not connecting for me I don't

play16:54

know it doesn't matter

play16:56

um we're gonna go on so

play16:58

I have slides this is why we prepare so

play17:01

this is an example of a slide made with

play17:03

universal recursive backtracking this is

play17:05

an API 8x8 my computer just accidentally

play17:08

happened to be very lucky and made this

play17:10

in 11 milliseconds

play17:12

um but most of them took more like 20

play17:14

minutes when I was making them so uh so

play17:16

this is an example of one that does not

play17:18

have an entry and exit that both happen

play17:20

right next to each other it's got

play17:22

um

play17:25

yeah here so it's upper left and upper

play17:28

right are the entry and exit for it so

play17:30

anyways that's cool so how do we solve

play17:33

mazes

play17:34

um Dexter's algorithm we basically you

play17:37

basically flood the maze record the

play17:39

distance

play17:40

um and then from the end choose a path

play17:42

with decreasing distance and then you

play17:45

have basically a backwards path of that

play17:47

point so you just reverse it you can

play17:49

also do a depth first search with

play17:51

backtracking and that's basically how

play17:52

the universal solver it just follows it

play17:55

uh this is a example of

play17:58

uh what the distances look like so this

play18:01

is a pretty big maze and it's flooded

play18:03

from the upper left basically finding

play18:06

distances so that the color here is

play18:08

basically distance from uh zero zero uh

play18:12

and then if you so wherever you want to

play18:14

find a path from you basically you can

play18:16

pick the bottom right and just follow a

play18:19

decreasing gradient of color until you

play18:21

get back to the beginning

play18:26

let me move this out of the way

play18:31

all right so that was amazed stuff uh

play18:34

that was fun I I assume you probably are

play18:36

asking that looks fun can I have that

play18:38

code and the answer is yes but not now

play18:40

because it's a big it's a big uh it's a

play18:43

big mess but uh you know it would be

play18:45

really cool if it would be to have

play18:46

something in the clerk Garden that uh

play18:49

showed off some maze stuff so uh there

play18:51

maybe I'll do that but probably I won't

play18:53

have time and I'll just release the base

play18:54

code somebody else can do that

play18:56

uh so closure let's talk about some

play18:58

closure stuff uh recently A bunch of us

play19:01

got together and celebrated closures

play19:03

15th anniversary we had a little we also

play19:05

had a video thing that uh went out from

play19:08

new bank

play19:09

um unfortunately Focus was not able to

play19:11

be there on this weekend so he's not

play19:13

pictured and also I want to say happy

play19:16

birthday to focus yesterday was his

play19:17

birthday

play19:18

so I will get that in there

play19:22

um and

play19:23

I want to uh take this opportunity to

play19:25

say thank you to rishiki so

play19:28

um there's a bunch of cool people in the

play19:29

closure Community

play19:31

um there's a lot of Amazing Ideas

play19:33

um a lot of the things that I think are

play19:37

um are important about closure come come

play19:40

from obviously from Richard's brain

play19:43

um I didn't end up at working with Rich

play19:45

by accident

play19:47

I looked around and and tried to find

play19:49

people that uh

play19:52

um

play19:53

I thought were doing important work

play19:57

um and I that's how well one of the ways

play20:00

that I that I got to closure and

play20:03

um so I want to thank him for

play20:06

um making closure and

play20:09

um the way that he thinks about problems

play20:11

uh are really important and I say I say

play20:15

this all with a little bit of

play20:16

trepidation because there is a lot of uh

play20:18

pushback in places about the sort of

play20:21

hero worship of rich or whatever uh and

play20:25

I think those are fair criticisms

play20:27

um and closure is not just Rich

play20:30

obviously there is a huge Community

play20:31

which we have seen all day yesterday and

play20:33

today

play20:35

um and so there are many many people

play20:38

that make closure great

play20:40

um but I personally

play20:42

um think rich is one of the most

play20:44

important computer scientists of the

play20:45

last 20 years maybe ever and it's really

play20:49

all about the way that he approaches

play20:50

problems and problem solving and

play20:54

um making that the focus of everything

play20:57

so this is my mini appreciation for Rich

play21:00

so thanks Rich

play21:03

um and when he started closure

play21:05

um

play21:06

this is a picture that he's used in some

play21:08

in some other other talks and things

play21:11

like that

play21:13

um the important thing here was trying

play21:15

to think about what are the problems

play21:18

that programmers face when we build

play21:19

systems and the two biggest ones were

play21:22

domain complexity which is something

play21:24

that is built into the domain so that's

play21:27

not something that we inherently can fix

play21:29

right

play21:31

um and the second one is misconception

play21:32

which is just working on the wrong thing

play21:34

or doing solving the wrong problem

play21:37

solving the problem wrong there's a lot

play21:39

of different variants of this again this

play21:41

is not a programming problem this is a

play21:43

human problem

play21:45

um but it is something to keep in mind

play21:47

as you think hard about you know what am

play21:50

I doing every day

play21:52

um and then there's a big slew of

play21:54

problems that are really important and

play21:55

are the domain of programming languages

play21:57

and so

play21:59

um just looking at a few of these like

play22:00

uh Place oriented programming the sort

play22:03

of centrality of mutable places

play22:08

um and mutable databases both of those

play22:10

are sort of what he calls place oriented

play22:13

programming and

play22:16

um there are so many problems that come

play22:17

out of that and so his search really was

play22:21

for how do we how do we work in a way

play22:24

that is not that and there were a lot of

play22:27

there was already a lot of work on

play22:28

immutable data structures and things

play22:30

like that uh okasaki and all those kinds

play22:33

of things and

play22:35

it wasn't until he found the the the

play22:38

hashary map tree work of uh Bagwell that

play22:42

this really became a thing that he could

play22:44

address in the programming language and

play22:47

I would argue that he has you know

play22:48

extended that to a large degree into

play22:51

daytonic which takes the same sort of

play22:53

approach to data in the database

play22:57

um weak support for information this is

play22:59

really the idea here is

play23:02

um information is sparse it is uh it has

play23:07

partial information

play23:08

it has

play23:11

um increasing information over time as

play23:14

we work on things we tend to add

play23:15

attributes to it

play23:18

um open so open Maps open polymorphism

play23:21

all those kinds of things it all comes

play23:23

out of this

play23:25

um and I'm not going to talk about all

play23:26

these weak support for names is another

play23:28

really important one

play23:30

um but a lot of these are very visible

play23:32

in design exposure they're still visible

play23:34

today there's still things we talk about

play23:36

every day on the closure team or these

play23:38

exact things so

play23:40

um that's if if anybody you know has

play23:43

enjoyed using closure to work on their

play23:45

systems the focus on these problems is

play23:48

why that I mean that is the big thing

play23:51

um so

play23:53

uh closure work so I want to go through

play23:55

just some reasons that that I love

play23:57

closure so closure works and I think it

play24:01

is clear from the state of closure

play24:03

survey this is from

play24:05

um two different questions on there that

play24:07

people are using closure more and more

play24:08

for work they're using it more and more

play24:11

in big organizations

play24:13

um there are more and more downloads We

play24:15

just recently crossed two million

play24:17

downloads a month for the main closure

play24:19

artifact

play24:20

um you'll see the unique IPS are not are

play24:23

are a more complicated picture

play24:25

um there's a big reason for that which

play24:27

is that in April we released closure 111

play24:29

and in June we released closure 112

play24:32

Alpha One so those two things make

play24:34

people download new stuff so but you

play24:37

know there's 250 000 IPS downloading and

play24:40

closure from somewhere every month so

play24:42

there's a lot of people out there using

play24:44

closure

play24:45

um there are now a bunch of closure

play24:46

unicorns um new bank I'm somewhat

play24:49

familiar with

play24:50

um but other ones that have happened

play24:52

over the last year or two and imperative

play24:54

reefy Health apps flyer tax bet I'm sure

play24:57

there are others that I don't even know

play24:58

that are on this list

play25:00

and newbank now has more than 1200

play25:03

closure developers more than a thousand

play25:05

microservices I don't even know how much

play25:07

lines of code millions of lines of code

play25:09

of closure code so they're a huge a huge

play25:13

user of both closure and daytonic

play25:16

um

play25:17

but also I know these other companies

play25:19

are as well and there's lots of other

play25:20

small companies

play25:22

um

play25:22

this uh there's this post that Ed Weibel

play25:26

wrote when

play25:29

um cognitek joined new bank and

play25:32

I think I revisit it periodically

play25:34

because I think it's really it was

play25:36

really important

play25:37

um I think it really highlighted a lot

play25:38

of stuff that newbank found useful

play25:41

um because they they really made a very

play25:44

considered choice about which language

play25:45

to use

play25:47

um based on managing complexity

play25:51

um so this is a quote from with a few

play25:53

minor edits from from that post which is

play25:56

down down in the footer

play25:58

um but they knew they wanted to build

play26:01

something with scale they knew that the

play26:03

biggest threat to scale was complexity

play26:05

and they wanted to constrain and

play26:08

mitigate categories of complexity and so

play26:11

they were you know reading out of the

play26:13

tarpet looking at databases that led to

play26:15

the atomic which led them to closure so

play26:19

um this is a I think a fascinating way

play26:22

that a company the size of newbank you

play26:25

know got started with it so it's a it's

play26:28

very interesting and I don't think it's

play26:29

that much different from from some of

play26:31

the things that Bradford was saying in

play26:32

his talk

play26:34

um it we have you know closure is

play26:37

squarely focused at how do we reduce the

play26:40

complexity of writing and evolving our

play26:42

code over time and that's

play26:45

um that is our uh damper in many cases

play26:48

that's the thing that stops us from

play26:50

moving forward

play26:52

uh closure makes us happy in the stack

play26:54

Overflow survey closure is one of the

play26:56

most loved languages

play26:59

it is also this study that people did of

play27:01

uh I think it was of

play27:04

um words in

play27:06

um different GitHub repos or words or

play27:09

comments and issues I'm not really sure

play27:10

I don't remember now exactly what the

play27:12

details were but you'll see closure here

play27:14

had the the most uses of you know

play27:17

awesome cool fun happy helpful and

play27:19

interesting and and get up repos and

play27:22

issues and things like that so

play27:24

um we we like stuff that's cool and it's

play27:27

a happy community

play27:28

to in most ways uh closure pays well

play27:33

um closure has topped this survey I

play27:35

think every year that we have been

play27:37

included in it

play27:38

um there is at least one or two years

play27:40

where we were not

play27:41

um so thank you to everybody who keeps

play27:43

filling it out it uh is really important

play27:47

for us to show up and be visible in

play27:48

surveys like this and so I know it's a

play27:51

pain to go fill out surveys and

play27:53

sometimes they're long and all that but

play27:55

it really does help in making us visible

play28:00

um closure is stable so

play28:03

um Rich has talked about this a link

play28:04

breaking changes are breaking so don't

play28:06

do that instead do things like accretion

play28:08

which is adding new things relaxation

play28:11

which is being more tolerant in what you

play28:13

accept or make a new name instead of

play28:16

breaking a thing that you have this has

play28:18

become a cultural value both in the

play28:20

language and in the libraries

play28:22

um and it is to all of our benefits so

play28:25

keep doing it it's awesome

play28:28

um there are some language features that

play28:30

help with this things like open Maps

play28:31

open polymorphism avoiding concretions

play28:33

all those are things that help with

play28:36

um help with making closure stable

play28:40

um some some examples that people talk

play28:41

about a lot

play28:42

um riches Rich wrote uh this demo of

play28:46

ants to a sort of demo some of the

play28:50

concurrency features of closure which

play28:51

was I don't know the code dates till you

play28:53

know 2009 or 10 or something like that

play28:55

you can find it out there and adjust and

play28:57

it still runs today uh and the exact

play28:59

same code runs today

play29:01

um in current closure just like it did

play29:03

in closure pre 1.0 wherever that was

play29:07

um Stu's also famously mentioned that

play29:08

the code for programming closure which

play29:10

was the first closure book

play29:12

continues to uh run with every new

play29:15

release and and he hasn't modified it

play29:17

too much I think that's actually

play29:19

slightly wrong I think there were some

play29:21

examples that actually did break with

play29:22

the 1.3 numerix changes but uh in

play29:25

general that is largely true still

play29:29

um you may have seen this graph floating

play29:30

around it's been posted on Twitter and

play29:32

things like that uh it was this is from

play29:34

the history of closure paper

play29:36

um I did the work to make this graph

play29:37

which involved a pile of python and go

play29:41

stuff

play29:43

um and it ironically I went back and

play29:46

tried to give that to somebody not too

play29:49

long ago and everything about the python

play29:51

and go environments that I had had bit

play29:54

rotted so bad that I could not get any

play29:56

of it to run anymore it was all

play29:58

completely broken so it's a little bit

play30:00

of ironing for you

play30:03

um just for comparison I wanted to

play30:04

include a few other ones I think are

play30:05

interesting so like this is get I think

play30:08

you should not be surprised by this uh

play30:10

git is a very stable code base Linux

play30:13

also a very stable very well-managed

play30:15

code base uh this is a Scala you might

play30:18

notice it looks a little different we

play30:20

call this the slumping cake graph

play30:23

um and then this is rails which you

play30:25

might might also suspect would look kind

play30:28

of similar

play30:29

um so closure is flexible you can take

play30:32

closure and you can you can deploy it on

play30:35

the jvm or to JavaScript or to the CLR

play30:38

which actually just this week the

play30:40

closure CLR 1120 Alpha One compatibility

play30:43

was announced so the closure CLR still

play30:47

exists I don't know that almost anyone

play30:49

actually uses it but it still exists

play30:52

um and David Miller continues to to bash

play30:54

away at it

play30:55

um babashka's brought this into the

play30:58

world of scripting

play30:59

um and they're you work with graul has

play31:03

been really amazing and I think has

play31:05

really pushed that team in interesting

play31:07

and useful ways and so I'm really glad

play31:10

that all of that stuff exists

play31:13

um we've seen closure flutter come out

play31:15

this year with uh from uh

play31:18

Kristoff and Baptiste and so again

play31:21

that's awesome

play31:23

um and I would also include not as a

play31:25

host but as sort of a

play31:28

um access point uh the clj python stuff

play31:31

which is uh totally awesome to get

play31:33

access to the python environment

play31:36

um sort of as an escape hatch

play31:39

um the the syntax uh you know James

play31:41

Gosling talked about this yesterday is

play31:43

kind of interesting is the it separates

play31:46

syntax and semantics and that ha that

play31:49

has lots of Pros things like the

play31:51

homologonicity and macros and all that

play31:54

kind of stuff but it has the downside of

play31:56

that you're never exactly sure what

play31:59

you're seeing what it means and so with

play32:02

lisp especially you know you can build

play32:04

these towers of abstraction that are

play32:06

um that can be hard for people to come

play32:08

into and understand so you can build a

play32:11

world that's all your own

play32:12

um and the problem is that it's all your

play32:14

own and so it's hard to understand I

play32:17

think closure is interesting in that

play32:19

they did not we did not sign up for all

play32:21

of that flexibility so

play32:24

um things like uh reader macros custom

play32:26

reader macros are a thing that

play32:29

um definitely Fosters this in the in the

play32:30

commonless world but doesn't exist in in

play32:33

the closure world so that's that's an

play32:35

interesting case where we've not not

play32:37

taking on all of that flexibility

play32:40

um there are tons of tools um and I want

play32:43

to mention like we've seen all through

play32:45

this conference if you've been if you've

play32:47

watched any part of it you have seen

play32:48

tons of tools and they're awesome and

play32:51

you've seen tools talking to each other

play32:53

in environments tools embedded in

play32:54

environments and environments embedded

play32:56

in tools and all this stuff and the cool

play32:59

thing to think about is what makes all

play33:00

that work and the answer is Eden like

play33:02

everybody meets at Eden like you can

play33:04

just pass these literal data structures

play33:05

around and know that like whatever tool

play33:08

you give it to like if it's a closure

play33:10

aware thing like it's talking Eden right

play33:13

so I can give it maps and vectors that

play33:15

and uh and probably even tagged literals

play33:18

and things like that and have it work so

play33:21

um so that is the the secret sauce in

play33:24

the middle of all this stuff uh and so

play33:27

keep keep building cool things on top of

play33:29

that

play33:31

it's an awesome substrate for that

play33:33

uh the closure Community is lovely

play33:34

you've seen two days of that here at

play33:36

this conference

play33:37

um there so thank you to all of those

play33:40

people who are doing all this work many

play33:43

of them are on this call

play33:45

um many of them are not on the call

play33:47

um there's tons of people doing stuff

play33:48

it's amazing when I do the draf every

play33:51

week it is just shocking to me every

play33:52

week that there's you know a dozen

play33:54

videos a dozen blog posts there's dozens

play33:57

of libraries that are being updated

play33:58

every single week literally all of the

play34:02

time so there is no break from it it's

play34:05

uh

play34:06

it is a thriving community and anybody

play34:08

who thinks closure's dead is just

play34:10

completely not trying to to find it or

play34:13

trying not to find it because uh uh it

play34:17

is uh throbbing and alive I would say so

play34:21

um that's silly

play34:24

um I I sometimes I think maybe I should

play34:26

just write a bot that goes out on Hacker

play34:29

News every six weeks or so and suggests

play34:31

that some other language is dead just so

play34:33

we'll throw some more food in the water

play34:36

um don't do that I'm just kidding

play34:39

um oh it says sponsorship I think

play34:40

closure is is maybe not unique there are

play34:43

definitely

play34:44

um other language environments that have

play34:46

different levels of Open Source

play34:48

sponsorship many of those are are driven

play34:51

by big companies that have foundations

play34:53

and things like that

play34:55

um but but closure really does have an

play34:56

amazing amount of funding for open

play34:58

source work

play34:59

um and I think that is uh pretty great I

play35:03

I don't think the sort of Grassroots

play35:06

nature of it is matched by many other

play35:10

communities that I can think of

play35:13

um closure us together you know I had a

play35:15

had some had some time yesterday but

play35:17

just to resurface that

play35:20

um they are doing a ton of different

play35:22

kinds of funding they have there are

play35:25

dozens of companies and hundreds of

play35:27

developers that are supporting it uh

play35:29

that's awesome if you're not supporting

play35:31

it even you know to a very small amount

play35:34

and you have the ability to do so I

play35:35

would encourage you to do so or if your

play35:37

company uh is not currently supporting I

play35:40

would encourage you to encourage them to

play35:42

do that it's good for all of us

play35:44

um we and we have an open source that

play35:46

this sort of culture of Grassroots

play35:49

support of Open Source developers as

play35:50

well newbank is supporting about 40

play35:53

developers on a monthly basis which we

play35:54

don't really talk about enough so I'm

play35:57

going to write a post about that soon

play35:58

but

play36:00

um we are supporting a lot of people I

play36:02

know that there are lots but when I go

play36:04

look at those they're you know often 5

play36:07

10 20 other people supporting

play36:10

um those those people on projects as

play36:12

well so uh it's it's certainly not just

play36:15

newbank there are a lot of people

play36:16

helping helping each other to uh make

play36:19

great stuff

play36:20

so the future

play36:25

um I should have brought my shades to

play36:26

where those for that

play36:29

um so

play36:30

I wanted to take a few slides just think

play36:32

about obstacles and spread and some of

play36:33

these James talked about a little bit

play36:35

yesterday but

play36:37

language choices are entrenched you know

play36:39

it's a big thing to choose a language

play36:42

and it's very difficult for a company to

play36:45

change to a new language

play36:47

um or to have that you know decision

play36:51

point where they even really consider

play36:53

another language

play36:55

um and it's very difficult to get into

play36:58

schools and boot camps there's there's a

play37:00

feedback cycle here that you know

play37:02

schools want to teach languages that

play37:05

people use people want to use languages

play37:07

that are taught so it's very difficult

play37:10

to break into that cycle once you do you

play37:12

get a virtual cycle there and I think

play37:14

python definitely you know achieved that

play37:16

they're they're probably the poster

play37:19

child of that

play37:20

um that managed to break into that cycle

play37:22

enough

play37:23

um to feed sort of a flywheel of of uh

play37:27

continued uh people who know the

play37:29

language but

play37:31

um it's it's uh it's difficult to break

play37:33

into that

play37:35

um we need to be doing what we can to we

play37:38

the closure Community does a great job

play37:40

talking to each other

play37:42

um things like this event and other

play37:43

events I think we are pretty well

play37:45

connected in the community to each other

play37:47

I think we are

play37:49

um not great at sort of seeking out

play37:51

external communities to talk to Rich

play37:54

certainly did a lot of this in the early

play37:55

days going to talk to you know python

play37:58

Ruby communities or info queue or you

play38:01

know strange Loop or things like that

play38:03

um and we we need to keep doing that

play38:06

um that's the only way that we're gonna

play38:08

if you want to grow grow the grow the

play38:11

bubble you got to go talk to people

play38:12

outside the bubble so

play38:14

um as you think about if you if you want

play38:17

to help with that submitting talks at

play38:19

conferences is a fantastic way to go

play38:20

talk to other people that

play38:23

um that haven't haven't seen closure

play38:28

um familiarity is a big thing the thing

play38:30

that which would call easiness

play38:33

um it's things that are close at hand

play38:35

right closure is not close at hand for a

play38:37

lot of people who've been through

play38:40

um various you know computer science or

play38:42

Boot Camp or learning

play38:45

um paths so the prefix style is

play38:49

difficult for the reasons James talked

play38:50

about yesterday

play38:52

um the the parens tend to be a blocker

play38:55

for some people even if it's silly it is

play38:59

um functional programming and immutable

play39:01

data if you go look at uh the I didn't

play39:03

put it in here but the closure survey

play39:05

for like what are what are your

play39:07

obstacles to learning closure in

play39:09

particular you'll find that functional

play39:12

programming and immutable data are at

play39:13

the top

play39:14

um it is a different Paradigm it's a

play39:16

different way of thinking about things

play39:17

and thinking in recursion uh also is

play39:21

another thing that's difficult getting

play39:23

out of the loop mindset and into the

play39:25

working at The Collection level

play39:27

transforming one collection into another

play39:29

collection or uh thinking about

play39:32

recursive algorithms those are things

play39:33

that it's very those are very natural

play39:35

ways to structure programs enclosure and

play39:38

they're very unnatural for for a lot of

play39:41

other languages so especially the ones

play39:43

that are taught so

play39:45

um so there is definitely a learning

play39:46

curve there

play39:48

um and I think

play39:49

a lot of that is unlearning you know so

play39:51

there's a lot of unlearning that has to

play39:53

happen uh people who pick up closure is

play39:55

their first language which is not really

play39:57

that common but people who do I think

play39:59

find it to be not that hard so I've

play40:03

heard that from a number of people who

play40:04

went that path but

play40:07

um because they have a little less on

play40:08

learning to do

play40:10

um so some ways to turn this into a

play40:12

positive

play40:13

um student talk a few years ago about

play40:16

alien technology and I think that's a I

play40:19

think talked about that or talking about

play40:21

it as a superpower talking about it as a

play40:23

secret leverage things like Paul

play40:25

Graham's essays about lisp and how that

play40:27

was their secret weapon and you know

play40:29

being productive against other you know

play40:32

similar competitors using other

play40:34

languages like that the idea here is

play40:37

there is a more productive way to work

play40:39

and

play40:40

um it's not a silver bullet like you're

play40:43

still writing code you're still fighting

play40:44

the same problems that you fight in any

play40:46

other time so it's not uh you know a 10x

play40:49

kind of a thing but it can definitely be

play40:51

uh transformative to make this leap and

play40:55

think in a different way and so

play41:00

um finding the right way to talk about

play41:01

that that is alluring and uh brings

play41:04

people in

play41:05

um and uh encourages them is the is the

play41:09

trick so we need to keep doing that I

play41:12

think that's a cool way to talk about it

play41:15

um jobs this is a been for any small

play41:18

Tech anything that's not super widely

play41:20

spread

play41:22

um the jobs are not

play41:24

uh evenly distributed among the people

play41:27

either by geography or skill level so

play41:30

the people the things that are you know

play41:31

there are just hot spot areas where uh

play41:34

companies that work with closure are and

play41:38

they typically want more senior level

play41:39

people

play41:41

um that's just uh that's just the nature

play41:43

of this problem so the only way to

play41:46

really solve that problem is to have

play41:47

more companies and more developers so

play41:50

um one way to do that is to hire

play41:51

non-closure developers and train or

play41:53

Mentor them so I mentioned before that

play41:55

newbank has 1200 plus closure developers

play41:58

um we didn't go out and hire 1200

play41:59

closure developers right that's just

play42:01

there there weren't 1200 enclosure

play42:03

developers to go higher so there were

play42:05

you know we hired people who were smart

play42:07

and were wanting to uh wanted to do cool

play42:10

stuff and we we taught him closure so

play42:14

um you can do that too

play42:18

um things that are not obstacles in my

play42:20

opinion and you're free to fight with me

play42:22

about this but

play42:24

um there are so many learning materials

play42:25

out there for closure people are

play42:27

continually making them there are really

play42:29

good old ones

play42:31

um on the closure team it's people are

play42:33

like people often ask us on the closure

play42:35

team why don't you write more learning

play42:36

material like

play42:37

Stu and I wrote program enclosure a

play42:40

corrode closure applied Focus co-wrote

play42:43

Joy of closure like we've collectively

play42:45

have written three three I think pretty

play42:47

good books that if you read all those

play42:49

and you'd be you'd know a lot at that

play42:52

point

play42:53

um they're they're and this is just

play42:55

scratching the surface there are tons of

play42:57

other great books out there there are

play42:58

tons of great online resources out there

play43:01

um same thing with tools and editors it

play43:03

used to be a problem to get a good tool

play43:05

it's not a problem there are there are

play43:08

plenty of good tools out there and I'm

play43:10

not saying they're all perfect I'm not

play43:12

saying they don't all need more things

play43:13

of course they do that's always the case

play43:16

um the biggest problem for me is it's

play43:18

hard to find the right one the one

play43:19

that's right for you so they're not all

play43:22

good for people from a Java background

play43:24

or a python background or a data science

play43:27

background or whatever so

play43:29

um I think there's a lot we can do to

play43:32

um sort of set up starting points and

play43:35

paths particularly for people coming

play43:38

from different contexts so that is a

play43:40

place where I think we could do some

play43:42

really good work

play43:44

um and I think it's also so those are

play43:46

some obstacles but why is closure

play43:48

compelling if focuses on solving real

play43:49

problems you get fast feedback

play43:52

interactive development you can move

play43:54

fast uh it's the thing that Bradford

play43:56

talked about

play43:57

um it's stable so you don't waste time

play43:59

turning your environment and fixing

play44:01

stuff that's needlessly broken which is

play44:03

what happens to me every time I use any

play44:05

other language pretty much

play44:07

uh it is flexible you can respond to

play44:09

requirements all those things about open

play44:11

systems and evolution over time it's

play44:13

designed to be flexible you can do a ton

play44:16

of stuff the community is great you can

play44:19

get out so many places now uh and the

play44:22

people are awesome you can have fun

play44:24

doing it uh it pays well it is low

play44:27

friction these days you can get started

play44:29

really really quickly I think I don't

play44:31

think we do as good a job as we can

play44:33

explaining that to people so I'll take

play44:35

that one but uh yes I think it's uh it's

play44:39

not that hard to get started these days

play44:40

and

play44:43

um you can deploy and reach everywhere

play44:45

like the amount of ecosystem that you

play44:46

can reach is is really like all of the

play44:49

major ecosystems today pretty much so

play44:52

it's pretty awesome

play44:54

um

play44:55

some key opportunity areas so it is

play44:59

ridiculous that closure is not the

play45:01

favored language for data science

play45:03

the data language it's

play45:06

um we are we are just sitting smack dab

play45:09

in every place where we should be for

play45:11

this and so

play45:13

um my Supreme thanks go out to the

play45:14

cyclos group and all the people who are

play45:17

working on all those libraries and it

play45:19

this is not my area of expertise I don't

play45:21

know this stuff but

play45:22

um the the work is getting done and we I

play45:26

super support all that rich supports all

play45:29

of it rich has said multiple times to me

play45:31

this year closure should be the best

play45:33

language for data science the end that

play45:35

that and I agree so

play45:38

um the more we can do on that I think

play45:40

that's a place where uh data science is

play45:42

not going away it's going to keep

play45:43

evolving

play45:45

um we need to get our foot in the door

play45:46

there

play45:48

um and make sure the python is not the

play45:50

only option on the table because

play45:52

um I want for me closure lets you get

play45:54

started quickly and make stuff which is

play45:58

true of python as well

play46:00

um but I would much rather take the

play46:02

thing that I made in closure and make

play46:04

that a production worthy thing like the

play46:06

path to that is way shorter than doing

play46:08

it through python I just in my opinion

play46:10

so

play46:12

um you're going to end up with a much

play46:13

better piece of software at the end uh

play46:15

in that path

play46:17

my opinion and uh interactive

play46:19

development closure has always had this

play46:21

sort of Rapid feedback cycle do the

play46:23

ruffle

play46:24

um the tools that people are putting

play46:26

together today things like you know data

play46:29

rabbit and the clerk stuff and there's

play46:31

so many people building amazing tools

play46:33

with closure it's not accidental it's

play46:35

closures designed for this thing you

play46:38

know

play46:39

um we are this is this is where

play46:41

um this is where we have always shined

play46:44

and we should we should continue to push

play46:46

it as a key thing for closure or a key

play46:49

selling point for closure it it lets you

play46:52

work interactively with your program uh

play46:56

you know as a living thing and it is the

play47:00

best part of

play47:01

um of lisp and small talk and all of

play47:03

that tradition and so

play47:06

um we are going to keep working on that

play47:08

so

play47:10

uh core team priorities

play47:12

um this is not coming for Rich this is

play47:13

not a road map this is me just

play47:16

um sort of reflecting over the things

play47:19

that we have worked on in the last year

play47:20

a lot of which is not out yet

play47:23

um but things around interactive

play47:25

development we continue to think that's

play47:27

important we're continuing to do work

play47:29

with datify nav

play47:30

um with prouple uh Rebel is sort of a

play47:34

great tool for uh doing that stuff there

play47:37

are others now like portal and

play47:39

um

play47:41

my mind is losing me but I'm someone's

play47:45

out there screaming reveal

play47:48

reveal thank you sorry too many things

play47:50

in my head

play47:51

um so all of these take advantage of

play47:53

data fine nav

play47:55

um we have identified some issues around

play47:59

um being able to connect Rubble remotely

play48:00

I don't know if anybody caught that

play48:02

earlier but I was actually connecting

play48:03

Rubble remotely not in proc to calva

play48:06

when I was doing the maze work

play48:08

um so we have a working version of that

play48:11

uh it has some really interesting

play48:12

reusable Tech underneath it which we're

play48:15

going to release

play48:17

um and that should be useful to lots of

play48:20

other people too not just to Rubble

play48:22

um I've been doing a lot of work on

play48:23

ad-libs recently so it's coming we're

play48:26

going to get it integrated into closure

play48:28

itself in some way we're trying to work

play48:30

out the best ways to do that

play48:32

um and some of that also hooks into

play48:33

closure CLI a little bit

play48:36

um so we will always continue working on

play48:39

improving interop with jvm host

play48:42

both to get access to new functionality

play48:45

things like um Loom is a really

play48:47

interesting and a lot of the value-based

play48:49

stuff that's coming out in the newest VM

play48:51

jvms is really interesting and it both

play48:56

to get us access to those new features

play48:58

where they make sense for us and also

play49:00

for performance so that's that work is

play49:03

never going to stop it's just going to

play49:04

be a continuing ongoing thing we've done

play49:07

some some air op work this year which is

play49:09

not also we had not quite gotten it to

play49:12

the release point but working on it for

play49:14

112 time frame

play49:17

um we'll continue working on tooling

play49:20

um done a lot this year continue pushing

play49:22

that pushing that up the hill

play49:25

um and I think uh working on the new

play49:28

closure developer experience that really

play49:30

that's a lot of really website and and

play49:34

tooling and a lot of different stuff

play49:36

it's it's just uh like I said it's just

play49:39

connecting the dots that already exist a

play49:41

lot of a lot of places uh and uh

play49:45

thinking about that warm and then uh

play49:48

I'll include spec we have not sort of

play49:50

actively working on it the second but we

play49:52

have been talking about it lately and

play49:53

and uh hopefully that will get some

play49:55

Cycles in the new year which I'm sure

play49:57

lots of people are happy to know

play50:00

um would like to get the spec 2 work at

play50:02

least to a point where it's released

play50:03

even if it's maybe not you know the end

play50:06

point we would like like to at least get

play50:09

that to a point where it's out there so

play50:12

uh so I'm gonna leave you with this uh

play50:15

move faster Break Stuff but we don't

play50:16

break things right so we're not going to

play50:18

do that we're gonna move fast we're

play50:19

gonna make stuff so I'm making that the

play50:22

uh and I'm sure Bradford would sign up

play50:24

for this

play50:25

um let's keep moving fast and making

play50:26

stuff and I want to give a big thanks to

play50:29

the re-closure team uh they've done a

play50:31

great job and I really appreciate

play50:33

everything they did putting this

play50:34

together

play50:35

and if you're interested in more closure

play50:37

stuff closure conj is coming April 27th

play50:40

28th it will be in person in Durham it

play50:43

will also be streamed online

play50:45

um so you should be able to get access

play50:48

to that from anywhere and we would love

play50:50

to see some of you there and Jordan

play50:52

mentioned strangely the last stranger

play50:54

will be September 21st and 22nd next

play50:57

year in St Louis so

play51:01

that's all I have

Rate This

5.0 / 5 (0 votes)

Related Tags
クロージャー言語コミュニティツール教育未来データサイエンスインタラクティブ開発イベント技術
Do you need a summary in English?