Как най-добре студентите с предишен опит да пишем правилно домашните за начинаещи?


7

Здравейте,

 

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

1. “Отбий номер” - пишем си задачата за минимално време, използвайки каквото знаем, взимаме си точките и продължаваме напред. Проблемът е, че не усъвършенстваме нито нашите, нито чуждите знания/умения.

2. “Гле’й с’а аз к’во мо’а” - пишем си задачата, за да се изфукаме колко много разбираме, барем някой ни забележи, запомни и евентуално потупа по рамото. Проблем като при първата част. И по-сериозен проблем - ако направим грешка, оставяме широка възможност някой да я повтори, защото начинаещите обикновено са несигурни за знанията си, а нашият код би изглеждал “по-умен”.

3. “Нека ви покажем добри практики” - пишем си задачата със знанията, изучавани до момента (и да кажем следващата лекция), но показвайки и обяснявайки кое, какво и защо. Проблемът е, че вероятно идваме с опит в друга среда за програмиране, а не C#/.NET. Примерно аз идвам със знания и опит в програмирането на C, но добрата практика в C да декларираме променливите в началото на функцията / метода / програмата, е лоша практика при C#, където е прието променливите да бъдат декларирани възможно най-късно, точно преди да бъдат използвани.

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

Стигна се и до момента, в който задавам въпроса си:

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

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

 

Поздрави,

Светослав




Отговори



2

Здравей,

Ще ти напиша моето мнение, без да претендирам, че е най-правилното :)

Вариант 1: Сам си си го казал - не помагаш на никого по този начин. Материала в първата част е прекалено лесен, така че щом имаш предишни знания едва ли ще ти отнеме повече време да напишеш нещо "по-качествено".

Вариант 2: Освен причините, които ти си изброил, съществува и вариант проверяващият да не разбере какво точно си написал и да ти нацъка нещо лошо (това колкото е шега, толкова е и истина защото съм виждал коментари, че кодът не бил добре написан). Ако все пак избереш този вариант слагай коментари с обяснения.

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

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

Ако пък и това е фасулска работа за теб - просто започвай следващите курсове. Със сигурност ще ти е от полза.

Успех!


от LSvilenov (1750 точки)


0
Благодаря за подробния и бърз отговор! Във връзка с (1) - под "по-качествено" си говорим за неща от сорта на валидация на входа, проверка за грешки, т.н. Все неща, които не са задължителни, дори при изпитите не трябва да се правят (за да не се губи време най-малкото), но от моя гледна точка е навик, който един програмист е добре да започне да практикува от ден първи (или поне веднага, след като разбере условните конструкции). Инак ще изчакам още няколко коментари, преди да предам домашно, пък и на работа утре имаме release, и можеш да предположиш каква лудница ми е на главата. Добре, че clean build-овете отнемат по 15-тина минути, та да имам време да поглеждам форума :D


0
Лично аз се заигравах с някои от задачи просто защото ми беше интересно :) Но все пак нямах предишен опит. Друг е въпросът, че с течение на времето някои от нещата, които бях използвал, се оказаха не дотам добра практика (например goto) :))

от LSvilenov (1750 точки)


2
Ако ти е скучно, спокойно може да решаваш задачи от минали изпити в bgcoder.
А за домашните вариант (3) мисля, че е най-добър.

от Anastasoff (465 точки)


1
Здрасти,
За домашните има едно единствено правило: да изпълняват условието на задачата.
Вече дали ще направиш по-простичък вариант или ще вкараш по-сложна логика, ти си решаваш. Никой няма да ти се сърди ако вкараш и двата вида решения и да кажем на по-сложния сложиш коментари да обясниш какво се случва.
Трейнърите няма да седнат да ти проверяват домашното в никакъв случай. (Имало е подобни запитвания и отговорът винаги е "не") Хората си имат други задължения и не могат да отделят времето си да разглеждат решенията на 500 човека, които са присъствено, камо ли и на онлайн участниците, доколкото разбрах този прием са около 1000.
В секцията архив на сайта на академията можеш имаш достъп до лекциите и задачите към тях от предишните курсове(препоръчвам ти тези от пролетния прием, зощото към тях има и workshop-и). Можеш да си подготвиш идните домашните предварително и когато дойде време за предаване, ги изпращаш.
Ако искаш да изкараш добър резултат на изпита, това даже си е почти задължително.
Поздрави

от BoyanTodorov (853 точки)


1
Привет, Светльо,
И аз съм в същото положение като теб и смятам да предприема следната тактика: Ще си пиша домашните на базата на преподадения до този момент материал + материала в съответната глава в книгата + малко отгоре. Например ако не сложа проверка ще ми избоде очите, но за неща като рекурсия например е рано да се говори в първите лекции. Затова казвам "малко" отгоре, за да може хем кодът да бъде разбран от начинаещ, хем да добие качествен вид и да бъде полезен за проверяващия (ако е начинаещ).

от BaklavaBg (209 точки)


0
Според мен рекурсията трябва да ти е краен вариант, ако с друго не става :)


0
Освен ако не си в света на функционалното програмиране. Там в общи линии (при простата "опашата" рекурсия) нямаш забавяне или нарастване на използваната памет, понеже повечето езици изискват изпълнимата среда да прави всеки път tail-call optimization. Рекурсията е един много полезен инструмент в такива ситуации, особено когато иде реч за паралелно изпълнение. Но иначе си прав - всеки рекурсивен алгоритъм може да бъде написан итеративно. И за да предотвратя въпроса "Нас какво ни интересува функционалното програмиране?" - JavaScript също има TCO; LLVM също. А, и между другото - скоро имаше активност от страна на Microsoft за LLVM. Може да решат да попроменят малко техния runtime...




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

от georgi.ivanov (3261 точки)


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


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

от georgi.ivanov (3261 точки)



1
Здравейте колеги, ще изпозлвам тази тема понеже въпроса има връзка с нея. А той е понеже и аз спадам към хората с предишен опит в програмирането, пиша домашните с една идея малко по-сложни. Като под сложни имам предвид използвам променливи, цикли и if-else конструкции. За да компенсирам добавям коментари за да е по-лесно разбираемо за начинаещите. Та въпраса ми е следния: Мислите ли че тази (12 от първото домашно) задача съм напрвил достатъчно разбираема или може още нещо да се добави ? Ето линк към нея: https://github.com/emilVenkov12/CSharpProjects/tree/master/CSharpPartOneFall2013/01.Introduction-to-Programming-Homework/12.PrintEnteredAgeAfterTenYears

от emil.venkov12 (1553 точки)


0
Моето скромно мнение е че си се олял лекичко :) Първо - името на метода или на неймспейса трябва да е описателно... ок, но ако тръгна да правя програма за ТРЗ и ЛС примерно, как ли трябва да ми се казва неймспейса? ProgramForMonthlySalaryCalculationAndEmployeeManipulatiоn може би? Много е информативно, но е ... неудобно. Прекалено е. Представи си че трябва да извикам някаква константа от тоя меймспейс и по някаква причина не желая да ползвам using. Ако някой програмист работещ след теб по кода попадне в кода на нещо от типа на ProgramForMonthlySalaryCalculationAndEmployeeManipulatiоn. PrefixForCurrencyPrintedAtBottomOfTableForMontlySalary ... просто ще си тегли ножа. По същия начин става и с коментарите. Коментари се поставят там, където правиш нещо, което не е очевидно, ноещо което изисква допълнително пояснение. Ти имаш коментари с линкове, които препращат към глави от някаква литература. Ако някой не знае какво е променлива, как ще оцени домашното ти? Все пак това е домашно, а не образователна лекция.
int age = 0; // This is a variable for age Това също е ... overloading... Претоварваш работещия с кода ти с прекалено много данни, без да му даваш никаква нова информация. Ако в променливата age държеше примерно ... работните часове - би било разбираемо, но противоречащо на основни принципи в програмирането. А ако в age пазиш възрастта - това си е ясно, няма смисъл от допълнително обяснения.

от JulianG (5316 точки)

0
За коментара за age променливата съм съгласен, прекалено е, явно по инерция съм добавил коментара. За другите неща: 1. За дългите и описателни имена, няма константна бройка на символите в един индентификатор, всеки си ги поставя по свое успотрение, пък какво те притеснва дължината нали има intellisence няма да пишеш цялото на ръка. Според мен е по важно да се разбере точното преднзанчение на применливата/класа/констатнта от колкото да се спести малко повече писане. 2. За линковете в коментарите: Че не е образователна лекция не е, но всека пак хубаво да има от къде да се прочете директно без да се губи допълнително време за търсене. За това че има неизучавани неща: Както и госпидин Наков спомена на лекцията това че не учено не значи че не мога да го ползвам, и колкото по рано се запознае човек новите неща толково по-добре, на мен ми е по-лесно с тях да работя, това е целта на коментарите. :)

от emil.venkov12 (1553 точки)



1
Светослав, домашните, които пишеш, са си за теб, а не за проверяващите ги. В курса по C# -1, ако имаш по една проверка на домашно накрая и това ще е много. Целта на домашното е човек да седне и наистина да научи това, което му е преподадено на лекцията, защото без писане няма как да стане. Ако ти е прекалено лесно, спокойно можеш да си вървиш напред по материала, всички презентации с домашните ги има в архива. След това можеш да решаваш задачи от BG Coder. Имай предвид, че задачите на изпита са по-трудни и комплексни от тези за домашно, така че изискват упражнения. Ако и това ти е супер скучно и лесно, можеш да преминеш към задачите от C# - 2 и т.н.

от desislavaiv (292 точки)


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



0
WorkShop-ите са точно това това, ако съм те разбрал правилно. Там студентите, от предишният прием, водят занятия за начинаещите. Това разбира се е на доброволни начала и се подбират студенти с високи резултати. Става нещо подобно на системата в килийните училища. Също има случаи, в които завършили студенти организират курсове по програмиране в родните си градове (За Пловдив съм сигурен че има, но не си спомням кои бяха и другите градове).

от BoyanTodorov (853 точки)


0
Нито един от 3те.
Искаш да ми кажеш, че ако знам MVC i CodeFirst въпреки това да взема да пиша на classic asp с директни sql заявки само, защото XXX% програмисти не знаят по-доброто. Тоест по-добрия програмист да пише по-лош код заради другите докато виждаш ли те се научели ?!?!?! Нещо не ми се връзва тази логика.
Ако има задача ( Poker не помня от коя част на C# е 1 или 2 ) дето е по-лесно, по-правилно и по-бързо да се реши с dictionary значи да не го правя, защото още не е учено и някой няма да разбере какво съм написал ( ще реши, че се правя на голямата работа с'я к'во мо'а ). Това че нещо не e учено още не значи, че не е по-добрата практика от текущите знания.

от saykor (8845 точки)


0
Виждам, че си бил Freelancer, което предполага, че си бил сам. Не знам, дали си работил в екип и колко време. Ако си работил в средна или голяма софтуерна компания, в огромен екип с всевъзможни хора - от студенти, дето не знаят какво е променлива, през code-monkeys, през канибали, дето братовчед им е бил шеф, през архитекти и т.н., до нинджи, дето оправят драйвери в ядрото на системата - ще разбереш. Полезено умение е да можеш да принизяваш нивото си до средното. Нека ти навържа логиката с прост пример. Работя в средноголяма компания. Тук имаме наши си "стандартни" библиотеки. Не са най-добре написаните, не са толкова "стандартни", някои дори не са толкова наши дори. Появява се колега с 20 години опит в сферата - ние правим мрежови устройства, то прави и продава негови си, с негова операционна система (подпачнато BSD, но на достатъчно много места, за да се нарече такава). Взехме го в нашия екип, където правим flagship продукта на компанията. Пичът в един хубав момент почна да пише един такъв "гениален" код, дето работи 3 пъти по-бързо и е 2 пъти по-кратък, но го разбираха значително по-малко хора. Има проекти и проекти. Мисълта ми е - ако отидеш във фирма, където работят с Classic ASP и директни SQL заявки - да, по-добре пиши и ти така, поне отначалото. Имай предвид, че ценностите на програмиста и тези на компанията, за която работи, често се различават. За повечето компании, качеството не е по-важно от time-to-market да кажем, компанията не може да си позволи да има "незаменими" кадри, които ако напуснат, ще забавят значително процеса на разработка и т.н. Та... прочети един учебник по Икономикс (предполагам това ти звучи като пълна глупост), ще разбереш за какво ти говоря. Инак да - супер изнервящо е, когато не можеш да използваш даден похват, защото някой друг не би го разбрал. Не би трябвало да е така. Ама и майката на Бамби не трябваше да умира... Поздрави ;)


0
Работил съм в компании с екипи и хора. В момента съм freelancer по мой избор. Нищо от това дето каза няма връзка със нещата тук. Вашия гениален програмист е много добре дошъл за ваща фирма. Хората който имат нещо в главата си ще се учат от него и кода му и няма да го дърпат на зад, защото не го разбират. "ако отидеш във фирма, където работят с Classic ASP" ми няма да отида. Просто като фасул. Така както фирмата има право да си избира хората така и те имат право да си избират фирмата. Нали ще питам първо с какви технологии се работи. Нямам намерение да се връщам 13 години на зад когато съм писал Classic ASP. Незаменими хора няма. Да напишеш код с dictionary въпреки, че другите не го знаят не те прави незаменим. За разлика от майката на Бамби аз още имам възможност за избор. Предпочитам да използвам похват дето другите не го разбират и да им го обясня ( стига да е по-добър разбира се ) от колкото да назадвам. Така и те ще напредват. Програмиста не може да си позволи лукса да стои на едно място в знанията си.

от saykor (8845 точки)