夏休みからプログラミングの勉強を始めたい人の気持ちを高めたい記事【連載:えふしん】
2015/08/04公開
藤川真一(えふしん)
FA装置メーカー、Web制作のベンチャーを経て、2006年にGMOペパボへ。ショッピングモールサービスにプロデューサーとして携わるかたわら、2007年からモバイル端末向けのTwitterウェブサービス型クライアント『モバツイ』の開発・運営を個人で開始。2010年、想創社を設立し、2012年4月30日まで代表取締役社長を務める。その後、想創社(version2)を設立しiPhoneアプリ『ShopCard.me』を開発。2014年8月1日からBASE(ベイス)株式会社のCTOに就任
以前、大学院の仕事で、プログラミングの基礎までは勉強している専門学校の子たちにPHPを教えようとしたことがあり、すごく難しかったのをふと思い出しました。
そこで今回の記事は、この夏休みにWebプログラミングを勉強してみたいなぁという大学生、大学院生をペルソナとして、プログラミングを学ぶ意義を伝えて、勉強のきっかけになるような話を書いてみたいと思います。
プログラムとは何か?いや、そもそもコンピュータとは何か?
MacやWindows 、iPhone、Androidスマートフォン、Apple Watchなどは、全てコンピュータ製品です。最近話題のスマートロックもコンピュータですし、自動車のエンジンもいまやコンピュータで動いています。
オフィスで乗るエレベータも、テレビにもコンピュータが入っていて、誰かが作ったプログラムで動いています。
from Yutaka Tsutano
全てのコンピュータの基本はスイッチ
コンピュータの基本中の基本は「スイッチ」です。
皆さん、小学校のころの理科の実験で、乾電池に電球をつないでスイッチを入れると電球のランプがつくという実験を一度はやったことがあると思います。
それは「回路」と呼ぶものですが、そのようなスイッチの“集合体”として作られたものがコンピュータです。
例え話からコンピュータとプログラムの仕組みを知ろう
あるカンバン屋さんが、スイッチを入れると電球がつく回路を作ったとします。そしてその上にプラスチックのカバーをかぶせ、夜でもお店のロゴの文字が浮かび上る装置を作りました。それを試しに売ってみると、お客さんには好評でした。
しばらく経ったころ、お客さんに「来週から店の名前が変わるから文字を変えたい」と言われました。このプラスチックは特注品で、発注から納品まで3週間ぐらい掛かってしまいます。
板から作り直しになると、文字を簡単には変えることができません。文字を間違えて作ってしまい、納期に間に合わずお客さんに迷惑をかけることもしばしばありました。
そこで、カンバン屋さんは考えました。
「記号や文字を入力すると、いつでも自由な文字を映し出すことができるカンバンを作ろう。さらに、カンバンの設置サイズには限りがあるから、文字の長さも変えられるようにして、一定の文字数を超えたら1文字ずつ流れるようにして何文字でも入力できるようにしよう」
カンバン屋さんは新製品の開発に取り掛かりました。こういう工夫をし始めた時に必要になってくるのが、【コンピュータ)という仕組みと、文字を動かす【プログラム】の組み合わせです。
開発してみると、こんな感じになりました。
・文字を入力するボタン ・・・ 入力装置
・入力された文字を保存しておく仕組み ・・・ 記憶装置
・文字を出力する電球 ・・・ 出力装置
・プログラムを動かす装置 ・・・ 中央演算装置とメモリ
・入力文字を表示し、文字の長さによって表示を切り替える仕組み ・・・ プログラム
これは、コンピュータの教科書に書いてある基本的な構造そのものです。このような製品を開発したカンバン屋さんは、この製品に「デジタルサイネージ」という言葉をつけて売り出し、大儲けしましたとさ(この話はフィクションです)。
from Hajime Nagahata
このお話はフィクションですが、誰かの課題を解決し続けると、ただのカンバンがデジタルサイネージに変化します
実際、昔のコンピュータは7つのLEDを並べて、1文字のアルファベットの文字を表示していたりしました。その後、テレビモニタに表示したり、紙に文字を印刷したりするようになりました。
そう、先ほどのストーリーにあったカンバンに文字を表示する仕組みを、WebサーバとWebブラウザやスマートフォンの液晶画面に置き換えると、ほぼ同じような考え方でインターネットを通じて世界中の人に情報を伝える仕組みになります。
実はWebの開発者の仕事は、このカンバン屋さんが文字を切り替えるために作ったプログラムとやっていることはあまり変わりません。
iOSのSwift、AndroidのJavaなどスマートフォンアプリの開発言語、PHPやRuby on RailsのようなWebで使う開発言語は、それを使う開発者が、必ずしもインターネットの通信プロトコルや、スマートフォンにおける画面描画方法などのハードウエアに関する専門的な知識がなくても、伝えたい情報を自由に伝えられる仕組みとして提供されています。
アプリケーションエンジニアは、それぞれの装置に文字を表示したり、グラフィックを動かしたり、情報を切り替えたりなどのプログラムを書く仕事をして、お給料をいただいています。
そこに「メディア」という名前だったり、「SNS」だったり「ゲーム」などというカテゴリ名が付いて、それぞれのビジネスの世界が乗っかっています。
プログラミング言語によって変わるコンピュータの世界観
情報系でなくても、理科系の学科にいらっしゃる方であれば、何となく「C言語」や「アセンブリ言語」などという言葉を知っている人も少なくないでしょう。
それに対してWebの技術では、PHPやRubyなどの言語が目の前にあって、どう違うのか分からないという声が聞こえてきそうです。
先ほど「コンピュータはスイッチの集合体」と書きましたが、スイッチの集合体をどうやってプログラムで操作すれば、ゲームや通信アプリができるのか? を考えても、あまりピンと来ないのではないかと思います。
仮に説明しようとしても抽象的で非常に難しいです。それに対して、以下のようなWebで入力された名前を画面に表示するというプログラムは、比較的、直感的に分かるのではないでしょか?
<?php
$name = $_GET['name'] ; // URLから名前を受け取る
echo “My name is ” . htmlspecialchars($name) ;
?>
これはPHPで書かれていて、Webブラウザで入力された名前を、画面に表示するプログラムです。どうですか? 個々の命令の意味は分からなくても、何となくやっていることは分からなくもないという感じではないでしょうか?
実は、この短いソースコードには、PHPの基本的な仕組みや、Webの仕組み、さらにはセキュリティ上、注意しなくてはいけないWeb技術についての話が何個か入っていて、これだけのソースコードでさえもちゃんと説明すると、けっこう説明しなくてはいけないことがたくさんあります。
ですが、ソースコードをコピペして、文字を変えれば、自由に表示する文字を変えることは簡単にできそうです。それこそWebに表示するカンバンなら、これだけでも実現できそうです。
このように、PHPやRubyなどイマドキの言語の良いところは、文字を扱うのが得意だということを知っていただけるといいと思います。
それに対して、C言語やアセンブリ言語は、文字を文字として扱うというよりは、文字を構成するデータ構造のレベルで情報を扱うことになります。コンピュータの仕組みに寄り添ってプログラムを書くのが、C言語やアセンブリ言語の特徴です。
お恥ずかしながら、私はC言語で、PHPのコードと同じ動作をするWebサーバのプログラムを書くことができません。
実は、それ以前に2つの文字列をつなげる処理を書くだけでも、コンピュータにどう文字列が格納されていて、ポインタなどというものでどう操作するか? という仕組みの理解がないとうまくプログラムを書くことができません。
とにかく言えることは、PHPのエンジニアからすると、C言語で文字を取り扱うことや、インターネットに通信する処理を書くのはひどく面倒くさいということです。
実はPHPやRuby自体がC言語で作られています。PHP言語を作った人たちは、C言語で書ける高度な技術を、より簡単に扱うための言語としてPHPを作っています。
個人的に、PHPで偉大だなと思う「命令」を紹介しましょう。file_get_contentsという命令です。この命令は、たった一行で、インターネットのWebサイトからHTMLや画像をダウンロードすることができます。
<?php
echo file_get_contents(“http://www.yahoo.co.jp”) ; //Yahoo!Japanのトップページを表示
?>
画像やSSLに関わらず、インターネットに通信してデータを都合よくダウンロードしてくれる処理を、たった1文で書ける言語を他に見たことがありません。そして、file_get_contentsというコマンドのソースコードを見てみると、C言語で書かれていることが分かります。
インターネットの普及がエンジニアの役割を変えた
このように、C言語はプログラミング言語のような高度な仕組みを作るためのプログラミング言語として活躍しています。
それであれば、C言語の方が高度な製品が作れるわけなので、C言語が書けないと高度な仕事が得られなくて、PHPやRubyでは低いレベルの仕事しか得られないのかというと、そういうわけではないのがコンピュータ業界の面白いところです。
これはインターネットが普及してから顕著になったことですが、Webサーバやアプリケーション、HTMLや画像によってもたらされるユーザー体験によって、システムが直接ビジネスを行える仕組みとなったことこそが革命でした。
それまでのビジネスにおけるコンピュータとは、経理事務などの人の仕事を、高速かつ正確に代替してくれるような省力化装置としての位置付けだったのです。それが、インターネット経由で「情報やサービスを売る」という新しいビジネスのあり方を生み出すことができるようになりました。
さらに、SNSなどによって、人間のコミュニケーションの幅が広がったことも無視できません。つまり、高度なプログラムを書くという役割以外に、ビジネスを素早く、うまく実現するという役割もエンジニアの職能に入ってきたということです。
そういう状況において、WebプログラミングのシーンでC言語を扱うのは得策ではありません。いろんなことが細かくでき過ぎてしまうのも、またよくないということなのです。
C言語が得意な分野と、PHPやRubyが得意な分野が分れて、それぞれに活躍の舞台があるというのが現状です。
そうなるとコンピュータの基本的な仕組みを知っていることよりも、世界中の優秀な誰かがお膳立てしてくれた言語やフレームワークを、素早く、適切に使いこなす力があることこそが「技術力」として重宝される場面も増えています。それがiOSやAndroidのアプリを作るという意味であり、PHPやRuby on Railsを扱うことも含まれるわけです。
それこそ昔ながらのプリミティブな視点で全ての技術を批評的に見てしまうベテランの技術者よりも、他人が作った最新技術を、それがまだまだ未完成だったとしても、面白がって受け入れる若い技術者の方が重宝されるシーンが増えているのは、そのような背景があってこそとも言えます。
この記事を読んでもプログラムを書けるようにはならないが……
ここまで長く書いてきました。
ほとんど具体的なプログラムについて説明していないので、どう受け取っていただけるかは分からないですが、1つだけ言えることは、C言語を扱って高度な仕組みを提供した人も、そこで作られた仕組みを使ってビジネスを作った人も、双方にお金持ちが生まれているという事実だけは見逃せないポイントだと思います。
それは、誰かを幸せにしたからこその事実なのです。この高度化した現代において、たくさんの人を幸せにできる数少ない手段の一つが、プログラミングであるとも言えます。
個人的に、高度なプログラムを作る人は尊敬していますが、高度なプログラムではなかったとしても「人を幸せにした数が多い人」の方が、その手があったのか!と嫉妬します。
そこには、誰も真似できないほどの特殊な技術はありません。その代わり、その人だからこそ実現したアイデアや努力が必ずあります。僕も、そういうことを仕事にしたくてWebの世界に転職してきました。
もし、プログラムを勉強するのに、単純に情報を取り扱う方法としてしか見れないと、退屈でつまらないものに見えてしまうこともあるでしょう。僕が学校の授業でプログラミングを教えることに賛成でないのは、「情報処理」という視点でしかプログラミングを教えられないのではないか? と懸念してしまうからです。それこそ、「Webプログラミングで実現できた世界は楽しいものだ」ということをちゃんと理解している人でなければ、教えても無意味だとさえ思います。
ぜひ、この記事をここまで読んでくださった方は、プログラミング言語のことを、人を幸せにする手段として学んでみてください。
「Webだったら何ができるかな」
「今のWebブラウザでは、こういうことができるから、それを実現する記述やこうだな」
「iPhoneアプリだったらこういう機能が使えるなら、どう表現したら使いやすいものができるかな?」と。
そういう視点で、ぜひ、技術書を読んでみていただけると、少しでも楽しく勉強できるのではないでしょうか。
from Niels Heidenreich
ただ写経するだけではあまり意味がありません
よく、プログラミングの勉強は、他人の作ったもの写経やコピーから始めるのがいいと言われますが、それもただソースコードを実装として写経するのではなく、それによって何を実現しているのか? なぜ、その機能が付いているのか? ということを噛み締めながら写経してみると、身に付くほも速いと思います。
そのようなことを学べばこそ、あなたなりのオリジナリティが見つかることでしょう。
それは技術が優れていることもあれば、実装されたものが使いやすかったり、気が効いていて巧いなぁ、と思うこともあります。そのどちらも価値が認められるのが、Webの面白さと言えるでしょう。
■関連の外部リンク