プログラミング学習のバランス

記事
IT・テクノロジー

プログラミング学習のバランス

プログラムの学習には、プログラミングで利用する道具や道具の使い方を学習する部分と、プログラミングの基本や原理を学習する部分に分ける事ができます。プログラミングの学習にあたっては、そのタイミングとバランスが大切です。上級のソフトウエアエンジニアを目指す場合には、プログラミングの基本や原理は重要です!


プログラミングの道具とは?

プログラミングの道具にあたるものは、プログラミング言語や、プログラムの入力に使うエディタなどの開発用のアプリなどがあります。さらに、よく利用する機能を予めプログラムにしたモジュールやラブラリなども道具になります。

まずは、こうした道具を使いこなせないとプログラミングをする事ができないので、道具の使い方を学習するのはとても重要です。 一通り、道具が使えるようになると、簡単なプログラムを作れるようになります。道具の使い方はそういう意味でプログラム学習の第一歩と言えます。

プログラミングにも設計図は必要!

プログラミング言語を習得して、プログラミングに必要なアプリの使い方を覚えると、一通りプログラムを作成できるようになります。上にも書いた通り、プログラミングをする上でこの部分の学習はとても大切ですし、最初に学習する部分でもあります。当然、多くのプログラミングの入門者はこの部分に時間をかける事になります。多くの「わかりやすい」と言われている教材もこの部分をカバーするものが多くなっています。

実際に、プログラミングの上級者に成長していくには、別の部分の学習が必要になってきます。

それは、プログラミングの「設計図」を作るのに必要な知識を身につける事です。

簡単なプログラムの場合には特に設計図がなくてもプログラムを書くことは可能です。しかし、ある程度の大きなプログラムや、複雑な処理が必要なプログラムの場合には、きちんと設計図を作ってからプログラムを書かないと、問題がたくさん発生したり、作り直しや、手直しが頻繁に発生して、結果的に時間がかかったり、管理が面倒なプログラムになりやすくなります。

わかりやすい例を挙げると、犬小屋程度ならば頭でどの様に作るかイメージして材料を揃えて作る事はそれほど難しくありませんが、本物の家や高層ビルを建てる場合、設計図をきちんと作成して、色々な検証、検討を重ねてから実際の建物を作るという手順になります。さらに、どのような部材を用意して、どの順番で組み立てて行くかもきちんと考えて、指示書(手順書)の様なものを作らないとうまくいきません。 また、組み立ての進み具合に応じて、作業がきちんとできているかの確認などを行なって行く必要もあります。

プログラミングの場合も、どの様な機能をどの様なモジュールに分割して、どの様なインターフェースをどの様に組み合わせて全体の機能を実現するかを細かく検討していく必要がありますし、作成したモジュールやプログラム全体をどの様にテストするかも考える必要があります。

データも、全体でどの様にデータをどこに置いて、どの様にデータの処理を行うかなどの詳細を決める必要があります。

この設計をしっかりと行なう事が、品質の高いプログラムを開発する秘訣と言っても間違いではありません。

実際に、プログラミング言語を駆使してプログラムを書くという仕事は大切ですが、全体の設計がしっかりしていないと問題が少ないプログラムを開発するのが難しくなります。

短期の学習で設計の部分を学ぶのは厳しい!

プログラム全体の設計がとても重要なのは、上で書いた通りですが、現実的にはプログラムの基本や原理といった部分を学習するには時間もかかりますし、学習自体が面白く感じられない場合が多くなります。

では、具体的にプログラムの基本とはどういう事かというと、項目を挙げると

* プログラムを動かすハードウエアの簡単な知識(ネットワークやメモリなどの概念)
* データの持ち方(データ構造などと呼ばれています)
* データの扱い方・処理の仕方(アルゴリズムなどと言われています)
* プログラムのテストのやり方(プログラムの検証方法の基本)
* エラーや例外処理(想定外の状況に対する対応)
* その他(計算量の見積、計算精度の見積もりなど)
のような広い範囲の知識が必要になってきます。大学などでソフトウエア関連の専攻をする場合にはこうした事もカリキュラムに入っているのが普通です。より上級のソフトウエアのエンジニアを目指す場合にはこうした分野の学習も必要になってきます。

いくつかの分野は、実際にプログラムを書きながら身につけることは可能ですが、計算量の見積や計算精度の話などは意図的にその分野の学習をしないと身につけるのが難しくなります。また、データの構造も、実際に自分で詳しいコードを書かないと詳細を理解するのが難しいものもあります。例えば、「リスト構造」などは、最近主流のプログラミング言語(Python や Javascript)では予め標準的なライブラリとして用意されているので、実際にどの様な仕組みでデータを扱うかはなかなか知る機会がありません。C 言語などの場合は、こうしたデータ構造は用意されていないので、自分でゼロからプログラムを書く必要があるため詳細を理解する事ができます。

詳細の仕組みがわかると、リスト構造のデータにアクセスする場合は、単純な配列より手間がかかる(遅くなる)場合があることもよく理解できます。

最初は道具の使い方で良い!
話を本題に戻すと、プログラミング学習のバランスという意味では、間違いなく「道具の使い方」を中心に学習する事がまずは優先事項です! 道具を使えない事には、動くプログラムを書く体験はできません。従って、最低限、一つのプログラミング言語とそれを使って書けるプログラムを積み重ねて、まずは何かを作って動かす事が最初のゴールになります。

これができると、ある程度の規模のプログラムまではなんとかなるものです。

しかし、その上を目指す場合には、プログラミングの「理論」の部分も学習していく必要があります。大きく複雑なプログラムを作るには、全体を通してバランスの取れた、問題の少ないプログラムになるように設計する必要があるからです。

これは、工作で作る模型の家と、本当の家やビルを作る違いのようなものです。家やビルを設計するには、高度な知識を身につけて設計の基礎が必要になるのと同じです。懸命な方はお気づきだと思いますが、実は模型のような家でも、きちんと設計図を作って、部品を細かく決めて、組み立ての手順を検討して作った方が、完成度が高いものができます。

プログラムも同じで、自分でプログラムを設計から行う場合には、まずは設計図(仕様書)を作成してからプログラムを書いた方が当然良いものが作れます。仕事でプログラムを書く場合、最初は仕事の発注元が設計図(仕様書)を用意してプログラムを書く仕事から始めると、この設計図(仕様書)の書き方を学ぶ事ができます。ここから、必要な学習をしながら、ステップアップができると上級エンジニアへの道がひらけます。

まとめ
建物やハードウエアの場合は、設計図(回路図)の様なものがあるのが普通です。 会社などが行う大規模なソフトウエアの場合も、設計図(仕様書)を作成してそれを基にそれぞれのプログラムを書いて行くというのが本来のソフトウエアの開発手順です。

しかし、個人レベルの開発では、フリーランスの場合も含めてきちんとした仕様書がない場合も多いのが現状かと思います。 この大きな理由の一つに、プログラミングの学習がプログラミング言語やプログラミングツールの使い方に特化したものが多く、実際にソフトウエアの設計の基礎の部分をきちんと解説している教材が極端に少ない事があるかと思います。

ソフトウエアの品質は、実はこの最初の基本設計で大きく変わってきます。上級のソフトウエアエンジニアを目指す場合、こうしたプログラミングの「理論」の部分にも広げて行く必要があります。最初は、道具の使い方中心で問題はありませんが、一通りプログラムが書ける様になったら上級への道を視野に入れた学習が必要になります。
サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す