Kの学習記録(東京通信大学)

東京通信大学に通うKのブログです。思ったこと感じたことをゆるく書いています。

Webプログラミング課題補助

Webプログラミング2の課題で

Canvasを使った作品作りがあるんだよね。

エクセル方眼紙を使ってデザインするのを推奨されたんだけど

面倒なことこの上なかったのでブラウザ上でやってしまおうと考えた。

取り合えずクリックしたところを出すところまで。

心の目で描ける人向け。

下書き用の背景画像を薄く出すとか

引いた線や図形が見れて選択できて尚且つ修正できると良いかもね。

chromeとedgeで確認したけど他はわからん。

 

drive.google.com

2年次1学期を終えて

早いものでいつの間にか入学してから丸1年経ちました。

 

2年次の1学期にあたる今期は14科目取得しました。
演習系がなかったこともあり、学習自体は計画通りに終わりました。
難易度が高いとうわさの
メディアの社会学と情報メディアとデザインの文明論も受講しました。


情報メディアとデザインの文明論は難しかったですねー。
誰ですか。認定試験は簡単に作っていますと言ったのは。
全然簡単じゃありませんよ?!
問題は、全体を通じて伝えたいを問うような形が多いんですけれど
これが中々に難しい。
長文ゆえに細かく選択肢を読み込まねばならず
熟考した結果引っかかるなんてことも多々ありました。

ビジネスライティングは
小テストはほとんどなく、演習課題やディスカッションが多かったです。
どうやって採点されているのか気になるところです。


小テストが難しかった科目
・IT産業論
・メディアの社会学
・情報メディアとデザインの文明論

科目名 認定試験(min)
社会調査概論Ⅰ 40
協調の手法 22
障害者福祉論Ⅰ 14
基礎看護学 36
高齢者に対する支援と介護保険制度Ⅰ 34
ビジネスマナー 27
ビジネスライティングA なし
社会統計学 51
IT産業論 43
組織行動論Ⅰ 31
情報倫理 9
取材の情報学 10
メディアの社会学 29
情報メディアとデザインの文明論 36
初級オブジェクト指向プログラミング 37

初プロ(通常クラス)はなぜ難しいのか

今でこそクラス制になった初級プログラミングですが

以前は今でいうところの通常クラスしかない状態でした。

突破率も10%行くか行かないかの難関科目だったんですよね。

しかも情報マネジメント学部は必修なので避けて通れないというものでした。

 

何がそんなに難しいのか

知りたくて通常クラスを受講しました。

 

◆難しさの原因

・いつ説明されたかわからない用語が当然のように出てくる

・マクロなどの置き換え文字を多用している

・大まかな説明のみで細部に触れない

・読みにくい書き方

・課題の題材が楽しくない

 

「これいつ出たの?」という用語がよくあります。

「〇〇は△△なんですね。あ、△△っていうのは〜」と横道に逸れていくこともしばしば。

「こういうものだと思って良い」とかそういった文言も見かけます。

大事なことは3回以上、かつ小テストでも出す位でようやく覚えられると思います。

 

独自表現が好きなようで下記のようなマクロをよく目にします。

#define D 10 → Dという文字が出てきたら10と置き換える

#define less(a,b) a<b →less(a,b)ときたらa<bと置き換える

これ自体はまだ良いんです。

(できればif(a<b)〜のが直感的で良いですが…)

問題は定義部と使用部が同一ページに書かれていないことです。

なので文の意味を考える時にこの宣言が書かれていた場所を探さないといけないんです。

(coderoomに記載されているものはそれが正しいのかどうかはわかりません。)

パラパラ漫画のようなスライドからそれが定義されている場所を探す

それも750枚近くあるスライドの中から。。

探してるうちに流れを見失うこともあります。

使用部分でちらっと「Dは何」みたいに書かれているだけでも違うと思うんですよね。

 

講義ではどのように考えればいいかというアルゴリズムの部分は大まかに教わります。

ですがそれ以外に細かな疑問が出てくるんですよね。

何でここの処理はこうなんだろうといったものから

それっぽく書いたけれどなぜかエラーが出るといったものです。

エラー原因はエラー文に書かれているんですけれど

初学者にとってはこれを読むこと自体が辛いです。

思わず日本語でOK!と言いたくなります。

一番遭遇して嫌だったエラーは「セグメントエラー」です。

 

演習課題が数学寄りのものが多くあまり楽しめませんでした。

プログラムの挙動がわかりやすくて良いと思いますが無味乾燥で。。

数字嫌いの方は回れ右したくなるレベルです。

ストーリー性やエンタメ要素があったり改良したら使えるとかそういったものがあるといいなと思いました。

ボート屋の課題とか暗号製作なんかは楽しかったです。

 

 

◆良いところもある

・流用可能な形式のものが多い

・質問への返答が早く丁寧

 

最小に近い構成で書かれていてコードが綺麗だなって思います。

課題では「整数がきたとき」と書かれているにも関わらず

ちゃっかり文字列や他のどんな形式のデータが来ても大丈夫な構造になっていたり。

そういった部分でとても勉強になります。

 

課題に対して質問するとすぐ返信がきます。

早い時は朝の3時に返信がきたことも…一体いつ休んでらっしゃるんでしょうか。

返信内容はともかく、とても丁寧な解説をしてくださいます。

質問の意図とは違う答えが返ってくることも多いんですけれどね。

これは自分がうまく質問できていないというのと

先生がなまじ出来すぎてしまうが故に初心者がつまずきやすいところが理解できない故だと思います。

めげずに何度も質問しても快く質問に答えてくださるのは本当にありがたいです。

 

◆まとめ

プログラム言語は本を読んだだけで使えるようにはならず

講義を見たとしてもそれは同じなんですよね。

1行1行根気よく読み解いていく、それを自分の手で作り上げていく

それ位時間が必要な授業なのだと思いました。

・柔軟さ、シンプルさを追求するがあまりとっつきにくい講義になっている。

・説明が最小限

・そもそも時間が取れない

が重なった結果、難しいという評価に繋がっているように思えました。

 

◆実際やってみて

実際難しかったです。

演習だけで20時間以上かかってますしね。

最初は難解でも読み込んでいけばいくほど…という部分がスルメイカに似てますね。

今も理解できたかというと何となくレベルで止まっています。

あ、でも、昔はさっぱり読めなかった基本情報試験のC言語は少しは読めるようになりました!

理解が浅いところは初学者クラスの講義を見て補完したいと思います。

通常クラス→初学クラスなら理解できそうですが

初学クラス→通常クラスは理解できる気がしないな、と思ったのも通常クラスを選んだ理由でした。

3学期を終えて

今期からの変更点

認定試験において小テストからの出題がなくなりました。

言い方を変えただけのものや全く新しい箇所からの出題など

科目により差はあれど小テストとは違う問題が出題されるようになりました。

この先も少しずつ手が加えられ認定試験の難化が進むことになるのではないかと思います。

今までが易しかった分、標準化が進んでいるという表現のがしっくり来るかもしれません。

 

対策としてできることは変わらず

・小テスト高得点を狙う

・素早く答えを導ける準備を行う

2点でしょうか。

他に授業をまとめたり先生に質問するのも有効です。

PG科目で試験時にcoderoomを使用するのもOKだそうです。

予めincludeをいくつも書いたテンプレートを用意しておけば良かったなと思いました。

 

@Roomが更新されました!

初回巻き戻し機能(アプリ除く)

認定試験やアンケートの状況が進捗から見れるようになりました。

アプリ版でも巻き戻し機能を切に希望です。

 

 

 

今期選択した科目について

初プロ1

 苦戦を強いられると予想していた初プロ1(通常クラス)

 予習と演習時間を確保していたので特に大きな問題はありませんでした。

 授業のみだと理解が難しい場面が多々ありました。

 

社会と宗教

 授業はわかりやすいです。

 が、テストは難しく

 PDF+ノートテイキングでも一部解けない問題がありました。

 選択肢が曖昧なことと

 授業の深い理解を問われることが難しかったです。

 7点位は普通に取れるので満点狙いでなければおすすめです。

 

ジェンダー

選択理論心理概論

色々考えさせられた科目です。

癒し科目ではありませんが受けて良かった科目だと感じました。

 

普通

 文献・情報調査法

 情報マネジメント総論A

 

癒し科目

 東アジアの歴史と文化

 社会と文化

 コミュニケーション論A

 社会と福祉

 アスリートの心理と身体

 心理学概論1

 簿記概論1

実際に取得した科目について

※取得時期によってテストの構成などが大きく異なる可能性があります。
時間・ミス:難しさの目安。値が高いほど難しい(※個人差あり)

 

2020年度受講分

科目名 特徴 説明 時間 ミス
初級プログラミングⅠ 演習・WS有 難・長文・演習多・計算多 58 1
ジェンダー   難。設問がわかりにくい。考え方が変わった。 45  
社会と宗教   ノート必須。難。授業自体はわかりやすいが設問がわかりにくい。 38 3
選択理論心理学概論 WS有 設問自体は素直だが複数選択肢で難しめ。カウンセリングに興味がある人に良い 24  
情報マネジメント総論A   1回目のみ難。他普通 22  
コミュニケーション論A   難。ノート必須。日常生活の場面を切り取って解説していて面白い。 21  
運動と健康A   20  
文献・情報調査法   普通 17 1
東アジアの歴史と文化   16  
社会と文化   13  
アスリートの心理と身体   楽。インタビューが多い。 10  
心理学概論Ⅰ   楽。間違え探し。 8  
社会と福祉   7  
簿記概論   5  
アカデミックライティング 課題提出 普通。丁寧で聞き取りやすい。テストはないが課題提出がある。    
キャリアデザイン   楽。話し方が特徴的。好き嫌いが分かれる。    
プレゼンテーションA 課題提出 易しい。実習のスライドが薄い。プレゼン作成が大変。    
運動と健康B   難。実技パートは資料がない。テストは簡単な問題と難しい問題の落差が大きい。もう受けたくない・・・。    
基礎英語A・基礎英語B ディスカッション 別途英語教材使用。認定試験は地味に難しい。    
経済学入門   唯一無二の癒し科目。他大学の教授の話も聞ける。    
現代社会の課題と探究A   前半がきつい。後は癒し。   1
現代社会の課題と探究B   設問の理不尽さがない。とにもかくにもマクルーハン    
国際関係概論   楽。刷り込み式の授業で聞いていれば何となくはとれる。一部はさらっとしか言わないので注意。    
社会情報処理Ⅰ・社会情報処理Ⅱ   難。面白いけど人によっては難しい。一つ一つ理解していかないとつらい科目。    
社会心理学概論A   易しい。よく耳にする理論について楽しく学べる。一部心理テストあり。    
社会心理学概論B   楽。Aとは違う。今まで行われてきた実験の結果報告。    
情報基礎Ⅰ・情報基礎Ⅱ   パソコンに不慣れな方はまずこれ!たまに知らないことも載ってる。細かい数字の引っかけに注意。    
人体の構造と機能及び疾病Ⅰ・人体の構造と機能及び疾病Ⅱ   単一選択。膨大な資料。設問は素直。    
生物学概論A・生物学概論B   楽。単一選択式。面白い。    
生命と人間   楽。単一選択式。面白い。    
生命と倫理   楽。単一選択式。面白い。    
日本語文章論   聞きやすくて面白い。テストはちょっと考えないとダメ    
問題発見・解決の方法   難。面白い、楽しい、おかわりしたい科目。グラフの使い方とかが主。テストは地味に難しい    
役割離脱論   楽。後半は野球まみれになる。    
予防医学   楽。落ち着いた声で眠気との闘い。    

 

初級プログラミングのクラス分けについて。シラバス眺めてみた

3学期を控えて目下悩みは初級プログラミングのクラス選択です。

 

 

初級プログラミングとはC言語を学ぶ、演習もある科目です。

クラス分け制度をいち早く取り入れた科目で

・筧先生が担当する通常クラス
・中谷先生が担当する初学者クラス

の2クラス制になっています。

 

これは元々2クラスだったわけではなく

開校から3年経った今年になって2クラス制になりました。

以前は「初級と書いてあるのに内容が全然初級じゃない!」

なんて言葉も出てくる位の難関科目でした。

筧先生は元々数学も担当されている先生で

「どうしても理系よりの説明になってしまい

ついていけない生徒が続出してしまったんじゃないか」とかなんとか。

(半分位は未提出だったりパソコン自体に不慣れな方だったとも)

情報マネジメント学部のマネジメント部分に惹かれて入学した方も

学部必修科目なので受けざる得なかったんですよね…。

で救済措置として(?)登場したのが中谷先生の初学者クラスなんです。

 

そんなわけで2クラス制になったプログラム初級なのですけれど、

これ、どちらか1クラスしか選べないんですよね。

どちらかで単位習得後は両クラスの講義を復習用教材として見ることはできます。

受講したいわく、扱う項目はほぼ同じだけれど

演習内容や授業の丁寧さが大きく異なるんだそうです。

 

そう聞くと「じゃあ具体的にどこが違うんだろう」と気になっちゃいませんか?

気になっちゃうんです。

で、シラバスを眺めてみたんですけれど
正直どこがどう違うのかイマイチわかりにくい…

なら1個ずつ比較していけばいいじゃないか!ということで比較してみました。

情報源はシラバスなので実際とは異なる可能性があります。

 

まずは各回のタイトル比較から。

左から講義回、通常クラスの授業内容、初学者クラスの授業内容になっています。

他方にないと思ったものを赤で塗りつぶしました。

 

通常クラスと初学者クラスのタイトル比較

初級プログラミングシラバス比較

 前半部分は大体同じような構成してますが

6回目辺りから大分変ってくる印象です。

もうちょっと詳しく見てみました。

 

※※※ざっくりとしか見ただけなので参考程度にお願いします。※※※

その項目〇〇クラスにもあったんだけど?という場合は

こっそりDMでお願いできれば幸いです(__*)

 

初学者クラスの特徴

・if文にも1講義分割り当てられている
・初心者がつまずきやすいポインタやメモリにも多くの時間をとっている
・通常クラスで1講義でやる項目を複数回に分けて行っている

 

初学者クラスのみ?
for文
便利な演算子(複合代入、インクリメント)
変数とメモリ
変数とアドレス
配列とアドレス
読み込み、表示
アドレス
アドレス演算子
ポインタ
関節参照演算子
配列のアドレス
ポインタの演算
ポインタと配列の要素
callloc関数
free関数
データの入出力

 

通常クラスの特徴

・ポインタの講義がない → ポインタは知っている前提?
・タイトルから内容の推測が難しい → 配布資料も難しいのでは?
・初学者クラスでは触れない領域にも踏み込んでいる

 

通常クラスのみ?
各文字の出現回数
例題-メルセンヌ数
筆算を真似る
UnixC言語
コマンドの探索
エラー出力の活用
ファイルの複写
ファイルの同一検査
昇順ファイル
昇順ファイルの併合・積合・差分
引数付きマクロ

 

おすすめのクラスは?

初学者クラスはこんな方におすすめです

・プログラミング経験がない
・基礎からしっかり学びたい
・楽に単位が取りたい
・あまり時間をかけられない
・マネジメント目的
・福祉系の学部所属
・プログラムに自信がない
・丁寧な説明が良い

通常クラス
・プログラム経験者
・トリッキーなものをやりたい
競技プログラミングに興味がある

 

ほとんどの方に初学者クラスをおすすめします。

迷ったら初学者クラスにしておけば大丈夫です。

 

余談

そういえば冒頭で迷っていると言いましたが

自分が迷っている理由はなんだろうと

この文章を書きながら片隅で考えてたんですよね。

・一度は筧先生の授業を受けてみたい(全力回避しているので)

・入学のきっかけになった先生だから

・先輩方が経験した闇を見てみたいという怖いものみたさ

およそ受講内容とは違う部分で悩んでいたみたいです。

文章を書くって頭の整理に持ってこいなんだなーと再確認しました。

上のおすすめに従って、9割方中谷先生の初学者クラスにお世話になると思います。

 

追記:

9割中谷先生だと言ったのですが、筧先生の通常クラスを受講しました。

C言語 リスト追加

C言語 リスト追加

情報マネジメント学部の名物科目、初級プログラミング。
初級と言っていますが、初級とは名ばかりの難しい科目と言われています。
2020年度から初学者コースという初心者向けクラスを
初めて導入した科目でもあるんですよね。

そんな科目を3学期に控えている今、
ちょっとでもC言語になじんでおかなければ!と思い、
隙を見てちょこちょこ事前学習をしています。

C言語自体得意ではないのですが
中でもリストが大の苦手です。
やってるうちに
この変数が何を指しているのか
自分が何してるのかわからなく・・・。
思えばはるか昔、C言語を初めて学ぼうとした時も
つまずいたのはポインタと構造体でした(遠い目
これがわかるようにならないとアルゴリズム云々の前に
スタートラインにも立ててないんですよね、きっと。

宣言して追加して表示するだけなのですが
動く最低ラインを何とかかけたので忘備録としておいておきます。
これが何も見ずに書けるように写コードガンバリマス。

 

//ライブラリ読込▽▽▽----------------------------------------------
#include <stdio.h>
#include <stdlib.h>
//ライブラリ読込△△△----------------------------------------------

//構造体作成▽▽▽----------------------------------------------
//typedefすると実際に使うときにlist_tで使えるようになる
typedef struct LIST{
  int value;
  struct LIST *prev;
  struct LIST *next;
}list_t;
//構造体作成△△△----------------------------------------------

//事前準備▽▽▽----------------------------------------------
//先頭に配置するダミーデータ作成
list_t dummy;

//常に先頭を示すポインタ作成
list_t *head = &dummy;

//関数宣言
void insert(int);
//事前準備△△△----------------------------------------------

//メイン▽▽▽----------------------------------------------
int main(void){
  int ans;
  //入力データを最後まで追加
  while( (scanf("%d",&ans)) != EOF ){
    insert( ans );
  }
  //リストを表示
  list_t *p = head -> next;
  while( p != NULL ){
    printf("%d\n",p->value);
    p = p -> next;
  }
}

//メイン△△△----------------------------------------------


//挿入部▽▽▽----------------------------------------------

void insert( int x ){
  //探し始める位置用のポインタ
  list_t *p = head;

  //挿入データ格納用
  list_t *new;

  //最後まで探すか、現在地のの数より挿入数値が大きくなったら終了
  while( p -> next != NULL && p-> next ->value < x ){
    p = p -> next;
  }

  //挿入データ用のスペースを確保する
  new = (list_t*)malloc(sizeof(list_t));

  //値を入れる
  new->value = x;

  //ポインタ書き換え
  new->next = p->next;
  p->next = new;

  return;
}

//挿入部△△△----------------------------------------------


参考にしたページ

第1回)リスト構造の概要
https://edu.clipper.co.jp/pg-2-40.html

第2回)リスト構造の構造体定義
https://edu.clipper.co.jp/pg-2-65.html

第3回)リストへの挿入
https://edu.clipper.co.jp/pg-2-66.html

第4回)リスト構造からの削除操作 delete
https://edu.clipper.co.jp/pg-2-67.html