250時間かかった科目も! コンピュータのクラスの課題とは?

みなさんこんにちは!アメリカのブラウン大学に留学中のKentaです。

今回は、前回の記事に続いて僕が今学期(2021年秋学期)にとった科目についてお話ししたいと思います。

僕はいま(2021年12月下旬)、シカゴの空港で4時間にわたる乗継便待ちをしています。1つ驚いたのは国内便の利用者がとても多いことです。アメリカもオミクロンの影響を受け始めていて大変なのですが、日本のように規制が引き締まっていないので少し心配です。

では、本題に入っていきましょう!

植物図鑑
課題でつくった植物図鑑のページ

Introduction to Computer Systems

この科目は、Systemsというように、コンピュータのソフトフェアをつくるというよりは、コンピュータの構造を理解しようというものです。言語はCを使いました。

たとえば、みなさんの使っているパソコンがどのようにファイルを保存しているのか、どのようにコンピュータメモリが機能しているのか、どのように複数のプログラムが同時進行で互いを干渉しないようにするのか、こういったことが学習内容です。

僕が気に入った宿題を2つ紹介します。

1.Shell

自作のShell
自作のShell

みなさんはShellってご存じでしょうか?

簡単に説明すると、Shellというのはパソコンと私たちがコミュニケートする手段です。

  • ファイルやフォルダを作成・削除する
  • アプリケーションを開く
  • プログラムを書く・実行する

などの機能に対応しています。

みなさんのパソコンがどのオペレーティングシステム(MacやWindowsやLinux)であっても、必ずShellは存在します(僕の場合はCommand Prompt/Windows Shell/Git Bash)。

この宿題は、「Shellを一から作成しろ」というものでした。といっても一人前のShellではなく、以下の機能を実装したShellです(少しテクニカルなので簡潔にします)。

  • cd, rm, ln, exitコマンドの対応(cdはフォルダの移動、rmは削除、lnはリンクといい、ファイルとフォルダをつなげるもの、exitは僕のShellを閉じるコマンド)
  • SIGINTなどのシグナルハンドル
  • pid やjobを使ってのbg と fdの実装(bgはいま実行されているプログラムを背景にもってき、fdは背景で実行されているプログラムを表にもってくる)

僕が何を書いているかわからない人はすみません。要はかなり労力のかかる宿題でした(笑)。

2.Buffer

この宿題はたしか3つ目の宿題で、難易度はそれほどでもないのですが、内容がおもしろかったので紹介します。

ハッキングの手法の1つにBuffer Overflowというものがあるのですが、この宿題は与えられたコードを解読し、いくつか修正点を加え、プログラムをハックしろというものでした。

コンピュータメモリというのは複数の階層に分かれており、その1つがBufferです。そしてBufferのすぐ上にはStackというものがあり、私たちのコンピュータは、Stack内にある指示に従いプログラムを実行します。

Buffer Overflowは、Stackのすぐ下にあるBufferをでたらめなもので埋め、Stackの領域に侵入し、私たちがコンピュータに実行してほしいプログラムのアドレスに入れ替えます。そしてコンピュータがそのプログラムを実行したときにハッキングが起こるわけです(現実世界ではここまで単純ではないのでご安心を)。

この宿題で大変だったのは、与えられたコードを理解するところ、Buffer のサイズ、StackとBufferのアドレスを見つけることでした。Gdbというツールを使って、一行一行コードが何をしているかを理解しなくてはいけなかったため、かなり苦痛でした。

でも、この科目を履修し終えた感想は、「ものすごくおもしろい」に尽きます。いままでコンピュータを使う中で、Shellやメモリに注意を向けることはありませんでした。このクラスをとり終えたいま、それらについて理解が深まっただけではなく、日々の生活においても新しく得た知識を使えるようになりました。

加えてC言語を学べたことで、他の言語(JavaやPython)にはないアドレスやポインタの知識や、よりきれいなコードを書くことをつねに意識する習慣もつきました。

Introduction to Software Engineering

打って変わってこの科目は、コンピュータのソフトウェア作成を中心としたクラスです。

当初は履修登録することができなかったのですが、補欠リストから繰り上がって履修することができました。

このクラスは週に平均20〜25時間というワークロード(課題)があることで有名で、今学期はそのワークロードを軽減しようと、レターグレード(ABCによる成績評価)からパス/フェイル(S/NCによる評価)に変更されました。要はこのクラスの課題を終わらせる努力をすれば単位は獲得できるということです。

この変更にはネガティブな点もあり、それについては後で触れたいと思います。

プロジェクトは2つあり、その上に最終課題があるといった感じです。それに加えて毎週ラボがあり、異なるトピックをカバーしました(React、HTML/CSS/JS、SQL、APIなど)。

1つ目のプロジェクトは大したことなかったので、2つ目のプロジェクトと最終課題を紹介します。

1.Maps

この宿題では

  • 最初の2週間でスクリーンリーダーの実装
  • 次の2週間で簡易版Google Maps(ブラウン大学の地図)の実装

という形で構成されていました

スクリーンリーダーとは、盲目のかたや、ウェブを利用する上で何かしら不便しているかたのためのプログラムです。文章の読み上げ(スピード調節・音量調節)や、ウェブサイトとキーボードの互換性などに対応するようにしなければなりませんでした。

大変だったのは、このスクリーンリーダーがすべてのウェブサイトで動くようにコードを書かなければいけなかったところです。ウェブサイトによって構造(HTMLの書かれかた)が違ったためです。

後半もかなり大変で、まず莫大なデータを取り入れる必要がありました。そしてそのデータを得た後はウェブに表示しなければいけなかったのですが、このやりかたというのが、線を一本一本引いていくというもの。

全体地図を実装した後は、ズームイン・アウトの機能を実装しなければいけなかったのですが、これもかなり大変でした。最後にクリックドラッグの機能も実装しました。

2.BloomO(最終課題)

ログイン画面
ログイン画面

6人グループで最終課題に取り組みました。内容は庭師用のウェブサイトの作成で、以下の機能をもっています。

ログイン・ログアウト

ユーザーはこのウェブサイトにログインすることで自分のアカウントをつくることができます。

植物図鑑

ユーザーは植物のラテン語の名前を入力することでその植物についてのもっと詳しい情報と写真を閲覧することができます。ラテン語の名前がわからなくても、植物名からのラテン語変換検索もあるため大丈夫です。そしてユーザーは、もしその植物が気に入ったら♡ボタンを押して、お気に入りリストに入れることができます。

ハーディネスゾーン検索

植物を植える上で、自分が住んでいるところでどのような植物が育つかを理解することが大切です。そこでハーディネスゾーン(植物耐寒ゾーン)というものが使えます(各ゾーンによって年間を通しての気温などが違う)。これは郵便番号を入力することで検索可能です。

植物レコメンデーション

ログイン後、そのユーザーのお気に入りリストをもとに、「今度はこの植物を植えてみたら?」というレコメンデーションをします。推薦の数や、ハーディネスゾーンも指定可能です。

 

さて、先ほど、このクラスの成績のつけかたが変わったのでネガティブな点があると言いましたが、もう少しそれについて触れたいと思います。

このクラスで単位をとるためには、すべてのプロジェクトを終わらせる必要はありません。仕事は他人に任せてしまおうという人もいて、じつは僕の知る限り大半の人がそうでした。

そのため最終課題は6人グループであったにもかかわらず実際3人しか稼働していないといった状況で、私たちの負担も倍増した感じです。しかしその分、ソフトフェア開発の知識や興味が倍増したこともたしかです。このクラスには200〜250時間をかけることになりましたが、それだけスキルも身についたのでよしとしましょう(笑)。

では、また次回の記事でお会いしましょう!

Kentaくんの記事一覧



▼ 読むだけでアメリカ留学に役立つ資料をお送りします。

留学資料を無料でとりよせる

留学相談 留学講演会
留学中の就職支援