わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

BYODでC

BYOD (Bring Your Own Device)のPCで,授業や自習でCプログラミングをする場合,ソースファイルの編集やコンパイル実行に関して,何を使用するのがよいか,現在,思案中です.担当授業の昨年度の状況と,BYODでCプログラミングの候補となるいくつかの手段,そしてそれぞれのメリット・デメリットについて,メモしておきます.

2017年度の授業

学部内で情報処理教育の担当をしておりまして,前期に2コマ(週1コマで2クラス),後期にも同様に2コマの授業を受け持つほか,もう1人の情報処理教育担当の先生と半々の割合で,各授業の教材作成をしています.
昨年度より入学者はBYODのPCを使用することとなり*1,前期の情報処理科目も,「自分のPCを適切に管理して活用する」という趣旨のもと,講義室で実施し,ノートPCを持参させました.
後期はこれまでどおり,演習室(いわゆる計算機室です)のデスクトップPCを使用しました.このPCは,Windows/Linuxのマルチブートができます.第1回の授業では,Windowsを起動して大学のアカウントでログオンし,前期に実施したタイピング練習を使ってもらい,その後は参考書*2に載っている経路問題を解きながら,アルゴリズムの概念について学んでもらいました.
第2回はLinuxを起動し,ls,cd,cat,cpといったファイルやディレクトリに関するコマンドを実行してもらいました.ファイル作成にはgeditを使用し,日本語入力もWindowsと同じキーで行えることを確認しました.このLinux使用は,以前は前期に1回分をとって実施していましたが,BYODでLinuxを使うというのは容易ではなく,昨年度より後期授業に組み入れられました.
第3回から第7回まではCの学習となります.いずれの回もLinux使用です.第3回はプログラミングの必要性とC言語の特徴を簡単に説明してから,指示を与えて,プログラムの打ち込みと,コンパイルと実行をしてもらいました.
第4回は変数・データ型・演算子,第5回は制御文(if〜else,for),第6回は配列,第7回は関数を取り上げ,各回,複数個のプログラムを打ち込み,動作確認をしてもらいました*3.十分に知識のある学生向けに,任意提出の発展課題として高難度のもの(コーディング量が多いというよりは,ちょっとした知識やアイデアがあれば解ける問題)を提示しました.
ということで全15回の授業のうち,第2回から第7回までの6回分で,Linuxを使用しました.単にCでプログラムを作成するだけでなく,コマンドの実行(Command Line Interface (CLI)の活用)にも時間をとりました.例えば上矢印を押すと,直前に実行したコマンドが出せることは,机間巡視しながら,また全体に向けても,アドバイスしました.
第8回以降はWindows起動となります.第8回はExcelの復習で,第9回から第11回までは,VBAです.Visual Basic Editorというウィンドウの上で,プログラムを書いたり,ユーザーフォームのオブジェクトを配置したりして,Excelのワークシート上で動かしました.
年明けの第12回から第14回までは,「GUIプログラミング」です.具体的には,HTMLにJavaScriptを組み込んだ形のファイル編集を行ってもらいました.実行はブラウザ上となります*4.開発ツール(F12キー)を使ったデバッグなどを指導することもあります.
第15回はまとめで,Windowsを用いた振り返りとなります.
「さまざまなやり方でプログラミングを経験させる」ことを,この科目の「ねらい」に据えるのであれば,上記の授業内容は,一つの解になっていると思っています.Cの授業では,単にプログラムを書くだけでなく,CLIによりコマンドを実行し,ときにはエラーメッセージを読んで,バグがどこにあるかを見つける活動を行います.VBAについて,Visual Basic Editorの使用は,統合開発環境の素地となります.実行は,メニューバーのあるアイコンを押すだけでして,エラーとなれば,編集中の該当箇所にマークがつきます.プロジェクト管理でないことや,編集中(実行前)の支援機能が乏しい点は,Visual StudioEclipseなど,有名な統合開発環境との違いと言えるかもしれません.HTML+JavaScriptによるコーディングそして実行は,CともVBAとも異なるプログラミング学習スタイルとなっています.

BYODでCの授業を行うとしたら

将来的に演習室のLinux環境が使えなくなり,BYODで授業を行うとなったとき,上記のうちLinuxおよびCの授業については,実施方法の見直しを余儀なくされます.
現時点での候補として,「Windows上でLinux」「統合開発環境」「USBにインストール」「Webサービス」が考えられます.順に,概要とソフトウェア例,そしてメリット・デメリットを簡単に書きます.
Windows上でLinux」について,Windows Subsystem for Linux (WSL)が候補となります.WSLはWindows 10でしか使用できませんが,大学が公開しているノートPC要件と照らし合わせて,特に問題となりません.他のソフトウェアにはVirtualBoxもあります.自分のPC上で,WindowsLinuxも動作しますし,2つのOS間でファイル共有の仕組みも備わっています*5.その一方で,1台のPCに入っている,2つのOSを管理(ソフトウェアアップデートなど)することが手間となります.LinuxをインストールしただけではCのコンパイルができず,内部で別にソフトウェアパッケージを入れる*6必要もあります.
統合開発環境」はIDE (Integrated Development Environment)とも書かれます.ソースファイルの編集,コンパイル,デバッガの利用など,従来だとばらばらだったものを,GUIによる一つの操作環境から使用できるようにしたものです.Windows環境では,Visual StudioEclipseにそれぞれ根強い人気があります.なおEclipseは基本的にはJavaのプログラミングに用いられてきましたが,プラグイン導入によりCも可能です.効率よくプログラムを書いて実行するための機能が多数,提供されています.単一のプログラムであっても「プロジェクト」として管理する必要があること(それに伴う初期学習コストの高さ),および統合開発環境を採用する場合にはコマンドライン利用を学習できなくなることには,注意が必要です.
「USBにインストール」では,USBメモリにファイルを入れておいて,それをPCに差し込み使用します.具体的に何を入れるかですが,LinuxなどOS全体を格納し,起動時にPC内蔵のWindowsではなく,外付けUSBメモリを選択して使うというのは,Live USBと呼ばれます(格納するためのソフトウェアにはRufus,Universal USB Installer,UNetbootinなどがあります).全く別の方式として,USBメモリに,Windows上で実行できる,コマンドラインのソフトウェアを格納するというのもあり,gnupackがよく整備されています.複製が容易なのに加えて,ホスト環境(ノートPC上のOS)を「汚さない」というメリットがあります.ただし,USBメモリを購入し保持するというコストを要請するほか,稼働中は本体から抜いてはいけません.Live USBを使う場合にはPCにより起動の方法が異なる*7こと,gnupackは「Linuxもどき」であることは,教育的観点でマイナス要素となります.
最後に「Webサービス」です.これはブラウザ上でプログラムを書きます.ボタンを押せばコンパイル・実行をしてくれます.統合開発環境と同じように,エラー箇所を教えてくれるものもあります.国内外でさまざまなサービス(Webサイト)が公開されていますが,個人的にはpaiza.IOがベストと思っていまして,昨年度にも,授業時間外に,自分のPCでCのプログラムを書いて実行したい場合には,paiza.IOを推奨していました.インストール不要で,URLだけ知っていれば使えます.統合開発環境と同じように,コマンドライン利用の学習ができません.また一斉授業で学外アクセスが保証されているかについては要検討です.paiza.IOでは1回の実行が2秒以内という制約もあります*8
ここまで挙げたデメリットのいくつかは,おそらく運用によって解消が可能と思われます.また「Webサービス」を除く各手法では,インストールに時間と,ネットワークアクセスを必要とします.
メリットとデメリットをはかりにかけるとともに,複数の利用方法を採用するのはどうか,そもそも1年後期にC言語の指導をするのがよくないのではないかなども視野に入れ,動作検証や,他の教員と意見交換を通じて,今後の学習形態を考えていくことにします.
上記で名称を挙げたソフトウェアなどについて,公式サイトや利用方法解説ページなどを,以下に整理しておきます.

*1:https://www.wakayama-u.ac.jp/admission/faculty/essential_pc.html

*2:isbn:9784774153940.なのですが改訂新版isbn:9784774191423が出ています.

*3:「写経型学習」というやつです.

*4:ファイル編集に使うソフトウェアには,Tera Padを推奨していました.

*5:Windowsテキストエディタでソースファイルを編集し,そのディレクトリにWSLのシェルを移動させて,コンパイル・実行ができます.

*6:Ubuntuでは「sudo apt update」「sudo apt install build-essential」を実行します.

*7:例えばマウスコンピュータのあるノートPCでは,Windowsを起動した状態から,Shiftキーを押しながらシャットダウンの操作をします.

*8:無限ループでなくても,単純な再帰によりフィボナッチ数を求めるプログラムについて,他のプログラミング環境では,正しい解を出力していたけれど,paiza.IOでは2秒を超えたので何も出なかった,というのを確認しています.