プログラミングを始めてしばらくすると他の言語も書けるようになりたい、書かないといけないということが出てくるかと思います。
すでに最初の言語をある程度かけるようになった人に向けて次の言語を学ぶプロセスを書いてみます。
オーバービュー
2言語目以降の学習は以下の流れが効率的だと思います。
- 習得する言語・フレームワークを決める
- 言語・フレームワークの理念・設計思想・パラダイムを理解する
- 開発環境を構築する
- ハローワールドしてみる
- 基本的な構文を知る
- 言語パラダイムを理解する(1言語目と異なる場合)
- フレームワークを使った開発の流れを理解する
- その言語特有の書き方に慣れる
- 言語・フレームワークの理解を深める
習得する言語・フレームワークを決める
多くの場合、Webの開発をするのか、ネイティブアプリを開発するのか、計算をするのかなど目的が決まっているでしょうから、目的によって言語とフレームワークを選ぶ必要があります。
個人的に、webのフレームワークは新しいものが出てくるサイクルが早くどれを選んでいいのかよくわかりません。周りの人に聞くのが一番良いでしょう。周りに教えてくれる人がいなければネットで調べるなどしましょう。ネットでランキングを見て、ランキング上位のものに安直に決めてしまうのは必ずしもお勧めしません。人気の言語は情報も多く使いやすいですが自分の実現したいものに適した言語・フレームワークを選ぶのが一番重要です。
言語・フレームワークの理念・設計思想・パラダイムを理解する
開発元サイト、Wikipedia、ネット記事を読んで理解しましょう。
理念・設計思想
必ずしも開発開始当初の理念が現在の使われ方にマッチしているかと言えばそうではないかもしれません。開発当初は別の目的でつくられたものだが、ある特定の分野のフレームワークが充実しているのでその領域でよく使われるということがよくあります。このことから、言語とフレームワークをセットでどのように使われることを想定して作られているかを調べておくと良いでしょう。こういうことはその言語やフレームワークの公式ページを見ればすぐにわかります。Wikipediaには概要がよくまとまっているのでそちらもお勧めします。
パラダイム
オブジェクト指向、手続き型、関数型などどのプログラミングパラダイムに対応しているのかを知っておくべきです。プログラミングパラダイムはその言語の特性をよく表しているため、これを知っておくと理解が効率的に進みます。
逆にこれを知らずに、とりあえず構文だけを勉強し始めると混乱のもとになります。
開発環境を構築する
これがとても大変だったりします。パソコンにもとから入っている言語だと何もせずに始められたり、IDEをダウンロードしてインストールするだけだったりすることもありますが、そうでないときは頑張ってください。
開発元が親切な場合はGet Startedとかを読んでその手順通りに進めればいいわけですが、言うとおりにやっても上手くいかない場合が一番しんどい。個々で挫折しないようにしましょう。
ハローワールドしてみる
開発環境が上手く構築できたかどうか確かめる作業です。つかの間の感動をお楽しみください。
基本的な構文を知る
普通の言語(=いまどきの手続き型言語)は方言が違うだけでどれも同じです。1言語使える方はfor文とはなんぞやというようなところから理解する必要はないので書き方の違いを頭に入れてください。別に憶えなくてもプログラミングの方法を知っているならそれぞれの書き方をググりながら書いても問題はないので難しいことではありません。
とりあえず確認しておきたい構文は以下。
- エントリポイント(c言語ならmain関数をつくらないといけないとかそういうやつ)
- 関数定義
- クラス定義
- 変数・配列の定義
- 代入
- if文、for文
- 入出力
言語パラダイムを理解する(1言語目と異なる場合)
ここまでで一応その言語を使ってプログラミングができるはずです。この次にフレームワークを活用していくにあたって言語パラダイムは知っておいた方が良いでしょう。
これを事前にある程度知っておかないと、例えばオブジェクト指向のフレームワークを使って開発するときに「newはおまじないですよー」とかいう教え方になってしまうわけです。
フレームワークを使った開発の流れを理解する
これはフレームワークの公式サイトのGet Startedが大変ためになりますので一回やっておくとよいでしょう。どこに何を書くのかを理解してください。
フレームワークの良さは、内部で何をやっているか知らなくてもここにこれを書けば動くという点にあります。当然、十分に活用していくためにはフレームワーク自体について知る必要はあるでしょうが、最初はどこに何を書くのかという理解で十分かと思います。
その言語特有の書き方に慣れる
コーディング規約
細かいところはチームによりますが、その言語を使っている人の中で慣習となっている書き方があります。変数の命名はキャメル記法かスネーク記法かなど。Objective-Cでは関数の名前、引数を英語のように読めるようにするということになっているので長い名前がよく使われます。
モダンな書き方を使う
古い言語から新しい言語に移るといまどきな書き方を目にします。新しい書き方をしなくてもいままでの書き方でやりたいことは実現できると思いますが、新しい書き方を積極的に使うとコードが綺麗になるので使っていきましょう。(foreachとかclosureとかいろいろ←例が別に新しくないというコメントは甘んじてうけます)
pythonなどだと標準ライブラリが充実しているので他の言語では自分でアルゴリズムを実装しなければならないものも便利な関数が用意されていたりするのでご活用ください。
言語・フレームワークの理解を深める
ここまでできればあとは開発していくだけですね。開発しながら身につくこともあると思います。同時にこまめに色々な資料を読んでおくことでよりよい書き方に出会えたりします。
おわりに
今回書いたのは、意識的にやっているわけではないものの、新たに言語を習得するときに自分がなんとなくやっている流れです。
余談ですが、「いくつ言語が使えますか?」という質問は、いくつもの言語を使えるプログラマに対してはナンセンスだと思います。作りたいものによって言語を使い分けているだけで、極端な話をすると大抵の言語で明日から開発するというのは可能でしょう。ですので言語は「習得する」ほどのものではないのです。
しかし、まだ1つの言語でしか開発したことのないプログラマに、「言語は習得せずとも使える」といっても信じてもらえないと思います。それは1つめの言語のときに「プログラミング」と「言語」を同時に勉強していたからでしょう。プログラミングができる人には二つ目の言語を使えるようにするのは手順を踏めば簡単です。
この記事で紹介している内容は私の個人的な方法で、そのまま使えるかはわかりませんが、お役に立てれば幸いです。
他の意見などがあれば是非お寄せください。