見出し画像

プログラミング学習とアプリケーション開発の間にある高い壁を乗り越える方法

この記事の対象者

- プログラミングを学習しているが、ゼロからコードを書こうとすると何をしたらいいか分からない人
- プログラミング初心者で頭の中にあるアイデアを形にすることが難しいと感じている人

高い壁の正体

プログラムを書けるようになることと、アプリケーションを作れるようになることは別です。プログラムが書けるということは、アプリケーション開発においては単なる入り口に過ぎません。いえ、むしろ「全く別の能力」と考えた方が良いかもしれません。

では、アプリケーションを開発するにはどんな能力が必要なのでしょうか?

この記事では、プログラミング学習とアプリケーション開発の間にある高い壁の存在と、それを乗り越える方法について考えてみたいと思います。

アプリケーションを作れるようになるには?

どんなアプリケーションを作るとしても、絶対に一番最初に取り組むべき課題があります。それはなんでしょうか?

それは、これから作ろうとするアプリケーションの動作を一つ一つ小さなステップに分解して言語化していくという作業です。自分の言葉で説明できないシステム、言語化できないシステムは作れません。

作りたいものを言語化する能力

アプリケーションの動作手順を小さなステップに分解し言語化するには、コンピュータに出来ることと、コンピュータにはできないことの両方を正確に把握していなければなりません。それを知らない状態では、どんな情報をコンピュータに与えれば良いのかが分からないからです。

コンピュータに出来ることは「データの入力・出力・計算(演算)・記憶」くらいのもの

コンピュータは「信じられないくらい高速で正確」です。単純な計算速度や記憶の正確さにおいては人類の比ではありません。市販されている数千円程度のコンピュータですら、それに勝てる人間はいないでしょう。

コンピュータは万能の機械のように思えます。しかし、コンピュータが実際にやれることは非常にシンプルなことだけです。コンピュータは、こちらが一文字でも指示を間違えたり指示する順番をちょっと間違えただけで全く動かなくなります。

コンピュータは曖昧な指示は一切受け付けてくれません。

あらゆることをデジタルで表現できるということの意味

コンピュータは高速にデジタルデータを処理できます。デジタルデータから絵を生成してディスプレイに表示したり、デジタルデータとして保存された動画や音楽を再生したりといったことは瞬時にやってのけます。

プログラマの役割

コンピュータに指示をするためには、これからコンピュータにやってもらいたい作業について我々自身が十分に知っている必要があります。

我々プログラマの役割は、コンピュータが実行可能な形式で「データとそのデータをどう処理するかという指示」を正確にコンピュターに伝えることです。

オセロゲームを作ることを例にとって考えてみる

オセロゲームのルールをコンピュータは知りません。

注:驚かないでください!コンピュータは人間がいずれ死んでしまうことも、トイレットペーパーが全国のスーパーからなくなってしまっていることも知りません!

あなたはオセロを一度もやったことがない・見たこともないという人に、オセロのルールを説明できますか?

それも、実際にオセロの実物を触らせたり見せたりすることなく、言葉(プログラミング)だけで説明するのです!

オセロゲームの要素を列挙する

オセロのルールを説明するためには、ルールを言語化できなければ話になりません。ちょっと試しにオセロのルールを列挙してみましょう。皆さんも一緒に考えてみてください。

- 8 * 8マスの正方形の盤を用意する
- プレーヤーを2名用意する
- 先行、後攻を決める
- 先行のプレーヤーは白の石を使う
- 後攻のプレーヤーは黒の石を使う
- 各プレーヤーは盤面に交互に白、黒の石を一枚ずつ置いていく
- 石を置く場所がない場合は次のプレーヤーに手番が移る
- 白に挟まれた石は白に変わる
- 黒に挟まれた石は黒に変わる
- 石を置ける場所がなくなったらゲーム終了
- ゲームが終了したら盤に並べられている石を数えて、白の石が多ければ白の勝ち、黒の石が多ければ黒の勝ちとなる

さあ、説明はこれで十分でしょうか?

足りない説明や、分かりにくい説明はありませんか?このルール説明だけで、知らない人にオセロをやってもらうことは出来るでしょうか?

上記の説明では、おそらく半分も説明できていないと思います。

- 石を重ねてはいけないと書いていない
- 石をマスの枠内に置かなければいけないと書いていない
- 石が置ける場所についての説明がない
- 白い石に挟まれるとはどういう状態かが分からない
... etc 

データ処理のルールを言語化する難しさ

結論を言います。ルールを言語化する難しさが、アプリケーション開発の難しさです。

コンピュータは、あなたの思考を先回りしたり、あなたの言いたいことを「こういう意味かな?」と想像して補ってくれることはありません。全てを1から説明しなければいけません。

コンピュータは説明してないことは絶対にやってくれません。そして、やってはいけないこともやって欲しいことと同じように丁寧に説明する必要があります。

次回予告

実際にどうやってオセロゲームを作るかを少しずつ解説していきます!


この記事が気に入ったらサポートをしてみませんか?