Kuratani Shigeru Weblog

***
2019年4月28日

C#の学習課題を作ってみた

はじまり

今期、社内勉強会のC#クラスを担当することになりました。
弊社は開発言語としてJavaを基本としているので、C#での開発案件に参画しているメンバーはそれ程多くはないのですが、数人C#開発に参加させて頂いている関係で、今年度からC#勉強会を開催することになりました。
C#について勉強会の準備をする中で感じたことを記録しておこうと思います。

自分自身の学習の進め方

C#を勉強したことがなかったので、まずは基本からということでMicrosoftが公開している以下の資料を学習しました。
C#のガイド(https://docs.microsoft.com/ja-jp/dotnet/csharp/index)
他言語を使用している方向けの情報もあり、深いところでなくC#の導入部分を効率的に学習できる資料になっているので、初めてC#を学習する方は読んでみると良いと思いました。

その後の学習として、定評のある書籍として以下の書籍をザッと読んでみました。
改訂3版 パーフェクトC#
全てを丹念に目を通していないのですが、.NET言語の動作原理やC#の言語仕様も詳しく記述されていて、とても良い書籍だと思います。

そのまま上記書籍を読み進めても良いのですが、これまでプログラミグ言語を学んできて、すぐにその言語を詳細に理解することは難しいと思いましたので、まずはプログラミング一般に必要な処理を、これまでの他のプログラミグ言語の経験を活かしてC#で書いてみようと思いました。
その中で少しずつC#の言語仕様やフレームワークを学習する方針としました。

プログラミングのお題

これまでプログラミングをしてきて、以下のお題を設定してC#でプログラミングしてみました。
プログラミングしてみて「これ課題にしようかな」と思えましたので、勉強会のプログラミング課題も以下の学習内容で作成をしました。

  • データ型
  • 分岐処理
  • 繰り返し処理(ループ処理)
  • 標準入出力
  • 数値・文字列のフォーマット
  • コレクション(ジェネリック)
  • ファイル入出力
  • 処理の分離(クラス・メソッドの作成)
  • ソート処理
  • デリゲート
  • 日付の扱い方
  • 正規表現

他にも基本となる言語仕様はあるかと思いますが、一旦上記学習内容をやってみました。

JavaとC#

C#のガイドには「C# は C 言語ファミリーをルーツとしているため、C、C++、Java、JavaScript のプログラマーであればすぐに使いこなすことができます。」とあります。
Javaの生みの親であるジェームズ・ゴスリンも自身の書籍の中で、Javaを「わかりやすい言語」と表現しています。
私はJavaプログラマーですが、C#をやってみて言語仕様部分では共通点も多く、ともにともて使いやす言語だと思いました。 クラスライブラリはまったく別物ですが、欲しい機能を提供するライブラリは共に揃っている印象です。

データアクセス処理として、ADO.NETを学習して、実際にプログラミングもしてみましたが、各データベース用のプロバイダの上位クラスとして、共通のインターフェイスを提供する仕様となっており、JavaのJDBCとの共通の思想に立っていると思いました。 また、ADO.NET Entity FrameworkもJavaのJPAと同じように、基本となるデータアクセスクラスをベースにして、より抽象化された操作を提供するものとして似ていると思いました。

WEB開発に関しては、ASP.NET MVC Frameworkが存在します。
JavaにもJava EE標準フレームワークとして、JavaServer Faces(Mojarra)があります。
アクションベースとコンポーネントベースの違いがありますが、どちらも素早くやりたいことを実装ができる環境が整っているのだと思います。

C#を学習しはじめて思ったこと

いままで業務ではずっとJavaをやってきましたが、「やりたいことをオブジェクト指向で保守性・拡張性を保ちながらわかりやすく記述する」という点では共通しており、とても良い言語だと思いました。
細かな点で違いはありますが、とても良い言語だと思いましたので「食わず嫌いは良くないですね」と改めて感じました。
一度、C#の開発案件に参画させて頂いたことがあるのですが、ガッツリ深くプログラミングするC#案件に参画させて頂くことはあるのかな?なんて思いましたが、色んなプログラミング言語に触れてみることは良いことなので、この経験を活かしたいと思っています。