2022年7月9日土曜日

プログラミングスキル向上のために

 プログラミングスキル向上のために、僕が考えていることを書いておきます。プログラミング言語は限定しませんが、オブジェクト指向型言語(C++, Java, Pythonなど)を想定しています。僕自身、プログラミングは苦手意識がありました。周りでプログラミングが上手な人を見て、「センスがないとプログラミングはできないのかな?」と考えたことがあります。けれども今では、下に書いたようなコツを掴めば、誰でも上達できると考えています。

[対象者]

・プログラミングに苦手意識がある

・プログラミングを勉強しているが、成長が感じられない

[プログラミングスキル向上のために]

1. 基本文法を身につける(構造化プログラミング:順次、選択、繰り返し)

最低限の基本文法は身につけないとプログラミングが始まりません。構造化プログラミングという、順次(上から下の順序で実行)、選択(if, switch文)、繰り返し(for, while文)の3要素を身につけましょう。これ以外の細かな文法は後からで十分です。薄めの参考書を利用して、例題をやってみてここまでの知識を身につけましょう。英語で言うと、基本的な単語、文法を覚えるのと同じです。

2. 上から下へのプログラムを書いてみる

構造化プログラミングを身につけたら、とにかく自分の力で、汚いプログラミングで良いので、プログラムを作ってみましょう。構造化プログラミングを使えば、基本的にどのようなプログラミングも書くことができます。冗長になったり、同じことが書いてあってもよいので、自分でプログラムを作れるようになりましょう。英語で言うと、英語で話かけられたときに、なんとか苦労しながら自分の言葉で返して、意味が通じた時の感覚です。この段階がクリアできれば、プログラムはどんどん書けるようになります。

3. プログラムをまとめる(関数化:ルールを見つける)

2でプログラムがなんとか書けるようになったら、それを機能的にまとめていきます。これは関数化すると良いです。関数化するときには、引数と戻り値を明確に示さなければなりません。プログラムを関数化するときには、ある種のルールを見つけることになります。例えば、同じ処理を何度もしている時、ループや引数を変えることでまとめることができます。同じ処理を関数化して、出来るだけプログラムをスリムにしていきましょう。関数化することができれば、後から再利用もできて便利です。英語で言うと、あいさつやいつも使う言い回しをまとめておくことと同じです。

プログラミング環境は、pythonでいうと1~3はJupyter Notebookにメモ的に書いて、実行を確認していくような形です。

4. プログラムをさらにまとめる(クラス化:システム的に処理できるように)

3で関数化してスリムになったプログラム同士を、ある目的のためにシステム化していきましょう。例えば、サイコロを指定回数投げた時に、指定された目の出る確率を実験的に求めると、指定回数、指定する目、各回でなんの目が出るか、今までに出た指定目の回数などいくつかの情報を組み合わせていきます。これらをシステム的にまとめたものがクラスになります。クラスには、複数の関数、インスタンス変数など目的に合わせて組み合わせていきます。システムとして提供できるプログラムとして、クラスを考えていくのが良いと考えています。英語で言うと、作文、論文、プレゼンなどで起承転結のような流れがあり、仮定から結論までの流れのようなものです。個人的には、この4ができるようになると、どのようなプログラミングでも組める気になります。ここまでできたプログラムは再利用できる価値が高いので、githubなどにアップして、自分のリポジトリにしましょう。

プログラミング環境は、4を実施するときは、1~3でJupyter Notebookで書いてきたものを、pythonファイル(.py)に書き換えながらやっていく形です。クラス化をすることで、役割分担が明確になり、プログラムの「型」に当てはめていく作業です。型に当てはめることで、プログラミングがわかりやすくなります。

5. データの扱い:呼び出し、保存ができる

4まででプログラミングの大枠ができるようになると、次はデータの扱いです。プログラミングにおいて、変数の値の保存や、データの取り込みは欠かせないものです。これを行うために、配列、リストなどデータの扱いに慣れておく必要があります。データの構造を考えると、配列構造もどのようにするか考える必要があります。データの更新タイミングも大事なポイントです。データの取り扱いを自由にできると、色々なプログラミングに応用ができます。

その他:Webシステムでのプログラミング

プログラミングというとコンソールでやっていくようなイメージがあり、何となく難しいイメージがあります。Webシステムでプログラムを作っていくと、外部設計と連動するので、実際にどのように動かすかがイメージしやすいです。Webシステムの場合は、データはデータベースと連携してやりとりする場合が多いです。データ構造(モデル)、ビュー(表示、表、グラフ)、コントローラ(プログラミング)のMVC環境で行っていくことで、自然にわかりやすいプログラムが書けるようになります。

以上、僕がプログラミングするときにやっている方法を書きました。プログラミングに苦手意識があった僕も、このような段階を踏んでいくことで、プログラミングに対して苦手意識がなくなり、どのようなプログラミングでもトライできるようになりました。特に、4で紹介した「型に当てはめる」ということで、大規模なプログラムもすっきり作れるようになります。中々細部まで説明が難しいですが、授業などで話す機会があれば触れていきます。頑張って下さい。