C#/Javaの講師を務めてきて、オブジェクト指向型のプログラミング言語に共通する学習方法が見えてきました。近道とはいえ、言語を習得するために地道な努力は必要ですが、以下の要点を抑えていけば劇的に上達スピードが上がると思います。
オススメの学習順
- 基礎文法
- コーディングルール
- オブジェクト指向
- デザインパターン
- フレームワーク
- テストコード/テスト駆動開発
- ドメイン駆動開発
基礎文法
変数や型キャスト、演算子などの基本となる文法のほか、if文やfor文などの制御構文、配列やコレクション(Listなど)の使い方は最低限、身に着けておく必要があります。おすすめはオンラインジャッジサイトと呼ばれる、AtCoderやyukicoderなどのサイトにて、ひたすら過去問を解いてみるということです。過去問は先人たちの解答例も参考になります。
基礎からしっかり学ぶC#の教科書 第3版 C# 10対応
スッキリわかるJava入門 第3版 スッキリわかるシリーズ
コーディングルール
コーディングルールはプロジェクト毎に異なるケースもありますが、共通して「変数名はローワーキャメルケースで定義する」「メソッドには動詞または動詞句の名前を付ける」など代表的なものを身に着けておくと、変な癖もつかずに済みます。
リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)
[増補改訂]良いコードを書く技術 ── 読みやすく保守しやすいプログラミング作法 (WEB+DB PRESS plus)
良いコード/悪いコードで学ぶ設計入門―保守しやすい 成長し続けるコードの書き方
.NETのクラスライブラリ設計 改訂新版 (マイクロソフト関連書)
オブジェクト指向
ある程度プログラミングが書けるようになってきたら、オブジェクト指向を学びましょう。
オブジェクト指向の3大要素である「カプセル化」、「継承」、「ポリモーフィズム」はオーバーラップする部分も多いので、共通項を早いうちから見つけていくと、より理解しやすいかもしれません。
アジャイルソフトウェア開発の奥義 第2版 オブジェクト指向開発の神髄と匠の技
オブジェクト指向でなぜつくるのか 第3版 知っておきたいOOP、設計、アジャイル開発の基礎知識
オブジェクト指向入門 第2版 原則・コンセプト (IT Architect’Archive クラシックモダン・コンピューティング)
Head Firstオブジェクト指向分析設計 ―頭とからだで覚えるオブジェクト指向の基本
デザインパターン
オブジェクト指向は概念的な話が多いため、実装に活かすにはもう一段ハードルがあります。そんなときはデザインパターンを学ぶのが良いでしょう。デザインパターンとは、先人達が発見し編み出した設計ノウハウが、再利用しやすいように特定の規約に従ってカタログ化されているものです。よって、パターンに沿った実装を試すことで、自ずとオブジェクト指向への理解も深まってくるでしょう。
増補改訂版 Java言語で学ぶデザインパターン入門
オブジェクト指向のこころ (SOFTWARE PATTERNS SERIES)
Head Firstデザインパターン 第2版 ―頭とからだで覚えるデザインパターンの基本
フレームワーク
利用するフレームワークはプロジェクト毎によって異なりますが、デファクトスタンダードとなっているフレームワークはいくつか存在します。例えば、JavaのWeb系は、サーバサイドがほぼ「Spring Framework」一択であったり、DBまわりはO/Rマッパー(C#だとEntity Framework)で処理するなど、トラディショナルなやり方(基本)を抑えるという考えも悪くはないですが、流行りものをいち早く抑えて使い倒すというのが、この業界のならわしでもあります。先に挙げたデザインパターンもフレームワーク側が吸収しているケースも存在するため、併せて覚えておきましょう。
Spring Framework超入門 ~やさしくわかるWebアプリ開発~
Spring徹底入門 Spring FrameworkによるJavaアプリケーション開発
実戦で役立つ C#プログラミングのイディオム/定石&パターン
ASP.NET MVC 5 実践プログラミング
テストコード/テスト駆動開発
近年は、ユニットテストでテストコードを書くことが当たり前になってきています。まずは作成したプロダクトコードに、後付けでテストコードを書くことからトライしてみるのが良いですが、どうしても「テストしづらいクラス構成」になっている事はよくあります。そこで「テスト駆動開発」という考え方が出てきました。アプローチとしては、テストコードを書きつつ、そのテストコードを成功させるためのプロダクトコードを書いていき、それを何度も繰り返すため、自ずとクラスもテストしやすいように整理されていくことになります。
これからはじめるTDD テスト駆動開発入門 ThinkIT Books
テスト駆動開発
ドメイン駆動開発
従来のように、全システムを対象に設計者が上流工程で時間を掛けて仕様を検討し、設計書通りにプログラマが実装するといった開発手法では、顧客が求める機能とスピード感に追いつけなくなることがしばしばあります。そのため、ドメイン(業務)を軸に適切に独立したシステムとして開発するアプローチがドメイン駆動開発になります。この考えを用いることで、顧客からの多様で複雑な変更要求にも敏速に対応できるシステム構成とすることができます。テスト駆動開発がコンポーネント(部品)単位の設計・開発であるのに対し、こちらは業務全体を俯瞰したうえでの設計・開発手法であるといえます。
ドメイン駆動設計入門 ボトムアップでわかる!ドメイン駆動設計の基本
実践ドメイン駆動設計
エリック・エヴァンスのドメイン駆動設計
現場で役立つシステム設計の原則 〜変更を楽で安全にするオブジェクト指向の実践技法
「実践ドメイン駆動設計」から学ぶDDDの実装入門 CodeZine Digital First
エンタープライズアプリケーションアーキテクチャパターン
システム構築の大前提--ITアーキテクチャのセオリー
コメント