nigoblog

技術系会社のCEOブログ~私的編~

高専のカリキュラム! 情報工学を体系的に学ぶために高専のカリキュラムをまとめる。

今回は「情報工学を体系的にやりてぇな...」という方のために
情報工学を体系的に学べるような記事を書きます。

内容は高専のカリキュラムを時系列にまとめ、参考になった教科書などを!

というわけで1年目から書いていきます~

もちろん思い出しながらなのでヌケモレが有りそうですが…

1年目

ここではぶっちゃけ専門はほとんどありませんでした。
やったことは

コンピュータ・リテラシー

色々Linuxに触れてみよう的な感じの授業。
最初にセットアップして、Emacsとかコマンドラインとか徹底的にやりました。
バッファの概念とか当時はさっぱりだった気が。
とにかくコマンドラインを使いまくったのでその時やっといて本当に良かったなと。

情報数学

何が情報数学なのだかようわからなかったけど、

  1. 数列
  2. 証明
  3. 2進数
  4. 不等式
  5. 集合論

なんかをやりました。他にも合った気がするけど。
今後情報系のなにがしを理解するのに重要な数学。
この後出てくるかも...!?
なぜか青チャートを使ってました。

新課程 チャート式 基礎からの数学I+A

新課程 チャート式 基礎からの数学I+A

というわけで1年生の時はこんな感じ。よく覚えてんな。



2年目

まだまだ少ないですが、

という感じ。

情報工学基礎1

これは主にPCの内部の話。CPUがどうとか、メモリがどうとか。
特にメモリ関連のレジスタとかアドレスは後にポインタとかをやるのに重要な概念。

情報工学基礎2

これはアルゴリズムやデータ構造がメイン。
例えばスタックやキューなんかの概念なんかを。
データ構造は何かアルゴリズムを実装する際に効率よくやるために重要な概念なので是非押さえておくべき。

ソフトウェア工学の基礎みたいなやつ

これはタイトルが思い出せずまんまの見出し。
というわけでソフトウェア工学の基礎みたいなやつも2年次にやりました。
具体的にはウォーターフォールの話だった気がする。
5年次に詳しくソフトウェア工学をやります。

参考図書は基本情報技術者の参考書を使ってました。

情報数学2

これも今後の情報工学を学ぶのに重要な概念。

  1. 命題、ブール代数
  2. 確率、エントロピー、状態遷移図
  3. 電気回路
  4. 線形計画法、アローダイヤグラム

という感じ。電気回路がなぜあったのかはわかりませんが、キルヒホッフの概念は電気回路以外にも応用出来るのではないかと最近考えています。(経理とか)
ブール代数関連は今後かなり重要な概念で、3年の論理回路でかなり使います。
参考図書はなし。先生のレジュメでした。

プログラミング言語

ここで初めてプログラミング言語を!
最初はschemeというLISPをやりました。
イメージ的には再帰を学ぶのに半年使ったって感じ
行列の計算とかベクトルの計算とかクソつまらんかった記憶がありますw
ただ後にもっとつまらないC言語というのをやります。
これも残念ながら参考図書はありません。

次の3年から一気に専門が増えていきます

3年目

3年目はこんな感じ

やや増えて来ました。

論理回路

これはビットを色々操作する感じの話。n進カウンタとかフリップフロップ回路とか。
PCの内部をしっかり理解するのに最もベーシックな概念。
ボスは自動販売機!

参考図書はこちら

論理回路理論 (基礎情報工学シリーズ)

論理回路理論 (基礎情報工学シリーズ)

確率統計

これはもう当時さっぱりでしたね。
ベイズの定理から各分布の勉強をしてました。

参考図書はこちら

確率・統計

確率・統計

結構薄い本だった気がする
統計に関しては漫画で分かる系も良い
マンガでわかる統計学

マンガでわかる統計学

アルゴリズムグラフ論

これは2年の時の少し深くなった版とグラフ理論の話。
アルゴリズムはソート・探索・文字列探索のアルゴリズム
特に探索アルゴリズム関連は重要かと。
グラフ理論はハミルトングラフとかその辺。
今後facebookとかのグラフ解析とかもやりたいと思っているので、思い出そうかな。
他にもNP完全問題の話とか面白かったな…

電気回路

情報工学との関連が遠すぎて当時は理解出来なかったですね。
今はどんな問題も簡単に解けると思いますが。
複素数とか微分方程式の概念をしっかり学べたのは重要ポイント。
実際に微分の物理的意味とかがわかってくるところ。

参考図書は忘れました

C言語

最大の壁ですね。おそらくみなさん相当苦しんだのでは?
ポインタが最大のつまづきポイント。セグメンテーションエラーとか毎回パソコンぶっ壊そうと思ってた。
ベタですがカーニハンのこの本

プログラミング言語C 第2版 ANSI規格準拠

プログラミング言語C 第2版 ANSI規格準拠

コンピュータ・ネットワーク1

これは4年にコンピュータ・ネットワーク2もやるんですが、内容をまとめて。
とりあえず「アプセトネデブ」だけ覚えとけって感じ。
今思うとほんとしっかりやっとけばよかったと思う教科の一つ。
各レイヤの役割は覚えているけど、おそらく社内LAN構築してって言われても今いきなりは無理w

CCNAの本で学びました

シスコ技術者認定公式ガイド CCNA【ICND2】編(試験番号640-816J/640-802J)

シスコ技術者認定公式ガイド CCNA【ICND2】編(試験番号640-816J/640-802J)


まだ専門があったきがするけど3年生はこんな感じ

4年生

この年は結構重要なのがちらほら

という感じ。

応用数学

主にフーリエ変換とベクトル解析。
フーリエ変換はマジで重要なのでやっててよかったなと。
(大学入って全ての教科でフーリエ変換があった半期が…)

どの本だったか忘れました。。。

電子回路

主にトランジスタとかFETとかの話。
これも大学入ってから役立ちました。

電磁気学

電気系の基本ですね。
マクスウェル方程式は今でもいえますw
ただ高専時代はテストに公式とか書いてあってぬるかったなと思いました。後に
大学でベクトル解析を理解して電磁気学やり直したら色々スッキリしました

計算理論

チューリングマシンとか正規表現のメカニズムとかその辺。
他にも論理回路の復習的な内容だった気がする

コンピュータ・ネットワーク2

だいたい3年の時と同じ。
ARPとかRARPは重要かも。

オートマトン

有限オートマトンとか文脈自由文法とかその辺の話。
後にコンパイラを理解するのに重要な概念。
さらに自然言語処理とかでも重要。

教科書はこれ

オートマトン・言語理論 (基礎情報工学シリーズ)

オートマトン・言語理論 (基礎情報工学シリーズ)

オーム社多め

オペレーティングシステム

Linuxのシステムが事細かに書かれている本
LinuxはモノリシックなOSということを初めて知りました。
デーモンとか割り込みとか
そういう概念とかを主に。
もっとしっかりやっとけばよかったと思う教科の一つ

Linuxカーネルというクソ読みにくい本を渡され、
「わかりにくい本を読む練習だ」とか言われました。

実習Linuxカーネル―理論と実習 カーネルを効率的に理解するための実習書

実習Linuxカーネル―理論と実習 カーネルを効率的に理解するための実習書

  • 作者: ゲーリーナット,Gary J. Nutt,浜田真理,浜田光之
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2001/12
  • メディア: 単行本
  • クリック: 3回
  • この商品を含むブログ (7件) を見る

デジタル制御

すごくラプラス変換をやりました。
他にはシステムの安定性など。
どちらかと言うと機械制御の話。
今でこそ利用していないけど、将来ハードウェアの事業をやる時に役立つかも…!

覚えてないけど適当に制御工学とかデジタル制御とかググれば色々出てきます。

数値解析

計算機だけで微分積分、ルートの計算などをやる話。
誤差の部分はかなり重要で、しっかりやりました。
スプライン補間とか懐かしい…
ビジネスにおいても使いそうな概念。(未だにその場面には出会ってないがw)

教科書はこれ

数値計算 (サイエンスライブラリ理工系の数学)

数値計算 (サイエンスライブラリ理工系の数学)

Java

C言語にくらべかなり楽だったきがする。
ただヌルポが出て時は毎回PCを壊そうかと思ってました。
これについて言及したいのが、オブジェクト指向の概念をしっかり座学で教えるべき。
オブジェクト指向単体で授業がないとダメだと思う。
あとはUMLもやったけど、もっとしっかりやるべき。
社会人になってから思うと何かと漏れが多い授業だった。

本はこれ

やさしいJava 第4版

やさしいJava 第4版

4年は盛りだくさんでした。

5年目

高専の集大成ともいえる学年

  1. コンパイラ
  2. データベース
  3. 計算機アーキテクチャ
  4. 情報理論
  5. 情報伝送工学
  6. メカトロニクス
  7. ソフトウェア工学
  8. CG関連
  9. C言語関連の実験
  10. Latex関連の実験(エグいやつ)

こんな感じ

コンパイラ

これはコンパイラ一般って感じ。後に自然言語処理とかにつながりそうなやつ。

  1. 構文解析
  2. 字句解析
  3. 意味解析
  4. コード生成

このような流れでコンパイラは動きます。
4年目にやったオートマトンとか状態遷移図が重要です。

こんな教科書

コンパイラ (情報系教科書シリーズ)

コンパイラ (情報系教科書シリーズ)

データベース

これははっきり言って意味がなかった。
というのも座学でやる意味がないということ。
掲示板でもなんでもいいからwebアプリケーション一つ作らせるのがデータベースを理解させる近道だと思う。
というかRDBMS以外にも今後NoSQLとかを教えないとと思う。

計算機アーキテクチャ

これが情報工学において超重要!
オペレーティングシステムも重要と思ったけど。
CPUやメモリ関連の話。メモリの局所性はサーバーやインフラ関連の職につく人なら重要な概念。
未だに主記憶、フラッシュメモリは何でできているか?という問いに答えられるほどしっかりやりました。

コンピュータアーキテクチャ (電子情報通信レクチャーシリーズ)

コンピュータアーキテクチャ (電子情報通信レクチャーシリーズ)

これは良書だと思う

情報理論

これもかなり重要。誤り訂正とか誤り検出から始まり、符号化の話がメイン。
Webのしごとしてて使うかどうかは微妙なところだけど。

情報伝送工学

こちらは主にアナログ通信の話。
大学入ってデジタル信号処理やデジタル伝送工学とかをやるのに重要だった。
まぁ当時は全く理解出来なかったけど。

メカトロニクス

今流行のデバイスを動かしてみよう的なやつ。
最初は各種センサー等の説明から始まり、実際にデバイスを動かすまで。
初めてC言語が面白かった。

ソフトウェア工学

開発手法に関しての話。
主にウォーターフォール関連。当時アジャイル開発をスパイラルモデルみたいな言い方してたっけ。
実際には若干違うだろうけど。
未だにウォーターフォールをやってたらぶっちゃけ意味ないと思う教科。
大半はSIer行くだろうから重要なのかな。
他にも暗号関連とかも。何より先生が強烈で途中の雑談で編入先の横浜国立大学が2流大学と紹介された良い思い出。

CG関連

POV-Rayを用いて色々やりました。
座学のベクトルや回転行列がしんどかった思いで。

C言語関連の実験

主にcursesライブラリを使って色々作りました。
画像処理ソフトとか作ってこちらもC言語だけど楽しかった。

Latex関連の実験(エグいやつ)

高専生活色々エグかったけどこれが一番群を抜いてエグかった。
実験の内容レポートのダメ出しを返却時にやる。
個別にダメ出しするより一人に大声でやることで同じミスをした人に理解させる方法。
確かに良い方法でした。今思えば。
メインはLatexといいつつ、実際には自作でschemeを作るというエグい内容。
大変だったなー

中でも個人的に重要な教科

数学系

コンピュータサイエンス

という感じかな。ソフトウェア工学が今風であればそれも。

まとめ

というわけで以上が高専で学んできたことです。
体系的に学びたいと思った方は是非参考に!
しっかり教育のプロが考えた内容なので!
ただ苦言を呈するならば

仮に自分だったらこんなカリキュラムにします。
他にもWeb関連のサーバークライアントアプリケーションの開発はするべきだったなと。


以上、高専で学んだこと大放出記事でした。
情報工学を体系的に学びたいならば是非参考に!

そしてそんな高専を卒業した今私はスタートアップでSmart Canvasというサービスを作っています。
Smart Canvas | WEBコンテンツやHTML5サイトを簡単作成
是非ご確認を!

追記 8/6

色々勘違いさせてしまったので、
追記記事を書きました
続・高専ってすごい!いいことばかりではない高専の実態を事細かに伝える。 - nigoblog