Софтуерно Инженерство
Loading...
Filkolev avatar Filkolev 4428 Точки

[Useful Info] Как да даваме полезна обратна връзка към чужди домашни

Здравейте,

Тази седмица започва нов подготвителен курс по C# и предполагам на доста от новите ни студенти ще им е полезно да видят някакви препоръки как да пишат коментари към домашните на своите колеги. Въпросът "Добре де, аз като нищо не знам, как да оценявам някой друг?" ми е задаван неколкократно, а вероятно си го задават почти всички в началото.

Знаете също, че системата не е идеална и доста критики сме изписали по темата. Истината е, че не малка част от обратната връзка не е качествена по различни причини. Според мен и за колегите от всички нива ще е полезно да споделим опита си, защото винаги има какво да се подобри - дали в съдържанието на коментарите, дали в тона, структурата или нещо друго.

Темата зрее от няколко седмици, така че може да се наложи да скролвате доста, за да стигнете до края :D Разбира се, сигурно ще пропусна нещо, което считате за важно, а в други моменти няма да сте съгласни, така че коментирайте на воля.

Гледах си скоро статистиката колко домашни съм проверил и са доста. Да кажем около 200 от подготвителното ниво насам. Като сложим и коментарите, които съм получавал, смятам, че имам база, на която да стъпя, за да формулирам някакви препоръки. Пак казвам, допълвайте, защото като започне всеки нов подготвителен курс тая част от обучението е най-мъглива за студентите и е хубаво да имат някакъв guideline.

Та, конкретно:

1. Бъдете съвестни
Това значи да отделите подобаващо време на всяко едно домашно и да му отделите цялото си внимание. Зависи от самото домашно колко време би отнело това, но обикновено около 15 минути са достатъчни. Ако имате повече препоръки към човека може и до половин час да стигне писането на добра обратна връзка, но това са по-скоро изключения. Да кажем 15 минути концентрация, това според мен е съвестно проверявне. Ако времето ви е кът (че на кой не е), проверете по-малко домашни, примерно 3-4. Но ако се постараете, увеличавате доста вероятността отсрещната страна да оцени усилията ви. Другата опция е да проверявате на кило и да се надявате от 10-15 човека поне трима да цъкнат, че коментара е коректен и полезен; макар да не е така.

2. Бъдете обективни и непредубедени
Всички сме попадали на преписани домашни. Кофти е и е изнервящо. Особено като се случи няколко пъти поред. Затова просто оценявате обективно това, което е предадено. Не може да знаем кой откъде е преписал, не може да гадаем на кого за коя задача не му е стигнало времето или е забравил да я тества. Отбелязвате пропуските, давате си препоръките за подобрения все едно оценявате лично творчество, макар в някои случаи очевидно да не е така.

Относно непредубедеността, ще дам пример със себе си. Съвсем класически си насрах едно от домашните по PHP. Бях си го направил ОК, но вкарвах елементи в HTML-a с echo (който не е минал през тоя курс - абе кофти практика). Та, реших да си коригирам нещата, защото вече знаех как, обаче в деня на предаване откъртих и се събудих към 23:00. Набързо оправих нещата и качих новия архив в 12 без 3; познайте дали имах време да тествам задачите. Бях направил мусака на 2-3 места, което от гледна точка на проверяващия може да е изглеждало като небрежно преписване или тотална некадърност. Но идеята ми е, оценявате каквото е предадено, а не каквото си мислите, че е било направено, т.е. има проблеми по задачите - режеш и толкова, нито е редно да сте по-строги, защото смятате, че имате работа с мързеливец, нито трябва да сте меки, защото си мислите, че може обстоятелствата да са попречили на човека да си свърши докрай работата. Освобождавате се от такива фабули и оценявате кода, а не човека.

Трети извод от това правило - ако е предадено нещо различно от задачите от конкретното домашно, това са 0 точки; дали по грешка е качен друг архив или не, не е ваша работа да разследвате, от гледна точка на проверяващия домашното не е направено, за което има само една възможна оценка.

3. Бъдете усърдни и критични
Това е най-трудното за един начинаещ, защото винаги има сериозна доза неувереност и притеснение (поне при съвестните проверяващи), че може да напишат нещо грешно. Еми случва се, преглътнете го. Във всеки един курс помня неверни неща, които съм давал като препоръка към домашно, но това не прави целия коментар неполезен. Затова, тествайте всички задачи с всички дадени примери и с измислени от вас примери, разгледайте внимателно кода, вижте къде може да се счупи, къде да се оптимизира и т.н. Това се придобива с повече практика, но коментар, който обяснява кое къде и защо не е наред и показва по-добро решение, е изключително полезен; получавал съм няколко такива и те са ми помогнали много, за да подобря качеството на решенията си. По-добре да критикувате човека и да не сте съвсем прави, отколкото да не му кажете, че бърка някъде.
На въпросното умазано домашно по PHP получих два коментара - единият си беше посочил всички пропуски, другият казваше "много ми харесва домашното, нямам забележки". Кое е по-полезното според вас?

4. Конкретизирайте

Като има поблем, кажете къде е - в коя задача, коя част, кой ред дори. Обяснете защо това не е ОК, кога се чупи, дайте пример. Твърдение от типа "Това не е вярно" трябва да се докаже. Ако задачата е да се намери дали дадено число е просто, демонстрирайте при какви стойности се връща грешен резултат. 

Ако давате препоръка, кажете защо е по-добре да се подходи по един начин, а не по друг. Е, не е лесно, понякога ми се налга да казвам "бе това на лекция го посочиха като лоша практика".

Конкретизирайте как всъщност се решава този проблем, дайте верния алгоритъм и обяснете как работи. Ако давате препоръка обяснете защо вашето предложение е по-оптимално (примерно много по-бързо е, или пък по-четимо).

Общите приказки, без да има и конкретизацията, не помагат, а са по-скоро симптом, че ви е мързяло да си свършите работата при проверяването.

5. Преценявайте кое е съществено и кое не толкова
Доста свързано с предната точка. Когато казвам, че е добре да сме критични, добре е също така да преценяваме кое е същински пропуск по решението на задачата и кое всъщност е препоръка за някакво подобрение. Случвало ми се е да пиша много дълги коментари с доста препоръки, но в крайна сметка да се окаже, че домашното е отлично направено, демек програмите работят, криво-ляво, но работят вярно. За целта след като напиша даден коментар си го прочитам наново преди да поставя оценка и преценявам едно по едно нещата, които съм написал - кое е пропуск и кое не.

Давам отново пример от личен опит. Домашно, в което имах пропуски, несъмнено. Получих много съвестен коментар, който обаче замалко да сложа като некоректен по две причини - небалансираност и лоша структурираност. Какво имам предвид. Всичко беше вярно като съдържание на коментара, но човекът беше започнал с много кофти въведение от типа "слабо домашно, имаш много пропуски, ей сега ще ти ги опиша всичките ако успея". Какво не е наред тук? Освен твърде критичния тон, с който започва (прозира предубеденост, т.е. видял човекът много пропуски и пише все едно има работа с някой дето е искал да вземе точките от домашното - може да е така, може да не е, затова без предразсъдъци). По-сериозният проблем беше, че реално аз имах може би 3 пропуска в това домашно (бая очевидни, но 3, не толкова много). Всички останали т.нар. пропуски бяха всъщност препоръки - че тука имало еди-каква си функция, която го правела същото. Е, направил съм задачите както съм могъл, това важи за всички (които сами са си правили задачите), никой не е длъжен да е енциклопедия за знайните и незнайни функции в даден език. Знанието ми е полезно, благодарен съм, че ми бяха посочени по-добрите начини, но остава проблемът с началното изречение, което квалифицира всички тези неща като пропуски, без да са такива. Оставам с впечатлението, че съм бил орязан, защото не съм направил максимално оптималните неща, което не е ОК. И заради това именно имах доста сериозен размисъл преди все пак да призная усилията на оценяващия. Затова - прочитате си коментарите преди да ги събмитнете и преценявате кое е грешно и кое неоптимално решение, има разлика.

6. Бъдете добронамерени
Предпоставка за това е да бъдете непредубедени, колкото и да е трудно понякога. Просто пишете с добронамерен тон, това не изключва критичността, която споменах по-горе. Вашата цел е да помогнете на някого, а не да му покажете колко е тъп. Коментари от типа "не си се справил добре" не са готини, ако наистина домашното е кофти просто се въздържайте от такива определения и пишете конкретно по проблемите. А и във всяко домашно има по 1-2 неща, които са направени добре, аз опитвам винаги да отбелязвам такива моменти, защото не е яко да вкарваш време и усилие за дадено домашно и накрая да те наплюят; не може всичко да е трагично зле, все някъде има нещо, което е добре направено и е хубаво понякога да окуражите отсрещната страна.

7. Бъдете полезни
Това е доста трудно да се постигне, но все пак цялата концепция на домашните се върти около това. Как да сме полезни? Ами трябва всички гореизброени неща да са налице, т.е. трябва да сте разнищили домашното и всичките му пропуски, да ги опишете по подходящ начин, с подходящ тон (който да накара човека да се замисли над това, което му казвате, а не да се ядоса), да структурирате добре нещата, като обърнете повече внимание на съществените неща и отбележите накратко не толкова важните. Освен да посочвате проблемите, трябва да давате и решенията, подходите, евентуално повече източници на информация. Един колега сподели, че при липсваща задача дава линк към някоя тема от форума, където е постнато решение; аз например давам набързо насоки как се решава (защото не знам дали не е стигнало време или човекът просто не знае как да я направи).

Примери за неполезни коментари (перифразирам, но сигурно сте виждали такива).

Пример 1: "Много добро домашно, нямам забележки, успех!".
Защо е лош? Не дава никаква нова информация, това може да се напише и без един ред код да се прочете. Ако наистина домашното е много добро, посочете кое му е доброто, кое ви е харесало. Аз имах такъв случай наскоро, изписах ебати дългия коментар, за да кажа на човека колко му е яко домашното (на база гадните домшани, които проверявах преди това) и му описах най-старателно всички компоненти, които са направени добре - именуване на променливи, подредба на кода, използваните алгоритми. Даже май успях да вмъкна 1-2 несъществени критики, примерно за много сметки на един ред (лоша четимост на кода) и недобри имена на променливи в една задача. Винаги, ама винаги има какво да се даде като обратна връзка, колкото и да е добро домашното, колкото и да сте назад с материала.

Пример 2: "много зле направено домашно, да беше погледнал форума за готови решения поне".
Защо? Има ли какво да обяснявам. Кратък, несериозен, с отвратителен тон (почти лична нападка - повтарям, оценявате домашното, не човека). Никаква конкретика - кое му е зле, всички задачи ли са зле или само някои? Ако всички са зле защо? Подредба на кода, кофти практики, грешни резултати, какво му е зле-то? А как да го оправя? Не присъства нито един елемент на качествения коментар. Това по никакъв начин не ми помага да си направя домашното по-добре, само ме вбесява.

За съжаление предвид сроковете, с които работим, повече от половината коментари, които получавам, са некачествени поради някаква причина. Има една част, които определено са писани с мисъл и старание, но им липсва нещо - дали тонът не е добър или критикуват несъществени неща. Затова се надявам съвестните колеги да намерят нещо полезно в тая тема и да споделят своето виждане, за да може поне хората, които искат да дават качествена обратна връзка, да го правят още по-добре.

Абе тука май трябва да сложим ограничение на броя думи в тема, че някои хора (няма да позочвам) прекаляват с писането :D

 

22
Общи приказки
quickben avatar quickben 976 Точки

Браво Филип, явно курса по TeamWork and Personall Skills си е казал своето! (визирам, лекцията в която, се препоръчва да обръщаме негативното в позитивно, знам колко сме се смеели/плакали  на коментарите върху домашните ни)

И едно предложение от мен(то след този роман няма какво да добави човек):

Ако сте малко по-напреднал и сте наясно с някои от добрите практики в програмирането и забележите, че някой не ги спазва, напишете нещо по-въпроса, но имайте предвид, че за начално ниво не е правилно да се отнемат точки от оценката на база качество на кода.

Пример: Задача решена с прекалено много вложени условни конструкции(по спомен мисля, че над 3 вложени такива се води лоша практика) която работи перфектно, спокойно(според мен) можете да добавите един ред, че не е добра практика да се слагат толкова много вложени конструкции, защото се нарушава четимоста на кода. (малко е субективно, защото има задачи в които това е малко или много неизбежно)

ps - Считам, че темата заслужава да бъде направена "важна" за да се види от колкото може повече хора които сега започват(и не само;)

 

6
06/01/2015 18:33:59
Filkolev avatar Filkolev 4428 Точки

По отношение на лошите практики, аз обикновено рядко отнемам точки, зависи доколко е лоша практиката. Основният ми критерий е дали работи вярно програмата. Субективизъм винаги ще има каквото и да правим, но целта е да го намалим до минимум.

5
RoYaL avatar RoYaL SoftUni Team Trainer 6883 Точки

От 2ро ниво нататъксчитам за правилно да се отнемат точки и за това, след като вече нивото е насочено към качествено програмиране :)

3