【入門】プログラミング初心者にこそアプリ開発をお勧めする理由3つ

eye catch

突然ですが、みなさんこのような経験をしたことはありませんか??

プログラミングについて勉強したいけど何をしたら良いか分からない、、

一旦入門書を読んでみたものの、次に繋がらない、、、

こうした人にぜひお勧めしたいのが、アプリ開発を通じてプログラミングを学ぶということです。

筆者自身も同じ悩みを長年持ち続け、アプリ開発を通じてプログラミングを学ぶことがこうした悩みの解決策になると考えています。

理由は次の3つです。

  1. 本当に使える知識が身につくから
  2. 次に繋がる経験ができるから
  3. 実績ができてあなたの資産になるから

アプリ開発を通じて得られる知識は”本当に使える知識”だから

プログラミングをまず学習しようとすると、入門書を読んだり、入門書に書かれているコードで軽く動作を確認したり、プログラミングスクールに通って課題を解きながら学習したり、プログラミングが学習できるWebサービスなどで学習したりする方が多いのではないでしょうか??

こうした方法はもちろん体系的にプログラミングを学ぶことができて良いと思いますが、致命的な落とし穴があります。

それは、学ぶことが目的となっており、学んだ内容が具体的にどこで利用されるのかイメージがつかないことです。

開発者たちはみなアプリ開発を通じて学習している

例えば、JavaScript でif分岐について入門書で学んだとしましょう。おそらく入門書にこのように記載されているはずです。

JavaScript
if(条件式) {
 条件式に当てはまる場合
} else {
 条件式に当てはまらない場合
}

ifを利用しないプログラミングなどあり得ません。その為、if分岐の知識は絶対に学習する必要があります。

しかし、if分岐だけ学んでも「いつ」「何の為に」使うのかイメージがつかないのです。無機質に知識をつけたところで実際の現場では役に立ちません。結局はif分岐がないと困ってしまう状況になってはじめて本当のif分岐の使い方を学ぶことができるのです。

現場で働くとわかりますが、アプリ開発は分からないことや解消できないエラーが発生して、それを調べながらトライアンドエラーで解消すること、の繰り返しです。そうした「必要」に応じて学習し次に活かすことでしか、本当の意味で理解したとは言えないと考えています。

アプリ開発はエラーの連続

特に入門書などには、「正しいコード」しか記載されていない為、動作確認中にエラーは発生しません。また、エラーが発生した時にどのように対応するべきなのかについて触れられている入門書はほとんどありません。

ですが、現実のアプリ開発はエラーの連続です。エラーを解消する力が無いと、アプリ開発はできません。そしてその力は実際に経験したエラーの数に比例していきます。その為、入門書などで学習するだけではエラー解消の力が全く身に付かず、エラーが出た瞬間に頭がフリーズするのです。

実際の現場でのアプリ開発の流れのイメージ
  1. 設計書に合わせてコーディングする。←入門書で解説している内容
  2. シンタックスエラー(構文エラー)が発生する。
  3. エラー内容をネットで調べる。
  4. シンタックスエラーを解消する。
  5. アプリを起動して動作確認をする。
  6. ランタイムエラー(実行時エラー)が発生する。
  7. ランタイムエラーをネットで調べる。
  8. ネットの記事通りに修正してエラーを解消する。
  9. 動作に不具合(エラーにはならないが想定外の動作をする)が発生する。
  10. 不具合が発生するタイミング周辺でデバッグ(コードを1行づつ確認しておかしなところがないか検証すること)を行う。
  11. 原因を特定して、不具合を解消する。
  12. コーディング完了!!

上のイメージを見ると明らかだと思いますが、入門書などで得られる知識は実際のコーディングで必要となる工程のほんの一部であり、入門書だけよんでも実際にアプリが作れないのは当然なのです。

アプリ開発を通じて学ぶことのできる知識=実際に現場で使える知識であるのはこうした理由によります。

[参考] エラーの用語解説

エラーには大きく次の3種類があります。エラーの種類について学ぶことで具体的なコーディングの流れがイメージできると思うので、ここではその内容を説明します。

  1. シンタックスエラー(構文エラー)
  2. ランタイムエラー(実行時エラー)
  3. システムで検知できないエラー(以降、「不具合」と記載)

シンタックスエラー(構文エラー)とは?

シンタックスエラー(構文エラー)は一言で言うと、アプリを動かす前に分かるエラーのことです。エディタ(コーディングするためのアプリ)では、赤字で表示され、エラーの内容や直し方まで表示されることが多いので、一番わかりやすく直しやすいエラーであると言えます。

例えば、次のようなコードを書いたとしましょう。

JavaScript
function square(number) {
 return number * numbr;
}

このように書くと、numbrに対して赤字が表示されて、「numbrという変数は存在しません。numberではないですか?」とエラーが通知されます。これを受けてコードを修正する事でエラーが解消されます。

ランタイムエラー(実行時エラー)とは?

ランタイムエラーとは、一言で言うとアプリを動かした後でわかるエラーのことです。先程のシンタックスエラーとは異なり、実際に動かしてみないとエラー内容が分からず、またエラーの原因となるコードがエラーの出た箇所から離れていることが多く、原因を特定して修正するまでに時間がかかります。

例えば、次のようなコードを考えてみてください。

JavaScript
function showHeight(object) {
 console.log(object.height);
}

var car = undefined;
function(car);

上記を実行すると、「undefinedからheightが呼び出されました」というエラーが発生します。

先程のシンタックスエラーと比較してわかりづらいですよね?ランタイムエラーがシンタックスエラーと比較して解消が難しいのはこういった内容が一見よく分からないエラーが出ることが多いからです。

エラーの内容をネットで調べると、どうやら変数carにheightを設定していないのにheightを呼び出していたことに問題があったようだとわかります。

今度はコードを次のように修正します。

JavaScript
function showHeight(object) {
 console.log(object.height);
}

var car = {
 height: 230;
};

function(car);

そうしてもう一度動かしてみて、エラーが出なければ、ランタイムエラーが解消されたことが確認できます。

このように書くと、エラーの解消は簡単に見えるかもしれませんが、ランタイムエラーは1つ解消するともう1つ追加で発生する可能性があり、一筋縄ではいかないことが多いです。

そしてエラーが出ないコードを書く為にはまずエラーが出るコードがどんなものか、その原因が何かを経験して学ぶ必要があるのです。

不具合(エラーにならないけど発生する動作不良)とは?

シンタックスエラーとランタイムエラーを直すと、プログラムを動かしてもエラーはでなくなります。ですが、これでコーディングが終わりかというと全くそんなことはありません。最後に設計書と差分がないかを確認する作業があるのです。

例えば、数値を受け取ると消費税込み価格を算出するプログラムを考えてみましょう。

JavaScript
function calculateTax(price) {
 var taxRate = 0.05;
 return price * (1 + taxRate);
}
var price = calculateTax(100);
// 105と表示される
console.log(price);

プログラムを動かすとシンタックスエラーもランタイムエラーもなく動作します。だから、このプログラムには問題が無いかというとそういうわけにはいかないのです。

ここでは、100円の商品の消費税込み価格が105円と算出するプログラムとなっています。ですが、現在消費税は10%ですから、100円の商品の消費税込み価格は110円ですよね?つまり、ここではtaxRateが間違っているということです。

不具合を見つけて修正するのはとても大変です。なぜなら、エラーが発生した時とはことなり、どこがわるいのかというヒントがないからです。そのため不具合を直す方法は様々ですが、不具合の起きている箇所から原因が離れれば離れるほど、その修正は困難になります。こうした経験を踏まえて、例えば消費税などの変わることのある固定値は別のファイルに書いておいてプログラムからはその値をいちいち取得する、など工夫をしていくようになるのです。

アプリ開発を通じて得られる知識は次につながる知識だから

アプリ開発を通じて学ぶことのできる知識と聞くと次のようなイメージを持つ人もいるかもしれません。

アプリ開発を通じて得られる知識=そのアプリでしか役に立たない知識では?

いろんなアプリをこれから作っていく中で汎用的な知識を身に着けたいのに、そうした局所的な知識を身に着けることは本当に意味があるのか?

そうした質問への私の回答はこうです。

逆に聞きますが、汎用的な知識を身に着けたところでアプリ開発がいきなりできると思いますか?アプリ開発に必要な知識は逆にどこで身に着けられるのでしょうか?

入門書やプログラミングスクールで学ぶことのできる知識と実際のアプリ開発で必要となる知識の関係は次のイメージです。

つまり、入門書やプログラミングスクールで学ぶことのできる知識の多くはアプリ開発で必要な知識だが、それだけではアプリ開発で必要な知識がすべて学習できないのです

ここでさらに、他のアプリ開発を通じて学ぶことができる知識を合わせると次のようなイメージになります。

この図を読み取ると次のことが分かると思います。

  • 「入門書やプログラミングスクールで学ぶことのできる知識」「アプリ開発を通じて身につく知識」「あなたがアプリ開発のために身に着けたい知識」に含まれている
  • 「入門書やプログラミングスクールで学ぶことのできる知識」に含まれていない「あなたがアプリ開発のために身に着けたい知識」「あなたがアプリ開発のために身に着けたい知識」がカバーしている。

当然、アプリ開発で学ぶことができる知識に他のアプリ開発で不要な知識が含まれていることは確かです。ですが、アプリ開発で得られる知識が、他のアプリ開発で活きる場合も多分にあるのです。

“永遠の入門者”となるプログラミング学習者達

本屋の店頭に並ぶプログラミング学習の書籍はほとんどといってよいほど初心者向けです。入門書を読んだ後でどのように学習をしていけばよいのか、また、中級者をターゲットとした書籍は入門書からレベルが離れすぎており(要は難しすぎるものが多い)、とても入門書を読んだ程度の読者には理解できません。

そして入門書を読んだだけの“永遠の入門者”が誕生するわけですが、どうしたら次のステップに進むことができるのでしょうか?その私の回答が“実際にアプリ開発をしてみること”です。理由は上記している通りですが、あなたが本当に作りたいアプリを開発する際に役に立つ知識を身に着け、中級者(アプリ開発が実際にできるエンジニア)への架け橋になるからです。

開発するアプリはどんなものでもよいと思います。が、初めはできるだけ簡単なものが良いと思います。

例えば、「じゃんけんを実施するプログラム」を考えてみたとしましょう。

「こんなプログラムを考えたところで、、、」そう思った人は立ち止まって考えてくみてださい。こんな簡単なアプリでも次のアプリの仕様をどのようにするかによって開発難度や学ぶことのできる知識が大きく異なることに気付いてほしいです。例えば、このアプリの仕様を次のようにしたとしましょう。

アプリの仕様学べる内容
アプリはオンラインでユーザ対ユーザで実施する。オンラインアプリケーションの作り方
対戦結果はすべて保存する。DBを利用したアプリケーションの作り方
ユーザは会員登録を必須とする。会員登録制のアプリケーションの作り方
じゃんけんの勝率などからランキングを毎月発表するランキング算出の方法
(月単位で動くシステム作成の方法)
対戦するユーザが見つからない時はプログラムが相手をする。じゃんけんの戦略をもつボットの作り方
対戦者同士のチャット機能を作成する。チャット機能のあるアプリケーションの作り方

いかがでしょうか?「こんなプログラムを考えたところで、、、」と考えていた方も、アプリケーションの仕様によってはこんなに学ぶことのできる知識が多いとは想像していなかったのではないでしょうか?

また、この「じゃんけん」の部分だけを例えば「将棋」や「囲碁」などに置き換えれば、様々なサービスが作成できるような気がしませんか??アプリケーションをとりあえず作ってみることをお勧めするのは、このように皆さんが思っているより汎用的な知識が身につくからです。

もちろんいきなり上のような仕様のアプリケーションを開発すると大変すぎて心が折れてしまいます。ですが、アプリケーション開発には「エンハンスメント」という考え方があるのです。

エンハンスメントとは??

「エンハンスメント」とは、アプリの機能を追加実装することです。

たとえば、Lineでメッセージしか初めに相手に送信できなかったのに、画像やスタンプを送信できるようになることもエンハンスメントに当たります。

つまり、初めにとても簡単なアプリから初めてだんだん機能を追加していくということでも全く問題ないということです。

それでも、アプリ開発をすることが初めての人にとってはこれはハードルが高いかもしれません。そんな方に向けて私は本サイトを開設し、皆さんのプログラミング学習の助けとなればよいなと考えています。

アプリ開発はあなたの実績となり、あなたの価値を高める最高のパートナー

突然ですが、あなたがアプリ開発会社の採用面接担当だと仮定してください。そして次の人が面接に来たらどちらを採用するでしょうか?

Aさん
Aさん

プログラミングにまえから興味があって、プログラミングスクールに通っており、JavaやPHP、他にはJavaScriptの学習をしていました。

現場での経験はありませんが、体系的に学習を積んできたので、御社でも即戦力として活躍することができると考えております。

Bさん
Bさん

現場での経験はありませんが、これまでいくつかアプリケーションの開発を通じて学習をしてきました。

私がこれまで作成してきたアプリケーションをGitHubに公開しておりますので、御社のニーズと合うかご確認いただいた上で検討いただけると幸いでございます。

個人的な観点から言うと、Bさんのほうが一般的には好印象ではないかと思います。(もちろん、ひとによるとは思いますが)

なぜなら、Bさんは実際にアプリケーション開発の経験があり、その実績を実際に確認することができるからです。なにも具体的な実績がないAさんよりはBさんのほうが、採用するうえでリスクが低いと感じられると思います。

GitHubとは?

様々なアプリケーションのコード等を保存しておくためのウェブサービスのことで、ここで作成したアプリを公開することで、他の人から自分の作成したアプリケーションを閲覧することができる。

また、現場ではGitHubを通じてコードレビューなど、多人数開発で必要なマネジメントを実施することが多く、必須の知識であることが多い。

あなたの作ったアプリは、あなたの能力の証明です。

口でいくら「どんな知識がある」「どんな経験がある」といったところで、実績にはかなわないのです。他の人に能力を見せることが目的ではないかもしれませんが、ないよりはあったほうが必ず良いです。

なぜなら、GitHub上に挙げられたアプリケーションがあなたの実績となるばかりではなく、他の人があなたのコードを参考にアプリケーションを作成する可能性もあるからです。つまり、他の人の手助けになる可能性もあるということです。

さらに、あなたの作成したアプリケーションをみて、あなたに直接「こうしたアプリ開発をしてほしい」であるとか、「ぜひ弊社で働いてくれないか」などあなたを必要とする人たちから声がかかる可能性もあるからです。

このようなことは、入門書を読んだり、プログラミングスクールに通うだけでは絶対に得られません。

あなたの作成したアプリケーションが資産となり、あなたの価値を世界に発信してくれるのです。


いかがでしょうか?アプリケーション開発を通じてプログラミングを学習することで様々なメリットがあることが伝わったでしょうか?

このサイトでは、アプリケーション開発をメインに据えた、プログラミング学習の支援を目的としており、皆さんの助けとなると嬉しいと考えております。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です