You are on page 1of 15

Ръководство на

ученически проекти
shalamanov.marin@gmail.com
Линк към този файл: sofiacode.com/noit

Всеки има права да коментира в документа. Ако нещо не е ясно, не сте съгласни или
искате да допълните, моля коментирайте.

Съдържание
Цел на документа

Състезания

Ръководство

Предварителна подготовка

Идея за проект
Лоши идеи за проект

Определяне на катерогия

Определяне на технологии

Реализация
Зачитане на авторски права

Усложняване на проекта

Документация за НОИТ
Заглавна страница
Идея и цели на проекта
Основни етапи в реализирането на проекта
Ниво на сложност на проекта
Логическо и функционално описание на решението
Реализация
Използвани технологии
Описание на приложението

Предаване на проекта

Защита на проекта

Подготовка за теста на НОИТ


Тестове от минали години
Материали за подготовка

Примерни проекти от минали години


Evocation
Оптичен кардиограф
West Moon
GeoSolve
GeoDraw

Благодарности

Цел на документа
Целта на този документ е да събере на едно място полезна информация за
ръководителите на ученически проекти по информатика и информационни технологии.
Документът ще бъде от специална полза за участващите в Националната олимпиада по
Информационни технологии (НОИТ). Фокусът на документа е състезателната група 9-12
клас и по-скоро категориите “Интернет приложения” и “Приложни програми”. Въпреки това
насоките тук могат да бъдат полезни и за учениците в другите категории (Мултимедийни
приложения), възрастови групи (5-8 кл.) и състезания (напр. УчИМИ).

Написаното тук основно се базира на опита ми като състезател, ръководител и жури в


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

Състезания
Документът е основно насочен към участващите в националната олимпиада по
информационни технологии. В нея ученици задочно разработват технологични проекти,
документират постигнатото и го представят пред комисия. Олимпиадата се провежда в
три кръга. На първия кръг се кандидатства с идея за проект и обикновено всички
участници преминават на втория областен кръг. Там учениците защитават проекта пред
комисия. Областната комисия избира проекти, които заслужават да продължат нататък.
Всички избрани проекти се разглеждат от национална комисия, която задочно избира по
20 проекта в категория, които се допускат до трети кръг (това невидимо пресяване често
се нарича “междинен кръг”). На третия кръг участниците защитават проекта си и попълват
тест по обща култура в сферата на технологиите. Повече информация, регламент и
срокове може да намерите на страницата на олимпиадата - http://edusoft.fmi.uni-sofia.bg/

Разработването на проект изисква доста усилия и е хубаво да участвате с него на всички


конкурси, за които той е приложим. Други състезания са:
Национален есенен турнир по ИТ: https://ntit.npmg.org/ Есенният турнир има сходен
регламент на НОИТ, комисията обикновено се състои от почти същите членове като тази
на НОИТ, което прави есенния турнир идеална подготовка за олимпиадата.

УчИМИ - повече информация за конференциите на УчИМИ може да намерите на


http://www.math.bas.bg/omi/hssimi/
УчИ БАН http://www.bas.bg/ученически-институт-на-бан/
Млади Таланти - http://mon.bg/
Панаир на науката и иновациите - http://innofair.cys.bg/innofair/

Важно: Прочетете внимателно регламентите и изискванията на състезанията, в които ще


участвате.

Ръководство
Ролята на ръководителя на проекта, който много често е учителя по информатика или
информационни технологии от училище, е да помага на ученика сам да изпълни проекта
си. От ръководителите не се очаква да определят идеята на проекта, да пишат код, да
дебъгват и т.н.
Относно идеята на проекта:
Най-добре е ученикът да я измисли. Това което си мислят учениците е “това е моята идея
и аз работя по нея” спрямо “това ми даде учителя и аз трябва да го правя”. Учителят
може да помогне с насоки, напр. “Разгледай неща за изкуствен интелект”, “разгледай
какъв софтуер се използва в медицината”, “говори с Х за идеи”, “много подобна идея е
представяна вече, помисли как да я промениш малко”, “има вече подобни разработки в
интернет, с какво твойта е по-добра и/или по-различна”.
Относно разработването на проекта учителят ще е изключително полезен със съвети за
това къде ученикът да търси отговори на въпросите си (сайтове, форуми, групи, познати с
повече опит), но определено от него не се очаква да може да програмира на всички езици
или да използва всички технологии.

Относно начина на работа с учениците:


Насрочете си периодични срещи с ученика - например веднъж седмично или на две
седмици. Не е нужно тези срещи да са на живо - може да е по скайп, фейсбук и т.н, но е
хубаво да има заделено време специално за тях. Това е необходимо в началото, защото
има много въпроси свързани със започването на проекта. След това може да прецените
да се виждате по-рядко. На тези срещи създайте усещане у ученика, че може да задава
всякакви въпроси без да се притеснява. Типично учениците се притесняват от това да не
им се скарат като задават въпрос и за това предпочитат да не го правят. Това вреди
изключително много и е хубаво да се елиминира, както при работата по проекти, така и в
учебните часове.
Помогнете на ученика да идентифицира слабите си страни. Помогнете му да намира
материали по тези теми и да чете самостоятелно. Целта е с времето ученикът да започне
да прави това изцяло сам.
Ако има конкретни въпроси по някоя тема (и вие не можете да отговорите), нека да
потърси отговора сам, да пита в интернет, да пише във форуми, да потърси познат,
когото да попита.

Силно препоръчително е ученикът да има достъп до някого с практически опит в


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

Предварителна подготовка
Ако ученикът има желание да разработва проект, и има достатъчно време до крайния
срок (повече от 3 - 4) месеца, е препоръчително преди да започнете с конкретната работа
да отделите време за учене. Идеалният вариант за това е по време на лятната ваканция,
преди да е започнала учебната година. Полезни теми за изучаване са:
● Писане на качествен програмен код / Writing clean code
● Обектно ориентирано програмиране / Object Oriented Programming
● Design patterns
● Git, Github, Gitlab
● Бази от данни (напр. MySQL )
● Въведение в изкуствения интелект
● Уеб разработка / Web development
● Тестване на софтуер - Unit tests, Integration tests

По всички тези теми има множество онлайн курсове (Udacity, Coursera, Udemy, edX,
YouTube), както и книги, блог постове и пр.

Идея за проект
Някои насоки за намиране на идея:

Софтуер за управление на организации - например библиотеки, складове, спедиторски


фирми, НПО и т.н. Ако изберете такава тема се свържете с реална организация и
направете проекта така, че да е полезен за тях.
● Софтуер за управление на библиотека (по тази тема вече сме виждали поне три
много добри проекта, така че по-добре не хващайте точно това)
● Софтуер за управление на наличностите в магазин / склад
● Уеб сайт за създаване на теми за състезания по програмиране

AI базирани приложения - разгледайте какво предлагат онлайн услуги за изкуствен


интелект - Google Cloud ML, AWS AI и т.н. Те ще ви дадат функционалности като
разпознаване на глас, изображения, синтактична обработка на текст и други. На база на
тях можете да направите интересни приложения.

Вградени системи - системи, които получават информация от сензори (камери),


контролират актуатори (напр. мотори), комуникират през мрежа с други системи.
Например:
● Робот, който полива цветята
● RC количка
● Устройство, което мери пулса

TODO: Повече примери и насоки

Разгледайте онлайн курсове от Coursera, Udacity, Udemy за да получите по задълбочена


представа за някоя тематика.

Лоши идеи за проект


Типично лоши идеи за проект са теми, които се повтарят често или такива, които имат
малка техническа стойност. Разгледайте проектите, участвали на минали състезания.
Често повтарящи се теми са:
● Електронни тестове по… (физика)
● Електронен учебник по… (история)
● Електронен дневник
● Статичен сайт с информация за… (мухата цеце)
● Информативна програма за слънчевата система
● Електронен магазин

Разбира се, по подобни теми все още може да се работи, но бъдете сигурни, че можете
да представите нещо ново по темата.

Определяне на катерогия
Категориите в НОИТ за старшата възрастова група са Интернет приложения, Приложни
програми, Мултимедийни приложения. Следват примерни типове проекти за всяка
категория:

● Интернет приложения
○ Информационна система
○ Уеб игра
○ Корпоративен сайт на институция
○ Уеб приложение за мобилни телефони
○ Уеб интерфейс към друго приложение
● Приложни програми
○ Мобилно приложения
○ Десктоп приложения
○ Вградени системи (напр. Arduino, Raspberry Pi)
○ Настолни игри
● Мултимедийни приложения
○ Интерактивна електронна галерия
○ Интерактивен филм
○ Мултимедийно интерактивно портфолио
○ Интерактивно уеб-базирано мултимедийно приложение (напр. уеб базирана
игра)

Често има проекти, които участват в грешната категория. В такъв случай комисията е
длъжна да дисквалифицира проекта.

Понякога един проект може да класифицира към няколко категории. Например,


компютърна игра може да бъде мултимедийно приложения (ако акцентът е върху
графиката), приложна програма (ако акцентът е върху логиката на играта) или Интернет
приложение (ако се играе с други потребители през мрежа). В такъв случай може да
определите категорията като вземете оценъчните карти за всяка категория и изберете
категорията, в която бихте получили най-много точки.
В случай съмнение може да изпратите и запитване до националната комисия.

Определяне на технологии
За различните части от проекти има множество технологии, които могат да се използват
за реализацията му. Как да изберем най-подходящите?
Най-общо можем да разделим технологиите в три групи:
● Остарели: напр. VisualBasic, Delphi, FORTAN, Lisp
● Масово използвани: Java, .Net, Spring boot, Angular, Docker
● Нови: Serverless, Dart, Elm

Остарелите технологии са такива, които някога са били масово използвани, но отдавна са


изместени от нещо по-добро. Не използвайте такива технологии.
За масово използваните технологии има достатъчно материали в интернет, работят
стабилно и като цяло са сигурния избор. Подходящи за основните части от проекта и като
цяло за ученици, които правят първите си проекти.
Новите технологии са предложени скоро, използват се от по-малко хора, твърдят, че
решават добре някакъв проблем, но може би не са особено стабилни. Избирайки такива
технологии взимате по-голям риск, но също така показвате, че се интересувате от най-
новото в бранша. От друга страна за журито и останалите участници, ще е изключително
интересно да видят изцяло разработен проект на нова технология, така че ще останете
забелязани и оценени. Важно е проектите да бъдат и защитавани (поне за основните
атаки). Примерно за Интернет Приложения да се предотвратяват SQL Injection, XSS, File
inclusion vulnerability, Broken Access Control, и други.
Реализация
Преди ученикът да започне да имплементира проекта, нека първо представи идеята си за
техническия дизайн на ръководителя и/или консултанта - да разкаже какви модули ще
има проекта, как ще комуникират помежду си и така. По този начин ученикът ще е
сигурен, че следва добри софтуерни практики и се движи в правилна посока.

За състезания като НОИТ кодът на проекта е много важна част. Бъдете сигурни, че е
добре структуриран и следва добрите практики.
● Не трябва да има закоментиран код.
● Да бъде добре форматиран. Отварящите и затварящите скоби {} да следват един
и същи стил, да се спазват табулациите.
● Ясен стил за именуване на променливите, класовете, функциите.
● Функционалността е разделена логически по файлове.
● Няма файлове с код на няколко езика (напр. HTML и CSS трябва да са в отделни
файлове. В PHP кода трябва да има минимално SQL, които да е отделен в
специални класове за комуникация с базата).

Намерете style guide за езика, на който пишете и се уверете, че кодът ви го следва!


Например:
● За Javascript - https://github.com/airbnb/javascript
● За PHP - https://www.php-fig.org/psr/psr-2/
● За C++ - https://google.github.io/styleguide/cppguide.html
● За Java - http://www.oracle.com/technetwork/java/codeconventions-150003.pdf
● За Python - https://google.github.io/styleguide/pyguide.html
● Google стандарти за писане на код - https://github.com/google/styleguide

Полезна книга за писане на качествен код е Code Complete на Steve McConnell. Може да
се намери онлайн.

Задължително използвайте система за управление на кода, например git заедно с github


или bitbucket. Използвайте система за управление на задачите - например trello. Gitlab
има вградени и двете, също така поддържа CI/CD.
Ако ученикът е напреднал, нека се опита да използва инструменти за continuous
integration (например CircleCI).

По-време на имплементацията помолете консултанта да прави периодични code review-


та на проекта - например седмично или месечно.

Зачитане на авторски права


Не се очаква всичко в проекта да е реализирано от автора. Преизползването на
програмни и графични елементи е напълно допустимо, стига авторските права да са
правилно зачетени. Запознайте се с лицензите върху софтуер (Apache, GNU, MIT) и други
авторски продукти (Creative Commons). Ако са преизползвани софтуерни или графични
елементи, това трябва да бъде отчетено в документацията, като точно се спомене какво е
преизползвано, кой е автора и какъв е лиценза.
При грубо нарушение на авторските права, проектът може да бъде дисквалифициран!
Най-често се пренебрегват авторските права на изображения и всякакви графики! Бъдете
внимателни при избора им!

Усложняване на проекта
Ако ученикът е реализирал проекта, може да се мисли за усложняване.
Как скалира системата, ако трябва да работи с много данни или много потребители.
Например, ако правим сайт за библиотека, тествайте системата с 10 000, 100 000 или 1
000 000 книги (заглавията на книгите и авторите може да генерирате случайно). Какво
става ако едновременно със сайта работят двама потребители? Ами ако са 10 или 100?
При работа с големи данни изникват множество проблеми. Ако демонстрирате, че вашето
приложение се справя с тези големи размери, това ще се оцени високо. Примерни
проблеми, с които може да се сблъскате:
● Двама потребители си пречат, докато правят едно и също действие (например
двамата едновременно резервират последния билет за кинопрожекция и успяват и
двамата да го вземат)
● Някои операции са пропорционални на броя на данните, с които работим.
Например сканираме всички редове от базата от данни. Така като имаме 1 милион
реда в базата, цялото приложение става бавно. (Решението е да се сложат
индекси на базата, да се добавят in memory caches).

Документация за НОИТ
Документацията има определен структура, описана в регламента на олимпиада, и тя
трябва да се следва. Към момента на писането на този документ структурата е:
1. ТЕМА:
2. АВТОРИ (за всеки се посочват: трите имена, ЕГН, адрес, телефон, имейл, училище,
клас):
3. РЪКОВОДИТЕЛ (трите имена, телефон, имейл, длъжност):
4. РЕЗЮМЕ:
4.1. Цели (предназначение, кратък анализ на потребностите и на съществуващите
решения)
4.2. Основни етапи в реализирането на проекта (основни дейности, роли на авторите)
4.3. Ниво на сложност на проекта − основни проблеми при реализация на поставените цели
4.4. Логическо и функционално описание на решението – архитектура, от какви
модули е изградено, какви са функциите на всеки модул, какви са взаимодействията
помежду им и т.н.
4.5. Реализация − обосновка за използвани технологични средства, алгоритми, литература,
програмни приложения и др.
4.6. Описание на приложението – как се стартира и/или инсталира, как се използва, как
се поддържа
4.7. Заключение – какъв е основният резултат, дали има приложения до момента, какви
възможности съществуват за развитие и усъвършенстване

Заглавна страница
Заглавната страница на проекта включва информация за темата на проекта,
направлението и номера на проекта, авторите и ръководителя.

Идея и цели на проекта


Каква е целта на проекта? Какви проблеми решава? Кой ще ползва този проект (коя е
целевата група потребители)?

Основни етапи в реализирането на проекта


Какви са основните етапи при реализирането на проекта? Например:
1. Определяне на целите
2. Определяне на технологиите
3. Изготвяне на дизайн на уеб приложението
4. Реализация на сървърната логика (back end)
5. Реализация на потребителската логика (front end)
6. Тестване на коректността на приложението
7. Тестване на максималното натоварване на системата
8. Отстраняване на грешки
9. Популяризиране на проекта

Ниво на сложност на проекта


В тази секция трябва да се опише какви са били най-сложните части на проекта

Логическо и функционално описание на решението


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

По конкретно документацията трябва да съдържа:


● Диаграма на архитектурата на приложението - какви модули има и как си
комуникират.
● UML диаграма на класовете.
● Използвани design patterns.
● Диаграма на базата от данни.
● Описание на организацията на сорс кода - Как са разделени нещата по папки?
Какво съдържат по-важните файлове?
● Описание на използваните алгоритми. Ако има авторски алгоритми - подробно
описание, включително псевдокод, евентуално доказателства и т.н.

Реализация

Използвани технологии
Технологиите включват:
● използваните езици за програмиране (напр. Java, C#, Typescript, HTML, CSS).
● Frameworks (напр. Angular 4, Spring)
● външни библиотеки (напр. Picasso, Guava)
● Технологии за тестване (напр. JUnit, Jasmine)
● използван сървър (напр. Apache2, JBoss)
● база от данни (напр. MySQL, MongoDB)
● технологии за управление на пакетите - package management (напр. npm)
● технологии за управление на сорс кода (напр. Git, Mercurial)
● текстови редактори и среди за разработка (напр. Sublime text, Web Storms)

Важно е да се представи не само списък на технологиите, но и аргументация, защо са


избрани точно тези технологии.

Описание на приложението
Тази секция съдържа кратко ръководство за потребителите на приложението. Как се
инсталира, използва, поддържа, деинсталира. Ако става дума за мобилно приложение
опишете и как се разгръща (deploy).

Предаване на проекта
Когато предавате проекта бъдете сигурни, че качвате всички необходими файлове:
● Документацията в .pdf формат
○ НЕ използвайте .rtf
● Програмният код
○ Забележка: В регламента на олимпиадата пише, че кодът трябва да се
предаде в текстов формат. Това означава, че трябва да може да се
редактира от текстов редактор (notepad или IDE) - напр. .cpp, .java, .py и т.н.
НЕ изпращайте проекта в .doc, .txt или .pdf формат!
● Слайдове на презентацията
● Ако се ползва база от данни, то трябва да се предаде и dump с примерни данни.
● Ако има потребители - трябва да се дадат примерни потребителски имена и
пароли. Ако има различни потребителски роли - за всяка от тях. Тези пароли
обикновено са част от документацията.
● Рекламни материали
Защита на проекта
Добре е като стил на защитата да се използва презентация, която е кратко резюме на
документацията и включва демонстрация на самия проект. Обикновено защитата е около 15
минути, което включва 10 минутно изложение и 5 минути за въпроси.

Типични грешки:
● Оправдания и да казват какво не работи в проекта, вместо да се фокусират на
това, което са направили.
● Презентацията е научена наизуст или се чете от лист. Това прави
презентирането тягостно какво се презентиращия, така и за публиката.
● Прекалено много информация. В деня на състезанието комисията трябва да
изслуша 20 проекта един след друг. Докато ученика презентира, членовете на
комисията паралелно преглеждат записките си, припомнят си документацията,
кода и проекта, дописват записките си и попълват оценъчните карти. Подгответе
презентация, която акцентира на най-важното и го представя по лесен за
възприемане начин.
● Цък

Съвети
● Направете няколко пробни защити с ръководителя. Ако има няколко ученици от
едно училище, е хубаво да си представят един на друг и да си дават съвети за
подобрение. Тренирайте за време.
● Минимално количество текст на слайдовете. Използвайте ключови думи и
картинки.
● Задавайте въпроси към публиката. Така те ще запомнят проекти ви много по-
добре.
● Ако се губите в презентирането, или забравяне важни неща, напишете на лист
най-важните неща, с ключови думи и големи букви. Изполвайте цветове. Трябва
да може да се ориентирате в “пищова” с един поглед. В никакъв случай не четете
от лист, нито учете думите наизуст.
● Направете демонстрация на проекта, по време на защитата.
● Когато говорите за кода, използвайте графики - възприемат се много по-лесно.
● Не спорете с комисията или публиката. Отговаряйте на въпросите учтиво и с
респект, дори и да не получавате същото от другата страна.

Подготовка за теста на НОИТ


TODO
Ако четете документа и имате предложения за съвети и материали за подготовка за
теста на НОИТ, направо ги добавяйте. Особено полезно ще е ако имате минали
тестове в каквато и да е форма (напр. снимки).
Тестове от минали години

Година 5-8 кл 9 -12 кл

2012 Тест Тест


Отговори Отговори

2013 Тест Тест

2014 ??? ???

2015 ??? Снимки

2016 Хисаря ??? Снимки

2017 Варна Снимки Снимки

2018 Търговище ??? Снимки

2019 ??? ???

Материали за подготовка
● Конспект
● Примерен тест за 5-8 клас
● Примерен тест за 9-12 клас
● Видеa от Telerik Academy
● Няколко полезни видеа

Примерни проекти от минали години


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

Evocation
Автор Симеон Стойнев, Денислав Колев

Категория Интернет Приложения, 3то място, 2019

Кратко Проектът представлява Интернет приложение, което идентифицира


описание посещението на учениците в училище чрез магнитна карта. Данните
от идентификацията в реално време се нанасят в електронен
дневник, което улеснява работата на учителите и уведомява
родителите. Електронният дневник предоставя детайлна
информация за отсъствията на учениците, седмичното разписание на
училището и др.

Технологии PHP, Laravel, MySQL, HTML 5, CSS3, jQuery, Arduino,

Документация Цък

Презентация

Код https://github.com/SimeonStoinev/Evocation

Оптичен кардиограф
Автор Николай Пашов

Категория Приложни програми, 4то място, 2017

Кратко Устройство за мерене на пулс и приложение за визуализиране на


описание данните.

Технологии Arduino, Processing

Документация Цък

Презентация

Код https://github.com/nikifaets/optical-cardiograph

West Moon
Автор Александър Кръстев, Марин Шаламанов

Категория Приложни програми, 2ро място, 2012

Кратко
описание

Технологии C++, OpenGL

Документация цък
Презентация

Код https://bitbucket.org/marshal40/westmoon

GeoSolve
Автор Марин Шаламанов

Категория Интернет приложения, 2ро място, 2013

Кратко Интернет приложение, способно да решава геометрични задачи


описание изучавани в седми (и част от осми) клас, като предоставя на
потребителя решение и чертеж на геометричния проблем.

Технологии Java, JUnit, Apache Tomcat, HTML/CSS, GeoGebra API, Git

Документация Цък

Презентация Цък

Код https://bitbucket.org/marshal40/geometry/src/master/

GeoDraw
Автор Марин Шаламанов

Категория Приложни програми, 2ро място, 2014

Кратко Геоарт е мобилно приложение за операционна система Android,


описание което позволява свободно и динамично чертане на геометрични
чертежи. Ключова функционалност е довършването на чертеж,
започнат на хартия – потребителят може да заснеме чертежа си и
той ще се появи като начертан с приложението. Оттам нататък към
чертежа могат да се добавят нови елементи, както и да се променят
вече начертаните.

Технологии Java, Android, BoofCV, GeoRegression, Git

Документация Цък

Презентация Цък

Код https://bitbucket.org/marshal40/geometry/src/master/
Благодарности
Благодаря на Десислава Рачева, Евгений Василев, Звездин Бесарабов, Мирослава
Николова, Нели Георгиева, Николай Пашов и всички останали за изчерпателната обратна
връзка.

You might also like