Julia布教用デッキ

2023のJulia言語のアドベントカレンダーの記事です。
コードが一切ない純然たるポエムなので注意してください。
ある程度汎用性のあるものとして書いたつもりなので任意のコンテンツにもご利用いただけます。

# まとめ

1. 興味を引く
    * その人が使ってる言語との差別化を図り、ニーズを喚起する
    * jitコンパイル、真のマクロ、行列、マルチプルディスパッチ、何かあるはず
1. 行動してもらう、選んでもらう
    * 好意的なレビュー・使用者の声が必要
    * そもそも積極的に発信しておく
1. その後の体験を高める
    * 日本語訳された公式ドキュメント
    * 他にもあるかも

# 布教って愛

言語のパワーってなんでしょうか。

速さ？マクロ？型のチェック？可搬性？色々あると思いますが、これらの中の一つとしてコミュニティの規模やライブラリの量も挙げられると思います。

であれば、迷惑にならない程度に布教に励むことは立派な貢献です。

そういう打算を抜きにしても、同じものを好きな同士が増えるのは単純に喜ばしいですよね。

愛する言語を布教したいけど口下手だったりするどこかの誰かにこの記事が届けば嬉しいです。

# 布教は難しい

とはいえ、新しい言語を気に入って貰うのはとても難しいものです。

それどころか手にとって貰うことすら難しいかも。

なぜなら大抵の場合お気に入りが既に他にあって、新しいもの覚えるのは単純に大変ですから。

スイッチングコスト……って言っていいのか不安ですがそういう類のものがあると思います。

# ゴリ押しはNG、段階を踏む

そういう訳で、「この言語最強なんで使ってください」では実際に最強だったとしても、初手から躓く可能性が高そうです。

触ってすらいないものの魅力に納得させるより、ある程度実感を持ってもらった上での方が良いのは間違いありません。

まずは多くの人に手にとって貰うことでユーザーとして残る人の数も増えるはずと信じて、２番目でもいいという慎ましやかな気持ちで布教しましょう。

アーチモデルのようにステップバイステップで少しずつのイメージです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631306/9b331902-ac43-464b-7970-d9ff4fc4b938.png)

# 興味を引く

そこで、先程の「大抵の人は何かしらのこだわりとお気に入りが既にあって」を逆手に取ります。

その人のお気に入りの言語でやりにくいことを聞き出して、そのうちの一部でもJuliaで補完できるとしたら？ちょっとは興味を持って貰えるかもしれません。

詳しくないですが、営業の人の言葉では「ニーズを喚起する」とか言うらしいです。

「でも、補完できる点がなかったとしたら？」

そんな心配は無用です、必ずセールスポイントがあります。

なぜなら、要素や観点が一つ増えるごとに全てを満たすことが指数関数的に難しくなるからです。

様々な指標の全てが平均的な体型の軍人を探したら一人も居なかったなんて話もあります。

https://www.thestar.com/news/insight/when-u-s-air-force-discovered-the-flaw-of-averages/article_e3231734-e5da-5bf5-9496-a34e52d60bd9.html

欲張りな言語を自称するJuliaにはセールスポイントとして検討できる観点が沢山あるはずです。

# 具体的には？

今更かもしれませんが、Juliaの魅力をその思想からおさらいしましょう。

https://www.geidai.ac.jp/~marui/julialang/why_we_created_julia/index.html

特に推せそうなところ（主観）は、

* JITコンパイル
    * 何も考えずに常時pypy使えるようなもんです
* 自然な数学（特に線形代数計算）の記述
    * こんなに行列をきちんとサポートしているのは算数算数してる言語かFORTRANくらいのものだと思います
* マルチプルディスパッチ
    * 他ではLispとかClojureしか知りません。
    * （あちらの文化ではマルチメソッドとよばれているみたいですね）
* 真のマクロ
    * Lispと同じくらい強力です

こんな感じだと思います。

一つ一つは他の言語の名前を上げている通りオンリーワンなものではないですが、逆にこれら全てを満たすものをJuliaの他に見つけることも難しいように思えます。

であれば、重複しない点をセールスポイントに「サブウェポンとして懐にJuliaを忍び持っておきませんか？」とそっと囁くことは不自然でないはずです。

特にマクロの話は凄い記事があるのでぜひ。

https://muuumin.net/julias-macros-were-amazing/

# 行動してもらう

興味が引けたら、次の一推しをしてみましょう。

実際に時間を投資するまでに「それは本当に良いものなのか」「他に似たようなもっと良い言語がないか」調べるはずです。

その「知りたい」に先んじて手を打つことで、すんなりと入ってもらえるかもしれません。

これには第三者の好意的なレビュー、使用者の声が効果的らしいです。

これは時代が変わっても上手く機能するように各々新しいものを調べてください。

感想が古い記事だとちょっと信じにくいですよね？ 逆に、直近話題になってる感想は安っぽい対立煽りなんかでもちょっと気になっちゃいますよね？

エバーグリーンコンテンツではないのだと思います。

https://www.searchenginejournal.com/evergreen-content/362554/

あるいは他人の言葉を持ってこなくてもあなたが普段から楽しそうに使っていれば、それが一番のソースになるかもしれません。

余力があれば普段から積極的にポジティブな感想を発信するのが良さそうです。

知らないうちにどこかの誰かへの一推しになるかもしれませんし、内容が目新しいものでないとしても発信が新しいことに価値があるかもしれません。

（つまりアドベントカレンダーは最高ってことですね。）

# その後の体験を高める

ここまでのステップが上手くいき触ってもらったとしたら、もうかなり満足感を感じられるはずですが、最初の目標を思い出してください。

懐に忍ばせてもらうのはあくまで建前、本当は普段遣いしてくれる仲間が欲しかったはずです。

そのためには触ってもらったあとの体験が良いものである必要があります。

そういう文脈で言うとよく「メジャーな言語以外は日本語の情報が足りないから英語のドキュメントを読む羽目になる」なんて聞きますね。

なんとJuliaは公式ドキュメントの日本語訳が売られつつ、無料で公開もされています。

https://inzkyk.xyz/julia_doc/

MITライセンスと訳してくださった方を拝み倒しながら共有しましょう。

（お金払えば書籍で日本語の情報は結構あります）

# まとめ（冒頭と同じです）

1. 興味を引く
    * その人が使ってる言語との差別化を図り、ニーズを喚起する
    * jitコンパイル、真のマクロ、行列、マルチプルディスパッチ、何かあるはず
1. 行動してもらう、選んでもらう
    * 好意的なレビュー・使用者の声が必要
    * そもそも積極的に発信しておく
1. その後の体験を高める
    * 日本語訳された公式ドキュメントを共有する
    * 他にもあるかも

# 最後に

このページ自体はあくまでデッキとして共有せず、あなたの言葉で伝えてください。

ただ、あなたが布教した人がユーザーを超えてファンになってくれたら、そしてあなたと同じように布教する側に回ってくれたら、その上でもしこのページが役に立ったと思ったら、そのとき初めてこのページをそっと共有してください。