こんにちは。プロクラスの吉田です。
ヨシダミツヒロ(@milan40920)
Follow @milan40920
最近いろいろなところで「プログラミング」の重要性について書かれていますが、僕はみなさまに自分自身でプログラミングとは無縁の世界からプログラミングに触れて感じたこと、プログラマーを経験したことにより、今までで非常に役に立っていることをお伝えしたいと思います。
目次
コンピューターを学ぶきっかけ
僕は1992年、21歳のとき、プログラミングを友人から学びました。
当時はパソコンよりもワープロ専用機が各会社に普及し、パソコンはパソコン少年といういわゆるオタクの所持品でした。
コンピューターと僕との唯一の接点だったのはビデオゲームでした。
ビデオゲームが大好きだった僕は、ゲームセンターや家庭用ゲーム機のハードとソフトのクオリティーレベルがみるみる発展していくのを見て、コンピューターの性能はどこまで進化するのかを考えた時、きっとソフトはグラフィカルになり、今後益々人に楽しみを与えていくだろう。そしてコンピューターの性能もどんどん進化し、やがては社会の様々なところに入り込み活躍するんだろう。。
そんな風に未来へのコンピューターへの可能性を感じ、同時にこの時コンピューターを意のままに操ってみたいと思いました。
当時ホテルマンだった僕は、コンピューターとソフトウェアに関われる仕事につきたくなりました。
早々にホテルを辞めて、中学で同級生だった、コンピューター専門学校を卒業した友人を訪ね、時間に都合のつくアルバイトをしながら徹底的にプログラミングを学ぶことにしたのです。
コンピューターのことはゲームをする側しか知らず、知識のない状態からのスタートでした。
衝撃!コンピューターというものの正体
それからの僕の生活は一変しました。
一週間に一度、その友人の家に行っては、「コンピュータとの付き合いかた」について徹底的に学びはじめました。
衝撃的だったのは、
「コンピュータはなんでもできるけど、何にもできない」ということでした。
つまり、人間が命令を与えると、いう通り何でも処理してくれるのですが、人間が命令を与えないことは何にもできないのです。
万能のはずのコンピューターは実は万能ではなかったのです。
他にも、こんな特徴がありました。
・処理スピードは早いが、一つの事しかできない(当時はシングルタスクでした)
・同じことを繰り返すのが得意
・8の乗算、除算が得意
・手順を間違うと正しく動かなくなる
・データや命令は保存しないと消える
などなど、このような事を理解した上で付き合うことでコンピューターの性能を引き出して、使いこなすことができるというワケです。
はじめてのプログラム言語
僕が教えてもらったはじめてのプログラム言語は「マクロアセンブラ」というものでした。
このプログラム言語はコンピューターのハードウェアに限りなく近い「低級言語」という種類のものだったので、実行できる命令が少なく限られていました。できることは主に、変数(レジスタ)の代入、四則演算、メモリアクセスくらいのもの。
従って、1行のプログラムでできることは上の命令のいずれかしかなく、簡単な処理でも2、30行は書かなくてはならず、とても面倒な作業でした。
どれくらい面倒かというと。
例えば、画面に線を引きたい場合、
広い体育館に小さなタイルが敷き詰められているところがあるとします。
その一つ一つのタイルに移動しては、自分で一つ一つのタイルに色を塗っていきます。
1つのタイルだけだと「点」が表示されるのですが、線にしたければ、その必要分の連続したタイル一つ一つに自分で色を塗っていく必要があります。
また、常に今どのタイルの場所にいるのかを覚えていなければなりません。
人間だと体育館のフロア全体を見て、「あーあの辺りに色が塗られているなー」とわかるのですが、コンピューターは今の自分の一つのタイルしか見えていないので、「このタイルは色が塗られている」ことは分かりますが他のタイルは分からない。それを覚えておきながら一つ一つのタイルの座標を変え、一つ一つ塗っていく。
普通に考えると、気が遠くなる作業です。。
面倒くさがりはプログラマーが向いている
そこで便利で役に立つのが「プログラム」でした。
プログラムとは、沢山の面倒な処理を一度に引き受けてくれる存在なのです。
人間がすることは、一つ一つ点を塗っていき、線を引く作業をするのではなく、全体の仕上がりを考えて、まっすぐに線を引く時の条件、曲がって線を引く条件、塗るのをやめる条件などを見つけ出し、命令を与えるのが役割となります。
先ほど書いたように、繰り返し作業者はコンピューターが得意です。
しかし、人間は繰り返し処理が苦手です。
同じことを繰り返していると間違うこともあり、正確性に欠けます。
その反面、人間は考えることが得意な生き物です。
完成イメージを持つのも当然人間ですから、人間がゴールを設定し、ゴールまでの途中経過はコンピューターに任せるのがコンピューターと人間のそれぞれの役割となります。
・単純作業や繰り返しのある面倒なことはコンピューターが正確に確実に行う
・命令を与えると24時間文句を言わず働いてくれる
・休んでいる間に完成する
面倒くさがりはプログラムが得意になるとよく言われますが、このような理由を聞くと頷けます。
ちなみに、パソコンのディスプレイに線が引かれたり、文字が表示されたりする処理は、今ご紹介した通り、上記の体育館のタイルに色を塗る事を、実際にコンピューターが超高速で処理してくれているのです。
もちろん人間が命令をして。
プログラマーは特殊な視野を持っている
しばらくこのようにしてプログラミングを組みながらコンピューターの仕組みが一つ一つ分かってくると、誰でもコンピューターの視点で物事を見る事が自然と出来てきます。
従って、プログラマーの人たちはそんな視野や思考で社会の様々な事を捉えているという事になります。
これはどういうことかというと、言い換えれば、
「細かなレベルで物事を分解して考える力が非常に発達している人たち」
ということになります。
通常ひとは、一瞬で沢山の情報を取り込み、一瞬で理解します。
実は物事は一つ一つの情報が重なり合って存在し、脳の中で分解した上で一つ一つ理解しているのですが、
人間の脳の処理が早すぎて、人は一瞬にして理解したように感じてしまうのです。
分かりにくければ、こんな例えはどうでしょうか。
人がジュースやスープを味わう事と似ているかもしれません。
ジュースやスープを口に含むと美味しさが味わえるのですが、実は非常に複雑な処理を経て味覚となり「おいしい」や「まずい」と理解します。ジュースやスープの成分を分解すると、果物や野菜の果汁や糖分、保存料などの化学物質でできています。
もっと分解していくと、タンパク質や水分、ブドウ糖などさまざまな化学物質から構成されていて、その物質が口に含まれる事により、唾液と反応したり、体内に吸収されたりとさまざまな化学反応を起こすわけです。
普段そこまで意識してジュースやスープを飲む事はありませんし、必要もないのですが、プログラムを組む人たちは極端な事を言うと、そのレベルで物事を捉えられるような筋肉が発達しているといえるかもしれません。
プログラムを組むことにより得られる利点
プログラマーという仕事は常に、コンピューターに対して、ゴールを決め、規則的なパターンを見つけ出し、法則性を見出す仕事となりますので、自然とそのような考え方が身についてきます。
コンピューターへの命令を間違うと正しく動いてくれないので、正確性も重要ですので、処理方法や考え方にまちがい無いようにしなければならないためチェックが細かく、物事に対して厳密になります。
プログラマーの人に少々理屈っぽく、細かなタイプが多いのはこのためかもしれません。
このような能力は、プログラミングをする以外にも、さまざまなシーンで非常に役に立ちます。
旅行へ行く場合も、ゴール設定し、ゴールへたどり着くまでの過程をしっかり予定を組む事もできれば、人と話す上でも結論をしっかり持ち、話す順序をロジカルに組み立てる事ができるため、非常に理路整然としています。
資料作りにおいても同様に、説得力ある要素で構成し、納得のプレゼンテーションが可能となります。
プログラムを理解することにより、非常に素晴らしい視野と思考を得られ、プログラマーを経験してきた人は、物事を深く考える力、資料などの組み立て方、人とのコミュニケーション力など、学ばなければ手に入れられなかった能力が少なからず得られたのではないかと思っています。
長くなりましたが、この辺りでブログは終わりたいと思いますが、プログラマーという職業の考え方、視点などをブログを通して少しでもご理解いただければ幸いです。
ヨシダミツヒロ(@milan40920)
Follow @milan40920
プロクラスではプログラミングの授業をiPhoneやAndroidのスマホアプリやWebサイト製作を通して学んでいただける授業をご用意しております。
ご興味ある方は是非お越しになってください。