За свою жизнь, не будучи программистом, написал всего одну условно-коммерческую программу) Работал я тогда в НИИ железнодорожного транспорта и возникла задача как-то автоматизировать обработку данных с долгих опытных поездок - усреднить и проредить значения, найти на осциллограммах интересные для нас куски и вырезать их, а также посчитать по этим кускам кое-какие параметры и свести их в таблицу. В общем то, на что у предыдущих поколений инженеров нашего института уходило 1-2 месяца ручного труда. В общем, получилось у меня примерно 5 тысяч строк не просто говнокода, а говнокода в квадрате) Я начисто игнорировал не только принципы ООП, о существовании которых тогда даже не подозревал, но даже такое понятие, как процедуры) Если какое-то действие (например, вычисление среднего) у меня в программе повторялось, то я тупо копировал кусок кода в нужное место несколько раз) В общем то, что получилось, наверняка повергло бы в обморок любого профессионального программиста, НО! Оно работало! И месяц сидения над этой программой потом сэкономил мне минимум полгода ручной работы) Причем потом, по мере узнавания все новых подробностей о программировании у меня не раз возникали мысли всё это отрефакторить, но всегда побеждала заповедь инженера "работает? не трогай!"😀
ООП придумали задроты. Это как суп в столовой и в ресторане один и тот же. Но в ресторане тебе подадут красиво, в красивой тарелке и листочком какого-нибудь укропа сверху.
Я бы сказал это фича, а не баг. Я бы назвал этот стиль программирования "тетрадка". Чтобы понять любой участок кода не нужно метаться по всему файлику, всё сразу перед глазами.
Хороший код пишут не для себя, а для других людей - в этом цимес...) Твоя программа принесла ожидаемый результат ровно потому, что ты писал её ОДИН, и, судя по всему, раз и навсегда (без необходимости поддерживать и расширять). Если бы ты разрабатывал её в большой команде стремительно развивающегося проекта - твоё "работает же!" сильно замедлило бы работу целой команды ==> компания потеряла бы тьму денег. Вот и вся мораль)
@@SergeyNemchinskiy это видео по сути пересказ видео с канала ExtremeCode, под названием Ты должен писать плохой код. А мое сообщение это коронная фраза этого канала.
@@SergeyNemchinskiy я понимаю, что одинаковые темы видео это только совпадение. Никакого умысла упрекнуть в пересказе другого видео у меня нет. Просто забавно получается, что темы и текст похожи, вот и все. Тебя люблю.
А я вот за эту мысль на хабре минуса в карму ловил. Людям прям сложно принять реальность и они готовы обманываться. Очень хорошо помню своего начальника, когда был юным и горячим ))) Подошел и сказал ему "Почему именно Windows? Давай Linux? Он же бесплатен!!!" На что он мне сказал: "Конечно бесплатен. Поэтому ты выходишь на работу в субботу и воскресенье ставить всем Linux. Пишешь дополнительно инструкции для пользователей, но не снижая текущей нагрузки и задачи текущие должны быть выполнены в срок! И да, если у пользователей будут проблемы, они к тебе будут в любой момент обращаться! И да, чуть не забыл за субботу, воскресенье и переработки премию получать не будешь. Linux же бесплатен!" Вот тогда то и стало до меня доходить, что не все в нашем ИТ мире настолько хорошо и красиво )
В книге программист-прагматик было: хорошая программа сегодня лучше, чем отличная программа, но завтра. Спасибо за видео, мощнейшая концентрация полезного опыта. Работаю на саппорт проектах, теперь знаю причину, почему в стартапы не попадаю - просто не умею в говнокод)
Правильно) у меня дошло до того, что стало нравиться работать с легаси - сидишь в уютном болотце под капельницей в виде хорошей зп и исправляешь потихоньку старый код 😊
"...Я серьёзно изменил своё отношение к происходящему, когда у меня появился собственный проект с собственными всамделишными клиентами. И, на самом деле, если вот прямо здесь и сейчас надо подпереть стенку бомбой с часовым механизмом, за неимением ничего другого подходящего по размеру и весу, надо брать и подпирать - потому что иначе завтра вся конструкция потеряет свой смысл. Да, потом надо будет если не заменить бомбу, например, мешком с гантелями (наивно считать, что теперь туда влезет что-то стандартное без перестройки половины фундамента), то хотя бы перерезать провода таймера и, по возможности, выкрутить взрыватель и поставить пару тройку табличек «НЕ ТРОГАЙ!» для потомков. Но это всё потом, а сейчас - не с менеджером, а с разъярённым живым человеком на проводе и пальцами на клавиатуре надо очень быстро решить проблему любым доступным способом. Я раньше поражался тому, как уродливы изнутри «взлетевшие» проекты. Сейчас я знаю: красивые проекты не взлетают, потому что они не успевают взлететь. Пока инженеры в белых халатах прикручивают красивый двигатель к идеальному крылу, бригада взлохмаченных придурков во главе с безумным авантюристом пролетает над ними на конструкции из микроавтобуса, забора и двух промышленных фенов, навстречу второму туру инвестиций"...
За видео огромное спасибо, вот это видео просто супер терапия от синдрома самозванца. Просто иногда чувствуешь себя ну пагано, что мол пишешь ьез тестов. Не документиоуеншь функции, не логируешь. Сергей большое человеческое программистское спасибо за видео!
Думал, ну зачем мне нужно видел про плохой код. А тут оказывается совсем не про код, а про то как думает и живёт бизнес! А такие видео я готов смотреть сутра до вечера
Ааааа, бро, спасибо тебе! Я столько лет работал в сапорт проектах и сейчас недоумеваю, почему у меня так туго пишется пет-проект!!!! И вот тут я понял, ты прав!
В принципе, разложил по полочкам так, что ни добавить, ни убавить, все так и есть. Маленький комент с моей стороны - если говнокод пишут говнопрограммисты, то он имеет большой шанс не взлететь, а проект закроется. Так что тот говнокод что мы наблюдаем, он так сказать "выживший", то есть оправдавший себя для бизнеса, а стало быть он не такой плохой как тот что умер на самом старте. И вот причина провала часто банальное несоответствие скилла разработчика поставленной задаче, неоднократно был свидетелем такой ситуации.
Это особенно к новичкам относиться, кто бы что не говорил, по-началу новичкам, без разницы какой код писать, ведь главное научиться решать задачи/проблемы, и хотя бы чтобы это запускалось, ведь у многих в самом начале, даже не получается просто решать задачи, они имеют представление как это примерно хотели бы сделать, но реализовать не могут, это главная, и самая сложная проблема, с которой надо начать, а потом уже улучшать код, ведь по началу это еще больше затруднит, и тогда вообще ничего не захочеться
Классное видео, спасибо! Если упростить, то во многом так и есть)) Однако мне кажется здесь есть ложная дихотомия - или так или не так. Как и во всем в жизни - реальность вполне себе может быть где-то в середине. Мне довелось работать в разного рода конторах, поэтому позволю себе не согласиться с некоторыми моментами: - не до конца согласен про юнит тесты, - в ядре множества современных продуктов заложена довольно сложная бизнес логика, которую без тестов сложно вывозить даже на начальных стадиях компании. Поэтому сложные и критические вещи покрывать всё-таки стоит. - логирование и обзервабилити. На это действительно стоит забить до наличия продакшена, но как только прод появился - минимальное наличие логов / настроенных алертов может сэкономить огроменнейшее количество нервов и времени Со всем остальным я согласен, и особенно плюсую за пункт про нейминги)
В самом начале упёрся в стену мат. вычислений и загрустил. К счастью судьба очень вовремя свела с профессором ЛЭТИ, который прочел курс лекций (под водку на яхте) по практической математике. Оказалось, что дифференциальные уравнения можно заменять линейными измерениями, в программировании циклами. Суть в том, что допустимые погрешности в вычислениях необходимо нивелировать в зависимости от целей. Это откровение позволило двигаться дальше и стало одним из важнейших пониманий. Даже подумывал о выведении теории ошибок), т.к. применимо во всех областях. Спасибо, Ф.А. Новиков! Спасибо, Сергей, это очень важно!
Не знаю кто такой Новиков и в Питере никогда не был. Но учился в Политехе и обратил внимание что высшую математику в объеме для инженеров профессора рассказывали гораздо более понятно чем училка в школе существенно более простой материал.
@@JustMe-y8d Ф.Новиков математик, написал учебник по UML в соавторстве... Не помню названия и соавтора. И книга мне не зашла, хотя тема моя была, но уж больно объемный труд, а необходимо было общее представление об архитектуре. Я воспользовался другими источниками и разобрался за несколько часов. А с преподаванием да, школьные учителя втюхивают материал по совершенно тупой программе. От этого и сверх низкий уровень понимания у выпускников, если они сами по себе не гении. Профессура в вышке на три головы выше)
Приветствую! На счёт хорошего и плохого кода. Я для себя вывел очень простое правило: любой код, который делает то, что от него требуется - хороший. Как бы он ни был написан. А тот, который не делает, что от него требуется - плохой (как бы он ни был написан). Следовательно, любой код, в том числе для стартапа и с поехавшим форматированием, странным именованием функций и магическими числами, если справился с поставленной задачей - хороший.
чуть чуть "накидаю" =). (на 5 минуте) С одной стороны, факт. Но с другой стороны, можно разделять этап "дискавери" от этапа "реализации". Простой пример - методология Plan-Do-Check-Act. Вот MVP это Do. На этапе планирования - идет полное описание (очевидно, что, кто, где, когда, зачем, почему, definition of done итд). Do - выбор конкретного решения (возможно сравнение вариантов решения). Check - проверка соответствия решения всем заданным параметрам, оценка, сравнение. Act - разворачивание (на кластера итд). Да, можно возразить "зачем так сложно? Пока будешь проходить этапы итерации - потеряешь всех клиентов", но нет, "прелесть" этой методологии в том что она "саморасширяемая". Первый раз сделал - второй раз ее же переиспользуешь, возможно, дополняя параметрами (фидбеком, статистикой) по результатам первой итерации. И если эту методологию "вырезать в камне" - я считаю (но не гарантирую) что любая разработка, и вообще работа с проектами может сводиться буквально к step-by-step framework в итоге. Условно - взял набор документов, параметров, воркфлоу, применил - получил профит. Не запариваешься ни о технологиях, ни о документации (шаблон), ни о "творческом поиске" =). Просто получаешь вводные данные (допустим, решил что-то реализовать или что-то автоматизировать) - прошелся по пунктам - получил результат. Быстро, для всех понятно и очевидно (в плане отчета перед руководством), и эффективно.
Плохой программист Джон сделал ошибку в коде, из-за которой каждый пользователь программы был вынужден потратить в среднем 15 минут времени на поиск обхода возникшей проблемы. Пользователей было 10 миллионов. Всего впустую потрачено 150 миллионов минут = 2.5 миллиона часов. Если человек спит 8 часов в сутки, то на сознательную деятельность у него остается 16 часов. То есть Джон уничтожил 156250 человеко-дней ≈ 427.8 человеко-лет. Средний мужчина живет 64 года, значит Джон убил примерно 6 целых 68 сотых человека. Как тебе спится, Джон - серийный программист?
Можно подумать все пишут программы для 10 млн. пользователей. Лично мне приходится писать программы для корп. сектора у которых всего несколько десятков пользователей. При этом раздражают ситуации когда пользователи достают с никчемными проблемками, которые да, согласен есть, но ни на что не влияют и забирают 10 секунд времени у каждого юзера. Но мне надо потратить несколько дней что-бы устранить каждую из них. И не факт что я попутно не наделаю гораздо больших проблем не обратив на что-то внимание...
Работаю с задачами по бизнес решениям, еще ни один клиент не захотел потратить лишние деньги на оптимизацию удобства интерфейса или на оптимизацию кода. Поэтому пишу только говно-код... Всего один раз было, когда сети магазинов все-таки потребовалось ускорить работу отчета, который за год формировался 15 минут.
Первый мой коммерческий опыт. С нуля пилю уже 3 проект в компании и жутко выбешивало вот прям до сегодняшнего утра, что овнер и все остальные прям впереди паровоза постоянно бежат. Самолет только выруливает на взлет, а они уже на середине ВПП руками как крыльями машут и готовые лететь. Пилот им говорит «воу, народ, спокойно. Сядьте, пристегните ремни и лупите в окно, вас поднимут в воздух и принесут охладительные напитки». А они один хрен. Ну короче этот видос открыл мне глаза, помог понять, что вокруг меня происходит и я стал спокойнее к этому всему относится )
Понял теперь эту систему, но я придерживаюсь своего - глубоко познавать свою профессию в pet-проектах всегда стараться все сделать идеально а там уже и до senior недалеко.😄
спасибо, Сергей есть такая проблема что код иногда такое нефукциональное и баганутое гавно что далее не хочется иметь с данной конторой никаких дел после этого
1. Заканчивается все тем, стоимость каждой новой фичи становится слишком дорогой и кастомео находит нового вендора, который начинает все сначала. 2. Никогда не будет и двух недель, чтобы заняться чисто долгами, а если вам такой спринт и объявят, то ожидания будут раз 10 выше у кастомера от такого спринта 3. Наводить порядок нужно постоянно и постепенно и фиксировать результаты ровно так же, как фиксируются бизнес фичи 4. Даже жуткое легаси можно приводить в божеский вид, сохраняя нужный для бизнеса темп. Но для этого нужна сильная политическая воля лидов, манагеров и прочих лоботрясов:)
"Повертаюся така додому на ніч дивлячись. - Сестри, я танцювала весь день, грошей немає. - - - - Сідай, співаєш. Завтра буде новий день." В майбут(D)ня..Все сказано в назві вигляді.
RESPECT! Когда ты сдал систему без багов ты становишься не нужен. А если еще и подковерные игры там где-то наверху, то и крайним. Я жалею, что в огромной системе по межбанковскому переводу бабла не заложил дерьма. $200 в час "за обслугу" было бы неплохое дополнение к бюджету, а системка-то монопольная. Вот одня беда, работает без багов и обслуги, совковое воспитание делать "все на веки". Я не говорю о незаконных действиях и воровстве, так, прийти почистить систему от мусора... P.S. На мою экспертизу попал код JAVA 98 листов разпечатки кода MAIN программы, все hard-coded вплоть то символов. Дык, он пошел в работу. Контрактор получал $120/час. Вот такой прикольный жизненный опыт программера в одном из ведущих банков Канады. P.P.S. Автору добавлю, вы изпользуете 3rd party tools a on перестает работать и поддерживаться после новой версии винды, прикольно? Безопасность и защита? По моим оценкам в критичеких сетевых приложениях процентов 60 работы, может быть и более. Я знаю, как бы хакал я, пригодилось предупреждать. А прикол в том, что начальству все это похрен!
С целью изучения языка на практике, C#. Написал для своей работы, программу, помогающую систематизировать рабочие процессы, и формирование отчетности по результатам выполненого. Потратил пол года, и сейчас еще добавляю всякие фичи)) Так вот, корил себя, что пишу говно код, так как регулярно смотрел ваши видео, в том числе и про правильный код)) А теперь вот узнаю, что можно и говнокодить))
Еще ошибки "сломанная черепица" желательно избегать когда вы копипастите одинаковый кусок кода в другое места. Потом вы можете в 1 месте поправить код, а в 2 месте забыть. Лучше дублирующийся код оформлять в виде отдельных процедур)
Чтобы постоянно писать говнокод нужно много думать, как ни парадоксально. Иногда хочется отдохнуть, выровнять отступы, пописать тупые комментарии, порефакторить, применить знакомый паттерн. + это способ потешить самолюбие. Поэтому очень сложно отказаться от написания хорошего кода.
Пожалуйста создайте видео о встроенных системах! Ксожалению на эту тему очень мало информации. Очень хотелось бы узнать Ваше мнение в этой сфере. Спасибо!
Фанат першої категорії, бо там завжди гаряче і досить цікаві виклики. При оптимізації часу на розробку згоден із Сергієм, можна опустити тести, але я ще практикую підхід написання коментарів в складних випадках або в завеликих класах і враховую це в оформленні коду, щоб потім було дуже легко розбити на рефакторингу. По досвіду був в обох таборах. Не економити на проектуванні, а лише на реалізації, тоді рефакторинг проходить навіть весело, навіть через значний час, система покращується, а не переписується. Та не дуже згоден із тим, щоб відмовитись від логування, має бути мінімально достатнє, бо якраз те що зекономимо піде на дебаг
Есть ещё такой паттерн: изначально заложенные в систему решения были хороши, исходя из требований к продукту на момент зарождения. Но дальше жизнь внесла свои коррективы, и продукт начал развиваться в другую сторону. И эти решения требуют либо глубокого рефакторинга, либо написания костылей. Ясное дело, на практике чаще встречается второе. Т.к. рефакторинг - трата денег и времени. А бизнес этого не любит 🤣
Ох, не знаю, мне кажется, что не малая часть успешно стартовавших проектов потом умирает как раз из за говнокода. Ибо поддерживать и развивать то гамно, которое стартануло становится просто не реально, а написать все заново дорого, тем более, что бизнес не понимает, какого Х все надо переписывать, да еще за такие деньги. И неизбежные баги при обновлениях, потерянное время и деньги пользователей...
Побывал в обоих случаях и немного не согласен в вопросе, что не надо на Стартап сеньора. Как же вы будите делать тот же самый лейринг, удерживать команду в рамках скорости и говнокода, выбор технологий, и остального что вы ещё нужного перечислили? Неужели простой мидл сможет это все сделать? Помоему как раз наоборот, в начале Стартап нужен один лид сеньор, который качественно все настроит и который будет понимать все эти тонкости, а потом добирать качественных мидлов, чтоб они уже приводили все в порядок под присмотром лида.
Был у меня в команде миддл, который хреначил по 3 тысячи строк кода в день. Причём, рабочего кода. Менеджеры удивлялись и хвалили. Весь этот код пришлось выбросить. Вообще весь.
Смотрите, например у вас есть система, принимающая какие-то заказы. Так вот, по своему опыту скажу, что если даже из-за говнокода какие-то заказы будут с неверной информацией или что-то в этом роде, то бизнесу гораздо проще решить это через использование девочек на телефоне, нежным голоском успокаивающих клиента, чем тратить время на то, чтобы наводить порядок в коде вместо написания новых фич
Я за качественный код. Я пока учусь в направлении front-end онлайн (хотя базовые навыки верстки HTML/CSS уже давно неплохие). До данного обучения я учился офлайн и чуть касался верстки в рамках веб-дизайна. Много спорил с преподавателем по офлайн обучению - по мне его код это говнокод. Мне было непонятно, что он много десятков лет верстает говнокодом, притом с частыми «!important» в CSS, и даже не парится. Для меня важна структура и куча правил, иначе меня бомбит. Для моего внутреннего равновесия, я скорее выберу второе. И для меня очень важен качественный опыт - не могу не стремиться стать профессионалом.. Но да, бизнес - есть бизнес. Классный ролик, теперь буду понимать этот нюанс (притом с меньшими нервами для себя). Для поиска работы, важная информация - помогло сложить в голове мою недавнюю пробу поучаствовать в стартапе по разработке соцсети (понял, что от меня ждали, и чего ждал я и почему не нашел).
Я даже больше скажу - так как JavaScript и его производные являются говноязыками, а всякие ангулары по своей сути являются говнофреймворками, то мне кажется на фронте вероятность написать не-говнокод стремится к нулю. Так что вы правы в оценке кода преподавателя - это должен быть говнокод, но и вы будете писать ковнокод, только другого сорта.
разговоры о качестве кода могут начинаться с уровня мидла, ну ещё допускаю такие разговоры от очень опытных джунов в каких-то технологиях, но если ты учишься, то о качестве кода говорить рано
@@hunterxvov4ik Если ты учишься, о качестве твоего кода должны говорить тебе мидлы и синьоры. Так ты и научишься писать лучше со временем. Без практики можно вообще не смотреть ролики про хороший код.
@@hunterxvov4ik Обычно да - рано для начинающего говорить про качество кода. Если уточнить, то начинающему (1-3 года в процессе обучения и работы) трудно понять, что код плох (!). Но начинающие есть разного уровня. До начала нормального обучения я колупал сайты, на любительском уровне, много лет (на код первых моих работ без раздражения, действительно, не взглянешь - а ведь тогда я думал, что мой код неплох). Другое дело - понимать, что код явно (!) плох. Еще круче понимать - что человек даже не стремится улучшать свой код. Если за много лет практики код «преподавателя-специалиста» все еще «говнокод», то ещё через много лет практики, чуда не произойдет - его код не станет «вдруг» лучше. Всегда видно, когда человек старается в своей области, и когда он остановился в развитии (типа «зачем?», «я итак крут»).
Супер, все именно так. Но с про нейминг нужно подробнее. Для примера. Часто советуют, что нужно писать что именно означает название переменной, функции и так далее. Но не все так просто. Если просто так делать, то появятся например сотни getPosts(). По сути итак ясно, что эта функция возвращает посты. Но непонятен контекст, и чем отличается от сотни других getPosts(). Вот нейминг и должен решать этот вопрос. Например, содержать в названии, к чем это относится, а не только что означает.
18:36 про "забить на кодстайл" не согласен. Подключите линтер и претиер с любыми дефолтными настройками, например eslint-config-airbnb. Делается за 10 минут, ставите галочку в любимой ide применять линтер при сохранении файла и код автоматом приводиться к однообразному виду при каждом сохранении файла.
Ага, в Пыхе попробуйте... там сейчас по фэн-шую писать упаришься - это не так, то не то, здесь слишком длинно, там нет name spaces (для примитивного сайта это безумно важно!), тут еще какая-то фигня подчеркнулась красным. При этом все работает. Чистокодный маразм...
Во, то что нужно. Я вот тоже сейчас занят разработкой софта. И думаю продавать говно код или нет. Деньги то нужны и покрывать разработку нужно. И посмотреть востебована ли эта софтина или нет тоже нужно. И по ходу я нашёл в этом видео ответ на этот вопрос. Благодарю 🤝
Это печально, так как рано или поздно количество архитектурных ошибок или просто ошибок превысит порог, после которого прога будет глючить, падать, вставать и опять лежать. Особенно, если это касается красноглазной Java. 🙂
Повністю згоден з вище сказаним. На 3 курсі почав працювати помічником адміністратора в державній структурі, там був просто клондайк коду, який просто неможливо було прочитати, все це було написано на php і найсмішніше що це був зовсім не сайт, а самописна серверна програма яка по суті керувала цілою бібліотекою, база даних майкрософт, все це хостилось локально, на системі windows xp server. Одного разу коли адмін був у відпустці, перестала працювати вигрузка на сайт (з сайту на можна було подивитись список книг і які зараз доступні). Коли я почав вникати в те як це все працює я зрозумів що це навіть не програма а бекенд для скриптів, де кожна функція була окремим файлом, а в інтерфейсі просто записаний шлях до скрипта в домашній дерикторії програми. А самі скрипти були написані в рядочок, без табуляції просто реченнями. Розкопувати це все в мене не було бажання, але згодом в логах сайту я помітив що проблема була в тому що на сайті оновилась версія php. Я так і не зміг це побороти, але адмін коли прийшов з відпустки успішно написав якийсь скрипт і все запрацювало, що для мене на той час виглядало магією.
неистово плюсую, сам работаю на галере где много наговнокодили, но мне нравится это дерьмо исправлять, конечно и с нуля что-то пишется, но исправить чьё-то дерьмо и доказать самому себе, что я мастер кода всегда приятно)
Именно по этой причине, стараюсь выбирать стартапы, в которых качество кода критично: финансы, ИБ, блокчейн итд Ибо в этой области, любая уязвимость и можно закрываться
Для банковского софта важно, чтобы работало, а не чистокодные рюшечки. Ну может быть фронтэндеры там фигней маются, а все остальным пишут, чтобы работало и всё. Древний банковский Дельфинарий не даст соврать.
@@vasiliigodunov1746 Прошу прощения, какие конкретно блокчейны пишут на Python? Их пишут на C++\Rust в 90% процентов случаев. А вот смарт-контракты пишут преимущественно на Solidity (like js) (ну редко на Vyper like python), но там мой тезис не менее правильный. А сам ETH Foundation делают новый язык Rust like для тех же контрактов, сами задумайтесь почему. Финансы я имел ввиду мировые, а там PHP я вижу крайне редко
@@alext5030 "Чистокодные рюшечки" - это кек конечно. Их же ради только красоты используют, глупые молодые программисты сойбои, а настоящие мужики пишут говнокод в легаси проекты "чтобы работало". А вообще Банковский софт всегда легаси на легаси, но я говорил о стартапах. У них нет огромного техдолга и там оказывается, что теже самые архитекторы\программисты из банков умеют и любят писать чистый код! Любо дорого
Я бы отметил что говнкодить можно, но архитектура проекта должна быть продуманной, а также делать упор на композиции, а не наследовании, по код стайлу можно использовать автоформат, который отформатирует проект, также линтеры тоже очень быстро настраиваются
Насчёт юнит-тестов. Соглашусь, не пишите их. Но... Иногда вы будете писать довольно сложные функции, работу которых вы просто не сможете проконтролировать, держа всё в голове. Та же рекурсия, например. Именно для таких редких функций можно написать юнит-тесты, либо любые другие тексты. Потому что ручное тестирование может оказаться более затратным по времени.
Это всё очень интересно, только специалист не может делать хреново, во первых это престиж, а во-вторых переделывать халтуру, в несколько раз сложнее чем сразу делать норм. Не хочу быть пустозвоном, возьмите к примеру intel, они делают перспективный процессор на максималках, но из-за сложности производства он не всегда получается, по этому на рынок попадают кристаллы с заниженной характеристикой и это нормально.
Кстати интересно, что с похожей проблемой сейчас физики столкнулись. Что такое Стандартная Модель? Это целый зоопарк элементарных частиц. Физики даже шутят, что физика элементарных частиц стала похожа на ботанику! Это десяток физических констант, никак не связанных друг с другом (скорость света, постоянная Планка, гравитационная постоянная и тд). СМ - несвязанные друг с другом теории. Согласно договоренности, ТО используем для расчетов в макро-космосе (исходим из искривлений пространства под действием графитации). Для микроскопических явлений используем КМ. Удалось Фейнману связать КМ с электродинамикой и получил квантовую электродинамику). И даже у физиков появился соблазн все с нуля переписать!! Теория Струн - попытка переписать все заново от базового класса (струны). Но пока ни 1 одного экспериментального подтверждения существования струн (бран) не обнаружено за 40 лет, но теория красивая!)
писать плохой код выгодно, пока твой код плохой ты нужен работодателю как только код начинает работать без ошибок - ты не нужен... конечно есть другой подход - постоянно выпускать обновения которые делают неприонамстаый код, ну какую то его часть...
Я своё первое наказание за неверный код получил на уроке информатики в союзе, когда на тот урок нужно было приходить в специальном белом халате в специальную комнату с большими жужжащими (кстати задумайтесь почему наоборот не звучит) компьютерами ,и на всё про всё давался час ,потом следующая группа. Так вот учили мы тогда бейсик, програма должна была завершаться командой END .Было там какое-то ветвление, и я поставил END дважды, по окончании каждого, за что получил низкую оценку и объяснение что END ставят только один раз в конце..И вот на практическом уроке я назло ввёл ту программу с двумя END и всё таки отработало..
Добавил бы про минимальное комментирование. Хотя бы для себя - через месяц даже автор без этого не вспомнит, что и зачем. А вообще всё видео - длинный пересказ бородатой байки про двух программистов, где говнокодер потом разбился на авто )))
Есть проекты, в которых нельзя без чистого кода? Например, программа управления АЭС или отвечающая за испытание ракетных двигателей, стоимостью несколько миллионов долларов? Или очень сложные системы вроде систем машинного зрения, где нужно выжимать из железа все соки?
Лет с пять назад одна контора провела аудит исходного кода разных бортовых систем тоёты. Общий вывод звучал примерно так: "от увиденного на наших лысинах фантомные волосы зашевелились"
Чистый код существует только в небольших проектах. Как только проект обрастает и усложняется, так сразу появляется говнокод. Почему мало кто любит легаси, потому что много гавнокода, но когда-то любое легаси начиналось со стартаппа и продуманной архитектуры, начиналось...
Работал в большой конторе, где мы преводили в порядок говнокод, научился там многому, пытались днлать все по уму, по паттернам и чистому коду, а ппотом перешел в стартап и окунулся в говно. Сначала думал, что засучив рукава все перепишу, но текучки довольно много и на украшательства времени почти не остается. Боюсь растратить знаения и опыт по нормальному коду :/
Ну насчет Интерфейсов можно поспорить. Интерфейсы (или абстрактные классы) нужны для полиморфизма (1 из 3 базовых принципов ООП). А полиморфизм нужен для расширяемости (масштабируемости) extended проекта. Для некоторых проектов это не надо. Мы спорили на собесе с 1 сеньером. Это сеньер утверждал, что полиморфизм вообще на фиг никому не нужен)). Тем не менее очень часто на собесах спрашивали отличие интерфейса от абстрактного класса. В любом случае это потом трудно будет рефакторить, если требование расширяемости появится. Представьте у вас куча похожих классов, но с совершенно разным нэймингом похожих методов.
То, что интерфейсы могут использоваться для реализации полиморфизма, не значит, что их нужно использовать до того, как появится реальная необходимость в полиморфизме. И в 98% случаев она не появится. Поэтому всё правильно говорят. Нужно писать максимально простой код, чтобы в будущем его было максимально просто рефакторить и не более того.
Тот случай, когда Сергей Немчинский учит программированию с точки зрения реального мира, где советует забить на все важные моменты. Прям как с универе: "забудьте что было в школе" а потом на работе: "забудьте что было в универе!". Я аналогично всегда считаю, сначала надо реализовать идею, а после допиливать и приводить в порядок. У мя так одна очень полезная лично для меня программа в первоначальном состоянии с 2021 года пашет каждый день. Правда руки доходят только сейчас для ее правки в принципам ООП :)
За Сергея не скажу, но выскажу мнение на своем опыте в АТ и разработке. Автотесты обычно начинают писать уже на довольно зрелых этапах развития системы, когда проект уже точно не стартап, его доработки тестируют вручную и это тестирование занимает довольно много времени. Тогда есть два варианта: 1)мануальщики начинают в автоматизацию и у них по неопытности может выходить только г*код б)код пишут более профессиональные автотестеры, то тут уже они могут писать что-то вменяемое. Но так как бизнес обычно требует полное покрытие тестами за максимально сжатые сроки и вводит какие-нибудь количественные метрики, то и тут код тестов будет далек от идеала. И дальше когда тесты становятся нестабильными или слишком медленными, все это приходится разгребать по новой.
Компания такого типа: много разных проектов но все используют 1 дизайн, набор компонентов. Я начал делать что-то вроде библиотеки (ну что-бы последующие проекты делать быстрее и проще), меня уволили потому что "слишком долго, мы не знаем чем ты занимаешься".
Решение потратить заметную кучку ресурсов на оформление общих либ - это уровень где-то техлида/архитектора. Если линейный васян вдруг забьет на решение бизнес-задач и пойдет пилить либы в надежде на светлое будущее, указание на дверь будет вполне справедливым.
Ув. Сергей, как «по-научному» называется эта 2-фазовая методология? (Сначала быстро и коряво функциональность, затем внутренняя красота.) Имеется ли для нее английский термин?
Я не пишу код, я работаю с blueprints в Unreal Engine и это чисто пет проект. В общем.. Говнокод (говноноды) говнонодами, но хотя бы я должен это читать. Обычно, когда полёт мысли я награмождаю месиво, а потом сижу. привожу его в вид, по которому я же сам на следующий день смогу понять что у меня здесь происходит и нормально отладить. Возможно было бы продуктивнее сразу делать относительно читаемо, чтобы на отладку требовалось меньше времени, но сложнааа. сразу идёт только более-менее вменяемый нейминг.
"Переписывание" это зло. Переписывают обычно говнокодеры, которые хотят, чтобы их ещё год или два никто не трогал. В результате, обычно ничего путного не получается и продукт приходится закрывать. Правильный подход - это модификация подсистем. Когда архитектура частично меняется за одну итерацию.
Не обязательно. Если писать через TDD (но без фанатизма), то это может ускорить разработку даже на самом начальном этапе. Тесты - довольно простая точка входа в функционал.
Поэтому на стартап и лучше брать программистов классом повыше - в их говнокоде потом намного проще навести порядок, а в особо запущенных случаях - он и говнокодом не будет )
👨💻 После Senior ВСЕ? Как программисту развиваться после Senior и куда двигаться в айти? 👉 ruclips.net/video/NnM1Od1TKdA/видео.html
Напиши хороший код - бизнес будет нуждаться в тебе один раз
Напиши плохой код - бизнес будет нуждаться в тебе всегда
оооо, да ты познал жизнь....
именно поэтому компании придумали код ревью
Напиши плохо, чтобы тебя потом не нанимали +)
@@eprst0 за чей счет?
Гениально))
За свою жизнь, не будучи программистом, написал всего одну условно-коммерческую программу) Работал я тогда в НИИ железнодорожного транспорта и возникла задача как-то автоматизировать обработку данных с долгих опытных поездок - усреднить и проредить значения, найти на осциллограммах интересные для нас куски и вырезать их, а также посчитать по этим кускам кое-какие параметры и свести их в таблицу. В общем то, на что у предыдущих поколений инженеров нашего института уходило 1-2 месяца ручного труда.
В общем, получилось у меня примерно 5 тысяч строк не просто говнокода, а говнокода в квадрате) Я начисто игнорировал не только принципы ООП, о существовании которых тогда даже не подозревал, но даже такое понятие, как процедуры) Если какое-то действие (например, вычисление среднего) у меня в программе повторялось, то я тупо копировал кусок кода в нужное место несколько раз) В общем то, что получилось, наверняка повергло бы в обморок любого профессионального программиста, НО! Оно работало! И месяц сидения над этой программой потом сэкономил мне минимум полгода ручной работы) Причем потом, по мере узнавания все новых подробностей о программировании у меня не раз возникали мысли всё это отрефакторить, но всегда побеждала заповедь инженера "работает? не трогай!"😀
не удивлюсь если эта программа все еще работает и ее боятся трогать так как никто не может осознать всю глубину мыслей сваявшего ее человека.
ООП придумали задроты. Это как суп в столовой и в ресторане один и тот же. Но в ресторане тебе подадут красиво, в красивой тарелке и листочком какого-нибудь укропа сверху.
Я бы сказал это фича, а не баг. Я бы назвал этот стиль программирования "тетрадка". Чтобы понять любой участок кода не нужно метаться по всему файлику, всё сразу перед глазами.
И ни одного юнит-теста. Как вам такое, адепты секты TDD? 😆
Хороший код пишут не для себя, а для других людей - в этом цимес...) Твоя программа принесла ожидаемый результат ровно потому, что ты писал её ОДИН, и, судя по всему, раз и навсегда (без необходимости поддерживать и расширять). Если бы ты разрабатывал её в большой команде стремительно развивающегося проекта - твоё "работает же!" сильно замедлило бы работу целой команды ==> компания потеряла бы тьму денег. Вот и вся мораль)
Братан харош. Давай -давай вперёд. Контент в кайф. Можно ещё? Ваще красавчик. Можно вот этого вот почаще.
ну так раз в неделю даю :) и еще по разу в неделю стрим и новости
@@SergeyNemchinskiy это видео по сути пересказ видео с канала ExtremeCode, под названием Ты должен писать плохой код. А мое сообщение это коронная фраза этого канала.
@@SergeyNemchinskiy я понимаю, что одинаковые темы видео это только совпадение. Никакого умысла упрекнуть в пересказе другого видео у меня нет. Просто забавно получается, что темы и текст похожи, вот и все. Тебя люблю.
ExtreamCode)
@@SergeyNemchinskiy твое видео рекомендуется сразу после extreme code канала. я даже ничего не нажимал и автовоспроизведение сразу сюда привело)
А я вот за эту мысль на хабре минуса в карму ловил. Людям прям сложно принять реальность и они готовы обманываться.
Очень хорошо помню своего начальника, когда был юным и горячим ))) Подошел и сказал ему "Почему именно Windows? Давай Linux? Он же бесплатен!!!"
На что он мне сказал: "Конечно бесплатен. Поэтому ты выходишь на работу в субботу и воскресенье ставить всем Linux. Пишешь дополнительно инструкции для пользователей, но не снижая текущей нагрузки и задачи текущие должны быть выполнены в срок! И да, если у пользователей будут проблемы, они к тебе будут в любой момент обращаться! И да, чуть не забыл за субботу, воскресенье и переработки премию получать не будешь. Linux же бесплатен!"
Вот тогда то и стало до меня доходить, что не все в нашем ИТ мире настолько хорошо и красиво )
В книге программист-прагматик было: хорошая программа сегодня лучше, чем отличная программа, но завтра. Спасибо за видео, мощнейшая концентрация полезного опыта. Работаю на саппорт проектах, теперь знаю причину, почему в стартапы не попадаю - просто не умею в говнокод)
Правильно) у меня дошло до того, что стало нравиться работать с легаси - сидишь в уютном болотце под капельницей в виде хорошей зп и исправляешь потихоньку старый код 😊
@@codingfox я прям себя в этих строчках увидел))
"...Я серьёзно изменил своё отношение к происходящему, когда у меня появился собственный проект с собственными всамделишными клиентами. И, на самом деле, если вот прямо здесь и сейчас надо подпереть стенку бомбой с часовым механизмом, за неимением ничего другого подходящего по размеру и весу, надо брать и подпирать - потому что иначе завтра вся конструкция потеряет свой смысл. Да, потом надо будет если не заменить бомбу, например, мешком с гантелями (наивно считать, что теперь туда влезет что-то стандартное без перестройки половины фундамента), то хотя бы перерезать провода таймера и, по возможности, выкрутить взрыватель и поставить пару тройку табличек «НЕ ТРОГАЙ!» для потомков. Но это всё потом, а сейчас - не с менеджером, а с разъярённым живым человеком на проводе и пальцами на клавиатуре надо очень быстро решить проблему любым доступным способом.
Я раньше поражался тому, как уродливы изнутри «взлетевшие» проекты. Сейчас я знаю: красивые проекты не взлетают, потому что они не успевают взлететь. Пока инженеры в белых халатах прикручивают красивый двигатель к идеальному крылу, бригада взлохмаченных придурков во главе с безумным авантюристом пролетает над ними на конструкции из микроавтобуса, забора и двух промышленных фенов, навстречу второму туру инвестиций"...
Господи, откуда эта цитата? Она прекрасна
@@NemchinskyLive Откуда-то с Хабра
Братан, харош! Давай, давай, вперёд! Контент в кайф, можно ещё вот этого вот? Вообще красавчик! Можно такого вот прям вообще почаще?
Хаха! Коммент подходящий к соседнему каналу, но и здесь заходит!)😂
@@Scherbakov на соседнем канале есть видео на ту же тему 🙂
Я искал этот коммент🤣
В этот раз автора тоже зовут Сергей Немчинский? 🤔
Ужас😢
Он чуть позже представился… но тоже подозрительно 🧐
Его всё ещё зовут Сергей Немчинский
Нет, он сменил имя
А в чем прикол? Или у меня чувство юмора какое-то ущербное?😂
За видео огромное спасибо, вот это видео просто супер терапия от синдрома самозванца. Просто иногда чувствуешь себя ну пагано, что мол пишешь ьез тестов. Не документиоуеншь функции, не логируешь. Сергей большое человеческое программистское спасибо за видео!
Думал, ну зачем мне нужно видел про плохой код. А тут оказывается совсем не про код, а про то как думает и живёт бизнес! А такие видео я готов смотреть сутра до вечера
Ну вот все встало на свои места: не криворукий г..нокодер, а программист первого типа, для стартапов! Спасибо.
Ааааа, бро, спасибо тебе! Я столько лет работал в сапорт проектах и сейчас недоумеваю, почему у меня так туго пишется пет-проект!!!! И вот тут я понял, ты прав!
В принципе, разложил по полочкам так, что ни добавить, ни убавить, все так и есть. Маленький комент с моей стороны - если говнокод пишут говнопрограммисты, то он имеет большой шанс не взлететь, а проект закроется. Так что тот говнокод что мы наблюдаем, он так сказать "выживший", то есть оправдавший себя для бизнеса, а стало быть он не такой плохой как тот что умер на самом старте. И вот причина провала часто банальное несоответствие скилла разработчика поставленной задаче, неоднократно был свидетелем такой ситуации.
Это особенно к новичкам относиться, кто бы что не говорил, по-началу новичкам, без разницы какой код писать, ведь главное научиться решать задачи/проблемы, и хотя бы чтобы это запускалось, ведь у многих в самом начале, даже не получается просто решать задачи, они имеют представление как это примерно хотели бы сделать, но реализовать не могут, это главная, и самая сложная проблема, с которой надо начать, а потом уже улучшать код, ведь по началу это еще больше затруднит, и тогда вообще ничего не захочеться
Спасибо большое! Очень полезная и нужная информация! Успокаивающая, доносящая, что все ок на самом деле
Классное видео, спасибо! Если упростить, то во многом так и есть)) Однако мне кажется здесь есть ложная дихотомия - или так или не так. Как и во всем в жизни - реальность вполне себе может быть где-то в середине.
Мне довелось работать в разного рода конторах, поэтому позволю себе не согласиться с некоторыми моментами:
- не до конца согласен про юнит тесты, - в ядре множества современных продуктов заложена довольно сложная бизнес логика, которую без тестов сложно вывозить даже на начальных стадиях компании. Поэтому сложные и критические вещи покрывать всё-таки стоит.
- логирование и обзервабилити. На это действительно стоит забить до наличия продакшена, но как только прод появился - минимальное наличие логов / настроенных алертов может сэкономить огроменнейшее количество нервов и времени
Со всем остальным я согласен, и особенно плюсую за пункт про нейминги)
Ахах, картинка сложилась) Спасибо Сергей. А то я всё думал, откуда такая пропасть между собесом и реальным проектом.
Одне із самих корисних відео на тему програмування, що я бачив взагалі. В мене як камінь з плеч звалився, стало легше миритися із своїм гівнокодом )))
В самом начале упёрся в стену мат. вычислений и загрустил. К счастью судьба очень вовремя свела с профессором ЛЭТИ, который прочел курс лекций (под водку на яхте) по практической математике. Оказалось, что дифференциальные уравнения можно заменять линейными измерениями, в программировании циклами.
Суть в том, что допустимые погрешности в вычислениях необходимо нивелировать в зависимости от целей.
Это откровение позволило двигаться дальше и стало одним из важнейших пониманий. Даже подумывал о выведении теории ошибок), т.к. применимо во всех областях. Спасибо, Ф.А. Новиков! Спасибо, Сергей, это очень важно!
Не знаю кто такой Новиков и в Питере никогда не был.
Но учился в Политехе и обратил внимание что высшую математику в объеме для инженеров профессора рассказывали гораздо более понятно чем училка в школе существенно более простой материал.
@@JustMe-y8d Ф.Новиков математик, написал учебник по UML в соавторстве... Не помню названия и соавтора. И книга мне не зашла, хотя тема моя была, но уж больно объемный труд, а необходимо было общее представление об архитектуре. Я воспользовался другими источниками и разобрался за несколько часов.
А с преподаванием да, школьные учителя втюхивают материал по совершенно тупой программе. От этого и сверх низкий уровень понимания у выпускников, если они сами по себе не гении.
Профессура в вышке на три головы выше)
Приветствую! На счёт хорошего и плохого кода. Я для себя вывел очень простое правило: любой код, который делает то, что от него требуется - хороший. Как бы он ни был написан. А тот, который не делает, что от него требуется - плохой (как бы он ни был написан). Следовательно, любой код, в том числе для стартапа и с поехавшим форматированием, странным именованием функций и магическими числами, если справился с поставленной задачей - хороший.
чуть чуть "накидаю" =). (на 5 минуте)
С одной стороны, факт. Но с другой стороны, можно разделять этап "дискавери" от этапа "реализации". Простой пример - методология Plan-Do-Check-Act. Вот MVP это Do. На этапе планирования - идет полное описание (очевидно, что, кто, где, когда, зачем, почему, definition of done итд). Do - выбор конкретного решения (возможно сравнение вариантов решения). Check - проверка соответствия решения всем заданным параметрам, оценка, сравнение. Act - разворачивание (на кластера итд).
Да, можно возразить "зачем так сложно? Пока будешь проходить этапы итерации - потеряешь всех клиентов", но нет, "прелесть" этой методологии в том что она "саморасширяемая". Первый раз сделал - второй раз ее же переиспользуешь, возможно, дополняя параметрами (фидбеком, статистикой) по результатам первой итерации. И если эту методологию "вырезать в камне" - я считаю (но не гарантирую) что любая разработка, и вообще работа с проектами может сводиться буквально к step-by-step framework в итоге. Условно - взял набор документов, параметров, воркфлоу, применил - получил профит. Не запариваешься ни о технологиях, ни о документации (шаблон), ни о "творческом поиске" =). Просто получаешь вводные данные (допустим, решил что-то реализовать или что-то автоматизировать) - прошелся по пунктам - получил результат. Быстро, для всех понятно и очевидно (в плане отчета перед руководством), и эффективно.
Плохой программист Джон сделал ошибку в коде, из-за которой каждый пользователь программы был вынужден потратить в среднем 15 минут времени на поиск обхода возникшей проблемы. Пользователей было 10 миллионов. Всего впустую потрачено 150 миллионов минут = 2.5 миллиона часов. Если человек спит 8 часов в сутки, то на сознательную деятельность у него остается 16 часов. То есть Джон уничтожил 156250 человеко-дней ≈ 427.8 человеко-лет. Средний мужчина живет 64 года, значит Джон убил примерно 6 целых 68 сотых человека.
Как тебе спится, Джон - серийный программист?
хм нифигась какая аргументация))
Человеколюди ужаснутся этой истории человеколета.
Сотых? :) То есть, Джон может убить полчеловека?!
Про 1,5 землекопа не слышал? 😁
Можно подумать все пишут программы для 10 млн. пользователей.
Лично мне приходится писать программы для корп. сектора у которых всего несколько десятков пользователей.
При этом раздражают ситуации когда пользователи достают с никчемными проблемками, которые да, согласен есть, но ни на что не влияют и забирают 10 секунд времени у каждого юзера. Но мне надо потратить несколько дней что-бы устранить каждую из них. И не факт что я попутно не наделаю гораздо больших проблем не обратив на что-то внимание...
Очень крутое видео,одно из лучших 100%,спасибо никак не могу вбить себе в голову эту прописную истину
Работаю с задачами по бизнес решениям, еще ни один клиент не захотел потратить лишние деньги на оптимизацию удобства интерфейса или на оптимизацию кода. Поэтому пишу только говно-код...
Всего один раз было, когда сети магазинов все-таки потребовалось ускорить работу отчета, который за год формировался 15 минут.
Первый мой коммерческий опыт. С нуля пилю уже 3 проект в компании и жутко выбешивало вот прям до сегодняшнего утра, что овнер и все остальные прям впереди паровоза постоянно бежат. Самолет только выруливает на взлет, а они уже на середине ВПП руками как крыльями машут и готовые лететь. Пилот им говорит «воу, народ, спокойно. Сядьте, пристегните ремни и лупите в окно, вас поднимут в воздух и принесут охладительные напитки». А они один хрен. Ну короче этот видос открыл мне глаза, помог понять, что вокруг меня происходит и я стал спокойнее к этому всему относится )
Понял теперь эту систему, но я придерживаюсь своего - глубоко познавать свою профессию в pet-проектах всегда стараться все сделать идеально а там уже и до senior недалеко.😄
спасибо, Сергей
есть такая проблема что код иногда такое нефукциональное и баганутое гавно что далее не хочется иметь с данной конторой никаких дел после этого
Доброго времени суток Уважаемые ! Полностью согласен с вами , что на практике, это оно !
1. Заканчивается все тем, стоимость каждой новой фичи становится слишком дорогой и кастомео находит нового вендора, который начинает все сначала.
2. Никогда не будет и двух недель, чтобы заняться чисто долгами, а если вам такой спринт и объявят, то ожидания будут раз 10 выше у кастомера от такого спринта
3. Наводить порядок нужно постоянно и постепенно и фиксировать результаты ровно так же, как фиксируются бизнес фичи
4. Даже жуткое легаси можно приводить в божеский вид, сохраняя нужный для бизнеса темп. Но для этого нужна сильная политическая воля лидов, манагеров и прочих лоботрясов:)
4. деньги бизнеса для этого нужны.
"Повертаюся така додому на ніч дивлячись.
- Сестри, я танцювала весь день, грошей немає.
- - - - Сідай, співаєш. Завтра буде новий день."
В майбут(D)ня..Все сказано в назві вигляді.
RESPECT!
Когда ты сдал систему без багов ты становишься не нужен. А если еще и подковерные игры там где-то наверху, то и крайним.
Я жалею, что в огромной системе по межбанковскому переводу бабла не заложил дерьма. $200 в час "за обслугу" было бы неплохое дополнение к бюджету, а системка-то монопольная. Вот одня беда, работает без багов и обслуги, совковое воспитание делать "все на веки". Я не говорю о незаконных действиях и воровстве, так, прийти почистить систему от мусора...
P.S. На мою экспертизу попал код JAVA 98 листов разпечатки кода MAIN программы, все hard-coded вплоть то символов. Дык, он пошел в работу. Контрактор получал $120/час. Вот такой прикольный жизненный опыт программера в одном из ведущих банков Канады.
P.P.S. Автору добавлю, вы изпользуете 3rd party tools a on перестает работать и поддерживаться после новой версии винды, прикольно?
Безопасность и защита? По моим оценкам в критичеких сетевых приложениях процентов 60 работы, может быть и более. Я знаю, как бы хакал я, пригодилось предупреждать. А прикол в том, что начальству все это похрен!
Братан, хорош, давай, давай, вперёд! Контент в кайф, можно ещё? Вообще красавчик! Можно вот этого вот почаще?
Одно из самых полезных видео, Спасибо!
С целью изучения языка на практике, C#. Написал для своей работы, программу, помогающую систематизировать рабочие процессы, и формирование отчетности по результатам выполненого. Потратил пол года, и сейчас еще добавляю всякие фичи))
Так вот, корил себя, что пишу говно код, так как регулярно смотрел ваши видео, в том числе и про правильный код))
А теперь вот узнаю, что можно и говнокодить))
Забавно, никогда не ожидал такую информацию услышать)))
Еще ошибки "сломанная черепица" желательно избегать когда вы копипастите одинаковый кусок кода в другое места. Потом вы можете в 1 месте поправить код, а в 2 месте забыть. Лучше дублирующийся код оформлять в виде отдельных процедур)
Спасибо Вам!
Этим видео внесли много ясности 👍
Чтобы постоянно писать говнокод нужно много думать, как ни парадоксально. Иногда хочется отдохнуть, выровнять отступы, пописать тупые комментарии, порефакторить, применить знакомый паттерн. + это способ потешить самолюбие. Поэтому очень сложно отказаться от написания хорошего кода.
Так вот мне куда надо своё резюме подавать. Надо добавить туда два пункта: "Пишу говнокод качественно и с любовью", "Юнит-тесты не перевариваю".
Коллега, приветствую!
Дада, всё так) спасибо за тему
потому что уже будешь глубже разбираться чем другие🤫😉
Пожалуйста создайте видео о встроенных системах! Ксожалению на эту тему очень мало информации. Очень хотелось бы узнать Ваше мнение в этой сфере. Спасибо!
записала
Коли підписався на ExtreamCode).
Ща ребята после курсов такие: ОПА-НА, а вот этих слов то я как раз и ждал :D
ахахаха
На курсах люто выносят мозг этим идиотизмом. Там фанатичность 120 левела. Вся эта чистокодная фигня...
Фанат першої категорії, бо там завжди гаряче і досить цікаві виклики. При оптимізації часу на розробку згоден із Сергієм, можна опустити тести, але я ще практикую підхід написання коментарів в складних випадках або в завеликих класах і враховую це в оформленні коду, щоб потім було дуже легко розбити на рефакторингу.
По досвіду був в обох таборах.
Не економити на проектуванні, а лише на реалізації, тоді рефакторинг проходить навіть весело, навіть через значний час, система покращується, а не переписується.
Та не дуже згоден із тим, щоб відмовитись від логування, має бути мінімально достатнє, бо якраз те що зекономимо піде на дебаг
Есть ещё такой паттерн: изначально заложенные в систему решения были хороши, исходя из требований к продукту на момент зарождения. Но дальше жизнь внесла свои коррективы, и продукт начал развиваться в другую сторону. И эти решения требуют либо глубокого рефакторинга, либо написания костылей. Ясное дело, на практике чаще встречается второе. Т.к. рефакторинг - трата денег и времени. А бизнес этого не любит 🤣
Очень актуально для геймдева.)
Ох, не знаю, мне кажется, что не малая часть успешно стартовавших проектов потом умирает как раз из за говнокода. Ибо поддерживать и развивать то гамно, которое стартануло становится просто не реально, а написать все заново дорого, тем более, что бизнес не понимает, какого Х все надо переписывать, да еще за такие деньги. И неизбежные баги при обновлениях, потерянное время и деньги пользователей...
Побывал в обоих случаях и немного не согласен в вопросе, что не надо на Стартап сеньора.
Как же вы будите делать тот же самый лейринг, удерживать команду в рамках скорости и говнокода, выбор технологий, и остального что вы ещё нужного перечислили? Неужели простой мидл сможет это все сделать?
Помоему как раз наоборот, в начале Стартап нужен один лид сеньор, который качественно все настроит и который будет понимать все эти тонкости, а потом добирать качественных мидлов, чтоб они уже приводили все в порядок под присмотром лида.
Был у меня в команде миддл, который хреначил по 3 тысячи строк кода в день. Причём, рабочего кода. Менеджеры удивлялись и хвалили.
Весь этот код пришлось выбросить. Вообще весь.
А денег на сеньёра то куча уйдёт...
@@MaxStrike-wx8gc необязательно, сеньор может сократить общий срок разработки, т.е. в итоге получится столько же по деньгам, но лучше
Смотрите, например у вас есть система, принимающая какие-то заказы. Так вот, по своему опыту скажу, что если даже из-за говнокода какие-то заказы будут с неверной информацией или что-то в этом роде, то бизнесу гораздо проще решить это через использование девочек на телефоне, нежным голоском успокаивающих клиента, чем тратить время на то, чтобы наводить порядок в коде вместо написания новых фич
Наконец-то кто сказал как работа работает
Я за качественный код. Я пока учусь в направлении front-end онлайн (хотя базовые навыки верстки HTML/CSS уже давно неплохие). До данного обучения я учился офлайн и чуть касался верстки в рамках веб-дизайна. Много спорил с преподавателем по офлайн обучению - по мне его код это говнокод. Мне было непонятно, что он много десятков лет верстает говнокодом, притом с частыми «!important» в CSS, и даже не парится. Для меня важна структура и куча правил, иначе меня бомбит. Для моего внутреннего равновесия, я скорее выберу второе. И для меня очень важен качественный опыт - не могу не стремиться стать профессионалом.. Но да, бизнес - есть бизнес. Классный ролик, теперь буду понимать этот нюанс (притом с меньшими нервами для себя). Для поиска работы, важная информация - помогло сложить в голове мою недавнюю пробу поучаствовать в стартапе по разработке соцсети (понял, что от меня ждали, и чего ждал я и почему не нашел).
Я даже больше скажу - так как JavaScript и его производные являются говноязыками, а всякие ангулары по своей сути являются говнофреймворками, то мне кажется на фронте вероятность написать не-говнокод стремится к нулю. Так что вы правы в оценке кода преподавателя - это должен быть говнокод, но и вы будете писать ковнокод, только другого сорта.
Препод юзает !important - это кринж))
разговоры о качестве кода могут начинаться с уровня мидла, ну ещё допускаю такие разговоры от очень опытных джунов в каких-то технологиях, но если ты учишься, то о качестве кода говорить рано
@@hunterxvov4ik Если ты учишься, о качестве твоего кода должны говорить тебе мидлы и синьоры. Так ты и научишься писать лучше со временем. Без практики можно вообще не смотреть ролики про хороший код.
@@hunterxvov4ik Обычно да - рано для начинающего говорить про качество кода. Если уточнить, то начинающему (1-3 года в процессе обучения и работы) трудно понять, что код плох (!). Но начинающие есть разного уровня. До начала нормального обучения я колупал сайты, на любительском уровне, много лет (на код первых моих работ без раздражения, действительно, не взглянешь - а ведь тогда я думал, что мой код неплох).
Другое дело - понимать, что код явно (!) плох. Еще круче понимать - что человек даже не стремится улучшать свой код. Если за много лет практики код «преподавателя-специалиста» все еще «говнокод», то ещё через много лет практики, чуда не произойдет - его код не станет «вдруг» лучше. Всегда видно, когда человек старается в своей области, и когда он остановился в развитии (типа «зачем?», «я итак крут»).
Работаю в 1С. Именно так это и работает - это база
взято из жизни, респект Сереге!
рассуждения от практика очень полезны, спс
главное идея, время и деньги, а говнокод сами сляпаем. Может потом и рефакторинг замутим. Сергей спасиб!! Ставлю класс
Наводить порядок - наше всё 😁
Супер, все именно так. Но с про нейминг нужно подробнее. Для примера. Часто советуют, что нужно писать что именно означает название переменной, функции и так далее. Но не все так просто. Если просто так делать, то появятся например сотни getPosts(). По сути итак ясно, что эта функция возвращает посты. Но непонятен контекст, и чем отличается от сотни других getPosts(). Вот нейминг и должен решать этот вопрос. Например, содержать в названии, к чем это относится, а не только что означает.
Добавь определение, каких posts. А ещё лучше - каких и с какими целями. Имя будет длиннее, но понятнее.
@@dobandvla если архитектура нормальная, то слишком длинное имя и не нужно. Функционал объекта ограничен родительским объектом.
Подход двух шапок... в одной шапке написал что бы работало, во второй шапке получаешь опыт от рефакторинга ))
18:36 про "забить на кодстайл" не согласен. Подключите линтер и претиер с любыми дефолтными настройками, например eslint-config-airbnb. Делается за 10 минут, ставите галочку в любимой ide применять линтер при сохранении файла и код автоматом приводиться к однообразному виду при каждом сохранении файла.
Ага, в Пыхе попробуйте... там сейчас по фэн-шую писать упаришься - это не так, то не то, здесь слишком длинно, там нет name spaces (для примитивного сайта это безумно важно!), тут еще какая-то фигня подчеркнулась красным. При этом все работает. Чистокодный маразм...
Во, то что нужно. Я вот тоже сейчас занят разработкой софта. И думаю продавать говно код или нет. Деньги то нужны и покрывать разработку нужно. И посмотреть востебована ли эта софтина или нет тоже нужно.
И по ходу я нашёл в этом видео ответ на этот вопрос. Благодарю 🤝
отлично :)
@@dobandvla Ну мои моральные принципы мне этого сделать на данный момент не позволяют. Да и я не хочу это делать.
Сергей, спасибо!
Это печально, так как рано или поздно количество архитектурных ошибок или просто ошибок превысит порог, после которого прога будет глючить, падать, вставать и опять лежать.
Особенно, если это касается красноглазной Java. 🙂
Корисна інформація ! Вдячний
Повністю згоден з вище сказаним. На 3 курсі почав працювати помічником адміністратора в державній структурі, там був просто клондайк коду, який просто неможливо було прочитати, все це було написано на php і найсмішніше що це був зовсім не сайт, а самописна серверна програма яка по суті керувала цілою бібліотекою, база даних майкрософт, все це хостилось локально, на системі windows xp server.
Одного разу коли адмін був у відпустці, перестала працювати вигрузка на сайт (з сайту на можна було подивитись список книг і які зараз доступні).
Коли я почав вникати в те як це все працює я зрозумів що це навіть не програма а бекенд для скриптів, де кожна функція була окремим файлом, а в інтерфейсі просто записаний шлях до скрипта в домашній дерикторії програми.
А самі скрипти були написані в рядочок, без табуляції просто реченнями.
Розкопувати це все в мене не було бажання, але згодом в логах сайту я помітив що проблема була в тому що на сайті оновилась версія php.
Я так і не зміг це побороти, але адмін коли прийшов з відпустки успішно написав якийсь скрипт і все запрацювало, що для мене на той час виглядало магією.
Какая красочный принт на футболке!)
Где заказать такую?
Сергей, что вы думаете про комментарии в исходном коде?
неистово плюсую, сам работаю на галере где много наговнокодили, но мне нравится это дерьмо исправлять, конечно и с нуля что-то пишется, но исправить чьё-то дерьмо и доказать самому себе, что я мастер кода всегда приятно)
Именно по этой причине, стараюсь выбирать стартапы, в которых качество кода критично: финансы, ИБ, блокчейн итд
Ибо в этой области, любая уязвимость и можно закрываться
Ага, конечно. Поэтому финансовые продукты сейчас пишут на PHP, а блокчейн на питоне. :)
Для банковского софта важно, чтобы работало, а не чистокодные рюшечки. Ну может быть фронтэндеры там фигней маются, а все остальным пишут, чтобы работало и всё. Древний банковский Дельфинарий не даст соврать.
@@vasiliigodunov1746 Прошу прощения, какие конкретно блокчейны пишут на Python? Их пишут на C++\Rust в 90% процентов случаев. А вот смарт-контракты пишут преимущественно на Solidity (like js) (ну редко на Vyper like python), но там мой тезис не менее правильный.
А сам ETH Foundation делают новый язык Rust like для тех же контрактов, сами задумайтесь почему.
Финансы я имел ввиду мировые, а там PHP я вижу крайне редко
@@alext5030 "Чистокодные рюшечки" - это кек конечно. Их же ради только красоты используют, глупые молодые программисты сойбои, а настоящие мужики пишут говнокод в легаси проекты "чтобы работало".
А вообще Банковский софт всегда легаси на легаси, но я говорил о стартапах. У них нет огромного техдолга и там оказывается, что теже самые архитекторы\программисты из банков умеют и любят писать чистый код! Любо дорого
@@alext5030 Делфи - няшка. Самый быстрый компилятор и все такое
Кодстайл лично авто-фиксится линтерами/ИДЕ-шкой одной комбинацией клавиш. Так что можно и с ним писать стартапы.
Хоспади, Сергей, я люблю Вас!
Я бы отметил что говнкодить можно, но архитектура проекта должна быть продуманной, а также делать упор на композиции, а не наследовании, по код стайлу можно использовать автоформат, который отформатирует проект, также линтеры тоже очень быстро настраиваются
Насчёт юнит-тестов. Соглашусь, не пишите их. Но... Иногда вы будете писать довольно сложные функции, работу которых вы просто не сможете проконтролировать, держа всё в голове. Та же рекурсия, например. Именно для таких редких функций можно написать юнит-тесты, либо любые другие тексты. Потому что ручное тестирование может оказаться более затратным по времени.
Тот случай, когда вещи настолько очевидные, что приходится их популярно объяснять :)
Это всё очень интересно, только специалист не может делать хреново, во первых это престиж, а во-вторых переделывать халтуру, в несколько раз сложнее чем сразу делать норм.
Не хочу быть пустозвоном, возьмите к примеру intel, они делают перспективный процессор на максималках, но из-за сложности производства он не всегда получается, по этому на рынок попадают кристаллы с заниженной характеристикой и это нормально.
Кстати интересно, что с похожей проблемой сейчас физики столкнулись. Что такое Стандартная Модель? Это целый зоопарк элементарных частиц. Физики даже шутят, что физика элементарных частиц стала похожа на ботанику! Это десяток физических констант, никак не связанных друг с другом (скорость света, постоянная Планка, гравитационная постоянная и тд). СМ - несвязанные друг с другом теории. Согласно договоренности, ТО используем для расчетов в макро-космосе (исходим из искривлений пространства под действием графитации). Для микроскопических явлений используем КМ. Удалось Фейнману связать КМ с электродинамикой и получил квантовую электродинамику). И даже у физиков появился соблазн все с нуля переписать!! Теория Струн - попытка переписать все заново от базового класса (струны). Но пока ни 1 одного экспериментального подтверждения существования струн (бран) не обнаружено за 40 лет, но теория красивая!)
писать плохой код выгодно,
пока твой код плохой ты нужен работодателю
как только код начинает работать без ошибок - ты не нужен...
конечно есть другой подход - постоянно выпускать обновения которые делают неприонамстаый код, ну какую то его часть...
Совсем не обязательно писать плохой код. Достаточно не выпускать вовремя все фичи, т.е. мы постоянно гонимся за фичами, которые просто горят.
Я своё первое наказание за неверный код получил на уроке информатики в союзе, когда на тот урок нужно было приходить в специальном белом халате в специальную комнату с большими жужжащими (кстати задумайтесь почему наоборот не звучит) компьютерами ,и на всё про всё давался час ,потом следующая группа.
Так вот учили мы тогда бейсик, програма должна была завершаться командой END .Было там какое-то ветвление, и я поставил END дважды, по окончании каждого, за что получил низкую оценку и объяснение что END ставят только один раз в конце..И вот на практическом уроке я назло ввёл ту программу с двумя END и всё таки отработало..
Приветствую. Я вообще нубас в АйТи. Но можно такой вопрос, почему выбираете ноутбук компании HP?
оптимальное цена\качество
Добавил бы про минимальное комментирование. Хотя бы для себя - через месяц даже автор без этого не вспомнит, что и зачем.
А вообще всё видео - длинный пересказ бородатой байки про двух программистов, где говнокодер потом разбился на авто )))
Есть проекты, в которых нельзя без чистого кода? Например, программа управления АЭС или отвечающая за испытание ракетных двигателей, стоимостью несколько миллионов долларов? Или очень сложные системы вроде систем машинного зрения, где нужно выжимать из железа все соки?
Я так понял он говорит про низкосортный малый бизнес или фриланс где у тебя есть 2 дня и ты пишешь говно код или я не знаю его мотивацию срать себе.
@@raymondxp4709 Так это 90% процентов всех работ для программиста.
Лет с пять назад одна контора провела аудит исходного кода разных бортовых систем тоёты. Общий вывод звучал примерно так: "от увиденного на наших лысинах фантомные волосы зашевелились"
Чистый код существует только в небольших проектах. Как только проект обрастает и усложняется, так сразу появляется говнокод. Почему мало кто любит легаси, потому что много гавнокода, но когда-то любое легаси начиналось со стартаппа и продуманной архитектуры, начиналось...
Спасибо😊 вы рассказали про очень важный момент в работе . У многих кодеров элитистов сейчкс икота😂
БРАВО!
Работал в большой конторе, где мы преводили в порядок говнокод, научился там многому, пытались днлать все по уму, по паттернам и чистому коду, а ппотом перешел в стартап и окунулся в говно. Сначала думал, что засучив рукава все перепишу, но текучки довольно много и на украшательства времени почти не остается. Боюсь растратить знаения и опыт по нормальному коду :/
По моему ТС немного путается в терминах: плохой код и непроверенный код - это разные вещи.
Ну насчет Интерфейсов можно поспорить. Интерфейсы (или абстрактные классы) нужны для полиморфизма (1 из 3 базовых принципов ООП). А полиморфизм нужен для расширяемости (масштабируемости) extended проекта. Для некоторых проектов это не надо. Мы спорили на собесе с 1 сеньером. Это сеньер утверждал, что полиморфизм вообще на фиг никому не нужен)). Тем не менее очень часто на собесах спрашивали отличие интерфейса от абстрактного класса. В любом случае это потом трудно будет рефакторить, если требование расширяемости появится. Представьте у вас куча похожих классов, но с совершенно разным нэймингом похожих методов.
То, что интерфейсы могут использоваться для реализации полиморфизма, не значит, что их нужно использовать до того, как появится реальная необходимость в полиморфизме.
И в 98% случаев она не появится.
Поэтому всё правильно говорят. Нужно писать максимально простой код, чтобы в будущем его было максимально просто рефакторить и не более того.
Собираюсь пробовать бэкенд. Так как можно удалённо и скорее всего меньше прямого общения с существами-клиентами
Тот случай, когда Сергей Немчинский учит программированию с точки зрения реального мира, где советует забить на все важные моменты.
Прям как с универе: "забудьте что было в школе" а потом на работе: "забудьте что было в универе!".
Я аналогично всегда считаю, сначала надо реализовать идею, а после допиливать и приводить в порядок.
У мя так одна очень полезная лично для меня программа в первоначальном состоянии с 2021 года пашет каждый день. Правда руки доходят только сейчас для ее правки в принципам ООП :)
По поводу конкретных советов: лет 10 назад эти советы были актуальны. Сейчас на той же самой джаве можно сразу писать нормально
Не забивать хер, а использовать коробочные вещи с конфигурацией по дефолту
Сергей, а что скажете касательно этого подхода, но применительно к автоматизации тестирования?
За Сергея не скажу, но выскажу мнение на своем опыте в АТ и разработке. Автотесты обычно начинают писать уже на довольно зрелых этапах развития системы, когда проект уже точно не стартап, его доработки тестируют вручную и это тестирование занимает довольно много времени. Тогда есть два варианта: 1)мануальщики начинают в автоматизацию и у них по неопытности может выходить только г*код б)код пишут более профессиональные автотестеры, то тут уже они могут писать что-то вменяемое. Но так как бизнес обычно требует полное покрытие тестами за максимально сжатые сроки и вводит какие-нибудь количественные метрики, то и тут код тестов будет далек от идеала. И дальше когда тесты становятся нестабильными или слишком медленными, все это приходится разгребать по новой.
Компания такого типа: много разных проектов но все используют 1 дизайн, набор компонентов. Я начал делать что-то вроде библиотеки (ну что-бы последующие проекты делать быстрее и проще), меня уволили потому что "слишком долго, мы не знаем чем ты занимаешься".
Решение потратить заметную кучку ресурсов на оформление общих либ - это уровень где-то техлида/архитектора. Если линейный васян вдруг забьет на решение бизнес-задач и пойдет пилить либы в надежде на светлое будущее, указание на дверь будет вполне справедливым.
Такое нужно делать в фоновом режиме. А если не получается делать потихоньку, а нужно всё и сразу, то это вряд ли будет хорошая библиотека.
@@redneck_prm5429 "Линейный Васян", я не знаю таких терминов. Не мог бы ты быть любезен, объяснить.
@@andyanderyan7078 наверное матрос на линейном корабле его величества ( ну или гребец на галере)
Ув. Сергей, как «по-научному» называется эта 2-фазовая методология? (Сначала быстро и коряво функциональность, затем внутренняя красота.) Имеется ли для нее английский термин?
Прототипирование
Я не пишу код, я работаю с blueprints в Unreal Engine и это чисто пет проект. В общем.. Говнокод (говноноды) говнонодами, но хотя бы я должен это читать. Обычно, когда полёт мысли я награмождаю месиво, а потом сижу. привожу его в вид, по которому я же сам на следующий день смогу понять что у меня здесь происходит и нормально отладить. Возможно было бы продуктивнее сразу делать относительно читаемо, чтобы на отладку требовалось меньше времени, но сложнааа. сразу идёт только более-менее вменяемый нейминг.
Классное видео
спасибо)
Мне повезло: я пришел на проект, который 7 лет на рынке и заказчики решились на переписывание (практически с 0)
"Переписывание" это зло. Переписывают обычно говнокодеры, которые хотят, чтобы их ещё год или два никто не трогал. В результате, обычно ничего путного не получается и продукт приходится закрывать.
Правильный подход - это модификация подсистем. Когда архитектура частично меняется за одну итерацию.
Комментарии к коду? В некоторых случаях очень помогают наводить порядок, но когда не актуальные могут навредить
Даже аутсорсовых компаниях, хороший синьор проектирует хорошо масштабируюмую архитектуру. Но, на тесты-таки приходится забивать
Не обязательно. Если писать через TDD (но без фанатизма), то это может ускорить разработку даже на самом начальном этапе. Тесты - довольно простая точка входа в функционал.
Поэтому на стартап и лучше брать программистов классом повыше - в их говнокоде потом намного проще навести порядок, а в особо запущенных случаях - он и говнокодом не будет )
Т.е. тратить больше денег на то, что возможно (на самом деле, с очень высокой долей вероятности) их не принесет?
@@nikvax
если не тратить, то на выходе будет нерабочий продукт. Который никому не впаришь.
Ничего не пробовал, но стоит поробовать
Здравствуйте, Сергей! Посоветуйте пожалуйста какие хорошие курсы можно пройти в России, я хотел записаться на ваш, но я из России (((
Если что, начал учиться с Питона
Хоть я и не Сергей, но можно попробовать бесплатный курс на степик точка орг.
Сергей не в курсе других стран