Menu

Nakov.com logo

Thoughts on Software Engineering

За математиката в програмирането и дали ни трябва наистина: математика, статистика, data science и machine learning @ СофтУни

Data Science @ SoftUni

С голямо задоволство обявявам, че в СофтУни вече се преподава математика. Включваме сред избирателните курсове изучаване на приложна математика, алгебра, анализ, вероятности, статистика, числени методи и математически софтуерни инструменти, приложения, платформи и библиотеки за прилагане на математически модели, сложни алгоритми и изчислителни подходи в реални практически задачи и проекти от ИТ индустрията.

СофтУни, математика и програмиране

Трябва ли един програмист да знае математика? Математика и програмиране – свързани ли са? Трябва ли да си добър математик, за да станеш програмист? Ако си добър математик, ще станеш ли добър програмист? Постоянно ме питат такива въпроси и постоянно им отговарям, че не е задължително да си добър математик, за да станеш добър програмист и аз самия съм отлично доказателство за това.

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

В началото СофтУни започна като алтернатива на държавното ИТ образование, изградена върху парадигмата “учене чрез правене“, с много практика и изграждане на реални умения, които работодателите търсят. За повечето фирми по-важни се оказаха конкретни езици за програмиране и софтуерни технологии (като PHP и Java EE), а не толкова математически фундамент. Така математиката си остана на заден план, заради липсата на търсене и заради липсата на желание у студентите да се занимават с математика и теория. С времето СофУни се утвърди като безспорен лидер на пазара на ИТ обучения и започна да подготвя повече софтуерни инженери и ИТ специалисти, отколкото всички останали учебни заведения, взети заедно.

СофтУни от самото си създаване е масово учебно заведение с десетки хиляди учащи на година. Някои идват за да научат какво е програмиране, ИТ или да придобият начални дигитални умения. Други идват, за да станат програмисти и да започнат работа. Трети идват, за да станат супер професионалисти в софтуерната индустрия и да се развиват дългосрочно, като надграждат знанията и уменията си в продължение на години. СофтУни дава по нещо за всеки: от начални курсове за запознаване с програмирането и натрупване на базови дигитални умения, до сложни, специализирани мастър курсове за по-напредналите, включващи математика, физика и други фундаментални науки. Всеки може да избира според нивото си и според желанията си какво да учи.

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

Математиката не е за всеки!

Всъщност математика, сложни алгоритми, machine learning и подобни теми не са за всеки. Десетки хиляди работят в софтуерната индустрия на добри позиции в добри фирми, без да имат сериозни математически умения. Защо тогава всички да задълбават в математика, алгоритми, графика или пък машинно обучение? Нека с machine learning и сложни алгоритми се занимават само по-напредналите програмисти, които имат капацитет и желание да усвоят тази материя. Нека който иска да реди сайтове и формички и е доволен от това, да си го работи. Нека който иска да учи алгоритми, да си ги учи. Който има капацитет за self-driving cars, нека с това да се занимава. СофтУни дава избор! СофтУни не задължава всички да учат математика или сложни алгоритми, а само който ги пожелае, който е стигнал ниво на напредък, което му позволява да намери смисъл в тях и да ги изучава с любов и желание.

Обърнат подход: от практика към фундамента

Навремето в математическия факултет ни обясняваха как за да станеш програмист, трябвало да имаш солидна основа от фундаментална математика, всякакви там диференциални уравнения, неевклидови геометрии и незнам си какви пространства и интеграли. Набиваха ни в главите формули и уравнения и всичко това без докосване на компютър, само на дъската. И твърдяха, че така се изгражда основата на добрия програмист. Дрън-дрън. Резултатът от всичко това го знаем: отказваха студентите от математика, отказваха студентите от програмирането, отказваха студентите от ученето въобще. Завършваха много малко хора, масово се преписваше, хиляди се бореха за тройка и много малко хора намираха смисъл в изучавания материал. Липсваше практика и смисъл да учиш всичко това, липсваше мотивация, липсваха резултати. Само единици се запалваха по математиките, но не винаги ставаха добрите програмисти.

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

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

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

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

Ако искаш да правиш игри със сложна графика, започваш примерно с Unity или готова библиотека и се запалваш. Стигнеш ли по-напред, извън тривиалните стандартни инструменти, рано или късно се сблъскваш с математика, но тогава знаеш за какво ти е, намираш смисъл и започваш да я учиш с хъс. Източници много: има хиляди курсове в Coursera и световните учебни организации. От практиката към теорията. От конкретния проблем към по-общите принципи. Така се учи по-добре и е по-удачно в съвременни бързо-променящ се свят.

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

Именно затова в СофтУни по-сложните курсове (структури от данни, алгоритми, математика, data science, machine learning, computer graphics, operating systems, project management, agile methodologies и др.) се изучават по желание и към края на учебния план, след година-две навлизане в програмирането и практическата разработка на софтуер, след някоя и друга година реален стаж в софтуерна фирма. Тогава по-надчетените студенти са готови за тези знания и могат да ги поемат. А останалите – те ще намерят своя път и той може да не минава през математика и физика. От практика към фундамент – това е по-добрият път в съвременния дигитален свят!

Първо програмиране, после (евентуално) математика и по-сложни алгоритми

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

Грешно е да се опитваме да научим всеки на сложни алгоритми и математика, особено в началото, преди да сме му запалили интереса и да сме му дали смисъл да учи програмиране и технологии. Така хиляди читави студенти се отказват, не защото са глупави, а защото им е рано. Вижте какво става в Софийски и в Технически университет. Грешно е да учим теорията зад даден проблем, преди да сме се сблъскали с проблема в практиката. Грешно е да учим управление на проекти, преди да сме участвали поне в един проект и да сме разбрали нуждата от планиране и контрол на задачите. Затова съм привърженик на подхода “от практика към фундамент”.

За направлението по Data Science / Machine Learning в СофтУни

Страхотно е да добавим още едно направление от знания за търсещите нещо повече от кодене: data science / machine learning / intelligent systems / robotics. Има огромно бъдеще в тези науки. Идва ерата на роботите. Вече автомобилите без шофьор се движат по улиците. Предстои роботизация в много сфери на икономиката. Ще изчезват професии, ще се появяват нови интелигентни роботизирани устройства – и за ежедневието и за различни индустрии. Трябва да сме готови! Това е нещо повече от поредния маркетинг шум около cloud, IoT и big data. Затова в СофтУни ще развиваме обучения, работни групи и know-how в сферата на интелигентните системи и машинното обучение. Очаквайте още курсове в тази сфера.

Сега в СофтУни стартираме начален курс по висша математика за програмисти (с практика на Python), след него идва и базов курс по Data Science, с повечко математика, статистика и практически занимания, продължаваме с machine learning курс в СофтУни, следван от Deep Learning курс, а някой ден защо не и за self-driving cars като обучения и специализации в #СофтУни.

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

Previews (62,282), Views (572), Comments (6)

6 Responses to “За математиката в програмирането и дали ни трябва наистина: математика, статистика, data science и machine learning @ СофтУни”

  1. says:

    Успех!

  2. Djambov says:

    Супер ! Ще очкаваме още курсове.

  3. nakov says:

    Май трябва да направя едно уточнение: какво наричам тежки математики. За мен тежките (и излишни за средно-статистическия читав програмист) математики са всичките там диференциални уравнения, диференциални геометрии, равнини, пространства и т.н. Те са само за част от хората, които имат желание и сили да се занимават с research и да решават по-сложни проблеми от обичайните в разработката на приложен софтуер.

    От друга страна, логическо мислене, бройни системи, базови алгоритми като търсене, сортиране и логически задачи, съвсем начална статистика, алгебра и геометрия (имам предвид на училищно ниво) са добра основа на един програмист и помагат за развиване на алгоритмично мислене и problem solving skills.

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

    Веднъж спорихме цяла вечер с проф. Krassimir Manev по темата дали трябва програмистите да се учат тежки математики и стигнахме до извода, че аз съм математик, защото логически формулирам твърдения и си ги защитавам аргументирано. Оказа се, че според мен аз не съм математик, а според него съм. В крайна сметка се съгласихме, че аз имам математическо (алгоритмично) мислене и че това проф. Манев го нарича математика, а аз го наричам логическо мислене. Разминаване в терминологията.

    В училище имах 6 по математика, понякога 5. Не съм бил двойкаджия, но не съм бил и много силен, може би средна сила в моя клас. Обаче си влагах времето в програмиране и дистигнах доста прилично световно ниво. И тогава, и сега, не се считам за добър математик.

    И така, за всички спорещи: Обърнете внимание на дефинициите. Какво наричаме математика, защото иначе спорът става безкраен и всички са прави едновременно.

    Да, ако логическото мислене е математика, значи тя е абсолютно задължителна за всеки програмист и в #СофтУни учим всеки ден здраво математика.

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

    И двете са верни едновременно.

  4. Jonathan says:

    Съгласен съм. Ако обучението по програмиране се започне със скучни, сухи теореми, интеграли и прочие, на много хора ще им дотъпее и ще се откажат. Трябва практика и кодене, трябва на студентите да им е интересно да творят код, който работи и да го подобряват. В моя университет, специалност КСТ 2 години ме занимаваха с всевъзможни глупости – теоретични електротехники, висши математики и какво ли още не. Бях на прага да се откажа. Вече съм програмист от 4 години и не ми се е налагало да ползвам тези глупости нито веднъж.

  5. Супер готина статия, евала!
    Мислех, че съм единственият човек, които мисли по този начин. 🙂

RSS feed for comments on this post. TrackBack URL

LEAVE A COMMENT