見出し画像

システム設計の非常勤講師を4ヶ月してみた(これからも続くけど!)

こんにちは「つけらっとゲームス」プログラム担当のとちです。
この7月から、ご縁があって外部の非常勤講師として学生に「システム設計」や「アルゴリズム」を教える立場になりました。

今回の記事はその感想をまとめ、これからを考えてみたいと思います。
関連記事は以下にありますので詳細を知りたい方はご覧くださいね。

学校側から情報系学科1年生の「システム設計」の時間を担当して欲しいと言われ、実際に講義していますが、そもそも「システム設計」とは何なのかを考えてみましょう。



システム設計とは?

システムを構築する実作業をする前に、必要な機能や仕様を決め「仕様書」「設計書」に落とし込む作業を「システム設計」だとしましょう。

というか、わたしはそれが「システム設計」だと思っています。

正直、書類を残すのって大変なんですよね…

ここで言う「実作業」とはプログラムを書いたり、イラストが必要ならイラストを描く、BGMが必要であればBGMを作るといった作業を指します。

受託開発であればクライアントの業務内容を理解するところから始まります。その業務で抱えている課題をプログラム化して解決するための設計が「システム設計」と言えるでしょう。

また、自分が作りたいアプリを作る場合は「あのDBが必要だ」「この画面が欲しい」「あのイラストはあそこで表示」「この場面はあのBGMを流そう」といった風に頭の中である程度の方向性が浮かび上がってきます。
これも「システム設計」と言えるでしょう。開発仲間がいるなら設計書として文書化した方が便利だったりしますよね。


どんな人材を育成する勉強なのか?

情報系の専門学校で取得を目指す資格に「基本情報技術者試験」というのがあります。わたしが学生だった当時は「第二種情報処理技術者試験」という名前でした(詳しくは下のリンクからどうぞ!)

この資格試験に出てくる問題はプログラムやアルゴリズムだけでなく、ハードウェアやネットワークに関するものや、マネジメント、ストラテジに関する出題もあります。

要するに上記の資格取得を目指すということは、純粋にプログラムだけ組める人を育成するのではなく、広範囲の知識を持って様々な問題を情報化して解決できる人材を育成するのが目標なのでしょう。

「何を」「どうやって」教えたらいいのか毎回悩んでますわぁ…

システム設計の時間は必要なのか?

わたしが学生の頃に「システム設計」を学ぶ時間はあっただろうかと考えると思い出せないんです。仕様書はプログラムを書く際に与えられるものであって、自分で書いた記憶はありません。システム設計書も書いたことありません。

学生にとって「仕様書」「設計書」は「先生が書くもの」で課題の問題文といった存在かもしれません。

しかし、学校を卒業しソフト開発会社で仕事をするようになると所属部署が担当しているシステムの「仕様書」がキャビネットに並んでいました。つまり誰かが資料としてまとめているんです。そして自分がシステムを組むようになり、それが複数人のチームになると必要性を感じるようになります。

とはいえ、改めて「システム設計」を教えて貰った記憶はないのです……

なのに今の自分はシステム設計を教えてる、なぜ教えているのか?
開発を進めると「あれが足りない」「あれをやっておけばよかった」といった後悔や失敗が必ず出てきます。多分そういった経験が「システム設計」につながっているんですよね。必要に迫られて自動習得したような感じ?

じゃぁ教える必要ないんじゃね?

いやいや、先に疑似的でもいいので経験を積んでおけば「あれが足りない」といった後悔や失敗を減らせる。つまり学ぶ時間が無いよりは、あった方が良い。という結論に辿り着きました。


ここでようやく記憶が繋がった!

わたしは商業高校の情報処理系学科から専門学校の情報系学科に進学しているので、同年代の普通学科に進学した友人たちとは少し違う勉強をしていました…というのを踏まえて、

ここまで「システム設計を教えて貰った記憶がない」と言ってましたが、高校の「経営数学」の時間にクリティカルパス法(PERT図)を習っているんですよ。

例:月見チーズバーガーを作る 講義用にクリティカルパスの資料を作ってみました。

クリティカルパス法(クリティカルパスほう、英: critical path method, CPM)またはクリティカルパス分析(クリティカルパスぶんせき、英: critical path analysis)は、プロジェクトの一連の活動(アクティビティ)をスケジューリングするための数学的アルゴリズムである。効率的プロジェクトマネジメントのための重要なツールである。

フリー百科事典『ウィキペディア(Wikipedia)』より引用

よく考えたら進捗管理はプロジェクトをマネジメントする要素のひとつなので、つまりはシステム設計の勉強をしていたんです。学生時分のわたしには何に繋がる勉強なのか正しく把握できていなかったんでしょうね。

そう考えると「待ち行列」「確率」も習っていて経営数学の時間に勉強したことを、ゲーム中に処理する乱数なんかに使っているなぁーと、ようやく記憶が繋がってきました。


わたしが教えるべきことは?

前述したとおり、疑似的でもいいので経験を積んでおけば「あれが足りない」といった後悔や失敗を減らせる。つまりシステム設計を学んでいないよりは、学んでいた方が良い。

正直、書類を残すのって大変なんですよね(本日二度目)

では、学ぶべき要素は何か?
わたしが高校生の頃に習っていたことは教えた方がいいけど、それ以上に、「何に使う知識なのか」を教えるべきなのかなぁ?

とは言うものの、人に教えて貰う受け身の授業だと、どうしても飽きてくるんですよね…刺激のある楽しい授業って難しい。

今後の目標は「刺激のある楽しい授業」だなと、四ヶ月目のLv1外部講師は考えているのでした。

そんなLv1外部講師、本当は自分たちでゲーム作っている人です。
こんなゲーム作っていますのでご興味がございましたらご覧ください!

どうやってゲームを作っているのかを知りたい方はこちらもオススメです。

それではまた、次の記事でお会いできるのを楽しみにしております!

この記事が参加している募集

やってみた

この記事が気に入ったらサポートをしてみませんか?