Loading...
Pe6o601 avatar Pe6o601 61 Точки

Впечатление от изпита по КПК (5/17/2015)

Искам да отбележа, че това е първата ми тема, която пускам във форума.

Искам да попитам кой освен автора на изпита се е опитал да го реши?

Много ми е интересно как може изпитите от предните курсове да се решават за 3 часа, а текущия "изпит" да не стигнат 6 за самото рефакториране. 

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

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

Да не говорим че ако се напишат нужните тестове за задачата judje няма да я приеме заради голям размер на архива.

 

П.С. Хора, успокойте се малко с това че искате да покажете, че знаете повече от нас. Не е това идеята а да ни научите.

 

 

Тагове:
45
C# OOP Advanced 17/05/2015 19:18:29
Filkolev avatar Filkolev 4482 Точки
Best Answer

Изразявам мнението си като студент в СофтУни. Ще опитам да съм по-сдържан в оценките си за изпита, но не знам доколко ще ми се получи. Мнението ми накратко - трудността не беше на правилното ниво.

Да започна цялостно по курса. Голяма грешка е да има паралено протичащи предмети. Ние духаме, защото от следващите випуски КПК ще е самостоятелен курс. Така и трябва. Няма как да вземем насеризно домашните и екипните задания по КПК, след като постоянно имахме други спешни неща - то не бяха убийствените домашни по ООП, изпит, Advanced JS, JS Applications с изпит 2 дена преди защитите по КПК. Не става и няма да става. Паралелен може и трябва да бъде единствено и само TWPS.

Курса съм го взел напълно насериозно. Учил съм в течение на цялото ниво, за да схвана нещата. Нека не излизаме с редовното извинение "никой не го взима насериозно тоя курс и затова са такива резултатите". Днес имаше много сериозни хора, които за 6 часа едва скалъпиха нещо цялостно.

ОК е 5-6 човека от 200 примерно да изкарат всички тестове от джъджа, но от такова количество хора никой да не докара нещата до край - не е нормално. Чисто статистически от 200 човека на изпит поне 5 ще са на ниво да могат да преподават КПК, 15-20 би трябвало да са достатъчно добри да хванат поне всички тестове без някой зачукан bottleneck.А не масовата оценка да е 10/16. И един с 14 (евала на тоя Пешо).

Относно bottlenecks - правилно ли е да се дават такива в колекции, които не познаваме? Хубаво, намерих един тъп цикъл, който беше излишен. Но мога ли да гадая коя колекция е с по-добър performance. Речник ли да ползвам или MultiDictionary, или да ги затрия всичките? Има ли изобщо проблем там или ако ги променя ще се прострелям в крака? Може или да се каже в началото на изпита "това работи, просто го преименувайте и вижте дали се ползва правилно от другите класове", или ни вкарайте в лекциите по-сериозно частта за бързодействие и оптимизация и да си знаем къде може да търсим такива проблеми. Тепърва ли да чета в нета кое е по-бързо от друго? Че аз нямах време кода да си изчета докрай. Кой знае какви глупости има, останали недопреименовани и недорефакторирани. Туловете за измерване на бързодействието съм ги ползвал с доста променлив успех, да си призная нямах време дори да си помисля да го пусна днес.

Не е ли малко излишно вече да ни се дават умишлено over-the-top изпити? Какво учим с това? Достатъчно неща имаше да се рефакторират. Още поне 2 часа работа имах, за да докарам нещата до нещо, от което не би ме било срам. Не е ли по-добре да ни се спестят някои неща като сигнатури на методи разцепени на цяла страница с нови редове? Това ли ще тестваме с тоя изпит, кой е най-умен да си напише скрит да му зачисти простотиите? Или умение да подредиш и рефакторираш някакъв код? Умение да бачакаш като стрела ли учим, или умение да направиш нещата качествено? Дава ни се нещо в пъти по-сложно от екипните проекти, дава ни се да го правим сами и за 6 часа; ще има хейт в тая тема и колкото и да го уважавам Данчо, не мога да не се съглася с останалите мнения. Защото на мен (човек, който напълно насериозно взе тоя курс) ми беше изключително труден тоя изпит. Да, искам да ме предизвикват, но нека това да е част от подготовката, а не от най-важните теми да нямаме домашни и като отида на изпит да изляза с кафяво по гащите. Като ще се дава труден изпит и подготовката нека да е на ниво. Не беше.

Нека не забравяме, че когато има слаби резултати, това са две страни на една монета - 1) студентите не са научили, 2) преподавателите не са ни научили. И в случая има и 3) не се изпитваме по правилния начин.

Аз съм доволен от себе си. Направих много. И още много не успях да направя, а исках. Около половин час преди края нямах написан нито един юнит тест, скалъпих някакви, колкото да има coverage. Документирах интерфейса, описах единя ботълнек, StyleCop каза 0. Класовете са ми относително добре подредени и горе-долу са спазени някакви принципи. Мокинга си остана мираж (разбрах, че някакви хора все пак са го правили, евала).  Направих dependency injection-a. Даже си мисля, че е изключително добро това, което постигнах сега като се замислям. Cosidering.

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

В заключение - аз си взех поуки от изпита днес, дано не съм единственият.

38
quickben avatar quickben 966 Точки

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

Аз искам да питам: Как се очаква да направя нормални unit testove след като, както е организирана задачата това може да стане само с Mocking?

Хубаво е сложено като бонус, но след като неможеш да напишеш нормални unit testove без да се налага да го ползваш, това говори, че задачата не е написана като хората.

Да не говорим, че на "лектора" му отне 5 дни да реши една задача от миналите изпити, и защо пак се дават по-трудни задачи от миналите курсове, при положение, че програмата е едно към едно?

7
17/05/2015 18:57:16
quickben avatar quickben 966 Точки

Да и сега на оценката ще пише: Колега unit testove не се правят така и ще им покажа на подготовката какви малоумни unit testove се дават като пример, мен ми е ясно, че трябва да тестваш "зачукани" сценарии, но самата задача без мокинг трудно могат да се направят нормални тестове.

4
SStoyanov22 avatar SStoyanov22 39 Точки

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

 

9
VenelinGrozev avatar VenelinGrozev 130 Точки

Някой би ли ми обяснил защо джъджа хвърля следната грешка:

Unhandled Exception: System.NullReferenceException: Object reference not set to an instance of an object.
   at VehicleParkSystem.Engine.Run()
   at VehicleParkSystem.VehicleParkMain.Main()

Първият ми събмит беше около 2 часа преди края и оттогава до края съм се мъчил да разбера какво точно се случва. После след изпита едно момче ми каза, че го е решил като сложил на try... catch (Exception e) {} на Main метода (с празен catch). Сега го пробвах и наистина така проработи и изкарах някакви точки.

Очевидно се подават някакви null обекти и затова гърми но не разбирам каква е логиката зад това. Как се вързва това с КПК?


И още нещо на което се надявам авторът на задача да ми отговори - каква е логиката в интерфейса IVehiclePark да има следните методи:

        string InsertCar(Car car, int sectorNumber, int placeInSector, DateTime reservation);
        string InsertMotorbike(Motorbike motobike, int sectorNumber, int placeInSector, DateTime reservation);
        string InsertTruck(Truck truck, int sectorNumber, int placeInSector, DateTime reservation);

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

6
17/05/2015 19:38:37
AleksandurSeferinkin avatar AleksandurSeferinkin 333 Точки

Но се съмнявам да е било казано, че не можеш да създадеш нов интерфейс. :)

-4
VenelinGrozev avatar VenelinGrozev 130 Точки

Е колко интерфейса да напиша и има ли смисъл да се прави предвид условието?

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

0
17/05/2015 20:02:55
AleksandurSeferinkin avatar AleksandurSeferinkin 333 Точки

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

По-добре един файл повече, отколкото да ползваш някакво подобие на интерфейс.

Наистина е по-добре да имаш само 1 метод, който приема като параметър не определен клас, а интерфейс от тип IVehicle.

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

2
RosenKrumov avatar RosenKrumov 203 Точки

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

 

ПС: Препоръчвам да се показват последните два теста винаги с лимит време и лимит памет, а не с грешен отговор, за да знаем все пак кога сме открили и поправили ботълнека.

2
17/05/2015 19:57:43
Pe6o601 avatar Pe6o601 61 Точки

Брат то хубаво, че тематиката е добре ама и индиец не може да наc*ре кода толкова :)

При индийците поне се компилира 

5
17/05/2015 19:27:43
RosenKrumov avatar RosenKrumov 203 Точки

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

1
17/05/2015 19:30:34
d3vildog avatar d3vildog 58 Точки

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

0
stefoto avatar stefoto 51 Точки

Съгласен съм с мненията на колегите по-горе. Смея да кажа, че материалът не ми е толкова сложен, както е JS (Apps + Framework). След 4 часа рефакториране си казах, че или аз съм глупав или изпитът е значително по-труден от предните. И все пак аз съм на мнение, че ние студентите в СофтУни се борим не за оценки, а за знания и за това да се реализираме в ИТ сферата. Това е по-важното и се радвам, че все пак причината да не ми стигне времето не са опасенията за липса на достатъчно умствен капацитет. Дано все пак и да изкарам и повече от 3.00, че на поправка хич не ми се ходи. :D Успех на всички!

6
Plami avatar Plami 373 Точки

Да и за мен изпита си беше гаден - просто това разхвърляне на кода в различни файлове и тези съкращения направо убиха рибата :D Може би подготовката трябваше да е едно ниво по-нагоре. 

И малко неделно да ви разведря:

https://www.youtube.com/watch?v=9LhLjpsstPY

 

4
17/05/2015 19:45:59
micro3x avatar micro3x 135 Точки

Подкрепям Пешо.

Според мен изпита беше пресилен за даденото време.

Мисля, че ако бях почнал да решавам задачата от нулата и си я бях написал сам. Щеше да ми остане време да я UnitTestna цялата и да изпълня поне 70%-80% от условията.

3
StrahilRuychev avatar StrahilRuychev 117 Точки

За десет часат мисля, че щях да успея да изпълня 7 от осемте условия на изпита. За 6 часа - рефакториране / раформатиране, коментари и 10 точки от джъджа. Толкоз :)

Бих искал да предизвикам Данчо, като автор, на следващия курс да реши тази задача в рамките на подготовката за изпит. Ако се справи с всички условия за 6 часа има една каса бира (каквато си поиска) от мен. Без майтап.

Но ако не се справи, ще си чакам касата и аз :)

 

2
Pavel_R avatar Pavel_R 57 Точки

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

1. Много е важно задачите да бъдат целенасочени - тоест като изпита е по КПК нека задачите да са свързани с рефакториране, тестване, дебъгване, писане на добре структуриран и лесно разширим код, прилагане на патърни, и т.н. Днешните задачи бяха 90% реформатиране, реформатиране != рефакториране.

2. Judge системата. Плюсовете и са очевидни - получаваме в реално време фиидбек за това което сме направили, минусите пък са, че един грешен символ и труда ни отива в кошчето. Взимайки това предвид само за мен ли е очевидно, че изходните данни на изпитите, които се провеждат в Judge-a трябва да са максимално прости. Кому е нужно изхода който се изисква от нас да е украсен с безброй звездички, колибки, тиренца, вълнички и не знам си какво още. Това ли целта на изпита? Да провери дали студентите могат да ползват Console.WriteLine и да търсят кое тиренце им липсва в 100-редовия изход?

3. Нулевите тестове. Извинявам се на автора на зачите, нищо лично, но това си е чисто отбиване на номера. Малко е иронично, че такива "тестове" се дават на курс по КПК. Не мисля, че е нормално в един единствен тест да има 50 реда входни данни и още 150 изходни. Просто разделете 3-те нулеви теста на 20 по-малки. Какво означа за мен като ми гръмне тест с входни данни, в които присъстват всички възможни команди в условето? Че някъде си из цялото ми решение има грешка и някъде си из 150-те реда изходни данни ми липсва някое тире? Това е все едно аз да ви напиша unit test с 50 assert-вания. Какво ще кажете за такъв тест? Дали е полезен и коректен?

4. Проблемите със събмитването в Judge-a. Да бях само аз щях да си помисля, че съм някой идиот и не знам какво да правя, но не бях само аз. Имаше страшно много колеги, които не можеха да си събмитнат решенията, някой успяха да се преборят с Judge-a в рамките на 10-15 мин други като мен и 1:30 мин не им стигна.

5. За капак на всичко след като се опитах да си събмитна целия solution, системата Ви ми даде грешка, че файла ми е прекалено голям. Някой ще каже, че съм събмитнал заедно с пакиджи, но това не беше така. Зип-а който изпратих беше с големина 52КБ, въпреки това Judge-а с ограничение 15МБ по някаква си причина реши да не го приеме. 

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

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

23
Filkolev avatar Filkolev 4482 Точки

Аз бих допълнил, за този изпит, защо да не виждаме резултатите от тестовете? В реална среда като ти дадат софтуер с тест кейсове, може да си видиш къде бъркаш. Достатъчно сме борили джъджа в цялото ниво 0 и 1, мисля, че не е този изпит мястото да хитруваме с минаващи нулеви тестове и неминаващи състезателни. Защо пък да няма направени някакви готови юнит тестове, които да ползваме за да не стане refucktoring? И после да си допълним тук-таме с пропуснати гранични случаи.

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

10
simeon.georgiev avatar simeon.georgiev 62 Точки
Аз съм абсолютно съгласен, освен, че задачата не отговаряше на даденото време и нивото, тя реално не е толкова ценна откъм рефакториране. Ако беше, дори и трудна, щях да съм доволен. Но тази мазня не виждам какво ни научи откъм качествен код.
2
mar0der avatar mar0der 191 Точки

реформатиране != рефакториране.

4
mar0der avatar mar0der 191 Точки

Да дам и аз мойте 2 цента. Макар, че се изказах тук таме и на живо и в коментари искам да призова пишештия задачата за поправката следните неща:

1. Както каза колегата по - горе реформатиране != рефакториране тестването на скоростно форматиране на текст е подходящо за курс по информатика в средното училище. Както каза Фил сигнатура на  1 странца е ..... тъпо. 

2. Като ползвате "чужди" езици моля проверявайте внимателно дали транслациите могат да се извадят правилно в Гугъл транслейт. Моля не ползвайте не-латински азбуки защото да се опитваш да првевеждаш от Урду "шльокавица" е меко казано несериозно. Днес "бразилския" май беше по - приемлив.

3. Моля, като сътворите подобни шедьоври пробвайте някой от колегите си да я реши за 6 часа. Аз мисля, че в нашето ниво има доста кадърни и старателни хора (изключвам се от тази бройка) и след като те не успяха да завършат задачата значи е редно да се замислиш дали не си прекалил, а не да казваш "не се оплаквайте".

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

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

8
17/05/2015 22:23:28
ibakyrdjiev avatar ibakyrdjiev 172 Точки

Не мисля че е хейт просто ми писна да ми тестват задчи на главата от хора коитоси вдигат самочувствието като гледат кой ще даде по тегава задача. Аз също пиша здачи за долното ниво НО СПРЯМО МАТЕРИАЛА И ЗНАНИЯТА И НЕ СЪМ СЪМ СИ ПОЗВОЛЯВАЛ ДА СЕ ГАВРЯ С ТЯХ!  Не ми пука че фейлнах а ми пука че семестъра е пари а ние го плащаме. Не може за ПОРЕДЕН път да се дава изпит за чистка. Не може и да има различни критерии за оценяване! Не може и на определени хора да се помага по време на изпит, а на останалите не! Не може да не се обновява материала и да се давават непосилни задачи!  И как може в тъпия интерфейс да се работи с класове?! Омг

2
17/05/2015 22:54:43
Filkolev avatar Filkolev 4482 Точки

Само да вметна по твоята точка 4, че след всичките бъгове дето оправих си останах с 8 точки (точно толкова, колкото и на първия ми събмит). След края на лекцията стигнах до заключението, че всичко идва от факта, че съм пропуснал да видя условието за сортирането, когато се вадят колите за даден собтвеник. Е, направих го и стигнах заветните... 10 точки.

Бива зачукани тестове, но това е в повече. По едно време реших, че Math.Round е проблемен (трябва да му се зададе да закръгля AwayFromZero, за да не закръгля до най-близкото цяло четно число както е по подразбиране). После се чудих дали не е от парсването на датите, но не разбрах от MSDN как това би довело до проблем и никъде не успях да го репликирам. Написах си в Notepad++ серия от входове, възможно най-много гранични случаи, и никъде не успях да засека бъг. 

Да обърна внимание, че поне за един колега знам, който днес е бил на изпита, който работи като QA, от добрите студенти е, и има 2 точки. Човек, който си изкарва хляба с намиране на бъгове, не успя да ги оправи всичките... Може да предложим на RoYaL да го даде това на студентите от предстоящия QA курс. Nuff said.

3
mar0der avatar mar0der 191 Точки

Фил може ли да напишеш с кои точно тестове изкарваш 10 точки защото аз сортиране не съм пипал и имам 10 точки. 

Това значи:

1. или си изкарал 10 точки с друг тест, което значи че ако си обединиме знанията дружно може да стигнеме Pesho 

2. Или аз съм оправил сортирането без да разбера (силно съмнително)

3. Или сам си вкарал бъга със сортировката при рефакторирането

0
17/05/2015 22:49:24
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.