我が名はなんとか菜である!

主に技術系の記事を書きますが、ポエムも混入します。

理工学部のプログラミング事情

これはTDU Advent Calender 2014 の13日目の記事です。

12日目はUuChzさんの****でした。

14日目はIf_I_were_boxpさんの****です。

 

はじめに

 

理工学部12rd、3年生の八宝菜です。

山奥の緑に囲まれた、とても恵まれた環境でキャンパスライフを送っています。(この文には一切の皮肉を含みません、いや本当に静かでいいとこだと思いますよ)

ちなみに、11日目を書いているcohalzくんは僕の一つ下の後輩です。Ingressではお世話(意味深)になってます。

さて、TDU Advent Calender、早速始めていきましょう。

 

 概要

この記事は、僕が今まで受けてきたプログラムを書く必要のある授業について、自身の独断と偏見でレビューしていくものです。読む価値が有るかどうかは各位に判断していただくとして、これから理工学部に入ろうとしている人や、後輩たちの参考になればな~と思います。

おすすめ度は、自身のスキルアップに繋がるかを、実際の成績評価に倣ってD~Sの5段階評価で表したものです。単位取得のしやすさや、ましては僕の成績とかではない。(ほとんどSやし)

なお、当記事で登場する授業は、2012年度のものです。よって、内容が変わっていたり、そもそもその授業がなくなっている、などの可能性があります。

ちょっと長いので、流し読みする程度がいいかと思います。所詮主観だしね。

 

1年次

情報B

難易度:D おすすめ度:C  使用する言語:C言語

この大学に来る殆どの人にとって、初めてプログラミングというものに触れることになる授業。

RDの学生は入学するとすぐに自分のノートパソコンの購入を義務付けられるが、この授業に関してはパソコン室で授業を受けるため、持ってくる必要はない。

いきなりおすすめ度Cって大丈夫か、って感じですが、大丈夫じゃないです。

去年、僕が後輩に向けて呟いたツイートがこちら。

 

 

はい出ましたnotepad.exe

ただ、学校のPCにはSakura EditerとかTerapadが入ってるので、知ってる人はそれを使えばいいんだけども。よくある義務付けとかではないのでそこは安心。Visual StudioとかのIDEは確か使用禁止だったと思う。Vimは知らん

まあ、初めての人向けなんだし、このあたりは重箱の隅かなぁ。ネタになるので書いただけである。

あと、この授業についていけないとちょっとこの先色々と心配なので、授業はちゃんと聞きましょう。

難易度に関しては、普通の初心者向けの内容で特筆すべきことがない(ていうか覚えてない)ので省略。

 

コンピュータープログラミングⅠ・同演習

難易度:C~B おすすめ度:A  使用する言語:C言語

情報Bは前期ですが、こちらは後期の授業。

この授業最大の特徴は「能力別に数段階のクラス分けがなされる」ところ。

特に最上位の0クラスと呼ばれるクラスは、某C教授というこのあとこの記事でちょくちょく出てくることになるであろう教授が受け持つ。

ちなみに僕は0クラスだったので他のクラスのことは知りません♨

なのでおすすめ度も0クラスのものだと思ってください。

最上位というとちょっとビビってしまうが、実際のところは入りたい人は来てもいいよというスタイル。0クラスとその他クラスでは内容が違い、他のクラスは情報Bの復習みたいな内容しかやらないらしいので、多少無理をしてでも0クラスに来るべきである。

分からない、ついていけない人は教授やほかの出来る人に聞くのが一番よい。大学の授業は横の結束の大切さを学ぶ場でもある。どんどん聞こう。

やる内容は

  • 入出力(printf,scanf etc)
  • 条件文(if)
  • 繰り返し文(for, while)
  • 配列
  • ポインタ
  • 動的確保(malloc)
  • ユーザー定義関数
  • 再帰処理
  • マクロ
  • 分割コンパイル

と盛り沢山である。ていうかC言語の範囲を全部終わらせる勢いだったはず。(ポインタのポインタのような既存知識の応用もやる)

入学前からプログラムをやっていたり、前期の情報Bでプログラミングに対して興味を持った人は必ず0クラスに行くことをおすすめする。前述のとおり、他のクラスでは情報B+αぐらいしかやらない。

以上を踏まえ、C教授の面白さを体感するという意味でも、是非履修しておきたい授業といえる。

 

2年次

コンピュータープログラミングⅡ・同演習

難易度:A おすすめ度:A 使用する言語:C言語

Ⅰの続きの授業であるため、授業形態もほぼ同じである。

Ⅰで受けていたクラスに関係なく、最初に行うクラス分け試験に従って好きなクラスに行ってよい。

なお、この講義でも僕は0クラスだったので、以下は0クラスの内容です♨

ちなみに、僕はこの講義の中間テストで200点満点中50点を頂きました。

が、期末を頑張ったので最終的な成績はSでした。よかったよかった(自慢)

内容としては、C言語の機能については構造体や共用体などに留まり、主にアルゴリズム系になっている。

  • ナップザック問題
  • 巡回セールスマン問題
  • 線形リスト
  • 双方向リスト
  • ソート
  • ファイル入出力

最初2つがなかなかホットである(僕も結局完全に理解出来てない)。

全体的なコンセプトとしては、再帰処理を存分に使おうと言った感じである。C教授が再帰処理大好きっていうのがちょっとあるような。

この授業では、自分でプログラムを書いたりというのもだけど、わからなくなったらGoogle検索に頼ったり、友達や教授に聞いたりと言った情報収集能力が求められる。実際、情報系にはそういう能力が少なからず必要なので・・・。

 

オブジェクト指向プログラミング

難易度:C おすすめ度:C 使用する言語:Java

講義名こそオブジェクト指向プログラミングだが、実際はただのJava入門である。オブジェクト指向とは何か、というよりはJavaの文法やSwing、モジュール構造だのをやることになる。

とは言え、オブジェクト指向の基礎的な考えは学べるので、取っておいて損はない。逆に言えば、他のオブジェクト指向言語経験者にとっては、あまり得られるものはない。

 

ゲームプログラミングA・B (Bは3年次だが、まとめて紹介する)

難易度:D おすすめ度:A 使用する言語:C#など(Unity、XNA?)

さて、ここまではプログラミングの基礎のような授業が続いたが、この授業に関してはかなり実践的なものを行う。

実はこの授業、S教授とT教授の2つのクラスがあり、S教授のクラスではUnityを扱う。

クラス分けの規則が、僕の受けた時と今年度で違うらしい(僕の時は自由に取れたが今年は学籍番号だとかなんとか)が、指定された方に行く必要はなかったはず?(不正確なので信用しないように)

T教授の方はXNAらしい。なんとまあ・・・と思ったので僕はS教授クラスに行きました。

S教授の最終課題がUnityを使って何か一つゲームを制作するというものなので、Unityでゲームを作ることに興味がある人は是非履修しよう。

ちなみに、S教授の授業は毎回こんな感じの自由課題が出る。覚えておくと学期末に時間がない進捗もないウワアアアアアとならずに済むであろう。

なお、ゲームプログラミングはAでは2D、Bでは3D程度の違いであるので、まとめて紹介した。(2Dと3Dの差が"程度"という語で片付いちゃうUnityしゅごい。)

 

コンピューターグラフィックスB

難易度:C おすすめ度:D 使用する言語:C++

ウワアアアアC++ダアアアアアアアアアアアアwwwwwwwwwwと思っていたのか?

簡単にいえばDirectXを使おうという授業。

だが、典型的な「教授と教授のコードがクソなせいで台無し」という授業である。

難易度が最低+1なのは、教授のコードを読み解く難易度のせいである。

「ヘッダファイルとcppファイルが1つずつの、DirectXを使用するためのソースコードを、複数画像にして配布し、書いたものを毎週提出させる」といえば何となく分かって頂けるだろうか。

かの教授の書くコードにはC++の面影はなく、神クラスと意味のない無名名前空間が跋扈する魔境である。

正直ググって自分で書いたほうが100倍有意義な上、それであれば2時間ほどで終わる。半期受ける意味はない。しかもこの授業、金曜5限なので色々とモチベーションに関わってくる。まるで残業してクソコードを書いている気分だ。(社会人各位に喧嘩を売る発言)

最終課題は自由作品を作るアレである。ちなみに、作ったゲームが入ったフォルダのみ提出すればよいため、例えばDxLibなどを使って作ってもバレない。友人は実際それで単位が来ていた。一体なんのための授業だったんだ・・・。

 

(3年次の授業に関してはそのうち書きます)