Относно курса

  1. Един въпрос относно курса - защо не давате тестовете с които тествате домашните от самото начало?

    Или очаквате, че човек който тепърва се запознава с езика, ще е достатъчно "начетен" сам да си напише тестове (на същия този език, с който се запознава) и да покрие всички специфични случаи за езика (с който се запознава) ?

    Като толкова държите всеки сам да си пише и тестове, това може да е като отделно домашно от курса, което изисква да се напише тест за нещо, което вие ще имплементирате (с известни грешки тук таме) и да видите кои тестове кои грещи ще хванат?

    Едит: Също така защо предаването на домашни не става с комит ид от гит репо. Така всеки ще може да си направи колкото файла са му нужни, да си тества всеки модул по отделно, и като цяло за по-големите домашни няма да се налага да се ориентира във файл с над 200+ реда код (последното е незначително, но все пак).

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

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

    За тестовете, никой никога никъде не ти дава всички тестови случай. Дори в живота винаги може да възникне ситуация, която твой тест не е покрил. Но съм напълно съгласен, че 3-5 теста за всяка задача е задължително да има да кажем от 20.

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

    За програмата на курса, съм напълно съгласен с теб, че трябва да има. Според мен няма нищо лошо, дори да има няколко workshop-a в който да пишем код заедно с преподавателите. Аз лично, се уча най-много като чета код, а за golang да има добро community, но случва ми се дълго да търся решение на някой проблем, който срещам с домашното.

  3. Ами ето ги моите предположения за причини на взимане на решенията, които поставяш под съмнение:

    Тестове от началото:

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

    Защо не се използва git:

    • Просто са решили да не се изисква git за домашните - ако искаш винаги можеш да си пазиш нещата в репо и в отделни файлове и ако трябва да ги конкатенираш с някакъв tool - като цяло обаче домашните не са толкова големи - 200 реда файл не е толкова голям размер - проблем би било ако е поне 500-1000 и нагоре, но не ни дават толкова големи домашни.
    • Ясно е че git != github, но често хората, които използващи git обичат да имат и remote repo в github, което би било неприемливо, понеже безплантите github репота са публични.
    • Иначе все пак си прав, че тази опция звучи интересна, но ще изисква действие от тяхна страна за да работи - също така за различните езици може да има нужда от модификация на начина, по който ще се зареждат многото файлове.
    • В такива ситуации обикновено ако направиш pull request към evans с реализирани от теб промените, които предлагаш има по-голям шанс да се приемат.
    • За проектите не помня дали го бяха сложили като изискване (нещо не виждам тема с изисквания за проекти), но обикновено искат всички проекти да са в някакво репо и да им дадем линк към github примерно.

    Програма:

    • Определено наличието на програма е нещо, което е малко странно че липсва, но от друга страна гледайки причините поради, които се иска липсата и може и да е добро нещо за курса.
    • Все пак като сме го записали се очаква да ходим на лекциите, а не просто да идваме на това, което ни се струва интересно.
    • Понякога може да се случи при неща подобни на философите всъщност те просто да нямат материал за лекция и да правят демо, за което често обаче ни питат какво искаме да ни покажат - тоест като цяло програмата може доста да варира.
    • Ако някоя лекция не ни хареса - ще се оплачем накрая. Иначе и ако в междучасието се оплачеш има шанс да променят нещо.
    • Може би като идея иначе ако трябва да застана на твоя страна бих могъл да добавя предложение за някакъв вид online stream-ване на лекциите ако човек няма желание да пътува до фми, но все пак иска да види лекцията. Това би било удобно за студентите и от гледна точка на това, че ще може да види как върви демото и да се откаже след като види, че не е добро, понеже просто зад "Go concurrency demo - философи" не става ясно дали ще ти хареса или не.

    Очевидно все пак би било най-добре и някой от преподавателския екип да сподели своето мнение по тези въпроси.

  4. Като цяло съм съгласен с Йончо и Илия, но за да има "официален" отговор, ще се изкажа и аз.

    За всяка задача се стремим да дадем малко примерни тестове и да поощряваме с точки писането на допълнителни тестове от вас и споделянето им с останалите. Илия доста добре е обяснил причините за това. Вече ще се стараем навреме да пускаме и нашите тестове и решение, след като срока за предаване на задачата е изтекъл. В повечето случаи не тестваме "специфични случаи на езика", а специфични неща според условието на задачата.

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

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

    • не всички хора знаят git още на първата задача
    • не може да задължим хората да имат private git repos, защото в много случаи струват пари
    • интеграцията evans да може сигурно да прочете нещо от най-разнообразни private repos в различни системи е доста сложна

    Коденето "на живо" е спорна тема - едни хора го харесват, други не им допада. Лично за мен някаква форма на колективно мислене и последователно подобряване на решението на даден прост проблем е доста ефективна форма на обучение, но не всички са съгласни. При всички положения, всяка такава "лекция" има риска да не се получи много добре, поради ред проблеми. Моля да ни извините, ако чувствате, че сме ви загубили времето на някоя от тези лекции. В бъдеще, опитайте се да повдигнете подобни притеснения по време на самата лекция - смея да твърдя, че сме относително гъвкави и слушаме вашето мнение :)

    Относно програма на курса: почти невъзможно е да направим програма месеци или седмици по-рано и да се придържаме към нея на 100%. Всеки от нас си има достатъчно лични и служебни ангажименти, които често са по-важни от доброволческото водене на курс във ФМИ и които не можем да планираме седмици напред. Още преди началото направихме доста подробен план какво и в какъв ред ще преподаваме, но това не означава, че дата по дата знаем каква лекция ще водим.

    Записването на лекциите и/или stream-ването им е нещо доста хубаво, но е свързано с огромни допълнителни усилия, за които просто нямаме време.

  5. Освен това, което е казано вече има една много важна причина, поради която не ви даваме всички тестове преди домашното. Много е лесно да се нагоди нещо, което ще ги мине всичките, но няма да бъде адекватно на практика.

    Да, ясно е, че преглеждаме всяко едно предадено домашно, но нали. Освен това защо да ви даваме edge case-овете, вместо да ви оставим да ги намерите сами? :)

Трябва да сте влезли в системата, за да може да отговаряте на теми.