Спустя год: "а какого вы не можете ничего сделать до сих пор, вы же уже решали похожую проблему, большая часть алгоритмов та же". И команда так вяленько: "ну выж понимаете, оно там не совместимо..." и прочая невнятная дичь.
Но вспоминают когда стоимость разработки новой фичи, вырастает экспоненциально в цене. и что в долгосрочной перспективе выгодней писать чистый код(это обойдется дешевле)
Писать не говнокод невозможно. В процессе эволюции любого проекта. Если писать не говнокод - нужен архитектор, планирование и пару месяцев разработки архитектуры. И самое главное... Перед началом написания - нужно точно определится с полным функционалом проекта. В этом месте те кто работал с заказчиками - сейчас улыбнутся сильно-сильно.
Если весь функционал уже определен перед началом разработки, то плевать будет говно или конфетка, но так не бывает, функционал полностью определен только на кладбоне. Да и то фантазеры найдут какие фичи добавить.
Работаю с React Native, когда пришёл в новую компанию, сразу посадили на проект, который уже писался на реакте и нужно было сделать то же самое только на мобилки. Ну веб часть приложения была написана уже на процентов 60-70% поэтому от меня требовалось только адаптировать всё это под RN. И как-то обсуждал проект с тем, кто писал веб часть, так он сказал, что изначальной идеей приложения было создание целей и их трекинг. А потом, спустя какое-то время, заказчики захотели добавить в приложение чат, видеозвонки и ещё какой-то функционал))))
@@КекРодионов после некст-ген патча*, но это ты, конечно же, не уточнишь, тебе же засрать нужно компанию. Ну хорошо, а что твой любимый юбисофт сделал? Фар Край? После 3 части пошёл конвейер, исключением только являлся Primal. Tom Clancy's? Кроме радуги сейчас хоть что-то интересно фанам? Может быть, они в дивизию с кайфом играют? Watch_Dogs? О нём так-то никто и не вспоминает, а вторую часть считают бенчмарком процов и не более. AC? Единственное, что у них хорошо вышло, это Вальгалла. В этом году должен выйти Mirage, который как бы Odyssey, но как бы Mirage) Но пиплы этот конвейер схавают, как и всегда)
Либо ты пишешь говнокод сразу и потом чуть-чуть улучшаешь, либо ты долго-долго планируешь, а потом за неделю/ночь до дедлайна фигачишь лютый говнокод забыв про планирование из-за сроков. В итоге 2 варианта говнокода, но в первом нервы целее. Но мы же умные, мы идём по второму пути, ведь на этот раз сроки посчитаем правильно
@@Morrado В компаниях тоже каждый твой час учитывают). 8 часов в день, 5 дней в неделю). Раздели количество часов на зп и получишь свою стоимость в час. На фрилансе ещё нужно работу на этот час найти, а так же ценники мизерные ибо с тобой конкурирует школота). На старте очень плохо во фрилансе, может лет через 5 когда обрастёшь клиентами и будет хорошо. С другой стороны за 5 лет в компаниях ты тоже не на месте стоишь, а растёшь в опыте и зарплате.
Пишу код для бизнеса, но за защекоины стараюсь написать его лучше и лишний раз разобратся в жирной платформе По итогу бизнес чуть больше доволен (или чуть менее недоволен), а я чуть больше поднял свой скилл, и в будущем проще писать более чистый код за такое же время
@@nomatter2546 от части да :) но когда ты хорошо разобрался в одной платформе, в другой уже проще + более глубже будешь видеть их отличие и лучше понимать принятые архитектурные решения Хотя откуда мне знать, я еще и с первой не разобрался ¯\_(ツ)_/¯
@@leeroyjenkins6286 проще, глубже, лучше... Кому это надо? Никто не оценит, никто не оплатит. Делай мальчик что сказали, вот тебе 3 копейки чтобы с голоду не умер. Не сделаешь ты - сделает другой, их за забором очередь желающих. И поцелуй мою блестящую задницу, ты же помнишь про очередь.
@@nomatter2546 знаю прозвучит пафосно и банально, ноооо разве можно получить большее не пожертвовав чего то взамен? Если ебашить дни напролет разбираясь в каждом аспекте своей работы, стать гуру получиться гораздо быстрее, быстрее чем устареет платформа, быстрее чем если тратить на работу положенные 8ч за 3 копейки Выбор наверно зависит от амбиций и возможностей
если не хочешь брать бабки за поддержку - конечно пиши понятный код который 5 летние дети разберут. А если хочешь как нормальные люди за поддержку еще бабки брать - юзай a b c переменные функции и другие приемы шифрования кода)
@@serhiis_ шанс(в небольшом городе ) , что именно к тебе придут за поддержкой приложения, настолько мизерный, что с большей вероятностью бог существует. Маленьким заведения не нужна поддержка. Да и вообще я тоо комменте как шутку написал
@@walkfromwalkstreet скорее наоборот в маленьком городе за поддержкой пойдут к тебе. В большом к тебе врятли обратятся из-за миллионов девелоперов кругом. Когда жил в провинции и умел ставить винду я считай церем был, потому что только 1 контора за бешенные деньги делала диагностику.
Как правило, начнёшь задумываться глубоко о задумываеваемой глубокой архитектуре, забываешь мысленную нить того, что хотел сделать. Чаще всего просто пишешь код как в голову приходит, а потом смотришь на это всё и сразу видишь как лучше его структурировать.
Приходит сын к отцу и спрашивает, что делать, подруга беременная. - Тут, сынок, у тебя два пути: жениться или в армию уйти. Если женишься, считай, что пропало, если в армию, то у тебя два путя будет: живой останешься или убьют; если живой останешься, считай, что пропало, если убьють, то у тебя два путя будет: похоронят под осинкой или под березкой; если под березкой, считай, что пропало, если под осинкой, то у тебя два пути будет: либо на карандаши, либо на бумагу; если на карандаши, считай, что пропало, если на бумагу, у тебя два путя: или на писчую, или на туалетную; если на писчую, считай, что пропало, если на туалетную, у тебя два путя будет: либо в мужской туалет, либо в женский; если в мужской - считай пропало, если в женский, у тебя два путя будет: или спереди тебя использують, или сзаду; если сзади, считай пропало, если спереди, считай что женился.
Есть тут те кто понимает мою боль? Вы представляете как сложно перфекционисту быть программистом, все доходит ло того, что я каждый пробел и отступ в коде оформляю красиво. Это про внешний вид. Есть еще про красоту самого кода, я могу за 5 сек сделать тяр ляп, но нет суа буду день сидеть и думать как все сделать красиво и эффективно
Это от того, что твой код прошедший сертификационное тестирование на 12 тысяч тестов никогда не выбрасывали на помойку, так как сделана ставка на код купленный на рынке за 11 миллиардов долларов, который через 3 года также выбросят на помойку.
За годы практики приходит понимание того, что на начальной стадии все хотят сделать круто, а потом все скатывается в гавнокод, причём не важно это маленькая вебстудия или крупная компания, говнят везде, любой легаси гавно, а любое хорошее начало тоже станет гавном, этакий защеканский сёркл оф лайф, и обычно гавнокод видят новые челны команды, топят за рефакторинг, но клиенту нужно фичей подвезти, какие нахуй техдолги, и все на этом, цикл продолжился
Это нормально. А рефактроить можно бесконечно. После этой команды появится новая команда "говнокодеров" и скажут, что надо все по новой. А за ней еще и еще... и так нескончаемо. А васе с его пиццерией это зачем? Что бы что? Ему нужно, что бы работало... остальное это тараканы разработчиков не имеющие никакого отношения к его бизнесу. Да и вообще, "хороший код" придумали сами разработчики, а не бизнес.
@@soversus5374 Конечно его придумали разработчики. Они, в отличие от бизнеса, что-то таки понимают в разработке. А бизнесу действительно часто нужно лишь бы как и побыстрее.
Десять с копейками лет работаю, навидался самого разного и понял одну прикольную штуку. Ты волен писать говнокод в компании где говнокод допустим, равно как ты волен писать суперидеальный отпидореный до блеска код по такой же вывереной архитектуре, снова таки в компании где это подразумевается. Много лет провеслав на самых разнообразных галерах, выбрал лично для себя компанию где требуется идеально чистый, расширяемый, документированный код. Регламент работ просто как устав в армии. Компания берёт ДОХУЯ денег за работу, на таски меньше чем по два-три часа просто не закладывается, имеет вообще нифига не бедных клиентов(с магазинами вроде продать одним заказом 4 башенных крана или 12кг золота) и платит очень хорошую ЗП за хороший код. IT индустрия она очень большая и неоднородная, клиентов хватит всем на любые притязания.
Работал как-то с индусом. В итоге: близится релиз. В задаче индуса я нашёл 5 багов, 4 из них были серьёзными. Чтобы внести небольшое изменение в реакт-компонент, мне нужно было его переписать
А я просто расскажу историю из жизни (своей). Работал в небольшом стартапе, где было по одному программисту на проект. Причем, были как сильные ребята, так и откровенно слабые. И заметно это было по коду, очень и очень хорошо... Почему слабых не увольняли? Потому что проект был маленький, овнер занимался всем сам - кадрами, рекламой, инвестициями и в том числе - программистами, и человеком он был - максиммально гуманитарным... Плюс, самый слабый человек, так уж получилось, был и самым первым пришедшим на стартап программистом... Что бы вы понимали масштабы маразма - он как-то убедил овнера, что код его проекта, должен быть закрыт от всех других программистов и доступ к репозитарию был только у него одного, такие дела... Как я узнал, что там говнокод? Просто. Мне в какой-то момент, потребовалась интеграция\API от его кода, на просьбу предоставить API, был дан ответ, что он слишком занят и куча исходников, вырванных из его репо, которые мне удалось как-то собрать во что-то работающее и выполняющее нужную мне задачу, ух и насмотрелся я там ужасов... Короче говоря, в какой-то момент, у стартапа (ожидаемо) начались проблемы с бабками и инвесторами, начался аудит, всех программистов попросили предоставить список своих тасков на пол года вперед, плюс, начались душные вопросы, типа "А вот если без Васи, ты смог бы его код поддерживать?" и так далее... По итогам получилось так, что люди писавшие хороший код, имели весьма скромные таск-листы и их код, поддерживать мог кто угодно... Говнокодеры же, имели список багов на 5 лет вперед и ни кто не хотел браться за их код... Как не сложно догадаться, люди писавшие хороший код, вскоре получили расчет, бизнес сделал очень "правильный" вывод, что вполне себе справится и без них... Не скажу, что сильно жалею о случившемся, старался и будуу стараться писать хороший код, хотя бы ради чистой совести, но история очень поучительная, по моему.
Маркс выделял 4 вида отчуждения: от процесса труда | от продукта труда | от других людей | от человеческого в себе В чем же заключается отчуждение труда? Во-первых, в том, что труд является для рабочего чем-то внешним, не принадлежащим к его сущности; в том, что он в своем труде не утверждает себя, а отрицает, чувствует себя не счастливым, а несчастным, не развивает свободно свою физическую и духовную энергию, а изнуряет свою физическую природу и разрушает свои духовные силы. Поэтому рабочий только вне труда чувствует себя самим собой, а в процессе труда он чувствует себя оторванным от самого себя. У себя он тогда, когда он не работает; а когда он работает, он уже не у себя. В силу этого труд его не добровольный, а вынужденный; это - принудительный труд. Это не удовлетворение потребности в труде, а только средство для удовлетворения всяких других потребностей, но не потребности в труде. Отчужденность труда ясно сказывается в том, что, как только прекращается физическое или иное принуждение к труду, от труда бегут, как от чумы. Внешний труд, труд, в процессе которого человек себя отчуждает, есть принесение себя в жертву, самоистязание. И, наконец, внешний характер труда проявляется для рабочего в том, что этот труд принадлежит не ему, а другому, и сам он в процессе труда принадлежит не себе, а другому. Подобно тому как в религии самодеятельность человеческой фантазии, человеческого мозга и человеческого сердца воздействует на индивидуума независимо от него самого, то есть в качестве какой-то чужой деятельности, божественной или дьявольской, так и деятельность рабочего не есть его самодеятельность. Она принадлежит другому, она есть утрата рабочим самого себя. В результате получается такое положение, что человек (рабочий) чувствует себя свободно действующим только при выполнении своих животных функций - при еде, питье, в половом акте, в лучшем случае еще расположась у себя в жилище, украшая себя и т. д., - а в своих человеческих функциях он чувствует себя только лишь животным. То, что присуще животному, становится уделом человека, а человеческое превращается в то, что присуще животному. Правда, еда, питье, половой акт и т. д. тоже суть подлинно человеческие функции. Но в абстракции, отрывающей их от круга прочей человеческой деятельности и превращающей их в последние и единственные конечные цели, они носят животный характер. - К. Маркс. Экономико-философские рукописи 1844 года
Я: в свободное от работы время пишу свой игровой движок. На каком я этапе сейчас: в 100500-й раз переписываю общую библиотеку классов и не перестаю надеяться, что когда-нибудь она станет настолько совершенной, что её больше не надо будет переписывать и можно будет двигаться дальше. Вот сейчас, когда я это пишу, я уже знаю, какие участки кода нужно переписать снова...))
Вот полностью согласен, в 90% случаев моим заказчикам нужно было готовое решение для конкретной задачи на небольшой срок, ну например какой-то телеграм бот для трейдинга, или небольшая панелька администрирования какойнибудь деятельности, никому не нужен в данном случае идеальный код, который потом нужно будет долго поддерживать, нужно просто решить задачу и заработать денег, ВСЁ. А все эти идеальные коды хороши, если тебе совсем уж делать нехрен и у тебя бесконечно времени.
Начнём с того, что на С-подобных языках писать не говнокод невозможно. А правило такое - программирование должно быть адекватно задаче. И только вчера объяснял сыну - хороший программист решает чуть более общую задачу, чем поставленная.
@@RiotGeneralDirector потому что располагает. Отсутствие типизации, объявлений, оператора присвоения, неявные преобразования (в том числе использование разных сранений), сокращённые конструкции и т.п. - всё это может быть и приводит к упрощению написания кода, но совершенно точно приводит к усложнению его понимания даже самим автором и, главное, снижению дисциплины программирования.
@@fostergrand4497 а что вы понимаете под "отсутвием типизации"? Она вроде как раз имеется в большинстве с-подобных языках(java, c++ и д.р). Да и оператор присвоения там имеется...
@@RiotGeneralDirector я имел в виду С-подобные в широком смысле. По идее и типизация в С довольно условная. Операции/команды (не помню точно, как назвать то, что есть, например, в паскале, за давностью лет) присвоения в С нет. Наделение оператора "равно" смыслом присвоения странная идея С. Хуже только наличие результата у операции присвоения. В результате язык имеет кучу плохих практик, которые надо избегать, хотя в языке они встроены в синтаксис. Java, возможно, определённый компромисс между С и более строгими языками.
"Самая большая ложь, в которую верят многие разработчики, - что грязный код поможет им быстро выйти на рынок, но в действительности он затормо-зит их движение в долгосрочной перспективе Разработчики, уверовавшие в эту ложь, проявляют самонадеянность Зайца, полагая, что в будущем смо-гут перейти от создания беспорядка к наведению порядка, но они допускают простую ошибку Дело в том, что создание беспорядка всегда оказывается медленнее, чем неуклонное соблюдение чистоты, независимо от выбранного масштаба времени." Роберт Мартин "Чистая архитектура"
По поводу написания Unit-тестов, и подобного тестирования логирования. Если не ясно, надо их добавлять, или нет, всегда есть принцип YAGNI (You aren't gonna need it). И в данном случае, ты как хирург должен спросить у человек, что ему нужно, предложив перечень вариантов. Иначе нельзя просто сказать "чувак короче, я тебя лечил, чтобы коленку поправить. Но также решил удалить тебе апендикс, почку, и одно лёгкое. Тебе эффективнее, ведь за почкой ты и так не следил, а лёгкое у тебя прокуренное. Я хотя-бы продать успею, пока ты не помер"
Если писать юнит-тесты только с согласия заказчика, то придётся фактически обучать заказчика науке их использования. Иначе он не сможет принять решение, вообще не зная, что это. Как правило в таком случае решение принимается по принципу "я не знаю, что это, следовательно не нужно." И так с любым "логированием", "обработкой ошибок", "архитектурой". И вот проходит полгода. Заказчик говорит, что "программа стала ИНОГДА терять заказы, не слать письма, задваивать плтежи и прочая". Но логирования нет, ошибок нет, тестов нет: узнать, в чём причина невозможно. И вот главный вопрос: кто будет виноват? Заказчик когда-нибудь возьмёт на себя вину за то, что не приказал делать логирование? Да никогда в жизни! Решения, приводящие к авариям примет он, а виноват будешь ты, программист. Ты должен был сделать говнокод, который идеально работает, а сделал говокод, который реально как говно работает. А потом его переписывают, делают таким же, так же быстро, а потом просто выбрасывают.
Я как бэ стараюсь в первую очередь писать читабельный код и малость расширяемый, короче говоря пытаюсь найти серёдочку, но опять же это в своих проектах, хотя изучая SOLID и Стратегию стараюсь всё же по ним код писать чтобы можно было потом и дополнить. В реал компашках я хз, так как опыта пока в этом нету (
Один пример в защиту автора видео. Мой отец в 90-е делал "говнокод" в строительной отрасли, образно говоря, когда ничего не было и время играло определяющую роль. Т е. кто первым занял рынок, тот и молодец. В итоге, его " говнокод " в строительном бизнесе переписал уже я, а те деньги, которые он заработал, позволили мне ни в чём не нуждаться. Мораль такова - если бы он сразу делал, как надо, то не занял бы место на рынке, и мне от этого было бы только сложнее....
Буквально пару недель назад передал заказчику работу наполовину с говнокодом (клиент сам виноват, зажопился с оценкой). И вот меня мучала совесть что я в целях экономии конкретно наговнакодил. И после просмотра вашего видео - совесть наконец-то отпустила =)
8:46 Сукаааааааааа, почему мне такие read me никогда прошлые программисты не оставляли, а то пока перечитаешь что они настрочили ты машинально вяжешь себе висельную петлю от скуки.
Жесть какая, вы никогда не скажете заказчику, что будете писать говнокод, потому что он сразу уйдёт от вас к другому говнокодеру, который об этом промолчит. Причём здесь тесты? Отсутствие тестов не есть говнокод. Отсутствие доки тоже. Хороший код самодокументирован. То есть его легко читать, он прост и очевиден. А вот когда код невозможно расширять, поддерживать, когда отсутствует понимание базовых алгоритмов, когда комментируют очевидные вещи, а неочевидные - нет, когда дублирование на каждом шагу, когда один класс ответственен за всю логику приложения, когда наследуется все, что нужно и не нужно - вот это и называется говнокод. И это плохо. Нужно стараться так код не писать. А то, что вы описываете, называется POC, а не говнокод. И его нужно тоже писать хорошо стараться, чтобы потом не переписывать все с нуля, а просто кастомизировать прототип. Пока вы этого не понимаете, вы так и будете писать говнокод, оправдывая свою неспособность писать хороший код отсутствием времени, денег и так далее...
Насчёт юнит-тестов полностью поддерживаю. Но тесты - это не код, и их отсутствие не превращает хороший код в говнокод. Хороший код - это как раз декомпозиция, нейминг, отсутствие дублирования больших кусков кода и т.п. И получается, что писать надо сразу хорошо (по крайней мере, стараться).
@Andrey Kharchenko экономить на спичках никто не призывает, к тому же в любом нормальном проекте есть минификаторы. Есть понятие сложности концепций и подходов. Самая большая яма - бегство за мегауниверсальностью
Ещё один плюс говнокода: Случай из жизни: поддерживал сайт с приложением одной некрупной компании. Создавал их я, и таким образом, что никто не мог его понять, но по функционалу отвечала по всем критериям (как БП fsp, например (не с чем больше сравнить, извините 😃)). Компании оставалось либо создавать новое приложение с сайтом, либо дальше сотрудничать со мной (что значительно дешевле). И таким образом у меня был капающий доход в течении полугода.
Пол года... хех)) . Я однажды так наговнокодил, что 2 с половиной года сидел на проекте, выкинуть не могли =) . Даже когда узнали, что я работаю от чужого имени))
кек. Пол года. У меня тут проектик есть, для одной госконторы, в который меня позвали потому что это "прикольно и интересно" около 10 лет назад. На данный момент я единственный, кто вообще может хоть сколь-нибудь внятно объяснить что вообще там происходит. Проектик на жабе и только код, без либов весит 27Мб. Последние лет 5 его поддерживаю и развиваю только я, и когда съебывали теряя кал все остальные, я думал, что бутылка уже зашла в жопу целиком, но это было только узкое горлышко, сейчас пошло расширение. Это при том, что к моменту моего прихода уже было тьма кода с корбой и частями на плюсах, ни одного теста не было от слова совсем, а проект лежал частично в цвс, частично в свн. Сейчас у меня есть гит, континиус интегрейшен, юнит тесты, интеграционные тесты, свои хитровыебаные "фреймворки", нет никакой корбы, только жаба с рми, новый код более-менее чистый(хотя даже прошлогодний код такое ощущение, что писал какой-то уебан и наркоман), но все равно бутылка входит все глубже и некоторые вещи, которые как бы логичны и правильны, сделать практически невозможно(за защекоины я работать не готов). В итоге дупло расширяется, мои запросы тоже, пока контора платит достаточно, чтобы я терпел, но недостаточно, чтобы найти еще десяток таких же дурачков, которые поведутся на "интересно и прикольно" и съебаться теряя кал. В теории нужно уже сегодня съебать теряя кал, но меня останавливает моя лень(засел в зоне комфорта), "ответственность за тех, кого приручили", нежелание "работатать как все" и прочие детские болезни.
ЛЯЯ ВОТ ЭТО КОПНУЛ. Вопросов стало еще больше. Итак ЖДУ новых видосиков))) 1)- ЮНИТ ТЕСТЫ_ чито это как это и где это? не короткий ролик на 4 минуты с вырезкой из вики, а какой нибудь наглядный пример как написался юнит тесты и что именно этот юнит тест проверяет - чтоб наглядно было понятно как их писать и что они должны делать и сколько их нужно . 2) ДЕКОМПОЗИЦИЯ- как же правильно делить на части? в каких случаях и т.д. ? Например пилю сам в одну морду игру для ПЕКА, и чтоб еще и на андроидах работала и еще и в браузере - допустим чтоб такая универсальность была пилю её на джава скрипте и по сути в андроид пропихнется лысый браузуер в котором будет все так же работать джава скрипт. Ну или какие то другие варианты - Так вот - как понять на какие части разбивать все это дело если ты сам пилишь ? где можно сократить и один модуль сделать, а где стоит разбить поподробней ибо это ускорит в целом быстроту выполнения кода. Если команда уже из 5 человек что дополнительно можно "декомпозировать" , а если из 10 или с 50ти? В общем тоже не короткий ролик минут на 20-30 хотя бы)
Да. Часто это означает, что тебе задают в 10 раз меньше одних и тех же вопросов. Без документирования день программиста на работе может превратиться в день сурка. И этот день будет длиться месяцами или даже годами.
Зачастую руководствуюсь принципом «сначала сделать а потом сделать хорошо». Из того, что ты забыл сказать в видео - пользуйтесь (микро)фреймервками, они сразу дадут и модульность и структуру и гайдлайны и возможность поддержки 3ми лицами, что защищает интересы Васи. Хотя есть конечно подход написать самый страшный говнокод, который только ты можешь поддерживать так что у Васи не будет выбора, но я против такого пакостничества
Идея правильная, но как и любая идея, для своей области применимости: т.е. для субъективно тривиальных задач. Для чего-то сложного проще держать код в близком к идеальному состоянии, иначе есть риск так закопаться в ручном дебаге, что времени уйдет ещё больше. Это касается, лично для меня, например, реализации каких-нибудь стейт машин, не блокирующей многопоточности (без теста вообще невозможно выяснить, есть ли ошибки) и частей приложения, где ошибки недопустимы, т.к. приводят к потере данных или неконсистентному состоянию. Как компромисс, можно выносить такой критичный код в отдельные классы и делать их хорошо.
И ты не понимаешь видимо в целом, что такое говнокод. Отсутствие юниттестов - не есть говнокод. Особенно, если группа разработчиков мала и код пишут не сильно отдельно. Говнокод - это ошибочные алгоритмы, кривое, не понятное название переменных и методов. Также отсутствие следования какому-либо стилю (единому, говнокод - как стиль, не считается). Итого, пусть время мало, а цена вопроса не большая, не обязательно говнокодить. Достаточно отказаться от части функционала или договориться о повышении цены вопроса перед разработкой, например, к концу реализации большей части проекта.
нет, это ты не понимаешь что такое говнокод. говнокод это код, поддержка которого стоит дороже, чем разработка с нуля - а стоимость поддержки складывается из многих факторов в том числе и наличия тестов (и не только юнит). то, что ты назваешь говнокодом это просто бездарная хуйня за которую бьют по шее и выгоняют до конца испытательного срока, а потом бьют по шее того, кто такого "кодера" нанял.
А ещё бывает 2 колеки работают вместо целого отдела и + на техподдержке, причем такой что времени программировать нет, а надо. Как это в нашей конторе.
Важно еще потратить некоторое время на автоматический деплой, чтобы засылать хотфиксики, которых будет немало, сразу в прод. Ну и метрички на графички по быстрому стоит положить, чтобы после деплоя можно было увидеть стало ошибок больше или меньше без привлечения кого-бы-там-ни-было.
я думаю тут не только кодонацисты виноваты, есть такой тип людей которые четко определили что они делать хотят , а чем они заниматься не хотят, если смотреть со стороны оказания услуг, разработчик предлагает свои услуги и он вправе определять какого качества услуги предоставляет. в данном случае я считаю мошенничеством если разработчик умалчивает о том , что существует иные разработчики которые делают без юниттестов и их услуги будут дешевле. Но если разработчик предупреждает клиента почему нужно делать их и сообщает что есть и другие программисты которого этого не делают , то тут никакого мошенничества нет.
мошенничество появляется только тогда, когда ты берёшь деньги за то, что не делаешь, когда ты обманываешь и прочее. Если же ты делаешь строго ту работу которая оговаривается и за те деньги за которые вы договорились это ужа капитализм добро пожаловать.
в видео имелось ввиду что с заказчиком не оговаривалось время на юнит тесты, а ты тратишь время на юниттесты. Возможно заказчик хотел это время потратить на разработку а не тестирование. К тому же есть мануальное тестирование. Заказчик сам может такое проводить ибо нанять тестировщиков которые будут клацать приложение намного дешевле чем время девелопера.
к тому же как показывает практика тестировщики намного эффективнее работают чем девелоперы. Ты вот может функции проверишь а про дизайн забыл. А тетировщики все проверяют в том числе и рандомные данные от юзера.
Я бы блокировал аккаунты таких «икспертов» за плохое влияние на и так хреновых, в большинстве своём, разрабов. Если по аналогиям, я не могу себе позволить дорогое яблоко, я возьму что нибудь подешевле, я не буду покупать гнилое и с червями, так же это работает и в сторону кода. Я с таким говном сталкивался когда-то, когда на фрилансе работал, это ужасно. В ~80% случаев потом это говно просто переписывается с нуля, потому что ни бизнес не может уже это терпеть, ни вменяемый разраб за это даже под дулом пистолета не возьмётся. Где-то дёрнешь, весь проект сыпется, где-то осыпалось и на починку по два дня уходит, а деньги то бизнес все теряет и теряет, браво автор
Что бы тебе, друг, всю жизнь пользоваться такими решениями и поддерживать такой замечательный код. Ведь ты же мастер побеждать защекоины? Мамке привет!
Я тут смотрел интересного человека, так он рассказал, что говнокод не так определяется =). Так вот говнокод, это тот код который невозможно читать (и в первую очередь такое возникает когда нарушен нейминг), а все остальное это норм. С этой точки зрения, то что ты описал и не говнокод вовсе.
@@alduin3115 Иметь не одно значение - значит не иметь ни одного значения; если же у слов нет значений, тогда утрачена всякая возможность рассуждать друг с другом, а в действительности - и с самим собой; ибо невозможно ничего мыслить, если не мыслить что-нибудь одно Аристотель.
@@detnhyiiika6759 ДА я бы и сам был рад унификации языка ,но даже в научной среде некоторые термины имеют несколько значений. А уж требовать однозначности от слэноговых слов , которых даже в словарях нет так и совсем бесполезно .
Еб-ть, история прямо ОДИН В ОДИН из моей мухосрани в 60к населения, я аж испугался. Тоже Вася, тоже пиццерия, тоже выстрелила, тоже есть мобильное приложение.
В общем, стоит писать сперва как получается, а потом переделывать "как надо" -- когда надо. 1. Сложно соблюдать DRY с самого нуля -- не знаешь как правильно абстрагироваться, надо сперва повторить несколько раз, а потом уже понять что там общего на самом деле и что вынести. 2. В статически типизированных языках тесты нужны когда надо проверить интеграцию или сложный алгоритм, юнит-тесты обычно трата времени на написание и поддержку, особенно для неустоявшегося функционала, если хотите писать много и чтоб можно было поддерживать -- берите статику, у неё больше утилит рефакторинга обычно и потом можно быстренько в IDE всё поправить за несколько хоткеев. 2. Если уже чувствуется, что фича не лезет нормально в текущую кодовую базу -- настало время "прихорашивать", это часть от того времени, что вы сэкономили раньше, но она могла и не появиться, потому вы теоретически могли сэкономить немного времени, но не в этот раз, да и всё равно пришлось бы ещё что-то менять, как минимум не проиграли. Другой вопрос, когда вас много народу и надо писать не просто много, а очень много, тогда надо уже делать нормально сразу, потому что другие будут пользоваться вашим кодом уже сейчас, возможно подправляя торчащие костыли или напарываясь на них, из-за чего будет уходить больше времени на интеграцию, ресолв конфликтов и фикс внезапных багов, лучше уже стабильно медленно, чем неожиданно обсираться -- если вас много, то и задач много, а значит у заказчика можно выяснить приоритеты и обосраться только с некритичным, например.
Как говаривал наш CEO, лучше семь раз вовремя, чем один раз правильно.
Спустя год: "а какого вы не можете ничего сделать до сих пор, вы же уже решали похожую проблему, большая часть алгоритмов та же". И команда так вяленько: "ну выж понимаете, оно там не совместимо..." и прочая невнятная дичь.
А он случаем не из CD Project Red?
@@_.tron.__1337 да они и вовремя пару раз не успели, переносили пару раз потому что не успевали ничего
@@KustFuckYeah Не думаю что это было возможно. Учитывая что дату выхода объявили на этапе: ну у нас карта мира есть, вроде
Это работает, когда все остальное готово и продумано.
Программисту заплатите чиканным защекоином
О Жук-Базука подъехал
ёнифер
щеканным
За щееееее???
Ахахахахаххаха
Иногда забывается, что код нужен не для искусства и красоты, а для бизнеса и денег.
pip пайтон
иногда забывается что твой код нужен не тебе.
Но вспоминают когда стоимость разработки новой фичи, вырастает экспоненциально в цене. и что в долгосрочной перспективе выгодней писать чистый код(это обойдется дешевле)
То же самое в ютубе, только наоборот... и вместо искусства и красоты - для подписчиков и качественный контент
@@paveldumavin5068 pep
Что проживает на дне океана? Читаемость твоего кода!
Половина через жопу, половина по документации, половина полного угара в три часа ночи
Александр Иванов программа малыш с кучей изъянов!
@@SHlNJlKARl и того у тебя полтора кода. Как? Не ясно. Зачем? Хз. Работает? Да, а значит не трогай
Писать не говнокод невозможно. В процессе эволюции любого проекта. Если писать не говнокод - нужен архитектор, планирование и пару месяцев разработки архитектуры. И самое главное... Перед началом написания - нужно точно определится с полным функционалом проекта. В этом месте те кто работал с заказчиками - сейчас улыбнутся сильно-сильно.
в точку сказано
не то что улыбнулся сильно-сильно, просто проорал в голосину
Тоже ору в голосину))))
Если весь функционал уже определен перед началом разработки, то плевать будет говно или конфетка, но так не бывает, функционал полностью определен только на кладбоне. Да и то фантазеры найдут какие фичи добавить.
Работаю с React Native, когда пришёл в новую компанию, сразу посадили на проект, который уже писался на реакте и нужно было сделать то же самое только на мобилки. Ну веб часть приложения была написана уже на процентов 60-70% поэтому от меня требовалось только адаптировать всё это под RN. И как-то обсуждал проект с тем, кто писал веб часть, так он сказал, что изначальной идеей приложения было создание целей и их трекинг. А потом, спустя какое-то время, заказчики захотели добавить в приложение чат, видеозвонки и ещё какой-то функционал))))
"Тяп-ляп - и в релиз"
Ubisoft словили флешбэки после просмотра данного ролика :)
Cd project red полагаю вообще считают говнокод good practice в любых изменениях
@@КекРодионов Проджекты, по крайней мере, фиксят говнокод патчами, чем юбики не занимаются от слова совсем. Ибо зачем, пипл хавает
@@synthexyguitar они до сих пор ведьмака фиксят)))
@@КекРодионов после некст-ген патча*, но это ты, конечно же, не уточнишь, тебе же засрать нужно компанию. Ну хорошо, а что твой любимый юбисофт сделал? Фар Край? После 3 части пошёл конвейер, исключением только являлся Primal. Tom Clancy's? Кроме радуги сейчас хоть что-то интересно фанам? Может быть, они в дивизию с кайфом играют? Watch_Dogs? О нём так-то никто и не вспоминает, а вторую часть считают бенчмарком процов и не более. AC? Единственное, что у них хорошо вышло, это Вальгалла. В этом году должен выйти Mirage, который как бы Odyssey, но как бы Mirage)
Но пиплы этот конвейер схавают, как и всегда)
@@КекРодионов К слову, юбики ни разу не получили премию GOTY)
Я вообще не шарю в программировании, просто включаю твои видосы чтобы уснуть, огромное спасибо
Жиза
Либо ты пишешь говнокод сразу и потом чуть-чуть улучшаешь, либо ты долго-долго планируешь, а потом за неделю/ночь до дедлайна фигачишь лютый говнокод забыв про планирование из-за сроков. В итоге 2 варианта говнокода, но в первом нервы целее. Но мы же умные, мы идём по второму пути, ведь на этот раз сроки посчитаем правильно
"Коллекторы сделают дупло Васи размером с Uranus"
На англосакский наша поэзия не переводится.
защекорианство - основное религиозное направление фрилансеров
Вот сейчас обидно было.
Главное - не награда, главное - процесс! )
@@CapitanSuk Процесс чего? Заглатывания?
Всегда казалось наоборот, что фрилансеры каждый рабочий час свой учитывают
@@Morrado В компаниях тоже каждый твой час учитывают). 8 часов в день, 5 дней в неделю). Раздели количество часов на зп и получишь свою стоимость в час. На фрилансе ещё нужно работу на этот час найти, а так же ценники мизерные ибо с тобой конкурирует школота). На старте очень плохо во фрилансе, может лет через 5 когда обрастёшь клиентами и будет хорошо. С другой стороны за 5 лет в компаниях ты тоже не на месте стоишь, а растёшь в опыте и зарплате.
*Нашёл этот канал случайно, не могу остановиться смотреть видосы... ля какие шедевры!*
С «защекоины» царский лайк!
Пишу код для бизнеса, но за защекоины стараюсь написать его лучше и лишний раз разобратся в жирной платформе
По итогу бизнес чуть больше доволен (или чуть менее недоволен), а я чуть больше поднял свой скилл, и в будущем проще писать более чистый код за такое же время
Астрологи объявили неделю смены фреймворка, скилл обнуляется. Новая пятилетка надрочки скилла.
@@nomatter2546 от части да :)
но когда ты хорошо разобрался в одной платформе, в другой уже проще + более глубже будешь видеть их отличие и лучше понимать принятые архитектурные решения
Хотя откуда мне знать, я еще и с первой не разобрался ¯\_(ツ)_/¯
@@leeroyjenkins6286 проще, глубже, лучше... Кому это надо? Никто не оценит, никто не оплатит.
Делай мальчик что сказали, вот тебе 3 копейки чтобы с голоду не умер. Не сделаешь ты - сделает другой, их за забором очередь желающих. И поцелуй мою блестящую задницу, ты же помнишь про очередь.
@@nomatter2546 знаю прозвучит пафосно и банально, ноооо разве можно получить большее не пожертвовав чего то взамен?
Если ебашить дни напролет разбираясь в каждом аспекте своей работы, стать гуру получиться гораздо быстрее, быстрее чем устареет платформа, быстрее чем если тратить на работу положенные 8ч за 3 копейки
Выбор наверно зависит от амбиций и возможностей
@@nomatter2546 и да, если компания не хочет развиваться, расти вертикально и ей интересна только прибыль, то просто надо искать другую компанию =)))
Обещают научить писать говнокод, в итоге учат как писать правильно (просто добавь немного конец-в-конец тестов)
Обманули! дизлайкатписка!
Ахахаха 🤣 Привет Дмитрий)
Забыл добавить, что если и пишешь говнокод, то пиши его так, что бы потом с ним не пришли к тебе. Потому что тебе лень разбираться что ты там высрал
если не хочешь брать бабки за поддержку - конечно пиши понятный код который 5 летние дети разберут. А если хочешь как нормальные люди за поддержку еще бабки брать - юзай a b c переменные функции и другие приемы шифрования кода)
@@serhiis_ шанс(в небольшом городе ) , что именно к тебе придут за поддержкой приложения, настолько мизерный, что с большей вероятностью бог существует. Маленьким заведения не нужна поддержка. Да и вообще я тоо комменте как шутку написал
@@walkfromwalkstreet скорее наоборот в маленьком городе за поддержкой пойдут к тебе. В большом к тебе врятли обратятся из-за миллионов девелоперов кругом. Когда жил в провинции и умел ставить винду я считай церем был, потому что только 1 контора за бешенные деньги делала диагностику.
в каком-то апи видел метод, который называется в роде function_180723_gl
@@MrFunny01 ладно хоть не meta_function
6:08 - графики которые мы заслуживаем )
b.it4 Говнографики для говнокода, ха)
Оси подписаны - вопросов нет
Арийcкий код!!! ЗИп файл!!! Фюрер БОБ!!! эх были временна....
чет меня от зип файла порвало, как от гранаты
От сердца к центральному процессору?
@@CapitanSuk ооо) возьму себе на вооружение)
Зип файл)))
Зип Файль!!!
Как правило, начнёшь задумываться глубоко о задумываеваемой глубокой архитектуре, забываешь мысленную нить того, что хотел сделать. Чаще всего просто пишешь код как в голову приходит, а потом смотришь на это всё и сразу видишь как лучше его структурировать.
чистейшая правда, поддерживаю!)
«Плохие программисты беспокоятся о коде. Хорошие программисты беспокоятся о структуре данных ».
Приходит сын к отцу и спрашивает, что делать, подруга беременная.
- Тут, сынок, у тебя два пути: жениться или в армию уйти. Если женишься, считай, что пропало, если в армию, то у тебя два путя будет: живой останешься или убьют;
если живой останешься, считай, что пропало, если убьють, то у тебя два путя будет: похоронят под осинкой или под березкой;
если под березкой, считай, что пропало, если под осинкой, то у тебя два пути будет: либо на карандаши, либо на бумагу;
если на карандаши, считай, что пропало, если на бумагу, у тебя два путя: или на писчую, или на туалетную;
если на писчую, считай, что пропало, если на туалетную, у тебя два путя будет: либо в мужской туалет, либо в женский;
если в мужской - считай пропало, если в женский, у тебя два путя будет: или спереди тебя использують, или сзаду;
если сзади, считай пропало, если спереди, считай что женился.
Подобными заказчикам предлагаю такой выбор: качественно, быстро, дешево, но можно выбрать только два пункта.
Есть тут те кто понимает мою боль? Вы представляете как сложно перфекционисту быть программистом, все доходит ло того, что я каждый пробел и отступ в коде оформляю красиво. Это про внешний вид. Есть еще про красоту самого кода, я могу за 5 сек сделать тяр ляп, но нет суа буду день сидеть и думать как все сделать красиво и эффективно
Это от того, что твой код прошедший сертификационное тестирование на 12 тысяч тестов никогда не выбрасывали на помойку, так как сделана ставка на код купленный на рынке за 11 миллиардов долларов, который через 3 года также выбросят на помойку.
Надеюсь за год ты узнал что такое prettier и как его готовить (установить-и-юзать)
@@dmitrypatriarkh9757 неа) я пока забросил прогание
@@linterrupt ну и правильно )))
Цена на "плохой" но работающий код как МИНИМУМ в три раза меньше чем на "хороший" код который могут понять сторонние разработчики!
Вот так взял и раскрыл все секреты работы нашей команды!
ютуб нахуй ты мне это предлагаешь? я в этом не шарю, или ты намекаешь что тебя самого так писали
Ну судя по ебанутым алгоритмам, то на тесты точно болт очень большой клали...
Жесть) я это целенаправленно искал )
@@foxbox4366 зачем ты искал "почему нужно говнокодить"
@@incursionwave он говнокодил, а затем задумался:"Зачем? Зачем я это делаю?"
судя по жутким тормозам - похоже, что да
Так вот какие видео смотрел YanderDev, когда он учился делать игры.
За годы практики приходит понимание того, что на начальной стадии все хотят сделать круто, а потом все скатывается в гавнокод, причём не важно это маленькая вебстудия или крупная компания, говнят везде, любой легаси гавно, а любое хорошее начало тоже станет гавном, этакий защеканский сёркл оф лайф, и обычно гавнокод видят новые челны команды, топят за рефакторинг, но клиенту нужно фичей подвезти, какие нахуй техдолги, и все на этом, цикл продолжился
так и живём
энтропия ебучая, неумолимая сила
Это нормально. А рефактроить можно бесконечно. После этой команды появится новая команда "говнокодеров" и скажут, что надо все по новой. А за ней еще и еще... и так нескончаемо.
А васе с его пиццерией это зачем? Что бы что? Ему нужно, что бы работало... остальное это тараканы разработчиков не имеющие никакого отношения к его бизнесу.
Да и вообще, "хороший код" придумали сами разработчики, а не бизнес.
@@soversus5374 Конечно его придумали разработчики. Они, в отличие от бизнеса, что-то таки понимают в разработке. А бизнесу действительно часто нужно лишь бы как и побыстрее.
Это относится ко всему, куда не плюнь.
Рекомендация в 5 утра. Шикарно
Чтобы сразу на роботе применить
А то, что на земле 24 часовых пояса пох, да?
@@poteha5307и все они смотрят один канал, СССР что ещё есть ?
@@poteha5307 Ваще пофиг - я ж не на всех 24 поясах нахожусь
@@СашаЗакатов-л2р в рашке 11 поясов, причем тут СССР?
Решаем виртуальные задачи абстрактными методами. А качество кода, меряется количеством строк )))
За ролик спасибо. Актуально и почти смешно.
Хороший код - простой код. Невозможность писать простой код и объяснить сложные вещи простыми словами, говорит о каше в голове.
Десять с копейками лет работаю, навидался самого разного и понял одну прикольную штуку. Ты волен писать говнокод в компании где говнокод допустим, равно как ты волен писать суперидеальный отпидореный до блеска код по такой же вывереной архитектуре, снова таки в компании где это подразумевается. Много лет провеслав на самых разнообразных галерах, выбрал лично для себя компанию где требуется идеально чистый, расширяемый, документированный код. Регламент работ просто как устав в армии. Компания берёт ДОХУЯ денег за работу, на таски меньше чем по два-три часа просто не закладывается, имеет вообще нифига не бедных клиентов(с магазинами вроде продать одним заказом 4 башенных крана или 12кг золота) и платит очень хорошую ЗП за хороший код. IT индустрия она очень большая и неоднородная, клиентов хватит всем на любые притязания.
когда поставил видос на паузу и прочитал ридмяк полностью и узнал из него что текст в описании, заодно поняв о чем он благодаря таким менюхам в футере
Работал как-то с индусом. В итоге: близится релиз. В задаче индуса я нашёл 5 багов, 4 из них были серьёзными. Чтобы внести небольшое изменение в реакт-компонент, мне нужно было его переписать
Мы в опен-сорсе такой ерундой не маемся. Нет чистого когда - нет когда вообще!
Кто сказал, что говнокод не чист? Просто он не ООП и не SOLID как впрочем и Linux.
А я просто расскажу историю из жизни (своей). Работал в небольшом стартапе, где было по одному программисту на проект. Причем, были как сильные ребята, так и откровенно слабые. И заметно это было по коду, очень и очень хорошо... Почему слабых не увольняли?
Потому что проект был маленький, овнер занимался всем сам - кадрами, рекламой, инвестициями и в том числе - программистами, и человеком он был - максиммально гуманитарным... Плюс, самый слабый человек, так уж получилось, был и самым первым пришедшим на стартап программистом...
Что бы вы понимали масштабы маразма - он как-то убедил овнера, что код его проекта, должен быть закрыт от всех других программистов и доступ к репозитарию был только у него одного, такие дела...
Как я узнал, что там говнокод? Просто. Мне в какой-то момент, потребовалась интеграция\API от его кода, на просьбу предоставить API, был дан ответ, что он слишком занят и куча исходников, вырванных из его репо, которые мне удалось как-то собрать во что-то работающее и выполняющее нужную мне задачу, ух и насмотрелся я там ужасов...
Короче говоря, в какой-то момент, у стартапа (ожидаемо) начались проблемы с бабками и инвесторами, начался аудит, всех программистов попросили предоставить список своих тасков на пол года вперед, плюс, начались душные вопросы, типа "А вот если без Васи, ты смог бы его код поддерживать?" и так далее...
По итогам получилось так, что люди писавшие хороший код, имели весьма скромные таск-листы и их код, поддерживать мог кто угодно...
Говнокодеры же, имели список багов на 5 лет вперед и ни кто не хотел браться за их код...
Как не сложно догадаться, люди писавшие хороший код, вскоре получили расчет, бизнес сделал очень "правильный" вывод, что вполне себе справится и без них...
Не скажу, что сильно жалею о случившемся, старался и будуу стараться писать хороший код, хотя бы ради чистой совести, но история очень поучительная, по моему.
То чувство когда учишься кодингу от силы часа 3 и из этого видео понимаешь, что рукожопие это в очередной раз не самый тяжкий грех в моей жизни
Часто твое рукожопие - это чей-то многолетний бизнес по поддержке кода. Спустя годы если ты вернешься, то найдешь свой говнокод за красивым Wrapper. 😉
Маркс выделял 4 вида отчуждения:
от процесса труда | от продукта труда | от других людей | от человеческого в себе
В чем же заключается отчуждение труда?
Во-первых, в том, что труд является для рабочего чем-то внешним, не принадлежащим к его сущности; в том, что он в своем труде не утверждает себя, а отрицает, чувствует себя не счастливым, а несчастным, не развивает свободно свою физическую и духовную энергию, а изнуряет свою физическую природу и разрушает свои духовные силы. Поэтому рабочий только вне труда чувствует себя самим собой, а в процессе труда он чувствует себя оторванным от самого себя. У себя он тогда, когда он не работает; а когда он работает, он уже не у себя. В силу этого труд его не добровольный, а вынужденный; это - принудительный труд. Это не удовлетворение потребности в труде, а только средство для удовлетворения всяких других потребностей, но не потребности в труде. Отчужденность труда ясно сказывается в том, что, как только прекращается физическое или иное принуждение к труду, от труда бегут, как от чумы. Внешний труд, труд, в процессе которого человек себя отчуждает, есть принесение себя в жертву, самоистязание. И, наконец, внешний характер труда проявляется для рабочего в том, что этот труд принадлежит не ему, а другому, и сам он в процессе труда принадлежит не себе, а другому. Подобно тому как в религии самодеятельность человеческой фантазии, человеческого мозга и человеческого сердца воздействует на индивидуума независимо от него самого, то есть в качестве какой-то чужой деятельности, божественной или дьявольской, так и деятельность рабочего не есть его самодеятельность. Она принадлежит другому, она есть утрата рабочим самого себя.
В результате получается такое положение, что человек (рабочий) чувствует себя свободно действующим только при выполнении своих животных функций - при еде, питье, в половом акте, в лучшем случае еще расположась у себя в жилище, украшая себя и т. д., - а в своих человеческих функциях он чувствует себя только лишь животным. То, что присуще животному, становится уделом человека, а человеческое превращается в то, что присуще животному.
Правда, еда, питье, половой акт и т. д. тоже суть подлинно человеческие функции. Но в абстракции, отрывающей их от круга прочей человеческой деятельности и превращающей их в последние и единственные конечные цели, они носят животный характер.
- К. Маркс. Экономико-философские рукописи 1844 года
Я: в свободное от работы время пишу свой игровой движок. На каком я этапе сейчас: в 100500-й раз переписываю общую библиотеку классов и не перестаю надеяться, что когда-нибудь она станет настолько совершенной, что её больше не надо будет переписывать и можно будет двигаться дальше. Вот сейчас, когда я это пишу, я уже знаю, какие участки кода нужно переписать снова...))
Простые движения туда-сюда. Главное бесплатно. Это и есть защекоины, видимо.
Вот полностью согласен, в 90% случаев моим заказчикам нужно было готовое решение для конкретной задачи на небольшой срок, ну например какой-то телеграм бот для трейдинга, или небольшая панелька администрирования какойнибудь деятельности, никому не нужен в данном случае идеальный код, который потом нужно будет долго поддерживать, нужно просто решить задачу и заработать денег, ВСЁ. А все эти идеальные коды хороши, если тебе совсем уж делать нехрен и у тебя бесконечно времени.
Начнём с того, что на С-подобных языках писать не говнокод невозможно.
А правило такое - программирование должно быть адекватно задаче. И только вчера объяснял сыну - хороший программист решает чуть более общую задачу, чем поставленная.
Наверное не вовремя, но хотелось бы узнать, почему на с-подобных языках нельзя писать не говнокод
@@RiotGeneralDirector потому что располагает. Отсутствие типизации, объявлений, оператора присвоения, неявные преобразования (в том числе использование разных сранений), сокращённые конструкции и т.п. - всё это может быть и приводит к упрощению написания кода, но совершенно точно приводит к усложнению его понимания даже самим автором и, главное, снижению дисциплины программирования.
@@fostergrand4497 а что вы понимаете под "отсутвием типизации"? Она вроде как раз имеется в большинстве с-подобных языках(java, c++ и д.р). Да и оператор присвоения там имеется...
@@RiotGeneralDirector я имел в виду С-подобные в широком смысле. По идее и типизация в С довольно условная. Операции/команды (не помню точно, как назвать то, что есть, например, в паскале, за давностью лет) присвоения в С нет. Наделение оператора "равно" смыслом присвоения странная идея С. Хуже только наличие результата у операции присвоения.
В результате язык имеет кучу плохих практик, которые надо избегать, хотя в языке они встроены в синтаксис.
Java, возможно, определённый компромисс между С и более строгими языками.
"Самая большая ложь, в которую верят многие разработчики, - что грязный код поможет им быстро выйти на рынок, но в действительности он затормо-зит их движение в долгосрочной перспективе Разработчики, уверовавшие в эту ложь, проявляют самонадеянность Зайца, полагая, что в будущем смо-гут перейти от создания беспорядка к наведению порядка, но они допускают простую ошибку Дело в том, что создание беспорядка всегда оказывается медленнее, чем неуклонное соблюдение чистоты, независимо от выбранного масштаба времени." Роберт Мартин "Чистая архитектура"
У меня и моей команды не говнокод ! Там просто перегибы на местах.
Узнал из этого видео больше, чем от лучших американских гайдов по архитектуре js.
Мне очень понравился ролик. Отдельное спасибо, что сделал акцент на правильное наименование переменных
Первые умные мысли про ооп! В принципе все так и кодят, но после вашего видео перестанут комплексовать))
По поводу написания Unit-тестов, и подобного тестирования логирования. Если не ясно, надо их добавлять, или нет, всегда есть принцип YAGNI (You aren't gonna need it). И в данном случае, ты как хирург должен спросить у человек, что ему нужно, предложив перечень вариантов. Иначе нельзя просто сказать "чувак короче, я тебя лечил, чтобы коленку поправить. Но также решил удалить тебе апендикс, почку, и одно лёгкое. Тебе эффективнее, ведь за почкой ты и так не следил, а лёгкое у тебя прокуренное. Я хотя-бы продать успею, пока ты не помер"
Если писать юнит-тесты только с согласия заказчика, то придётся фактически обучать заказчика науке их использования. Иначе он не сможет принять решение, вообще не зная, что это. Как правило в таком случае решение принимается по принципу "я не знаю, что это, следовательно не нужно." И так с любым "логированием", "обработкой ошибок", "архитектурой". И вот проходит полгода. Заказчик говорит, что "программа стала ИНОГДА терять заказы, не слать письма, задваивать плтежи и прочая". Но логирования нет, ошибок нет, тестов нет: узнать, в чём причина невозможно. И вот главный вопрос: кто будет виноват? Заказчик когда-нибудь возьмёт на себя вину за то, что не приказал делать логирование? Да никогда в жизни! Решения, приводящие к авариям примет он, а виноват будешь ты, программист. Ты должен был сделать говнокод, который идеально работает, а сделал говокод, который реально как говно работает. А потом его переписывают, делают таким же, так же быстро, а потом просто выбрасывают.
Я как бэ стараюсь в первую очередь писать читабельный код и малость расширяемый, короче говоря пытаюсь найти серёдочку, но опять же это в своих проектах, хотя изучая SOLID и Стратегию стараюсь всё же по ним код писать чтобы можно было потом и дополнить. В реал компашках я хз, так как опыта пока в этом нету (
Я единственный говнокодер в своей конторе, страшно сказать, уже 10 лет. Действую точно также.
@@ShiloXyZ А остальных за это время так и подтянул до своего уровня? ЛОЛ.
То чувство когда я тот самый упоротый чувак с лопатой в подворотне.
Осторожно! Грамотный нейминг первый шаг к рефакторингу!
Я не программист, и не понимаю, почему смотрю это, но, пожалуй, продолжу. :'D
Ты меня убедил писать плохой код, теперь я буду делать только плохой код. Вот прям сейчас сяду, и начну писать плохой код!
Нихуя не понял, но очень интересно. И зачем я это смотрю...я же половину слов даже не понял.
Я кроме, слова "Код" и что программистам, обычно платят какие-то "Защекоины", понял что надо насрать, Васе в приложение.
братаны
Мальчики я с вами
@@azalothe3150 тоже фронтенд девелопер?)
@@Minty290 ?_? Эм, а можно объяснить, кем меня сейчас обозвали? :)
Поясняющее фото с котенком и пивом - это нечто! Оригинально.
Молодцы! Озвучили то, о чем стремаются говорить "сеньоры", но имеет место быть.
Один пример в защиту автора видео. Мой отец в 90-е делал "говнокод" в строительной отрасли, образно говоря, когда ничего не было и время играло определяющую роль. Т е. кто первым занял рынок, тот и молодец. В итоге, его " говнокод " в строительном бизнесе переписал уже я, а те деньги, которые он заработал, позволили мне ни в чём не нуждаться. Мораль такова - если бы он сразу делал, как надо, то не занял бы место на рынке, и мне от этого было бы только сложнее....
Почему я смотрю это в 3 ночи? Я же даже программировать не умею!
Буквально пару недель назад передал заказчику работу наполовину с говнокодом (клиент сам виноват, зажопился с оценкой). И вот меня мучала совесть что я в целях экономии конкретно наговнакодил. И после просмотра вашего видео - совесть наконец-то отпустила =)
зачем я это смотрю я даже не знаю как код писать
Это стоит смотреть. Потому что он дело говорит
Тоже так подумал. Нихуя не понял, но оч интересно
Именно этого ролика мне не хватало в качестве защиты своего говнокода от колких замечаний чистюль. Теперь у меня есть мощная опора :)
8:46 Сукаааааааааа, почему мне такие read me никогда прошлые программисты не оставляли, а то пока перечитаешь что они настрочили ты машинально вяжешь себе висельную петлю от скуки.
Жесть какая, вы никогда не скажете заказчику, что будете писать говнокод, потому что он сразу уйдёт от вас к другому говнокодеру, который об этом промолчит. Причём здесь тесты? Отсутствие тестов не есть говнокод. Отсутствие доки тоже. Хороший код самодокументирован. То есть его легко читать, он прост и очевиден. А вот когда код невозможно расширять, поддерживать, когда отсутствует понимание базовых алгоритмов, когда комментируют очевидные вещи, а неочевидные - нет, когда дублирование на каждом шагу, когда один класс ответственен за всю логику приложения, когда наследуется все, что нужно и не нужно - вот это и называется говнокод. И это плохо. Нужно стараться так код не писать. А то, что вы описываете, называется POC, а не говнокод. И его нужно тоже писать хорошо стараться, чтобы потом не переписывать все с нуля, а просто кастомизировать прототип. Пока вы этого не понимаете, вы так и будете писать говнокод, оправдывая свою неспособность писать хороший код отсутствием времени, денег и так далее...
Хорошо быть новичком в этом всём и нихера не понимать
@AgiN. W патдэржэвайу
@AgiN. W хех по приколу отвечал искривлённо, а мне ответили)
@AgiN. W а я 3д с нуля, уже как 2-3 года, не оч пока-что получается
@AgiN. W пока что получилось только такое
th-cam.com/video/WFD43IdP5aU/w-d-xo.html
только контур квадрата в 3д
да ещё и отзеркаливается
@AgiN. W и глючит
Насчёт юнит-тестов полностью поддерживаю. Но тесты - это не код, и их отсутствие не превращает хороший код в говнокод. Хороший код - это как раз декомпозиция, нейминг, отсутствие дублирования больших кусков кода и т.п. И получается, что писать надо сразу хорошо (по крайней мере, стараться).
Чем меньше и проще код - тем он меньше говнокод. Так что сначала нужно задуматься о том чего не писать, чем о тех же юнит тестах
@Andrey Kharchenko экономить на спичках никто не призывает, к тому же в любом нормальном проекте есть минификаторы. Есть понятие сложности концепций и подходов. Самая большая яма - бегство за мегауниверсальностью
так это надо время тратить, что бы думать)
@@anton.k. "чтобы" пишется слитно))
@@Andrey-il8rh У него не хватило времени чтобы обдумать орфорграфию, а сейчас у него нет времени чтобы поменять ее
Здесь речь идет не о "гавнокоде", а скорее о "экстремальному программировании". Код то не плохой, просто MVP.
Прослушал всего минуту, однако уже в восторге!
Клиенты хотят всё и завтра, везёт тебе в твоём выдуманном мирке, обычно клиенты просят сделать всё и ВЧЕРА.
10 минут описывали подход, который давно изобретен и называется RAD.
Урезать функционал - пиздатая затея. За ранее описав список на что ему не хватает. И после обсуждения с васьком временных фиксов приложения приступить
*Ты должен пИсать, плохой кот!*
(Как-то так я прочитал название видео)
Дешевизна плохого кода это миф. Плохой код обходится бизнесу очень дорого, гораздо дороже хорошего кода. И чем сложнее система, тем дороже говнокод
Ещё один плюс говнокода:
Случай из жизни: поддерживал сайт с приложением одной некрупной компании. Создавал их я, и таким образом, что никто не мог его понять, но по функционалу отвечала по всем критериям (как БП fsp, например (не с чем больше сравнить, извините 😃)). Компании оставалось либо создавать новое приложение с сайтом, либо дальше сотрудничать со мной (что значительно дешевле). И таким образом у меня был капающий доход в течении полугода.
А что случилось дальше?
Потом?
Расскажите про черепаху, пожалуйста!
Пол года... хех)) . Я однажды так наговнокодил, что 2 с половиной года сидел на проекте, выкинуть не могли =) . Даже когда узнали, что я работаю от чужого имени))
кек. Пол года. У меня тут проектик есть, для одной госконторы, в который меня позвали потому что это "прикольно и интересно" около 10 лет назад. На данный момент я единственный, кто вообще может хоть сколь-нибудь внятно объяснить что вообще там происходит. Проектик на жабе и только код, без либов весит 27Мб. Последние лет 5 его поддерживаю и развиваю только я, и когда съебывали теряя кал все остальные, я думал, что бутылка уже зашла в жопу целиком, но это было только узкое горлышко, сейчас пошло расширение. Это при том, что к моменту моего прихода уже было тьма кода с корбой и частями на плюсах, ни одного теста не было от слова совсем, а проект лежал частично в цвс, частично в свн. Сейчас у меня есть гит, континиус интегрейшен, юнит тесты, интеграционные тесты, свои хитровыебаные "фреймворки", нет никакой корбы, только жаба с рми, новый код более-менее чистый(хотя даже прошлогодний код такое ощущение, что писал какой-то уебан и наркоман), но все равно бутылка входит все глубже и некоторые вещи, которые как бы логичны и правильны, сделать практически невозможно(за защекоины я работать не готов). В итоге дупло расширяется, мои запросы тоже, пока контора платит достаточно, чтобы я терпел, но недостаточно, чтобы найти еще десяток таких же дурачков, которые поведутся на "интересно и прикольно" и съебаться теряя кал. В теории нужно уже сегодня съебать теряя кал, но меня останавливает моя лень(засел в зоне комфорта), "ответственность за тех, кого приручили", нежелание "работатать как все" и прочие детские болезни.
ЛЯЯ ВОТ ЭТО КОПНУЛ. Вопросов стало еще больше.
Итак ЖДУ новых видосиков)))
1)- ЮНИТ ТЕСТЫ_ чито это как это и где это? не короткий ролик на 4 минуты с вырезкой из вики, а какой нибудь наглядный пример как написался юнит тесты и что именно этот юнит тест проверяет - чтоб наглядно было понятно как их писать и что они должны делать и сколько их нужно .
2) ДЕКОМПОЗИЦИЯ- как же правильно делить на части? в каких случаях и т.д. ?
Например пилю сам в одну морду игру для ПЕКА, и чтоб еще и на андроидах работала и еще и в браузере - допустим чтоб такая универсальность была пилю её на джава скрипте и по сути в андроид пропихнется лысый браузуер в котором будет все так же работать джава скрипт. Ну или какие то другие варианты - Так вот - как понять на какие части разбивать все это дело если ты сам пилишь ? где можно сократить и один модуль сделать, а где стоит разбить поподробней ибо это ускорит в целом быстроту выполнения кода. Если команда уже из 5 человек что дополнительно можно "декомпозировать" , а если из 10 или с 50ти?
В общем тоже не короткий ролик минут на 20-30 хотя бы)
ктонить хоть раз видел в глаза "документирование" в реальной жизни?
Смотри вперёд. Видишь документирование?
Нет? Вот и я нет.
Я видел, но читать большую часть было лень и некогда. Документирования не должно быть много.
Да. Часто это означает, что тебе задают в 10 раз меньше одних и тех же вопросов. Без документирования день программиста на работе может превратиться в день сурка. И этот день будет длиться месяцами или даже годами.
Зачастую руководствуюсь принципом «сначала сделать а потом сделать хорошо». Из того, что ты забыл сказать в видео - пользуйтесь (микро)фреймервками, они сразу дадут и модульность и структуру и гайдлайны и возможность поддержки 3ми лицами, что защищает интересы Васи. Хотя есть конечно подход написать самый страшный говнокод, который только ты можешь поддерживать так что у Васи не будет выбора, но я против такого пакостничества
К фреймверкам ещё опенсорсные лимбы конечно.
После сначала сделать... обычно бывает новый заказчик. На сделать хорошо потом - не хватит жизни. Если только на пенсии.
Код-код-говнокод, чУдная работа,
Я б писать нормально мог, только неохота.
Чистий код - це ітеративний процес, все-таки планувати і писати гарно треба вміти, щоб якісно на "говнокодить", то є досвід
6:05 графики, которые мы заслужили!)
Идея правильная, но как и любая идея, для своей области применимости: т.е. для субъективно тривиальных задач.
Для чего-то сложного проще держать код в близком к идеальному состоянии, иначе есть риск так закопаться в ручном дебаге, что времени уйдет ещё больше. Это касается, лично для меня, например, реализации каких-нибудь стейт машин, не блокирующей многопоточности (без теста вообще невозможно выяснить, есть ли ошибки) и частей приложения, где ошибки недопустимы, т.к. приводят к потере данных или неконсистентному состоянию.
Как компромисс, можно выносить такой критичный код в отдельные классы и делать их хорошо.
Помню ваш канал лет 5 назад когда вы делали обзоры на плохой код не очень хороших программ
А теперь говорите нужно его писать :)
работаешь на себя-говнокодь сколько влезет, работаешь с тимой-пиши как человек
И ты не понимаешь видимо в целом, что такое говнокод. Отсутствие юниттестов - не есть говнокод. Особенно, если группа разработчиков мала и код пишут не сильно отдельно. Говнокод - это ошибочные алгоритмы, кривое, не понятное название переменных и методов. Также отсутствие следования какому-либо стилю (единому, говнокод - как стиль, не считается).
Итого, пусть время мало, а цена вопроса не большая, не обязательно говнокодить. Достаточно отказаться от части функционала или договориться о повышении цены вопроса перед разработкой, например, к концу реализации большей части проекта.
нет, это ты не понимаешь что такое говнокод. говнокод это код, поддержка которого стоит дороже, чем разработка с нуля - а стоимость поддержки складывается из многих факторов в том числе и наличия тестов (и не только юнит). то, что ты назваешь говнокодом это просто бездарная хуйня за которую бьют по шее и выгоняют до конца испытательного срока, а потом бьют по шее того, кто такого "кодера" нанял.
А ещё бывает 2 колеки работают вместо целого отдела и + на техподдержке, причем такой что времени программировать нет, а надо. Как это в нашей конторе.
Когда новые выпуски c# для самых маленьких?
И тупых*
Важно еще потратить некоторое время на автоматический деплой, чтобы засылать хотфиксики, которых будет немало, сразу в прод.
Ну и метрички на графички по быстрому стоит положить, чтобы после деплоя можно было увидеть стало ошибок больше или меньше без привлечения кого-бы-там-ни-было.
Супер! Просто шикарно!
Вообще ничего в программировании не понимаю, не понял как сюда зашёл. Но видео сделано на должном уровне:)
я думаю тут не только кодонацисты виноваты, есть такой тип людей которые четко определили что они делать хотят , а чем они заниматься не хотят, если смотреть со стороны оказания услуг, разработчик предлагает свои услуги и он вправе определять какого качества услуги предоставляет.
в данном случае я считаю мошенничеством если разработчик умалчивает о том , что существует иные разработчики которые делают без юниттестов и их услуги будут дешевле. Но если разработчик предупреждает клиента почему нужно делать их и сообщает что есть и другие программисты которого этого не делают , то тут никакого мошенничества нет.
мошенничество появляется только тогда, когда ты берёшь деньги за то, что не делаешь, когда ты обманываешь и прочее. Если же ты делаешь строго ту работу которая оговаривается и за те деньги за которые вы договорились это ужа капитализм добро пожаловать.
не стоит боятся этого.
в видео имелось ввиду что с заказчиком не оговаривалось время на юнит тесты, а ты тратишь время на юниттесты. Возможно заказчик хотел это время потратить на разработку а не тестирование. К тому же есть мануальное тестирование. Заказчик сам может такое проводить ибо нанять тестировщиков которые будут клацать приложение намного дешевле чем время девелопера.
к тому же как показывает практика тестировщики намного эффективнее работают чем девелоперы. Ты вот может функции проверишь а про дизайн забыл. А тетировщики все проверяют в том числе и рандомные данные от юзера.
Я бы блокировал аккаунты таких «икспертов» за плохое влияние на и так хреновых, в большинстве своём, разрабов. Если по аналогиям, я не могу себе позволить дорогое яблоко, я возьму что нибудь подешевле, я не буду покупать гнилое и с червями, так же это работает и в сторону кода. Я с таким говном сталкивался когда-то, когда на фрилансе работал, это ужасно. В ~80% случаев потом это говно просто переписывается с нуля, потому что ни бизнес не может уже это терпеть, ни вменяемый разраб за это даже под дулом пистолета не возьмётся. Где-то дёрнешь, весь проект сыпется, где-то осыпалось и на починку по два дня уходит, а деньги то бизнес все теряет и теряет, браво автор
Хозяйке на заметку: спрашивайте на собеседовании о solid и ddd и если кандидат ответит всё подробно и правильно, не берите
Что бы тебе, друг, всю жизнь пользоваться такими решениями и поддерживать такой замечательный код. Ведь ты же мастер побеждать защекоины? Мамке привет!
Я тут смотрел интересного человека, так он рассказал, что говнокод не так определяется =).
Так вот говнокод, это тот код который невозможно читать (и в первую очередь такое возникает когда нарушен нейминг), а все остальное это норм.
С этой точки зрения, то что ты описал и не говнокод вовсе.
Говнокод не термин , чтобы его точно определять. Так что то что он описывал , тоже можно назвать говнокодом , только в его понимании .
@@alduin3115 Иметь не одно значение - значит не иметь ни одного значения; если же у слов нет значений, тогда утрачена всякая возможность рассуждать друг с другом, а в действительности - и с самим собой; ибо невозможно ничего мыслить, если не мыслить что-нибудь одно
Аристотель.
@@detnhyiiika6759 ДА я бы и сам был рад унификации языка ,но даже в научной среде некоторые термины имеют несколько значений. А уж требовать однозначности от слэноговых слов , которых даже в словарях нет так и совсем бесполезно .
@@alduin3115 Это да, гно просто выходит и разговор не предметный, а типа так =).
Еб-ть, история прямо ОДИН В ОДИН из моей мухосрани в 60к населения, я аж испугался. Тоже Вася, тоже пиццерия, тоже выстрелила, тоже есть мобильное приложение.
... и код-говнокод тот же самый.
Обязательно нужна версия на английском или хотя бы субтитры
Нет времени на тесты, но есть время подумать о бизнесе )) с таким успехом можно не забирать з/п - так вы сделаете бизнесу ещё лучше.
Уверен, что автор на экзамене мог уболтать любого профессора. Тем не менее воспринимать такой монолог, пусть и с картинками, сложно.
Но не учителя русского языка)
Люблю readme. В него хорошо ещё примеры добавлять: запрос-ответ на сервер, готовые примеры конфигурации, и конечно кейсы и на что они влияют.
После слова защекоины реклама «щекино в прыщах»
В общем, стоит писать сперва как получается, а потом переделывать "как надо" -- когда надо.
1. Сложно соблюдать DRY с самого нуля -- не знаешь как правильно абстрагироваться, надо сперва повторить несколько раз, а потом уже понять что там общего на самом деле и что вынести.
2. В статически типизированных языках тесты нужны когда надо проверить интеграцию или сложный алгоритм, юнит-тесты обычно трата времени на написание и поддержку, особенно для неустоявшегося функционала, если хотите писать много и чтоб можно было поддерживать -- берите статику, у неё больше утилит рефакторинга обычно и потом можно быстренько в IDE всё поправить за несколько хоткеев.
2. Если уже чувствуется, что фича не лезет нормально в текущую кодовую базу -- настало время "прихорашивать", это часть от того времени, что вы сэкономили раньше, но она могла и не появиться, потому вы теоретически могли сэкономить немного времени, но не в этот раз, да и всё равно пришлось бы ещё что-то менять, как минимум не проиграли.
Другой вопрос, когда вас много народу и надо писать не просто много, а очень много, тогда надо уже делать нормально сразу, потому что другие будут пользоваться вашим кодом уже сейчас, возможно подправляя торчащие костыли или напарываясь на них, из-за чего будет уходить больше времени на интеграцию, ресолв конфликтов и фикс внезапных багов, лучше уже стабильно медленно, чем неожиданно обсираться -- если вас много, то и задач много, а значит у заказчика можно выяснить приоритеты и обосраться только с некритичным, например.
Ты реально думаешь что кто то это прочитает?
И не забываем постоянно коммитить и ветвить код в гит баш, чтобы каждый раз судорожно не искать старую рабочую версию своего кода.