プログラマというお仕事

プログラマは職人だ!プロならもっと腕を磨け。
世の中ヘボいプログラマが多すぎる。
少々過激な意見でも言っちゃうよ。

スクール

プログラマの資質って?

これまでたくさんの未経験者にプログラミングの講義をしてきました。何も知らない人に対してわかり易く説明する事は、相手にある程度の知識があるのを前提に教えるより数倍難しいのは想像できると思います。
これは私の持論ですが、プログラミングはそれを覚え始める最初の1年目が一番大事です。始めのとっかかりで勉強の仕方のベクトルを間違うと、その後の成長に大きく関わります。それが原因で潰れてしまって業界から去っていった人を過去に何人も見ています。本当にもったいないなあと思います。

多くの人達に教えているとすぐにわかってくる事ですが、つまづく箇所はみんなほぼ一緒です。疑問に思う点も同じです。他人とは違うところでつまづいたり疑問を持ったりする人はあまりいません。ただ違うのは、そこでつまづくか、あるいはそこに疑問を抱くかです。

まずはつまづく点について。多くの人がつまづく箇所を問題なく解決できる人がいます。そういう人は頭がいい。一度引っかかっても自分で考えて解決策を見付けてしまえる能力があります。そして似たような問題に遭遇した時には、もう引っかかりさえしません。自分で解決策を見出した体験が残っているので、それが染み付いていて忘れないからです。問題解決に他人の力を借りないといけなかった人は、類似の問題でまたハマる確率が高いです。

次に疑問に思う点の話。これは上記のハマる点とは逆です。多くの人が何の疑問も持たずにスルーしてしまう話に『ちょっと待って。なんで?』と疑問を持つ人がいます。実はこのように疑問を抱ける方が頭がいい人です。講師の話をそのまま知識として蓄えようという受身の姿勢しかない人は自分で考えて理解する能力に欠けています。自分で考えて納得したものしか受け入れないという性格は、プログラマにとっては実は大事な資質なのです。

これらの話はあくまで私の経験から感じた事でしかありません。しかし私は預かった新人を相手にプログラミングの講義を数日もやれば、その人が将来優秀なプログラマに育つか芽が出ないで終わるかが見えてしまいます。その勘は記憶の範囲では外れた事はありません。

自慢をしようというのではなく、言いたいのは、プログラマとしての資質というのはそれくらいハッキリしているという事です。正直に言います。未経験でもプログラマになれます。しかし誰でもプログラマになれる訳ではありません。大事なのは経験ではなく資質です。下手に経験だけがあってベクトルを間違えてしまっている人よりは、何も知らないまっさらな人の方が伸び白が大きいと思います。未経験者でもやる気さえあれば大歓迎、と私が言うのはそういった理由からです。

やさしいJAVA?

ブログネタ
Javaの学習法 に参加中!

初心者がプログラムを独学で覚えるのは難しいと思います。失敗すると間違った方法で勉強を進めてしまい、スキルアップのベクトルを誤ってしまう危険がかなり高いと感じています。プログラミングを覚え始める最初の1年目で方向を誤るとその後の進歩に大きなマイナスになります。

独学で本を読んで勉強した経験のある初心者以上,中級者未満の人に対して、現在プログラミングスクールでJAVAを教えています。やはり勉強の方法を間違えてしまっていて、言語の文法の表面をなぞった程度の知識しかない人です。『まず本から得た知識はいったん全て忘れるように』と言うのが最初の講義でした。私の教え方は本に書いてある事とは違う方向からの説明なので変な先入観はかえって邪魔です。特にオブジェクト指向の考え方については、変な予備知識があるほど間違って理解されてしまいがちです。

実は現役のプロのプログラマの中でもオブジェクト指向を真に理解し実践できる人はほんのわずかです。その理由を考えてみると、オブジェクト指向以前の古いプログラミングスタイルの知識が邪魔をして、技術のパラダイムシフトに着いて行くのを難しくしているのではないかと思います。
このような古い考え方から抜け出せない技術者が寄ってたかって設計したシステムが旧態依然のひどいものである例を、私は今までいくつも見てきました。その話もいずれ書きたいと思います。

話を戻して、この受講生が独学に使ったという本を買ってきて参考までに読んでみました。割と有名な本らしく、ネット上などでも良い評判が多く見られました。まぁ、あまり期待はしていませんでしたが、これはひどい...
世の中のプログラミング初心者は本当にこの本を読んで『やさしい』と感じるんでしょうか。この本を読んで本当に実用的なプログラムを書ける人がいるとしたら、その人は最初からどんな本で勉強したって出来るくらい頭のいい一部の人間に違いないです。

だって、乗り物クラスを継承して車や飛行機を作ろうだの、動物クラスから犬クラスを継承して「吼える」メソッドを呼んだら画面に「ワン」と表示されますだの、いったい何の話をしてるのやら。『それがいったい何の役に立つんだ』という部分の説明が全くないんです。
上記の『オブジェクト指向を真に理解できていないプロ』の人達にも共通する点はここです。実際の業務システムのどの場面でどのように役に立つかの説明がないまま、単に文法の仕様書を『やさしいつもり』に書き直してるだけです。東大を卒業できるほど基本的に頭がいい人ならともかく、万人が理解できる説明ではないんじゃないでしょうか。

決して特定の固有名詞を出して筆者の方たちを悪く言うつもりはありませんが、私の個人的な見解では『○○言語入門』とか『やさしい○○言語』のようなタイトルの本は決して『優しく』ありませんでした。私ならそれをもっと『易しく』教える自信があります。採算を考えずに私がプログラミングスクールを続けている理由はその一点です。

あなたはなぜプログラムが書けるようにならないか

自分はこんなに努力している。頑張って勉強している。なのにいつまでたってもプログラムが書けるようにならない。
こんな悩みを持っている人はいないでしょうか。
プログラムを独学で勉強しようとする人は結構多くいるようです。そのような人達の大半はまずは「入門○○言語」のようなタイトルの本を探したりするところから始めるのが普通だろうと思います。

私がプログラミングを覚えた頃はコンピュータ関連の本などほとんどありませんでした。今ではどこの本屋にもプログラム言語の入門書などが並んでいるし、インターネットにもいくらでもプログラミング関連の情報が転がっています。今はいい時代だなあと感じると同時に、そのように情報が簡単に手に入ってしまう為にかえって間違った勉強の仕方をしてしまう人も多いのではないかと思います。

買ってきた入門書に載っているサンプルコードをその通りに打ち込んでみて、コンパイルして実行したら動いた!といって喜んでいる人を見かける事があります。本人は真剣に、これでプログラミングを勉強しているつもりになっています。信じられない事なのですが、こういう人が結構な割合で本当にいるんですよ。

またクラスライブラリに含まれるクラスの使い方をとにかく覚えようとする人もいます。特にListBoxとかDataGridとかのGUI部品の使い方をネットで検索して、コードをコピペして見様見真似で動かしてみるとか。ライブラリに含まれるクラスの使い方を覚える事がプログラムを覚える事だと信じているのですが、これもまた驚きです。
もっとひどいのになると、VisualStudioなどの開発ツールの使い方を一生懸命覚えようとしたりします。

あなたはこのような勉強法で『無駄に』頑張ってはいませんか?
このような勉強法では一生プログラムは書けるようにはなりません

私の頃はそもそも個人がコンピュータを所有してプログラムを書くなど考えられない時代で、プログラミングなんて本当に一部のマニアックなオタクだけの趣味でしかありませんでした。だから、とりあえず手っ取り早く動かしてみる、という事ができません。本に載っているコードをどうするかというと、とにかく読むのです。「読む」というのは、文章を読むようにサラサラっと流すのではなく、ここで何故これをやってるのか、この時どの変数がどんな値になってるのか、という事を1行1行考えながら見ていくのです。実際に動かしてみたらこう動くはずだよね、という事を自分の頭の中で確認する、つまり自分がコンピュータになってコードを擬似実行してみるという作業です。

そう!要するに我々が普段やっている机上デバッグというやつですね。
最近の若いプログラマは机上デバッグが出来ないのが多いなと感じます。実機でしかデバッグ出来ない人ですごいスキルのプログラマなんて見た事がありません。自分一人で自由に使えるマシンが目の前にあるのが当たり前の環境で育ったプログラマには仕方のない事かもしれませんが、だからこそ、誰かが勉強の仕方を教えてあげるのが非常に重要なのだと思います。

以前にも書きましたが、プログラムの勉強はそれを始める最初の1年が一番大事だと思っています。ここで方向性を間違うと後から修正が効かなくなるのは経験上はっきり言えます。
独学で勉強を始めようと思っている人は、安易に間違った勉強の仕方をしてしまう危険を知り、頑張りを正しい方向に向けるようにしてください。