ししちにじゅうはち 4x7=28

よんたったー https://twitter.com/keita44_f4

○○ってプログラミング言語をできるってどこから言えるんですか?

と聞かれてうまく答えれなかったので、もう少し考えてまとめようとしてみた。

とっさに答えた内容

プログラミング言語なんて星の数ほどあるので、何ができたら「できる」かの答えはバラバラ。 とはいえ、プログラミング言語に依らない地の力みたいなのはあると思う。 例えば、

などが挙げられる。 これらが強ければ、プログラミング言語の差は文法の差ではと最初は思った。

とはいえ、これでは「○○プログラミング言語できます!」と任意のプログラミング言語で言えてしまう。 ので、お風呂に入りながらもう少し考えてみた。 すると、次の2つの段階が自分が思う「できる」ラインかなと思った。

1. 効率よくループ処理が書ける

簡単にいうと、「forループ書けます!」 ただ、これには次の2つの意味を含んでいる。

  1. 言語仕様(文法・意味論)を理解している
  2. 効率よい書き方を理解している

1は当然のこと。 先に挙げた地の力を、プログラミング言語で正しく表現できるかどうか。

2の「効率よい」というのは、そのプログラミング言語の特性を理解しているか。 ループを書くにしても、言語によって全く違う考え方と実装方法が出てくる。 キーワードをあげると、イテレータ、内包表記、末尾再起呼び出し、などなど。

その言語の特徴を理解して効率よく書ける、が1つのポイントかなと思った。

2. 小さなプロダクトを1から作れる

これはより強い「できる」だと思う。 プログラミング言語の文法・意味論の知識だけでは、仕事やOSS活動をするには足りないと思った。

実際のプログラミング環境はどんどん便利になっている。 ありがたいことに、グラフを描くのにドットを打つ必要はない。 代わりに便利なライブラリやツールを使いこなす必要がある。

例えば以下のような知識。

  • 公式ドキュメントの読み方
  • IDEの設定
  • SDKの知識
  • パッケージマネージャの使い方
  • Githubの使い方

などなどだ。

Rubyを例に上げると、Web系の業務ではRuby on Railsなところがほとんどだろう。 すると、エディタでのRubocopやRufoの設定、Railsの知識、gemやnpmやyarnの使い方、さらにはHTML/CSSの知識まで必要になる。

このような力は何かを考え、「小さなプロダクトを1から作れる」と表現した。