プログラミング学習で行き詰まったときの対処法:二つの事例と助言
はじめに
プログラミングを始めて約一年が過ぎました。今では、約2万行規模のソフトウェアなら作成できるようになりました。もう経験者(自称)を名乗っても許されるでしょう。
その経験者(自称)である私が、これまでに培った経験から、プログラミング学習に行き詰まってしまった諸兄姉に、助言をしたいと思います。
その助言とは、次の二つです。
助言その1
・ソースコードが書けないときは、プログラミング言語を変更する
助言その2
・一からプログラムを作れない(何から手をつけていいのか分からない)ときは、目的(コンピュータにやらせたいこと)についての知識を高める
今回の記事は、これらの助言について詳しく説明したものです。
対象は、趣味としてプログラムをしている人
私は、趣味としてプログラミングをしています。同様に、本記事の読者も趣味プログラマを想定しています。職業プログラマではありません。
なぜなら、趣味のお菓子作りにおける教訓が、製菓工場のライン工にとっては意味がないように、私の助言は、職業プログラマには無意味だと考えるからです。
コード化と設計
一口にプログラミングと言っても、それに含まれる作業は広範囲に及びます。以降の説明を分かりやすくするために、プログラミングの作業をコード化と設計の二つに分けることにします。
コード化
コード化は、具体的な課題からソースコードを書く作業です。データ構造は、予め与えられているか、暗黙の了解事項となっています。
設計
設計は、漠然とした目的から、データ構造とその関係性を考え、それらを用いて(コード化のための)具体的な課題を導く作業です。
ここからは、各助言について説明していきます。説明は、問題、原因、解決策の順に行います。
まずは、「助言その1」についての説明です。
コード化での問題:ソースコードが書けない
問題
頭の中や図上では課題を解けるが、それをソースコードに変換できない。または、変換に大変な労力と時間を要する。
原因
原因は、プログラミング言語との相性が悪いことにあるのかもしれません。
言い換えるなら、プログラマ本人には解決策を導くだけの十分な能力があるのに、その解決策を表現する能力がプログラミング言語に不足していることが原因です。
どのようなプログラミング言語でも、言語の設計者は当人が考えうる最良の表現力を言語に与えています。
しかし、物事の捉え方や考え方は、人それぞれです。言語設計者にとっては直感的で十分なつもりでも、プログラマにとっては回りくどく力不足な場合も当然ありえます。つまり、言語が肌に合わない場合があります。
このような場合は、無理に努力するよりは、さっさと見切りをつけて、他のプログラミング言語を試したほうが良いでしょう。
相性の良い言語を見つけることができれば、驚くほど簡単にソースコードが書けるようになります。多分。
解決策
相性が悪くないプログラミング言語を探す。
代替案
どうしてもプログラミング言語を変更したくない場合は、その言語が誕生した背景(動機)を調べると、少しはマシになるかもしれません。
具体的には、言語設計者が既存言語の何に不満をもって、どう改善したかが書かれた論文等を繙くと良いでしょう。
次は、「助言その2」についての説明です。
設計での問題:自力でプログラムを作ることができない
問題
他人の作ったプログラムの改造ならできるが、独力では一からプログラムを作ることができない。
原因
原因は、「プログラムの目的」が属する分野に関する知識の不足にあります。なお、上述したように、「プログラムの目的」とはコンピュータにやらせたいことを言います。
解決策
勉強をしましょう。目的分野の知識は、プログラミングにおいて最も重要な要素です。
プログラミングは、しょせんは本人ができることをコンピュータに肩代わりさせる手段にすぎません。できないことができるようになる魔法ではありません。
プログラムを一から作れるようになるには、自身で目的を果たせる程度まで知識を高めるしかありません。
解決策の具体例:想像上の友達と楽しくお話しよう
参考までに解決策の具体例を示します。この例では、自身との対話を通して知識の深化を図ります。
まず、自分と同程度の知能を有する友人を思い浮かべます(人生で一人も友人がいなかった場合は、金曜日の自分を思い浮かべてください)。
その友人にプログラムの目的について脳内で説明をします。説明は、曖昧な表現を避け、できるだけ具体的に行います。
例えば、目的が「関東地方の気温の可視化」であれば、
気温の可視化
→アメダスのデータを基に地図を塗り分ける
→アメダスの観測所ごとに地図を小領域に分け、各領域を観測気温に応じた色で塗る
と言うように段階的に説明するのも一つのやり方です。
また、説明の際は、「紐付ける」などと言う雰囲気だけのフワフワした戯言ではなく、「一対一に対応させる」と言った明瞭な表現を心掛けます。
相手が納得すると確信できるようになるまで、脳内説明とその説明に必要な知識の習得とを繰り返します。
次に、相手をコンピュータに置き換えて、プログラミング言語で説明を行います。これで、たたき台が出来上がります。後は、改造と同じ作業をしていけばプログラムが完成するはずです。多分。
それでは、今回の助言が初学者のプログラミング学習の一助となれば幸です。
以上
古往今来得ざれば即ち書き得れば即ち飽くは筆の常也。と云うわけで御座います、この浅ましき乞食めに何卒皆々様のご慈悲をお願い致します。