「独習C# 第5版」を読んで

■ C# を教える/習得する難しさ
私は、20年間に渡って、C# を教えています。
C++ などの他のプログラミング言語の経験者に C# を教えることもありますし、プログラミングを初めて学ぶ人に教えることもあります。
後者の場合は、「C#を教える」というより、「C#を道具にプログラミングを教える」という感じです。
実は、いずれの場合も、C#を教えていて難しいのは、プログラミング自体です。
例えば、(デリゲートとしての) ラムダ式を習得する場合、文法が難しいというよりは、
- 概念 (例えば、クロージャーの概念)
- パラダイム (どういうプログラミングを指向しているのか)
- 使いどころ
- 仕組み (変数キャプチャーって内部的にどうやってるの?)
などがピンとこない場合が多いようです。
■ 「独習C#」との付き合い
ここ数年は、C# のメインのテキストには、「独習C#」を使っています。
以前は、ハーバート・シルト氏著の「独習C#」。2018年からは、山田 祥寛さんの「独習C# 新版」。
そして今年、「独習C# 第5版」が出ると聞いて、楽しみにしていました。
今回、ありがたくも、著者の山田 祥寛さんから本を頂戴できましたので、早速読んでみました。
■ 「独習C# 第5版」での新しい C# への対応について

- それぞれのページ数
- 独習C# 新版: 624ページ
- 独習C# 第5版: 680ページ
これまで利用してきた「独習C# 」ですので、今回は新しい C# への対応という点で、書いてみたいと思います。
本書によって、先述した「C# を教える/習得する難しさ」は、どのように克服できるでしょうか。
「独習C# 第5版」の帯には「C# 10.0対応」と書かれていて、C# 7.0 ~ 10.0 の新しい文法に対応しています。
列挙してみると次のような感じです:
- C# 7.0
- switch 文での型判定
- 参照渡し戻り値
- タプル (値型)
- C# 7.2
- Span<T>
- 読み取り専用構造体
- ref 構造体
- C# 8.0
- Null許容参照型
- switch 式
- パターン マッチング
- インターフェイスのデフォルト実装
- 読み取り専用関数メンバー
- 非同期ストリーム
- C# 9.0
- トップレベル ステートメント
- レコード (参照型)
- C# 10.0
- global using
- レコード構造体
C# を使っている人間には、どれも興味深い機能だと思います。
どの機能にも、追加されるに至った動機があり、プログラミング言語として C# が成長していく様子が感じられます。
半面、初めてこうした新しい機能に接する人は、場合によっては、難しく感じて拒否反応を起こすこともあります。
そして、どちらかというと、文法や書き方自体が難しいというよりは、別の理由であることが多いように思います。
C# のとある機能に初めて触れたとき、学習者が抱く疑問は、例えば次のようなものであることが多いのです。
- 何故この機能がC#に追加されたの? (どういう問題を解決するための機能?)
- 既存の機能でも、できたことじゃないの? 何が違うの?
- どういうときに使うの?
- 使った場合のメリット・デメリットは?
本書では、理解が難しそうな機能を説明する場合、
- これまでは … という書き方 (ここでサンプル コード) があります。
- この書き方では … という問題点がありますね。
- そこで登場するのが、この機能です。
- この機能を使うと、このように書けます (ここでサンプル コード)。
というような流れになっていることがよくあります。
文脈 (コンテキスト: 事情、背景、状況) が分かるような書き方、ということになるでしょうか。
例えば、タプルの説明では、
- 複数の値を出力したい場合、従来は、配列やクラスなどで値を束ねたり、out 参照渡ししてた
- でも、配列だと異なる型の値が束ねられないし、クラスは大げさで保守が大変
- そこで、タプル!
- こんな風に書ける (サンプル コード)
といった具合です。
■ まとめ
上では、特に C# の新たな機能部分について述べましたが、本書ではC# の重要な機能が網羅されています。
そして、それぞれの機能について、文法を解説するだけでなく、「その機能を使う動機・目的」から入って、次に「書き方」や「サンプル」が書かれています。
勿論プログラミング自体の入門書ではありませんので、全くプログラミングを経験していない人向けではありません。
プログラミングをやったことがある人が C# に入門したり C# をより深く理解するのに、向いている良書だと思います。
■ 関連サイト
- 独習C# 第5版を読んで(読んでる) – matsujirushi’s blog
ディスカッション
コメント一覧
まだ、コメントがありません