初めに
RUNTEQで学んでいる者です。Railsと仲良くなるのはもう少し先な気がしています。
本記事には要件定義の話とか出てきますが、聞いた話がたくさん出てきます。
解像度が低いところがあるかと思いますが、ご容赦ください。
初めに
パティシエあるある
気づき
パティシエ的思考
プログラミングっぽく言い換えると
お菓子コードの作り方
材料と仲良くなるということ
お菓子作りとプログラミングに共通する思考
まとめ
おわりに
パティシエあるある?
元パティシエとして働いていた頃、材料名と配合(グラム数)だけが書かれていて作り方は一切書かれていないレシピを渡されるという状況は珍しくありませんでした。
たとえば、2つのレシピを渡されたとします。
「これ作っといて」と
レシピA
薄力粉 100g
砂糖 60g
バター 60g
卵 50g
レシピB
薄力粉 100g
砂糖 100g
バター 100g
卵 100g
プリントされていれば、AはクッキーでBはパウンドケーキと書いてありますが、手書きや口頭の場合は書いてありません。
レシピをもらってから時間が経ってしまえば、
レシピの配合から「クッキーなのか」「パウンドケーキなのか」を判断し、必要な工程を想像し、仕上がりイメージに近づくように作業を組み立てる必要があります。
気づき
そしてプログラミングを学び、カリキュラムを進め始めて気づいたことは——
実現したいモノ/コトがあって、それに近づけていく作業は
お菓子作りに似ている、、、、、、かもしれない
つまり。
お菓子作りの“配合から作り方を推測する”工程が、
プログラミングで要件(課題)から実装までを組み立てるプロセスと似ている
ということです。
パティシエ的思考
材料だけ書かれたレシピを見ると、パティシエはまず次のように考えます。
レシピAにおいて
全体の配合比
→ クッキー寄りの配合
(一方、レシピBは典型的なパウンドケーキ)
クッキーを作るなら、サブラージュ法かシュガーバッター法
→砂糖が多めだからシュガーバッター法にしよう
焼成温度は?
→ クッキーの一般的な温度の 170〜180℃
注意点は?
・卵とバターが分離しないようにする。
・生地の事の状態に気を付ける(温度)
・練ったら冷蔵庫で休ませる
・伸ばしたら冷蔵庫で休ませる。
プログラミングっぽく言い換えると?
配合を渡される→「要件定義だけ届いた状態」と同じ
材料=モデル
配合=データ構造
工程=メソッド・処理フロー
焼成=実行環境
完成品=アプリケーション(成果物)
少し強引ですが、こんな感じ
お菓子(コード)の作り方
お菓子作りは常にこの変換をしていました。
工程(アルゴリズム)を自分で補完していく
たとえば、クッキー生地を作るときは工程がだいたい決まっています。
バターを柔らかくする
砂糖とすり混ぜて空気を抱かせる
卵を乳化させながら混ぜる
粉を加えてさっくり混ぜる
プログラミングでも同じで、
要件には「ログインできるようにする」としか書いてなくても、
実際の工程は大量にあります。
Userモデル
Sorcery導入
認証メソッド
フォーム
セッション管理
バリデーション
エラー表示
要件(配合)から工程(アルゴリズム)を補完していく。
これもパティシエと同じプロセスでした。
材料と仲良くなるということ
順番通りに作業をしてもうまくいかないことはたくさんあります。
・例えば、卵とバターが分離してしまった。
・作業が遅くて生地がでろでろになってしまった。
・同時に焼く枚数で焼き時間が変わってくる。
これらを防ぐための一番の方法は
材料の特性をよく知ることです。
・バターには、可塑性やクリーミング性、ショートニング性があって、クリーミング性が発揮する温度までもっていこう。
・卵黄にはレシチンという物質があって、レシチンが乳化を助けてくれる。
→バターは20~23度まで上げよう。卵は18度くらいがいいけど、バターが固くならないように20度くらいにしておこう。
このように
材料をより深く知り、仲良くなることでより良いお菓子が作れるようになります。
同様に、メソッドやgemなどにもメリットデメリット、うまく使うために押さえるべき周辺知識があります。
ここを学ぶと、より楽しくお菓子を作れますしプログラミングもより楽しくなります。
お菓子作りとプログラミングに共通する思考
- ゴールのイメージから逆算する
仕上がりの食感・見た目・味をイメージしたうえで工程を決める。
→ Railsでも、画面の状態・ユーザー体験から逆算して設計する。
- 「この配合ならこうなる」という知識がベースにある
薄力粉とバターの比率を見ただけで、どういう食感になるか予想できる。
食材の特性から、作業中に気を付けなければいけないことがわかる。
→ プログラミングも同じで、
・どんなコードを書けばどんな動作になるか
・このGemはこんな特性がある
を経験として知っていく。
- トラブル時は原因を分解する
生地が固い → バターが低温だった?
膨らまない → 乳化できていなかった?
→ Railsでいう「デバッグ」と同じ。
作業方法や特性から、ミスのポイントを探し改善する。
- 工程は常に再現性が求められる
同じ配合で、誰が作っても同じ仕上がりにする必要がある。
→ コードも同じ環境で同じ動作をする必要がある。
プログラミング学習でも「配合を見る力」が役に立つ
Railsの教材を触っていると、時々こういうことがあります。
routes.rb を見た瞬間に画面遷移が想像できる
モデルのリレーションだけ見て処理の流れがわかる
コード全体を見なくてもパターンから構造が推測できる
これはまさにパティシエが配合を見て工程を想像するのと同じ思考です。
材料の構成→構造→挙動を頭の中で結びつける訓練 を、お菓子作りの現場で自然にやっていたのだと思います。
まとめ
お菓子作りでは「配合から工程を読み取る力」が必要
プログラミングでは「仕様から実装を読み取る力」が必要
両者は驚くほど似ている
どちらも 材料(データ)と工程(アルゴリズム)の関係性 を理解する仕事
過去の経験は思わぬ形でプログラミングに応用できる
おわりに
パティシエからエンジニアへの転職は珍しいかもしれません。
実際にやってみると両者は「論理的に物を作る」という意味で強く繋がっていると感じています。
今回の記事が、同じように異業職からプログラミングに挑戦している人の励みになれば幸いです。