After the 20 academic hours of teaching materials are delivered,
an open-everything oral mid-term exam follows,
and a tentative grade is assigned.

The tentative grade becomes the final grade,
after N homework (HW) assignments successfully compile,
and each line of each HW assignment is properly explained
(a kind of final exam);
N is the number of credits earned from the course.

N could be 0
(one gets only a certificate of achievement,
for diploma supplement,
on condition that the mid-term exam is passed),
1, 2, 3 or 6.

Each student implements a different algorithm.
The TA of the course determines and announces the method,
which ensures that each student works on a different algorithm,
selected by the student.

The 1st HW is on MATH,
and includes an algorithm form the book "MATH in C"
(any except those from:
SEARCH, SORT, RANDOM NUMBERS, FUNCTION EVALUATIONS)

The 2nd HW is on IMAGE PROCESSING from "IMAGE PROCESSING IN C".

The 3rd is on ML from the Google Conference at Stanford,
or from another respectable source.

The 4th is from any of the following:
GI, Finances, GeoPhysics, Security,
or from the MSC/PHD topic of the student.

The 5th and the 6th are determined on the spot,
in the classroom.

If a HW does not compile, one gets a worse grade, for one step,
if two HW assignments do not compile, one grades 2 grades down, etc...

If one takes one more HW,
compared to what is needed for N credits that he/she takes,
one could improve the grade from the mid-term exam,
for one step.

After all HW assignments compile,
one has to difend all lines of code
via a Skype conversation
(this is a kind of final-exam).

If all lines of code are successfully defended,
the grade from the mid-term exam
becomes the final grade,
possibly improved for one,
if an additional HW assignment was taken.