ネットの海の片隅で

技術ネタの放流、あるいは不法投棄。

「プログラミングしてみたいんだけど」

TL;DR

個人の日記です。

「プログラミングしたいんだけど、どの言語を勉強したら良い?」

多少なりともコードを書いていると、こういう質問を受けることがあると思う。

個人的には、こういう質問に対しては「何やりたいの?」と返すことにしていて、質問者のやりたいことが明確なら目的に合った言語を勧める。仮にiPhoneアプリを作りたいのであれば結局はObjective-Cをやるしかないし、モチベーションは最も貴重で尊いものだと思っているから。

ただ、こういう質問を受けるときには、質問者はやりたいことが決まっていなくて、プログラミングというものに対する漠然とした興味だけがあるというケースが非常に多い。

そういう場合にありがち(?)な回答を考えてみたい。

「やりたいことが無いならプログラミングしなくて良いじゃん」

正論である。

ただ、せっかく興味を持っている人をむざむざ帰してしまうのはもったいない。甘言蜜語を尽くしてこっちの世界に引きずり込もう。

「まずは基本のC言語だね」

硬派である。

しかし、ちょっと興味を持ち始めた人にとってC言語が学びやすいかというと大抵の場合はそうではないと思うので、そっとCの入門書を渡したりしてはいけない。カーニハン&リッチーなどもってのほかである。

では、どうするか?

ハードルを下げる

ちょっと興味を持っている人に対して高いハードルを課さない。

「プログラミングをするにはまずターミナルを使える必要があって、え? Windows? じゃあ、VM入れてそこで開発しよう。エディタはもちろんVimね。で、コード書くならGitでバージョン管理を……」とか言ってたら獲物は逃げてしまう。

質問者の手に近いところから

質問者がどういう人なのかによるが、質問者が普段使っているツールに近いところから始めるのが良いと思っている。

HTMLやCSSを書ける人ならJavaScriptを選ぶのは妥当だし、普段Excelを使って仕事をしている人ならVBAは非常に有力な選択肢だと思う。 JavaScriptVBAの実行環境は多くのPCに既に用意されているというのも、ハードルを下げる要因となって良い。

質問者がExcelすらあまり使ったことがないようであれば、Excelの関数から初めてみるのも良いと思っている。 プログラミングではないが、やりたいことを記述してコンピュータに処理させるという体験を最も手軽に得ることができる。

手を広げる

可能な限りハードルを下げて手近なところからブログラミングを始めたとしても、その範疇にずっと収まっていることは少ないと思う。

クライアントサイドだけじゃなくサーバサイドを書いてみたくなるかもしれないし、VBAではできないこと/やりにくいことを実現したくなるかもしれない。 そうなったときに改めて「どの言語を勉強しよう?」と考えれば良い。

その頃には「やりたいこと」が明確になってきているだろうし、プログラミング的な考え方もある程度身についているだろうから、他の言語にもあまり抵抗なく触れられるようになっているはずだ。

レイヤーの階段を降りる

コードを書き続けていくと、使っているフレームワークでハマったり、パフォーマンスの問題が出てきたりすることが往々にしてある。 そういう時にフレームワークの内部を覗いてみたり、データ構造とアルゴリズムについて調べてみたり、メモリを意識してみたりetc...すれば良い。

コンピュータの歴史を築いてきた人たちは時代とともにレイヤーの階段を登って抽象度を高めながら現代に至っているが、今この時代にプログラミングを始めようとする人たちは先人の偉業を享受して、高レイヤーで抽象度の高いコードを楽に書いて、必要や興味に応じてレイヤーの階段を降りながら学んでいけば良いと考えている。

ビット演算の有用性や美しさを初学者に説くのは大変だが、コードを書き続けているとその価値がわかるようになる、みたいな話。

さいごに

ここに書いたルートが唯一だとか絶対だとか言うつもりは全くない。

統計屋さんならOctaveやRから入るのが正解かもしれないし、Coqから入るのが一番良い数学屋さんだっているかもしれない。もちろんCから入るのがベストな人だっているだろう。

人によってバックグラウンドが違うはずなので、それぞれに適したルートが提示されると良いなと思ってこのエントリを書いた。