39
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

2019年クリスマスシーズンからプログラミング言語 Julia を始めるため,第1歩からN(>=1)歩進む手引き

Last updated at Posted at 2019-12-02

本日は

  • カレンダーが空いていたので書きます.
  • 1日目だし プログラミング言語の Julia やってみようかなーな人向けに書きます.
  • あまりソフトウェアの開発の経験がない人向けに書いています.

Julia の魅力的なところ(数学的表現がしやすい)

  • 筆者は純粋数学系出身なのでプログラムに縁がなく幸か不幸か社会人になって初めて本格的にコードを書くことになりました.このとき不満だったのは教科書に書いてあるような数学記号やギリシャ語を表現する手段が許されておらず $\alpha$, $\beta$ をしょうがなく alpha, beta と書いていました.PCは LaTeX を書くためというもんだと思ってたので,なんでそういうのサポートされてないんだとプンスコしていたのを思い出します.
  • Juliaでは数学的な記法を素直にプログラムの変数として表現することができます.例えば円周率 $\pi$ を \pi で表記することができます.

image.png
image.png

  • もちろん $\alpha$, $\beta$, $\zeta$ もできます.機械学習系のJuliaパッケージでは勾配を表すために $\nabla$ を使ってたりします.これは数学的なバックグラウンドを持たないプログラマーにとって違和感を覚えるかもしれませんが,理学系の人間にとってはとても魅力的な機能です.他にも sqrt(2) を $\sqrt{2}$ として表記できます.REPLモードで?を入力してやると 思ってたよりも多くの数学記号をサポートしていることがわかると思います.

image.png

  • 一部制限がありますが $x_1$, $X^N$ のように添字をつけることもできこれは一つの新しい変数として使うことができます.

image.png

  • ソフトウェアにおける可読性という概念がありますが,添字が使えることで数学的対象の視認性が良くなります.一部の人が $X^N$ という記号を使うと(文字の入力の関係で)保守しにくいと感じる人はいます.これはプログラミングに慣れている人にほどいう傾向があります.それは確認の仕方を知らないだけであって,Juliaのhelpモードを使うと書いているわけです.

image.png

  • このヘルプモードは結構役に立つようになっていて,関数や変数を投げておけばよしなに結果出力させプログラムを書く人を助けます.ちなみに $\mathbb{Q}$ $\mathbb{R}$ なども変数として使うことができます.
  • また Julia はカラムメジャーな言語で配列,ベクトルは縦ベクトルになります.

image.png

  • これは非常に都合が良くて行列,線形代数を扱うプログラムをPython/NumPyで実装する場合仕様の関係で横ベクトルのように振舞わせるために行列を転置する操作をすることになります.実際の数式と実装に解離ができてしまうというのは自分の考えていることを素直に表現するという欲求をかなえることができず,それが思考のノイズになってしまうことがあります.
  • とはいえ,深層学習のタスクだと NumPy の形式の配列形式の方が特徴ベクトル,多次元配列の解釈・ハンドリングがしやすいことが多いので,目的・用途に応じて適切さは異なってきます.
  • 追記:上では ; を多用していますが,実際には行列の行毎に ; を書く必要はありません.

Julia を学ぶ方法の一つとして

公式ドキュメントを読む

  • プログラムの上達は例を触れていくのが効果的です.一方でどこかのタイミングで体系的に学ぶ必要性がでてきます.大体のわからないことは Julia の Documentation を見ると載っていますので,意思決定の際に参考する情報としてまずは公式ドキュメントを抑えるのが良いでしょう.
  • そうですね.https://docs.julialang.org/en/v1/ をブックマークにしておく方法もありますし.Google検索で julia と打ち込んでリンクを探すというのもありです.

検索エンジンの設定を変える.

image.png

  • そうそう忘れてました言語設定を日本語にしておくとプログラミング言語の方でないカテゴリーが出現してしまいます,そういうノイズを消すために検索エンジンの設定を変えましょう.下図のように

image.png

設定->言語(Languages) に飛びます.そうすると次の図のように画面が遷移します.使用する言語を English に変更します.そして保存ボタンをクリック.

image.png

  • すごい.した図のようになり,Juliaというプログラム言語に関するページが並ぶようになりました.

image.png

  • 言語設定がEnglishのままでも日本語の検索もできるので安心ですね.

image.png

  • これで他人にもJuliaを勧める環境ができました.

雑念を捨てて公式ドキュメントをゆっくり読む

から順に Modules まで読むとベースとなるシンタックスを追えると思います.Typesからしんどくなってくると思いますが (^^;).

image.png

YouTubeをながめる

文字をずーっと見るのは辛いので息抜きに

を見るもの良いと思います.YouTubeで動画となると娯楽目的な感じを持ってしまいますが,教育目的として発信している人・組織もいます.こういうのを活用するのもありですね.完全に聞き取れなくても雰囲気はつかめますし.Intro to Julia tutorial は 2時間ほどでできますのでお正月の時にながめるの良いかもです.

ワタシ,ニホンゴデソウダンシタイデス

  • いくつか選択肢があります.

Slack

Slack というチャットツールで相談ですね.例えば
JuliaTokyo #10 がこの前ありましたが,リンク先にSlackの招待リンクがありますのでそこで質問するのも良いでしょう.名古屋 の方でもJuliaTokai #04 グループがあり同様にSlackのワークスペースを持っています.

  • もちろん英語版もあります.Julia Community というところから Chat のセクションに飛んで招待リンクをもらうということで参加できます.
    image.png

Twitter

  • Slackよりも Twitter の方が盛んかもしれません(^^;.
  • #Julia言語 というハッシュタグをつけて呟くと助けてくれるかもしれません.

image.png

  • ただ,Twitterの文字数制限もあるのでわからないことを簡潔に説明する必要があります.
  • エラーが起きる現象
  • その現象を再現するための最小限のコード
  • 使ってるOS(MacなのかWindowsなのかLinuxなのかetc...)

の情報があると,あなたの知りたいリプライ情報が来やすいです.

ちなみに Julia の公式ハッシュタグとして #julialang もありますので英語で情報を取得・発信する場合はこっちで投稿するのが良いです.念のためJulia Community を見てください.

英語でトライしたい人向け

Julia Discourse

  • Slack, Twitter の欠点は利用人数が多くなると情報が流れてしまうことです.公式のSlackは一定数の会話が流れると過去の情報消えてしまうんですよね.
  • https://discourse.julialang.org/ を使うと昔ながらの掲示板のような雰囲気で質問をしたりアイデアをディスカッションすることができます.

GitHub の Issue

  • パッケージを使うときにエラー・不具合が生じている時はパッケージのコードをホスティングしているリポジトリのIssueに投稿するのが良いでしょう.その時も,エラーの詳細,再現するコード,動作環境を明示すると良いです.必要に応じて Docker のコンテナを作って再現させるのも良いでしょう.

サンプルコード欲しい?

  • ソースを読むのが一番ですが,使い方を知る方法はいろいろあります.

ヘルプモードを読む

  • もちろんヘルプモードでも見つけることができます.
    image.png

パッケージが提供している関数・メソッドの使い方はテストコードをながめる

  • または GitHub のリポジトリにアクセスし <パッケージ名>/test/runtests.jl の中身をながめると文章化されていないコードレベルの使い方を閲覧することができます.

Julia を広めていく一つの方法として

解説を書いていく

  • インプットだけだとつまらないと思うので発信していくことは重要なことだと思います.
    • Julia のメタプログラミングについて解説
    • Julia を触る人のための機械語/LLVMなどについて
    • Julia でこういうパッケージがあったので使い方を書いて見る
    • Julia で〜〜の実装をした
    • Julia のIDEの使い方

などなんでもありかなと思います.

  • 読む側からあると嬉しいのはその記事を書くために参考にした Reference (他の人の記事のURLやJuliaの公式ドキュメントのURLなどなど)ですね.そこに書かれていることがあなたの経験・想像(こうであって欲しい願望)で書いたのか,パッケージのドキュメントや公式ドキュメントといった一次情報に近い情報源に基づいて話をしているのか切り分けられていると尚良いです.

便利な機能を Julia のパッケージとして作っていく

の手順を踏むと Gomah.jl が作れてしまいました.いつか公式パッケージとして昇格できるといいなとは思っています(´・ω・`).

題材を探す

  • 数学を題材にしたプログラムを書く
    • Pythonに慣れている読者であればPythonの本を読んでそれをJuliaに書いてみる
  • FortranのコードをJuliaで書く
    • Fortran ユーザーでJuliaに乗り換える人がちらほらいるのでそういう活動をすると幸せになれるかもしれないですね.
    • ちなみにネタが思い浮かばない場合はFortran ハンドブック(Amazonのリンク) が一つの選択肢としてあります.

Tips

Julia のプログラム開発の回し方

  • Julia はJITコンパイルする言語なのでパッケージの読み込みや,関数の実行の初回の実行時のオーバヘッドがどうしてもでてきます.
$ julia yourcode.jl
# 何かの結果が出る.エラーが出たらコードを直す
# yourcode.jl を編集
$ julia yourcode.jl

のように Julia のセッションをその都度立ち上げるのではなくとりあえず Julia を起動しておいて

include("yourcode.jl") すればいいわけです.

julia> include("yourcode.jl") # 吾輩は Julia である yourcode.jl というファイルはまだない.
ERROR: could not open file /Users/<youruser>/tmp/yourcode.jl
Stacktrace:
 [1] include at ./boot.jl:328 [inlined]
 [2] include_relative(::Module, ::String) at ./loading.jl:1105
 [3] include(::Module, ::String) at ./Base.jl:31
 [4] include(::String) at ./client.jl:424
 [5] top-level scope at REPL[5]:1

julia> # ; を押してshell モードに入る

shell> nano yourcode.jl
# nano エディタが立ち上がりチョコチョコ編集する
# とりあえずprintln("HelloWorld")を書いてみる
julia> include("yourcode.jl")
HelloWorld # 更新されたコードが反映される

REPLによる系統的な実行法は Workflow-Tips
が詳しいです

Atomベースの Julia の IDE Juno を使う

IDEを使うとこんなことができます.

Screen Shot 2019-07-12 at 21.47.02.png

もきゅもきゅ会

まとめ

  • Julia の魅力的なところを書きました.
  • 読者の手引きとして学習のスタートする地点を提示しました.
  • 必要に応じて質問できるところを紹介しました.
  • 活動方法を簡単に紹介しました.
  • いくつか参考になるヒントを紹介しました
39
25
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
39
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?