こんにちは､ 初心者のためのC言語プログラミング教室へようこそ｡
講師を務めます､ ジェイソン・フィトンと申します｡
このコースに申し込んでくれたことに感謝したい｡
とても楽しくて､ 皆さんのモチベーションを上げ､ C言語に関するあらゆることを学べるように頑張ります｡
さっそく始めてみましょう｡
まず､ 私自身のことを少しお話したいと思います｡
私は､ ビンガムトン大学でコンピューターサイエンスの理学修士号を取得し､ SUNY Oswegoでコンピューターサイエンスの理学士号と学位も取得しています｡
2001年に修士号を取得しました｡
私は16年以上､ ソフトウェア開発者をしています｡
オンラインインストラクターとして11年以上のキャリアがあります｡
オブジェクト指向プログラミングからコンパイラ理論まで､ 20種類以上のクラスを指導してきました｡
私はコンピュータサイエンス全般におけるプログラミングの膨大な経験を持っています｡
私は16年以上､ C言語を使って仕事をしています｡
基本的に､ 最初の仕事に就くと同時に､ C言語のコードを書き始めました｡
また､ 複数の大学でC言語の初級クラスや上級クラスを作ったことがあるので､ カリキュラムや学生にC言語の概念を伝える経験もそれなりにあります｡
私は､ ゼロックス社で10～12年ぐらいソフトウェア開発をしてきました｡
ここで働いている間は､ 主にC言語のコードを書き､ C＋αのコードも書いていました｡
私たちは､ ソースコードリポジトリ全体をLinuxプラットフォーム上で動かし､ リアルタイムでコードを書いています｡
主にオブジェクト指向言語とモバイルプログラミングに力を入れています｡
これが私の好きなことなんです｡
だから､ CプラスプラスとかJavaとか､ でもC言語が私の得意分野なんです｡
また､ 高品質のコードを書くことにも重点を置いています｡
これは､ コースを通して私が強調する､ 重要な重要な概念です｡
ただ単に動くコードを書くのではなく､ プログラムのメンテナンスがずっと楽になるような､
良いコードを書くことに集中してほしい｡
そこで､ 授業で取り上げるトピックの中には､ 次のようなものがあります｡
ちなみに､ これらのトピックを取り上げる際には､ 私たちが提供する
講義資料を提供します｡
ハンズオン・エクササイズを提供するつもりです｡
評価を提供することにしています｡
統合開発環境で編集しているコードやプログラミングの考え方を紹介しながら､ 解説していきますね｡
だから､ 本当に手を動かすことになるんです｡
まずはC言語全般について､ その概要を少しお話しします｡
C言語がいかに効率的であるかということをお伝えしていきます｡
持ち運びも可能です｡
複数のプラットフォームで書くことができる｡
パワーと柔軟性に富み､ プログラマーを意識しています｡
また､ 文脈を理解するために､ Cの短い歴史も提供します｡
続いて､ C言語の共通言語の特徴について説明します｡
C言語は命令型言語である｡
これは､ 最も現代的なタイプの言語である｡
機能を中心に構成されています｡
モジュール設計があり､ 構造化プログラミング言語である｡
また､ コードを書いているときにトップダウンのプランニングをすることもできます｡
C言語を使用する利点は､ C言語が小規模で高速なプログラムに最適であることを中心に説明します｡
とても信頼性が高く､ とても簡単に学ぶことができ､ とてもわかりやすい｡
仮に同業者や開発者仲間からC言語のプログラムを習ったとしても､ すぐについていけるようになりますよ｡
最新のクロスプラットフォーム統合開発環境を使用することにしています｡
コードを編集していきます｡
また､ IDEを使ってコードをデバッグすることもあり､ これはとても重要なことです｡
ということで､ これも一つのコンセプトとして提示されることになります｡
私はなんとなく環境を説明し､ ツールの使い方を紹介します｡
まずは､ 基本的な概念から説明します｡
C言語のプログラムがどのようなものかを説明し､ 例を挙げて説明します｡
基本的なC言語のプログラムの構造をお見せします｡
コードにコメントをつける方法や､ printf関数を使った基本的な出力について説明します｡
Hello Worldの例題を見ながら､ C言語で初めてのプログラムを書いてもらうこともあります｡
この後､ makefileの話をします｡
makefileについて詳しく説明することはありませんが､ このツールを使ってどのようにコードをビルドし､ コンパイルすることができるかを理解するために､
このことについて触れておきたいと思います｡
今回は､ プログラミングの最も基本的な概念である「変数の作成と使用」についてお話します｡
変数とは､ プログラムのメモリやデータ､ 記憶を名前と関連付ける考え方です｡
そして､ コードの中で多くの変数や様々なステートメントを作成することになります｡
データ型について､ float doubleとcharのデータ型について説明します｡
そして､ 授業の後半では､ enumのようなより高度なデータ型や､ typedefキーワードを使用して独自のデータ型を提供することについて説明します｡
基本的なオペレーターの情報をお伝えします｡
足し算や引き算をするような､ 算数の演算子です｡
また､ and or, orのような論理演算子も含まれています｡
これは､ 一種の意思決定文のようなものでしょう｡
代入演算子を使って変数にデータを代入する方法について説明します｡
自分のコードで意思決定をする｡
非常に重要なプログラミングの考え方です｡
これに触れます｡
これらを条件文と呼びます｡
ifやswitchなどのキーワードがこれにあたります｡
例を挙げながら､ その様々な構成を見ていきます｡
続いて､ リピートコードの話をします｡
C言語のループ処理には､ for whileとdo whileという大きな構成要素があります｡
どれも同じようなものです｡
ちょっとだけ構文が違うんです｡
今回は､ 配列を使ってデータを保存したり､ データを2種類に分類したりする方法について説明します｡
そこで､ 初期化配列を定義する方法と､ マトリックス・スプレッドシートのようなコンセプトの多次元配列について説明します｡
機能です｡
関数は､ C言語に関する最も大きく､ 最も重要な概念の1つです｡
すべてのものは､ 機能を中心に使い､ 整理されるべきではありません｡
これをモジュール型プログラミングという｡
関数の宣言方法､ 使い方､ 関数のデータの渡し方､ 関数のデータの返し方について学びます｡
また､ 値による呼び出しや参照による呼び出しなど､ より高度な概念についても説明します｡ デバッグについて
デバッグは､ すべてのプログラマーにとって不可欠な概念であり､ 必須である｡
自分のエラーを発見して修正する､ この考え方です｡
プログラムがどこでクラッシュしたかを示すことができるコールスタックについて説明する予定である｡
とても重要なコンセプトです｡
多くのcプログラマーが犯す共通の間違いを提供し､ もしこれらの間違いを見たとしても､ それを修正する方法を理解することができるようにします｡
そして､ コンパイラ､ コンパイラがあなたのコードをチェックし､ 構文的に正しいかどうかを確認するのです｡
また､ そうでない場合は､ エラーメッセージや警告が表示されます｡
コンパイラが何を言っているのか理解する必要があります｡
そこで､ コンパイラのメッセージとその理解方法についてお話します｡
今回は､ 構造体について説明します｡
配列で似ている､ データを格納する構造体について､ そのすべてを学ぶことができます｡
データ構造なんです｡
構造体を初期化する方法､ 入れ子構造という概念について説明します｡
オブジェクトに慣れ親しんでいる方にとっては､
それと似たようなものですが､ 文字列ほど堅牢ではありません｡
これは基本的なデータ型の1つですが､ 配列として考えられており､ 少し違う概念であることがわかります｡
それを突き詰めていく｡
今回は､ 文字列に対して行える操作の一部などについてお話します｡
ポインタです｡
ポインターは､ おそらくこのコースで最も重要な概念になると思います｡
だから､ 時間をかけてやるんです｡
ポインターはこの概念で､ 自分のメモリを管理する必要があるところを見る｡
これは通常､ あなたのために行われるため､ 他の言語でプログラムする場合､ それはあなたにとって非なじみの概念かもしれません｡
具体的には､ JavaやCシャープをプログラミングする場合､ ポインタを気にする必要はない｡
C言語では､ 自分のメモリの管理を気にする必要があります｡
だからポインターは大活躍です｡
ポインタを定義して使う方法､ 関数や配列で使う方法､ メモリを作成するためにさまざまな標準ライブラリコールを呼び出す方法､
さらにポインタの参照を解除する方法について説明します｡
今言ったように重要なコンセプトなので､ 多くの時間を費やすことになります｡
ポインタを完全に理解しなければC言語を使うことはできないので､ ポインタを頭に叩き込むために､
たくさんの例や実世界でのシナリオを提供するつもりです｡
多くの時間を費やすことになります｡
今回学ぶプリプロセッサは､ コンパイラの前に行われるステップです｡
具体的には､ defineやincludeなど､ 理解する必要のあるディレクティブですね｡
その辺はスルーします｡
コンソールにデータを読み書きする方法であるインプットとアウトプットを説明します｡
printfについては､ これまでにもお話ししてきました｡
これからgetcharやscanfのフォーマット､ 指定子などを使って､ もう少し詳しく説明していきます｡
また､ ファイルへのデータの読み書きを行う方法についても説明します｡
これもコードを書くときにある種重要な概念で､ データを保存する方法なんです｡
C言語にはさまざまなファイル操作がありますが､ そのうちのいくつかを紹介します｡
C言語は非常に低レベルな言語であり､ 多くのことを効率的かつ高速に行うことができ､ ファイルの書き込みや読み込みもその低レベルなものである｡
かなり､ きれいにオペレーティングシステムと対話することができます｡
C言語には標準的なCライブラリがあり､ そこで様々な関数を利用することができます｡
文字列関数､ 文字列操作関数､ 数学関数､ ユーティリティ関数がある｡
これから､ さまざまなライブラリや他の言語と同じように､ より効率的にコードを書くのに役立つ､
これらの基本的な機能をすべて紹介します｡
C言語では､ 文字列を操作してファイルを書いたり読んだりするための､ いくつかの基本を再び提供する予定です｡
数学の関数で余弦や正接を求めるなら､ それはすべて言語が用意してくれています｡
それを学ぶことができるのです｡
そして､ それらが主なトピックであり､ 初級トピックです｡
まだ高度な話題には触れませんが､ 基本的なファンダメンタルズをカバーします｡
ですから､ このコースの終わりには､ 初心者のCプログラムを書くことができ､ C言語の基本的な部分を理解し､
入力と出力の方法を知っている必要があります｡
ポインターの概念など､ ファイル・アイ・オー・ドリルダウンしてください｡
また､ このコースを通して､ 高品質のコード効率的なコードを書くことに焦点を当てることになります｡
これはとてもとても重要なことです｡
ここでも､ ソフトウェアライフサイクルのメンテナンスフェーズに影響を与えます｡
ですから､ もしあなたがエラーを発見して修正したいのであれば､ 高品質のコードを持っていれば､ それはずっと簡単です｡
ですから､ 例題を見ながら､ このコンセプトを学びながら､ 正しい方法を学んでいくのです｡
物事を機能別にまとめるようにモジュール化する方法を学んでいきます｡
私たちは､ さまざまなファイルにおいて､ 互いに影響を及ぼさないように､ 依存関係やカップリングが低いことを確認するつもりです｡
コードに多くの依存関係がある場合､ できます｡
バグを発見して修正するのがより簡単になります｡
また､ プログラムに新しい機能を追加したり､ 新しいコードを追加したりする場合､ モジュール化され､ 機能が整理されていれば､
その作業ははるかに簡単です｡
そこで今回は､ この「高品質なコードを書く」という概念に焦点を当てます｡
私たちは､ 物事をうまく進めるだけでなく､ 正しい方法でそれを行うつもりです｡
講座の最後には､ 自分でエラーを発見して修正できるようになります｡
優れたプログラマーになるために欠かせないのが､ 問題解決です｡
問題解決のテクニックやコードのデバッグ方法､ そして効率的な問題解決者になるための方法などに焦点を当てます｡
これには､ コンパイラのメッセージの理解も含まれます｡
デバッガーの動かし方､ コールスタックの使い方など､ いいところをすべて理解しています｡
問題解決はすべての講義で叩き込まれることになる｡
前回紹介したC言語のトピックの基本的な部分を理解することになります｡
これはC言語の基本的なものになります｡
最後に､ 楽しむということですね｡
モチベーションを上げるために頑張ります｡
楽しくてワクワクするような事例を紹介します｡
講義や演習の最中に眠ってしまうようなことは避けたいので､ 活気あるものにし､ このコースを通して皆さんのモチベーションを上げ､
お役に立てるよう頑張ります｡
だから､ 楽しみなんです｡
私は本当にワクワクしていますし､ 皆さんもC言語についてたくさん学ぶ準備ができていると思います｡
ありがとうございます｡