プログラミングのススメ |
■プログラミングって本当に難しいの? |
パソコンビギナーが、少しずつ知識を積み上げていくにつれ、ごく一部の「プログラミング挑戦者」とその他大勢の「プログラミングなんていいよ派」に分かれていくように思えます。つまり、ある程度コンピュータというものがわかってくると、「プログラミングをする」というのがどんなに難しくて、(自分にとって)身の程知らずのものか、を思い知らされてくるということなのでしょう。
が、本当にそうなんでしょうか? 本当にプログラミングは、専門知識を身につけたごく一部の頭のイイ理系出身者(…なんて偏見…)にしかできないことなのか?
…実をいえば、私こそが、そんな固定観念に縛られて「自分にはプログラミングなんてできないんだ」と自分自身を落ちこぼれにしてきてしまった人間なのです。だからこそ、はっきりといえます。「プログラミングはコンピュータの専門知識のない人にはできない! というのは完全なる偏見である」と。
が、実際問題として、プログラミングに挑戦して挫折する人は後をたちません。これは一体、なぜなんでしょうね? 誰でもできるなら、なぜ多くの人が「やっぱりオレにはダメだ」と諦めることになってしまうのでしょう?
あなたが「プログラミングをやってみようかな?」と思ったとき、まずどういうアプローチをとろうとするでしょうか。手始めにどんなことからやってみますか? とりあえずたいていの人が考えそうなアプローチと、それが実際にどういう結果をもたらすか、ちょっと考えてみましょう。
■なぜプログラマはビギナーを挫折させたがるか? |
が、世の中そううまくはいきません。たいていの場合、彼があなたに語る話は、なぜかあなたには絶対理解できないぐらいに難しいはずだからです。要するに、彼はあなたにこういいたいのです、「君には絶対無理だ!」と。
「プログラミング? おいおい、本気でいってるのかよ。お前、プログラミングがどういうものかわかっていってるのか? あのな、今のWindowsとかMacとかいったGUIベースのOSってのはな、イベントドリブン方式の高度な開発が求められるんだ。しかもOSには何千ってAPIっていうライブラリがあって、これを全部覚えないとプログラミングなんてできないようになってんだな。昔のポケコンとかDOSレベルの時代なら、まあお前なんかでもちっとはできたかも知れないけどよ、今の時代じゃ、専門知識もない人間がプログラミングなんて無理なんだよ。だからお前、まずコンピュータの勉強をもっとしろよ。はっきりいって、オレだってプログラミングとなると挫けそうになるぐらいなんだからな。お前なんてまだまだだよ。まだまだ!」
…かくてプログラミング挫折者の一丁上がりです。
これは極端な例だ、もっと心優しい人だっているはずだぞ。お前はあまりにシニカルだ。と思う人もいるでしょうね。はい、その通りです(笑)。けれど、実際問題として、世の中のプログラマの多くは、ビギナーをなんとかして挫折させようとします。ホームページで、ニュースグループで、メーリングリストで、初心者がちょっとおバカな質問をすると、ここぞとばかりに攻撃をされる…ということはよく聞く話です。なぜ、彼等はこんなにもビギナーを目の敵にするのでしょう。
その理由について考えるには、人間という生き物の不可思議な生態についてちょっとだけ理解をしておかなければいけません。この世の中にはなんとも不思議な法則がたくさんあります。その1つに、こんなものがあります。
ある一部の人たちの間だけで支持されていたものが、広く普及していこうとしたとき、その最大の障害となるのは元からの支持者である。
これは、いろんなところでいえる法則だと思います。――プログラミングというのは、とても特殊な世界でした。その昔は、ごく一部のとっても知識が豊富でとっても頭がよくてとってもえら〜い人間だけがその技術を駆使して行なうことのできる世界だった(と多くの人は思わされてきました)。
彼等にはプライドがあり、それぞれに信念がありました。「プログラミングとはかくあるべきである」というようなものをみんなが抱いていました。――そこに、「なんか可愛いから買っちゃった!」などとSONYのVAIOやiMacを買ったばかりの人間が、「ねえねえ、プログラミングって難しいの? ちょっとやってみたんだけどさ」などといってきたらどうなるか、その結果は火を見るよりも明らかです。
こんな連中がどっとプログラミングの世界になだれ込んできたら大変なことになる。プログラミングとはこれこれこうあるべきものなのだ。それを知識も経験もない人間が、無秩序にくだらないプログラムを作って垂れ流すようになったら、とんでもないことになる。プログラミングとはそんなに安易にやるべきものではないのだ。苦節十年、艱難辛苦を乗り越えて辿り着いたものだけが手にすることのできる世界なのだ。…
なんか、また一人でイっちゃってますか?(笑)でもまあ、気持ちは想像できるでしょう? 彼等は、自分達が苦労して築きあげてきたこの世界に、苦労知らずの新人が呑気に入り込んでくることに我慢がならないのです。
もちろん、中にはもっと心の広い人もいることでしょう。けれど、世の中は実に不思議に満ちています。世間にはこんな法則もあるのです。
心の広い人ほど凡庸である。
性格の悪い人ほどその世界で大きな影響力を持っている。
したがって、心の広い人は、プログラミングの世界では「裏切り者」とされてあまり表に出てきません。かくて、ビギナーがプログラミングを始めようとすると、「もっと努力しろ! プログラミングの道は険しく厳しいものだ! 根性のないやつはやめてしまえ!」という猛烈な体育会系のしごきに出会ってしまうことになるのです。
■プロは、「わからない」ことがわからない |
多くのプログラミング関係の記事や書籍は、たいていの場合プログラミングの専門家が書いています。書籍の著者略歴などを見ると、すごい人たちばっかりです。○○大学の助教授だとか、某有名コンピュータ会社のエンジニアだとか、その道のプロばかりです。
こうした人は、確かにプログラミングについては詳しいのですが、いかんせん文章力がありません。もちろん、中には文章のうまい人も多いのですが、少なくとも「わかりやすく説明する」ということに関しては、B級執筆者ばかりです。彼等は、難しい専門的な知識を整理して説明するようなことはうまいのですが、専門知識を使わずにごく普通の言葉で説明するのは苦手なのです。
そうした基本的なこと以上に問題と思えるのは、彼等がプログラミングのエリートであることです。――多くの解説書を読んで強く感じるのは、「この本を書いた人は、きっと今までプログラミングで挫折したことのない人なんだろうな」ということです。彼等には、「わからない」ということがわからないのです。
「きちんと説明してあるじゃないか。これを読んで意味を理解すればわかるはずだろう?」
彼等にとっては、それが当然のことなのでしょう。彼等は、「理解できない」というのがどういうことなのか、理解できないのです。――ニュースグループやメーリングリストなどで全くのビギナーがちょっとお間抜けな質問をすると、必ずこういう返事がどっと返ってきます。
「もっと問題点を整理しろ! どこまで自分で理解していて、どの部分で問題が発生してどこでつまづいているのか、きちんと説明しろ! でなけりゃ返事のしようがないだろ!」
もちろん、その通りです。が、この返事を見れば、彼等が「わからない」ことがわからないのがよくわかるでしょう(…ん?わかるのかわからないのかどっちだ?)。わからない人は、要するに何がなんだか皆目わからないものです。だからこそ「わからない人」なのです。そうでしょ?
よし、本職の人が書いた本がビギナーには向かないことはわかった。では、プログラミングの専門家以外の人が書いたプログラミングの本はどうなのだ?――あなたはそう思うかも知れません。こうした人の中には、けっこう面白い本を出している人もいます。が、なぜかプロ(?)と同じように難しいだけの本もけっこう多いのです。これはちょっと意外です。一応、ライターなど文章を書くのを仕事にしている人なら、わかりやすい文章を書けるはずじゃないか。そう思うかも知れません。けれど、ここで、世間を律する不思議な法則その3が登場します。
人間は、その知識や技術に自信のあるものほどやさしく、自信のないものほど難しく説明しようとする。
専門外のライターは、多くの場合、プログラミングについて自信がありません。まあある程度わかるとしても、本職のプログラマから鋭く突っ込まれたりするとちょっと困っちゃうな、というところがあります。こういう場合、ほとんど全てのライターは、専門用語などを多用してより難しそうに書くのです。そうすると、読者からの質問などがなくなるからです。
わかりやすいように説明をすると、読んだ人は割と気軽に質問をします。けれど、いかにも難しそうに書いてあると、読者は「わからないっていうと自分がバカなんじゃないかと思われる」のでほとんど質問をしなくなります。またビギナーの場合、専門用語がどんどん出てくると、「どこがわからないかわからない」状態となり、やはり質問のしようがなくなります。
もちろん、これらはあくまで「悪い例」であって、世の中にはきちんとした解説書などもちゃんとあります。ですから心配にはおよびません。ただ、多少プログラミングを始めれば、どれがよい本でどれが悪い本かなんとなく見当がついてくるものですが、全く何も知らない状態では、その区別がつきません。ですから、とんでもない本を選んでしまうこともあるのです。そういう意味で、かなりリスキーなアプローチといえるでしょう。
■習うより慣れろ!が最善の道では? |
どんなアプローチをとるにしても、何かを新しく始めるというのは大変なものです。途中で立ち止まったり、悩んだり、ほうり出したり、そんなことと無縁でいられるはずがありません。これはプログラミングに限らず、全てのことにおいていえることですね。
そんなやっかいな道をなぜ歩む人がいるのか。それは「辿り着いた世界がいかに楽しいものか」を知っているからでしょう。だからこそ、今は辛くとも頑張ろうと思うのでしょう。
プログラミングをして何か得られるものがあるとするなら、それは唯一「自分の作ったプログラムが動いたときの喜び」でしょう。これはもう、言葉で説明することなどできません。実際に一度でも体験すれば誰でもわかることなんですが…。
これからプログラミングを始めようとしたなら、まず最初に「初めて動いた感動」を知ることが最善の道だと思うのです。「あっ! 動いた!」という感動を知らずしてプログラミングを覚えることは絶対にできない、と断言できます。
また、プログラミングの習得というのは「体系化された知識をいかに身につけるか」であるように思われていますが、実際はそうではありません。どちらかというと「習うより慣れろ」の世界なのです。
だって、考えてみて下さい。あなたは広辞苑に出てくる全ての単語を理解していますか。わからない言葉や知らない言葉だって山のようにあるでしょう? けれど、ちゃんと日本語を使えているじゃないですか。日本語の単語を数多く体系的に暗記することが日本語をマスターすることではありませんよね? 学生時代、毎日「試験に出る英単語」を暗記して、果して英語がしゃべれるようになりましたか?
プログラミング言語だって、言語の一種です。いくら命令や関数を暗記したって何もできるようにはなりません。それより、例え覚えた命令が10個しかなくても、それを実際に使いこなせるようになれば、そのほうがはるかに役立つのです。そして「使いこなし」というのは、とにかく実際に自分で書いて試してみるしか身につける道はないのです。
というわけで、とにかく何かの言語を手に入れる! それこそが一番の道だといえるでしょう。
■まずどんな言語から始めるべきか? |
これは、人によっていろいろと意見が分かれるところでしょう。あるいは、あなたは既にこの種の情報に詳しい友人にいろいろと尋ねた経験をお持ちかも知れません。が、今までの説明を読めば、そうした友人の返事が必ずしも信用のおけるものとは限らないことに薄々気づいているのではないでしょうか。
多くの場合、プログラマはこういう信念を持っています。「いい加減なものから始めると後で苦労する。最初からきちんとしたものから始めるべきだ」と。これは、ある意味で正しいことです。かくて多くのプログラミングビギナーはいきなりVisual C++などというソフトをすすめられ、瞬く間に挫折していきます。
プログラミングを覚えたいという人に「C」という言語をすすめる人が多いのには全く驚くばかりです。私も最初はこれにやられました。「入門C言語」なる本を買ってきて、一所懸命勉強したものです。そしてそこから私のプログラミング落ちこぼれ人生がスタートしたのですね。
Cという言語は、本格プログラミングには欠かせないものです。市販されている多くのプログラムはCで書かれているのです。CはOSやハードウェアに非常に親しい言語で、ハードを柔軟に扱うことができます。このため、プロのプログラマの間ではCが強く支持されていますし、応用性なども非常に広いのは確かでしょう。
が、これは裏を返せば「OSやハードに関する専門的知識がなければCを使いこなすことはできない」ということにもなります。ビギナーがとても使いこなせる言語ではありません。この夏、初めて山登りに挑戦しようという人に「初心者だからこそ最初からしっかりした山に登るべきだ」といってエベレストを推薦するようなものです。
プログラミング言語は種類が違うと内容もかなり違ってきますから、「なるべく広く使われているものを覚えるべきだ」という意見もある意味で正しいものでしょう。Cは広く本職のプログラマの間で使われていますから、Cを覚えれば無敵だ!というのは確かに間違ってはいません。…が、全くプログラミング経験のない人が初めて覚えるとき、重要なことはもっと他にあるはずです。
ビギナーが最初に覚えるべきは、言語そのものではなく、その言語を使って「プログラミングという世界特有の考え方」を理解する、ということなのだと思います。そのためにも、なるべく簡単でシンプルな構造のものがよいでしょう。
例えその言語があまり一般的でないものとしてもそれほど心配はいりません。1つの言語をマスターしたなら、2つ目の言語を覚えるのはそう難しくはないからです。新しい言語に出会っても、「これはオレが使ってる言語の○○という機能に相当するものだな」と、自分が知っている言語に照らし合わせながら理解できますから、意外と手こずらずに覚えられるのです。言語というのは、種類が違っても基本的な概念や考え方などは似たり寄ったりなのですから。
が、全く何の言語も知らないときは、プログラミングの世界特有の考え方や概念などにてこずります。というより、そこが最大の難関なのです。言語の命令や関数を覚えるのは、それに比べればたいして難しくはありません。ですから、初めて挑戦する人には「Cにこだわるな!」とだけいっておきましょう。
では、実際問題として何を選ぶべきか。――これ以上ゴタクを並べるのも退屈でしょうから、とりあえず以下にお勧めをあげておきます。
※まったくプログラミングなんてやったことない。
実用アプリの作成にこだわらず、楽しく作品を作りたい。
一番のお勧め: Squeak
・Squeakを進める理由
「タダである」「ほとんどすべてのプラットホーム(OS)で動く」「プログラミングなんてわからなくてもいい」「英語なんて読めなくていい」「小学生でも十分イケル」・・といったあたりでしょうか。ともかく簡単で楽しくプログラム作りを体験できます。ただ、Squeakは非常に特殊な環境ですから、普通のアプリのようなものは作れません。だけど、アルゴリズムとか「こうやるとこういう結果になる」といったプログラミングの基本的な考え方などを身につけるにはうってつけのものです。
特に、お子さんがいる家庭なら、親子で始めてみる、というのをお勧めします。小学高学年ぐらいにもなれば、けっこう使いこなす子も多いみたいですよ。
※とりあえず、実用的なアプリを作れることを目標に考えたい。
本格的な経験はないけど興味はけっこうある。
一番のお勧め:Delphi(Windows)、AppleScript Studio(Mac OS X)、REALbasic(Mac OS)
・Delphiを勧める理由
とにかく「タダ」というのは大きいでしょう。タダなんだから、とりあえず一回試してみて、わかんなけりゃ他のにすればいいや、と気楽に挑戦できるところが魅力です。が、最大の魅力は値段ではなく「性能」でしょう。Delphiは、とにかく強力です。タダで配っているPersonal版でさえ、80種類ものコンポーネント(ソフト作りで使える部品)が用意されており、十分過ぎるといえます。また作ったソフトの実行速度も速く、VB製のソフトと比べると数倍〜数十倍は高速に動きます。
従来、Windowsでは「ビギナーにはVisual Basicだ」といわれ続けてきました。が、2002年にVisual Basic .Netがリリースされて状況は変わります。VB .Netは、確かに強力になり、オブジェクト指向を全面サポートした本格開発ツールに変貌しましたが、おかげで「ビギナーが簡単に使える」ツールではなくなってしまいました。現時点では、Delphiの勝ちといえます。
・AppleScript Studioを勧める理由とにかく「タダである」というのが大きいでしょう。Mac OS Xのパッケージ版にはDeveloperToolsがついてきますし、パッケージを持っていない人も、アップルのデベロッパーサイトからダウンロードして無料で使えます。
一般に、Mac OS Xの開発といえば「Project Builderを使いObjective-CでCocoa開発」というのが基本でした。最初からプログラマを目指すならObjective-Cもいいでしょうが、「全然経験がない」という人には荷が重すぎます。AppleScriptは、ごく簡単なスクリプト言語ですから、誰でも簡単な学習で覚えることができます。ただ、現状ではAppleScript Studioは実装されていない機能が多く残っており、完璧ではありません。特にグラフィック系は無力です。またAppleScript Studioの資料も少ないので、それも欠点といえるでしょう。
・REALbasicを勧める理由Macの本格アプリケーション開発の可能な開発環境の中で、もっとも簡単だからです。価格も比較的廉価で、安いエディションなら2万円しません。VBなどと同じく「BASIC」という言語を採用しており、専門知識がなくとも最初のうちは比較的簡単に覚えていけるでしょう。ただし、最近はREALbasicも強力になってきており、かなり本格的な機能も盛り込まれていますから、全部使いこなそうとするとけっこうハードです。が、他の言語と比較した場合、敷き居の低さ、コストパフォーマンスの良さは一番でしょう。
まぁ、これらはあくまで私個人のお勧めなので、「誰であろうとこれがベストだ」というつもりはありません。プログラミング言語はそれぞれに特徴がありますので、自分がどれにあてはまるか考えて、自分に適した一本を選びましょう。
■プログラミングを始めるにあたっての注意 |
まず、プログラミング開始以前に必要な知識についてです。プログラミングというのは、要するにパソコンを自分の思い通りに操作するということです。ですから、自分のパソコンに関する基礎的な知識が最低でも必要となります。具体的には、以下のようなことです。
※まず最初に覚えておく方がいいこと
1.自分のマシンおよび使っているOSについての知識。これは、プログラミングの勉強をすすめれば必ず必要となる知識です。また、わからない事柄をインターネットのニュースやメーリングリストなどで質問するときなども、これらをはっきり書かないとけちょんけちょんにされてしまいます。
2.Windowsの場合、MS-DOSに関する基礎的な知識は身につけておいて下さい。特にファイル関係を扱う場合、MS-DOSの基礎知識がないとついていけなくなります。
とりあえず、この2点については、プログラミング以前の基礎知識として勉強しておくようにして下さい。
次に、勉強の仕方についてです。最近、よく聞くのが「プログラミングを覚えたいけど、何から覚えればいいかわからない」ということです。多くのプログラマは「まず、自分で何か作りたいものを決めて、それを目標にするのがいい」といいますが、本当のビギナーには、何が作れるのかさえわからないでしょうから、これも難しいですよね。
プログラミング言語を覚えるとき、私は最も基本的な文法と命令をいくつか覚えるところから始めます。そして、とりあえずちょっとしたプログラムが作れる程度の知識を頭に入れておくのです。そうなればしめたもの。後はそれを元に、「今度はこういう機能を足すにはどうすればいいか調べてみよう」という具合に、1つ1つ攻略していきます。
とりあえず、勉強する手順のようなものをざっとまとめてみましょうか。
※プログラミング言語を勉強していく順番
1.まず、開発ソフトの基本的な使い方を覚える。
これは当たり前ですね。が、全部を覚えようとは思わないこと! 基本的なものだけ、です。具体的にいえば、「新規にプログラムを作るときの手順」「用意されているさまざまな部品を作ったり編集したりする方法」「プログラムリストをどうやって書けばいいのか」「作ったプログラムをその場で実行する方法と終了する方法」「保存の仕方」「アプリケーションの作り方」――以上です。ソフトによってはさまざまなプログラムを作れるものもありますが、最初の内は「ダブルクリックで起動できるアプリケーション(WindowsでいえばEXEファイル)」を作ることを目標にしましょう。
2.まず、ボタンとフィールドを使えるようにする。
実際のプログラミングですが、最初に「ボタンをクリックし、フィールドに書かれたテキストを取り出したり書き換えたりする方法を覚える」ということから始めるのがいいでしょう。テキストのやり取りは、プログラミングの基本です。これだけでも、実際に使い方がわかれば、いろいろなことができるようになるものです。また、多くのソフトでは「メッセージボックス」といって、テキストを画面に警告ウィンドウのようにして表示する命令があります。これの使い方を覚えましょう。
3.変数は、整数と文字列だけまず覚える。
ビギナーが最初に引っ掛かるのが変数です。最近のプログラミング言語ではさまざまな変数が使えるようになっていますが、一度に全部覚えようなどと思ってはいけません。まず最初は「整数」を扱う変数と「文字列(要するにテキスト)」を扱う変数の2つだけ使えるようになりましょう。それで十分です。
4.構文は、条件文と、一番簡単な繰り返しを1つだけ覚える。
プログラミング言語には、特別な処理をする構文がいろいろと用意されています。その一番の基本は「条件分岐」と「くり返し」です。条件分岐(条件文)は、何かの条件をチェックして正しいかどうかで処理を変更するものです。繰り返しは、一定のルールに従って、命令を何度もくり返すものです。どちらも、一番単純なもの、単純な書き方を1つだけ覚えましょう。それが使えるようになれば、後はそう難しくはないはずです。
5.ここまでできたら、何かアプリケーションを作ってみる。
以上で、簡単なアプリケーションは作れるようになってしまいます。例えば、簡単な電卓プログラムとかなら、できてしまいますよ。とにかく一度自分のプログラムを作ってみましょう。それが実際に完成して、ダブルクリックして動くと、「あー、なんか自分にもできそうだな〜」って思えるもんですよ。とりあえずここまでくれば、なんとか先が見えてくるはずです。
6.グラフィックに挑戦してみる。
ここから先は、人それぞれに違ってくるでしょう。どんなものを作ってみたいかいろいろと考えも出てくるはずです。が、とりあえずもうちょっと勉強しないと、という人は、グラフィックを表示させる方法を覚えましょう。命令を使って円や四角を描かせたり、あらかじめ用意しておいたグラフィックをウィンドウに表示させたり、といったことです。これができるようになると、イメージがぐっと広がりますよ。
ここまでくれば、既にあなたはプログラマの仲間入りです。もちろん、たいしたものは作れないでしょう。本職の人からはまだまだバカにされるかも知れません。けれど、ちゃんとプログラムを作れるようになったのですから、誰が何といおうとプログラマです。
高度なものを作れる人ほど偉い!という不思議なカースト制度が、この世界にはしかれています。本職のプログラマであれば、そうでしょう。けれど、「趣味で楽しみたい」という人に、そんなものがあてはまるわけがありません。パソコンなんてもんは、楽しめてナンボですよ。気楽にいきましょ、気楽に。