🧑‍🍳

【符号化】プログラムは調理に例えると頭に入りやすい?

2024/11/19に公開

要旨

本記事で言いたいのは、「プログラムを調理に例えると頭に入りやすいのではないか」です。

調理の工程は大きく以下の3つです。

  1. 材料をそろえる
  2. レシピを見る
  3. レシピの手順を実行する

これをプログラムに置き換えると、ほぼ一緒です。

  1. 必要な道具をそろえる
  2. 処理の流れを把握する(明確化して参照する)
  3. 処理を手順どおりに実行する

一見難しそうに見えて何をしているのか分からなくなったとき、調理に置き換えてみることで、「いやちょっと待てよ。今は材料を集めている段階なんだな」「レシピを作ろうとして②のところで詰まっているんだな」などと、頭の整理をしやすくするのがねらいです。

本記事の目的

新しい技術をインプットするとき、再現性を高める(すぐ取り出して使えるようにする)ためです。

私は人より理解するのに時間がかかるタイプだと自認しています。

そこで、自分が覚えやすくするための工夫(心理学でいう「符号化」)として、「調理への置き換え」を考えました。

具体例

今回は、「Railsでサンプルデータを作る」を調理に当てはめて進めます。

具体的には、Userモデルに100人分のサンプルユーザーを投入します。

必要なものをそろえる ≒ 材料をそろえる

  • Faker(gem):架空のユーザーを作成する
  • db/seeds.rb(ファイル):このファイルを実行することでサンプルデータが作られる

手順を明確にする ≒ レシピを作る

  1. Fakerをインストールする
  2. db/seeds.rbにサンプルデータをを作成するプログラムを書く
  3. rails db:migrate:resetでデータベースの中身を消す
  4. rails db:seedでサンプルデータを投入する

Fakerのインストール

Gemfileにgem "faker"を追加してbundle installを実行します。

seeds.rbで100人分のサンプルデータ作成

サンプルデータの作成は、モデル名.create!(属性: 値)と書きます。

Fakerではドラゴンボールやジブリのキャラクター名も生成できます。

db/seeds.rb
# 管理権限をもつユーザーを1人作成する
User.create!(name:  "Example User",
  email: "example@email.com",
  password:              "foobar",
  password_confirmation: "foobar",
  admin: true)

# その他99人のユーザーをまとめて作成する
99.times do |n|
  name  = Faker::JapaneseMedia::DragonBall.character.name
  email = "#{name}@email.com"
  password = "password"
  User.create!(name:  name,
               email: email,
               password:              password,
               password_confirmation: password)
end

実行する ≒ 調理する

rails db:migrate:resetを実行します。

ユーザーが0人になったことを確認します。

[post-app]$ rails c 
Loading development environment (Rails 7.1.5)
[1] pry(main)> User.all.length
  User Load (1.2ms)  SELECT "users".* FROM "users"
=> 0

rails db:seedを実行します。

100人分のデータが作られました。

[1] pry(main)> User.all.length
  User Load (1.3ms)  SELECT "users".* FROM "users"
=> 100

usersテーブルの中身を確認します。

ドラゴンボールのキャラクターたちが投入されています。

最後に

プログラミングで新しいことを学ぶときに、「うぅ...なんだか難しそうだな。」と頭が重たくなるときってありませんか?

そんなときに、料理を作ろうとしている感覚で、「そもそも材料はそろっていたっけ?」「レシピに虫食いや曖昧なところはない?」と考えてみると、少し進めやすくなるかもしれません。

ちなみに、私は日常でまったく調理しません。

Discussion