プログラミング言語演習の授業を開始するにあたって

Apr2017 担当 coskx

1.情報技術者とコンピュータ愛好家

 皆さんは,情報工学科に配属になりました。皆さんの先輩は,様々な知識を使った組込システム開発,携帯電話通信システムの開発,金融システムの開 発,ベンチャ企業の運営に携わっています。学生の間に授業で修得したこと,独習で修得したことを組み合わせて,現在の仕事に立ち向かいさらに スキルを磨いています。 皆さんも将来は,様々な課題を,コンピュータを武器として解決してゆく技術者になるでしょう。「私は情報工学科卒業なので,コンピュータのこと以外には興 味がありません」という技術者は役に立たなくなっているでしょう。様々な技術に好奇心を示し,様々なアイディアの源となるように,目をひろげて行って下さ い。「コンピュータのこと以外には興味がない」というのは情報技術者ではありませ ん。ただのコンピュータ愛好者です。

2.この授業の意味 (C言語しかやりません)

 「プログラミング言語演習」の授業は情報工学科の基礎の基礎で C言語を修得するための授業です。 後に続く科目で C 言語が多くつかわれます。世の中には非常に多くのプログラミング言語があり,最近はオブジェクト指向の言語が多く使われるようになっています。 (Java,C++,C#,perl,PHP) オブジェクト指向の言語には重要な機能をまとめて使いやすいクラスライブラリが多数用意されているからです。 しかしこの授業で取り上げるのは,構造化言語の代表的言語の C です。C 言語でプログラムの振る舞いや構造を理解していれば,新しいオブジェクト指向言語も数週間のうちに習得できるからです。 これからWeb テキストを使ってCを学習するわけですが,同じところにJavaのWeb テキストがあります。 最初のところはどちらもおなじようなことを学習していることがわかると思います。Javaでは後半にクラスという概念が出てきますが,C の構造体の概念が拡張された形になっていることがわかると思います。クラスインスタンスでは Cのポインタの概念が出てくることもわかると思います。
小坂の公開アプリhttp://www.vector.co.jp/vpack/browse/person/an003901.htmlのプログラムはC++とC#で書 かれたものです。 皆さんが使うことになる課題提出システムは,小坂が PHP で書きました。正確に言うと,PHP のプログラム を生成するプログラムを Cで書いています。他にも現在市販中の製品に組み込まれている小坂のアプリは C, C++で書かれています。C言語以外の言語は,その都度マニュアルを参考にしながら書いています。

3.プログラミング言語の難しさ

 プログラムは,機転の利かない石頭のコンピュータに,限られた語彙で,やってほしいことを整理して伝える命令手順書です。プログラムの基本的な制御構造は 3 つしかないことがわかっています。英語 のような自然言語を覚えるよりはずっと少ない労力ですみますが,語彙が少ないだけに特別な言い回 ししかないので,それを組み合わせてプログラムを組み立てるためには,「こつ」が必要です。これには慣れるしかありません。早く言い回しの特殊性に慣れてください。 授業では多くの例題を見てもらい,多くの演習を行って慣れてもらいます。よくわからないことが あっても,しばらくの間は「理解してないけれど,こうすればうまく動かすことができる」「これはお まじないということにしておきましょう」というだけで先に進むこともあります。後でしっかり理解 できますから,「このように書けばこう動く」といった使い方だけわかったらあまり気にせずに,先に進みましょう。(この学習方法が,積み重ね学習の数学と違うところです)

4.プログラミング技能の習得と授業の関係

 年間に 90 分×40 回程度の授業がありますが,60 時間にしかなりません。この時間だけでプログラ ミング技能を習得できるわけではありません。放課後などを利用して頑張ってください。課題もたく さんあるので,放課後を有効に利用してください。課題を早く終わろうとして解説を読まないという のはだめです。解説をしっかり読んでから課題に取り組んだ方がはやく終わります。 解説は 1,2,3…と続きますが,時々A,B,C…も目を通してください。こちらの方がためになること があります。
 なんとか動けばよいというプログラムはだめです。プログラムの 1 行 1 行の意味が明確になるように書き ましょう。またプログラム中の字下げはプログラムを読むときに大事になります。プログラム例を参考にきれいなプログラムの書き方を覚えましょう。(書き方の例はいろいろありますが,この授業では C 言語開発者の書き方に準じています)1 年後の自分は他人です。よいプログラムは他の人が見ても何をしているのかよくわかります。こういうのを保守性の良いプログラムといいます。
 課題をはやく終わった人は,友人のプログラムの相談相手になってください。プログラミング能力 はコミュニケーション能力に関係があります。友人に説明する中で,自分の頭の中が整理されて,も っと明確なプログラムを思いつくことがあります。またわからないところは教員や友人にどんどん聞 きましょう。 友人のプログラムを中身がわからないままコピーして提出するのは時間の無駄です。定期試験でふるい落とされますし,そのまま社会に出たらもっと悲劇です。友人のプログラムを参考にさせてもら うのはよいことですが,内容を理解して課題提出しましょう。その際にプログラム中(コメント三行目に)に友人の名前を書いて謝意「・・・さんのプログラムを参考にさせて・・・感謝いたします。」を示しましょう。
 プログラミングの修得は,それまでに修得している類推する力,要点を見つけ出す力に依存します。 そのため,まったく初めてプログラミングの学習を始めても,理解速度の個人差が広がります。そのため,この授業では一斉説明はほとんどしません。みなさん は自分で説明を読んで自分で課題を解いて前に進みます。教員の仕事は,遅れている学生,課題プログラムに苦戦している学生の支援になります。 教員は巡回しているので困ったときには声をかけてください。

5.授業と定期試験

 授業中の課題演習ではプログラムを作る能力(writing)を試します。授業では Web 教材を使いま す。多くの課題を出します。課題の提出はアップロード+Web 公開の形で行います。授業時間内では 課題をやりきれないと思います。期限を守って提出できるように時間外にも課題をやってください。 情報工学科の先生を見つけて,クラス。氏名を名乗り,使用目的を話して部屋を開錠してもらってく ださい。作成した課題プログラムは,USBメモリやインターネット上のファイルサーバなどに必ず保管してください。(個人情報はこれらのものに保存しない ようにするのはITの常識です。)
 定期試験ではプログラムを読む能力(reading)を試します。Web 教材中の練習問題や,予想問題・ 過去試験問題でしっかり練習して試験に臨んでください。

6.成績

 授業の流れは,1年間の設定ですが,前期は「プログラミング言語1」後期は「プログラミング言語2」として,別々の成績になります。成績評価は「各試験での持ち点」および「必須課題の持ち点」でつけます。
   ただし 「中間試験の持ち点」=「中間試験時の得点」,
   「期末試験の持ち点」=(「中間試験での持ち点」+2×「前期末試験時の得点」)÷3,
各期の「試験の持ち点」を p(100 点満点),課題点を q(30 点満点)とすると,成績評価点は p×0.7+q となります。
 なお,S評価は,発展課題も含めて全課題が提出してある場合のみ95点以上の評価点に対して与えます。 提出が遅れた課題は課題点(30 点満点)を 1 点減点します。 この 1点ずつの減点に泣いた先輩もいます。あなどらないでください。成績評価時において未提出課題は課題点(30 点満点)を 10点減点します。

再試験を行なうことがあります。
中間試験では「試験の持ち点」を60点に回復するためのものです。(いくら頑張っても60点にしかなりません)
期末試験では「試験の持ち点」を43点に回復するためのものです。(いくら頑張っても43点にしかなりません)
43点×0.7=30.1 これに課題点30点を加えるとC評価になります。 

7.Web 教材について

http://tokyo-ct.net/usr/kosaka/                   ←自宅を含む学外からアクセス可能
https://coskxlabsite.stars.ne.jp/html/                    ←推奨 自宅を含む学外からアクセス可能
http://tnct20.tokyo-ct.ac.jp/~kosaka/index.html    ←推奨 学内専用

課題はこの教材中の左側「● 授業・演習 レポート提出」にあります。
また自宅の PC にコンパイラ(情報工学科の Microsoftとの契約)とエディタを無償で導入できるように なっています。必要な学生は情報工学科教員に問い合わせてください。