プログラミングの授業で死なないためにすべきこと
この記事はklis Advent Calendar 2015の16日目の記事です.
Q. お前誰?
・klis13(3編) システム主専攻
・栃木の高専で電子制御工学を学んでから今年度編入してきた情報学 学び歴1年未満の学生
・与えられたタスクをひたすらこなすのは得意ですがクリエイティブな思考はできません
・サークルはバレーサークルに入っています
Q.何書くの?
klisでは1年次必修の科目に『プログラミング演習I』,『プログラミング演習II』というプログラミングをする科目があります.
この授業は毎年難民が出るらしく再履修者用の科目が用意されているほどで,今年も阿鼻叫喚しているklis15(1年生)を見かけます.
知識情報・図書館学類ということで本や図書館に興味を持って入ってきた人がプログラミングをやらされて,大変つらいというのは心中お察しします.
が,この科目の単位を取らなければ卒業はおろか2年生の科目『知識情報演習I』でOPAC(Online Public Access Catalog, オンライン蔵書目録)を作るときに苦労することは必至で,「プログラミングつらい」の無限ループになってしまいます.
なので,今回はプログラミングがつらい1年生や,来年度編入してくる文系出身の3編生およびklis16(来年度入学する1年生)に向けて困ったときに見て欲しいTipsを記しておこうと思います.
Q. 先行研究は?
昨年のklis Advent CalenderでYousackさんがこのことについて記しています.
こちらも参考にしつつ,僕が考えたことを書いていきます.
ちなみに,先述の通り情報学を学んで1年未満なのでプログラミングが得意な人からすれば「何言ってんだこいつ」と言われる点も多々あるかと思いますが暖かく見守ってください.
それから大事なことがもうひとつあります.
僕自身は『プログラミング演習』を履修していないということです.
編入生には単位の認定制度があり,僕は高専でプログラミングをすこーしだけやっていたので履修が免除されています.
そのため,「『プログラミング演習』のことを何も分かっていない!」というツッコミは甘んじて受け入れます.
が,もしかすると『プログラミング演習』以外でも思い出したらお得になることかもしれないので,時間がある方はお読みください.
(一応言い訳すると今年の3編生のサポートをするために『プログラミング演習I』のテキストはある程度読みました)
Q. 何すればいい?
1. テキストや教科書を読もう
まずは基礎的なことです.
「当たり前だろ!」,「そんなの分かってるわ!」という声もあると思いますが,基本に立ち返ることは大切なことで,もしそれが間違っていた場合はかなりの時間を浪費してしまいます.
基本的に課題の出来は時間との戦いでもあるので,無駄な時間を過ごさないように配列やハッシュの指定の仕方などは重点的に見ておきましょう.
また,テキストは文章が多く読みづらい or 分かりづらいという人は,教科書である『たのしいRuby』を見てみるといいと思います.
配列やハッシュなども図解されていて,Web上で調べるより分かりやすいかもしれません.
2. 考え方を整理しよう
課題に向き合った時,最初からコードを書こうとしていませんか?
最初に課題を見た時や考え方が分からなくなった時は,一度エディタから手を離してノートやメモ帳にまず「最初にこれをやって,次にこれ…そして最後にこれ」というように日本語や図で書いてみましょう.
考え方が整理できていれば,その順番通りにメソッドを作ったり文字列の読み込みをすることが理解できます.
もしコードがぐちゃぐちゃになってしまって訳が分からなくなった時は有効だと思います.
3. インデントをつけよう
インデントとは、文章の行頭に空白を挿入して先頭の文字を右に押しやる「字下げ」のこと。
プログラミングの分野では、プログラムの構造を見やすくするために制御構造の内側にある行などを一律に字下げして記述することが多い。
引用: インデントとは|indent - 意味/解説/説明/定義 : IT用語辞典
インデントをつけることによってよくある「while ~ endにおいてendが足りない」だとか,「if文を書いたのにendがない」などのエラーが比較的見つけやすくなります.
このendがないことによって長時間無駄にする人がよく見られるので,インデントは是非つけて欲しいと思います.
emacs(プログラミング演習ではMeadow)は各行でTabキーを押すことによってインデントをつけてくれるはずです.
この時点でインデントがおかしい(ex. whileのwの位置とendのeの縦位置が合っていない)ことに気づいたら,while, if, endなどをよく見なおしてみましょう.
4. エラーメッセージを見よう
自分で書いたコードが実行した時に動かないと「なんで~~」,「どうしよう~~」という人がいますが,その前に画面に出ているエラーメッセージをよく見てみましょう.
よくあるエラーにNameErrorやTypeErrorなどがありますが,そこには同時に間違っているコードの行数が書いてあります.
その内容をよく見て,何が間違っているか考えてみましょう.
How to handle with Error messages in Ruby
上のサイトによくあるエラーとその対処法があるのでこちらも参考にしてください.
5. 人に頼ろう
1人でずーっと考え込んでいてもできない時はあります.
どうしてもできない時は最終手段です.
klisは『知識情報・図書館学類』ですが,情報学群の学類であるため理系出身の学生と文系出身の学生が混在しています(これは編入生も同様です).
つまり,課題ができず苦しんでいる人がいる一方で,時間に余裕を持って楽しんで課題に取り組んでいる人もいます.
友達に理系出身の人がいればそれは大チャンス,その人に頼ってみましょう.
他の人にコードを見てもらうと,自分が何時間かけても見つけられなかったエラーを一瞬で見つけることがあってその人が一瞬だけ神様に見えることがあります.
理系出身の人もそれくらいは教えてくれるだろうし,教えることにより自分がまた理解できるというメリットがあります.
ちなみに,ご飯をおごってあげれば大体の人は助けてくれる(個人の感想です)ので困ったらこの手段も使ってみましょう.
ここで「友達がいない人はどうすればいいんだ」という人は春日ラーニングコモンズ(KLC)を使ってみましょう.
KLCには『プログラミング演習』を履修済み且つ優秀なチューターさんがいます.
友達に頼るとその友達に頼りきってしまって答えを丸々教えてもらったりすることもあると思いますが,KLCは答えを教えずに考え方を教えてくれます.
自分の力でやってみたいという人はこちらの手段も有効だと思います.
おわりに
ここまで書いたところで3000文字近くなっていることに気づきました(長くてスミマセン).
長々と書いてきましたが,この記事を見ている履修中の人やこれから履修するかもしれない人が単位を無事に取れることを応援しています.
この科目を通じてプログラミングが好きになったり興味が出たりして将来の進路が変わるかもしれません.
嫌いな人も精一杯授業と向き合っていくことで,2年生では苦労しなくなるかもしれないので,頑張って欲しいと思います.
ちなみに,僕がこの科目を履修していないことは先述の通りですが,どこが間違っているかくらいは教えることが出来ます.
どうしても困ったときはご連絡いただけると助けられるかもしれませんので,僕のtwitterもご利用ください.
ぼやき
klis Advent Calendarに参加しようと思ったのは,入学前に昨年のklis Advent Calendarの記事を読んで参考になったのでやってみることにしました.
この時期課題が山積みになること忘れていて,この日に登録してしまいました
ゆっくり書いていたら1時間半かけてしまったので,頑張って課題を進めます…
バレー初心者がバレー合宿に行ってきた話
おととい(21日)から今日(23日)まで,サークルの合宿で草津まで行ってきました.
今回の合宿は夏合宿とは違ってバレー合宿と銘打っていて,3日間で14時間バレーをするというバレー漬けの日程でした.
僕はタイトルにもあるようにバレー初心者で5月あたりからサークルでバレーさせてもらってましたが,サークルの2/3程度は経験者で構成されているので,チームになって試合をするとどうしても申し訳無さを感じる場面がこれまで多々ありました.
今回は経験者と初心者がそれぞれ「挑戦クラス」と「躍進クラス」に分かれて練習を積みました.
僕の属した「躍進クラス」では1年生が大多数で2年生が少しいて,3年生は2人で構成されていました.
1日目
1日目は基礎的なことから始め,パスの重要性を学び,ジャンプせずにスパイクのフォーム確認などを行いました.
180°のオーバーパスはそこそこできるのに90°は難しいなどの新たな発見があったり,今までウォームアップとしてやっていたパスやキャッチボールなどの意味を説いてくれたりと,初日から為になる内容でした.
途中のランニングパスでは目標は85回(17人*5回)だったのに160回を達成することができて,練習の成果が出てるのかなと感じました.
最後に『入れ替わり2対2ラリーゲーム』というのをやったのだけれど,これがなかなかおもしろかった.
4人1チームに分かれて,1回もしくは2回で相手コートに返し,返球した人はスタンバイしている人と交代というシンプルなルールなのだけれど,相手の位置を確認して嫌なところに返すことができるかという点も問われていて,実際の試合で初心者であっても,これをすることができれば相手を崩すことができたり,もしかすると得点に結びつくかもしれないという結構重要な練習だったと思いました.
2日目
2日目は1日目のおさらいからスタートして,初心者に難しいサーブカットの練習,ジャンプしてスパイクの練習,サーブの練習,ディグ・2段トスの練習と続きました.加えて,躍進・挑戦クラスを交えたブロックの練習などもありました.
僕はスパイクの時最高到達点でスパイクすることがなかなか難しく,毎回ジャストミートすることができないという問題点を抱えていました.
なので,スパイク練習はかなり気合が入っていて,少しクイックなどもやってみたりしました.
他にもブロックはいつも前でただジャンプするだけだったので,腕の出し方やジャンプの仕方など学ぶことが多くありました.
練習が終わった後は予め決められていたチームに分かれて3日目に行われる大会の練習試合をしました.
チームの話は後述しますが,いろいろなフォーメーションを試しながら練習試合をしました.
毎回のサークルでは,チームは常に即席チームなので予め決められていて練習試合をして作戦を練りながら試合をするっていうのは初めての経験でなかなかおもしろかったです.
3日目
僕のチームは,
1年生3人(2人経験者, 1人初心者),2年生1人(バレー経験2年目/キャプテン),3年生2人(僕と経験者1人),大人2人(両者経験者)
で構成されていました.
最終的にフォーメーションは,リベロ2枚でレフトとセンターに付くことになりました(本当のルールならアウトだけど,特別ルールでOKになってます).
結果を先に言ってしまうと,初戦負けて敗者リーグで1勝1敗の2位になり7チーム中6位でした.
正直結果はかなり悔しいですけど,このチームで3試合もできたのはとても楽しかったし,いい経験でした.
練習の成果が出たかと言われれば正直微妙だし,チャンスボールをセッターのところにうまく返せなかったりサーブミスをしまくったり,チームの方々には申し訳なかったけど,かなり楽しかったし何試合でもしたいと思いました.
※余談ですが,サーブミスをしないようにアンダーサーブに挑戦したらなぜか崩すことができて2点取ることができました,これがビギナーズラックか
そう簡単にうまくならないのは当然だと思うしこれが経験というか試合勘なのかなとも思ったりしたけど,これからの活動に活かせたらなと思います.
この大会の決勝の試合見てると,異次元のレベルのプレーだ…と思うこともあったけどそんなメンバーと一緒に活動できていることに誇りを感じてるし,少しでもうまくなりたいと思う試合でした.
バレーまとめ
今回の練習を通して一番思ったのは,基礎的な練習にしてもアイテムを使った練習にしても,
『試合での実際のプレーを想定しながら練習しないとうまくならない』
ということです.
2日目のサーブカットの練習でバケツを使った練習があって,バケツに入れることが目的なんじゃなくてその感覚を掴んでサーブカットをすることが目的なんだよなと思いながら練習していました.
多分どの練習でもそれは当てはまると思うし,どんなスポーツの練習でもあてはまることだと思うのでこれを心に留めてすべての練習に取り組みたいと思いました.
それから,初心者のみんなのやる気がみなぎっていて,本当に楽しそうにやってたのがよかったなと思いました(年寄り並の感想).
合宿まとめ
全体を通して,今まで全然話してこなかったメンバーと話せたり,2日目のレクリエーションで死ぬほど笑ったり本当に楽しかったと思います.
3日目の大会終了後には草津観光もできて,温泉たまごを食べたり,温泉に入れたりかなり充実した3日間でした.
この計画を立ててずーっと準備してきてくれた幹部の4人には本当に感謝しないといけないし,計画の他にもレクを始めとした娯楽の提供だったりハプニングへの対応,パンフを始めとしたグッズの制作など本当にやることが多かったと思います.
50人近くのメンバーをまとめるのも大変だと思うし,本当にお疲れ様でした.
それに加えてキャプテンの友人やOBの方々のコーチングスタッフの皆様もいろいろなことを教えてくださって大変勉強になりました.
編入で入ってきたので1年次3年生としてもいい思い出になりました.
みんな,ありがとう!
学生寮の住人は国勢調査のインターネット回答ができないのか Part2
続きです。
月曜日に折り返し電話がかかってきた。
相手はテクニカルサポートの方ということで期待していたが、結論から言えば全く収穫・進展はなかった。
テクニカルサポートの方は「通信状態が悪く…」だとか「一時的に混み合って…」などという言葉を繰り返すばかりで申し訳ないが話をする気にもならず。
※ちなみにやはり電話口で試している環境ではラジオボタンの選択ができるらしい。
で、状況を説明するために長くなることを前置きしたうえで「ソースコードが…」と言った瞬間に引かれてしまって呆れてしまった。
そもそもテクニカルサポートというのはどうやら操作方法がわからない人(インターネットに不慣れな人)をサポートする人たちのことだそうで、その電話口の方はなんとHTMLの存在すら知らないとか。
というわけで上のソースコードが分かる人に伝えてくれということで現状況を"言葉で"、"分かりやすく"、"丁寧に"教えておいた。
まあ、この感じだと直る気配はないけどね。
というわけでこの問題の結末は"どうしようもない"ということで消化不良でしたとさ。
【おまけ】
電話が終わりもやもやしながら買い物に行こうとすると玄関にこんなものが。
最初から掲示して欲しかった。
学生寮の住人は国勢調査のインターネット回答ができないのか
こんなレアケースなんて滅多にないと思うので整理する目的も含めてはてなブログを開設してここに適当に書いておこうと思う。
先週、国勢調査のインターネット回答の案内が来た。
僕は宿舎に住んでいるのだが、その宿舎の居室1室ごとにそれぞれ案内が来ていた。
しかし先週はインターンシップ関係の書類作成やTOEICの準備などで回答できていなかったので、TOEICの試験が終わった今日答えることにした。
同封されていたパンフレットに書かれている通りに以下のようにして手順を進めた。
1.国勢調査オンラインへアクセス
2.インターネット回答の利用者情報(ID,PW)を用いて国勢調査オンラインへログイン
3.回答を始める
しかし回答の1ページ目で問われている世帯人数と世帯の種類の選択で引っかかってしまった。
このスクリーンショットを見て欲しい。
宿舎の住人全員にインターネット回答の案内が来ているにもかかわらず、
一般世帯及びその他以外の方はオンライン調査対象外になります。
というのだ。
また、一般世帯及びその他以外の選択肢のラジオボタンは使えないようになっている。
ソースコードを見てもdisabledになっていた。
また、この宿舎やネットワーク、さらにはこのPC依存の可能性を検証するために愛知県に住んでいる友人にも確認してもらったところ同じようにラジオボタンは選択できなかった。
これを不思議に思い、仕様だったら仕方ないと思いつつ国勢調査コールセンターに問い合わせすることにした。
問い合わせの結果、
一般世帯及びその他以外の方はオンライン調査対象外になります。
という点に対しては、宿舎に住んでいたとしても水回りが自室に備わっている場合(つまりアパートに似ている場合)は一般世帯扱いになり、それ以外の宿舎に関しては宿舎全体で1世帯の判定になるらしく(この基準は別に定めているものがあるらしい)、宿舎1室ごとに配布されているのはおかしくないそうだ。
だが、ラジオボタンに関してはコールセンターのオペレーターの環境では有効になっているというのだ。
こんな大規模な行政システムでエラーなんてあるのかと思い、オペレーターにいろいろ質問をぶつけてみた。
例の1つとして、OSはWin7なら大丈夫と言われたので市区町村依存やブラウザ依存ではないかという質問をしてみると、オペレーターは「こちらの調査は全国でやっているものですので…(考えにくい)」という回答。
最終的には「テクニカルエラーの可能性がありますので後日折り返し回答させていただきます」とのことだった(この時点でコールセンターの営業時間21時を超過していたためだろう)ので、環境や利用者情報の一部をオペレーターに伝えて話を終えた。
※ちなみにオペレーターとの会話は18分弱にも及んだ
この話をtwitterでしたところ、それ以前に入力している内容でラジオボタンの設定を変えているのではという指摘もあったが、この質問の前にはIDとPWの入力、世帯人数の入力しかないので考えづらいのではないかと思っている。
ひとまず、明日の折り返し電話の結果を待つことにする。