無限大な夢のあと

テニスとアニメが大好きな厨二病SEのブログ

【書評】独習C# ( @yyamada )

WINGSプロジェクトの書籍レビュアーに応募し、献本してもらったので、書評を書きました。
今回は表題にある通り「独習C#」の書評となります。

早速、レビューに入ります。

TL;DR

端的にいうと、初心者からC#を書いたことがある人、ある程度実務でもC#バリバリこなしている人も含めて、1度は目を通したい、辞書的に持っておきたい1冊です。
自分は通っている社会人大学院のPBL(Project Based Learning)、いわゆる研究室のようなところで、Unityでゲームアプリを作ることになり、初めてC#を書いたくらいのレベルです。

前提としての自分の実務経験や知識など

私の今回の書籍に関係するところで考えると、経験したことがあるプログラミング言語を記載するのが良いと思ったので以下に列挙します。

  • フロントエンド/ネイティブアプリなど
    • Swift(実務3年)
    • Kotlin(実務半年)(コードレビューは2年ほど参加)
    • Dart(実務で半年)
    • TypeScript(実務で2年)
    • JavaScript(実務で2年)
    • C#(大学院のPBL活動で2ヶ月!)
  • バックエンド

書籍を読んだ率直な感想

実は辞書的にパラパラ使った紹介を書評レビューをする予定だったのですが、細かい部分も記載してあることが多かったので、一通り書籍には目は通しました。
どのC#のバージョンからこの機能が入ったなどラベリングで紹介されているのがよく、こういうことをやりたいユーザがいてそれによって追加されたんだなという経緯も読み取れてよかったです。
また、コラムなどが結構示唆に富んでいるものが多く、プログラミング初心者向けのものから、C#初心者にとっても悩ましいなというところが紹介されているのがポイントが高かったです。

良かった点

実務的に必要になるかなり細かい点まで記載してある点はとても良かったです。
例えば「7.6.4 値渡しと参照渡し」についても図付きでかなり丁寧に説明してあり、概念を知らないエンジニアにとってはここら辺はかなり有益だなと思いました。
また、所々にある「エキスパートに聞く」も良かったです。
上記の「7.6.4 値渡しと参照渡し」についてに付随するとP328の記載はとても良かったです。(気になる方は書籍を購入しましょう)

他の書籍でもしっかり説明されているものなのかはわからないですが、P97の「同一性や同値性」やP505の「共変と反変」などもしっかり説明してあるのも初心者向けでも良いと思いました

悪かった点

良かった点の裏返しになるのですが、初心者向けにもサポートされた記載があることで書籍がとても分厚くなってしまっていることです。
こればかりは書籍の「独習」シリーズの縛りなのでしょうがないとは思いますが、中級者向けに限定した書籍があっても良いかと思いました。
実際にはこれは実務ではあんまり使わない機能のような紹介を少しでも減らせることにもなるので良いと思いました。

良かった点の深掘り

書籍を読んで明日から使えるC#の機能の紹介

基本的にはUnityを開発するのはRiderを使っていて、Lineter+Formatterを強制しているのですがそれを使っている中であんまり気にしなかったけどそういえばそうだった、全く知らなかった機能がありました。
上記について簡単に列挙します。

  • P68
    • new式での省略
  • P399
    • パターンマッチ
      • 思ったより強力に使えることに気づいたので、コード書き換えたい部分があります。
  • P479
    • レコード型
      • withで複製できたりするのも知らなかったので良かったです。(ScalaやKotlinなど他の言語にある機能)
  • P491
    • パーシャルクラス
      • Swiftのextension的に使えそうで、使い所ありそうと思いました。
  • P534
    • デリゲート
      • Swiftのように使えそうで、使い所ありそうと思いました。
なんじゃーそりゃーっていうC#の機能の紹介

色々プログラミング言語をやってきましたが、他の言語での呼び方が違うからなのか?直感的にへぇーっていう機能が記載してありました。
上記について簡単に列挙します。

  • P83
    • ジャグ配列
      • こう呼ぶのを知らなかった。
  • P370
    • インデクサー
      • 自分が理解しきれていないだけな気もするが、他の言語にはない概念な気がしました。
  • P464
    • 列挙定数
      • Allみたいに足し算したのをおけるのはびっくりしました。

今回の書籍の続編やページ数があれば+αで欲しかった点

  • Effectiveシリーズにあるようなこういう書き方は禁止されているよ、こういう書き方ができるよなどの紹介
    • 実際には実務ではどうするべきなどの指針を「エキスパートに聞く」とそれに加えた内容の加筆などが良いと思いました。
  • Unityでのサンプルなどの紹介
    • 現状サーバサイドで使っている会社も多いと思いますが、UnityでC#を使うケースも増えているはずなのであると良いと思いました。
  • 実務で使うUnitTestなどの紹介
    • 簡単でも良いので触れられているのと良いと思いました。

まとめ

プログラミングの言語仕様をガッツリ読むというのがとても久々だったので、こんなに仕様が重厚なんだなと思いつつ、なるほどーと言って一気に読んでしまいました。
普段自分が使っている言語でもまだまだ知らない機能がありそうだなーと新たな気づきを得られました。

最後に目次や中身のソースコード、今後追加されるであろう正誤表については、こちらのリンクから確認できます。
www.shoeisha.co.jp

以上、書評とさせていただきます。