ФМИ и висшето образование в програмистката индустрия
Contents
Всеки гимназиален ученик, който се насочва към програмиране, рано или късно започва да мисли за висшето си образование. Мненията онлайн са разнообразни, някои твърдят че не е нужно, някои хвалят определени университети, други пък изрично ги отричат. И цялата тази дискусия се намира в постове от преди 5-10 години…
Аз вече съм следвал 2 години в университет, плюс това имам сериозен опит от преди това. Макар и този блогпост да е главно за Факултета по Математика и Информатика към Софийски Университет, по-общата ми цел е да споделя всичко , което знам свързано с образованието в индустрията.
Бърза бележка: всичко казано важи за моя випуск, с времето нещата се изменят и може повечето информация тук да бъде остаряла. Допълнително, тук имам изкарани баловете във ФМИ (на СУ) за 2021 година.
Кой съм аз
#Този блогпост няма да бъде напълно неутрален и ще включва моето мнение, затова е добре да знаеш от къде идва моята гледна точка. Завършил съм 9 Френска езикова гимназия, обаче едновременно от 10 до 12 клас участвах интензивно в националната програма ИТ-кариера. Накратко, в тази програма изучавах практически неща, главните няколко типове програмирания, и към края се занимавах с разработване на софтуер на сравнително индустриално ниво (или поне най-близкото до това). От цялата програма бях единствения от център София с пълно отличие.
От друга страна, още от сравнително малък съм имал проблеми с математиката. Не смятам, че някога съм бил напълно безнадежден, но винаги ми е трябвало повечко помощ и на малкото олимпиади на които съм ходел, никога не съм минавал първия кръг.
И все пак, успях да вляза в Компютърни Науки (втори поток) на първо класиране, на 113то място от общо 115 места. На всичкото отгоре това беше по времето на Математика I и Математика II, значително по-трудни изпити от сегашната Математика, ама това също ще го обсъждаме.
Общо казано, аз влязох във ФМИ с доста умения по програмиране и нисичко ниво за математиката. Бих казал, че общо като талант за програмиране и математика съм на същото ниво като средния работещ програмист на моята възраст.
Университетите в България (София)
#Сега ще обсъдим какви са алтернативите на ФМИ, и защо те не са толкова добри. В София има четири (смислени) университета, които предлагат някаква форма на софтуерно образование: Софийски университет, Нов Български Университет, Техническия Университет и Университет по Библеотекознание и Информационни технологии. Този пост ще бъде посветен на първата от тези опции, но все пак покрай приятели и колеги имам добра представа за другите опции.
УниБит
#Абсолютна загуба на време, даже бих казал, че е вредно да се следва в този университет. Виждал съм разговори с един човек, който беше завършил бакалавър там и следва(ше?) магистър. Той нямаше добро разбиране за най-основните и уводни неща по програмиране, които дори един среден програмист знае без да се замисля.
Фактът, че такива хора могат да имат добри резултати, показва нивото колко е ниско.
НБУ
#Не бих казал, че този университет трябва да се избягва, но следването пак е сравнително безсмислено. Първо на първо, там сам си избираш кои предмети да изучаваш, което означава, че ще се наложи да учиш неща, които нямат нищо общо с компютърната сфера. Разбира се, има някакво ядро от задължителни предмети, но то е сравнително малко, и за по-сериозните предмети нямат хора. Преди година се е наложило да преместят един предмет от 2ри-3ти курс в 1ви, защото преподавателя напуснал и нямало кой да го замести.
Ама по-големият проблем е, че там изискванията са твърде ниски, дори най-големите мързели си минават предметите. До голяма степен, ако нищо не си правил цял семестър и сериозно се потрудиш, най-трудните предмети се минават с максимум седмица-две учене. Лесно се вижда, че като цяло материалът не е много голям и няма голямо задълбочаване.
Доколкото съм чувал, често хора се записват и си работят като програмисти в някоя компания. На работа научават всичко (даже и повече) от материала, който се преподава и само се явяват за изпити с минимална подготовка. Допълнително са ми казали, макар че не успях да потвърдя със сигурност в сайта на НБУ, че когато работиш, компанията ти дава някакви точки, благодарение на които можеш да завършиш нормалния четиригодишен бакалавър за две години.
За тази дисциплина, НБУ се счита за място където си купуваш дипломата, почти всички студенти са много мързеливи, много несериозни и не научават много.
Технически университет
#Не съм чувал много, но техническият университет се занимава повече с инженерство, така че се учат не толкова свързани предмети, като физика, проектиране и електротехника. Доколкото виждам онлайн, мненията не са позитивни:
За IT ТУ е абсолютна загуба на време - редовно ми идват стажанти от там. Ако не са се занимавали с програмиране от преди това, почваме от 0
Завършил съм компютърни системи и технологии на немски в ТУ. Знам за какво иде реч и в българските факултети. След като разбрах какво се изучава във ФМИ ме хвана яд, че не се бях записал там.
Също когато кандидатствах се разпространяваше видео за някаква преподавателка как по новините разказва колко е добре в ТУ, и директно след това имаше запис как изпада в истерия покрай нещо сравнително дребно.
Друг голям проблем там, е че често може да решат да не ти заверят книжката за щяло и нещяло (чувал съм, че един голям фактор за това е присъствие на лекции), което те прецаква много, защото така не може да продължиш в следващия курс.
ФМИ
#Надявам се, че успях да те убедя, че измежду университетите, ФМИ е за хората със сериозни амбиции и останалите университети са за хората с по-хлабави цели и желания. Все пак въпросът “дали има смисъл да се следва във ФМИ” остава неотговорен.
Във ФМИ много от предметите са математики и програмиранията се говори, че не са много добре. Онлайн има стотици часове материали и курсове, повечето от които са безплатни, на всяка тема свързана с програмиране. Допълнително имаш Telerik Academy и SoftUni (само искам да напомня, че СофтУни не е университет, макар и така да се казват) - две места които предлагат разнообразни програмистки и чисто практически курсове (и също дават сертификати). А и повечето програмисти нямат висше и са самоуки, тоест този път не е изобщо странен, даже е най-често следвания.
Финалното ми мнение се намира най-долу, но един такова решение трябва да се вземе с възможно най-много информация.
Специалности
#Във ФМИ има 4 компютърни специалности: Информатика, Компютърни науки, Софтуерно инженерство и Информационни системи. Технически всяка се занимава с различни неща, но на практика всички влезли искат да са програмисти. От тях, най-желани са компютърни науки и софтуерно инженерство (тези ще наричам “хубавите” специалности).
В информатика се влизаше много лесно, там балът беше безнадеждно нисък, обаче следването е най-трудно от всички останали дисциплини. Късането е брутално, особено първи курс: по Алгебра 1 от към 200 човека (това включваше и минали години май) само един човек беше допуснат до изпит (ама си го мина де). По дискретни структури бяха повече, цели 10тима човека. Общо от 1ви курс преминаха успешно 20-30 човека във 2ри курс (за да минеш не е нужно всички изпити да си минал, ама детайли по-късно). Има няколко причини за това:
- от една страна бала като е най-нисък, хората с най-ниски умения по математика се намират там, така че успехите ще са най-ниски,
- от друга страна има и преподаватели които са прекомерно неадекватни като изпитване и преподаване.
Информационни системи от своя страна сякаш се занимава повече с бази данни и проектиране на информационни системи1, не толкова чисто програмиране и нещата около него. Признавам, че не съм чувал много за тях, ама балът не изглежда да е много висок (мисля че е по-висок от информатика) и мисля, че следването е най-лесно от 4те специалности.
Сега, компютърни науки и софтуерно инженерство. Понеже в КН има много хора, студентите се разделят на два потока: всеки поток учи по същата програма, обаче при повечето предмети преподавателите са напълно различни. Това разпределение е на случаен принцип, макар че не знам дали ако не помолиш любезно при подаване на документи, няма да те сложат в поток по желание (ама ме съмнява). Затова ще разглеждаме поток 1 (КН1) и поток 2 (КН2) като на отделни дисциплини.
При СИ е по-лесно отколкото при КН, въпреки че балът там беше най-висок. Цялостното ми впечатление е, че повечето хора там са на малко по-ниско ниво като умения и знания от КН2, с изключение на няколко индивида които респектират и най-добрите в КН. По всички предмети, поне за 1ви курс, повечето студенти минават, но цената за това е, че знаят по-малко.
КН1 е доста по-близко до СИ, като ниво на образование и изисквания, ама пак сякаш е една идея по-добре. Само по Алгебра 1 и Геометрия минават към 20-30 човека от първия път, по останалите си минават повечето. Макар че сравнително непланирано им сложиха доста взискателни преподаватели през 2ри курс, не знам дали те ще останат в бъдещи години, така че разликата между КН1 и КН2 може да се стопи.
КН2 вече е доста по-трудно, тук ежегодно по Диференциално и интегрално смятане минават 20-30 човека, а по Дискретни структури минават по 10тина. Напомням, че аз влязох тук. Приблизително 44%2 от редовните студенти (които не повтарят) успешно минаха (минахме ;)) към втори курс. Иначе имам впечатлението, че най-умните и умелите хора измежду компютърни науки и софтуерно инженерство се намират тук, макар че това зависи от випуска: няма гаранция, че един много умен кандидат-студент ще реши да се запише за КН (и ще попадне в КН2).
Като обобщение, това са дисциплините подредени от най-трудна за минаване към най-лесна:
- Информатика: много трудно, не по много основателни причини, макар че като цяло малцинството което успява да завърши са на високо ниво. Не препоръчвам, ако не си много издържлив и КН и СИ не са се получили.
- Компютърни науки, 2ри поток: трудно, но като цяло е сравнително основателно (пак на моменти е малко нечестно, но не толкова колкото при информатика), нивото просто е високо. Поне от моя випуск, повечето от най-добрите се намират тук. Ако си представим, че има някакво перфектно ниво на обучение, където не е твърде лесно, но и не е твърде трудно, бих казал че КН2 се намира малко над това ниво.
- Компютърни науки, 1ви поток: малко по-лесно от КН2, но с малко понижаване на качеството. Има добро количество материал, което в КН2 ти е набито в главата, докато при КН1 си го забравил след лятната ваканция (не че това не важи в обратната посока, но в КН2 ни вкарват повече неща в умовете). В сравнение с перфектното ниво, КН1 е малко под него. Обаче трябва да се има в предвид, че 2ри курс сложиха доста взискателни преподаватели. Ако това се запази, разликата между двата потока може да изчезне.
- Софтуерно инженерство: забележимо по-лесно от компютърни науки, повечето хора по повечето дисциплини минават без твърде много проблеми. Ама нивото също спада забележително, макар и бала да е най-висок. Както споменах, при компютърни науки е по-добре, ама нивото на СИ пак е сравнително ок.
- Информационни системи: нисичък бал и сравнително лесно, но не ми изглежда да е супер развиващо за програмисти. Не бих препоръчал, освен ако алтернативата не е информатика.
Трябва да напомня, че под лесно имам предвид, че се налага полу-редовно учене, не е като лесно в НБУ, където мързелуваш цял семестър, правиш един калпав проект за седмица и минаваш. Също по някои предмети преподавателите са едни и същи всяка година, по други не, тоест колко са сложни дадени предмети и специалности зависи от годината.
Влизане
#В днешно време, с новата програма, кандидатстването е значително по-лесно. Сега главният определящ изпит е просто “Математика” и включва сложни въпроси като “кое от следните числа е най-голямо” и “намерете броя решения на уравнението”. Разбира се, с това си идват свои трудности, и най-малката грешка може да постави 10-20 човека над тебе като успех, но в края на деня не се изисква толкова много тренинг както при моите изпити.
Моята генерация беше последната по старата програма на обучение3, така че при кандидатстване се вземаше една от оценките на изпитите Математика I или Математика II (като втория изпит допринася повече към бала). Математика I беше сравнително стандартен, напомнящ на модерната “Математика” или матурата, обаче Математика II беше съвсем друго животно: там имаш 8 задачи, всяка с отворен отговор и изисквано решение. Този изпит беше трудният и до голяма степен определящият, от максимум 5934 човека се рееха слухове че само 20тина са имали 6,00.
Въпреки това, влизането във ФМИ беше лесно, общо имаше 5255 места, предостатъчно, имайки предвид, че не всички явили се на тези изпити, кандидатстваха в компютърна специалност (оценката важи за физическия и стопанския факултет). Вече за конкретни специалности беше малко по-трудно, 300 от тези места бяха в хубавите компютърни специалности, така че конкуренцията беше горе-долу двама човека за едно място. Също е добре да спомена, че баловете бяха супер ниски, в компютърни науки влязох с 4.70 (на Математика II) на първо класиране, на второ можеше и с 4.30 да вляза. Конкретни стойности за баловете от тази година съм изкарал тук. В Софтуерно инженерство бяха малко по-високи изискванията (а там бяха най-високи от компютърните специалности), ама пак, далеч от времето, когато с 5.40 е можело и да не влезеш6.
С новия изпит вече конкуренцията е малко по-висока, все пак са се явили 9697 ученици на Математика през 2022 и максимум 9798 през 2023. Местата са същия брой, така че излиза към примерно трима човека за едно място и ако примерно имаш 3ка или 4ка може и да не влезеш във ФМИ.
Обаче, най-важното: материалът във ФМИ не се е изменил! Макар и изпитът да е значително по-лесен, трудността на материала не се е снижила (или поне толкова, колкото изпита) и в същото време математиката се изучава доста. Тоест, един човек, влязъл с най-ниския бал на Математика ще е далеч по-неподготвен за ФМИ от човек с минимален бал на Математика II. Затова препоръчвам всеки кандидат-студент да може да реши някоя Математика II за към 4-4.50! Това са горе-долу 5-6 от 8те задачи. Иначе ако не можеш редовно да учиш математика и не можеш да се справиш с такива задачи (които са по-прости като характер в сравнение с това, което учим в университета), следването ти ще бъде твърде трудно според мен.
Следване и оцеляване
#Всеки предмет е разделен на три типа занятия: лекции, семинарни упражнения и практикуми (практически упражнения). Лекции се водят от “главния” преподавател (лектор) и се учи главно теория. Практикуми се водят от асистенти, които лекторът е избрал и тяхната цел е изцяло да се упражняваш. Семинари са нещо по средата, където пак се упражняваш, обаче учиш и нещо отгоре, най-често някакви методи за решение на задачи.
Примерно по някой предмет по програмиране, лекциите ще изнасят някаква суха теория за самия начин на програмиране, семинарите ще обяснят горе-долу тези неща, като ги показват с писане на код и на практикума вече сам поучаваш задачи и пишеш код (с помощ от асистента ако е нужна). Ама практикуми и семинарни упражнения са кажи-речи едно и също нещо, когато имаш само едно от двете по програма.
В учебните планове, под седмична заетост, стойностите са във формата “часове лекции на седмица + часове семинарни упражнения на седмица + часове практикуми на седмица”.
Оценяване, влачене и повтаряне
#Чисто организационно, академичната (учебната) година се разделя на два семестъра (срока), като месеца след всеки семестър всички влизат в сесия. Повечето предмети имат някакви контролни и домашни през семестъра, но на практика това са максимум 3 на брой от всяко (макар че понякога има и седмични малки задачи). През сесията имаш изпити: контролни които включват целия материал. Най-често имаш два изпита, един на задачи и един на теория, и двата писмени (устните изпити са сравнително редки, единици предмети за цялото следване).
Оценката се формира по различни начини при различните предмети, но най-често контролните и домашните през семестъра носят 40-50% и през сесията си изкарваш останалата част от оценката. Също понякога, ако си се справил достатъчно добре на контролните през семестъра, може да бъдеш освободен от изпит-задачи (не е нужно да ходиш и като оценка на него ти се пише средно аритметично от контролните). Обаче почти винаги ако изкараш двойка на някой от изпитите през сесията, цялата ти оценка за предмета става двойка!
Когато не си минал един предмет, ти го “влачиш”. За всеки предмет имаш две дати през академичната година, през които може да го вземеш: редовната сесията след семестър (тоест когато по принцип се изпитват хора по този предмет) и поправителната сесия, която се случва във втората половина от август9. По принцип имаш и ликвидационна сесия, ама идеята е, ако два изпита през поправителната сесия ти се препокриват, през поправителната да отидеш на единия и на ликвидационната да може да отидеш на другия (трябва да подадеш документ, че това си направил, не можеш да отложиш изпити ей така).
Можеш да преминеш към следващия курс без проблеми ако влачиш максимум 3 предмета от годината. Ако влачиш 4 предмета става малко условно, подаваш като декларация в която се обясняваш защо не си ги минал, ама в повечето ситуации те пускат в следващия курс (освен ако не си минал две двойки близки предмети). Вече ако влачиш 5 предмета или повече повтаряш учебната година. При повтаряне си запазваш резултата от взетите предмети (които си минал с поне 3ка), обаче при предметите които не си минал, всички оценки се губят и почваш от нулата (освен ако преподавателя не е казал друго).
Също към всеки предмет се добавя и година, ако не е от предишния курс. Тоест, ако аз влача някакъв предмет от първи курс, то когато дойде време да ме запишат във втори курс, няма да съм минал един предмет. Обаче, когато дойде време да ме запишат за трети курс и все още не съм минал този предмет, той ще се зачита за два неминати предмета. Аналогично, като дойде време да ме запишат за четвърти курс, той би се зачитал като три неминати предмета.
Общо казано, изпитването не е много на често, имаш време за подготовка доста, обаче може да е сравнително трудно. За да повтаряш трябва да не си се справил с добро количество предмети (първи курс имаш общо 8 предмета, възможно е полината да не ги минеш и да продължиш напред).
Седмична заетост
#Учебните занятия се случват от понеделник до петък, от най-рано 8 часа до най-късно 19 часа (макар че понякога упражнения се избутват и до по-късно, към 21 часа, ако студентите са съгласни). През уикенда, като цяло няма занятия, освен ако някое не е било изпуснато и се наваксва. Ама събота и неделя са най-често отделени за контролни през семестъра.
Количеството подготовка за едно контролно зависи от човек на човек, но ако нищо не си учил, бих казал че е поне една-две интензивни седмици за сериозните предмети са достатъчни. За домашните е по-малко, защото по принцип те са върху неща, изучавани на упражнения, така че ако си си водел записки (или споделящи колеги са водели) ще знаеш как да решиш всички задачи (разбира се, има изключения). Това обаче е само за контролни-задачи по някои предмети, все пак имаш теория и имаш задачи за които ти трябва теория, и тя вече не може да се научи толкова бързо.
Нещо много хубаво е, че никой не следи за присъствие на занятия и не се пишат отсъствия както в училище. Разбира се, това не означава, че не е нужно да се ходи на всички занятия, напротив, но ако искаш винаги може да пропуснеш нещо. Друг ефект на това е, че винаги може да ходиш на упражненията на друга група, вместо на своята, ако имаш проблеми с часа на упражнението или преподавателя. Макар че не е хубаво да ходиш на упражненията на другия поток или специалност, понеже материалът може да е различен (за това след малко).
Преподаватели
#Лекторите са главните преподаватели по дадения предмет. Те определят целия материал за дисциплината, формирането на оценката и избират асистенти за упражнения.
Една голяма разлика с училище е, че когато лектор е решил нещо, то си стои. Изпитите са тези, които е определил в началото на семестъра, ако не ти достига нещо за оценка, няма индивидуални допълнителни изпитвания, колкото да го изкараш. Разбира се, може да спориш, че работата ти на даден изпит трябва да носи по-висока оценка, или пък преподавателя да ти даде допълнителна задача на устен/теоретичен изпит. Обаче няма ги шашмите, където те изпитват допълнително за втори-трети път или правиш някакви допълнителни проекти.
Избираеми дисциплини и работа
#Както в училище, имаш една камара задължителни предмети, изброени в учебния план на специалността. Обаче, си задължен и да ходиш на избираеми дисциплини: имаш минимален брой избираеми за всеки семестър, минимален общ брой за всичките години и минимален брой ECTS кредити за всичките години. За разлика от училище, имаш доста голям избор и много от тях са интересни и полезни.
Обаче, не записвай избираеми през първи курс! Скоро ще обсъдим предметите, обаче първи курс е най-труден и изисква цялото ти работно време! Това трябва да навежда на мисълта, че не трябва да работиш по време на първи курс, освен ако не ти се налага или не си от най-умните хора в специалността.
Материалът е нещо напълно ново, не само като изучавани неща, ами и като концепции и модел на учене.
Ама каквото и да си говорим, най-доброто обучение се намира в избираемите дисциплини! Не е задължително да си доцент или професор, за да направиш избираема, и може да я направиш както си искаш. Има много такива, които се водят от бивши студенти на ФМИ, които сега работят в големи компании, и предоставят супер практично и готино обучение. За някои неща даже не можеш да намериш в България курсове, като Реализация на езици за програмиране, където се разглежда как се правят компилатори или Употреба и скриптиране на Vim, където подробно поглежда един от най-добрите текстови редактори някога създавани.
Какво се учи в КН2
#Важно е да напомня, че всеки лектор изцяло дефинира материалът, който ще се изучава, и форматът на изпитване. Разбира се, неговите решения са прегледани от някаква комисия, но главния ефект е, че за един и същ предмет, различни преподаватели имат колосално различни изисквания и може да има огромни разлики в преподадения материал. Няма да споменавам имена, разписите за моя випуск си стоят на сайта, който токова се интересува да се порови.
Преди да задълбая във всички предмети (до втори курс включително, понеже за момента до тук съм стигнал), искам малко да поговоря за математика.
Училищната математика срещу университетската математика
#В училище разграничаваме математиката на алгебра и геометрия (и понякога стереометрия). Дори в профилираните места се учат само формули и методи за решаване на задачи. Това не е същото като математиката, изучавана в университета (и истинската математика с която математици работят). В училище на практика учим аритметика и евклидова геометрия - материалът изучаван от преди 2000 години по времето на древната Гърция, с някои модерни добавки и формулировки.
Истинската математика се занимава с твърдения и доказателства върху определени аксиоми. Аксиомите са неща, които приемаме за верни без обосновка, това е ясно, но в математиката аксиомите са много по-основни и по-общи. Твърденията са неща, които казваме че са верни за дадена конструкция, тоест за нещо, което си измислим (и което не противоречи на аксиомите). Конструкция е ключова дума, понеже сътворяваме с въображение някакъв обект, нещо с някакви свойства и после доказваме, чисто формално и прецизно със стриктно определени уреди, че дадения обект прави това, което искаме.
Трудно ми е да дам лесен пример, понеже нищо в училище не може и да се сравнява, но нека да пробваме следното: нека да разгледаме множества. Множество е просто някаква колекция от елементи10, представи си кутия с някакви предмети в нея. Аз твърдя, че едно празно множество е елемент на друго празно множество, тоест че една празната кутия се съдържа в друга празна кутия. Това е очевидно грешно11, нашето доказателство е, че щом кутията е празна, то по дефиниция няма елементи, следователно няма как да има друга кутия в нея.
Ето: конструкция, твърдение и доказателство, доста елементарно и очевидно, но все пак се опитвам да не навлизам в детайли, а и в математиката има такива резултати, които не са хич очевидни. Също, доказателството, че нещо не е вярно може би изглежда безполезно, но някои от най-големите теореми на математиката са формулиране така.
Сега вече ще обсъдим конкретно изучаваните предмети в детайл.
Първи курс: М-то във ФМИ означава МатеМатика
#Първи курс е най-трудния курс и е най-тежък като математика. Въпреки всичко, тази математика си има употребите и е есенциален фундамент за много други неща.
Зимен семестър
#Алгебра 1: пълното име е линейна алгебра. Занимава се главно с линейни уравнения (ax + by + … + mz = k), обаче интересното идва като изследваме операции върху тях и ги навържем в пространства. Много фундаментален предмет, използват се поне части от него в много клони на математиката и инженерството (защото много неща могат да се моделират с нея). Има употреби в machine learning, в компютърната графика, в алгоритми за препоръки (търсачки примерно), обработка на изображения и много други.
Има по една малка задача всяка седмица, но не са трудни, изисква постоянство. Предметът се минава без твърде много трудности, лекционните записки са много прецизно написани и упражненията са супер.
Диференциално и интегрално смятане 1: с други думи, реален анализ. Главно разглеждаме свойства и операции върху функции и редици числа. В училище учим производни; глаголът да правиш производни разговорно може да се нарече “производиране”, обаче терминът е диференциране. Интегрирането е обраното действие на диференцирането, тоест намирането на функция, имайки само нейната производна. Неговата употреба е малко по-изолирана, но е много полезно за анализ на алгоритми и разглеждане на “аналогови” данни (примерно радиокомуникация, wifi).
Упражненията, особено при правилната асистентка, са много добри, лекционните записки са солидни. Това е един от много трудните предмети за минаване, при който редовно минават към 20-30 човека. Главната цедка е теорията, на която имаш теоретични задачи, при които дори за 3ка ще трябва да приложиш малко усет към предмета. Като цяло просто изискванията са високи, иначе екипа са готини и бих казал, че оценяването е честно.
Дискретни структури: този предмет е малко смесица от три предмета - булева алгебра, увод в теория на множествата, комбинаторика и теория на графите. От всичките математики, това е може би най-важната за програмиране. В определен смисъл на думата, ДИС се занимава с безкрайно много и безкрайно малки елементи: на една функция може да и подадеш числото 1, но и 1.1, и 1.11 и так. нат., без проблем. Обаче ДСТР разглежда дискретни обекти, тоест някакъв краен брой конкретни неща.
- Булевата алгебра е малка, тя много се ползва в булеви изрази при условия в код. Формално дефинираме логически изрази и разглеждаме техни свойства.
- Класифицирал съм теория на множествата като увод, защото истинският предмет става много странен (има си избираема за това), но се занимава точно с обекта за който говорехме по-рано: множества. Тяхното приложение е вездесъщо, не само в математиката, а и в програмирането.
- Комбинаториката се занимава с бройка възможности, нейното приложение пак е свързано с разглеждане на алгоритми и се използва за доста резултати в теория на графите.
- Най-общо, граф е съвкупност от елементи и връзки между тях. Това може да са градове и магистралите между тях, устройства и интернет кабели в компютърните мрежи, лингвистика като думи и техните връзки, специални структури от данни и списъка продължава. Теория на графите се използва в кажи-речи всички науки и е една от най-важните компоненти на алгоритмите.
Това е предметът при който редовно минават максимум 10 човека. Асистентите много често се менят, така че нивото на упражнения е малко хлабаво. Лекционните записки даже бих казал, че са по-добри отколкото при предишните два предмета, защото малко повече има нормални обяснения. Ама трябва да предупредя, че не получаваш точки за половинчати решения, като цяло или си решил задачата коректно или не. Бих казал че при този предмет се появяват нечестности или прекомерно високи изисквания на моменти, но се минава.
Увод в програмирането, неговото значение трябва да е очевидно. Изучава се C++, макар и някои неща да не са направени по най-добрите начини. Налага се да знаеш и ползваш точно нещата, които ти се преподават и нищо друго. Не бих казал, че е лошо направен, има някакво основание за тази методика, обаче някои неща се разглеждат твърде формално и програмирането не се изучава като динамичен предмет, в който може да решиш проблеми по много начини, а като задача по математика, където се изисква определено решение.
Студентите си го научиха де, въпреки всичко не е като да не научаваш нищо, но имам някои силни възражения. Имало е ситуации, където човек си пише кода, самото решение работи коректно, обаче не направено както преподавателите искат и затова губиш всички точки по задачата. Ако подвиеш опашка и правиш това, което искат от тебе, предметът не се минава много трудно, макар че ако на някое контролно имаш двойка, на теория може да ти направят проблем.
Лекциите са слабото място на този предмет, семинари и практикуми са (при правилните хора) на много високо ниво.
Летен семестър
#Диференциално и интегрално смятане 2: директно продължение на ДИС1.
Геометрия: истинското име на този предмет е аналитична геометрия и няма нищо общо с училищната евклидова геометрия. Разглеждаме пространствата и геометричните обекти като по-абстрактни неща, или по-конкретно, разглеждаме повече числата и зависимостите между конкретни обекти. Централно в компютърната графика и всичко около нея (обработка на изображения, 3D моделиране, …).
Лекционните записки са малко по-неудобни за ползване, понеже са написани на ръка, ама вършат работа. Упражненията са супер, има и много добри записки по тях. Минава се без твърде много проблеми.
Езици, автомати и изчислимост: вторият най-важен предмет от математиките, на английски се казва Theoretical Computer Science. Занимава се с различни теоретични обекти, които могат да правят изчисления върху текстови низове. Всичко свързано с анализ или шаблони върху текст използва нещата тук, а пък и отвъд. Ако някога си чувал за машина на Тюринг, Тюринг-завършеност на програмни езици или проблемът за спирането, от тука идват. Благодарение на тази наука е възможно да имплементираш компилатори на програмни езици и да правиш всички форми на разбор на текст (като обработката на уебстраници и интернет пакети).
Записките са много добри, даже публично се намират, заедно с минали изпитни теми, тук. И както по дискретни структури, асистентите не са консистентни и нивото малко криви. Ама в края на деня преподавателите са готини и не искат да прецакват хора, така че се минава спокойно.
Обектно ориентирано програмиране: това е най-популярният начин/парадигма за програмиране. Обект е групиране на данни с функциите върху тях, като са изпълнени няколко свойства. Кажи-речи всяка компания и всеки модерен програмен език, който се използва в индустрията, поддържа ООП.
Екипът е същия като при УП, така че общото ми мнение е същото, макар че при ООП ситуацията е може би една идея по-релаксирана.
Втори курс: И-то във ФМИ означава математИка
#Първия семестър на втори курс беше абсолютна почивка, без никаква математика само се занимавахме с програмиране и компютърни неща. Втория обаче добре напомни, че сме във ФМИ и там колана се затегна с Алгебра 2 и Дизайн и анализ на алгоритми. Като цяло във втория семестър за първи път (и да се надяваме последен) започнах да виждам на предмети като наистина безсмислени и зле направени.
Зимен семестър
#Компютърни архитектури: описание на хардуера. Малко се доближава и до електротехниката, но се разглеждат много фундаменталните хардуерни компоненти и техните функционалности в един компютър. Разглеждаме основните компонентни схеми за изчисления и хардуерно как се ползват и работят нещата. Не е кой знае колко полезен за средния програмист, освен ако не се занимаваш със системно програмиране, ама е много важен фундамент.
Лекторът е много готин, един от любимите ми бих казал. Това е първият предмет при който няма задължителни упражнения, но никой не препоръчва да се ходи на избираемия практикум, понеже не е координиран много добре с лекциите и някои неща стават твърде трудни. Иначе минаването е лесно.
Основи на компютърната графика: има ли изобщо какво да обяснявам. Разглеждаме част от математиката, но повече се занимаваме с 3D моделиране и идеите на сложните неща, не толкова тяхното имплементиране.
Минаването е лесно, трябва да си малко консистентен със седмичните задачи обаче. И този лектор ми е един от любимите. Презентациите в които се намира материала са перфектно направени и упражненията са много приятни. Ето тук има редици малки задачки/игри с които можеше да изкараш малък бонус към оценката.
Структури от данни и програмиране: нещо като въведение в дизайн и анализ на алгоритмите. Занимаваме се с някои много важни структури от данни, като стек и опашка, и разглеждаме алгоритми върху тях. Супер важно за всеки програмист.
Екипът пак е същия, както при УП и ООП, така че мнението ми продължава, но тук поне изискванията за писане на код са по-основателни. Все пак разглеждаме конкретни структури от данни и алгоритми, ако не ги ползваш в решенията на задачи, малко би се обезсмислила цялата история.
Функционално програмиране: втората най-използвана парадигма след ООП. Идеята е, че разглеждаме всичко като функции, във всеки момент една функция връща нещо или приема нещо и никъде не пазим състояния. Тоест, една стойност се намира или като аргумент или като върната стойност. Също супер важно да се знае и може.
Лекционните презентации стават, но асистентите са най-голямата сила на предмета. Минаването не е трудно и теорията не е много сложна.
Летен семестър
#Алгебра 2: дефакто разглеждаме теория на групите, което на английски съм го виждал и като “Modern algebra”. Група е някакво множество от елементи и операция върху тях, като за операцията са изпълнени няколко свойства. Допълнително имаме и пръстен, където вече имаш множество и две операции върху тях. Може би звучи странно, но е една от най-интересните и шантави математики. Криптографията се основава на нея и има употреби в теория на графите.
Екипът същия като при Алгебра 1, така че нямам оплаквания. Макар че този път няма седмични задачи - ура!
Дизайн и анализ на алгоритми: също едно име, което обяснява себе си. Разглеждаме методиките за сравняване на алгоритми (асимптотика) и как да докажем тяхната коректност. Също разглеждаме доста основни и често използвани алгоритми, както и се допираме до NP сложност. Още един много важен предмет.
Тук сякаш асистентите преподават по-добре и нивото е по-изравнено. Записките пак са много добри, както при Дискретни структури, даже може би по-добри. Обаче смятам, че на доста моменти навлиза твърде много в математиката и теорията, и има същите проблеми с оценяването както по ДСТР. Цели 15 човека минаха от първия път, така че нивото е горе-долу същото.
Изследване на операциите: решава оптимизационни задачи, тоест задачи при които искаш минимум или максимум, като за всяка променлива имаш някакво ограничение (на английски се казва Linear Programming, но няма нищо общо с програмиране). Една оптимизационна задача е примерно ако имаме фабрики за автомобили, всяка произвеждаща различно количество коли и складове в други градове, с различни капацитети, и имаме цената на пътя между градовете и складовете, как най-евтно ще пренесем всички автомобили в складовете. Има употреба ако се опитваш да решиш такъв тип задачи, но ми се струва от по-безполезните неща за един програмист.
Още от началото бяха качени всички материали за курса, така че не съм ходил на упражнения, но съм чувал че има какво да се желае повече от тях. Лекторът е готин. Минаването е лесно, нещата не са супер трудни.
Компютърни мрежи: пак име, което само се обяснява. Абсолютно всичко свързано с интернет и мрежите, от протоколи до методи за маршрутизация. Като КАРХ не е от най-полезните за ежедневието, но е много важен фундамент.
Този лектор също го харесвам и задачите за упражнения са супер готини. Както и по други предмети, лектора не иска да ни прецаква, затова минаването не е проблем. Даже бих казал, че е твърде лесно.
Операционни системи: може би най-важният не-математически предмет, ако беше направен свестно. Имам много силно мнение за него, като цяло предмета се свежда до 70% менижиране на процеси, 20% менижиране на памет и 10% случайни неща. Имаше потенциалът да е от най-добрите предмети в целия бакалавър, ама програмата и изпитването беше наистина зле направено.
И това, за сега, е първият и единствен предмет за който мисля така.
Има ли смисъл от следване във фми? ДА!
#Какво виждаш, има хубави неща във ФМИ, но има и някои които не са толкова добри. Общото ми впечатление е, че за математика имат най-силни хора, обаче някои от тях са твърде взискателни. По програмистките неща, или изискванията са твърде ограничаващи, или са толкова ниски, че минаваш с минимални умения. Не бих казал, че се учат стари неща, които не са актуални, но за най-новите технологии трябва да се обърнеш към избираеми.
Обучението е далеч от перфектно, обаче каквото и да си говорим, обучението никъде не е перфектно. Бих казал, че качеството на курсове също може да бъде много по-ниско. Това е много голяма тема, обаче въпреки че не учим най-новите и използваемите неща, основите с които излизаш ти позволяват да научиш новите технологии значително по-бързо и в значително по-голяма дълбочина. Колкото и да не се харесва, математиката е в основата на всички кътчета от компютрите. Разбира се, има пре-достатъчно работа, която не изисква и елементарно събиране да знаеш, но ако се стремиш нагоре, математиката е нужна.
Ама, преподаването не е единствената причина защо бих препоръчал ФМИ:
- Колегите, които влизат са много готини и ако се постараеш ще се запознаеш с много добри приятели
- Студентстването като изживяване е веднъж в живота, все пак характерът става по-издържлив когато те скъсат по няколко изпита, за които си учил много.
- Каквото и да си говорим, ФМИ е доста авторитетно учебно заведение, макар и диплома за един програмист да не е задължителна, със сигурност ще помогне значително.
И даже бих аргументирал, че е по-добре да следваш една година във ФМИ и да се откажеш, отколкото да следваш 4 години и да завършиш в който и да е друг университет!
-
Признавам, за тази информация използвах това мнение от форум, никой не обсъжда ИС. ↩
-
Тази статистика е взета директно от таблици с оценки на редовни студенти на първи курс по Дискретни структури и втори курс по Дизайн и Анализ на Алгоритми. Тези таблици са правени от лектора по списъци от СУСИ (онлайн системата за студенти). Ще спомена по-късно, но дългите факултетни номера, в които има и букви, са на студентите, влезли през 2021, докато кратките пет-цифрени са на студенти от минали години, които повтарят. ↩
-
Макар че това не е много добра причина за смяна на изпитването, понеже схемата с два такива изпита (единия стандартен и другия с малко задачи, но с пълни решения) си е държала още от времето на комунизма. Моето предположение за тази промяна, е че новата система е влошила качеството на обучение твърде много и искат минималните оценки за влизане се повишават обратно към околността на 6ца, но това вече са мои си конспирации. ↩
-
Такива статистики много не се намират публично и линковете не са сложени на достъпно място, но успях да изровя директните линкове към разпределението по зали за първа изпитна сесия по Математика II, първата изпитна сесия по Математика I и втората изпитна сесия по Математика II през 2021 година (ако някой от тях спре да работи, архивирани са на archive.org). До всяка зала пише колко човека са разпределени за там, така че общата бройка е една проста сума. Най-много хора са се явили на първата сесися по Математика II: 593, на Математика I са 514 и на втората сесия по Математика II са 568. ↩
-
Този документ вече е лесно достъпен в сайта на СУ. Също говоря за нормалните места по държавна субсидия: без платено обучение и българи, живеещи в чужбина. ↩
-
Доколкото съм чувал, тази схема е била валидна до към 2014, поне за специалности като компютърни науки и софтуерно инженерство. Сякаш малко след това баловете на всичко започват яко да падат, ама такива статистики вече хептен ги няма публично. Единствената така информация имат кандидат-студенти, и то за своята година в която влизат, и не се познавам с достатъчно хора, за да разпитвам. ↩
-
Както за 2021, пак трябваше да се ровя, но намерих разпределението по зали за единствената изпитна сесия по Математика през 2022 (също архивирано в archive.org). ↩
-
Както за 2021, пак имаше ровене, но намерих разпределението по зали за първата изпитна сесия по Математика и втората изпитна сесия по математика (както винаги, налични в archive.org). На първата са се явили 979 и 875 на втората. ↩
-
Разговорно на поправителната сесия им викаме септември, макар и само един-два дена от нея да са в този месец. Причината е, че просто до преди няколко години наистина е била през септември, но са я изместили назад. Защо са я изместили, не знам. ↩
-
Формално няма дефиниция на множество, понеже става малко бездънно: какво е множество, еми колекция от елементи, какво е колекция от елементи, еми съвкупност от елементи, какво е съвкупност, еми множество от елементи. Формално казваме, че множество е първично понятие, тоест че няма дефиниция и се надяваме, че читателя схваща за какво се говори. ↩
-
В интерес на истината, това със сигурност е вярно само когато приемаме аксиомата за избора, ако не я приемем, тогава доооста неща стават супер неинтуитивни и изглеждат грешни, обаче чисто формално и математически са верни. ↩