○○ってプログラミング言語をできるってどこから言えるんですか?
と聞かれてうまく答えれなかったので、もう少し考えてまとめようとしてみた。
とっさに答えた内容
プログラミング言語なんて星の数ほどあるので、何ができたら「できる」かの答えはバラバラ。 とはいえ、プログラミング言語に依らない地の力みたいなのはあると思う。 例えば、
- アルゴリズムとデータ構造の知識
- 数学の知識
- オブジェクト指向とか関数型プログラミングとかの考え方
- 設計の仕方
などが挙げられる。 これらが強ければ、プログラミング言語の差は文法の差ではと最初は思った。
とはいえ、これでは「○○プログラミング言語できます!」と任意のプログラミング言語で言えてしまう。 ので、お風呂に入りながらもう少し考えてみた。 すると、次の2つの段階が自分が思う「できる」ラインかなと思った。
1. 効率よくループ処理が書ける
簡単にいうと、「forループ書けます!」 ただ、これには次の2つの意味を含んでいる。
- 言語仕様(文法・意味論)を理解している
- 効率よい書き方を理解している
1は当然のこと。 先に挙げた地の力を、プログラミング言語で正しく表現できるかどうか。
2の「効率よい」というのは、そのプログラミング言語の特性を理解しているか。 ループを書くにしても、言語によって全く違う考え方と実装方法が出てくる。 キーワードをあげると、イテレータ、内包表記、末尾再起呼び出し、などなど。
その言語の特徴を理解して効率よく書ける、が1つのポイントかなと思った。
2. 小さなプロダクトを1から作れる
これはより強い「できる」だと思う。 プログラミング言語の文法・意味論の知識だけでは、仕事やOSS活動をするには足りないと思った。
実際のプログラミング環境はどんどん便利になっている。 ありがたいことに、グラフを描くのにドットを打つ必要はない。 代わりに便利なライブラリやツールを使いこなす必要がある。
例えば以下のような知識。
などなどだ。
Rubyを例に上げると、Web系の業務ではRuby on Railsなところがほとんどだろう。 すると、エディタでのRubocopやRufoの設定、Railsの知識、gemやnpmやyarnの使い方、さらにはHTML/CSSの知識まで必要になる。
このような力は何かを考え、「小さなプロダクトを1から作れる」と表現した。