0:23 Стиль написания кода. Инструменты его выработки , линтовщик. 2:15 Коммиты. Сообщение до коммита. !"а так же". 4:26 Тесты. Тест переживатет рефакторинг. No test for test. 5:50 Опечатки. SpellChecker. 6:34 Комментарии. 8:40 Мёртвый код. 10:23 Излишняя сложность.
отвечу тут, тк заспамили видос, а тут больше вероятность дискуссии с автором. тесты - тоже могут тестироваться, это называется мутационным тестированием. и в целом по поводу тестов, они не всегда уместны. допустим когда делается Proof of Concept, с заранее неизвестным ТЗ. то есть есть некоторое желаемое приложение с базовым набором функциональности, но источник данных/протокол/модель данных заранее не известны и изучать приходится методом проб и ошибок. в таком случае покрывать бизнес-логику тестами нет никакого смысла, тк все очень волатильно. Более того в таких случаях иногда и нет смысла делать нормальную декомпозицию кода, до момента когда функциональность проекта не будет заморожена и уже тогда можно приступать к рефакторингу и покрытию тестами (это про еще и про то, что test first конечно прекрасная идея, но в реальном мире не всегда работающая)
За 14 лет в професси, я для себя вынес пару очень простых правил, которых стараюсь придерживаться: 1) Кода должны быть как можно меньше. 2) Код должен быть как можно более простым. Все остальное, вытекает из этих двух принципов: 3) Код должен легко читаться. Любой джуниор должен без проблем сесть и быстро разабраться, как и что ваш код делает. 4) Код должен легко поддаваться модификации. Если вы сделали архитектуру, а потом, спустя время, от вас потребовали внедрить новую фичу и вы видите, что архитектура этого не позволяет - значит ваша архитектура - говно. 5) Код должен быть максимально модульным и пригодным к юнит-тестированию. Как-то так.
Ага, но вот, деталь одну не раскрыли. Что значит легко поддаваться модификации? Я, например, считаю, что код должен быть ПРОСТЫМ и ЖЕСТКИМ, а не гибким. Т.е. код должен быть как можно проще и достаточно жестким, чтобы выполнялись требования. И ни в коем случае не закладывается преждевременная гибкость. А простота модификации достигается с помощью DRY. Любое утверждение в коде должно встречаться раз. Т.е. код не на шарнирах, а когда меняется какое-то требование, надо найти ту косточку и ее сломать. Т.е. простота в приоритете перед гибкостью. 15 лет в профессии. YAGNI, DRY, KISS
@@yurim7756Да, это главные принципы для создания хорошей, гибкой архитектуры. Опытный программист пишет минимальный, работающий код, и потом, в случае необходимости, добавляет\изменяет фичу добавив и изменив пару\тройку файлов. Джуниор как правило, тратит кучу времени на создание гибкой, как ему кажется системы, с кучей интерфейсов и шаблонов и потом, когда действительно нужно добавлять\изменять фичу, выясняется, что именно этот случай, он и не предусмотрел. :) И в итоге опять тратится куча времени на переделывание архитектуры, на добавление новых интерфейсов и взаимосвязей - дабытеперь уже система стала на 100% гибкой. :) Нужно ли говорить, что следующая новая фича, скорее всего опять не впишется в старую абстракцию? :) Так что - да, я тоже за гибкость через простоту и жесткость.
@@konst3d Ну да. Преждевременная гибкость, это как правило гибкость только в предугаданных направлениях, но чрезмерная жесткость в неугаданных. В результате, если требования как-то пошли не так, джуниоры обижаются на заказчика, потому что тот сразу не сказал, что так может быть )) Или, если гибкость слишком большая, то это в ущерб статической типизации. Т.е. вроде код и гибкий, но место для счастливой и беззаботной жизни багов. Гибкость по-сути - антипод правильности. В первую очередь код должен заботиться о правильности выполнения требований. А гибкость - проблема индейская. Но к сожалению, большинство программистов именно с нее начинают. Поэтому: простота, декларативность (по возможности), в коде должны читаться требования, а не алгоритмы. И я бы выделил локальную читаемость. Большинство программистов стараются создать архитектуру, которую видно с птичьего полета. А как по мне, главнее, чтобы открыл любой файл с кодом, и чтобы он читался ну как повествовательная книга.
Комментарии - почему их не должно быть? Реальность это когда код пишется, переписывается и поддерживается разными людьми. Реальность это когда клиент не всегда платит за время на вникнуть в полную логику, и в результате переписания кусков кода он становится сложно читаемым. Как по мне, это не правильно хэйтить комментированный код. Я считаю что в условиях реальной жизни комментарии позволяют быстрее разобраться в коде и в ходе мыслей предыдущих разработчиков. А хэйт комментов как по мне это понты и высокомерие.
Если честно, перечитывая даже свой код спустя какое-то время комментарии не очень уж сильно помогали разобраться. Я по своим проектам наблюдаю следующую динамику: уменьшение количества комментариев и увеличение количества UML-диаграм. Когда видишь какое место функция или компонент занимают в программе, как они используются и видишь это графически и наглядно, анализ кода становится куда более посильной задачей.
Комментарии для очевидного кода - это дублирование этого же кода на другом языке (обычно английском), то есть, бесполезная трата времени на написание и бесполезная трата времени на чтение (особенно передаю привет сидящим на макбуках 13 дюймов). Если же комментарий для неочевидного кода, значит код стоит переписать чтобы он стал очевидным, что переносит нас на первый пункт. И есть лишь небольшая доля кода, который действительно стоит комментировать, потому что его невозможно написать более очевидно. Но во всех этих случаях комментарий должен отвечать не на вопрос "что делает этот код?", а на вопрос "нафига он это делает?"
Смотря, что делает этот код. Когда смотрим сложный алгоритм (например, в сишных библиотеках Питона), то пространные шапки комментариев очень помогают схватить основную идею. А кода формошлёп пишет над каждым методом своей CRUD-приложеньки шапку с подробным однотипным описанием параметров, потому что так положено, это - просто засорение кода. Но оно требуется, потому что разработчикам CRUD-приложений платят фактически за строки кода: они должны разработать ненужную по сути вещь, но она должна выглядеть, как настоящая, а цель этой разработки - освоение ИТ-бюджета менеджерами.
Вообще не про говнокод, грамматические ошибки, комменты, тесты - это все наживное. А вот если код пишется в лоб, без знаний того как работает то что используется, в чем его смысл итд. Не к месту используемые инструменты и библиотеки. Отсутствие обработки исключений и невнимательность
Такое ощущение, что 80% комментирующих решили написать "не согласен, автор не прав" еще до того, как начали смотреть видео. Да, с примерами было бы лучше, фокус камеры и звук можно улучшить, но меня это не напрягло, материал менее ценным от этого не стал. Я с 12 годами опыта почерпнул интеренсные детали. Спасибо.
Хорошее высказывание "тест это код на который нету тестов". И как следствие из этого, тесты должны быть очень маленькими и тестировать всёго один кейс. Таким образом, хоть это и код на который нету теста, он становится очень простым, понятным и минимизирует ошибки.
@@ОнуфрийНечепуренко Почему же без комментариев? Если приходится писать костыль или просто сложную штуку, то я оставляю комент. Но чаще всего мой код читабелен и без комментариев, потому что все переменные, функции и т.д. названы правильно
Прочитал коментарии и понял что большинство разработчиков не понимают насколько важны такие понятия как стиль, единые подходы, избегание излишней сложности, чистота и тд потому что не участвовали в действительно больших и продолжительных проектах. Да возможно когда ты делаешь проект, который в стадии активной разработки продлиться 3 месяца, после которых все на его забьют тут не важно насколько он чисто будет написан. Но, поверьте, если проект делается 5+ лет группой 50+ человек, то в случае игнорирования данных практик его разработка будет невероятно сложной, болезненной и демотивирующей. Но если следить за этим, уделять достаточное время дизайну и устранению технического долга, то и сложные системы могут быть достаточно внятными, прозрачными и понятными для изменений.
Расскажи эти слова бизнессзаказчикам, которые содержат ватагу таких чистоплюев, которые на выходе дают красивые комиты и гавнапродукт, который в очень красивом стиле пилился 300 лет. Индусы тебя без работы оставят влет.
По поводу микро-коммитов не соглашусь. Когда вошёл в поток и активно делаешь изменения, особенно если они связаны с рефакторингом, это в итоге затрагивает большие куски кода. И если пытаться разделить эти изменения по смыслу и разбивать по коммитам, то уйдёт гораздо больше времени из-за того что будешь откладывать на будущие коммиты то что нужно сделать сейчас. Если же сделать кучу нужных изменений сразу, а затем пытаться разбить используя возможности системы контроля версий - это опять окажется болью, потому что изменения в одном и том же файле могут оказаться разными по смыслу... Поэтому всё зависит от процессов выстроенных в компании и темпа разработки. Если контроль качества имеет более высокий приоритет, тогда имеет смысл вести разработку медленно используя все возможности для того чтобы свести к минимуму незапланированные ошибки. В молодых же проектах вполне можно делать быстрые изменения и большие коммиты, которые включают в себя много разноплановых вещей.
Тебя не кто не заставляет комитить сразу. Я пишу в экстазе громадное количество строк и потом делаю много комитов :) Любой git клиент умеет partial commits. Идешь в файл помечаешь строки для комита в этом файле и комитишь ) Конвенцию для текста лучше брать с linux kernel репозитория: "action description"
А в чем тут несогласие, он вроде так и сказал: по возможности делать частые и мелкие коммиты но если изменения вдруг стали глобальные то делай большой коммит
в больших проектах делать большие коммиты, которые включают в себя много разноплановых вещей думаю будет не очень хорошей практикой так как со временем разработчикам придется со всем этим разбираться
Разногласие в том что он привёл это как аргумент того что микрокоммиты - показатель хорошего программиста. Хотя это не так. Джуна гораздо проще делать микрокоммиты потому что от него выхлоп меньше :)
Но неизменность теста, т.е. его слабая связанность с особенностями реализации кода, может также означать недостаточный контроль кода. Может оказаться, что мы просто мало что тестируем; тестируем какие-то очевидные вещи. Можно ведь написать тест, который не будет зависеть от кода, но также и не будет зависеть от ошибок в нём. :)
К примеру если есть такое место в коде, где код запускается постоянно и много раз в секунду, + состоит из нескольких больших лупов, поэтому создание лишних функций добавляет оверхед, плюс нужно в каждой из маленьких функций заново рассчитывать локальные переменные, либо же передавать огромное количество переменных то в одну функцию, то в другую, что тоже плохо, поэтому у меня в том месте одна большая функция (~200 строк), это проблема? Тоесть я всёравно должен разбивать функцию на куски, даже если это пусть и незначительно, но всё же вредит производительности или нет?
@@vodchiy нет не много, всего 1 место, в котором работает либо одна функция, либо другая, обе сильно огромные по 200-300 строк, я там всё довёл до микрооптимизации, разбивать не собираюсь, спасибо за ответ.
@@VORASTRA нет, он не это говорит, а то, что если к коду требуются комментарии, то, значит, код написан плохо. Слишком радикальная позиция, как мне кажется.
@@pumbo_nv всё ты правильно говоришь. Фраза "если коду требуются комментарии, то значит код написан плохо" - это фраза обычных теоретиков, которые к реальному программированию отношения не имеют и программируют в книгах задачи, которые в конце главы расположены))) Я в программировании уже около 10 лет и я прошел через огромное число проектов и работаю тим лидом на данный момент. И я могу со 100% уверенностью сказать, что код без комментариев - это просто ублюдство, так как сразу видно, что писал какой то человек, который думает только о себе и не думает, что его код будет смотреть другие. И реальность такова, что есть полно сложных вещей, которые приходится делать. Алгоритмически сложных вещей и сложную логику. Само собой, глупо писать комментарии в очевидных местах. И ровно так же глупо НЕ писать комментарии там, где они реально нужны. Какой бы не был красивый код, если сама функциональность сложная, то гораздо проще будет понять код, который написан с комментариями.
Насчет юнит-тестов не совсем согласен. Возможно я не так понял высказывание, но тест не всегде должен переживать рефакторинг. Вот пример : у вас есть мок на метод, в ассерт части вы чекаете сколько раз замоченный метод вызывается, скажем, это был репозиторий, который вычитывает данные из таблицы имя и фамилию. Какой-то интерн\джун\вы в прошлом написал так, что значение вычитывалось несколько раз, и вы успешно это заюниттестили. После того, как у вас БД на проде загружена на 146% вы обнаруживаете, что этот код должен быть отрефакторен так, что бы метод вызывался один раз. Вам нужно менять тесты! Не бойтесь проверять в тесте количество вызовов метода или еще что-нибудь фажное в угоду будущему рефакторингу, не подставляйте себя! :) Может быть пример не очень корректный, но суть вы, надеюсь, поняли. Юнит тесты должны быть как ваша математичка, строгие, но справедливые! =D
После обнаружения множественной загрузки одних и тех же данных из БД возникают серьёзные вопросы к авторам кода. Ведь нагрузочные требования должны были быть в проектной документации. А если их там не было, то почему взялись за разработку незнамо чего? Так что какой там рефакторинг, тут профессиональное несоответствие в полный рост. Но я скажу, почему в большинстве случаев такие вопросы не задаются. Потому что сам проект не нужен, открывается только ради освоения бюджета на автоматизацию и поставить галочки: "бизнес в этом году автоматизирован на 87.5%". И в таких проектах - как раз хорошо, что БД загружена на 146%, т.к. это помогает пускать пыль в глаза: вот какая нужная приложенька, и сколько сложных вычислений она делает. А давайте закупим ещё 20 серверов и с них тоже снимем себе откатов.
@@InconspicuousChap ого некропост)) но да, вы же робот и пишете идеально продуманный код. А условие в конце, что пример не корректный служит лишь для иллюстрации, вы, почему то пропустили не как робот, а как человек.
@@MayDay-g4k Ну да, в понятиях ЕГЭшных поколений я робот. Я знаю, что я делаю, когда пишу код. Так же, как и люди, у которых я учился, вся старая школа знала, что делала, когда писала код. И зачем писала (кто пользователи, каков эффект) - тоже знала. И у буржуев так же: Дэйв Катлер, Линус Торвальдс, Джон Маккарти, Никлаус Вирт, Кен Томпсон и другие - все формировали постановку задачи, а потом проектировали решение перед тем, как кодить. Это вы только лепите, сами не зная, что и зачем. И получается у вас 100% говнокод, как его ни отформатируй и каких юнит тестов ни понапиши. И работа у вас есть исключительно в части распильных никому, кроме откатчиков, не нужных проектов, поэтому всем по барабану на полуработающие решения.
@@MayDay-g4k Узколобость или нет, но к счастью, софтостроение - дело такое. Или взлетит, или нет. Так что шлёпай свои формы дальше, "продвинутый" и "современный" ты наш. И знай своё место формошлёпа. Ты будешь его занимать, пока не научишься уважать старших.
да, согласен. Программист ёпта. Говорит код читать невозможно. А видео своё не настроил - бля смотреть невозможно. Просто слушал, чтоб глаза не сломать.
А там есть, что смотреть? По-моему, вся информативная часть рассказана голосом. Или вам непременно нужен гипнотизирующий видеоряд, чтобы отключить критическое восприятие сказанного? Ну да, думать - сложный процесс...
Видео понравилось. Подробности по каждому пункту можно погуглить при желании. Взял на заметку разбивку больших коммитов на более мелкие, атомарные. Часто говорят, типа, в моей компании сжатые сроки, мы не пишем тестов, нет общих правил и стиля написания кода, нам не до статических анализаторов, у нас постоянно гарь... Профессионализм - это ещё и умение выбирать компанию и проект для работы. Зачем лезть в гарь, когда можно работать в компании с нормальным планированием и качественными процессами? Где говнокод тебе не навязывают, а отучают от него!
Примеры где емае :) Наилудшый стандарт по комитам это репозитория ядра Линукс :) "добавил тест для того-то" "исправил ошибку там-то" :) Насчет кода так есть стандарты у каждого языка у питон например pep8: www.python.org/dev/peps/pep-0008/ Вообще мне лично гавнокодер это тот кто не понимает своего используемого узыка. Точнее не знает как реализованы структуры данных в его языке, не знает лучшие практики своего языка, не знает как в памяти структуры данных работают и чего не стоит использовать допустим удалять элементы массива это зло для твоих ресурсов, лучше просто обнулять их, в некоторых языках это реализовано правильно, там и так нули ставятся, а не весь элемент удаляется. Вообще гавнокодер это пофигист которому насрать на perfomance и вообще компьютерную науку в целом как и неуменее проблемы решать, а не из обходить :)
Я до просмотра этого видео думал что говнокод - это код, который растянут, сложен, и то что можно было написать за строчек 10 в итоге написан на 100 (по сути последний твой пункт), но было перечисленно столько пунктов, которые даже к кодингу особого отношения не имеют и их можно пофиксить за пару дней, а вот в этом пункте ты сам сказал что иногда приходится использовать сложный код, вложенные циклы, условия в них. Иногда у меня возникает вопрос, я пишу говнокод или это вынужденная мера? это можно как-то выявить и пофиксить?
никак это не узнать. Зовешь другого твоего же уровня и пускай разбирается, если спотыкается значит говнокод, это единственный вариант. Можно еще читать собственный год написанный давно, если спотыкаешься, то говнокод.
Насчет тестов не все так плохо - те же пхпшные тесты можно проверить с помощью infection и почти уверен что для других тестовых фреймворков должен быть инструментарий для мутационного тестирования. Естественно MSI - не истина в последней инстанции, но все же дает представление насчет корректности написанных тестов
В python идыешка pycharm все подсвечует ) но говнокодить приходится, скорее всего из-за нехватки опыта) я получаю удовольствия от того что пишу код, но моя нынешняя профессия мне не нравится, хочу стать кодером, надеюсь когдато кто-то возьмет меня каким-то интерном или джуном... смотрю видео автора, для мотивации =) Спасибо тебе!
@@AlexNatkin я пишу каждый день, что-то новое, завел git, но мне приходится работать сисадмином(принтера, сервера, сервисы) и параллельно кодить для этой же компании, за премии
работаю в силиконовой долине, 80% окружающих меня людей не придерживаются стиля, как и я. Просто пусть все знают, что у компании ***z*n программисты гавнокодеры) Успехов тебе, Senior программист.
всегда в комментариях к классу или методу пишу для чего он предназначен, что возвращает и описываю переменные и их типы. получается я говнокодер по новым веяниям поколения ноде-джс ?
По разному. Вообще, любые комментарии - это скорее плохо чем хорошо. Но к функциям терпимо (хотя я не пишу), если они сложные, тяжело ясно назвать (например, в сложных алгоритмах), чтобы не смотреть в тело. А еще неплохо, если они в каком-то специальном формате, который может читать редактор и делать потом подсказки. Вообще, всё что улучшает понятность, всё это хорошо. Но с комментариями часто такая штука, что если они нужны, значит код говно, по нему не понятно, что он делает. Или слишком сложный оправдано, но непонятно что делает. Так вот, комментарии + непонятный код, это может быть сложнее, чем просто код. Ведь вы увеличили количество информации, это точно сложнее. А еще часто комментарии могут нагло врать. Код чаще меняется, может даже средствами автоматического рефакторинга. Где-то из другого места изменили имя переменной, функции, и комментарий устарел. В общем, желательно, чтобы код читался, как книга. Буквально повествовательно, декларативно. По возможности. Имхо, даже намного важнее локальная читаемость кода, чем какая-то общая архитектура кода. Но, описывать функции, это олдскул, не так и плохо. Но, согласен с автором, комментарии - это то, к чему не надо стремиться. Я их пишу, когда уже сдаюсь. Когда уже соглашаюсь, что я недостаточно хорош, чтобы выразить это кодом понятно. Вообще в ролике про говнокодеров ничего в общем-то не сказано, несмотря на название. Говнокодить можно и с гитом, и писать прекрасный код можно без гита.
Во, во. Сейчас веду проект под STM32, в штатных либах там комменты по десять строк к каждой функции. Это что ж получается, в компании запилившей ставший стандартом де-факто микроконтроллер одни говнокодеры что ли работают?
Большое количество комментов ухудшает читаемость самого кода, да и далеко не каждый программист умеет хорошо писать документацию к собственному коду. Комментировать имеет смысл только очень оригинальный код, который сложно работает и не является типовым, в плане выполняемой задачи. Да и то, скорее всего, это просто хреново написанный код. Комменты хороши для каких-то сложных инструментов, или когда реализация скрыта. В противном случае достаточно делать коммент к сложному методу или классу, если его функция не выходит из его названия.
Вот насчет коммитов не совсем согласен. Если все делить на атомарные коммиты, заколебешься потом мержить. Это ты уже исходишь из аджайл. Ну да каждая задача должна быть атомарной тогда.
Иногда смешно смотреть на тех, кто считает себя не говнокодером и запаривается насчёт форматирования и стандартов, а сам даже SOLID и DRY не соблюдает. Зато пробелы и отступы расставляет)))
SOLID не серебрянная пуля, есть куча вещей проверенных временем, которые в SOLID вообще не укладываются, не говоря уже о том, что с течением времени конкретный смысл который вкладывается в каждый пункт можнт по разному интерпетироваться.
ну например такая вещь как ActiveRecord если классический ответ. если не классический то множество fluent dsl api, которые помимо конфигурирования текущего уровня позволяют еще и вызывать методы бизнес-логики. допустим apache olingo. ну или если совсем простое то зачастую реализации паттерна facade нарушают SRP.
2:52 во-первых я таки будучи простым сисадминским скриптером до сих пор подхожу под определение программиста :) во-вторых это больше к умению излагать мысли, чем к программированию. Соответственно во-время собеседования возможно имеет смысл не только дать человеку написать кусок кода, но и попросить написать диалог/зарисовку/рассказ. Заодно и умение нестандартно мыслить проверится.
конкретный курс думаю назвать наврядли можно. посмотрите на ютубе курсы html+cssдля начинающих. верстать научитесь можно по jsпочитать. для начала нативный библиотеки и фичи оставте на потом. или вас серверная чамть больше интересует? вообшем надо определиться с направлением для начала! ;))
Одним курсом не обойтись. Пробуй все, какие заходят, все смотри. Главное пиши руками побольше кода. Старайся не переписывать втупую, а понять, запомнить, закрыть учебный материал, постараться воспроизвести по памяти: так понимание будет лучше.
Одними видеокурсами, даже, есди много посмотришь, скорее всего, тоже не обойтись. Читай книги. Не обязательно от корки до корки, достаточно читать интересующие главы, заполняя пробелы и постепенно познавая новые аспекты ищучаемой темы. Читай статейки на всяких ваших хабрах. Ищи ответы на конкретные маленькие вопросы и проблемы в гугле, обычно на каком-нибудь стэковерфлоу уже кто-то сталкивался с таким.
Самый лучший способ имхо (и не только имхо), это взяться за какую-нибудь конкретную задачу/проект (например, простенькая соц сеть), и начать ее пилить, найдя курс, в котором в качестве примера тоже создают похожий проект.
это всё слишком идеализированно. В больших программах невозможно делать всё по этим правилам, всегда есть исключения, сложные куски, пояснения почему так сделал и зачем, обходы проблем в API особенно если писать на андроид с поддержкой разных версий, да и самая банальная причина это сжатые сроки и урезанный бюджет на проект, не предусматривающие тестирование и написание идеальново кода. А всё вот это бла бла конечно верно, но возможно лишь в условиях когда нет сроков и полно времени для оптимизации кода, тогда конечно сиди и оптимируй до посинения, но такое в реальности бывает редко.
Человеческий мозг может хранить ~петабайт информации, теоретически человек может освоить все ныне существующие науки, проблема лишь в том, что жизнь слишком коротка :)
Тогда я бы хотел задать один вопрос, навряд ли тут можно, что-то сказать, но может, ты что-то дельное посоветуешь. Вопрос сложный я написал его на seniorsoftwarevlogger.userecho.com, заранее спасибо. К сожалению вопрос получился довольно объёмный, но меньше написать не смог, пытался изложить понятно.
а как же много щавичимостей, глобальные переменные, дублирование кода, простыни кода, лапша, киайский код, итд, все кроме коментариев технические штуки которым хороший програмер всегда может научится а говнокодеру не поможет никакой гит, а про идеологию патерны архитектуру ничего
Слушай, ну как будто не знаешь, где живёшь. Берём типовой проект на разработку заказного ПО. Банк А платит подрядчику Б 50 млн, из которых 10 достаются менеджерам банка, подписавшим открытие проекта, 10 - менеджерам бодишопа, 20 уходят на закупку железа (там тоже у людей есть семьи, и надо за "элитный" стеклобетон платить взнос), а на оставшиеся 10 млн 2 программиста, аналитик и тестировщик должны по-быстрому сбацать пару CRUD-сервисов. Какая тут может быть архитектура? Только типовая, проверенная в тысячах других таких же распильных проектов. Распильщики вообще суеверны и не любят рисковать. А как объяснить, что за 50 млн было разработано софта с гулькин хрен? Правильно, никак. Софта должно быть много. 500 тыс строк кода, 1 млн строк. Так что - копипаста, шапки комментариев на 80% объёма файла, бесконечные адаптеры над плохо подходящими фреймворками, названия типов и функций на 50 букв, юнит-тесты на каждый сеттер и геттер, и так вот приближаются к идеалу. Но на серьёзных щах вещают, будто познали всю суть разработки, хотя ни одного кому-то нужного продукта в жизни не написали (бенефициаров распила я не считаю).
Welcom to future стили проставляются в редакторе и даже чужой код ты видишь в привычном лично тебе формате. В остальном все зависит от работа ли в команде или соло и насколько "тз" залито цементов, в разработке игр, где все меняет по 10 раз, сказанное в видео во многом херня.
Он ругается на функции > 5 строк, на вложенные if/foreach блоки, на вещи вроде if (data['status'] == 0 && data['action'] == 3), на 10 строчные блоки кода, появляющиеся из-за незнания встроенных средств языка или фреймворка?
В большинстве сфер писать качественный код можно без мозга. Желание учиться и опыт помогут стать классным разработчиком. Говнокодеры, кстати, это ребята которые уверены, что шибко умные и поэтому они "знают лучше" и учиться им незачем. Таких вывести из говнокодерства - просто нереальная задача.
нужно стремиться к тому, чтобы тестов не было вообще, тестирование кода расслабляет человека, не учит его пользоваться отладчиками, сужает понимание кода, как такового. Человек так устроен, что на плохом опыте учится быстрее, поэтому нет смысла покрывать код тестами, кроме разработки ПО, которое управляет ракетами, медицинскими аппаратами, всем тем, что связано со здоровьем. Написание тестов лично у меня увеличивает время разработки в 2.5 раза. Я вместо тестов мог разработать больше функционала, например. Получить больше профита. А так, да, если деньги падают с небес сами, то можно задуматься и над тестами, когда не поджимает время. А так, это вкусовщина. Хорошего разработчика отличает быстрое понимание задачи и способность реализовать в кратчайшие сроки с минимальными усилиями. Это к тому, что сто строк можно заменить одной, а для повторяющихся задач реализовывать собственные библиотеки, причем анализировать на будущее, что может быть переиспользовано
Есть и другая крайность. Люди уделяют много внимания "правильному" написанию кода, но при этом плохо разбираются в программировании, алгоритмах, не знают как работает процессор и операционные системы. Видел примеры.
15 лет в веб деве. Ни разу не пригодились знание алгоритмов и структур данных, принципов работы процессора и ОС. Все, что ты перечислил успешно продается университетами студентам уже несколько десятилетий. Большинству разработчиков эти "важные" знания не нужны, а вот умение писать качественный индустриальный код необходимо всем.
Для учебной задачи в 100 строк кода, реализующих бинарный поиск, который этот преподаватель уже 1000 раз видел, может быть, и годный принцип. А пусть он попробует так прочитать алгоритм, которого он не видел.
Я чуть-чуть говнокодер 1. Плохая история коммитов, т.к. я коммичу обычно в тот момент, когда жалко потерять изменения. Логики при этом мало - все происходит достаточно спонтанно. Стараюсь придерживаться правила "атомарное изменение = коммит", но в реальном процессе это не так быстро привить себе и переучиться, как оказалось 2. Я не понимаю, зачем нужен prettier, если есть eslint. Кмк, они решают одну и ту же задачу, но eslint уже всем известен и понятен, а prettier просто еще одно решение. Месяцем ранее был бы еще более говнокодер, очень помогло научиться думать перед тем, как писать код. Самое фиговое сразу кидаться стучать по кнопкам, сначала надо прикинуть, в том числе продумать корнер кейсы. Потом планирование (конкретно что и где меняем), и только потом код (когда точно знаешь что надо писать). С плохой историей коммитов стал бороться через хуки гита. В репо есть прогоны тестов и линтера, но я себе заблочил возможность коммита, если линтеры не приведены в порядок. Это занимает 15 секунд, но коммитов стало в разы меньше, т.к. получилось избавиться от "lint fix", "flow errors fix", "another flow errors fix". Хз, мб поможет кому
Это как судить по почерку рукописного текста о таланте писателя... Т.е. вообще мимо... Почти всё о рюшечках в коде, бестпрактиз и подобных вещах не влияющих на функционал и качество самого кода. Только про чрезмерную сложность и тесты можно отнести действительно к программированию. На мой взгляд, говнокодер, это человек плохо понимающий что делает, чаще всего, скопипащенный им откуда-то, код (своего кода у них обычно мало). Мне, лично, по барабану на большинство опечаток, пропущенные отступы и подобный "стиль" - хорошо, если он есть, но говнокодером за отсутствие точно не назову. А вот когда одна бездумная копипаста другую погоняет и код можно сократить в несколько раз без потери функционала - вот это для меня и есть признаки говнокодера. Когда не используются возможности языка/библиотек упрощающие код. Когда программист не может придумать ничего своего, но очень следит в пул-реквестах за "стилем" тех, кто реально придумывает, выставляя тех говнокодерами за неправильные пробелы и опечатки. И очень жаль, что сейчас тенденция считать таких говнокодеров хорошими спецами только потому, что он делает всё, что описано в данном видео :(
С умной рожей восклицаю: 2:23 не версирование, а версионирование! Кстати, Дмитрий, что думаешь по поводу вот этого: habr.com/company/infopulse/blog/345826/?
@@SeniorSoftwareVlogger возможно, но по идее если будет много подписчиков то можно будет продавать рекламу общаясь напрямую с рекламодателями, вот там должны быть заработки
Написание кода и разбор его это как целое расследование шерлока холмса и доктора ватсона, иногда волосы шевелятся от того откуда что берётся куда что идёт зачем эта функция нужна, что она описывает, а потом вылет вылет вылет 🙏😁шикарный видос. 2 правила пиши чтобы разобрался даже ребёнок, 1 чем меньше написано тем лучше
Согласна со всеми пунктами из видео. Такой подход действительно очень помогает держать код в порядке, другим разработчикам легче работать с таким кодом (а это важно, когда проект делается в команде). Также такой подход сильно упрощает поддержку (потому что через полгода ты ни за что не вспомнишь, зачем комментировал три строчки тут и еще вон ту переменную в другом классе). Хочу также дополнить, что есть прекрасная книга Clean Coder, где в деталях и с примерами из жизни рассказано, почему все вышеперечисленное хорошо и для проекта, и для разработчика.
Комментировать необходимо для улучшения параметра читаемости программы. Что бы через несколько месяцев понимать, что именно происходит в коде. Для этого необходимо писать комментарии, хотя бы в одну строку.
Это только касается небольших комментариев в начале файла описывающих задачу и направление решения и проблемные участки в коде где входит путаница/сложность из-за предметной области. В остальных случая да код с комментариями это гавнокод.
"взять и этот кусочек кода удалить" Самый сок, когда для релизов ПО используется бранчевание по версиям, соответственно через несколько бранчей SVN в упор не видит эти самые изменения. Просто привожу пример ситуации, когда комментирование кода вместо удаления - спасает. Я не в курсе как настроен сервер, так как я не RE, а они в свою очередь не будут менять конфигурацию, поэтому просьба об этом не писать.
@@SeniorSoftwareVlogger , Вы представляете, сколько стоит в международной компании перевести все CI сервера, обучить разработчиков, сконвертировать GIT в SVN (чтобы коммиты были отдельными), и т.д. Это очень большая сумма денег. А ещё это очень большое количество человеко-часов
Отлично все расписал. Последний момент - это главное, что отличает говнокодера от хорошего разработчика. Тем, кто хочет перестать говнокодить, советую прочитать и перечитывать Clean Code by Robert Martin.
Боб разрабатывал байтомешалки на Clojure и Java, поэтому у него есть религиозные убеждения о unit-тестах как о серебряной пуле, что не никак не помогает, и даже вредит, например при разработке Android приложений.
@@nikitabobyshew7927 у unit-тестирования android-приложений есть такая особенность: приложение будет рассыпаться на части, а все unit-тесты ни разу не упадут. Зато дадут ложное чувство уверенности. Потому что тестируется не тот код, в котором будут ошибки. - ну так надо тестировать там где возникают ошибки - для этого нужны НЕ unit-тесты.
Книгу упомянули раза 3-4 под этим видео с отсылкой на то, что советы похожие. Если это действительно так, то одобряю конечно. Опять же авторитетные для меня люди ее читали и рекомендовали. Достаточно?
Спасибо за видео. Недавно смотрел одного зарубежного блогера, как оказалось - он русский, но при этом ведёт канал на английском. Основная причина - тонна негатива в комментах. Сейчас подобное замечаю и у вас, даже не знаю, почему в русскоязычном коммьюнити такая ситуация...
И еще вопрос: действительно ли необходимо такое количество коммитов? Мне кажется нехорошей ситуация с огромным количеством коммитов, я даже готов использовать некоторые инструменты для слияния коммитов.