新しいプログラミング言語を覚えるための7つのコツ
春から新しくプログラミング言語を覚える時にやっておくべきことをまとめてみました。
「達人プログラマー」では「1年に1言語」プログラミング言語に触れることをおすすめしています。4月からの新社会人も、10年目に突入したエンジニアも、心機一転、新しいプログラミング言語を覚えてみませんか。今日は、初期段階で新たなプログラミング言語の学習のコツを7つお伝えします。
- Twitterで情報収集する
- チュートリアルのドキュメントを探す
- 写経する
- 対話シェル環境で実験する
- ソースを覗いて手本を見る
- 手元にコードをおいてテスト実行しながらアクティブに触る
- 定番のお題を解く
1. Twitterで情報収集する
カンファレンスや勉強会が開催されれば、Twitterや開催ページから参加者の声や発表者の資料にたどり着くことが出来ます。例えば最近開催された Elixir のイベントであれば、下記から参考情報にたどり着けます。
- https://twitter.com/search?q=%23elixirjp&src=tyah
- https://elixirconf.connpass.com/event/47856/
- http://tuvistavie.com/slides/elixir-fp-intro/#/
それ以外にも、Twitter上でその言語に積極的に取り組んでいるキーマンを見つけることもできますし、その言語の公式Twitterアカウントも大抵はみるかるでしょう。もちろん気になるアカウントはフォローしちゃいましょう!
2. チュートリアルのドキュメントを探す
プログラミング言語を習得する際、本を買う以外にも、Web上に本家のドキュメントやGithubを探し、プログラミングの学習用の教材を見つけて学ぶことができます。最近 Elixir を勉强した私の場合は、2つを使って、軽く目を通しました。
Go言語であれば次があります。ハンズオン形式で学べる教材もあります。
こちらをSTEP BY STEPで試すのも良いでしょう。
3. 写経する
習字を習う時に手本を真似て練習するように、本やWebサイトに書いているコードのとおりに、実際に手を動かしながら学習する方法を、一部のプログラマーの間では「写経」と読んでいます。
私が Elixirを勉強した際は、先のドキュメントの全体目次と中身をさりりと軽く眺め、気になった Stream や Processes、GenServerなどの箇所を実際に手を動かして学んでいました。
もしも、ドキュメントのチュートリアルを試してみて、動かない箇所やスペルミスを発見することができたら Github Issue や Pull Request などでフィードバックしてあげましょう。
4. 対話シェル環境で実験する
イマドキのプログラミング言語であれば、インタラクティブシェル(対話シェル環境)があり、気軽に文法を試して学ぶことができます。Elixirのインタラクティブシェルの場合は「iex」 で、 Rubyの場合は「irb」です。チュートリアルを触りつつ、気になったことを少し寄り道して、実験してみるのもいいでしょう。下記は、僕が 挙動で気になった Streamと|> の実験結果例です。
Enumの場合
iex(4)> 1..100000000 |> Enum.filter(&(rem(&1, 2) == 0)) |> Enum.map(&(&1 * 3)) |> Enum.take(5)
# 結果がすぐに返ってこないことを確認
1..10 |> Enum.filter(&(rem(&1, 2) == 0)) |> Enum.map(&(&1 * 3))
[6, 12, 18, 24, 30] # 評価結果が返っていることを確認
Streamの場合
iex(4)> 1..100000000 |> Stream.filter(&(rem(&1, 2) == 0)) |> Stream.map(&(&1 * 3)) |> Enum.take(5)
[6, 12, 18, 24, 30] # 直ぐに結果が返ってくることを確認
iex(1)> 1..100 |> Stream.filter(&(rem(&1, 2) == 0)) |> Stream.map(&(&1 * 3))
#Stream<[enum: 1..100,
funs: [#Function<40.34404916/1 in Stream.filter/2>,
#Function<47.34404916/1 in Stream.map/2>]]> # lazyのため評価結果ではなくStreamが返っていることを確認
5. ソースを覗いて手本を観る
Githubの登場でブラウザで気軽にソースを読めるようになったのは、いいですね。各々の言語のコードの書き方のお作法は、言語やポピュラーのライブラリーのソースを覗いてみるはおすすめです。プロダクションコードをいきなり目にするのことが億劫な場合も、テストコードを使ってAPIの使い方の例を探すから始めるのも良いでしょう。
ちなみに、WebブラウザでGithub上のコードを読むときには、 ショートカット [t] を使ってファイルをインクリメンタルサーチするのがおすすめです。その他のショートカットは、[?] で確認することができます。ブラウザの機能拡張としてOctoLinkerをインストールしておけば、リンクで辿れて更に便利です。
コードを読んでいて知らない文法がでてきたら、また調べます。本家ドキュメントを読んで直ぐ理解できなければ、 Qiita や Stackoverflowの別の解説を読んでみるのも良いでしょう。
6. 手元にコードをおいてテスト実行しながらアクティブに触る
イマドキのプログラミング言語であればオープンソースで公開されています。READMEを参照すれば、テスト実行の方法が書かれているので、REAEMEに目を通しします。
cd ~/src
git clone git@github.com:elixir-lang/elixir.git
cd elixir
make clean test
人によっては、手元にソースを持ってきて参照する際に、ghq + peco を使って快適なソースコードリーディング環境を整えている人もいるでしょう。
テストがパスできたら、ちょっとだけコメントアウトで壊したり、print表示したり、テストを追加するなどコードに対して、もう少しコードに対してアクティブに触れながら学びます。JavaやJavaScriptなどによってはデバッガのステップ実行を使って動かしながら読むのもおすすめです。
7. 定番のお題を解く
プログラミング言語を覚えるのに、練習お題や何か簡単なアプリをつくるもよくある手段です。僕の場合はTDDの練習お題を解くことをよくやっていますが、人によっては簡単なWebアプリ、チャットアプリへ投稿、クローラといったものを作って覚える人もいます。TDD練習お題なら次を参照して下さい。
プログラミング言語別に練習お題が提供してるサイトもあります。ここから探すのも手です。
この後は?
プログラミング言語に関連して、ライブラリやフレームワークに触れて学ぶのも手です。Elixirの場合はPhoenix が 定番のフレームワークのようです。Elixirの前提であるErlangを学ぶルートも考えられます。Rubyの場合は、定番フレームワークのRailsの定番教材があります。
Qiitaに日本人のエンジニアが集まっており、有益な情報を提示してくれているまとめページもあります。たとえば Go言語であれば次から欲しい情報にたどり着けるかもしれません。
まとめ
プログラミング言語が異なれば、その背景にある哲学、思考体系も全く異なることが往々にしてあります。新たな思考とコンピューターへのアクセス手段を手に入れるために、この春、新しいプログラミング言語を習得してみませんか?