2013/04/18

素早くコーディングするには


動的に型を判断する言語が大きな注目を集めています.
この人気はどこから来ているのでしょうか?

動的型付という側面はそれ自体では長所にも短所にもなりますが,
本質はそこにはないように思います.

注目されている言語に共通しているもの,それは
「簡潔にコードを記述できること」これに尽きると言っても過言ではないでしょう.


コーディングっていうのは結構大変な作業ですよね.
1単語も間違えられない.場合によってはインデントすらも.

こんな作業を少しでも楽にこなしたい 」と誰もが思っていると思います.
そもそも,楽するためにコンピュータに仕事をさせようとしているのですから,
そう考える方は相当いらっしゃることと思います.


そんな中で使ってみる最新の言語.
もちろん最初は今使っている言語の方が使い慣れている分,使いやすいでしょうが,
次第にちゃんと使えるようになると気持ちいいぐらいに楽にコーディングできる場合もあるのです.

特に,
静的 → 動的
手続き → OOP → 関数・アスペクト
など,シフトしてきたパラダイムに沿った言語の変更や

型推論,補完,インライン(無名)関数
といった記述量を少しでも少なくする機構を備えた言語への変更はとても刺激的なものです.



私自身もいろいろな言語を使ってきましたが,
やはり,楽にコーディングできる言語は使っていて気分がいいです.



さて,この「楽」って感じる要素について,もう少し考えてみたいと思います.

この楽さは,「簡潔にコードを記述できること」が大部分なのでしょうが,
そんなに簡潔なコードが大事なのでしょうか?

よく,引き合いに出されるのが記述は短いが,一見まったく意味不明なコードです.~参照~

このようなコードは,思い通りに記述するのも難しいはずです.簡潔に記述できていません.


私は「コーディングの楽さ」を体現した指標として
「コードの簡潔さ」よりも「 コーディングの素早さ 」を考えたいと思います.

とある研究によると,プログラマが一定時間内に記述できるコードの量は
どんな言語を使ってもほぼ一定という結果が得られているらしいです.

もし,正しいならコーディングに「素早さ」なんて存在しないかもしれません.
しかし,コンピュータにやらせたいことを実装するためのコード量は,場合によって大きく異なります.

「言語によって」ではなく「場合によって」と記述した理由がこの記事を書いた理由です.


もちろん,言語による記述量の差も大きいです.
最も言語間で差がつくと考えられるのは,型の記述の有無やモジュールの書き方です.
特に動的型付・静的型付と呼ばれる言語間での記述量は明らかに動的型付言語の方が少ないでしょう.
動的型付の言語が趣味などの範囲で特に人気なのは上述の側面によるところが大きいと考えられます.

というのも,静的型付言語における沢山の「おまじない」のような記述は,
その多くがそのコードを利用する「他人」のためのものであり,
プログラミング初心者や気軽にプログラミングしたい人にとっては,よくわからない,面倒な記述なのです.

一方で,処理内容の記述に関しては
十分検討された言語においては,必要十分なシンボル数で目的の記述ができるため,
言語間の差はほとんどないと言えます.



そして,記述量の差が最も大きく影響を受けるのが「ライブラリ」です.


極端な言い方をすると,コンピュータにやらせたいことが既に関数等で存在すれば,
その関数を呼び出して,はいおしまい.となるわけです.
ただし,既に存在している関数は複雑な処理を一言で表せるように対応したものは少なく,
コンピュータにやらせたいと思っていることも十分に複雑な処理である場合がほとんどでしょう.

しかし,複雑な処理であっても既存の処理をうまく組み合わせることによって実現できることもあります.
いろいろな場面に対応した関数などがより多く存在すれば,その中に今,コンピュータにやらせたいことが存在する確率は高まります.
コンピュータにやらせたいことが丸々存在しなくとも,その一部が見つかる確率は確実に高くなるはずです.
すなわち,既存の関数が多ければ多いほど記述量は短くなり(短くなる確率が高まり),素早くコーディングできる計算です.

ただし,記述するために辞書を引く労力・時間は考慮されていません.
この場合の辞書を引くという作業は,作業に必要な関数を調べる作業のことであり,
逆引きのマニュアルで調べる,ネットで調べる,人に聞く等の方法が考えられます.
つまり,とある処理を素早くコーディングするには,
いろいろな場面に対応した関数などの存在だけではなく,
処理を記述するための語彙(関数など)を
素早く探してくる能力や仕組みが必要であることがわかります.


次回はライブラリの中に存在する処理を
素早く見つける方法について考えてみようと思います.

0 件のコメント:

コメントを投稿