🐚

[魚戸ホタル] C#勉強備忘録1日目

2022/03/15に公開

Zenn始めました

おはようございます
こんにちは
ほたー

初めまして
魚戸ホタルと申します。

本日よりZennで自分の技術勉強の備忘録を残します。

このアカウント名はコロナ禍で空いたスペースに妄想という形で にゅろん と入ってきたイメージに付けた名前で1年以上そばにいます。

現実ではCakePHPと呼ばれるPHPのフレームワークを用いてシステム開発に携わっています。
2019年の7月から現在の職場で勤務しています。
普段は業務中、業務終了後OneNoteと呼ばれるメモツールに本日関わった業務を書き留めています。
しかし勉強の備忘録ならもっと広々と書きたいと思いました。

同じアカウント名ではございませんが、2年前にはてなブログやQiitaで技術記事を書いた経験がございます。
ただコロナ禍の2年間、怠惰な人間性のために発信活動どころか自主的に新しいプログラミング言語の学習も必要としていなかったので行ってきませんでした。
ただ社内の先輩よりキッティングのアプリケーションに使うためC#の勉学を薦められました。
キッティングとは例えばiOSのバージョンが上がった場合に前バージョンと照らし合わせて追加機能をインストールし、最適な状態にセットアップすることを指します。
C#について調査したところUnityやClusterなどのサービスに使われていると知り、妄想していたキャラクターの遊び場、そして自分自身のブランドイメージを作りたいと思い勉強を始めることに決めました。

もし遊び場が作成できれば自分だけでなく皆様にも分け合いたいと思います。
設定上魚戸ホタルは個体名ではなく種族名であり、1体だけでなく触れるユーザーの数だけ存在していると考えています。
とにかく自分事にしないと長続きしない、このような傾向を持っていると考えます。

Zennを始めた理由は3点あります。

マークダウン記法については見出しを設定することで目当ての位置までスクロールすることができるので技術記事を書くなら必須の機能だと思っています。

下リンクにあるDaichiさんの記事が励みになりました。
https://zenn.dev/daichi_gamedev/articles/4ee023a1bc2d06

C#の備忘録について収益化は全く考えていません。
理由はC#の文法、考え方を体系的にまとめて書籍にして、自分がこうして見て学ぶことができているのは著者の功績だからです。
しかし自ら発見・開発したことについて技術記事を書くことができれば収益化が選択肢に加わる可能性があります。

C#備忘録アーカイブ

学習用PC

機種 Microsoft Surface Laptop4
購入年月 2022年1月[1]
CPU AMD Ryzen 5 Microsoft Surface (R) Edition
メモリ 8GB
SSD 256GB

学習教材

亀田健司(著)1週間でC#の基礎が学べる本

購入方法はKindleです。
1周した感想としましてはC#は自分の学習に耐えるプログラミング言語だったということです。
C#の特徴としてオブジェクト指向と呼ばれるあらゆるものをすべて「モノ」する考え方がありますが、自分が主に業務で使っているCakePHPも同様の考えがあり、復習にもなりました。
また易しすぎず、かといって初学者が進められないほど難しくはなく、C#の本質的な部分が学べるため自分なら初学者が学ぶなら本書を薦めます。
また備忘録は本書を参考にしていますが、本書の各章のまとめ方、文章の記述が非常に丁寧でしたので自分が学習したものよりもお金を出して本書を読むことを推奨します。

1週間でC#の基礎が学べる本

備忘録テーマ

1日目の備忘録のテーマは以下の3点です。

対象ページは以下の通りです。

  1. 12~26
  2. 27~33
  3. 34~39
  4. 40~54

コンピュータの仕組み

著者がプログラミングの学習を始めるに先だって、コンピュータの仕組みを説明する章が最初に入ります。
コンピュータはキャラクターの脳と神経に当たるものと考えました。
図解は本書も理解しやすいですが、こちらのサイト[2]も理解しやすいと思いました。
またコンピュータ自体の歴史の流れについては坂村健(著)痛快!コンピュータ学[3]も役立ちます。

コンピュータの仕組みでメモした内容をVOICEPEAKで読み聞かせたところ6分以上かかりました。
そのため箇条書きでポイントを整理します。

  • コンピュータは2進数(0と1)で表現されたデジタルな細胞を持ち、この「0」と「1」どちらかをビット(bit)、8つ集まるとバイト(Byte)と呼ばれます。
  • 0と1の真偽値がAND、OR、NOTの働きになり、組み合わせると論理回路になる。
  • 現在のコンピュータは論理回路を密集させたLSI(大規模集積回路)で論理演算を行っている。
  • 現在のコンピュータは多数のLSIを搭載したマザーボードと呼ばれる基盤にプログラムを実行させるCPUや情報を記録するハードディスク、メモリ(外部記憶装置)で構成されている。さながら脳の構造である。[4]
  • ソフトウェアにはアプリケーションソフトウェアとシステムソフトウェアがある。
  • コンピュータ本体では何も役に立たない、つまり筋肉が動かない。どのように筋肉を動かすか教えるのがプログラミングであり、そのプログラミングで使う言葉をプログラミングという。
    普段使っている言葉は日本語であるが、日本語で呼びかけても動かないためコンピュータが理解できる言語で動きを伝える必要がある。
  • パソコンに接続して使うUSBメモリや、スマートフォンやデジタルカメラなどで使われるSDカード、さらにはパソコンのストレージとして内蔵されるSSDはフラッシュメモリと呼ばれる。
    フラッシュメモリの特徴としてデータの消去・書き込みを容量の分だけ自由に行うことができ、なおかつコンピュータの電源が切れたり、自身を取り外してもデータが消えないことがあります。
  • コンピュータが理解できる言葉はマシン語で人間が理解できる言葉は高級言語と呼ばれる。高級言語はそのままではコンピュータが理解できないため翻訳する必要がある。
  • 翻訳の方法には一度にすべて変換するコンパイラと部分的に変換しながら翻訳するインタープリターがある。

プログラミング言語としてのC#の特徴

C#はOSのひとつであるWindowsで知られるマイクロソフト社によって独自に開発され、2002年に発表されたプログラミング言語です。
本書の著者は

この言語が開発されたのは、C言語およびC++言語の古い設計仕様が発生原因の問題に対処するのが目的でした

と31ページに書いています。

C#の実行環境は.NET Framework(ドットネットフレームワーク)と呼ばれます。
CIL(Common Intermediate Language)と呼ばれる独自の中間言語で記述され、そのCILをインタープリタ型で翻訳しながら実行するためコンパイラ型とインタープリタ型2つの側面を持ちます。
上記の2つの側面を持つメリットは.NET FrameworkがあればマイクロソフトのWindowsだけでなく他社のOSでも動かすことができることにあります。
好きな料理があればどこにでも旅行に行けるようなものだと考えました。

C#の用途としては主に以下の3点があります。

  1. Windowsアプリケーションの開発
  2. Webアプリケーションの開発
  3. ゲームの開発

ここで取り上げたいのが3番で、C#はUnityと呼ばれるゲームエンジンに使われています。
ゲームエンジンはゲームを作る土台、ひな型となるものです。
もし最初に述べたように魚戸ホタルの遊び場を提供するのであればUnityの使用を考えています。
C#の欠点は動作が.NET Frameworkに依存しているためハードウェアに直接制御するようなプログラミングには不向きということであり、この分野はC/C++が主流です。

アルゴリズムとデータ構造

この章ではアルゴリズムについて解説しており、著者は

アルゴリズムとは問題解決の手段であるといえます。

と35ページに書いています。

問題解決に必要な道具が データ と呼ばれ、道具の使い方が アルゴリズム と呼ばれます。
例えば空腹になったという課題に対してエビや貝類などのエサがデータになり、エサを捕まえる、食べやすいように砕いて加工するといった解決手段がアルゴリズムと考えます。
上のように考えるとデータ構造は毎日のエサを決められた時間に捕まえるための仕組みであり、フローチャートはエサの取り方をマニュアル化した図とも言えます。

アルゴリズムには三大処理と呼ばれる基本的な処理があり、下記の3処理を組み合わせてプログラミングを設計する方法論のことを 構造化プログラミング と呼びます。

・順次処理
決まられた順番にエサを捕まえる

・分岐処理
もしエサを捕まえようとしている最中に鯛が現れたら、鯛を捕まえにいく

・繰り返し処理
捕まえたエサの合計が5になるまでエサを捕まえる

C#プログラムの実行

この章ではC#のプログラムを実行して文字列や数字を出力します。
PHPでは echo "Hello World"; 、JavaScriptでは console.log("Hello World"); に当たるものを学びました。

まず開発環境としてVisual Studio 2022とよばれるIDE(統合開発環境)をインストールしました。
Visual Studio 2022には無料で使えるCommunity、有料のProfessional、Enterpriseが存在しますが、学習用なのでCommunityをダウンロードしました。

簡単なプログラムの作成

まずVisual Studio 2022にあるメニューからプロジェクトを新規作成しました。
種類はコンソールアプリ(.NET Framework)です。
プロジェクト名を記入する際にソリューションも記入されました。
ソリューションとはプロジェクトの上位存在であり、「腕」ソリューションの下に「掴む」プロジェクト、「投げる」プロジェクトがくっついているものと考えました。

プロジェクトを作成した後、エディターと呼ばれるプログラムのソースコードを入力・編集する部分で以下のソースコードを入力しました。
実行した結果をソースコードの下に書きます。

Program.cs
// 指定したネームスペースを使うという宣言
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

// namespaceはソースコードの入れ物の名前
namespace UotoHotaru0314
{
    internal class Program
    {
        static void Main(string[] args) // エントリーポイント この中にソースコードを書く
        {
            // 数値の表示
            Console.Write(3);
            Console.WriteLine(14);
            // 文字列の表示
            Console.Write("Uoto");
            Console.WriteLine("Hotaru");
        }
    }
}

実行結果

Console.Write()とConsole.WriteLine()の違いは出力結果にあり、前者が改行なし、後者が改行ありになります。

またConsole.WriteLine()をConsole.WriteLime()と書くとエラーになり、エディターでは赤色の波線で表示されました。
加えて発生したエラーを解決する手法をデバッグと呼ぶこともわかりました。

実際にエディターを触ってみてソースコードを書く際にTabキーによる補完が効いていることや、ビルドした際にエラーが発生する箇所は赤波線で表示し、マウスオーバーするとエラー解決方法を提示してくれる等、ユーザー向けの操作しやすさを感じました。
例えばConsoleと書くとWrite、WriteLineが候補として表示されます。
候補を選択した後にさらにTabキーを押すと結びの;(コロン)まで入力されます。

勉強備忘録は以上です。

最後に

記事作成に2時間以上かかりました。
どうやら技術記事を書いていない間に白地のノートでは考えがまとまらないように改造されていました。
ノートに手先を動かして書いても頭に入ってこなかったというわけで由々しき事態です。

そこで記事を書くときにコピー&ペーストできるように基本メモはOneNoteでとり、自分事に置き換えるときは白地のノートに一旦書いてからまとめるようにします。
またメモ書きした内容はDreamtonics社が開発し(株)AHSが販売しているVOICEPEAKという機材を用いて読み聞かせます。
静かにしながら書いた内容を反復することが可能です。

通勤時の電車で中身をさらっと確認して、学習する時間は21:30~24:00とします。
またブログ作成は6:00~7:30での作成を目安にして休日に補完します。
ただし自分が腑に落ちない、楽しく学べていない場合は投稿しない方がましなので投稿しません。

ありがとうございました。Thank You。

脚注
  1. 5年前に購入したPCが古くなったので買い替え ↩︎

  2. 【子ども向け】コンピュータのしくみを分かりやすく解説(五大装置) ↩︎

  3. 痛快! コンピュータ学 (集英社文庫) ↩︎

  4. 職場でProxmox VEで構築した仮想環境を作る前にデスクトップパソコンの本体を開いたことがあり、ストレージ(SSD)を取り換えた経験がありますが、その際に見た内部構造の概要が説明されていました。 ↩︎

Discussion