Однажды в США автоугонщики хотели угнать автомобиль с ручной коробкой передач. Но не смогли понять, как работает ручная коробка передач. Пришлось ретироваться.
Почему в очень многих резюме есть ГОВНОтребование: "Умение понимать чужой код" ??? Но я ни разу!!! не встречал требование "Уметь писать код так, чтобы его понимали другие" ?
Потому что приехав в Китай тебе придется понимать по китайски, а не переучивать всех говорить по русски. А если ты не способен прочесть код в котором скобочки пробельчики не так расставлены как ты привык, то пойди купи себе букварь и научись наконец читать.
советую не идти в такие конторы. история там была скорей всего такая: очередной умный оптимизитор менеджер-начальник решил экономить и нашел джуниора который сделал какашку за 20 000 рублей в месяц за 1 год, а теперь ищут тебя, который эту какашку будет поддерживать
@@damirgarifullin6877 Да в любое место , где пишут что нужно умение читать чужой код. Любйо человек умеет читать чужой код, но этим собщением они готовят к говнокоду, потому что какой-то умный начальник до тебя нанимал чухана за 10 000 рублей и он там наговнокодил, если бы изначально наняли норм программиста за 250 000 рублей то говна бы и не было в проекте
Скорее так: если у программиста есть столько времени, чтобы написать идеальный код, то вероятно его компания движется к банкротству, так как их конкуренты уже выходят на рынок с говнокодом.
Я могу сделать ревизию своего кода, который писал для себя 20 лет назад, и сделать вывод, что это не говнокод, хотя его можно было бы спроектировать лучше (сейчас я это понимаю чуть лучше), и я этот код всё еще понимаю. Но также понимаю, что его больше никто не поймёт, так как он содержит алгоритмы, чьё описание в книге я перечитывал несколько раз, чтобы начать понимать их. А понять эти же алгоритмы глядя в код просто невозможно - тяжёлая математика. И то что этот код никто не поймёт при любом способе написания и стиля - гарантированно. Но всё равно это не говнокод, а некоторое отсутствие документации, квалификации читающего, и т.п. Если бы я читал чьи-то алгоритмы из области генетики, то я бы также вряд ли что-то понял, но не потому что передо мной говнокод. Так что понятие говнокода относительно, и не определяется количеством WTF, а скорее временем и усилиями, которые читатель хочет потратить на изучение кода. Не хочет - говорит постоянно WTF, и объявляет всё говнокодом. Совершенно не корректный критерий.
Кстати да, очень бесит когда можно решить саму проблему довольно немножко переписав код, но программист решает просто дописать к ней костыль, а в будущем из-за этого костыля приходиться переделывать пол проекта))
То есть почти все паттерны проектирования xD. Модели событий, делегаты и прочие модные фишки). События в Сишном стиле более прямолинейны, зато любой поймёт код. В C# в достаточно сложной программе запрос идёт через дохрена интерфейсов и эвентов, но это называется разумным кодом. Любой open source проект на C читается вообще без проблем.
@@andrewvsk2368 Вот прямо 146% попадание. Наплодила банда четырёх "жабапрограммистов со знанием паттернов", теперь для того, чтобы два числа сложить они пишут фактори, делегаты, эвенты... А ещё где-то есть тайная книжка, которое плодит программистов однострочных функций: Read->ReadNumber->ReadNumberFromFile->ReadNumberFromTextFile->ReadNumberFromUTFEncodedTextFile.
@User 1 Ты , походу , не понял мой предыдущий комментарий , как и то , что должен был делать тот код. "Х -= -1" это равносильно тому, если бы ты написал x = x - (-1) т.е. по правилам математики х+1. Оператор -= это аналог X=X -... . Ты же написал про какую-то ерунду , к тому же в левой части у тебя должна стоять переменная. Т.е. Х . Никаких -Х , 2Х и т.д. + ко всему этому , ты пишешь почему не -х= -1. Да потому что в первом случае мы отнимаем минус единицу( прибавляем единицу), а твоя запись ( по крайней мере, так подразумевалось) делает Х постоянно равной 1
Годичной?) Возможно на джавах, но вот в чем-то более живом это в неделях и днях может измеряться) я часто ловлю себя на мысли что перед тем как ругаться лучше сразу посмотреть в гит блейм - там часто я, и не всегда несколько лет давности))
Не всегда и сильно зависит от языка. Например, на чистом C если не выделываться и работать с умом получается код на века. При этом любой проект на Java (который согласно пиар-компании должен упрощать код) превращается в дерьмо очень-очень быстро. Причём ООПшники порой полные неадекваты, задачи, которые решаются в 500 строк кода в одном файле они решают создавая дохрена классов и интерфейсов, реализуют паттерны (смысл которых чаще НЕ понимают, чем наоборот) и получается тормознутый монстр с массой потенциальных семантических ошибок). Это "добро пожаловать в реальный мир", на словах все идеально, на практике сами языки чаще способствуют порождению ПО из натурального дерьма.
Обожаю ваши видео. Очень мотивирующие и дающие не ИТ специалисту понять структуру в целом, а не только как быть гребцом на галере. Спасибо Вам огромное))
когда я однажды делаю проект, я ликую над кодом за красоту и лаконичность спустя год почти у всех проектах код называю говнокодом, переделываю, снова ликую за касоту и лаконичность и так циклически
Помнится, надо мне было внести изменения в код дипломной работы на C++/Qt, которую писал весной прошлого года. Первые часа два я не мог понять, что там происходит и под чем я был, когда писал этот код. Изучение джавы дало неплохой толчок по ООП и вообще, как всё должно быть. Теперь я пишу говнокод, но уже не настолько дурно пахнущий. :)
Я сейчас читаю книгу Элеонор Остром "Управление общим". Там описана интересная проблема, при которой все вроде и понимают, что нужно "делать правильно" и так будет "лучше для всех" в конечном итоге. Но никто не делает, поскольку "будет лучше" только в том случае если так будут делать все. А если не все, то больше всех пострадает тот, кто все же делает правильно. И мне кажется, что в вопросе "говнокода", который все осуждают и все равно пишут, эта идея тоже много объясняет. Чтобы написать код "понятный для других" зачастую нужно банально больше времени уделить его архитектуре, доводке, даже названия переменных возможно подберешь не с первого раза. Это лишняя работа и лишнее время. Которое сохранит время того программиста, который будет саппортить код после тебя. А оно ТЕБЕ надо? Особенно если учесть, что времени всегда не хватает и все такое, ведь начальную версию продукта нужно выпустить как можно быстрее. Это уже потом, когда продукт начал приносить прибыль, можно на эту прибыль жить и не спеша вылизывать код. Вот и получается, что ВСЕГДА проект пишется на говнокоде. А уже потом, возможно, будет поставлена задача привести код в порядок. Когда уже "все работает" и есть время перевести дух. Задачу эту возможно будешь ты и решать (хотя ты от своего говнокода страдаешь меньше и понимаешь его лучше), а возможно, ее будет решать уже кто-то другой.
Встречаю такую тему, что многие усложняют себе задачу или лепят весь код в один метод отчасти и на это есть проверки, но обычно такие (на размер метода) правила отключают. Короче KISS пацаны)
Когда вы смотрите на свой старый говнокод, вы понимаете, что растете. Да, согласен. НО понятие "говнокод" работает также в режиме реверса: когда вы (например новичок) смотрите на чужой более продвинутый код - он также кажется вам говнокодом. Или, иными словами, если вы могли бы посмотреть на свой код В БУДУЩЕМ - он также показался бы вам говнокодом. Философия. Всё течет, всё меняется, а на самом деле все изменения - лишь иллюзия, всё неизменно от говна к говну...
Для меня критерий хорошего кода один - этот код эволюционировать, т.е. его можно быстро менять перенастраивать, масштабировать. Все остальное не так важно, т.к. все остальное можно легко исправить. А написать такой код, который можно легко менять в соответсвии с новыми задачами - довольно сложно даже опытным программистам.
Во-во. Очень знакомое ощущение. Смотришь свой же код двух-трёхмесячной давности и думаешь иной раз, что да, сейчас я уже так не написал бы. И да, в программировании развиваться надо непрерывно. А то как получается, первые свои программы я писал, помню, для персоналки Hewlett-Packard 85 ещё в 1982 году. Там ещё операционки не было даже, просто Бейсик-монитор встроенный. И всё. А потом МИФИ, студент факультета Кибернетики. А там у нас вообще к старшим курсам было так - ну чего? Новый язык изучить? Паскаль у нас там не читали, Си не читали, сами брали книжку и изучали. Потом C++, потом уже в Штатах фирма послала всех своих программистов на недельные курсы основ Явы. Основы дали, дальше опять сами. И сейчас всё сами. А так что, на уровне 1982 года застрять, что ли? Нет, программирование и хорошо именно тем, что постоянно требуется развитие. Застрял - всё. Специфика профессии.
08:50 а если Вы видеоблогер, и не развиваетесь, меняйте профессию)) Это я к тому, что поначалу критиковал ваши видео, но теперь они мне нравятся всё больше и больше))
Зависит ли ЗП программиста и возможность его трудоустройства от возраста. Есть мнение, что возраст за 40 для программиста в странах СНГ уменьшает шансы рассмотрения его кандидатуры на вакансию и уменьшает уровень ЗП даже при наличии у него большего опыта. Так ли это?
Попробуйте один метод, никогда не говорить про себя что код плохой ( даже когда это не так ), никогда не говорить что задача сложная и всегда искать замены слову сложная на немного трудная, смотрите потом на результаты, часто за многими замечаю, как преувеличивают проблемы и слишком долго их обсуждают, вместо того что бы решить. Если вернуться к коду, все очень просто, читаете TDD, 1. Пишите тесты 2. Пишите код 3. Запускаете тесты 4. Удачно поздравляю конец, нет, повторить 2 - 3 пункт до успеха. Тоже самое при рефакторинге. Любой такой код не будет страшен, когда он протестирован, а без тестов, вы можете сделать даже хуже.
@@МайкЛжец-ь6ж как жсер скажу, что нифига подобного, хрен бы сним что либы и фреймы совершенствуются постоянно, сам жс в 2015 году выкатил ес6, который неплохо так поменял подход
Любой проект на C# или Java - это обфускация). Никто даже о декомпиляции не парится никогда, т.к. читать этот говнокод - неблагодарное дело. Это по определению write-only. Это одна из причин, почему чистый C до сих пор жив и жив будет и почему даже современные либы пишут именно на C. В защиту C# (на Java не пишу, но та же фигня) - быстрота и удобство на первых порах. То есть очень круто прототипировать приложения, которые почти сразу будут работать, т.к. дофига инструментов доступны из коробки и чаще работают, чем нет), но поддерживать код на C# - это ХУЖЕ, чем поддержка бородатого сишного кода стандарта с89 c *бнутыми структурами данных и стилем.
Недели 2 назад начал изучать пайтон, писал простые коды по заданиям по курсам.. прошёл пару теорий, заданий.. решил закрепить материал и вернулся назад и заметил свои старые коды написанные в 5-10 строк и просто переписал их на более понятный лад и в 2-3 строки.
Посмотрев это видео, я понял что нужно писать для себя и пробовать новые проекты реализовывать самому. Ковыряться в чужих гавно-кодах и работать за копейки добавляя функционал в говно. Просто шикарная перспектива.......
Говнокод - это сленг у программистов, этого достаточно для новичков, когда я начинал в вебе, я многого не понимал в коде, чужих проектов, при этом написаны они были не плохо, просто мой уровень знаний не позволял понять этого. Спустя какое то время, я оценил чужой код, и понял, что он простой и понятный. Поэтому не переживайте, если ваш код считают гавном, просто старайтесь и делайте свой код лучше и лучше. Пределу совершенства нет для кода, его можно всю жизнь делать идеальным=)
резюме: кто учится писать код - даже не пытайтесь, обгадят с ног до головы, потому что начальное условие входа в it - ты говнокодер. и только когда ты наберешься опыта ты сможешь так же гадить на голову остальным. действительно сообщество программистов мотивирует и поддерживает.
Последнее время стал постоянно придерживаться позиции, что код должен выглядеть близким к человеческой речи. Читая код должно быть сразу понятно как это работает (с учётом того, что читатель разбирается в предметной области). Тогда такой код можно значительно быстрее модифицировать
Абсолютно согласен. Только некоторые критические участки приходится оптимизировать (по скорости) и тогда ясность страдает, но обычно стараешся комперсировать комментариями
К сожалению, существует способ сделать очень понятный код, но тем не менее WTF будет раздаваться при его чтении постоянно. Сделать код слишком длинным. То есть никакой универсальности, минимум абстракций - все вопросы решать тупо лоб и делать очень много копипасты. Такой код поймет даже школьник. Но почти любой программист оказавшись где-нибудь на 4056-й его строке, будет материться сильнее, чем от любой сложности говнокода. У меня сейчас как раз такая задача. Через неделю уже сдавать проект, а его явно писали дети. Сижу и часами читаю сочинения "как я провел лето". Это ужасно.
Если код на уровне "как я провел лето" - это прекрасно. Просто задачи-то решаются сложные. И поэтому "решение в лоб" с точки зрения языка зачастую подразумевает довольно запутанный алгоритм с точки зрения логической. И просто написанный код перестает быть простым для понимания. Такой вот парадокс.
@@alexperemey6046 Когда он занимает тысячи строк? А бывает и больше - я видел 16К только на форме. Оченама сложный там у этой формы интерфейс, видимо. Что в этом прекрасного-то? Я не нанимался днями и неделями читать детские каракули. ))) Сложная задача требует сложной структуры абстракций. А когда кодеры в такое не могут - они и начинают гнать строку. Решая задачу в лоб - то есть по принципу, "что вижу, то пою". Куча тупорылых циклов и условий в общем. Скопипасченных много раз с небольшими изменениями для разных вводных. Огромная, почти бесконечная куча - уснешь на первой трети уже. И иногда у них это, к сожалению, даже работает.
Здравствуйте! Есть вопрос к вам Как лучше писать код: 1) максимально подробно и понятно каждому (но код будет длинным) 2) максимально кратко и эффективно (код будет коротким, но порой непонятным с первого взгляда) Или все же какой-то баланс держать лучше? Я только начинающий)
Я бы еще добавил, что до сих пор нет ни одного стека технологий, который бы позволял написать простое продаваемое приложение без говнокода или кучи костылей. Но технологии развиваются и возможно скоро будут изобретены инструменты которые пройдут этот критерий. И тогда, навреное, можно будет сказать что программирование - это просто. Потому что основная сложность программирования сейчас - это как написать казалось бы простую вещь без костылей.
Говнокод - это код который сложно поддерживать, он не обязательно сложночитаемый. Например, если в коде полно копипейста - в нём можно легко разобраться, но при поддержке придётся менять одну вещь в 10 местах. И наоборот, если в общий метод выносится то, что общим быть не должно - любые правки этого метода будут вызывать баги в неожиданных местах. Вот пара примеров говнокода в копилочку :)
Меня научил писать хорошо форматированный код мой приятель лет так 25 назад. Когда я гордо ему показал работающую программу на паскале или бейсике но она была написана в одну строчку здоровым слипшимся куском текста. :)) Он посмотрел и сказал - что это за херня, ничего не понятно. И я призадумался. С тех пор пишу с четким форматированием, осмысленными именами переменных и комментированием всего. Потому что на задворках всегда мысль - а ведь это кто-то может потом читать и будет ли ему понятно.
Я тут на одном проекте пытался делать инъекцию говнокода , но старшие товарищи мешали, зато уже опытным проггерам не мешал никто, и они этим не часто, но регулярно пользовались. Ещё там же забавно появлялось то, что компания всем подряд не оплачивала идею ультимейт (я за свои кровные купил), в ультимейт есть анализатор кода, который периодически выдавал варнинги типа: твоя переменная будет всегда false, можешь не проверять. Или друг, ты же тремя строчками назад проверял на null, зачем ещё раз?
01:51 ха, сейчас работаю в фирме, и много проектов пишем с нуля. легаси мало и ими никто не занимается. в будущем скорее всего их перепишем на новых технологиях
А как быть в случаях когда для сохранения производительности или экономии памяти приходиться жертвовать удобочитаемостью? Напр. запихать в одну переменную некоторое количество разных булевых значений чтобы не тратить байт на хранение только одного тру или фолс.
Это не экономия, это - говно. Я бы еще мог понять если бы у тебя проект был на СПП, который имел местами вставки из ассемблера (что сейчас уже не критично). Но то что ты описал - это говно. Давай угадаю: у тебя еще и работа есть где ты числишься перспективным разработчиком?:)))))))))))))
Joe Doe то что я описал является весьма полезной вещью при программировании микроконтроллеров. Иногда без этого тупо нельзя обойтись. Например при передаче данных через радиомодули которые могут передать байтов очень мало (за некоторый промежуток времени). У меня кстати есть видос на канале про ардуино и радиомодули.
@@JoeDoe-wr9bu В критичных местах среда позволяет это вставить а в остальных просто нет смысла заморачиваться. И обычно я свой код понимаю спустя много времени без WTF благодаря высокоуровневости большей части написанного. Как вы думаете что будет если всё писать на ассемблере? Насколько будет лучше и понятнее?
@@AkkayHT228 я боюсь, что тут немного проще =) Тот лендинг не нуждался ни в Laravel, ни в Angular, но если продать такой стек, выйдет дороже =) Вот и всё, а то что потом почти невозможно саппортить такие проекты, это уже совершенно другой вопрос
Потому что саппорт не знает ангулар. Другой причины я придумать не могу, почему фреймворк может вызывать боль на простом лендинге. Я понимаю, почему он может вызывать боль на сложном проекте, где вылезают его недостатки и недоработки. Но боль на лендинге?
Кроме читабельности есть ещё несколько критериев качества кода. Масштабируемость, производительность, требовательность к ресурсам. Это вещи, казалось бы очевидные (на первом курсе учат), но частенько приходится подумать как все это увязать.
Alexander Bozhko масштабируемость это уже про чистую архитектуру, а не про чистый код, то же самое с оптимизациями, но чистый код лучше производительного)
Да нормальное будущее. Все известные фреймворки будут жить ещё максимально долго. Например laravel и symfony или же YII2, всё так же востребованы весьма на рынке.
Сергей, сорян за оффтоп) На канале находил видео, которое отложил на посмотреть позже и потерял, теперь найти не могу. Прошу помочь. Видео было связано с проблемой начинания ч-л и рассматривалась методология преодоления этой проблемы.
Исходя из опыта, любой код = говнокод в той или иной степени. Причем один и тот же код в один момент времени для одного говнокод, для другого - совершенство. Тут очень много субъективщины. Как минимум в команде нужны правила, т.к. общепринятые правила имеют кучу допущений, и даже меняются. Пример - приватные поля класса в С#.
Говновнокода как и кода который поймет сопожник не существует. Если человек жалуется на запутаность или неправильность отступов, названий переменных это и есть говнокодер. Как правило проект не может состоять из 10 строчек. Неважно как ситема создана. Если система работает. Значит она првильная. Бери и дорабатывай ее но нефиг гнать что она плохая. Посути эра когда все програмисты были матиматиками прошла. Сейчас прогоамист без ВО в 26 может быть лучьшим в своем роде за быстроту принятия решений и эфективность. Чем человек который полдня ноет и месяц тратит на правильные пробелы. Время + эфиктивность равно деньги.
Быстро наговнокодил сейчас (главное работает) - потратишь кучу времени потом на внесение изменений и развитие системы. Но я смотрю многих не волнует что их говно будет разгребать кто-то другой.
@@Денис-р5о3з У меня все проекты это трешь, но я не ною, самый сложный это был и есть проект который делали до меня куча фриленсоров. Они просто создавали папочку и туда пихали свои фичи. Но я не называю его говнокодом. Он работает. Да пришлось потратить полтора месяца на изучение закономерностей. Но это не бида. Вот где было сложно это highload бэкенд на node. В день общее это милион ка трафика. Код был идеален но это не спасло от круглосуточной работы. Без выходных. Партнеров много и не все лили то что было предусмотрено стандартом. И тут и деньги уже не милы, хотелось просто забыть обовсем.
Захожу на канал, чтобы с удовольствием послушать рассказчика! 8) По теме. Еще немаловажный эффект оказывает владение темой, на которую пишется код. Даже гений не сможет понять смысл кода, если он не в теме и код для него будет Г.
Как раз наоборот, через качественно написанный код он познакомится с темой. Другое дело, что если в коде будет ошибка бизнес-процесса, он ее конечно не увидит. Поскольку не владеет процессом и не знает, как он правильно должен работать.
*10 (говнокод) ruclips.net/video/vxXiyPgpT1Y/видео.html #конспСНП 2- трудно прочитать и понять (по именам переменных и методов и классов - что они делают и для чего). 5- при обучении языку после изучения его конструкции найти методичку по правилам пользования языком (какими буквами называть элемены кода, их расположение, отступы и т.п.) по запросу "язык кодстайл".
"И Ваш код никогда не заслужит название говнокода". .Ну Фоооокс))) Ситуация простая, каждый раз когда ты срочно в угоду заказчику делаешь костыли нужно просто ставить тэг: "Guanocode" .. и раз в неделю рефакториться. Совсем не писать говнокод заказчик скорее всего не позволит. Ну или недостаточно квалифицированные РП, работающие с заказчиками.
Сергей, здравствуйте. Я начинающий программист. На данный момент учу С++. Пока что пишу небольшие консольные приложения, где весь "проект" состоит из одного файла. И я не понимаю, как организованы настоящие проекты, как они работают... Не могли бы вы разъяснить разницу между консольными приложениями, и большими проектами?
@@sashaprokipchuk4185 Большую задачу невозможно решить без декомпозиции. Будь то на процедуры, на классы, на модули, на что угодно. Декомпозиция - разбиение большой задачи на более мелкие. Ну к примеру, вам нужно написать программу, в которую вводится много данных, потому по ним просчитывается какая-нибудь статистика, и выводится в виде графика. И, грубо говоря, в файле input.cpp у вас функции для ввода данных, в файле statistics.cpp - просчёт, в файле diagram.cpp рисуются диаграммы. И какой-нибудь файл main.cpp дёргает в нужное время функции из других файлов. Это очень грубо и упрощённо. Если возникают такие вопросы, значит вы ещё не дошли до таких разделов, как заголовочные файлы, компоновка и т.п., и видео эти вам пока смотреть рано. Эти видео Сергея для программистов, которые уже готовы устроиться на работу, хотя бы джуниором.
Да, вот я всегда стараюсь свой код делать понятным, если это Java, ещё и внятный Javadoc делать к нему. А иначе потом сам недели через две посмотришь и "блин, а зачем вот это?". Не говоря уж о других программистах, которые могут этот код потом пытаться понять.
Я просто не обращаю внимания. Есть задача - исправить это, добавить то, вот тут. Делаю. Не получается иначе как костылём? Пишу костыль. Одним больше, одним меньше.. При этом понятия не имею как программа работает в целом. Т.к. это ведомо только тем, кто все это писал. А их судя по коммитам было с десяток.
Сережа, пока ты здесь, в одном из видео ты рассказывал что у тебя на курсах первое тестовое задание непростое, можно пример какую прожку надо написать? Просто подумываю пойти учиться но не хочется приходить совсем лошарой😁так сказать сам оценю свои нынешние способности😉заранее спасибо
у говно кода есть история возникновения. какой-то важный иностраный тип стоявший у истоков - чем-то занимался. и не знал как правильно назвать определенное явление. у него родились дети. и он какбы "не такой код" сравнил с "детскими фекалиями", "вонючими пеленками" +- Без явной говно-агрессии. А в последствии когда оно вращалось в комьюнити на какой-то конференции - они это исказили до говно кода. Изначально это типа "smell " - ну короче плохо пахнет, а также "детский код"
Сергей, расскажите, пожалуйста, о salesforce разработке. Что это и с чем его едят. На сколько перспективно с этим связываться, ваше мнение. Это ж вроде к java относится. Спасибо заранее!
Время программиста стоит дороже времени компьютера. Железки сейчас достаточно мощные. Если это не какая-то особо требовательная задача или особенно слабое железо, то читаемость в приоритете.
Спасибо за советы, вроде хорошие, но не ко всем языкам применимы, например C++ я не нашёл единого стандарта кодирования, у всех свой стандарт, кто-то использует гугловский стандарт, кто-то косит под STL и не понятно будет для начинающих программистов какой же стиль всё таки предпочтительный.
А можно ли считать говнокодом, много лишнего кода, где можно было бы обойтись более коротким вариантом кода? Например банальное применение if/else, где вполне подходит switch (). Ну или я вот читал книгу по этой теме. Где рекомендуется чтобы в одном модуле было не более 25 строк (Идиально). Ну максимум до 50 строк в один модуль. Говорят, что это не только оптимизация, но и увеличение степень обслуживаемости кода. Читабельность.
Жиза) Все верно сказано. Возвращаюсь к своему коду и WTFакаю .... who did this щет)))) А потом, ой этой был я со своей супер-пупер неразширяемой архитектурой.
Задам вопрос всем шарящим. Я молодой программист, учусь на магистратуре, за плечами 4 года бакалаврата и пару-тройку языков программирования на каком-то уровне. Уже вроде пора и на работу, но без опыта никуда не берут, поэтому пришлось идти не куда хочу, а куда возьмут. Ну и попал в компанию которая разрабатывает на делфи. Задачи не сильно интересные, но в качестве опыта неплохо. Так вот спустя пару месяцев понял чего хочу сейчас: в геймдев. Но сначала нужно хотя бы годик наработать и выучить нужный язык... А нужный это какой? На чём сейчас пишут геймдевелоперы? Слышал раньше что на плюсах... Только не кидайтесь помидорами пожалуйста.
Кроме языка в геймдеве надо хорошо знать движок на котором будешь прогать, потому что он напрямую влияет на твой код. В каждом движке есть свои особенности которые нужно учитывать при написании кода. Одного языка будет недостаточно, это мягко сказать.
При словах "до финиша профессии" поперхнулся чаем. А разве это не та профессия, которая закончится с жизнью? Это же не пилот, или пожарный, где есть определенные физ. кондиции, без которых ты не можешь выполнять свою работу. А тут пиши код, пока не рипнешся, если конечно тебе твоя работа нравится. А если не нравится, то зачем вообще было идти в ИТ
Это не тот, что ругается на delete p; printf("%P ", p); ? Какое им дело до invalid pointer p? Такие тулы глубоко копать не станут. Часто ругают что-то очевидно не по делу.
создал игру на Пайтон + библиотека tkinter, это был обычный кликер с прокачкой. буквально спустя пару месяцев, я решил заглянуть туда, что оказалось зря, короче там было такое дерьмище, плюс ещё и повторение кода. надеюсь вы знаете, что меня ждёт...
Слишком шаблонно и однобоко по поводу понятности кода. Частенько бывает так, что ваш код может понять очень крутой программист, так как он знает архитектуру и паттерны. А вот джуниоры не понимают, и херачат костыли там, где есть доступное API. При этом они свой код считают простым и понятным, что в конце концов выливается в тяжелейший рефакторинг, потому что изначально джуниорам влом заниматься нормальным проектированием, ибо на их взгляд это сложно и вредно.
Это конечно хорошая мысль, что говнокод - это код, который трудно понять другому человеку. Но тогда возникает вопрос - какому конкретно человеку? Новичку обычно вообще ничего не понятно, и вряд ли он может справедливо весь чужой код называть говнокодом. Следовательно, должна быть какая-то граница, переходя которую программист обретает моральное право более-менее справедливо классифицировать тот или иной код как говнокод. Дальше, другая ситуация - уважаемый программист не первый десяток лет в профессии, считает себя слишком опытным и достаточно крутым, чтобы не учить паттерны. И вот однажды он видит код более молодого специалиста, который применяет паттерны, не понимает этот код и называет его говнокодом. Опять какая-то не очень адекватная оценка выходит... Получается, хоть "говнокод" и относится к вкусовщине, должны быть какие-то хотя бы минимальные требования к эксперту, который оценивает код и выносит этот вердикт. И тогда мы переходим к еще одному каверзному вопросу - кто имеет моральное право составить список требований, которым должен соответствовать эксперт? Вот и получается, что вроде как говнокод и существует, а на деле это сферический конь в вакууме. Вот есть паттерны, и все согласны, что они полезны и удобны. А удастся ли кому-то написать книгу о говнокоде, с конкретными примерами, да такими, чтобы ни у одного читателя не возникла мысль "а чего, нормальный же код, он имеет право на жизнь"?
Не первый десяток лет в профессии, и не смог оценить паттерн? Вы вообще паттерны видели? Они как бы полностью состоят из базовых концепций ООП, если программист работал 10 лет и не смог понять паттерн, то он работал с Excel. Другой вопрос - а уместно было вообще его использовать? Если молодой программист перегрузил код, напихав туда бездумно паттерны с фреймворками, то это и будет говнокодом. Применение любого кода должно быть прежде всего УМЕСТНО, а иначе стрельба себе по ногам.
Попробуйте чистый C. Не C++, а именно C. Если втянитесь, внезапно окажется, что 90% "современных" приёмов - бесполезное дерьмо, только усложняющее код и тормозящее его работу сотнями дебильных переадресаций, и где брутально-тупой конечный автомат решил бы проблему в разы проще и быстрее. Сам сейчас присматриваюсь к Rust, хотя он медленно взлетает.
@@kardashevr далеко, + не факт что за Растом будущее. Rust хороший язык, но он не очень хорошо интегрируется с C. C живёт вовсе не потому что это самый быстрый язык (не считая нативного ASM), а потому что это самый простой язык и эффективный язык. + Когда человек пишет на C достаточно сложную программу, он автоматически реализует многие устоявшиеся паттерны проектирования из ООП. В C нет наследования, все абстракции реализуются композициями из структур и функций. Сокрытие создаётся средствами языка: правилами области видимости. Фабрика - это неотъемлемая часть даже маленькой программы на C, т.к. нам нужно всегда правильно создавать и удалять структуры данных. В результате человек, пишущий на C вообще никогда не допустит тех ошибок, с которыми могут столкнуться программисты на Java, при этом Java декларирует высокую скорость разработки! Высокая скорость только там, где ПО можно собрать из встроенного говна. В противном случае C эффективнее. И кстати ещё об ООП - C++, Java, C# - это НЕ ООП. Ни в одном языке не реализуется парадигма "всё объект", а отправка сообщений реализуется не средствами языка, а средствами костылей. Сами языки, если убрать всё лишнее просто надстройка над обычным императивным методом программирования, некоторые из которых скорее даже вредны! Например, в любой книге по паттернам очень критикуется Наследование, а ведь это один из столпов ООП (в отличие от инкапсуляции и полиморфизма, которые ООП просто присвоило себе, полиморфизм есть в любой большой программе! его можно реализовать на С, причём даже несколькими способами! (определение типов или указателями на функцию). В C# наследование используется ради перегрузки методов, ради последующего полиморфизма (и даже это не всегда хорошая идея) (это могут быть интерфейсы или абстрактные классы). Другое применение наследования уже вообще гарантировано создаёт говнокод. То есть как всегда: придумали, пропиарили, написали эксабайты говнокода, а теперь думаем что с этим делать.
С клин кодом согласен! Но! Любой код _ это интеллектуальная собственность! И это важно, если тебе платят по контракту , не оценивая твой труд! Так почему я кому то должен отдавать свой труд??? Если мой последователь так крут- пусть разбирается! Я за клин код, если платят за клин код и мою интеллектуальную собственность!!!
Со всем согласен, но... Когда "...и заказчик-дурак тычет мышкой в картиночки гордо..." - от этого почему-то становится горько. К слову. Языки вроде Python и Ruby буквально принуждают к правильному оформлению кода.
*Однажды злодеи решили украсть мой код, но не смогли его прочитать. Один сразу выпрыгнул в окно, второй успел выколоть себе глаза.*
Однажды в США автоугонщики хотели угнать автомобиль с ручной коробкой передач. Но не смогли понять, как работает ручная коробка передач. Пришлось ретироваться.
@Олег Сухетский меньше бы таких как вы)) простое делаете сложным
А третий всё время повторял WTF
@@TheGloriousRussian *А третий с тех пор непрерывно повторяет WTF.
Вполне тянет на статью "доведение до самоубийства", аккуратнее 😁
Почему в очень многих резюме есть ГОВНОтребование: "Умение понимать чужой код" ??? Но я ни разу!!! не встречал требование "Уметь писать код так, чтобы его понимали другие" ?
Потому что приехав в Китай тебе придется понимать по китайски, а не переучивать всех говорить по русски. А если ты не способен прочесть код в котором скобочки пробельчики не так расставлены как ты привык, то пойди купи себе букварь и научись наконец читать.
У JetBrains есть в вакансии такое: "Умеешь проектировать и писать код, который легко читать и поддерживать."
советую не идти в такие конторы. история там была скорей всего такая: очередной умный оптимизитор менеджер-начальник решил экономить и нашел джуниора который сделал какашку за 20 000 рублей в месяц за 1 год, а теперь ищут тебя, который эту какашку будет поддерживать
@@ivansidorov5 в jetbrains?
@@damirgarifullin6877 Да в любое место , где пишут что нужно умение читать чужой код. Любйо человек умеет читать чужой код, но этим собщением они готовят к говнокоду, потому что какой-то умный начальник до тебя нанимал чухана за 10 000 рублей и он там наговнокодил, если бы изначально наняли норм программиста за 250 000 рублей то говна бы и не было в проекте
Согласен с автором, но все же, иногда нужно насрать, чтобы вырос цветок
Ты сделал мой день ))
Это ты про удобрение?))))
Скорее так: если у программиста есть столько времени, чтобы написать идеальный код, то вероятно его компания движется к банкротству, так как их конкуренты уже выходят на рынок с говнокодом.
По этому в Пайтоне срать нужно очень акуратно, а в СосиДваПлюса или Джузи можно одной длинной
Вчера я делал ревизию своего первого андроид-проекта. Который писал еще в 15-16м году. И я понял, что такое говнокод ))
теперешний лет через 5 посмотришь ;)
Радуйтесь - ведь это значит, что вы выросли в профессиональном плане.
Порой смотришь в код месячной давности, а там такая жуть и ты не понимаешь зачем ты это написал)
Я свой первый андроид-проект переписывал 3 или 4 раза. Там просторов для косяков уйма, это да.
Я могу сделать ревизию своего кода, который писал для себя 20 лет назад, и сделать вывод, что это не говнокод, хотя его можно было бы спроектировать лучше (сейчас я это понимаю чуть лучше), и я этот код всё еще понимаю. Но также понимаю, что его больше никто не поймёт, так как он содержит алгоритмы, чьё описание в книге я перечитывал несколько раз, чтобы начать понимать их. А понять эти же алгоритмы глядя в код просто невозможно - тяжёлая математика. И то что этот код никто не поймёт при любом способе написания и стиля - гарантированно. Но всё равно это не говнокод, а некоторое отсутствие документации, квалификации читающего, и т.п.
Если бы я читал чьи-то алгоритмы из области генетики, то я бы также вряд ли что-то понял, но не потому что передо мной говнокод. Так что понятие говнокода относительно, и не определяется количеством WTF, а скорее временем и усилиями, которые читатель хочет потратить на изучение кода. Не хочет - говорит постоянно WTF, и объявляет всё говнокодом. Совершенно не корректный критерий.
Говнокод это не только плохой кодСтайл или нечитаемый код, а и вполне красивые и читаемые костыли)
Кстати да, очень бесит когда можно решить саму проблему довольно немножко переписав код, но программист решает просто дописать к ней костыль, а в будущем из-за этого костыля приходиться переделывать пол проекта))
да, безусловно. Но это по правилу Паретто
То есть почти все паттерны проектирования xD. Модели событий, делегаты и прочие модные фишки). События в Сишном стиле более прямолинейны, зато любой поймёт код. В C# в достаточно сложной программе запрос идёт через дохрена интерфейсов и эвентов, но это называется разумным кодом. Любой open source проект на C читается вообще без проблем.
@@webget1596 не мы такие, жизнь такая)))
@@andrewvsk2368 Вот прямо 146% попадание. Наплодила банда четырёх "жабапрограммистов со знанием паттернов", теперь для того, чтобы два числа сложить они пишут фактори, делегаты, эвенты... А ещё где-то есть тайная книжка, которое плодит программистов однострочных функций: Read->ReadNumber->ReadNumberFromFile->ReadNumberFromTextFile->ReadNumberFromUTFEncodedTextFile.
После просмотра 20 роликов Немчинского стал senior Java developer, Очень годно.
серьезно? :)
А коллеги и руководство в курсе? 😃
лох, я президентом стал уже после 8го ролика
Я после 5-го ролика познал дзен и ушёл в тибетский монастырь.
Я после первого ролика посмотрел второй. А чего добился ты ?
x -= -1
вот именно :) Даже я завис секунд на 5. Не надо так :)
Ништяк. Буду теперь так инкрементить)
Это, типа, лайк поставил?
@User 1 это операция прибавления единицы к переменной х, только замысловатым и нецелесообразным способом( иначе говоря, через задницу) .
@User 1 Ты , походу , не понял мой предыдущий комментарий , как и то , что должен был делать тот код. "Х -= -1" это равносильно тому, если бы ты написал x = x - (-1) т.е. по правилам математики х+1. Оператор -= это аналог X=X -... . Ты же написал про какую-то ерунду , к тому же в левой части у тебя должна стоять переменная. Т.е. Х . Никаких -Х , 2Х и т.д. + ко всему этому , ты пишешь почему не -х= -1. Да потому что в первом случае мы отнимаем минус единицу( прибавляем единицу), а твоя запись ( по крайней мере, так подразумевалось) делает Х постоянно равной 1
Любой чужой код говнокод.
И даже свой код годичной давности и дальше тоже говнокод.
Годичной?) Возможно на джавах, но вот в чем-то более живом это в неделях и днях может измеряться) я часто ловлю себя на мысли что перед тем как ругаться лучше сразу посмотреть в гит блейм - там часто я, и не всегда несколько лет давности))
Не всегда и сильно зависит от языка. Например, на чистом C если не выделываться и работать с умом получается код на века. При этом любой проект на Java (который согласно пиар-компании должен упрощать код) превращается в дерьмо очень-очень быстро. Причём ООПшники порой полные неадекваты, задачи, которые решаются в 500 строк кода в одном файле они решают создавая дохрена классов и интерфейсов, реализуют паттерны (смысл которых чаще НЕ понимают, чем наоборот) и получается тормознутый монстр с массой потенциальных семантических ошибок). Это "добро пожаловать в реальный мир", на словах все идеально, на практике сами языки чаще способствуют порождению ПО из натурального дерьма.
Seregi? ja seregi kod ludshe dazhe ne verstaju...zabyl, napisal na novo..poreshaesh srazu kuchu zadacz.
согласен. и английский язык тоже вонючее гавно. читается одно, а произносится другое
Обожаю ваши видео. Очень мотивирующие и дающие не ИТ специалисту понять структуру в целом, а не только как быть гребцом на галере. Спасибо Вам огромное))
когда я однажды делаю проект, я ликую над кодом за красоту и лаконичность
спустя год почти у всех проектах код называю говнокодом, переделываю, снова ликую за касоту и лаконичность
и так циклически
отлично, значит - растете
Помнится, надо мне было внести изменения в код дипломной работы на C++/Qt, которую писал весной прошлого года. Первые часа два я не мог понять, что там происходит и под чем я был, когда писал этот код.
Изучение джавы дало неплохой толчок по ООП и вообще, как всё должно быть. Теперь я пишу говнокод, но уже не настолько дурно пахнущий. :)
ну как же приятно Серея слушать)
пасиба :)
Серей это кто? (Who?)
@@malikvalley это деепричастие
Я сейчас читаю книгу Элеонор Остром "Управление общим". Там описана интересная проблема, при которой все вроде и понимают, что нужно "делать правильно" и так будет "лучше для всех" в конечном итоге. Но никто не делает, поскольку "будет лучше" только в том случае если так будут делать все. А если не все, то больше всех пострадает тот, кто все же делает правильно.
И мне кажется, что в вопросе "говнокода", который все осуждают и все равно пишут, эта идея тоже много объясняет. Чтобы написать код "понятный для других" зачастую нужно банально больше времени уделить его архитектуре, доводке, даже названия переменных возможно подберешь не с первого раза. Это лишняя работа и лишнее время. Которое сохранит время того программиста, который будет саппортить код после тебя. А оно ТЕБЕ надо? Особенно если учесть, что времени всегда не хватает и все такое, ведь начальную версию продукта нужно выпустить как можно быстрее. Это уже потом, когда продукт начал приносить прибыль, можно на эту прибыль жить и не спеша вылизывать код.
Вот и получается, что ВСЕГДА проект пишется на говнокоде. А уже потом, возможно, будет поставлена задача привести код в порядок. Когда уже "все работает" и есть время перевести дух. Задачу эту возможно будешь ты и решать (хотя ты от своего говнокода страдаешь меньше и понимаешь его лучше), а возможно, ее будет решать уже кто-то другой.
Вы самый топовый ментор! И умный и с чувством юмора!
спасибо!
Встречаю такую тему, что многие усложняют себе задачу или лепят весь код в один метод отчасти и на это есть проверки, но обычно такие (на размер метода) правила отключают. Короче KISS пацаны)
Когда вы смотрите на свой старый говнокод, вы понимаете, что растете. Да, согласен. НО понятие "говнокод" работает также в режиме реверса: когда вы (например новичок) смотрите на чужой более продвинутый код - он также кажется вам говнокодом. Или, иными словами, если вы могли бы посмотреть на свой код В БУДУЩЕМ - он также показался бы вам говнокодом. Философия. Всё течет, всё меняется, а на самом деле все изменения - лишь иллюзия, всё неизменно от говна к говну...
ахахаха
Для меня критерий хорошего кода один - этот код эволюционировать, т.е. его можно быстро менять перенастраивать, масштабировать. Все остальное не так важно, т.к. все остальное можно легко исправить. А написать такой код, который можно легко менять в соответсвии с новыми задачами - довольно сложно даже опытным программистам.
Во-во. Очень знакомое ощущение. Смотришь свой же код двух-трёхмесячной давности и думаешь иной раз, что да, сейчас я уже так не написал бы. И да, в программировании развиваться надо непрерывно. А то как получается, первые свои программы я писал, помню, для персоналки Hewlett-Packard 85 ещё в 1982 году. Там ещё операционки не было даже, просто Бейсик-монитор встроенный. И всё. А потом МИФИ, студент факультета Кибернетики. А там у нас вообще к старшим курсам было так - ну чего? Новый язык изучить? Паскаль у нас там не читали, Си не читали, сами брали книжку и изучали. Потом C++, потом уже в Штатах фирма послала всех своих программистов на недельные курсы основ Явы. Основы дали, дальше опять сами. И сейчас всё сами. А так что, на уровне 1982 года застрять, что ли? Нет, программирование и хорошо именно тем, что постоянно требуется развитие. Застрял - всё. Специфика профессии.
Большое спасибо за видео. Мотивируете писать код вместо просмотра котиков на работе)))
Серега - ты отличный ментор)))
скорее все-таки блогер :) Ментор я так себе
08:50 а если Вы видеоблогер, и не развиваетесь, меняйте профессию)) Это я к тому, что поначалу критиковал ваши видео, но теперь они мне нравятся всё больше и больше))
Помню еще в школе, в мохнатых 80-90 гг, я заметил, что бейсик на корветах нормально запускает программы без пробелов.. Пишешь чтото типа: fori=2toa
Зависит ли ЗП программиста и возможность его трудоустройства от возраста. Есть мнение, что возраст за 40 для программиста в странах СНГ уменьшает шансы рассмотрения его кандидатуры на вакансию и уменьшает уровень ЗП даже при наличии у него большего опыта. Так ли это?
Попробуйте один метод, никогда не говорить про себя что код плохой ( даже когда это не так ), никогда не говорить что задача сложная и всегда искать замены слову сложная на немного трудная, смотрите потом на результаты, часто за многими замечаю, как преувеличивают проблемы и слишком долго их обсуждают, вместо того что бы решить.
Если вернуться к коду, все очень просто, читаете TDD,
1. Пишите тесты
2. Пишите код
3. Запускаете тесты
4. Удачно поздравляю конец, нет, повторить 2 - 3 пункт до успеха.
Тоже самое при рефакторинге. Любой такой код не будет страшен, когда он протестирован, а без тестов, вы можете сделать даже хуже.
"программирование - профессия где все время придется учиться", и вот это блин ни разу не аллегория или стеб. это, блин, так и есть.
а что делать... языки совершенствуются и чаще в лучшую сторону.
Так что это скорее плюс...
в основном в вебе и геймдеве, в остальных сферах все более-менее спокойно.
@@МайкЛжец-ь6ж как жсер скажу, что нифига подобного, хрен бы сним что либы и фреймы совершенствуются постоянно, сам жс в 2015 году выкатил ес6, который неплохо так поменял подход
У меня не говнокод! У меня обфускация!
(Главное - правильный маркетинг.)
ахахаха
Любой проект на C# или Java - это обфускация). Никто даже о декомпиляции не парится никогда, т.к. читать этот говнокод - неблагодарное дело. Это по определению write-only. Это одна из причин, почему чистый C до сих пор жив и жив будет и почему даже современные либы пишут именно на C. В защиту C# (на Java не пишу, но та же фигня) - быстрота и удобство на первых порах. То есть очень круто прототипировать приложения, которые почти сразу будут работать, т.к. дофига инструментов доступны из коробки и чаще работают, чем нет), но поддерживать код на C# - это ХУЖЕ, чем поддержка бородатого сишного кода стандарта с89 c *бнутыми структурами данных и стилем.
Dijkstra программирование - это программирование с использованием имён переменных d, i, j, k, s, t, r, a.
Недели 2 назад начал изучать пайтон, писал простые коды по заданиям по курсам.. прошёл пару теорий, заданий.. решил закрепить материал и вернулся назад и заметил свои старые коды написанные в 5-10 строк и просто переписал их на более понятный лад и в 2-3 строки.
как успехи в обучении?
Посмотрев это видео, я понял что нужно писать для себя и пробовать новые проекты реализовывать самому. Ковыряться в чужих гавно-кодах и работать за копейки добавляя функционал в говно. Просто шикарная перспектива.......
Говнокод - это сленг у программистов, этого достаточно для новичков, когда я начинал в вебе, я многого не понимал в коде, чужих проектов, при этом написаны они были не плохо, просто мой уровень знаний не позволял понять этого. Спустя какое то время, я оценил чужой код, и понял, что он простой и понятный. Поэтому не переживайте, если ваш код считают гавном, просто старайтесь и делайте свой код лучше и лучше. Пределу совершенства нет для кода, его можно всю жизнь делать идеальным=)
Спасибо вам, Сергей)
резюме: кто учится писать код - даже не пытайтесь, обгадят с ног до головы, потому что начальное условие входа в it - ты говнокодер. и только когда ты наберешься опыта ты сможешь так же гадить на голову остальным. действительно сообщество программистов мотивирует и поддерживает.
Благодарю за видео.
Последнее время стал постоянно придерживаться позиции, что код должен выглядеть близким к человеческой речи. Читая код должно быть сразу понятно как это работает (с учётом того, что читатель разбирается в предметной области). Тогда такой код можно значительно быстрее модифицировать
Согласен. Код он словно книга или небольшой рассказ. Иногда читаешь, и хочется воскликнуть "ай, как славно написано!"
Абсолютно согласен. Только некоторые критические участки приходится оптимизировать (по скорости) и тогда ясность страдает, но обычно стараешся комперсировать комментариями
К сожалению, существует способ сделать очень понятный код, но тем не менее WTF будет раздаваться при его чтении постоянно.
Сделать код слишком длинным. То есть никакой универсальности, минимум абстракций - все вопросы решать тупо лоб и делать очень много копипасты.
Такой код поймет даже школьник. Но почти любой программист оказавшись где-нибудь на 4056-й его строке, будет материться сильнее, чем от любой сложности говнокода.
У меня сейчас как раз такая задача. Через неделю уже сдавать проект, а его явно писали дети. Сижу и часами читаю сочинения "как я провел лето". Это ужасно.
Если код на уровне "как я провел лето" - это прекрасно.
Просто задачи-то решаются сложные. И поэтому "решение в лоб" с точки зрения языка зачастую подразумевает довольно запутанный алгоритм с точки зрения логической. И просто написанный код перестает быть простым для понимания. Такой вот парадокс.
@@alexperemey6046
Когда он занимает тысячи строк? А бывает и больше - я видел 16К только на форме. Оченама сложный там у этой формы интерфейс, видимо. Что в этом прекрасного-то? Я не нанимался днями и неделями читать детские каракули. )))
Сложная задача требует сложной структуры абстракций. А когда кодеры в такое не могут - они и начинают гнать строку. Решая задачу в лоб - то есть по принципу, "что вижу, то пою". Куча тупорылых циклов и условий в общем. Скопипасченных много раз с небольшими изменениями для разных вводных. Огромная, почти бесконечная куча - уснешь на первой трети уже. И иногда у них это, к сожалению, даже работает.
Здравствуйте! Есть вопрос к вам
Как лучше писать код:
1) максимально подробно и понятно каждому (но код будет длинным)
2) максимально кратко и эффективно (код будет коротким, но порой непонятным с первого взгляда)
Или все же какой-то баланс держать лучше? Я только начинающий)
Я бы еще добавил, что до сих пор нет ни одного стека технологий, который бы позволял написать простое продаваемое приложение без говнокода или кучи костылей. Но технологии развиваются и возможно скоро будут изобретены инструменты которые пройдут этот критерий. И тогда, навреное, можно будет сказать что программирование - это просто. Потому что основная сложность программирования сейчас - это как написать казалось бы простую вещь без костылей.
Говнокод - это код который сложно поддерживать, он не обязательно сложночитаемый.
Например, если в коде полно копипейста - в нём можно легко разобраться, но при поддержке придётся менять одну вещь в 10 местах. И наоборот, если в общий метод выносится то, что общим быть не должно - любые правки этого метода будут вызывать баги в неожиданных местах. Вот пара примеров говнокода в копилочку :)
Меня научил писать хорошо форматированный код мой приятель лет так 25 назад. Когда я гордо ему показал работающую программу на паскале или бейсике но она была написана в одну строчку здоровым слипшимся куском текста. :)) Он посмотрел и сказал - что это за херня, ничего не понятно. И я призадумался. С тех пор пишу с четким форматированием, осмысленными именами переменных и комментированием всего. Потому что на задворках всегда мысль - а ведь это кто-то может потом читать и будет ли ему понятно.
Все верно коротко и понятно рассказал
Я тут на одном проекте пытался делать инъекцию говнокода , но старшие товарищи мешали, зато уже опытным проггерам не мешал никто, и они этим не часто, но регулярно пользовались.
Ещё там же забавно появлялось то, что компания всем подряд не оплачивала идею ультимейт (я за свои кровные купил), в ультимейт есть анализатор кода, который периодически выдавал варнинги типа: твоя переменная будет всегда false, можешь не проверять. Или друг, ты же тремя строчками назад проверял на null, зачем ещё раз?
@Ambulate In Somnis IDEA за денежку.
01:51 ха, сейчас работаю в фирме, и много проектов пишем с нуля. легаси мало и ими никто не занимается. в будущем скорее всего их перепишем на новых технологиях
это не джава, я так понимаю?
@@SergeyNemchinskiy джава
А как быть в случаях когда для сохранения производительности или экономии памяти приходиться жертвовать удобочитаемостью? Напр. запихать в одну переменную некоторое количество разных булевых значений чтобы не тратить байт на хранение только одного тру или фолс.
Некрасивый и дорогой финансовый код на Яве. В таких организациях это не воспринимается как говнокод - это кодстайл.
Это не экономия, это - говно. Я бы еще мог понять если бы у тебя проект был на СПП, который имел местами вставки из ассемблера (что сейчас уже не критично). Но то что ты описал - это говно. Давай угадаю: у тебя еще и работа есть где ты числишься перспективным разработчиком?:)))))))))))))
Joe Doe то что я описал является весьма полезной вещью при программировании микроконтроллеров. Иногда без этого тупо нельзя обойтись. Например при передаче данных через радиомодули которые могут передать байтов очень мало (за некоторый промежуток времени). У меня кстати есть видос на канале про ардуино и радиомодули.
@@MsSergey1313 Для этой цели есть ассемблер , на худой конец с++. а то что делаешь ты - это говнокод.
@@JoeDoe-wr9bu В критичных местах среда позволяет это вставить а в остальных просто нет смысла заморачиваться. И обычно я свой код понимаю спустя много времени без WTF благодаря высокоуровневости большей части написанного. Как вы думаете что будет если всё писать на ассемблере? Насколько будет лучше и понятнее?
Сколько же боли сейчас было про кнопочку :'( Когда люди собирают простой лендинг на ангуляре, это вызывает адовое количество боли в саппорте :(
Yaroslav Kovalenko потому что на начальном этапе была плохо проработана архитектура лэндинга, либо не уделили этому достаточно времени
@@AkkayHT228 я боюсь, что тут немного проще =) Тот лендинг не нуждался ни в Laravel, ни в Angular, но если продать такой стек, выйдет дороже =) Вот и всё, а то что потом почти невозможно саппортить такие проекты, это уже совершенно другой вопрос
Мы им дали компоненту архитектуру, а они копипастят шаблоны (фс) многие фронтенд фреймворки
@@YKovalenko лендинг на Laravel это конечно зря, надо было делать на Java EE
Потому что саппорт не знает ангулар. Другой причины я придумать не могу, почему фреймворк может вызывать боль на простом лендинге. Я понимаю, почему он может вызывать боль на сложном проекте, где вылезают его недостатки и недоработки. Но боль на лендинге?
Хорошо настроенные линтеры и код-ревью отлично помогают от говнокода
Это видео не о том, а объяснение новичкам - что же это такое
@@SergeyNemchinskiy как его избегать будет отдельным видео?)
Кроме читабельности есть ещё несколько критериев качества кода. Масштабируемость, производительность, требовательность к ресурсам. Это вещи, казалось бы очевидные (на первом курсе учат), но частенько приходится подумать как все это увязать.
Alexander Bozhko масштабируемость это уже про чистую архитектуру, а не про чистый код, то же самое с оптимизациями, но чистый код лучше производительного)
@@AkkayHT228 Это следует из того, что разработчики матеряться громче юзеров? ;)
Здравствуйте, Сергей. Можно тупой вопрос? Что вы думаете насчёт будущего php?
Ничего хорошего он не думает. Он уже говорил в другом видео, что PHP - это язык для написания плагинов к WP.
Да нормальное будущее. Все известные фреймворки будут жить ещё максимально долго. Например laravel и symfony или же YII2, всё так же востребованы весьма на рынке.
@@YKovalenko интересно его мнение
Запишу видео :)
@@SergeyNemchinskiy буду очень ждать)
Сергей, сорян за оффтоп)
На канале находил видео, которое отложил на посмотреть позже и потерял, теперь найти не могу.
Прошу помочь.
Видео было связано с проблемой начинания ч-л и рассматривалась методология преодоления этой проблемы.
Сергей очень крут.
спасибо :)
Сергей, а есть у вас курсы по чистому коду ?
Привет! Есть вопрос - Хорошо ли использовать автоаптейт БД из гибернейта. Или лучше писать SQL миграции ?
Спасибо за видео! Очень интересно!
на этапе прототипирования - самое оно. дальше - отключайте нафиг
Исходя из опыта, любой код = говнокод в той или иной степени.
Причем один и тот же код в один момент времени для одного говнокод, для другого - совершенство. Тут очень много субъективщины.
Как минимум в команде нужны правила, т.к. общепринятые правила имеют кучу допущений, и даже меняются. Пример - приватные поля класса в С#.
индусский код - лучший пример говнокода! индус - лучший производитель говнокода!
Говновнокода как и кода который поймет сопожник не существует.
Если человек жалуется на запутаность или неправильность отступов, названий переменных это и есть говнокодер.
Как правило проект не может состоять из 10 строчек. Неважно как ситема создана. Если система работает. Значит она првильная. Бери и дорабатывай ее но нефиг гнать что она плохая.
Посути эра когда все програмисты были матиматиками прошла.
Сейчас прогоамист без ВО в 26 может быть лучьшим в своем роде за быстроту принятия решений и эфективность. Чем человек который полдня ноет и месяц тратит на правильные пробелы.
Время + эфиктивность равно деньги.
Быстро наговнокодил сейчас (главное работает) - потратишь кучу времени потом на внесение изменений и развитие системы. Но я смотрю многих не волнует что их говно будет разгребать кто-то другой.
@@Денис-р5о3з У меня все проекты это трешь, но я не ною, самый сложный это был и есть проект который делали до меня куча фриленсоров. Они просто создавали папочку и туда пихали свои фичи. Но я не называю его говнокодом. Он работает. Да пришлось потратить полтора месяца на изучение закономерностей. Но это не бида. Вот где было сложно это highload бэкенд на node. В день общее это милион ка трафика. Код был идеален но это не спасло от круглосуточной работы. Без выходных. Партнеров много и не все лили то что было предусмотрено стандартом.
И тут и деньги уже не милы, хотелось просто забыть обовсем.
Захожу на канал, чтобы с удовольствием послушать рассказчика! 8)
По теме. Еще немаловажный эффект оказывает владение темой, на которую пишется код. Даже гений не сможет понять смысл кода, если он не в теме и код для него будет Г.
Как раз наоборот, через качественно написанный код он познакомится с темой. Другое дело, что если в коде будет ошибка бизнес-процесса, он ее конечно не увидит. Поскольку не владеет процессом и не знает, как он правильно должен работать.
*10 (говнокод) ruclips.net/video/vxXiyPgpT1Y/видео.html #конспСНП 2- трудно прочитать и понять (по именам переменных и методов и классов - что они делают и для чего). 5- при обучении языку после изучения его конструкции найти методичку по правилам пользования языком (какими буквами называть элемены кода, их расположение, отступы и т.п.) по запросу "язык кодстайл".
"И Ваш код никогда не заслужит название говнокода". .Ну Фоооокс))) Ситуация простая, каждый раз когда ты срочно в угоду заказчику делаешь костыли нужно просто ставить тэг: "Guanocode" .. и раз в неделю рефакториться. Совсем не писать говнокод заказчик скорее всего не позволит. Ну или недостаточно квалифицированные РП, работающие с заказчиками.
Сергей, здравствуйте. Я начинающий программист. На данный момент учу С++. Пока что пишу небольшие консольные приложения, где весь "проект" состоит из одного файла. И я не понимаю, как организованы настоящие проекты, как они работают...
Не могли бы вы разъяснить разницу между консольными приложениями, и большими проектами?
Для начала доучите С++ :) Большой проект - много разных файлов и классов, сложные задачи и т.п.
@@МихаилКрамер-н7ш ну вот, я понимаю, что много файлов ,но как они между собой связаны?..
@@sashaprokipchuk4185 Большую задачу невозможно решить без декомпозиции. Будь то на процедуры, на классы, на модули, на что угодно. Декомпозиция - разбиение большой задачи на более мелкие. Ну к примеру, вам нужно написать программу, в которую вводится много данных, потому по ним просчитывается какая-нибудь статистика, и выводится в виде графика. И, грубо говоря, в файле input.cpp у вас функции для ввода данных, в файле statistics.cpp - просчёт, в файле diagram.cpp рисуются диаграммы. И какой-нибудь файл main.cpp дёргает в нужное время функции из других файлов. Это очень грубо и упрощённо. Если возникают такие вопросы, значит вы ещё не дошли до таких разделов, как заголовочные файлы, компоновка и т.п., и видео эти вам пока смотреть рано. Эти видео Сергея для программистов, которые уже готовы устроиться на работу, хотя бы джуниором.
все верно, кроме того, что видео как раз и рассчитано на новичков, которые только начали изучать
@@МихаилКрамер-н7ш Спасибо, будем изучать!
Говнокод - это когда "WTF-метр" зашкаливает у ревьювера.
Коэффициент WTF.., надо будет запомнить..
не я придумал :)
Когда я смотрю впервые на чужой код, я вспоминаю фильм Путь Карлито с горкой порошка на столе... Этот код надо не курить, его надо нюхать.
Да, вот я всегда стараюсь свой код делать понятным, если это Java, ещё и внятный Javadoc делать к нему. А иначе потом сам недели через две посмотришь и "блин, а зачем вот это?". Не говоря уж о других программистах, которые могут этот код потом пытаться понять.
))))) Видал)))) Одна строчка кода и два абзаца комментария)))))))))))) Вышла такая поэма на 9 этажей)))))
Это из за того что Вы не часто начинали проэкты - ушли в преподавательство?
:) Это особенность джава энтерпрайз
А мы ввели ещё термин - школокод)
Как вы чуваки любите все усложнять...
Я просто не обращаю внимания. Есть задача - исправить это, добавить то, вот тут. Делаю. Не получается иначе как костылём? Пишу костыль. Одним больше, одним меньше.. При этом понятия не имею как программа работает в целом. Т.к. это ведомо только тем, кто все это писал. А их судя по коммитам было с десяток.
Было бы очень круто, если бы на каждое предложение "у нас на канале есть видео..", в углу видоса была бы на него ссылка
Было бы круто :) Надо заняться
Могу прислать много примеров 😉
вот уж нет :)
Сережа, пока ты здесь, в одном из видео ты рассказывал что у тебя на курсах первое тестовое задание непростое, можно пример какую прожку надо написать? Просто подумываю пойти учиться но не хочется приходить совсем лошарой😁так сказать сам оценю свои нынешние способности😉заранее спасибо
@@SergeyNemchinskiy обещаю без говнокода😁
@@legomonsters6888 развернуть слова, оставив на месте все не буквенные символы
@@SergeyNemchinskiy regex
Очевидно. Автор этот может рассказывать любую фигню и я буду это смотреть...
ахаха. так мило :)
у говно кода есть история возникновения.
какой-то важный иностраный тип стоявший у истоков - чем-то занимался.
и не знал как правильно назвать определенное явление.
у него родились дети.
и он какбы "не такой код" сравнил с "детскими фекалиями", "вонючими пеленками" +- Без явной говно-агрессии.
А в последствии когда оно вращалось в комьюнити на какой-то конференции - они это исказили до говно кода.
Изначально это типа "smell " - ну короче плохо пахнет, а также "детский код"
8:24 Когда читаешь старые сообщения в фейсбуке или еще где то.
Сергей, расскажите, пожалуйста, о salesforce разработке. Что это и с чем его едят. На сколько перспективно с этим связываться, ваше мнение. Это ж вроде к java относится. Спасибо заранее!
Я уже рассказывал, вот тут: ruclips.net/video/KzRseRw6Y_U/видео.html , но пожалуй еще раз расскажу
А что делать если стоит выбор между производительностью и понятностью кода?
Время программиста стоит дороже времени компьютера. Железки сейчас достаточно мощные. Если это не какая-то особо требовательная задача или особенно слабое железо, то читаемость в приоритете.
Спасибо за советы, вроде хорошие, но не ко всем языкам применимы, например C++ я не нашёл единого стандарта кодирования, у всех свой стандарт, кто-то использует гугловский стандарт, кто-то косит под STL и не понятно будет для начинающих программистов какой же стиль всё таки предпочтительный.
А можно ли считать говнокодом, много лишнего кода, где можно было бы обойтись более коротким вариантом кода? Например банальное применение if/else, где вполне подходит switch ().
Ну или я вот читал книгу по этой теме. Где рекомендуется чтобы в одном модуле было не более 25 строк (Идиально). Ну максимум до 50 строк в один модуль.
Говорят, что это не только оптимизация, но и увеличение степень обслуживаемости кода. Читабельность.
Я свичи прошу переделать. Пиши так, чтобы читать было понятно. Пишешь 1 раз, читаешь 10.
Жиза) Все верно сказано. Возвращаюсь к своему коду и WTFакаю .... who did this щет)))) А потом, ой этой был я со своей супер-пупер неразширяемой архитектурой.
Здравствуйте. А комментарии превращают говно код в норм код?
Задам вопрос всем шарящим.
Я молодой программист, учусь на магистратуре, за плечами 4 года бакалаврата и пару-тройку языков программирования на каком-то уровне. Уже вроде пора и на работу, но без опыта никуда не берут, поэтому пришлось идти не куда хочу, а куда возьмут. Ну и попал в компанию которая разрабатывает на делфи. Задачи не сильно интересные, но в качестве опыта неплохо.
Так вот спустя пару месяцев понял чего хочу сейчас: в геймдев. Но сначала нужно хотя бы годик наработать и выучить нужный язык... А нужный это какой? На чём сейчас пишут геймдевелоперы? Слышал раньше что на плюсах...
Только не кидайтесь помидорами пожалуйста.
да,в основном на плюсах, если говорить о 3д играх. А если казуалки, то на чем только не пишут. Вот на юнити (си-шарп) например
Кроме языка в геймдеве надо хорошо знать движок на котором будешь прогать, потому что он напрямую влияет на твой код. В каждом движке есть свои особенности которые нужно учитывать при написании кода. Одного языка будет недостаточно, это мягко сказать.
вижу говнокод ставлю лайк не смотря
При словах "до финиша профессии" поперхнулся чаем. А разве это не та профессия, которая закончится с жизнью? Это же не пилот, или пожарный, где есть определенные физ. кондиции, без которых ты не можешь выполнять свою работу.
А тут пиши код, пока не рипнешся, если конечно тебе твоя работа нравится. А если не нравится, то зачем вообще было идти в ИТ
Гвлнокод хорошо понимает только твой IDE и больше никто.
Буду жениться на IDE.
Методики обучения на шарпах плиз
в смысле? Нашу учебную программу? Она на сайте
О бож это так мимимишно!!!
немного решает проблему codacy (и прочие сервисы проверки залитого кода) и так же прекоммит стайлеры.
Это не тот, что ругается на
delete p; printf("%P
", p);
?
Какое им дело до invalid pointer p? Такие тулы глубоко копать не станут. Часто ругают что-то очевидно не по делу.
А если прога регулярно лагает ?
Это не говнокод, это код лагает. Он может лагать не только из-за говнокода, но и из-за неучтенных ограничений и еще по сотне причин.
создал игру на Пайтон + библиотека tkinter, это был обычный кликер с прокачкой. буквально спустя пару месяцев, я решил заглянуть туда, что оказалось зря, короче там было такое дерьмище, плюс ещё и повторение кода. надеюсь вы знаете, что меня ждёт...
Интересно, но Теорию Относительности Эйнштейна понимали немногие, говорит ли это, что он плохой ученый :-)
А если код намеренно запутан?
Иногда ведь бывает непонятно, но совсем по другим причинам. Например неопытность
бывает, но чем понятнее написан код, тем легче его читать даже неопытному разработчику
То что у вас в компании писали все по разному значит не было договоренности т е ревью не было Тим лид не о чем был
Непрограммист читал код программиста и понял "это г... код"
Слишком шаблонно и однобоко по поводу понятности кода. Частенько бывает так, что ваш код может понять очень крутой программист, так как он знает архитектуру и паттерны. А вот джуниоры не понимают, и херачат костыли там, где есть доступное API. При этом они свой код считают простым и понятным, что в конце концов выливается в тяжелейший рефакторинг, потому что изначально джуниорам влом заниматься нормальным проектированием, ибо на их взгляд это сложно и вредно.
не существует говнокода... это субъективное понятие. но существуют юзеры, которые будут говорить , что это говнокод.
Расcкажи про Spring)
спринг - это куча разных фреймворков. Что про них рассказать?
сейчас есть линтеры, которые помогут с кодстайлом
Это конечно хорошая мысль, что говнокод - это код, который трудно понять другому человеку. Но тогда возникает вопрос - какому конкретно человеку? Новичку обычно вообще ничего не понятно, и вряд ли он может справедливо весь чужой код называть говнокодом. Следовательно, должна быть какая-то граница, переходя которую программист обретает моральное право более-менее справедливо классифицировать тот или иной код как говнокод. Дальше, другая ситуация - уважаемый программист не первый десяток лет в профессии, считает себя слишком опытным и достаточно крутым, чтобы не учить паттерны. И вот однажды он видит код более молодого специалиста, который применяет паттерны, не понимает этот код и называет его говнокодом. Опять какая-то не очень адекватная оценка выходит... Получается, хоть "говнокод" и относится к вкусовщине, должны быть какие-то хотя бы минимальные требования к эксперту, который оценивает код и выносит этот вердикт. И тогда мы переходим к еще одному каверзному вопросу - кто имеет моральное право составить список требований, которым должен соответствовать эксперт? Вот и получается, что вроде как говнокод и существует, а на деле это сферический конь в вакууме. Вот есть паттерны, и все согласны, что они полезны и удобны. А удастся ли кому-то написать книгу о говнокоде, с конкретными примерами, да такими, чтобы ни у одного читателя не возникла мысль "а чего, нормальный же код, он имеет право на жизнь"?
Не первый десяток лет в профессии, и не смог оценить паттерн? Вы вообще паттерны видели? Они как бы полностью состоят из базовых концепций ООП, если программист работал 10 лет и не смог понять паттерн, то он работал с Excel. Другой вопрос - а уместно было вообще его использовать? Если молодой программист перегрузил код, напихав туда бездумно паттерны с фреймворками, то это и будет говнокодом. Применение любого кода должно быть прежде всего УМЕСТНО, а иначе стрельба себе по ногам.
Попробуйте чистый C. Не C++, а именно C. Если втянитесь, внезапно окажется, что 90% "современных" приёмов - бесполезное дерьмо, только усложняющее код и тормозящее его работу сотнями дебильных переадресаций, и где брутально-тупой конечный автомат решил бы проблему в разы проще и быстрее. Сам сейчас присматриваюсь к Rust, хотя он медленно взлетает.
@@andrewvsk2368 за растом будущее. только пока не очень понятно, как далеко это будущее находится
@@kardashevr далеко, + не факт что за Растом будущее. Rust хороший язык, но он не очень хорошо интегрируется с C. C живёт вовсе не потому что это самый быстрый язык (не считая нативного ASM), а потому что это самый простой язык и эффективный язык. + Когда человек пишет на C достаточно сложную программу, он автоматически реализует многие устоявшиеся паттерны проектирования из ООП. В C нет наследования, все абстракции реализуются композициями из структур и функций. Сокрытие создаётся средствами языка: правилами области видимости. Фабрика - это неотъемлемая часть даже маленькой программы на C, т.к. нам нужно всегда правильно создавать и удалять структуры данных. В результате человек, пишущий на C вообще никогда не допустит тех ошибок, с которыми могут столкнуться программисты на Java, при этом Java декларирует высокую скорость разработки! Высокая скорость только там, где ПО можно собрать из встроенного говна. В противном случае C эффективнее. И кстати ещё об ООП - C++, Java, C# - это НЕ ООП. Ни в одном языке не реализуется парадигма "всё объект", а отправка сообщений реализуется не средствами языка, а средствами костылей. Сами языки, если убрать всё лишнее просто надстройка над обычным императивным методом программирования, некоторые из которых скорее даже вредны! Например, в любой книге по паттернам очень критикуется Наследование, а ведь это один из столпов ООП (в отличие от инкапсуляции и полиморфизма, которые ООП просто присвоило себе, полиморфизм есть в любой большой программе! его можно реализовать на С, причём даже несколькими способами! (определение типов или указателями на функцию). В C# наследование используется ради перегрузки методов, ради последующего полиморфизма (и даже это не всегда хорошая идея) (это могут быть интерфейсы или абстрактные классы). Другое применение наследования уже вообще гарантировано создаёт говнокод. То есть как всегда: придумали, пропиарили, написали эксабайты говнокода, а теперь думаем что с этим делать.
Есть куча книг как не писать говнокод, например Code Complete.
Первая работа джуном - и я пишу микросервисы с нуля)
Красивые самолеты хорошо летают))
Говнокод заканчивается там, где ты узнаешь что такое говнокод
если бы....
С клин кодом согласен!
Но!
Любой код _ это интеллектуальная собственность!
И это важно, если тебе платят по контракту , не оценивая твой труд!
Так почему я кому то должен отдавать свой труд???
Если мой последователь так крут- пусть разбирается!
Я за клин код, если платят за клин код и мою интеллектуальную собственность!!!
эм.... что?
Эм- это за или против? 🤗
Если код выкладывается в паблик комьюнити - конечно же
Это должен быть клин_код!!!
Ахаха , клинический случай
Другими словами клин кодом вышибают или на мире код клином не сошелся.
Думаю- если на продажу=то код должен быть клином!
А для конкурентов по работе = чтоб мышь не разобралась 🤗
Побежденные программисты должны писать программы на языке победителя!
Со всем согласен, но...
Когда "...и заказчик-дурак тычет мышкой в картиночки гордо..." - от этого почему-то становится горько.
К слову. Языки вроде Python и Ruby буквально принуждают к правильному оформлению кода.