仕事で今は新しいシステムの設計フェーズをやってます。そこそこ大きなシステムなんで設計もそれなりに時間と手間がかかってます。私は設計だけを担当ではなく、その後の開発も担当する予定になっているのですが、それもあって設計が非常に退屈というか、とっとと開発に着手したいーと毎日思いながら設計をしてたりします。
古い話を振り返ってみると、私がプログラミングに入門したのはBASICでした。それは別に特別な話ではなく、当時にプログラミングを始めた人でBASICで入門したという人はわりと多いのではないかと思います。
当時から言われていたことですが、BASICで入門すると本物のプログラマになれないという指摘がありました。言語によってそんな違いがあるのかと思われるでしょうが、これは言語自体というよりは実行環境の問題なのです。ま、BASICという言語の問題もあるのですけどね。FORTRANやCOBOLなどの本格言語に比べると機能も少なく、言語としての筋もそれほどいいものでもありませんでしたので。
それはともかく実行環境なのです。当時のパソコンで使用できたBASICでは、言語処理系とエディタが一体になっていました。なので、ソースコードを書いてその場で実行してすぐに結果を得ることができたのです。当時はこれをインタプリタ型であるからと説明していましたが、ちょっと不正確な説明ですよね。今となってはインタプリタかコンパイラかという切り分けはユーザ視点からは大きな違いがなくなってしまいました。コンパイルが一瞬で終わるようになったので、待たずに実行できるというインタプリタのメリットはコンパイラも兼ね備えるようになりました。また、ハイブリッドというか様々なタイプの処理系も登場するようになりました。中間言語コンパイラもありますし、JITなんてのもありますね。当時のBASIC処理系も正確にはインタプリタではなく中間言語方式でしたし。
ちょっと横道にそれてしまいました。問題は言語自体でもインタプリタであることでもなくて、ソースコードを書いてその場で実行できてしまう。それって今のスクリプト言語もそうじゃないかと思われるかもしれませんが、そうではないのですよ。スクリプト言語の場合はエディタで編集して、エディタとは別に処理系を実行するんですね。そうではなくてBASICの場合はエディタと一体になった実行環境があるんです。その境界は果てしなく小さい。スクリプト言語の場合、インタラクティブモードがBASIC処理系に近いですかね。
そういう実行環境ですから、とにかくプログラムを書いてすぐに実行することができます。それはそれで、プログラミングの習得には非常に効率的ではあります。すぐに結果が出ますので、間違っていた場合にもその結果がすぐに得られます。もちろん合ってる場合にも。すぐに結果を得られて、すぐに次のステップに進んでというサイクルを高速に回すことが出来ます。BASICの様に一体となっていない処理系の場合、エディタでプログラムを書いて別環境で実行して結果を得てというのに時間がかかるので、理解のサイクルがどうしてもゆっくりになる。当時だとコンパイル言語の場合はコンパイルに時間がとてもかかりましたし、私は使ったことはありませんがコーディングシートと言って紙にコードを書いていたりする環境もありました。そういう環境だとプログラムを書いても実行結果を得るまで何時間も下手すれば何日もかかりますので、結果を得て次のステップへのサイクルが非常にゆっくりになってしまいます。
そういう点でBASICはプログラミングの習得には非常に優れていたのですが、その代償と言いますか、BASICで入門した人はとにかくすぐにコードを書き始めてしまうという弊害が指摘されたのです。コードを書いて何が悪いんだって話ではあるんですが、ある程度大きなプログラムになると開発に取りかかる前に設計が必要になります。完全な設計は難しくても、ラフスケッチ程度の設計はしておかないと、図面も書かずに家を建てるような話になってしまいます。そんな状態では家は出来上がらないでしょうし、もしも出来上がったとしても現場でつじつま合わせを際限なく繰り返したあげくとなりますので、トータルとしては時間が膨大にかかってしまうことになります。BASIC入門者が設計をせずに開発にかかってしまうというのはこういうことであって、システムはまともに出来上がらないでしょうし、まともに出来上がっても時間が膨大にかかってしまうというわけですね。
なんか、大したことではない話を長々と書いてしまいましたが、要するに私はBASICで入門したときの癖で未だに設計が苦手ですぐに開発に取りかかりたくなってしまうというわけです。もちろん、BASICで入門してもその後きちんと設計のスキルを身につけた人もたくさんいるでしょうから、特別に私が愚かであるというだけのことではあるとは思いますが。