Cプログラマなので、C++を勉強するために『C++ For C Programmers』を受講しました。
概要
C++の初級的な話題が紹介される。この講義でC++の基礎がマスターできる内容。Cプログラマを対象にしているため、Cとの比較やC++のここがスゴイのだという説明も出てきて、Cしかしらない自分にはこのCについての伏線が嬉しい。
また、なにかにつけてC++11の話題がガッツリ紹介されるので、C++11 For C++98 Programmersというタイトルのほうが実は適切な気がする。
オープニングにJAZZが流れて、ダンディさあふれるのIra Pohl教授が現れる。
話し方がカメみたいにものすごくゆっくりなので、English的な壁は大丈夫だった。スライドにカラーペンで書き込みながら説明されるので、臨場感がある。(しかし字がけっこうきたない)
参考書
参考書は、ネット上にある無料のものと、有料のものがある。
- C++ by Dissection
- C++ For C Programmers: https://amzn.to/3l1suKi
が、自分は利用しなかった。どちらかというと、副読本としては、かつて挫折した独習C++を読んでた。
各回の概要
Week1 C++ as a Better C
A言語からC言語までに至る歴史の説明。そして、C++がC言語に比べてなぜ優れているかを解説する。課題は、C言語でかかれたコードをC++に書きなおす。ここでC++独特の表記をならう。
week2 C++: Basics of Generics and Classes Template
templateが出てくる。より汎用的で、再利用可能な書き方について学ぶ。課題はダイクストラ法の実装。どのへんがC Programmerのためなのだ? モンテカルロ法やPriorityQueueを使いこなす必要があり、難しい。
week3 C++: Class Constructors and Destructors
コンストラクタ、デコンストラクタの説明。または、List構造の説明。Assignmentの実装方法に関するフォローの講義も入る。
week4: C++: Minimum Spanning Tree & Standard Template Library
auto,継承、friend関数などなど。ここで、STLの解説とイテレータという概念が出てくる。だんだんC++ぽくなってくる。Assignmentは最小スパニングツリーをプリム法かクラスカル法で実装。
week5: C++ 11 Standard; Containers, Iterators and Algorithms
主にここではSTLの説明。コンテナ、イテレータ、アルゴリズムの三本柱が詳しく解説される。lambdaの使い方も紹介されるが、理解できなかった。
week6: Hex, the game and C++ Inheritance
後半の大きな話題である、Hex gameの説明が入る。また、重要な概念である、もここで解説。
Module 7: Min-Max and C++11 Classes; Alpha-beta and Polish
Copy Constactor や Move Costractorなど。またHex Gameを実装するための方法が解説される。ミニマックス法やアルファ・ベータ法など。ここで、このCourseのサムネイル画像がチェスの理由を理解した。この先生はチェスがとても好きらしい。チェスにおけるAIの実装方法なども出てくる。
後半の課題である、Hex Gameを 3weekにわたって実装する。この課題で、C++のfeatureを全部注ぎ込みなさいと言われて、けっこう頑張った。
Module 8: Monte Carlo Evaluation; the C++11 Standard
例外処理、スレッド処理などなど、今までで解説していないC++のfeatureももれなく紹介。また、C++中級への道として、簡単なデザインパターンが紹介される。
おわりに
For C Programmerな部分は実はweek1だけだった気がした。グラフ理論やゲーム理論が出てきて、『いったいどのへんがFor C Programmerナンダヨ!』と全生徒が唸ったに違いない。
Cしかできない自分にとっては、まさにうってつけの授業だった。