モデルは、物質の原子(atom)のように最小単位の集まりで構成されています。その最小単位が型になるのです。きちーっと型を選択し、プログラミングしていけなければ、すぐに使えないソフトウェアとなって捨てられるでしょう。
型を適切に選べることと、優れたプログラマであることは、かなり関連性があると思います。では、熟練プログラマと、未熟なプログラマを比較してみることで、型の大切さを考えてみましょう。
熟練プログラマ
熟練プログラマは、モデルの構成が上手なので、そのプログラムやソフトウェアは、バージョンアップがあったとしても修正は最小限となります。モデルを構成する、適切な型を選択できるので、不正なデータが入る余地がありません。適切にデータを管理できるためにバグが少なく、ハッキングもされにくいでしょう。もし、修正があってもすぐに直すべき場所をみつけることができます。
結果として、仕事上のミスも少なくて、仕事をすればするほど、未熟なプログラマとの差が、クライアントや同僚に感覚として伝わっていきます。感謝や賞賛を受ける機会も多いでしょう。
未熟なプログラマ
未熟なプログラマは、モデルの構成が下手なので、そのプログラムやソフトウェアは、バージョンアップがある度に、大量のソースコードが改変されます。Webアプリケーションであれば、アップロードのし忘れが生じたり、関係ないファイルを上書きしてしまったりしてクライアントによく怒られます。
モデルを構成する、適切な型を選択できないので、不正なデータが入り乱れるようになります。適切にデータを管理できないので、バグを直す度に新たなバグを呼んでしまいます。ハッキングもされたい放題。適切に直す場所が見つけられないので、回りくどい直し方をしてしまいます。
熟練したプログラマからすると、不快でもはや吐きそうです。熟練プログラマは、一人でやったほうが速いので、できることならプロジェクトから未熟なプログラマを外そうとするでしょう。
未熟なプログラマは、結果的に、仕事上ミスが多く、仕事をすればするほど、熟練プログラマとの差が、クライアントや同僚に感覚的に伝わっていきます。チーム編成を要求されたり、雰囲気が悪くなったりと、あまり褒められたものではないでしょう。
実務経験3年でいけるか
プログラマは、英語や中国語の勉強のように、とにかく身体で覚えることが大事という風潮があります。それは、一理あります。履歴書に実務経験3年程度あるのとないのとでは、見栄えが違ってくるでしょう。業界的に、手を動かしている人が評価される雰囲気はやはりあります。
どれだけ、一流大学の計算工学科を出ているからといっても、就職する際は、経験や実績が見られるところでしょう。僕が、大学時代、アルバイトに応募した際も、実務経験が問われるところが多かったです。
しかし、アウトプットされるコードは、いつも背景となる知識に基づくものです。きちーっとした基準から生まれた設計やコードかは、ひと目で解るものです。
手を動かしていれば、熟練プログラマになれるかと言われたら、そうでもないというのが、僕の意見です。業務内、業務外関係なく、どれだけ、設計に関する思考を深められたかが重要です。
これを踏まえて、きちーっと勉強していきましょう。今回は、型に関して学んでいきましょう。
リスト (List)
リストは、次に述べる、配列やベクトルとは違って、長さが可変なものを格納しておくための型です。つまり、リストは可変長な構造を持っています。長さが可変なので、扱うのは非常に便利です。値を追加する際は、末尾に付け加えるだけです。削除も、各言語の仕様や、自分で作成したリストの構造によりますが、基本的には簡単です。
便利さに引き換え、犠牲にしているものは、読込速度です。リストは、基本的に要素を前から順番に読んでいきます。最後の要素を読み取るには、要素数だけの回数検索を掛ける必要があるのです。
まとめます。リストのメリットは、追加、削除が簡単な点。デメリットは、検索にコストが掛かるです。このメリットとデメリットを覚えて次回から使ってみてください。
配列・ベクトル (Array / Vector)
リストの次に勉強するのは、配列、ベクトルです。配列とベクトルは基本的に同じなので、配列と呼ぶことにします。配列は、基本的に、定義した時点で長さが決まります。すなわち、配列は、固定長ということになります。
リストに比べて、値を新規に追加する際は、配列の長さを伸ばさないといけません。削除は、配列の長さを短くする。これは、結構大変。配列は、定義した長さを変えることが基本的にないようにしなければいけません。
配列の値の操作は、基本的に上書きと読み込みのみになります。どちらも、リストと違って、コストは非常に小さいです。配列の長さによらず一定時間で取り出せるのが配列となります。
まとめます。配列のメリットは、読み書きのコストが掛からない点。デメリットは、配列の長さが変え難いということでした。
連想配列 (Dictionary / Associative Array)
連想配列は、値をキー・バリュー(key / value)で格納するための型です。{ name: "ysawa", age: 29 }
は、JSON (ジェーソン) と言われる連想配列の一種です。name と age がキーです。 "ysawa" と 29 がバリューです。
連想配列は、辞書と呼ぶこともあります。辞書は、索引に対する定義や内容を調べるためのツールです。索引がキー、定義や内容がバリューということですね。
読み込みは非常に簡単、先ほどの連想配列に、name を投げると、
"ysawa"
が出力されます。
書き込みも簡単ですね。age に 30 を入れると、
{ name: "ysawa", age: 30 }
となります。
前回から扱っている、集合の中ではちょっと特殊な感覚がしますが、よく使う型です。PHP などでは、連想配列は非常によく用いられる型ですね。
連想配列は、キー・バリュー。これだけきちーっと覚えておいてください。
まとめ
まとめです。集合やペアから始まって集合的に値を扱うための型を見てきました。全て特徴があり、適材適所だということがお解りいただけたのでは無いでしょうか。型というツールをきちーっと使い分けることが熟練プログラマへの第一歩となります。
熟練プログラマになれるように日々努力していただければ、これほど嬉しいことはありません。