C# おすすめ書籍

弊社では主にC#を用いてソフトウェア開発を行っています。
そこで初学者の方向けにおすすめの書籍をご紹介します。

1. 新・標準プログラマーズライブラリ なるほどなっとく C#入門
著者:出井 秀行 氏
対象者:プログラミングを初めて学ぶ方
・プログラミングの基礎から丁寧に解説されています。
変数やif などの制御文が初めての方でも、読み進める事ができると思います。
Unityスクリプトに初めて触れる方向けの参考書としても良いと思います。

2.独習C# 新版
著者:山田 祥寛 氏
対象者:VBAなど他の言語を少しでも触れた事がある方
・C#の言語仕様やオブジェクト指向について体系的に学べます。
本書でC#の基本部分は網羅しているので、本格的に学びたい方が
最初に読む本として適していると思います。

3.実戦で役立つ C#プログラミングのイディオム/定石&パターン
著者:出井 秀行 氏
対象者:C#を実務で使う方、C#のレベルアップを目指す方
・C#で「こう書くべき」というイディオムが豊富に紹介されています。
プログラミングの難しさの一つとして、何通りもの書き方が存在する事が
挙げられますが、定石とも言える書き方をその理由とともに紹介されています。
特にLINQやコレクションの操作を磨きたい方におすすめです。

4.増補改訂版 Java言語で学ぶデザインパターン入門
著者:結城 浩 氏
対象者:オブジェクト指向をさらに学びたい方
・言語はJavaで書かれていますが、C#の基礎を知っていれば読み進められます。
デザインパターンを学ぶことで、インタフェース、継承、委譲などの使い方
とオブジェクト指向についての理解を深められます。
もっと早く読んでいれば良かったと思えた本です。

信頼できる内容を、体系的に学習する事が近道だと思います。
以上、おすすめの本でした。

画面デザイン

先日、ポスター制作や動画編集を専門にされている方と、
お話をする機会がありました。
どうすれば良いデザインができるのか率直に伺ったところ、
その方は「同業他社のデザインを研究する」そうです。

ソフトウェア制作の現場においても、
お客様からデザインを指定される場合や、
新規でデザインを考えなければならない場合などがあります。

特に新規でデザインを考えなければならない場合、
他の同じような機能を持つソフトはどのような画面構成をしているのか、
実際に自分が使う立場として参考にするというのは、
非常に重要なポイントだと思いました。

ソフトウェアにおいてもユーザー目線で、
使いやすい UI / UX を心がけたいと思います。

新旧開発環境

社内のPC開発環境は、主にVisual Studioを用いてC#で開発しています。
時折お客様からVB6などで作られた、
既存ソフトウェア資産の保守を依頼される場合があり、
その場合はVB6などのコードを読んで、必要な実装を行います。

Visual Studioは非常に優れたIDEなので、
古い言語や開発環境を使ってみると、特にそれを実感します。
必要な実装部分にさっと飛んで元に戻ってきたい。
自動でインデントを付けて欲しい。
コードを色で分かりやすく表示したい。

これらは普段当然のように使っている機能のなので、
とにかく様々な事が気になってしまいました。
最近の言語や開発環境は、
それだけ改善されて使いやすくなっているということですね。

それにしてもVB6が動作しているPCは、
スタンドアローンなWindowsXPが多いと思います。
現在もまだ多く使われているかと思いますが、
そろそろハードの限界も視野に入れる必要がありそうです。

プログラミングの入門書から次へのステップ

初めてプログラミングを学ぶとき、
最初は書籍による体系立った学習が重要だと以前書きました。

読みやすい、バグの起こりにくい、修正しやすい、拡張しやすいなど目的の為、
現場では様々なテクニックを用いてプログラムを作成します。
それらの技術を用いて作られるプログラムは、実際にはその多くが、
初心者~中級者向けの一般の書籍の内容でカバーできるものですが、
慣れていないと非常に難しく感じ、
学習内容と実際の現場では、大きな乖離があるように思えてしまうと思います。
最初はコードが読めない、書けないといった事態が起こります。

例えば既存のプログラムを修正する場合、
どの部分を修正すればよいかを見つけるのが最初の難関です。
コードを読む場合、クラス、メソッド、プロパティ、オブジェクト、変数など、
キーとなる部分を把握する事から始まります。
私は最初、それがうまくできませんでした。

私の場合、打開のきっかけとなったのは、
コードに色を付ける拡張機能の導入でした。
たとえばメソッドは黄色、拡張メソッドは斜体、staticメソッドは太字、
プロパティは紫色、局所変数はオレンジ色、コメントは緑色など、
自分のルールを決めて、視覚的に分かりやすくすることで、
どこでどのように使われているのか、コードの把握ができるようになりました。

あとはとにかくプログラムを少しいじって変更してみる。
動作がどう変わるか調べるというのも、当たり前の事ですがとても重要な事です。

 

弊社のソフトウェア開発で主に使用しているC#には型があります。
型にはメンバー情報や許可される演算の種類など決めることで、
目的に必要な型を選んで使用する事ができます。
コンパイラによってタイプセーフ(型安全)が確認できることも、
大きなメリットですね。

一般的に型とは、何かをつくるもとになるもの、という意味です。
プログラムには開始処理があって、
データを取得する処理、解析する処理、結果を出力する処理、
終了する処理、どんなプログラムでも大きな処理の流れはだいたい同じです。

その処理一つ一つを大きな型として捉えることができるようになると、
プログラム全体を見渡せるようになり、
ステップアップに繋がったように思います。

変換・無変換キー

梅の花も満開を過ぎて、
日中は暖かい日差しを感じる事も多くなってきました。
私も最近、桃の花の枝を買って帰りました。
つぼみが開くのが楽しみです。

キーボードの変換・無変換キーですが、
スペースキーの隣で非常にアクセスのいい好立地にあるのに、
機能としてはいまいちでもったいない感じがします。

私はソフトでキーマッピングを変更して使っています。
例えば無変換キーはこんな感じです。
無変換 + J : カーソルキー左 (連打で高速移動、長押しでHome)
無変換 + L : カーソルキー右 (連打で高速移動、長押しでEnd)
無変換 + I : カーソルキー上 (連打で高速移動、長押しで先頭へ)
無変換 + K : カーソルキー下 (連打で高速移動、長押しで最後尾へ)
無変換 + U : BackSpace
無変換 + O : Delete
無変換 + Space : Enter
などなど。

うまく利用するとマウスへの手の移動が減り、
楽に入力することができます。
道具が自分の手に馴染んでいく感じが心地良いです。

自分の能力を知るということ

要求される内容に対して、
1. そもそも実現が可能かどうか
2. 実現するためにどの程度の日数がかかるのか
プログラミングを始める前に、これらの情報が必要となります。

知識や経験が豊富にあればよいのですが、
自分が今までにやったことがない事だと、非常に苦労します。
これらを見誤ると開発のリスクとなり、
納期などに重大な影響を与えてしまいます。

自分の能力を知るということは、
自分に必要な工数を正しく見積もることができる、
という側面を持っていると思います。

未知の事柄は当然調べなければなりませんが、
調べた結果を自分の知識レベルに落とし込み、
実現までの道のりを描くことができるよう、
意識しながら技術を向上させていきたいと思います。

プログラミング原則

プログラミング原則というものがあります。
有名なものをいくつか紹介します。

KISS
Keep It Simple, Stupid.”
常にシンプルに。
シンプルなコードは理解し易く、メンテナンスが容易です。

DRY
”Don’t Repeat Yourself.”
同じことを繰り返さない。
同じ処理は共通化することでコード量が減り、メンテナンス性も向上します。

YAGNI
You Aren’t Gonna Need It.”
それ、必要にならないよ。
不要なコードはバグの原因になります。書くのは本当に必要なコードだけ。

原則と言われるように、
誰にでも当てはまる基本的な考え方だと思います。
プログラミングとは常に複雑さとの戦いなので、
シンプルなコードを心がけています。

KISSの最後のSが”Stupid”(愚か者)というのは、
ちょっと無理やりな気もしますが面白いですね。

キーボード

社内で使っているキーボードを、新しく買ってもらいました。
今までメンブレンかパンタグラフ式のキーボードしか使ったことがなかったので、
初めてのメカニカルキーボードです。

どれにしようか悩みましたが、
口コミを参考にして、シンプルで掃除のし易いものを選びました。
肝心の使い心地も良く、コードを打つのが楽しくなります。

そのうちに他のキーボードも試してみたくなり、
今度は自宅用に静電容量式のキーボードを買ってしまいました。
コトコトと上品な感じの音がして、
こちらも非常に使いやすいと感じています。

学生の頃、自分に合う書きやすいペンを見つけようとして、
たくさんのペンを買って試した事を思い出しました。
キーボードはペンのように簡単には買い替えできませんが、
毎日手に触れるものなので、愛着を持って大切に使っていこうと思います。

ソフトウェアのローカライズ

ソフトウェアのローカライズとは、外国の言語にも対応することを言います。
弊社のソフトウェアもローカライズを行う場合があります。

英語が主ですがローカライズを行う際、
どのような単語や表現を使うべきか気を付けています。
あまりにも長い単語を使うと、デザイン的にもはみ出してしまったり、
2行で表示されたりしてしまいます。

例えば「輝度」という単語に対して、
一番しっくりくる英単語が「Brightness」だった場合、
英語表示の場合は文字数が多く、
場合によってはスペースが足りなくなってしまいます。

自分のスマートフォンを英語表示に切り替えてみると、
狭い画面の中でどのような表現がされているのかとても参考になりました。
適切な表現とアイコンで、使いやすいソフトウェアを開発したいと思います。