これがベトナム大学院の実態だ!

Trường Đại Học Bách Khoa Thành Phố Hồ Chí Minhの大学院修士課程に社会人入学

ベトナムの大学の図書館ってどうよ?

ベトナムの大学と言ってもĐại Học Bách Khoa Tp.HCMでの話であるが、大学にある図書館がどうなっているかは気になるところである。
よく、アメリカやイギリスの大学では図書館が24時間開いていると留学者のブログで散見される。通常は夜閉まるにしても、試験期間だけは24時間というところもあるようだ。
で、この大学の図書館だが、24時間どころか、夜8時には閉まっている。具体的な閉館時間は分からないが、少なくとも明るい時間には開いていた。
さらに、日曜日は閉鎖。日曜日こそ授業と授業の間が空いていて図書館で時間をつぶすにはちょうどいい機会なのに、これは壊滅的。土曜日はよく分からないが時間のある時に除いてみたい。
日本の大学は…どうだったかな。自分が大学の時は図書館に行った記憶があまりない。そもそも図書館行くぐらいだったら部室行くし。
本を借りるにしても、県立図書館の方が広くて本の種類も多かったように記憶している。

話を戻して、この大学の図書館についてだが、そもそも外見から図書館とは分かりにくい。小さすぎるんだ。日本の大学の図書館を想像していると、てっきり備品置き場的なものと見間違うレベル。
日本にあるブックオフや万代書店とは比べ物にならないくらいの狭さ。
どちらかというと、ちょっと郊外のローソンぐらいに思っていた方がいい。
普段会社で働きながら通っている人なら、「うちの会社の方が広いんじゃ?」と思うかもしれない。
中に入ると図書貸し出しカウンターのようなものは見当たらず、みんな席に座って持参したノートPCを使っている。
図書館というよりコンビニ大の自習室ぐらいに思っておこう。
ただ、利用者のマナーはよく、騒いでいる奴はいないのだけが救いか。
あと、日本の大学の図書館のように異常なまでの検査がない。入退館は自由だ。一応入り口のロッカーに私物を入れるようになっているのと、盗むほど本もないというのもあるが。
ただ、学生証を提示しなくてもいいという意味では、部外者でも入れる。もっとも入ったところで何もすることがないから1分ほど室内を見学して帰ることになる。

2018/04/23追記
土曜日も閉鎖

Nguyên lý ngôn ngữ lập trình / Assignment 3

悪名高いとか物議を醸すとか不名誉な枕詞のつく同科目において、悪夢のAssignment 3が勃発した。
さすがに以前の約束通り、Assignment 2ができていなくても取り組めるようにはなっていた。

Assignment 3
version 1.1
After completing this assignment, you will be able to
• explain the principles how a compiler can check some semantic constraints such as
type compatibility, scope constraints,... and
• write a medium ( 300-500LOC) Scala program to implement that.
1 Specification
In this assignment, you are required to write a static checker for a program written in MC.
To complete this assignment, you need to:
• Read carefully the specification of MC language
• Download and unzip file assignment3.zip
• If you completed Assignment 2, you can skip this step. Otherwise (if you did not
complete Assignment 2), don’t worry, just follow these steps:
– download initial.zip, and unzip it, and change the folder initial into assign-
ment3; change current directory into assignment3
– remove folder src/main/mc/codegen, src/main/mc/checker and files AstUtils.scala,
TestChecker.scala, CheckerSuite.scala, TestCodeGen.scala and CodeGenSuite.scala
in folder src/test/scala/
– modify src/main/mc/Main.scala by commenting out 2 lines "import jasmin.Main"
and "import mc.codegen._"
– download upload.zip from Assignment 2, unzip it, and copy files into the corre-
sponding folders as described in Assignment 2.
• Make folder src/main/mc/checker and copy StaticCheck.scala and StaticError.scala
(from assignment3.zip) into this folder
• Copy TestChecker.scala and CheckerSuite.scala (from assignment3.zip) into src/test/scala
• Modify StaticCheck.scala to implement the static checker. Please fill in your id in
the headers of this file.
2
2 Static Checker
A static checker plays an important role in modern compilers. It checks in the compiling
time if a program conforms to the semantic constraints according to the language specifica-
tion. In this assignment, you are required to implement a static checker for MC language.
The input of the checker is in the AST of a MC program, i.e. the output of the assignment
2. The output of the checker is nothing if the checked input is correct, otherwise, an error
message is released and the static checker will stop immediately
For each semantics error, students should throw corresponding exception given in Stat-
icError.scala to make sure that it will be printed out the same as expected. Every test-case
has at most one kind of error. The semantics constraints required to check in this assign-
ment are as follows.
2.1 Redeclared Variable/Function/Parameter:
An identifier must be declared before used. However, the declaration must be unique in
its scope. Otherwise, the error messages “Redeclared : ”+ is released,
where is the kind of the identifier in the second declaration. The scope of an
identifier (variable, function, parameter) is informally described as in Section 10 of MC
specification.
2.2 Undeclared Identifier/Function:
The error message “Undeclared Identifier: ”+ is released when there is an iden-
tifier is used but its declaration cannot be found. The identifier can be a variable or
parameter. “Undeclared Function: ”+ is released in similar situation for
a function invocation.
2.3 Type Mismatch In Statement:
A statement must conform the corresponding type rules for statements, otherwise the error
message “Type Mismatch In Statement: ”+ is released.
The type rules for statements are as follows:

  • The type of a conditional expression in an if statement must be boolean.
  • The type of expression 1 and expression 3 in a for statement must be integer while

the type of expression 2 is boolean.

  • The type of condition expression in do while statement must be boolean.
  • For a return statement, if the return type of the enclosed function is void, the

expression in the return statement must be empty. Otherwise, the type of the return
3
expression must be equal to or be coerced to the return type of the function. An
exception is an array pointer or array can be returned to an array pointer, i.e., the
type of return expression can be in array pointer or array type while the return type
of the enclosed function is in array pointer type with the same element type.
2.4 Type Mismatch In Expression:
An expression must conform the type rules for expressions, otherwise the error message
“Type Mismatch In Expression: ”+ is released.
The type rules for expression are as follows:

  • For an array subcripting E1[E2], E1 must be in array type or array pointer type and

E2 must be integer.

  • For a binary and unary expression, the type rules are described in the MC specifica-

tion.

  • For an assignment expression, the left-hand side can be in any type except void, array

pointer type and array type. The right- hand side (RHS) is either in the same type
as that of the LHS or in the type that can coerce to the LHS type. In MC, just the
integer can coerce to the float.

  • For a function call (), the number of the actual parameters

must be the same as that of the formal parameters of the corresponding function.
The rule for an assignment is applied to parameter passing where a formal parameter
is considered as the LHS and the corresponding actual parameter is the RHS. An
exception is an array pointer or array can be passed to an array pointer, i.e., the
actual parameter can be in array pointer or array type while the corresponding formal
parameter is in array pointer type with the same element type.
The three following errors are required just for the students in gifted class (KSTN):
2.5 Function not return:
A function that does not return void must return something in every its execution paths.
If there exists one path where there is nothing returned, the error message "Function Not
Return: " will be released.
2.6 Break/Continue not in loop:
A break/continue statement must be inside directly or indirectly a loop otherwise the error
message "Break/Continue Not In Loop" will be released.
4
2.7 Unreachable statement:
An unreachable statement is a statement in a function which the control flow cannot reach.
For example, the statement after a return statement is an unreachable statement. The value
of an expression is ignored when determining an unreachable statement. For instance, the
stmt in if (false) stmt is reachable as the value of the condition expression is ignored.
The error message "Unreachable statement: "+ will be released when the
is an unreachable statement.
2.8 No Entry Point:
There must be a function void main () somewhere in a MC program. Otherwise, the error
message "No entry point" is released.
2.9 Unreachable function:
A function, except main function, must be invoked by another function, otherwise, the
error message "Unreachable function: " is released.
3 Submissions
This assignment requires you submit 2 files: StaticCheck.scala containing class Static-
Checker with the entry method check, and CheckerSuite.scala containing 100 testcases.
The deadline is announced in course website and in www.cse.hcmut.edu.vn/onlinejudge.
If the deadlines in these places are different, the deadline in www.cse.hcmut.edu.vn/onlinejudege
is applied.
4 Plagiarism
• You must complete the assignment by yourself and do not let your work seen by
someone else.
If you violate any requirement, you will be punished by the university rule for plagiarism.

Nguyên lý ngôn ngữ lập trình 小テスト2018/04/14

Đã bắt đầu vào lúc Saturday, 14 April 2018, 2:32 PM
Tình trạng Đã hoàn thành
Hoàn thành vào lúc Saturday, 14 April 2018, 2:45 PM
Thời gian thực hiện 13 phút 36 giây
Điểm 3,38 của 10,00 (34%)

Câu hỏi 1

Không chính xác
Điểm -0,33 của 1,00
Cờ câu hỏi

Nội dung câu hỏi

 

Cho biết trong đoạn mã C++ sau, đối tượng nào có nhiều tên và những tên này là gì?

int *p = new int;

int *&q = p;


 

Chọn một:
 Không chính xác

Thông tin phản hồi

Câu hỏi 2

Không chính xác
Điểm 0,00 của 1,00
Cờ câu hỏi

Nội dung câu hỏi

 

Cho đoạn mã C++ sau, hãy cho biết các đối tượng được cấp phát trong các vùng nhớ nào?

int * m;

int * foo(int x) {

  static int y;

  int * z = new int;

   switch x {

        case 1: return &y;

        case 2: return &x;

        case 3: return z;

        case 4: return m;

   }

}


 

new int

 Không chính xác

z

 Không chính xác

Thông tin phản hồi

Câu hỏi 3

Chính xác
Điểm 1,00 của 1,00
Cờ câu hỏi

Nội dung câu hỏi

Cho đoạn mã C++ sau, hãy cho biết khi gọi hàm foo với thông số là 3 thì sẽ có lỗi gì (trong các lỗi tham chiếu treo, garbage hoặc alias) xảy ra?

int * m;

int * foo(int x) {

  static int y;

  int * z = new int;

   switch x {

        case 1: return &y;

        case 2: return &x;

        case 3: return z;

        case 4: return m;

   }

}

 

Chọn một:
 Chính xác

Thông tin phản hồi

Câu hỏi 4

Chính xác
Điểm 1,00 của 1,00
Cờ câu hỏi

Nội dung câu hỏi

Cho phát biểu C++ sau:

x = x + y * 10;

Trong biểu thức bên vế phải, phép nhân * được tính toán trước phép +; ràng buộc này xảy ra vào thời gian nào?

Chọn một:
 Chính xác

Thông tin phản hồi

Câu hỏi 5

Không chính xác
Điểm 0,00 của 1,00
Cờ câu hỏi

Nội dung câu hỏi

 

Cho đoạn mã C++ sau, hãy chọn các phát biểu ĐÚNG về thời gian sống (object lifetime) của các đối tượng?

int * m;

int * foo(int x) {

  static int y;

  int * z = new int;

   switch x {

        case 1: return &y;

        case 2: return &x;

        case 3: return z;

        case 4: return m;

   }

}


 

Chọn một hoặc nhiều hơn:
 Không chính xác

Thông tin phản hồi

Câu hỏi 6

Đúng một phần
Điểm 0,40 của 1,00
Cờ câu hỏi

Nội dung câu hỏi

Cho đoạn chương trình sau viết trên một ngôn ngữ cấu trúc khối tựa Pascal:

var x,y:integer; // line 1

   procedure foo(x:real) //line 2

   var z: integer; // line 3

   begin  ....  end

  procedure foo1(y:integer) // line 4

  var z: real;  // line 5

  begin ... end

begin  ... end

Hãy cho biết các khai báo có hiệu lực trong procedure foo

Chọn một hoặc nhiều hơn:
 Chính xác
 Chính xác

Thông tin phản hồi

Câu hỏi 7

Đúng một phần
Điểm 0,40 của 1,00
Cờ câu hỏi

Nội dung câu hỏi

Cho đoạn chương trình sau viết trên một ngôn ngữ cấu trúc khối tựa Pascal:

var x,y:integer; // line 1

   procedure foo(x:real) //line 2

   var z: integer; // line 3

   begin  ....  end

  procedure foo1(y:integer) // line 4

  var z: real;  // line 5

  begin ... end

begin  ... end

Hãy cho biết các khai báo có hiệu lực trong procedure foo1

Chọn một hoặc nhiều hơn:
 Chính xác
 Chính xác

Thông tin phản hồi

Câu hỏi 8

Đúng một phần
Điểm 0,67 của 1,00
Cờ câu hỏi

Nội dung câu hỏi

Cho đoạn chương trình sau viết trên một ngôn ngữ cấu trúc khối tựa Pascal:

var x,y:integer; // line 1

   procedure foo(x:real) //line 2

   var z: integer; // line 3

   begin  ....  end

  procedure foo1(y:integer) // line 4

  var z: real;  // line 5

  begin ... end

begin  ... end

Giả sử chương trình chạy theo trình tự: main gọi foo, foo gọi đệ qui foo, foo gọi foo1 với các đối tượng được cấp phát trên các bảng ghi hoạt động như sau:

name

Hãy cho biết môi trường tham khảo động của foo1 có chứa các đối tượng nào?

Chọn một hoặc nhiều hơn:
 Chính xác
 Chính xác

Thông tin phản hồi

Câu hỏi 9

Đúng một phần
Điểm 0,25 của 1,00
Cờ câu hỏi

Nội dung câu hỏi

Cho đoạn chương trình sau viết trên một ngôn ngữ cấu trúc khối tựa Pascal:

var a,b,c,d: integer; // line 1

  procedure sub0 

    var c: integer; // line 2

    begin .. end;

  procedure sub1(a:real) //line 3

var d:real; //line 4

procedure sub2(b:char)  //line 5

begin ... end

  begin ... end

begin ... end

Giả sử chương trình chạy theo trình tự: main gọi sub1, sub1 gọi sub2, sub2 gọi sub0 với các đối tượng được cấp phát trên các bảng ghi hoạt động như sau:

name

Hãy cho biết môi trường tham khảo động của sub0 có chứa các đối tượng nào?

Chọn một hoặc nhiều hơn:
 Chính xác

Thông tin phản hồi

Câu hỏi 10

Không chính xác
Điểm 0,00 của 1,00
Cờ câu hỏi

Nội dung câu hỏi

Cho đoạn chương trình sau viết trên một ngôn ngữ tầm vực động:

program main;

var a,b,c,d: integer; // line 1

begin ... end

  procedure sub0 

    var c: integer; // line 2

    begin .. end;

  procedure sub1(a:real) //line 3

var c:real; //line 4

  begin ... end

  procedure sub2(d:char)  //line 5

begin ... end

Giả sử chương trình chạy theo trình tự: main gọi sub1, sub1 gọi sub2, sub2 gọi sub0 với các đối tượng được cấp phát trên các bảng ghi hoạt động như sau:

name 2

Hãy cho biết môi trường tham khảo động của sub0 có chứa các đối tượng nào?

Chọn một hoặc nhiều hơn:
 Không chính xác
 Không chính xác
 Chính xác

Thông tin phản hồi

Nguyên lý ngôn ngữ lập trìnhの進め方に思う

何かと物議をかもす悪名高い必修科目のNguyên lý ngôn ngữ lập trìnhであるが、そもそもの問題がどこにあるのか。
まず、教え方、教える人にはこの3パターンがあるように思う。
1. 難しいことを簡単に教える=人財=プラスになる、いい授業
2. 難しいことを難しく教える=人存=プラマイゼロ、受けても受けなくても同じ
3. 簡単なことを難しく教える=人罪=マイナス、むしろ授業を受けないほうが理解できる
できれば教える人間には1であってほしいが、どう贔屓目に見ても2ではなく、3のように思える。
また、本来プログラミング言語とは楽しいものだ。
自分の作ったものが思い通りに動く楽しさ。
が、同科目にはそのような楽しさが微塵も感じられず、ただひたすら苦行の時間を過ごすだけ。
先日からドワンゴscala攻略サイトに載っている通りのソースコードを張り付け、一部変数の値を変えたりして実行してみたのだが、やってみるとscalaは面白いものだなと分かる。
また、記述とか妙な書き方をするなと思っていたら、いわゆる{}(中かっこ)が省略できるということに気付く。
さらに、return文を書かなくても戻り値を渡せるというのもわかる。
途中、Listなる概念も出てきたが、その辺は適宜ぐぐれば進められる。
で、それでいて課題が分からない要因としては単なるscalaのコーディングではなく、ANTLRなる分野の知識が要求されるということも分かった。ANTLRとはプログラミング言語でもデータベースでもWebサーバでもなく、なんだかよく分からない概念のようだというところまでは分かった。
参考サイトとしてはこのようなものが見つかった。
ANTLRのお勉強 | threecourse's memo
ANTLRは独自のプログラミング言語の分析をする仕組みということのようだ。
確かに同科目ではMC(Micro CあるいはMini C)なる独自のプログラミング言語の仕様書が与えられていた。

結局、ANTLRなるものを実現するにはjavaを使うことが多いが、同科目においてはscalaというプログラミング言語を利用しているということなのだろう。
つまり、MC(Micro CあるいはMini C)なる独自のプログラミング言語を分析するためにANTLRという技術が必要、その実装がscalaということなのだろう。
これを初回授業において明記しておけば混乱がないように思えるが、授業開始から2か月近く経ってからぼんやりと気付き始めたということである。
もし自分が同じ授業を展開するとしたらどうするか?
1. 本科目はANTLRというものを扱う。ANTLRの何たるかを説明する。
2. ANTLRを実現するには一般的にはJavaを使うが、本科目ではscalaを使う。つまり、scalaの習得も本科目の目的となる。scala習得のサイトを紹介する。
3. ANTLRで分析するためにMC(Micro CあるいはMini C)なる独自のプログラミング言語を準備する。
これを初回において重点的に説明することだ。
この説明が何もなく、ただ「sbtをダウンロードしろ」だけ。
そもそもsbtって何だ?何の説明もなくよく分からないままに1か月が過ぎ、この授業ではscalaというプログラミング言語を使っているということに気付く。
何のことはない、scalaというプログラミング言語を便利に使うためのソフトがsbtということになる。
箇条書きにしてみれば決して難しいわけではなく、むしろやることは明確(技術的にはともかく)と思えるのだが、分かりやすく説明するというのは本当に大事だなと改めて思った。
やっていることとしてはこのサイトが参考になる。拡張子g4だし。
iwsttty.hatenablog.com

が、あいにくともう中間試験も課題2個の提出期限も過ぎてしまった。
時間を巻き戻すことができない以上、次善の策は半年後あるいは1年後の再履修で初回からPC操作一つ一つに至るまで完璧にトレースするぐらいであるが、それでもこの予備知識の有無で授業の理解度が全く違ってくると思う。
幸いこの授業は数年前から同じことばかり繰り返しやっているので、再履修になっても内容が変わらないのが救いだ。

実は後日談があり、ドワンゴ公式サイトにあるコンソール命令を使っていたら、周囲の席の学生から、どうやったのか教えてほしいと言われた。
つまり、授業ではsbt→runしか教えていないということになる。
数回あった小テストではコンソールを知らないといちいちmain関数を作ってそこに命令を書かないといけないのだが、彼らの小テストの結果はどのようなものであったろうか。

補足だが、今の授業がまさにこれ。
学校は簡単なことを難しく教えてくれるところである – アゴラ
>なんにも知らないで授業を受ける子どもには、いったい何を話しているのかすらもわからない。逆に「すでに知っている子ども」には「なにをあたりまえのことを」となる。

初見学生にはいったい何を話しているのかすらもわからない。
逆に再履修社には「なにをあたりまえのことを」となる。

ベトナム大学院生の登校拒否とハーバード大構内自殺に思う

ベトナムの大学初日の授業開始前からエレベーターで同じになり、話すようになった学生がいたが、ある時を境に学校に来なくなった。
その学生の次セメスターの登録科目は1つもなかった。
その理由は本人にしかわからないが、ドロップアウトしたということである。
また、別な授業でプレゼングループだったメンバーがまさかの登校拒否となり、結局一人でプレゼンをすることとなった。
もっともこれは他のグループが最大6名のところ、たった一人でシステム構築から発表まで全部やったということも高評価の一因となり結果オーライとなった。
さて、自分もドロップアウトまではいかないにしても、途中3週間ほど学校に行かないときがあった。
逆に、その3週間の自主休講があったからこそ、気を取り直してその後休むことなくそのセメスターを終えることができ、今セメスターにおいては1回も休んではいない。
そういった意味ではしばらく休むというのも必要なことなのかもしれない。

ベトナム以外に目を向けると、ハーバード大学構内で自殺があった。しかも銃殺という日本ではあまりお目にかからない方法である。
日本でも銃殺ではないものの大学院自殺者が問題となっている。ニュースになっているのは氷山の一角であり、その手前で相談している人も多く、相談したおかげで踏みとどまれているケースも多いようだ。
また、日本人がアメリカの大学(院含む)に留学したがついていけず一人で悩み、自殺を考えているというのが大手小町だったか知恵袋だったかにあったが、そもそも論としてなぜ彼らがそこまで追いつめられているのか。
具体例として俺の場合、平日の昼間働き、夜間や土日で学校に通う。つまり趣味の習い事をしているような感覚だ。
習い事で人間関係に問題があったらどうするか?普通、行かなくなるよね。自殺する人いないよね。

スケッチだったかベッターだったかに載ってたサークルみたいのに参加した。人間関係が悪くてどうしようかなと思っていた矢先、俺がいないときに昼めし支給があったらしい。しかもその昼飯の費用は日本人からのカンパだと言われ、俺に金を払うように言ってきた。俺は食べずに金だけを払わされたわけだ。それでいてベトナム人から感謝の言葉もないしね。さらに俺が持参した準備物にも難癖をつけられ、これはもう潮時かと思った。自然と足が遠のき、正式に退会手続きとかしてないけど、もう1年以上行っていない。
どっかで会ったら気まずいかなとも思ったのだが、意外にもどっかで会うことはなかった。そうこうしているうちにメンバーも帰国したりして入れ替わるので、ますますもってその心配はなくなる。

本題だが、日本やアメリカの大学院生の自殺としては、その環境から逃れられず八方塞がりというのが背景としてあるのだろう。
東大を卒業して電通に入った新人の高橋まつりさんという方が自殺したニュースはいまだ記憶に新しいが、これもその環境から逃れられなかったのか。
何せ就業規則に「取り組んだら放すな、殺されても放すな、目的完遂までは」とあるくらいだ。
自殺は良くて退職がだめというルールなのか、会社に殺されても社員という身分を放さなかった。この場合、完遂したかった目的とは一体何だろうか。
この自殺を公にすることで抑止力が働き、凄惨な事件が今後起きなくなることか。
この件について3年目の先輩にインタビューを行ったところもあるようだ。
広告代理店だし、何か気の利いたキャッチコピーのような事をいうのか、それとも実直な意見として、「先輩である私たちが何の力にもなれず申し訳なく、大変残念な事件ではあるが、これを機に労働環境を見なおすきっかけとし、会社を変えていきたい。それが彼女に対する供養だと思う」あたりかと思ったら、予想のはるか斜め上を行くものであった。
http://biz-journal.jp/2017/01/post_17883_3.html

                                  • -

16年12月、電通入社3年目のある女性社員は、こう言い放った。
「できない女(高橋まつりさんのこと)が自殺したので、とても迷惑している。辞めるなどと言い出す社長など上層部の弱腰ぶりには本当にあきれた。クライアントに対して強く出られなくなったため、仕事がやりづらくて仕方がない」

                                  • -

えええええ??????
迷惑って言葉使う場面か?
社員旅行の集合時間に遅れてきたとかじゃないんだよ?
遺族の前でも同じこと言えるのか?
悲しみのかけらも感じられない態度には本当にあきれた。
この3年目の感想が本心から出たものであれば(というか普通は冗談でも言わないが)恐ろしいことこの上ない。
耳なし芳一等著名な怪談話など足元にも及ばない恐ろしさだ。
あまりの恐ろしさに夜一人でトイレに行けなくなる学生が続出する。
なんだか、この3年目もそのうち同じ目に遭うような気がする。

さて、この件に関して、「自殺するぐらいならなぜ退職しなかったのか?」という人が散見される。
純粋に疑問の意味で言うのならわかるが、自殺した人を非難するニュアンスで言っている奴は思考停止に陥っている。
そこで終わらせずにもう一歩踏み込み、「彼女は辞めたがっていたはずだ。辞めたくても辞められなかった圧力はどれほどのものだったのか?」となるべきだろう。
ドラマや映画などで暴力団や宗教団体を辞めるには指を切り落としたり大変な代償が必要らしいが、具体的に○○組ではどう、××教ではどう、とそれらに対して電通退職の難易度は上か下かまで提示できれば、退職という選択肢がいかに難しいものであったかということになる。
俺も新卒で入った会社を辞めようとしたが上司に阻まれ、結局退職申し出から実際の退職まで7か月かかった。結果として退職できたからよかったものの、その7か月の間、上司の嫌がらせが相当ひどいものであり、もしこの7か月中に耐えきれていなかったら3面記事を賑わせていたかもしれなかった。
これはいろいろ知った今だから言えることだが、どうしてもという状況であれば欠勤して傷病手当金を請求するか、書面による退職届を提出する等の救済措置があるようだ。ただ、大学を卒業したばかりの新人だとそこまでの知識はないかもしれない。
高卒や短大卒で就職した友達がいれば、自分より社会人経験が長い分こういった知識があったりするのだが、被害者はプライベートな時間がないほどの残業を強いられており、相談する時間も体力もなかったように思われる。
最近はベトナムでもインターンシップで大学生がわざわざ日本から、しかも自分の金で来るのが目立つが、それよりももっとやることがあるということを再確認した今日この頃であった。

Nguyên lý ngôn ngữ lập trình / Assignment 2

悪名高いNguyên lý ngôn ngữ lập trìnhにおいてAssignment 2が課された。例によって特設サイトhttp://www.cse.hcmut.edu.vn/onlinejudge/での提出である。
これは以前行われたAssignment 1で満点を取ったことを前提としており、そうでない学生の場合はこの時点でアウト。これに気付いたのは提出期限数日前であった。
たまらず抗議したが、これに対する回答は、「Assignment 3はAssignment 2以前とは関連のないものにする」であった。
また、以前のアシスタントを紹介するといい、電話番号を渡された。その場でアシスタント氏に連絡するも、彼からの有効な連絡があったのは提出期限をとっくに過ぎてからであった。
もっとも今回の提出期限に間に合わなくとも、半年後もしくは来年の再履修に備えて解答が得られれば良い。もちろんベストは今回の提出期限に間に合うことであったが。

さて、Assignment 2があまりに無理ゲーにも拘わらず、特設サイト上では満点やそれに近い得点者が目立つ。
不審に思ってベトナム人に相談したところ、結局は他の学生のソースコードをコピーしているだけだそうだ。それなら高得点で当たり前。謎は全て解けた。お前らのやってることは全てまるっとどこまでもお見通しだ!
なんだか、往年の小保方晴子のようである。
しかし、中には真面目な学生もいる。どうやら俺はその真面目な学生たちのグループに(いい意味で)入れられてしまったようで、課題の進捗についてよく話したが、彼らは他人のソースコードをコピーすることなく、自分の力で立ち向かっていた。

そもそも、この悪名高い授業Nguyên lý ngôn ngữ lập trìnhだが、なんだかよくわからないという点においては高校の物理のようである。最初につまづくと後ずっと分からない。そういえば高校の時は物理が最初から最後まで結局分からなかったし、当然定期テストの点も悪かったのだが、留年した記憶がない。追試もなかったように思える。一応授業自体は休むことなくほぼ毎日通っていたので出席による平常点が考慮されたのかもしれない。もっとも、クラスの大半が物理を分からなかったわけだから、杓子定規に成績を付けるとみんな留年で大変なことになるので、下駄をはかせたのかもしれない。そう考えると高校の授業は後に残るものが何もないという意味では時間と労力の無駄な科目が多かったと思う。
大学に入ってよかったのは物理も化学もなかったことだ。残念ながら数学からは逃れられなかったが、何気なく母校の公式サイトを見たところ、今は数学系の科目も必修ではなく選択科目となっていた。まあ数学も仕事で使わないからやってもやらなくても同じだしね。むしろMVCモデルとか大学でしっかりと教えたらその後の人生が大幅に楽になることだろう。
そういえば俺の代でも大学2年生からは数学系が選択科目になったけど、意外と穴場だったな。
何せ、駅のホームぐらいの広さの教室に学生が5人だけ。相当な不人気科目だ。俺以外の4人は教員免許取得に必須だから仕方なく履修していたクチだ。
先生も契約を切られてはたまらないから相当わかりやすく教えたのだろう、特に苦労なく単位習得、しかも満点に近い成績だったと記憶している。
2年生までで必要単位がほぼそろったので、3年生以降では必修科目と研究室に注力したように思う。
もっとも2年生か3年生か忘れたが、COBOLCASLの授業があった。どちらも全く分からずじまいだったが、なぜか単位習得に至った。これも出席による平常点か。幸か不幸か今のところ仕事でCOBOLCASLも使わないので助かっている。
逆に、Javaの授業はもっと真剣に受けておくべきであった。
UNIX/Linuxの授業は手前味噌ながら真面目に受講したと思うが、これは社会人になってもほぼ必須スキルみたいなもんなので結果として大学の授業料の元は取れたといえるかもしれない。
欲を言えばDB系の授業がなかったのが悔やまれる。今年時点のシラバスではデータベースの授業があるようなので、今の大学生はラッキー。

さて、話を戻し、本題である同科目の課題に対しては、何が分からないのか分からないといったレベルである。
日本の大学の先生が書いている発声練習というブログで、「質問というのは自分が何が分からないのかを把握していて初めてできることである」という趣旨の記述があった。
http://next49.hatenadiary.jp/entry/20081022/p2
また、「今時はその程度であればググればすぐわかるのでわざわざ教員に質問しない」ともあった。
つまり、「質問の必要性がある場合というのは、何が分からないのか分からないので質問しようがない場合である」ということだそうだ。
確かに、例えばプログラミング言語scalaの内容そのものがよくわからなければググった方が早い。わざわざ質問しないよね。
同ブログでは、「『何か質問がありますか?』ではなく、『助けが必要ですか?』という言い方が的確である」とまとめていたが、今まさにその心境である。
先述のアシスタント氏の手助けにより課題は解決するのだろうか。

Kiến trúc máy tính nâng cao を終えて

【客観情報】
科目名: Kiến trúc máy tính nâng cao
単位数: 3
必修区分:研究コースの場合選択科目だが、座学コースの場合必修
授業料: 2,280,000
Học kỳ: 1/2017-2018
時間帯: 毎週日曜日
授業期間: 2017/09/10/~2018/01/07
出席:取らない(ただしセミ抜き打ち小テスト、中間試験、プレゼンあり)
プレゼン:6~8名グループで1回
試験:セミ抜き打ち小テスト、中間試験、期末試験(PC使用不可、ただしノートや印刷した紙等の閲覧は可能)
レポート:6~8名グループで2~3回

【感想】
座学が中心で、一応アセンブラっぽいコーディングはやるのだが全て宿題となっており、レポート提出。
これがグループ単位となっており、ほぼ同じグループのメンバーにやってもらい、名前だけ載せてもらうことで平常点ゲットとなるかと思われたが、最終的な結果は後述。
小テストや中間試験は抜き打ちなのだが、たまたま用事があり先生に欠席届を出した際、「来週小テスト」の返信があり、内容の準備はともかく気持ちの上では準備できた上で小テストを受けた。
しかし、中間試験が問題であった。ある日、頭痛がひどかったので欠席届を送ったところ、先生からは「今日は中間試験」との返答であった。その時点で出発したとしたら余裕で間に合う時間ではあったものの、学校に到達が厳しいほどの頭痛であったため、やむなく欠席した。中間試験は全体の20%の配点であった。
その後しばらく学校を休んでおり、久々に出席したところ6~8名グループでプレゼンをやることになっていた。
そのころ勢いのあった角刈り君のグループに入ろうと話しかけたところすでに満員のようであった。
たまたま別な奴と話したところそのグループはまだ3~4名程度だったので、リーダーに掛け合い混ぜてもらった。
この授業のプレゼンは1つのパワーポイントやPDFファイルで行うが、自分の担当箇所を自分で説明するというもの。つまり名前だけ載せてもらうことはできない。
俺は中間試験を休んでしまったこともあり、プレゼン準備に力を入れた。
あいにくとプレゼン当日に激しい頭痛に見舞われたが、プレゼンは他のメンバーとの兼ね合いもあり休むわけにいかないと思い、それでも自分で運転する体力はないのでタクシーで登校。なんとか成し遂げ、評価は90%とかなり高い物であった。
その後期末試験を経て最終的な結果が10点満点中4.5点。同じプレゼングループのメンバーからは、「惜しかった。中間試験を休まなければ(5.0点以上取れて)単位取得できていたかも」となぐさめの言葉をもらったが。
結果として単位は得られなかったが、プレゼンのグループリーダーといろいろ話して親しくなり、くしくもその彼と次セメスターで同じ授業になり、その後いろいろな情報を得ることができるようになった。

Lập trình nâng caoを終えて

【客観情報】
科目名: Lập trình nâng cao
単位数: 3
必修区分:研究コースの場合選択科目だが、座学コースの場合必修
授業料: 2,280,000
Học kỳ: 1/2017-2018
時間帯: 毎週日曜日
授業期間: 2017/09/10/~2018/01/07
出席:取らない(ただし後述のプレゼンあり)
プレゼン:グループ1回(個人でもOK)
レポート:1回
試験:期末試験(PC使用不可、ただしノートや印刷した紙等の閲覧は可能)

【感想】
解説中心で授業らしい授業であった。
学生のノートPCの持ち込みが前提となっており、特定のソフトの操作やソースコードの入力、実行を行う。
レポートは本来グループであるが、同じグループのメンバーが逃亡した(授業に来なくなった)ため結局一人で行うこととなった。
グループで行う場合は3~6名一組だが、発表は誰か一人でよい。この場合発表者以外は名前だけ載せて何もせず平常点ゲットということもあり得る。
実は俺はこれを狙って6名のグループに属していたが、妙にやる気のあるやつが3名ずつの分割を提案、俺の属した3名でどうするか相談しているうちに他の2名が登校拒否となり俺一人だけとなってしまった。
仕方がないのでruby and railsチュートリアルにあるコードを転用して急ごしらえでそれらしいシステムを構築したところ、なんとそれが高評価であった。
学生間の360度評価だったらどうなっていたかわからないが、このプレゼンは先生の評価だけで決まるのでそれに助けられた形となった。
実はプレゼンにはローカルルールがあり、動画を利用すると低評価。パワーポイントは動画埋め込みが弱いのでもともと動画を使う予定はなかったが万が一使っていたら取り返しのつかないことになっていた。
また、これは当たり前と言えば当たり前だが、何を思ったかプレゼン中にエロ画像を写した奴がいて、教室内に失笑が漏れたが、ここで先生が大激怒。もちろん、エロ画像を写した奴にだよ。失笑した奴らにじゃないよ。
彼がなぜわざわざプレゼンの場でエロ画像を写したのかは本人のみ知るところだと思うが、この時の先生の怒り様が半端ではなったため、おそらく相当な減点であっただろう。先述の動画を利用したグループも叱責というか注意程度であり、怒ったわけではなかった。なお、この動画を使ったグループの発表者が次セメスターで必修科目の延長署名を集めた角刈り君である。
実は俺もプレゼンで萌え画像というかロリ画像を使ったのだが、そもそもベトナムロリコンという概念がなく単なる子供の画像と解釈されたこと、そしてこれが怒られた彼との最大の違いだが服を着ていたことが幸いした。

期末試験はプログラミング言語の問題なのにまさかのPC使用不可でできは悪く、しかも、試験後のレポートも他の学生はCuda Cのコードを書いてくることだったがなぜか俺にだけPythonを指定され、やむなくその通りにしたが提出後の返答はなくしばらく不安になっていたが、数か月後に成績発表があり、なんと10点満点中8点。
散々だったHọc kỳ 1/2017-2018で唯一単位取得ができた科目であった。まさに、捨てる神あれば拾う神あり。

Hệ cơ sở dữ liệu nâng caoを終えて

【客観情報】
科目名: Hệ cơ sở dữ liệu nâng cao
単位数: 3
必修区分:研究コースの場合選択科目だが、座学コースの場合必修
授業料: 2,280,000
Học kỳ: 1/2017-2018
時間帯: 毎週土曜日 18:15~20:40
授業期間: 2017/09/09~2018/01/13
出席:取らない(ただし後述のプレゼン2回及び抜き打ち小テストあり)
小テスト:抜き打ち1回
プレゼン:グループ1回、個人1回
レポート:2回
試験:中間試験1回、期末試験(PC使用可能)
その他:課外授業強制、教師の日課金(一応任意)

【感想】
授業らしい授業もなく、学生のプレゼンが主であった。
2~3回ほど欠席してしまったが、それ以外はすべて出席、試験はもちろんプレゼン2回実施、レポート2回提出したが10点満点中3.7点とコストパフォーマンスが悪い科目であった。
選択科目なので2度と取らないが、再履修の学生もいた。おそらくコースの関係で必修になっているのであろう。
実は強制の課外授業があり、これに参加しないと減点。また、教師の日に向けて集金があったが、この課金をしなかったのも低得点に関係しているのだろうか。
なお、他の科目では今のところ教師の日の集金はなかった。

成績平均点について

日本の大学では成績証明書もしくは単位習得証明書なる物があり、100点満点でそれぞれの科目の成績が分かる。
この場合、落ちた科目は除外される。
ベトナムの場合Trung bình tích luỹ môn họcもしくはĐiểm trung bình toàn khóaというのがこれに当たる。
後者のĐiểm trung bình toàn khóaをGoogle翻訳するとGPAとなるが、いわゆるアメリカのGPAとは唯一にして最大の違いがある。
というのも、アメリカの大学で言うGPAは、落ちた科目を0点として平均点を計算するからだ。
ほぼ満点の科目が何個あろうと、途中で行かなくなった科目があれば0点となり平均点は大きく下がる。さらにGPAが一定以下の場合は強制的に退学となる。アメリカの大学(院を含む)の授業料は1科目20万円ぐらいで、卒業(修了)には数千万円かかかるそうだ。ネットゲームで言えば数千万円近く課金したのにアカウント削除されるぐらいのインパクトだろう。これはフェアじゃない。
幸い、ベトナムは日本同様、落ちた科目は平均点に含まれない。

なお、最近では日本の大学でもGPAを計算するところが出てきて、アメリカ同様に落ちた科目は0点として平均を出すようだ。
もっともこれはアメリカの大学院に留学する場合に使用するぐらいで、日本国内で就職する場合は普通に成績証明書もしくは単位習得証明書を提出するので、落ちた科目に関しての情報は開示されない。

科目登録について

日本の大学でも同様、科目登録あるいは履修登録というものが存在する。
ただし、入学直後は学校側から強制的に必修科目の一部を登録させられてしまう。
これが非常に曲者で、自分のコースに関係ない物を強制的に登録させられ、結果として課金させられる。
これに関しては事前に防ぐ手立てはないので、強制的に登録させされた時点で自分のコースに必要な科目か確認するしかない。
関係ない科目が登録及び課金されていたら即座に学校側に連絡、その科目を取り消させる。
さて、入学して半年~1年ぐらいで強制登録はなくなる。
もっとも、事前にこのブログを読んでいた状態で入学すれば最初から無駄を排除することも可能だが。

さて、実際の科目登録だが、これはポータルサイト上で行うので学校に行く必要はない。
受けるべき科目の曜日と時間帯がかぶらなければいくらでも登録できる。
ただし、日本の大学と違い、1科目いくらで課金されるので注意。

日本の大学であればとりあえず100単位ぐらい登録し、数打てば当たる方式で半分の50単位は取得、それを3年繰り返せば卒業に必要な単位をほぼ修得でき、4年生で就職活動や研究に集中できるわけだが。中には勉強熱心な先輩がいて、4年間で300単位以上を取得したらしい。ということは登録したのはそれ以上ということになる。
もっとも文系の学部だと履修制限なるものが存在し、年間40単位までした登録できないとか正気の沙汰じゃない。
ところが、最近は理系学部含めCAP制限なるものが多くの大学であるようだ。なんか難しい横文字を使っているが要は履修制限。
上限がどれぐらいかは学校や学部によるだろうが、豪快に100単位以上登録ができないのは痛手であろう。先述の先輩のように300単位以上取得するようなやる気のある学生の芽が摘まれてしまうことにもなる。
日本の大学でも変な履修制限などはせず、科目ごと課金にすれば真剣に科目を選択するだろうし、何より授業がほとんどない4年生の学費を大幅に減らせるはずだ。放送大学が科目ごと課金を先駆けて実施しているようだが。
日本では大学全入時代などと呼ばれ、入学がやさしくなった分、入学後の勉強がハードになっているのだろうか。

科目ごとの授業料一覧

Triết học (3単位) 1,860,000
Đổi mới sáng tạo & Khởi nghiệp (2単位) 1,485,000
Quản lý và lãnh đạo (2単位) 1,485,000
Phương pháp nghiên cứu khoa học nâng cao (3単位) 1,860,000
Nguyên lý ngôn ngữ lập trình (4単位) 4,125,000
Phân tích thiết kế giải thuật (3単位) 不明
Cấu trúc dữ liệu và giải thuật (4単位) 不明
Mạng máy tính (4単位) 不明
Giải thuật nâng cao (3単位) 2,280,000
Hệ cơ sở dữ liệu nâng cao (3単位) 2,280,000
Kiến trúc máy tính nâng cao (3単位) 2,280,000
Lập trình nâng cao (3単位) 2,280,000
Khai phá dữ liệu (3単位) 2,280,000
Cơ sở tri thức (3単位) 2,280,000
Hệ thống thông minh (3単位) 2,280,000
Lập trình logic và ràng buộc (3単位) 2,280,000
Xử lý ảnh số và video nâng cao (3単位) 2,280,000
Thiết kế phần mềm hướng đối tượng (3単位) 2,280,000
Hệ hỗ trợ quyết định (3単位) 2,280,000
Thống kê đại số tính toán và ứng dụng (3単位) 2,280,000
Tính toán hệ thống khả cấu hình (3単位) 2,280,000
Xử lý ngôn ngữ tự nhiên (3単位) 2,280,000
Đồ họa máy tính nâng cao (3単位) 2,280,000
Phân tích chương trình (3単位) 2,280,000
Kiểm tra chương trình (3単位) 2,280,000
Hệ thời gian thực (3単位) 2,280,000
Hệ phân bố (3単位) 2,280,000
Tính toán song song (3単位) 2,280,000
Nguyên lý thiết kế và kiến trúc phần mềm (3単位) 2,280,000
Hệ thống nhúng (3単位) 2,280,000
Thiết kế phần mềm theo mẫu (3単位) 2,280,000
Điện toán đám mây (3単位) 2,280,000
Khai phá dữ liệu siêu lớn (3単位) 2,280,000
Bảo mật trên thiết bị di động (3単位) 2,280,000
Bảo mật tính riêng tư trong khai phá dữ liệu (3単位) 2,280,000
An ninh m¿ng (3単位) 2,280,000
Bảo mật thông tin cho nhà quản lý (3単位) 2,280,000
Nhận dạng mẫu và học máy (3単位) 2,280,000
Mô hình hóa & đặc tả yêu cầu phần mềm (3単位) 2,280,000
Công nghệ phần mềm thế hệ mới (3単位) 2,280,000
Mạng xã hội và thông tin (3単位) 2,280,000
Mạng máy tính nâng cao (3単位) 2,280,000
Bằng chứng số (3単位) 2,280,000
Bảo mật cơ sở dữ liệu (3単位) 2,280,000
Bảo mật sinh trắc học (3単位) 2,280,000
Bảo mật hệ thống thông tin hiện đại (3単位) 2,280,000
Bảo mật trên điện toán đám mây (3単位) 2,280,000
Mã hóa (3単位) 2,280,000
Dữ liệu lớn (3単位) 2,280,000
Hệ thống thông tin quản lý (3単位) 2,280,000

Nguyên lý ngôn ngữ lập trình 驚異の再履修率!

Nguyên lý ngôn ngữ lập trình (必修、4単位、授業料約2万円)の受講者名簿を見た。
全登録者は49名。ただ、授業が始まってからまだ1回も来ていない1名を除外し、実質48名ということになる。
この48名中、以前この授業を受けたことのある人数は20名。つまり、20 / 48 = 0.42 だから、42%が再履修者だ。
驚くべきことに、うち1名はこの授業が3回目となる再々履修者であった。
他の科目の再履修率がどれほどかまだ名簿を精査していないから比較できないが、異常ともいえる数値だ。
しかも再履修者も含め、少なくとも44名以上は毎回出席している。皆勤賞だ。
必修科目なんだから出席していれば単位認定すればいいように思えるが、大学としても単価が高い4単位科目を落とすことで安定した収益源としているのだろうか。
同科目を初めて受講する学生は28名。
学生数や単位習得の難易度が以前と同程度と仮定するならが、この28名中たったの8名が単位習得、残る20名は次回以降のセメスターで再履修ということになる。

実は2月末の初回授業の日、前期であの悪名高い科目を一緒に戦った戦友ともべきクラスメイトと隣同士で座った。
彼はもともと能力の高い人であったが、本科目においてもscalaIDEの使い方を熟知しており、自分の能力の低さにコンプレックスを感じていた。
だがその彼も再履修であることがわかった。
しかし、これは決して彼の能力が低いわけではない。
むしろ、彼ほどの能力があっても再履修を余儀なくされる恐るべき科目ということになる。