All posts in Uncategorized

  • Защо правим HackFMI?

    Този декември предстои 8то издание на HackFMI. Темата е повече от приятна – “Hack for Data”.

    HackFMI 8

    HackFMI 8

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

    Това са причините, заради които стартирахме инициативата в началото, и заради които има смисъл да продължаваме да го правим, така че след 5 години да гледаме HackFMI 18.

    За мен, HackFMI стартира с 2 основни идеи. Тези основни идеи доведоха и до няколко много положителни странични ефекта.

    Основна идея #1 – Хакатонът е там, за да могат студентите да повярват в своите умения.

    Във ФМИ се учи много. И много често, това, което се учи не се подлага на реален тест. Ефектът, който се получава е, че човек знае много, но не знае къде и как може да го използва. Не знае дали може да е полезен. А продължението на този ефект е апатия и загуба на мотивация.

    HackFMI стартира като инструмент за борба с апатията и инструмент за мотивация.

    Хакатонът е там, за да могат студентите да разберат какво могат да направят с придобитите от тях знания и умения. Много често в този един уикенд се случва и голяма доза учене. Студентите се запознават с и подкарват нови неща. Атмосферата е подходяща за това.

    Хакатонът е за студентите. За тяхното развитие и мотивация. За осмисляне на всичко научено. Предизвикателство за израстване. Това е най-важното. Всичко друго е страничен ефект.

    Основна идея #2 – Традиция във ФМИ

    Според мен, в едно себеуважаващо се учебно заведение, трябва да има събития, които се случват регулярно и спадат в категорията на “традициите”.

    Да знаеш, че като кандидатстваш там, ще има нещо очаквано. Нещо, за което си чувал и преди.

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

    Към момента, с разбира се тук-таме административни спънки, HackFMI е на път да стане традиция. Лично аз ще бъда спокоен, когато участвам като жури на HackFMI 18. Ще знам, че сме постигнали тази първоначална идея.

    Небезизвестното "Потупване по гръб" от Наско Семерджиев - закриващ HackFMI

    Небезизвестното “Потупване по гръб” от Наско Семерджиев – закриващ HackFMI

    Страничен ефект #1 – Партньорите имат перфектна възможност за наемане на млади таланти

    Софтуерните компании обичат HackFMI. Хакатонът им дава близък достъп до най-добрите софтуерни таланти в цяла България – студентите на ФМИ.

    Това позволява организацията на хакатона да бъде и финансово издържана, тъй като всяка компания участва с/у съответния спонсорски пакет.

    Участие и добро представяне на HackFMI дава конкурентно предимство при евентуалото търсене на работа.

    Страничен ефект #2 – Състезание и награди

    Хакатонът е състезание. В неделя се излъчват 3 отбора, събрали най-много точки от журито, които се явяват победители. Партньорите раздават множество награди на множество отбори (не само победителите).

    Това дава и състезателният елемент, както и допринася за прекрасната атмосфера на HackFMI.

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

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

    Страничен ефект #3 – Реклама за ФМИ

    Всеки хакатон е съпроводен със съответното медийно отразяване. Това малко или много влияе на имиджа, който ФМИ има пред външния свят.

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

    Няколко примера от последните хакатони – “Какво е мястото на новите технологии в образованието?”, “Шесто издание на HackFMI”, “Българско приложение ни казва къде по пътя има дупки.”

    Хакатонът дори успя да влезе във филма за 125 годишнината на Софийски Университет, направен от Алма Матер ТВ.

    Страничен ефект #4 – Много други хакатони започнаха да се организират, вдъхновени от HackFMI

    Това, което видяхме в последните години е вълна от хакатони, организирани в цялата страна.

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

    Страничен ефект #5 – Създава се страхотна работна атмосфера

    По време на хакатоните се създава една наистиана хубава работна атмосфера. Човек се надъхва да свършии нещо полезно. За това, честа гледа по време на хакатоните е да има хора, ментори или пък студенти, които не участват, но пък са дошли да свършат някаква тяхна работа, защото атмосферата им харесва.

    Аз съм много често (почти всеки път) част от тези хора.

    Бъдещето

    HackBulgaria, заедно с помощта на Студенткси Съвет към СУ, ФСС към ФМИ и ръководството на ФМИ, са основните организатори на HackFMI.

    Най-доброто бъдеще за хакатона би било, ако той започне да се “предава” и организира от студени, без това да повлияе на качеството на организация или провеждане.

    Дали това ще стане, зависи най-вече от мотивацията на студентите. Дали ще има желаещи да се нагърбят с организацията на подобно събитие. От наша страна ще последват стъпки за “отваряне на кода” на организацията на един хакатон. Това навярно ще става в GitHub.

    А до тогава, Хака остава на разположение, както винаги 😉

  • Как станах по-добър програмист?

    Един коментар към тази статия ме накара да се замисля. Въпросът е доста специфичен – какво съм направил, за да стана по-добър програмист от колкото съм бил в началото?

    Към днешна дата стават общо 8 години, в които активно програмирам и си изкарвам хляба с тази професия.

    През тези 8 години съм имал най-различни представи за това що е то да си програмист и не малко пъти съм си мислил, че знам всичко и повече развитие няма.

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

    Да мисля, преди да пиша.

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

    Disclaimers:

    1. Разбира се, цялата тази статия стъпва върху предпоставката, че съм добър програмист 😀 Та нека предположим, че ставам.
    2. Разбира се, това е моят опит и той не е задължително да работи за някой друг човек. Написаното е в иторически план и е self-reflection. Опитал съм се да бъде проследима мисълта, но на моменти това свойство се изгубва.

    Началото – Flash, Flex

    11ти клас беше моето “зарибяване”. Опитвах се да пиша малко на C++, но истинската ми страст беше Flash и Flex – да се разработвам игри и “Rich Internet Applications”. Тогавашния hype.

    Тогава си нямах на представа какво се случва. Стилът беше copy-paste driven development и проба-грешка, докато не се получи каквото трябва. 50-редови if проверки бяха ежедневие.

    Уроците на Lynda.com бяха моят източник на знания и можех да правя нещата, които се правеха там. И много малко отстрани.

    Тогава не бях добър програмист, a бях просто ентусиаст.

    PHP и WordPress

    Естественото продължение на Flash и Flex света беше да имаш сървър, в който да пазиш резултатите на дадена игра.

    Най-естествено и спрямо моето много ниско ниво, аз се спрях на PHP.

    Беше славна година, в която пишех всичко – блогове, форуми, чатове, браузърни игри и всичко друго, сравнително безполезно.

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

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

    Редом с PHP правех и много WordPress разработки. Схемата е ясна – купуваш тема, нацъкваш сайта с plugins и правиш сайт за 500 лв.

    Тогава не бях добър програмист, a бях просто ентусиаст със самочувствие че знае много.

    ФМИ и Компютърни науки – началото

    Въпреки че учех, за да ставам лекар (inheritance, you know), някак си случайно се озовах във ФМИ (София), след като с Василен (тогавашен мой съученик в МГ Плевен) взехме някакво престижно място на НОИТ и изкарахме 5 и 50 за ФМИ. Проектът беше интересн – Flash, Flex, PHP и JavaScript за образователен портал с образователни игри.

    Реших да запиша Компютърни науки, защото така. Там бяха умните, а и познавах голяма част от тях.

    1ви курс беше доста тежък и искаше доста учене. Аз разбира се можех да програмирам и курсовете като Увод в Програмирането, Обектно Ориентирано и Структури от данни ми бяха лесни. Почнах да уча Java и се справях добре с нея.

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

    По това време Наков беше популярен.

    Аз, като един наивен младеж, реших да вярвам на Наков, че математиката не е нужна. И без това беше трудна. Какво по-добро извинение за да не полагаш усилия?

    По това време усилено учих Java и обръщах внимание на алгоритми и структури от данни. С изборната дисциплина “Съвременно Java програмиране” + редовните курсове събирах по 20 часа Java на седмица в университета. Имах добри преподаватели и бях изчел доста книги и правех много странични проекти. Всичкото това на Java.

    В началото на втори курс започнах стаж с Flex и Java в компанията, която обича буквата v.

    Тогава не бях добър програмист, a бях просто ентусиаст със самочувствие че знае много и вече добра доза арогантност що се отнася до ФМИ и математиката.

    Начало на преподаването

    Година по-късно бях започнал да трупам невзети изпити. Тогава излезе една много интересна възможност – да участвам в преподавателския колектив на изборната дисциплина “Съвременно Уеб Програмиране”, заедно с Иво Христов, Жоро Пенчев и други.

    Ставаше на въпрос за преподаване на PHP и JavaScript, а аз все още пишех и на PHP и нямах нищо против.

    Когато започнах да преподавам, нещо в мен се промени. Говорех за неща, които не ми бяха напълно ясни. Задаваха ми въпроси, на които не знаех отговора (а понякога не знаех какво ме питат).

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

    Тогава започнах активно да гледам видео уроци и клипчета в YouTube. Основно от MIT и Harvard. Бях жаден за знания и дълбочина в полето на програмирането.

    Благодарение на Жоро Пенчев, станах асистент и на 2 групи по Функционално Програмиране. Фактът, че преподавателския колектив беше много силен и факта, че не исках да се излагам пред студентите ме бутна много сериозно в писане на код и в подготовка.

    Въпросът, който винаги си задавах, когато подготвях материал е “Това сега защо ни трябва и за какво е тук?”. Опитвах се да има последователност в занятията и да вървим по нишка, която ще ни доведе до по-голямо прозрение за програмирането.

    Основният ми източник тук беше SICP. Силно препоръчвам преглеждането на тази книга.

    Преподаването беше първият момент, в който си отворих очите и разбрах, че съм бил просто арогантен студент, който може да пише код, който решава проблем X. Нищо повече.

    Втори епизод на преподаване

    Тъй като все още се занимавах основно с PHP и WordPress за изкарване на хляб, а преподаването ми беше харесало и ме беше научило на страшно много неща, реших да водя курсове в някоя академия.

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

    Изкарах 2 курса – “Уеб Програмиране с PHP” и “Бази от Данни”.

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

    Времето, което прекарах в SoftAcad беше достатъчно, да ме бутне в посока за това да си направя собствена академия.

    Към този момент бях среден по възможности програмист. Можех да пиша уеб и се оправях с JavaScript. Имах сравнително добри знания по програмиране и бях прекарал известно време борейки се с курса по Алгоритми във ФМИ.

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

    Математиката

    Както споменах по-рано и аз имах “Наков период” в моето развитие. “Математиката не ти трябва” беше лайт мотив за мен и много мои колеги.

    Също така имах и 13 невзети изпита (как съм записал 4ти курс е тема за друга статия :D), като голяма част от тях бяха математически.

    Почнах да уча по принуда и да търся клипчета в YouTube / Coursera / Khan Academy, защото в уикидот повечето неща не са обяснение добре. И тогава започна да ми става интересно. Колкото повече разбирах дадената математика, толкова повече връзки правих с програмирането.

    Сесията, в която изчистих 10 от 13 изпита беше голямо израстване за мен. Учех почти и само математика. Основно от Coursera и Khan Academy. Специално в Khan Academy бях изгледал всичкото видео, което беше свързано по някакъв начин с “висшата” математика.

    И тъй като бях с ограничено време, не учих на изуст, а учих, за да разбера. За да мога да възпроизведа “защото” на материала. Беше ми интересно и успявах да предам този ентусиазъм и на част от изпитващите.

    В този момент ми станаха интересни езиците за програмиране сами по себе си. В този момент започнах да виждам абстракцията на много повече нива.

    Това беше момента, в който се освободих от Наковите лъжи и от сляпото преследване на диплома заради самата диплома. Започнах да търся знания. Мога смело да заява, че ученето на тази математика ме накара да израстна и да започна да гледам на програмирането по съвсем друг начин

    Математиката ме направи по-добър програмист. Беще трудно и именно тази трудност помага за израстване.

    Занаят и инструменти

    Паралелно с това, благодарение на хора като Стефан Кънев, Божидар Бацов, Киро, Митьо и компания, започнах да се замислям за това как работя и за това как се разработва един софтуер.

    До тогава използвах Windows за операционна система и някаква разновидност на Eclipse за среда за разработка, което беше последвано от Sublime.

    Тъй като ученето на цялата тази математика ми даде много, реших да се пусне в посока Linux за домашна употреба, въпреки първоначалните трудности.

    Това ме накара да използвам много повече терминал, което пък от своя страна доведе до момента, в който започнах да използвам vim като текстов редактор. За щастие, това беше моментът в който пишех главно на Python / Ruby / JavaScript и нещата си пасваха идеално.

    Бях изключително непродуктивен, но с времето, терминала и vim ме направиха много по-добър програмист. Бих ви препоръчал да излушате и някоя друга лекция по въпроса.

    В момента, времето, което прекарван пишейки код е главно в терминал и vim. Въпреки, че имам доста слаби dotfiles, продуктивността ми отодвана мина тази, когато работех със Sublime.

    A Windows се ползва в случаите, в които трябва да излезеш от gold-а на StarCraft 2.

    Преподаване, споделяне и говорене

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

    1. Да разбереш за какво става на въпрос.
    2. Да можеш да го обясниш
    3. Да можеш да го имплементираш, особено ако е фундаментална концепция
    4. Да изрешиш задачи, които после ще даваш на курсистите

    Правенето на това нещо в рамките на вече 2 години дава страшно много.

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

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

    Писане на софтуер, който се използва от хора

    И като за край остана нещо много важно. През цялото това време винаги съм се опитвал да пиша софтуер, който да се използва директно от хора.

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

    Писането на такъв вид софтуер те учи на умения, които няма как да се преподадат в който и да е курс.

    За мен финалният изпит за всеки един програмист е дали може да напише нещо, което да не е готово за изхвърляне от първия ден, и което ще бъде качено на production, за да се използва от други хора (или пък от него самия/самата)

    TL;DR

    Тъй като статията излезе по-дълга от колкото я исках, ето едно кратко обобщение на нещата:

    • Преподавайте. Няма по-добър начин да се научи нещо, което трябва да бъде обяснено от вас на други хора.
    • Учете математика и теория. Задълбавайте там. Няма да получите директната полза, която да може да я приложите в работа, но ще получите начин на мислене и начин на виждане, които нямат замяна.
    • Избирайте си и си развивайте инструментите, с които работите. default настройката е добра за старт, но не и завинаги.
    • Пишете код, който се ползва от хора. Така ще имате стимул да пишете хубави неща, да пишете тестове, и т.н.
    • Учете различни езици и технологии. Пробвайте нещо функционално, нещо статично типизирано, нещо динамично. Пробвайте нещо от по-ниско ниво. Пробвайте хибриди (да не се тълкува като хибридни мобилни приложения. Това може и да не го пробвате :D)
    • Търсете модели и шаблони в нещата, които учите. Изнесете знанието извън конкретната технология и език, за да може да го прилагате винаги.

    Към момента стига толкова. Аз имам още много да уча и ще продължавам да го правя. Правете го и вие.

  • Results from the University Course for Web Programming

    Today we had the final exam for the “Web Programming with PHP and JavaScript” course in the Faculty of Mathematics and Informatics (shortly – FMI) and I would like to share some interesting data and observations from my experience as one of the teachers in that course.

    First, some background information – I am studying Computer Science at FMI and I am part of the guys, that teach the Web Programming course.
    This is the 3rd year of the course since it’s beginning.
    The course is an elective one and it aims to provide General knowledge in Web Programming (With PHP, as a backend language).

    How the course works

    Read more

  • At Index Zero

    I managed to update my old blog and in the process, this new blog was born.
    After blogging for other blogs and trying other platforms (tumblr is not my thing) i finally decided to put up some effort for my own blog.

    I am Rado, but people call me RadoRado (Yeah, just like DuranDuran :)).

    At index zero, i’d like to welcome you, surfer of the web, for landing on my blog and spending few minutes to read this. I will try to live up to the expectations and write good stuff, because boring stuff only waste people’s time.

    What to expect from the blog?

    I blog about things that are interesting for me at the moment.
    This means:

    • Entrepreneurship & Startups
    • Startup Ecosystem in the CEE Region and specially in Bulgaria
    • Programming stuff (I am JavaScript fan)
    • Games that i find interesting (Yup, i play from time to time)

    Also, expect a lot of memes. They are fun and can explain lots of things with a single image and a caption.

    This blog will be entirely in English.

    What index zero ?

    Geeks and programmers count from 0. Why ? So we can subtract 1, when necessary 😀

    Programmers count from zero

    Click to enlarge