🍽

プログラミング(python)を学ぶためのロードマップ

2024/11/04に公開

このページでは、プログラミング(python)の理論的な事柄として、どのようなものを学ぶ必要があるのかについて概略を記載します。

自分がプログラミング(python)を学ぶうえで必要だと思ったことを、自分の記録のために、まとめました。

その時々で伝えたいことをブログを書くよりも、体系的にまとめて本とする方が好きです。ここに書かれている内容に需要があったら、本を書くかもしれません。

↓以下、本文です。

0. はじめに

プログラミングの学習は、遅延評価勉強法が良いのかもしれない。

私自身、遅延評価勉強法でpythonを学んだ。

遅延評価(ちえんひょうか)とは、プログラミングやコンピュータサイエンスにおいて、値や結果を必要な時まで計算せずに遅らせる技術や考え方のことを指します。 この方法を使うことで、計算資源を節約したり、プログラムのパフォーマンスを向上させたりすることが可能です。

遅延評価勉強法は、興味がでたり、学びたいと思ったことがでたり必要になったときに、その場その場でgoogle検索やChatGPTなどに聞いて答えを探して学んで行く方法である。

ここでは、プログラミング(python)では、どのようなものを学ぶ必要があるのかについて概略を記載していく。

目的

0.1 目的 (Purpose)

プログラミング(python)を通して思考力、技術力、協働力を学ぶ。

  • プログラミングの基本的な概念を習得し、論理的な思考力の基礎を固める
  • プログラミング言語(python)の理解し使えるようになることで、大量のデータを処理したり自動化する技術を知る。
  • 他の人と協働で進めていくための可読性とメンテナンスのためのより良い方法を知る。
具体的な目標と手段

0.2 目標 (Goal/Objective)

ここでは、思考力、技術力、協働力を学ぶための具体的な目標とその手段を明確にする。
思考力、技術力、協働力の観点で分けると、以下のようになる。

  • 論理的な思考力とは、以下の事柄等のことであり、これらを身につける。
  • プログラミング言語(python)の理解とは、以下の事柄等のことであり、これらを身につける
  • 他の人と協働で進めていくために必要な能力とは、以下の事柄等のことであり、これらを身につける。
プログラミング的思考の7つの要素

0.3 プログラミング的思考の7つの要素

各回で目的や目標に合わせた項目を学んでいく。各回の概要を以下の図に示す。

プログラミング的思考の7つの要素は、以下のとおりである。

  1. ​変数と演算​
  2. 制御と構造​
  3. 形式と保存​
  4. 分解と部品​
  5. 網羅と汎用​
  6. 抽象と一般​
  7. 反復と増加

1.pythonの概要とデータの型

1.pythonの概要とデータの型の内容の具体的な内容

1.1 プログラムの実行

  • 関数, 引数, 戻り値などの用語と文法の理解
  • プログラム部分とコメント部分の区別

1.2 データの型と演算

  • オブジェクトにより演算が異なることへの理解
  • メソッドやインデックスアクセスなどの使い方への理解
  • 整数型(int), 浮動小数点数型(float), 複素数型(complex), 真偽値(bool), 文字列(str)への理解

1.3 変数と状態

  • 変数の命名方法
  • オブジェクトの確認とIDの確認
  • 同値性と同一性の違い

1週目に出てくる主な関数やキーワードとその簡単な説明

# キーワード
False : 偽を意味するブール値。論理的に偽であることを示す
True : 真を意味するブール値。論理的に真であることを示す
None : 特別なキーワードで、値が存在しないことを示す
and :  論理演算子で、両方の条件が真である場合にのみ真を返す
or : 論理演算子で、いずれかの条件が真であれば真を返す
is : 比較演算子で、オブジェクトが同一であるかどうかを確認
not : 論理演算子で、真偽を反転して、真を偽に、偽を真に変えて返す
in : 要素が含まれているかどうかを確認
# 組み込み関数
print() : 出力
int(): 整数型への変換
float(): 浮動小数点型への変換
str(): 文字列型への変換
len():  長さを取得
id(): オブジェクトのIDを確認
type(): オブジェクトの型の確認

2 制御構造

2 制御構造の内容の具体的な内容

2.1 条件分岐(if, elif, else)

  • 基本的な書き方の理解
  • 複数のifを使ったときの事例を学ぶ
  • 可読性と冗長なコードをさける具体例を学ぶ

2.2 ループ処理(for, while)

  • 基本の書き方(for とwhile)
  • BreakとContinueと組み合わせての使用
  • ループ中の変数などの書き方

2.3 アルゴリズムとロジック(簡単な問題解決のためのロジック設計)

  • フローチャートを書く
  • 例外を考える
  • 計算量を考える

2週目に出てくる主な関数やキーワードとその簡単な説明

# キーワード
if : 条件が真(True)の場合に特定のコードを実行するための条件分岐
elif : 先に定義したif文がFalseの場合に、他の条件を確認するために使用
else : ifやelifの条件がすべてFalseであった場合に、最後に実行されるコード
for : 繰り返し処理(ループ)を行うための構文で、指定した回数または範囲で処理を繰り返す
while : 条件が真である限り、処理を繰り返すループ構文です。条件がFalseになるとループを終了する
# 組み込み関数
input() : ユーザーから入力を受け取るための関数。入力は常に文字列として返される。
range() : 整数の範囲を生成するための関数。指定した範囲の数値列を作成し、ループなどで使用される

3 データ構造

3 データ構造の内容の具体的な内容

3.1 配列と組

  • 配列と組の基本操作
  • 配列と組の発展と他のものとの組み合わせ
  • 配列の書き方や計算量の工夫

3.2 集合と辞書

  • 集合と辞書の基礎
  • 集合と辞書を他のものと組み合わせたり、他のものから集合や辞書への変換
  • 書き方と工夫

3.3 要件定義

  • 目的とあう正確性
  • 汎用性や解釈性
  • 時間計算量と空間計算量を考えてコードを書く

3週目に出てくる主な関数やキーワード

# キーワード
del : オブジェクトを削除するためのキーワード。特定の変数、リストの要素、辞書のキーなどを削除する際に使用
# 組み込み関数
list() : 複数の要素を順序付きで保持できる可変長のデータ構造(リスト)を作成するための関数
dict() : キーと値のペアを持つ辞書型データを作成するための関数
set() : 重複しない要素の集まりを保持する集合型データを作成するための関数

4 関数とモジュール

4 関数とモジュールの内容の具体的な内容

4.1 関数の定義と使用

  • 関数の基礎(def lambdaなどの基本)
  • 関数の発展(クロージャ, ジェネレーター, デコレータ)
  • 関数の書き方(関数の命名や説明文書)

4.2 モジュールとパッケージ

  • 標準ライブラリーの呼び出し方
  • 呼び出した後の使い方
  • 呼び出した時の書き方や順番

4.3 外部モジュールとパッケージ

  • pipでインストールする方法
  • 外部ライブラリーの使用における注意事項
  • 自分で作成したモジュールの呼び出し方

4週目に出てくる主な関数やキーワード

# キーワード
lambda : 無名関数(匿名関数)を作成するために使用するキーワード。一行で簡単な関数を定義する際に便利
def : 関数を定義するために使用するキーワード
return : 関数から値を返すために使用するキーワード
import : モジュールやライブラリをプログラムに読み込むために使用するキーワード
as : モジュールやライブラリを別名で使用する際に使用するキーワード
from : モジュールから特定の部分をインポートするために使用するキーワード
global :  変数をグローバルスコープで使用することを宣言するためのキーワード。関数内でグローバル変数を変更する際に使用
nonlocal : 外部のローカルスコープ(関数の中の関数など)にある変数を再割り当て可能にするためのキーワード
# 組み込み関数
help() : Pythonの組み込み関数で、指定したオブジェクトや関数のドキュメントを表示する。
# Python 環境設定
pip : Pythonのパッケージ管理ツールで、外部ライブラリをインストールするために使う
PYTHONPATH :  Pythonがモジュールを検索する際に参照するディレクトリのパスを指定する環境変数

5 ファイルの作成とエラー処理

5 ファイルの作成とエラー処理の具体的な内容

5.1 ファイルの読み書き

  • ファイルの読み書き(with open())
  • ファイルの読み書き(追記や大きなファイルへの対応)
  • ハードコードとソフトコードの書き方

5.2 エラーハンドリング(try-except文、例外処理の基礎)

  • try-except文の基本
  • try-except文の発展的な書き方
  • ロギングとエラー情報の追跡

5.3 デバッグ(簡単なデバッグの手法)

  • デバッグの方法
  • pdbの使い方
  • エラーメッセージの確認

5週目に出てくる主な関数やキーワード

# キーワード
with : コンテキストマネージャを利用してリソースの管理を簡潔に行うためのキーワード
try : 例外処理を始めるためのキーワード
except : 例外が発生した際にそのエラーを処理するためのキーワード
finally : 例外の有無にかかわらず、最後に実行されるコードを定義するキーワード
raise : 例外を発生させるためのキーワード。エラーを意図的に起こして、特定の状況でプログラムの実行を停止させるために使用
assert : 条件が真であることを確認するためのキーワード。条件が偽の場合にAssertionErrorを発生させる。主にデバッグ時に使用される。
# 組み込み関数
open() : ファイルを開いて読み書きするために使われるPythonの組み込み関数

6 オブジェクトプログラミングの基礎

6 オブジェクトプログラミングの基礎の具体的な内容

6.1 クラスの基礎

クラスの書き方やその思想について学ぶ。

  • カプセル化
  • 継承
  • 多態性

6.2 設計思想

コードの品質指標をコードメトリクス、またはソフトウェアメトリクスと呼ぶ。

  • 循環的複雑度
  • 凝集度
  • 結合度

6.3 考え方

それぞれの原則に基づいて、実際にどういう場面で役立つのかを、具体的なシナリオで示す

  • SOLID原則
  • DRY原則 (Don't Repeat Yourself)とKISS原則 (Keep It Simple, Stupid)
  • AGNI原則 (You Aren’t Gonna Need It)

6週目に出てくる主な関数やキーワード

# キーワード
class :   オブジェクトの設計図を定義するためのキーワードで、データ(属性)とその操作(メソッド)をまとめてカプセル化するために使われる。
# クラス関連のキーワードと特別なメソッド
self : クラス内でインスタンス自身を指すために、メソッドの最初の引数として使用される
__init__ : クラスのコンストラクタメソッドを定義するための特別なメソッド
@classmethod : クラスメソッドを定義するために使われ、クラス全体に対して操作を行われる。
@staticmethod : インスタンスに依存しない静的メソッドを定義するために使われる。
@property : クラスの属性をメソッドのように動作させるプロパティを定義するために使われる。

7. 復習とミニプロジェクト

7. 復習とミニプロジェクトの具体的な内容

7.1 学んだ内容の復習

プログラミングによって、何ができたかを復習していく。

  • データの型や構造
  • 制御構造
  • 関数やクラス

7.2 再利用と保守性

一度作ったプログラムを直すことや補足説明文書を考える。

  • リファクタリング
  • 簡単なテストコード
  • docstring

7.3 ミニプロジェクトの進め方

1からプロジェクトを進める方法を学ぶ(そもそも、その問題はプログラミングで解くべきなのかを考える)

  • プログラミングで解決しにくい問題
  • プログラミングで解決しやすい問題
  • プログラミングが有効かを見極めるための質問

7週目に出てくる主なキーワード

# 開発手法
ウォーターフォール開発 : 順序に従って段階的に進行する、計画重視のソフトウェア開発手法
TDD開発 : コードを書く前にテストを作成し、それに基づいて実装を進めるソフトウェア開発手法
アジャイル開発 : 柔軟に変化へ対応し、短いサイクルで進める反復型のソフトウェア開発手法

8. まとめ

ここまでの学習を通して、Pythonの基本的な文法やデータ構造、制御構造、関数やクラスといった重要な概念を理解することを学ぶ。 また、エラーハンドリングやデバッグの技術を習得することで、実際の開発現場でも役立つ実践的なスキルを身につける。 さらに、オブジェクト指向の基本原則や設計思想も学ぶことで、保守性や可読性の高いコードを書くための基礎を築くことができる。

プログラミングは単なる技術ではなく、問題を解決するためのツールであり、論理的な思考力を鍛える手段でもある。 今回の学習をベースに、実際のプロジェクトや課題に取り組む際には、ここで得た知識を活かし、常に改善と学習を続ける姿勢が大切である。 今後は、より複雑なプロジェクトにもチャレンジしながら、チームでの開発や自身のスキルアップを目指していきましょう。

Discussion