天の月

ソフトウェア開発をしていく上での悩み, 考えたこと, 学びを書いてきます

デザインパターンとオブジェクト指向を学ぶことにした

今日からしばらく、デザインパターンオブジェクト指向を本格的に学ぶことにチャレンジしようと思います。
自身の頭の整理を目的として、学ぼうと考えた経緯を記載します。

はじめに~"デザインパターン"の定義について~

本記事で記載しているデザインパターンには、デザインパターンの背後にある原理や教訓, デザインパターンができる経緯といった部分が含まれています。(むしろその部分が中心)
デザインパターンという言葉が、デザインパターンが提供する解決策を想起させやすいので、念のための補足でした。

デザインパターンオブジェクト指向を学ぼうと考えるまでの経緯

今年の目標設定をしたものの...

今年の目標として、「エンジニアとしてのスキルアップ」という抽象度の高い目標を掲げました。 

aki-m.hatenadiary.com流石に抽象度が高すぎるので、

  • 業務時間外で月15日以上はコードを書く
  • 月に一冊の技術書を読む…

をはじめとした目標にブレイクダウンしましたが、「エンジニアとしてのスキルアップ」を通して達成したい「現場の技術的課題を解決したい」という目標との結びつきが弱い点が気になっていました。
そのため、具体的にどういうスキルを身につけて現場の技術的課題を解決するかを考えようと思いました。(目標設定って難しい。。。)

なんで現場の技術的課題をこれまで解決できなかったのか?

必要なスキルを考えるにあたって、自身が技術的課題を解決できなかった(もしくは自身で技術的課題を作り出してしまった)場面を思い出し、解決できなかった原因を考えました。
結果、以下2点の原因が挙がりました。

  • プロダクトに潜む技術的な課題が何かを正確に捉えられなかった
  • プロダクトに潜む複数の技術的な課題を適切に"調整"できなかった

オブジェクト指向のこころ」を参考に、技術的課題を解決するために必要なスキルを考える

上記で挙げた2点の原因を基に、自身に足りていないスキルを考えた結果、先日読んだ「オブジェクト指向のこころ」に記載されていた、以下のスキルが足りないという結論になりました。

  • 問題の分析段階, 設計段階それぞれについて、分析あるいは設計のパターンを学習し、適切なパターンを問題のコンテキストに合わせて適用するスキル
  • 問題がプロダクトに要求する複数のフォースを調整するスキル

そこで、「オブジェクト指向のこころ」の内容をベースにしながら、デザインパターンオブジェクト指向それぞれについて相互補完関係を意識して学ぶことで、上記スキルを身に着けようと考えました。
なお、現状の自分のレベル感は以下の通りです。

どうやってスキルを身につけるか

調整する必要は確実にあると思いますが、現時点では以下の方法でスキルを身につけようと考えています。
最終的には、現場のソースコードを、オブジェクト指向リファクタリング or 新規機能開発できるレベルになりたいです。

ソースコードを書く

デザインパターンが解決したい問題&問題が発生するコンテキストを考慮して、ソースコードを考え、書いていきます。
デザインパターンが提示する解決策に囚われ過ぎないように細心の注意を払います。

オブジェクト指向デザインパターン関連の本を読む

前述した「オブジェクト指向のこころ」の他に、以下の本を読んでみようと思います。(ソースコードを書く際に関連してくる章をそれぞれからつまみ食いするイメージ)

増補改訂版Java言語で学ぶデザインパターン入門

増補改訂版Java言語で学ぶデザインパターン入門

  • 作者:結城 浩
  • 発売日: 2004/06/19
  • メディア: 大型本

オブジェクト指向でなぜつくるのか 第2版

オブジェクト指向でなぜつくるのか 第2版

  • 作者:平澤 章
  • 発売日: 2011/04/07
  • メディア: 単行本

パターン、Wiki、XP ~時を超えた創造の原則 (WEB+DB PRESS plusシリーズ)

パターン、Wiki、XP ~時を超えた創造の原則 (WEB+DB PRESS plusシリーズ)

  • 作者:江渡 浩一郎
  • 発売日: 2009/07/10
  • メディア: 単行本(ソフトカバー)

さいごに

今回デザインパターンオブジェクト指向を本格的に学ぼうと決める過程で、様々な資料や著名な方々の意見を見たのですが、否定的な意見も多く(特にデザインパターン)、正しい意思決定ができているのかは正直自信がありません。。

ただ、デザインパターンを学んだことがプラスになっていないと批判されている例を見ると、過去の自分と同じく学び方を間違えているだけのような気が個人的にはしました。。(正しい学び方をしていない例を挙げて批判した結果、デザインパターンを学んだ時に得られる効果が過小評価されている気がしました)
なので、自分が正しい学び方を模索して、学び方と学んだことで得られたことを何らかの形でアウトプットしてみたいと思い、デザインパターンオブジェクト指向を本格的に学ぼうと決意しました。
結局良く分かりませんでした、となって挫折しないように、学ぶ過程を楽しみながら頑張りたいと思います。

参考記事(デザインパターンとの付き合い方の提言)

devblog.thebase.in

上の記事内に添付されているスライド