Преди всичко, искам да кажа, че това не е оплакване, не е hate, не е rant, не е критика. Това е само предложение и е само с идеята за подобрение, за обсъждане и за даване на feedback от нещата в курса от студентите, защото смятам, че това е нещо, което може да допринесе много както за качеството на курса, така и за студентите.
Смятам, че текущата форма на feedback върху задачите, който се дава, не допринася по положителен начин на курсистите. Основните ми причини са:
- Дестимулира хората да бъдат старателни в решаването на задачите са.
Ще дам пример:
В момента има 5 дена до крайния срок на задача 3. Започвам да пиша решение. Имам 2 избора:
А: Полагам възможно най-много старание над задачата във всеки един аспект. Старая се да са спазени всички конвенции, да е форматиран правилно кодът, да са спазени всички добри практики, да е възможно най-оптималното решение и т.н. Това ми отнема (съвсем хипотетично) 2 дена.
B: Пиша нещо, колкото да работи. Не се старая, не губя "излишно" време, важното е да тръгне. Това ми отнема (отново хипотетично) 1 ден. Х дена по-късно получавам feedback с нещата, които не са наред в кода ми. Оправям ги (което гарантирано отнема по-малко от 1 ден, понеже голяма част от допълнителната работа е вече свършена вместо мен) и имам решение (може би почти) като това, което бих получил и от горния вариант.
Кое от двете бих избрал аз? Не говоря за себе си, конкретно, а говоря кое би избрал, средно-статистически, един курсист. Не искам да казвам, че курсистите са мързеливи, но едното има очевидни предимства пред другото - отнема по-малко време, по-малко усилия. Въпреки това, носи същите крайни резултати - еднакво добро решение.
Изборът между двете става напълно неволно и несъзнателно и хората ежедневно вземат решения, които им спестяват време и усилия, защото са едни от най-ценните неща. Ясно е, че никой не би си казал "Сега ще напиша нещо набързо, пък те ще ми го оправят". Просто аз, като курсист, след като седна да си пиша задачата не се чувствам задължен и стимулиран да дам най-доброто от себе си. Конкретно за себе си, го правя, но бих се чувствал много по-мотивиран и най-вероятно бих дал много повече от себе си, ако знаех, че това е final решението ми.
- Създава unfair среда за курсистите.
Доводите за това са вече по-очевидни. Хората, които учат нещата сами, и хората, които "следват инструкции" са еднакво "наградени". Това, до определена степен, обезсмисля класацията, оценяването и точките, които са много много важна част за един курс. Аргументите за това също са сравнително ясни и щом го има имплементирано в курса, явно са ясни за всички. Това също допринася за дестимулирането на курсистите. Също така, учи курсистите да не правят нещо много важно за ежедневната работа на всеки програмист - да си гугълват нещата. Наистина ще ми е трудно да намеря коментар на решение, в който 90 % от нещата не са googleable.
Като цяло, стимулира хората да не бъдат проактивни.
Един възможен контра-аргумент на това е "Важното е, че накрая са се научили как се прави, one way or another". Това не е валиден аргумент по много причини но основно, защото:
Има значение как си се научил да правиш нещо. Да си проактивен е ужасно важно качество, особено в работата на програмистите, защото ако не успяваш сам да си намериш решенията, няма да успееш да се развиеш никога, а развитието е още по-essential специално в тази сфера. Освен това, ако важното е "да се научат в крайна сметка", съвсем възможен вариант е да се дава feedback-ът след крайния срок. Така пак ще се "научат хората", но няма да бъдат еднакво оценени с хората, които са се научили сами, което съответно ще елиминира горните две причини.
Моите предложения са:
Feedback-ът да бъде много по-абстрактен, неконкретен, несъдържащ код, кратък и необхващаш всички проблеми в решението. Пример: "Рекурсивното решение не е най-оптимално в случая, опитай с итеративно." или "Не са спазени неща от style guide-a.". Примери за "лош" (според моето предложение) feedback: "
new_head.zip(direction).map {|element| element.inject(:+)}
e overkill. Искаше просто[x1 + y1, x2 + y2]
" или "можеш да пренапишешnot on_snake and not on_food and not out_of_bounds
катоnot(on_snake or on_food or out_of_bounds)
". Като цяло, не трябва да представлява "Този ред от кода ти е грешен. Напиши го ей така.", а по-скоро "Концепцията/идеята ти за това не е правилна, пробвай с тази другата".Feedback-ът да се дава след крайния срок. Вече го описах това, възможно е да е пак индивидуален, както и "общи проблеми от решенията" на презентация.
Feedback-ът да "струва" нещо. Примерно, ако искаш да получиш feedback по-рано, трябва да дадеш 1 точка. Ако искаш още след това, още една. Или просто да се отнемат точки, ако оригиналното решение е имало много неправилни неща и изисква дълъг feedback. Последното е по-скоро не за предпочитане, защото пък е стимул хората да предават в последния момент, за да не им вземат точка преди това.
No feedback.
Ако трябва да приоритизирам, смятам, че второто и третото са най-добрите варианти.
Принципно, не виждам нито една полза за развитието на курсистите и за обективността на оценяването коментарите да се получават преди крайния срок. Единствената идея на това е да се покаже на хората кое е грешно и кое - правилно, което е напълно полезно, но може да се постигне по същия начин, ако хората го получат след крайния срок.
И отново, това не е тема с цел "не ме кефи това", а е тема с цел дискусия. Още повече, тема с цел някой да ме убеди в противното е.