Интервю с Йордан Даракчиев: "Как курсът Math Concepts ще ви направи по-добри софтуерни инженери?"
![Интервю с Йордан Даракчиев: "Как курсът Math Concepts ще ви направи по-добри софтуерни инженери?"](/Files/Publications/2017/09/Math Concepts_1446853.png)
Йордан Даракчиев ще ни разкаже малко повече за предстоящия курс Math Concepts и как наученото по време на курса може да ни направи по-добри софтуерни инженери?
1. Кой е Йордан Даракчиев?
Казвам се Йордан Даракчиев и ще водя курса по "Math Concepts for Developers" в Софтуерния университет. В момента уча магистратура по астрофизика в Софийския университет. Науката и програмирането винаги са били моите две страсти, още от първи клас. Това, което не знаех тогава, е че изпитвам влечение към това да преподавам. Винаги съм харесвал това, винаги ми се е отдавало да обяснявам. Още в училище ме търсеха постоянно. Много интересно как 17 години по-късно, нищо не се е променило и имам възможност да следвам мечтите си. Оказа се, че мога да комбинирам всички неща, които ми харесват - наука, програмиране, дори и преподаване! И... ето ме тук, седмица преди началото на новия курс по математика.
2. Какво представлява курсът "Math concepts for developers"?
Курсът ще обхване основните понятия от това, което неформално наричаме "висша" математика. По-конкретно, ще опитаме да развием интуиция за математическите понятия, които се използват често в програмирането. Математиката, която се изучава в училище е крайно "орязана". Трудно се виждат концептуалните връзки между отделните области.
Ние няма да прекараме цялото си време в доказване на теореми. Вместо това ще се запознаем с различни области от математиката. Ще тръгнем оттам, където ни оставя училищното образование и ще надграждаме различни идеи. Най-важното от всичко е, че ще видим как тези идеи се прилагат в работата ни като софтуерни инженери. Сами можем да се уверим, че познанията по математика могат да ни донесат много ползи.
Когато научим какво е вектор, имаме основата да си направим engine за игри. Когато разберем какво представляват комплексните числа, можем да рисуваме различни фрактали, или пък да симулираме електрически вериги. Когато разберем как работят матриците, имаме основата на почти всички филтри във Photoshop. Когато се докоснем до теорията на числата, получаваме криптографски алгоритми: полезни както да си изпращаме съобщения без да ни подслушват, така и да удостоверяваме самоличността си. Ако решим да се занимаваме със статистически алгоритми, ни се отваря огромно поле за действие: полето на съвременното машинно обучение и изкуствения интелект като цяло.
Това са само няколко примера, възможностите са ограничени единствено от собствените ни способности.
3. Как е структуриран курсът?
Започваме с кратък преговор на някои важни понятия и идеи от училищната математика. Когато стъпим на тях, всяка седмица ще надграждаме по малко. Така ще разгледаме достиженията в различни области от съвременната математика. Ще стъпим върху дефиницията за таблица и ще дефинираме матрици. Ще тръгнем от операциите изваждане и деление и ще видим, какво е производна на функция. Ще използваме интуиция за броене, за да дефинираме комбинаторните множества.
Като цяло, ще опитаме да разберем какво представляват различните идеи, какво всъщност стои зад тях и как могат да ни помогнат. За тази цел, имаме по две лекции на седмица. Първата от тях ще се състои в повече обяснения, показване и примери, а във втората "ще си изцапаме ръцете" и ще видим как и къде можем да приложим наученото от по-рано. Приложенията, освен че са полезни, са и интересни. По-горе вече показах няколко, има още много. Ще видим как се прави, къде има роля математиката и как (и защо) алгоритмите работят по този начин.
4. Математиката необходима ли е на всеки програмист?
Зависи. Повечето хора казват, че е необохдима само на хора, които се занимават с анализ на данни или с измисляне на алгоритми. Аз съм на мнение, че всеки използва математика. Уеб дизайнерите пресмятат пиксели в двумерна Декартова координатна система (не казвайте думите "двумерна Декартова координатна система" на дизайнери, защото се плашат). Музикантите използват комбинация от физика на вълните и физиология, за да се изразяват. 3D гурутата ползват ray tracing или подобна технология, за да рендират това, което са получили. Системните администратори използват теория на вероятностите, за да знаят в кой момент е най-вероятно един компонент (например твърд диск) да се нуждае от смяна.
Има ситуации, в които са достатъчни само познания за събиране и умножение. Има други ситуации, в които човек не може да мине, без да се е запознал в подробности със засуканите алгоритми за някоя задача. Като цяло, математиката може да помогне много, ако се занимавате със статистика, анализ на данни, машинно обучение, криптография, графика и други подобни области. Ако не се занимавате, със сигурност логическото мислене само помага.
Със сигурност има положителна корелация между математическата логика и алгоритмичното мислене, има и между математическата логика и хората, които знаят какво означава "положителна корелация".
5. Необходимо ли е да знаем в дейтали математиката, която стои зад даден алгоритъм, за да можем да го използваме?
В детайли - не. Достатъчно е да имаме идея какво прави. Имаме си компютри, които да "мислят" за сложните изчисления. Това, което ни трябва, е да знаем какво се случва "зад завесите", дори и бегло. Причините са няколко. От една страна, трябва да знаем, че една задача има възможно решение. От друга страна, ако не знаем за готово решение (или няма такова), трябва да успеем да го направим сами. От трета страна, ако някой алгоритъм не работи, трябва да знаем как да го поправим.
Всичко това трябва да ни е много познато. Това ни е работата като програмисти - да виждаме проблеми, да измисляме решения и да успеем да отстраняваме проблемите в тях. Това, което ще направим в този курс, е да сложим няколко нови инструмента в колекцията си, с която постигаме тези неща. Идеята е, че така решенията са по-бързи, по-елегантни и т. н. Същата причина, поради която, примерно, бихме търсили елемент в сортиран масив с двоично търсене, а не като обхождаме всеки елемент. Същата причина, поради която знаем, че не трябва да кликаме на мейли от нигерски принцове (или арабски принцеси).
6. Подходящ ли е курсът за начинаещи?
Курсът е подходящ за хора, които имат опит в програмирането. Няма да се спираме на това как и защо се пише for-цикъл. Вместо това ще използваме познанията си по програмиране, за да можем да имплементираме абстрактните си идеи в реален код. В този смисъл, препоръчвам хората, които се запишат, да са минали курса Programming Basics в Софтуерния университет или еквивалентен на него (променливи, стандартен вход и изход, условни конструкции, цикли, колекции). Езикът за програмиране няма значение. Ще използваме Python, просто защото е най-разпространеният език в научните среди. А той е най-разпространен, защото се пише безумно лесно. Всеки, който познава синтаксиса на кой да е друг популярен език за програмиране, може да навлезе изключително бързо в Python.
Колкото до познанията по математика, няма да очаквам нищо повече от някакво разбиране на училищната алгебра (в този ред на мисли, сигурен съм, че курсът ще е подходящ и за ученици).
Според мен има две наистина важни изисквания за курса: логическо мислене и желание за справяне с предизвикателства.
7. Какво ще научат курсистите, които завършат курса?
Ще придобият представа как понятията от математиката могат да подобрят ежедневната им работа. Ще развият логическото си мислене. Ще придобият нови инструменти за решаване на задачите си.
Нещо повече, академичната математика, с нейната сухота и абстрактни идеи, много често поставя една бариера пред това да разберем колко прости и интуитивни идеи стоят зад нея. Надявам се да успеем да разбием тази бариера и преди всичко да не бягаме надалеч, когато чуем думите "интеграл" или "трансформация на Фурие".
За тази цел, курсът завършва с практически изпит, където всеки ще има възможност да покаже собствено проучване по тема, свързана по някакъв начин с математиката. Какъв начин? Вариантите са много. Искам да получавам по-малко спам? Проучвам статии за това как работят спам филтрите, и правя собствен. Имам магазин и искам да привлека клиенти? Правя симулация на три възможни кампании и сравнявам коя носи най-голяма очаквана печалба. По никакъв начин не се очаква курсистите да добавят собствени идеи. Напълно достатъчно е да видим 1, 2 или повече статии по проблем, който ни интересува и да направим нещо практическо, свързано с решението му (или част от него).
8. В каква посока могат да се насочат курсистите, които завършат курса?
Има много варианти. Сигурно най-често срещаният е да се насочат към машинното обучение. Това са така нашумялите напоследък думи като data science / machine learning / deep learning. Всички те са много тясно свързани със съдържанието на курса. И с добра причина: като програмисти, данните са основното, с което се занимаваме. Логично е знанията и алгоритмите, които използваме, да са същите на двете места. Разбира се, възможностите изобщо не свършват дотук. Бизнес анализаторите използват същите познания. Хората, които се занимават с компютърна графика (2D / 3D) - също. Аудио инженерите (и всъщност, всякакъв вид инженери) - също, 100%. Хора, които се занимават с research and development - същите основи, друг контекст. Системни администратори, инженери на бази данни, data warehouse специалисти, cloud providers - познанията по вероятности, компресиране на данни и подобни са техните оръдия на труда.
Разбира се, курсът ще е много полезен и на тези, които не желаят да използват математиката като трамплин към нова кариера, а просто да задълбочат познанията си в ежедневната си работа. Логическото мислене (математическата логика) помага винаги. Примери мога да дам много. Да помислим дори само за случая, когато трябва да напишем (и обходим) дърво в база данни. Или за случая, когато трябва да компресираме голям log файл без загуба на информация. Или дори за случая, когато трябва да запазим четиримерен масив в едномерен и да не объркаме индексите вътре.
9. Какво би посъветвал всички, които обмислят за запишат курса?
Да са готови за предизвикателство. Няма да е лесно, но ще е интересно.
Ако искате да станете част от курса Math Concepts for Developers - септември 2017, не се колебайте и се запишете още сега. Крайния срок за записване наближава, а местат се изчерпват бързо!