Очевидното: код
Кодът трябва да покрива функционалността, описана в заданието. Също така, трябва да се държи адекватно във всички случаи: грешен потребителски вход, грешки от околната среда, паднал таван. Под "адекватно" се има предвид следното: ако е възможно — нека работи правилно, а ако не е — да уведоми потребителя по подходящ начин защо не може да работи правилно.
Тестове
Хубаво ще е тестовете ви да покриват възможно най-голяма част от кода и разклоненията в него. Но много по - важно е колко са полезни тези тестове. Също така нека са поставени в отделни файлове в зависимост от логическата структура на проекта ви. Не забравяйте example тестовете, които демонстрират как се ползва вашият проект и при нужда benchmark тестове.
Игри и друг GUI intensive софтуер
Когато сте избрали да пишете неща, наподобяващи игри — или каквито и да е други проекти, изискващи сериозно GUI — постарайте се да "откачите" основния си код максимално много от рисуването/графиката/GUI-то. Целта ви е да имате много ясно разделение и абстракция между "ядрото" на вашия проект и графичния му интерфейс. Добре би било основната логика на проекта ви да се намира изцяло в "ядрото", под формата на пакети, типове и прочее, като това ядро предоставя на своите ползватели някакво API. Тоест, стремите се да пишете въпросното ядро все едно пишете библиотека, която ще се преизползва в друг(и) софтуер(и). От там нататък, GUI-то се прави като wrapper на тази библиотека, ползва публичното ѝ API и е един вид pluggable компонент към нея.
Можете да минете и само с кода от основното ядро, който имплементира функционалност без GUI, ако сте писали обилно тестове. Този проект е подходящ шанс за вас да пробвате подхода TDD. Допълнително, това ще ви помогне да покриете едно от изискванията, а именно да имате пълно покритие с unit тестове.
GUI-то е добре да е съвсем просто и може да минете без особено тестване там, освен, евентуално, някой друг интеграционен тест. Може да минете и с най-просто и дървено конзолно UI, което е тънка обвивка около API-то на "ядрото". Ако сте запалени, може да направите повече от едно GUI. Последното със сигурност ще ви донесе бонус точки :)
Документация
На този, който ще чете кода ви ще му бъде нужда документация, така че опитайте се да бъдат максимално полезни за четящия и да казват същественото, а не само това, което може да се види с един поглед в кода. Документацията ви трябва да изглежда прилично в godoc.
README
Случаен човек, попаднал на хранилището ви, би трябвало да може да разбере за какво служи тази купчина код, как се инсталира и след това използва. В него можете да сложите и мотиви за написването на този проект, връзки към документацията му и всичко, което ви се стори полезно.
Version control
Задължително е. Силно препоръчваме да ползвате Git и GitHub, но сме ок и с алтернативи. Кодът на проекта трябва да е публичен. Ако все пак държите да ползвате друга version control система, пак ще приемем това изискване за покрито. Важното е да има някакъв version control.
Опитайте се да покажете добро използване на version control-а си. Ако целия ви код е в три къмита вероятно не правите нещо правилно.
Език
Част от изискването за добър код е имената в него да са на английски. За всичко друго имаме следното правило: окуражаваме ви да не izpolzvate shliokavica под каквато и да е форма.
Оценяване
Проверката на функционалността на проектите няма да се прави автоматизирано, което означава че ви се дава свобода да изясните по-дребните детайли. Ще седнем до вас и ще се опитаме да пуснем проекта на наш компютър. Опитайте се да заобиколите синдрома "при мен си работи" и направете проекта си лесно инсталируем.
20 точки за верен и отговарящ на условието код. Трябва като минимум да покриете условието на проекта (по ваш избор можете да го разширите, но не и да променяте/пропускате части от него)
20 точки за стил, другояче казано: за четим код, добър дизайн, лесни възможности за разширяване на програмата ви, ясно README, достатъчна документация, до колко сте ползвали
go vet,golintи семейство.20 точки отиват при добрите unit, benchmark (ако сметнете за нужно) и example тестове.
