「プログラミングを学んでいるけど、途中で行き詰まってしまった」
「エラーコードが出ているけど、直し方が分からない」
「もうどこが分からないかも分からない!」
プログラミング学習を始めたての皆さんは、上記のような悩みを抱えた経験はありませんか?プログラミングは座学だけでなく実験を通して身につけるものでもあるので、今経験したことがなくても、いつかはこのような課題に直面するはずです。
では、そうなったら具体的にどうやって解決すればいいのでしょうか?ありがちな事例と解決策を交えて解説していきます。
記事末尾に外部リンクを記載していますので、そちらも併せてご覧ください。
1『参考書の内容が理解できない』 ⇒ 『一旦参考書から離れ、初心者向けの解説サイトを参考にする』
勉強に参考書を利用している場合、ある程度内容が難しくなった段階で行き詰まることがよくあります。
これは仮にプログラミング始めたての超初心者向けの書籍でも起こりうることです。というのも、初心者や上級者とは世間一般的にいう習熟度のことで、読者個人のレベルに合わせて書かれているわけではないからです。
そのため、参考書での勉強で行き詰まってしまった場合は、参考書は一旦キープして、ネット上の文献にあたるのがおすすめです。
解説サイトを参考にするメリットには以下が挙げられます。
- 自分に合った内容の解説が見つけられる
- サイト内検索、ページ内検索ができる
- 分からない単語が出たときに、すぐにWeb検索して解決できる
上記のうち、とくに「自分に合った内容の解説が見つけられる」ことは大きなメリットです。
ネット上にはそれぞれの著者が書いた多数の文献があるため、一冊の本を読むよりも3、4個の解説サイトを見たほうが効率的に学びを進められる可能性が高くなります。
また、分からない単語が出たときも、サイト内検索やページ内検索を利用すればリサーチに便利ですし、そのサイトに情報がなければWebで検索して答えを得ることができます。
ソースコードや練習問題が豊富に掲載されているサイトを選んで利用すれば、またわからないのループに陥るリスクを減らせるでしょう。
ある程度ネットでの勉強が進んでから改めて参考書を読み直せば、意外なほどすらすらと読み下せるのではないでしょうか。
2『エラーが出たが直し方が分からない』 ⇒ 『記述を一から見直す』
「プログラムを書いて実行したが(または実行手前のデバッグで)エラーが出た。けれど直し方が分からない!」というのもよくある事例です。
これの対応策はシンプルです。記述を一から見直し、エラーの位置と理由を特定することです。
例として、以下のソースコードを見てください。関数を呼び出して「Hello World」という文章を表示するだけの、シンプルなプログラムです。C#で記述したプログラムですが、これを実際にコピペしてコンパイルを試みると、コンパイルエラーになることがわかります。
static void Main(string[] args)
{
ErrorFunction("Hello World");
}
public void ErrorFunction(char c)
{
Console.WriteLine(c);
return;
}
原因は、「引数の型が異なっていること」です。
「Hello World」という文章を表示するのが本来意図した動作なのであれば、「ErrorFunction(char c)」の部分を「ErrorFunction(string c)」といったふうに書き換えるのが正しい対応になります。
しかしコマンドライン上では、Main文とErrorFunction関数部の両方でエラーが出るため、どちらを修正すればいいのか分からなくなってしまいます。
こういったエラーに直面したときに有効な対応が、「記述を一から見直す」なのです。
言語や記述の仕方によって例外はありますが、プログラミング言語は基本的に一行単位で命令を記述するので、先頭から順に記述を追っていけば間違いのある箇所を発見できます。
「エラーの位置と原因を特定」
↓
「最適な変更の選定」
↓
「変更の適用」
上記のように、順を追って考えていくことで、むしろ短時間でエラーを解消することができるようになるのです。
数千行単位の大規模なプログラムでは有効な方法ではない場合もありますが、初心者のプログラムでは十分有効な対策になるでしょう。
- 『目的の結果が得られない』 ⇒ 『フローチャート図を書いて整理する』
以下のソースコードを見てください。生まれた月を入力すると、上期生まれか下期生まれかを表示するサンプルです(C#で記述したプログラムです)。
static void Main(string[] args)
{
int i;
Console.Write("生まれた月を入力: ");
i = int.Parse(Console.ReadLine());
WrongResultFunction(i);
}
public static void WrongResultFunction(int i)
{
string season = "未設定";
if (i <= 6)
{
season = "上期";
}
else if (i > 6)
{
season = "下期";
}
Console.WriteLine("\nあなたは{0}生まれ", season);
return;
}
これをコンパイルして実行すると、エラーこそ出ないものの、0を入力すると上期、14を入力すると下期など、「間違った結果が得られてしまう」のです。
これは実際に14などの標本として最適な数値を入力しないと分からないため、プログラミング中に気付くことは非常に難しいです。しかも一つのミスを潰したとしても、それが最後のものとは限りません。
プログラムの文法的な間違いによってプログラムが実行不可能になることを「エラー」と呼ぶのに対し、こういったプログラムの瑕疵によって間違った結果が生まれてしまうことを「バグ」といいます。
バグは発見すること自体が困難なため、エラー以上に厄介な存在といえます。プログラムのバグ発生を未然に防ぐためにも、設計段階で「フローチャート図」を描くことを覚えましょう[1]。
フローチャートの記法にならって、上記のプログラムを図示すると、以下のようになります。
このように図を描いて視覚的にわかりやすく整理しておくことで、「どこで、どんな場合分けをするべきか」「エラー扱いするのはどんなときか」など、プログラミング前に必要な情報を得やすくなるのです。
上図は図表作成Webサービスの一つである「diagrams.net[2]」を使用して作成しましたが、手書きでもいいので図を描く習慣をつけるようにしましょう。
フローチャートはプログラミング以外にも、イベントの運営や店舗営業など、いろいろな場所で使われる方式であるため、覚えて損はない知識と言えます。
今回はプログラミング初心者の課題解決方法について解説しました。プログラミングに限らず、あらゆる分野において勉強には失敗と挫折がつきものです。本記事がそんな皆さんの悩みをプラスに変える、学習の一助になれば幸いです。
参照
[1] フローチャート(フロー図)の書き方と記号の使い方。無料のフローチャート作成ツールも紹介|ferret
[2] Diagram Software and Flowchart Maker
[3] 総合学習塾ʻOhana