Плохой vs. хороший код / wtf is clean code
Python Интенсив от SkillFactory: go.skillfactory.ru/AzEgWw
Скидка 50% по промокоду WINDERTON и три курса в подарок + возврат денег за курс, если не нашли работу после обучения (промокод до 08.01.2023 г.)
Правильные наименования идентификаторов в коде дают +50% к читаемости.
За почти 100 лет существования программирования, у нас появились определенные правила, исключения и предпочтения, как именно давать имена разным сущностям в коде.
Я собрал все в одном месте.
Я wndtn, мне 20 c чем-то лет, и я изучаю computer science и программирую ~10 лет.
Я into С++, и всякие low-level штуки.
У меня есть небольшой проект, xplatform, который вы сможете найти на github, и через него практиковаться в изучении всей базы программирования, и если вам повезет(если вы упорный), вы станете хорошим программистом %)
Если нужна помощь в программировании 1 на 1, чекайте ссылки .
всем добра
Телега - t.me/wndtn
▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
Подпишись сюда:
Telega и чатик - t.me/wndtn
Boosty(менторинг) - boosty.to/wndtn
Instagram - / winderton
Github проекта(код с канала) - github.com/winderton
▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
Оборудование:
Камера - Sony a7ii
Объектив - SIgma F1.4 DG
Микрофон - AudioTechnica at2035
Звуковая карта - Scarlett Solo
Петличка - Rode smartlav+
Клавиатура - HyperX Alloy
Вторая клавиатура - apple magic keyboard(black edition)
Монитор DELL 25'
Монитор Asus mg248q
Iphone 11 pro(зеленый)
CAMLINK elgato - для стриминга
JBL headset
▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
Музыка:
technica - Unviverse
technica - time
technica - Tech
▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
00:30 Введение
1:33 Первый пример
1:56 Второй пример
2:21 Про важность Английского в программировании
2:43 Третий пример
3:13 Четвертый пример
4:17 Пятый пример
4:40 Шестой пример
4:47 Бонуска
6:12 Седьмой пример
7:00 Куча примеров на примере куска кода
8:30 Исключения из правил
8:40 Математика И геймдев.Наименования.
9:05 Низкоуровневое программирование. Наименования.
9:26 Интринзики, векторизация, SIMD. Наименования. Intel.
9:57 Пример с интринзиками
10:44 Венгерская нотация
11:33 Итоги и резюме
Нравится такое?
Аж передернул
Да, спасибо, было интересно. У тебя в конце видео очепятка, вместо camelcase написано camlecase, это так, к слову
Превосходно!
По инструкциям был студенческий проект, там конечно говнокода и костылей хватает, но если интересует, могу скинуть
Рекламы только слишком мало, можно еще пару вставок в начале видео, несколько десятков в процессе и пару сотен в конце И желательно брать еще более зашкварных рекламодателей, чтобы после скиллфактори шла реклама рейд шадоу ледженджс, после него гикбрейнса и сверху на этом всем университет синергия и подписка на экосистему мтс, тогда будет вообще хорошо
А как же видос на 12 часов о плюсах..
10 часов! И сначала по С 10, а потом по Плюсам))) ❤
Попахивает не чистым.
А так-то, может быть он решил, что выпустить 10 часов разными роликами, будет куда проще запомнить.
В сети в принципе если хорошенько покопаться, можно найти неплохую годную инфу как по Си, так и по плюсам, в т.ч. для новичков. Но ссылок давать не могу, бо нехорошо постить ссылки на авторском канале. Правила хорошего тона ютуба не забываем соблюдать. Просто ищите усерднее, вся инфа есть в свободном доступе.
@@randomcreations1079 скинь ссылку
Топ самых сложных задач в программировании: 1. Начать новый проект без шаблона 2. Подключать библиотеки в которых сломано имя типа 3. Писать драйвера на ассемблере
0. Написать шаблон для будущих проектов.
начать писать мэйкфайлы вместо вызова компилятора каждый раз
1. Начать
-n. Перестать смотреть видео и перейти к практике.
4. Назвать объект
В python добавление __ приводит к тому что метод фактически будет иметь другое имя с префиксом имени класса, что делает его как бы private методом и не позволяет переопределить в дочернем классе. Т.е. в Base и Derived классах __some_method это разные методы: Base__some_method и Derived__some_method соответственно
Такой видос это та самая невидимая помощь и себе и другим. Культура таких вещей оч важна. Спасибо)
Отличное видео получилось, много полезной инфы для новичков. Мне нравиться как ты амбициозно и доступным языком объясняешь 👍
посмотрел с кайфом, ботать инглиш топ основа, даже если не прогаешь, в любой непонятной ситуации просто его ботаешь и не паришься потом
Круто,что учитель информатики учится писать понятный код,чтобы потом учить писать этот понятный код
Auf
Для новичка в мире программирования очень полезное видео. Всегда не знаешь как правильно назвать переменные, а оказывается есть правила, спасибо!)
Если ты новичок, то держись от этого канала подальше. Обходи романа стороной.
@@obi3kenobi Почему?
@@obi3kenobi yeah, why?
К сожалению они не едины для всех, но действительно "выберите и придерживайтесь".
И в каком месте оно полезное? Человек хочет просто написать int a = b + c;, а его тут же заставляют писать first_variable или __totalAmount с какими-то черточками в начале. Как по-мне, в программировании важно знать, как решить, а не как писать
С терминологией прям беда. Функция - это подпрограмма, которая возвращает некий результат. Процедура - это подпрограмма, которая результат не возвращает. Метод класса может быть как процедурой так и функцией но, следуя парадигме, работает только с данными (полями, членами) класса. Формально, в некоторых языках (например в сях) нет процедур, но любая сишная функция, возвращаюшая void может рассматриваться как процедура.
4:50 разница между одним подчеркиванием и двумя(хотя обойти эту "защиту" несложно): Одно подчеркивание обозначает, что это можно использовать в данном классе и в дочерних, а два подчеркивания разрешают доступ ТОЛЬКО из данного класса. Если писать без подчеркиваний перед именем, то это обозначает что это публичное(аналог private, protected и public из плюсов, только названия у первых двух поменяли)
Спасибо, узнал про венгерскую конвенцию. Хорошо бы ещё выделять места в коде о котором идёт речь и на что следует обратить внимание во время просмотра. Т.к. бывает сложно одновременно вникать в код и понять о каком участке этого кода в данный момент идет речь. Как говориться не тупой, а просто медленно доходит :)
😄😄
В это время C#: у нас есть правила написания кода и ты должен их соблюдать. Никакой самодеятельности
Капец как интересно! Больше видосов по инфраструктуре и таким вот нюансам которые очевидны программистам высокого уровня и неизвестны начинающим.
Прям закидываешь контентом в последнее время, спасибо!
Для возможности прогуглить я бы добавил еще упоминание конкретных кодстайлов, например тоже очень популярный кодстайл от гугла, где почти все правила чуть другие (и касаются не только непосредственно наименований). Ну и самое главное - когда начинаешь проект, важно сразу определить кодстайл (пусть он и будет солянкой из разных более принятых стандартов), которому будут все следовать, чтобы потом в процессе работы не было холиваров.
В разных компаниях - разные требования и стандарты, это же касается не только стиля написания кода, а скажем аспекта безопаности или распространения сэмплов. Для себя можно свой стиль придумать, как ты и сказал. По факту та же венгерская нотация нужна если ты каким-нибудь опенсурсом занимаешься
@@helpless3526 в опенсорсе если это старый проект и венгерская нотация там принята - да, придётся использовать. Но её вроде как всем миром уже послали куда подальше, т.к. даже в виме с lsp можно посмотреть тип переменной. В целом, если это твой проект, не важно куда он идет, в опенсорс или просто пет, ты волен писать код как хочешь, пока это позволяет компилятор и твоё (команды) понимание здравой логики. В других случаях естественно нужно следовать принятым стандартам
@@Saiel2285 Правила именования нужны и для тебя тоже. Поэтому нужно думать над названиями отдельных переменных и над общей системой именований. В команде над системой думать уже не нужно, нужно взять ту, что есть.
Такой видос очень полезен для многих, продолжай делать подобные! А я, как минимум буду ждать и обязательно смотреть!
Спасибо большое за твой труд!
Не знал про венгерскую нотацию, с каждым видосом узнаю что-то новое, спасибо огромное. Надеюсь такими темпами скоро перерасту в гигапрограммиста😂
программируй и может перерастешь а так 2 рекламы в ролик потреблять тоже годно
Видос познавательный,продолжай в том же духе, спасибо 😉
Сделай видео по настройке компилятора VSC? Что и как лучше под С++ настроить, чтобы с отладчиком было норм и компилить под Linux/Windows можно было.
Спасибо! Прекрасный контент. То, что нужно.
Спасибо, Виндертон! Действительно полезный видос
имхо, иногда надо такие видики делать
@@wndtn почаще бы, редко такой контент встречаю
Видео по бустерам векторных команд было бы интересно глянуть. На счет наименования, не привели важный для примера шарп. Ведь там размеры функций и некоторых имен начинают включать 3-4+ слова и иногда читать код из за этого еще сложнее, так как теряются зрительно операторы. А сходу даже 3-4 словное название может очевидно не сказать не знакомому с этой программой человеку о его назначении.
8:55 Так это не исключения из правил, это прямая привязка кода к предметной области. Хотя ладно, индексы i,j,k - наследие мат. итерации по множеству элементов. А вот x,y,z-координаты у векторов, это точное описание предметной области, в которой мы работаем с вектором.
Дружище, такое нужно, благодарочка)
Я программист-любитель C++ начального уровня уже 10 лет потому что думал что тупой, а оказывается что читать чужой код тяжелее чем писать. Если бы мне изначально это сказали я бы наверно стал программистом. Балуюсь мк атмега.
Очень хочу увидеть туториал по intel sse, simd, avx и о том как с этим работать из джавы. Заранее огромное спасибо
Определённое надо! Спасибо больше, полезно пересмотреть что бы вспомнить
давай видосик по SIMD, с кайфом будет. всегда сложно воспоинимать это было, хотя без этого никуда, особенно, если на каком-нибудь masm пишешь..FPU уже не канает
"Венгерская нотация" облегчает создание читов. Я с этим лично сталкивался. Зачем-то в код засунули упорядоченные имена переменных, которые я не знал, от чего вообще. Я вчитался в них, создал предполагаемую структуру, и начал накладывать её на разные массивы данных. Таким образом я не только добыл данные, но также и точно узнал, за что отвечают эти значения. Их "венгерность" была в том, что они начинались с b_name, i_name, d_name. И я понял, что это bool, integer и dword и т.д.
Благодарю Вас за видео 👍
Двойное подчеркивание в атрибуте класса заставляет интерпритатор Python перезаписать имя атрибута, что бы при расширении класса не было конфликта имен.
В Пайтон: Одно подчеркивание - имя доступно во всех дочерних классах, но не за пределами класса Два подчеркивания - имя доступно только в данном классе и нигде более
т.е. protected и private, если использовать классические термины.
Но по факту, если использовать одно подчеркивание, имя доступно вне класса
Круто, побольше таких роликов👍
Спасибо! Отличное видео!
Яге
ку бро! не хочешь снять полноценное видео по кодстайлу?
Добавлю от себя - не забивайте болт на пробелы, как показано в примере с переменными в цикле! Текст любого содержания надо сначала прочесть, и делать это при возможности без боли :/
Будет интересно послушать про intrisic и прочие оптимизации)
мне нравится как в голанге подошли к названию функций. Если начинается с маленткой буквы - значит метод \ функция приватная и ее видно только внутри ее пакета. для публичных методов только PascalCase юазельный, имхо.
Не помню когда подписался на тебя, но понимаю почему. Голос - топ. Контент - топ. Видео - топ. Однозначно лайк и колокольчик
весь семак за 12 минут, кайф
Когда будет курс по любом ЯП?)
4:40 - self._private, self.__protected. Разницы почти нет... Только особенности при наследовании. А сделать реально приватными или защищенными можно только подключив спец либу для этого
В целом про такие вещи как венгерская нотация (и другие нотации, в т.ч. для ассемблера), и другие моменты программирования появившиеся довольно таки давно можно прочитать в древней литературе по программированию и computer science. В более современных книгах такую инфу порой опускают, т.к. наверное думают, что книгу читают уже прошаренные ребята. Поэтому всем, кто хочет копать глубже, читайте древние книги иногда тоже.
Вот на фиг. Сейчас на каждую действительно полезную древнюю книгу написан более актуальный аналог. Который говорит о том же самом, но с учетом современных реалий.
Венгерская нотация только мусорит код. Все современные IDE умеют выделять значимые различия в именах цветом.
в пайтон дабл-андерскор (за исключением “magic” методов) имеет значение private а один андерскор protected. protected это просто соглашение а private это реально private
А по поводу стакана, кстати, я бы предложил третий вариант: сосуд вдвое больше нужного:)
Намного лучше построен видос чем до этого был по плюсам. Чистая выжимка инфы с минимум "отвлечений" от темы, вот так овер хорошо.
очень интересно, спасибо
аффтор, за базар отвечаешь? 😆
Хорошо зашло видео!
3:18 Метод - это функция, принадлежащая какому-либо классу. (основы ООП для ВУЗов)
Было бы здорово видео по инструкциям
Уважаемый автор, получилось неплохо. Но вы бы небольшой списочек литературы дали в конце. Тема же большая и сложная. В одном видосе не охватишь. А так вроде и по делу, а вроде и по верхам совсем ✌️
9:47 отличный код, чтобы получить по шапке от Ибшников, безопасность так сказать нынешних програмистов во всей красе
Поподробнее, пожалуйста. Интересно.
@@iskak9 Во-первых, для работы со строками в C++ следует использовать std::string, а не нуль-терминированные строки (причины давно известны: производительность, безопасность). Во-вторых, этот код копирует в dest 12 символов из src, а значит, не копирует завершающий нуль. Конкретно в этом коде это проблемы не вызовет, т.к. dest выводится в консоль посимвольно и итераций в цикле будет ровно 12. Но при попытке использовать любую сишную функцию для работы со строками с dest, типа strlen(), произойдёт выход за границы dest, т.к. эти функции читают данные, пока не встретят нуль. И вообще, нуль-терминированные строки - игрушка дьявола и извращение. На C и C++ лучше вообще не писать, если досконально не знаешь стандарт, т.к. слишком велика вероятность вызвать undefined behaviour, как в случае с strlen(dest). Многие не знают, но единственное место с undefined behaviour в программе автоматически лишает программиста всех гарантий на корректность её работы, и это относится ко всему коду программы, а не только к участку с UB. Просто разработчики компиляторов - слишком добрые люди, и очень стараются сделать так, чтобы твой говнокод работал. Короче говоря, на C и C++ лучше вообще не писать, если ты не бог, а раз ты не бог, то и не пиши.
Привет,есть такое предложение или желание, не знаю,у тебя есть видос про собеседование,сделай стрим якобы собеседование только от подписчиков 😉
1:42 А разве можно использовать имя sum? Ведь это имя встроенной функции вычислить сумму чисел в списке.
хороший ролик. неплохо рассказал
Взгляд начинающего. Приходишь на курсы где тебе рассказывают, что за год сделают из тебя джуна. Проходит год и ты понимаешь насколько ты далек от джуна. Чуть позже к тебе приходит осознание что курсы это колесо для хомячка.
Блин, бро, что с английским ин зис видео? Camle вместо Camel, Klass вместо Class. Может это аллегория или постирония, в таком случае заранее извиняюсь)
Имена переменной по Go way - да да, пошли мы нафиг)
Я думал в начале реклама и хотел её пропустить
По третьему пункту: завел себе словарь имен переменных, функций, классов... сумарно уже порядка 500 имен, разделены по группам применения... словарь покрывает %%90 необходимого мне на новом проекте, остальные 10% придумываются и заносятся в словарь
да теперь понимаю , когда программист говорит эту программу написал тот или инной человек или компания
Давай примеры на плюсах будут) На петухоне они не читаются для нормального человека, а на плюсах - самое то👍🏻
Мне больше всего понравилась часть кода import time as time :)
я хотел написать as t, чтобы уродливо выглядело, но видимо забыл
Ты таакоооой молодец !
Создать интернет - в точку 🤣🤣🤣🤣🤣
что он сказал после этого? я пытался понять, но не вышло
@@Thread_Sleep равенство P и NP классов это одна из нерешëнных задач тысячелетия, за решение которой институт Клэя платит $1.000.000. Простыми словами: есть класс задач, для которых пока не придумали алгоритм решения, который работает быстрее полного перебора. Суть проблемы в том, чтобы придумать такой алгоритм, тогда P=NP, или доказать, что это не возможно P≠NP.
По SIMD и оптимизации хорошо объясняет Agner Fog
ооо, чел. У меня есть оптимизации в закладках основных. Можешь во многих видосах увидеть.
@@wndtnя много видео видел о ASM на KZhead и там информация уровня Hello World. Только Agner Fog объясняет сложные вещи такие как векторизация.
Видео на высоте. Автор засунул в название качественный кликбейт, а само видео это приятные темные визуалы и приятный голос, сценарий без воды. Вообщем я был тут до 10 млн просмотров
Не встречал такой информации в книгах, которые читал.... Очень пригодится) спасибо за видео! Как раз тот контент, которого раньше не находил на других каналах
Спасибо
НЕТТТ! Самая главная и сложная проблема в программировании - КАК НАЗВАТЬ ПЕРЕМЕННЫЕ !
Отличное видео
О😂 мой кореш в рекламе в начале
Очень круто и полезно хочу гайд как читать код для маленьких
так а че там с web3 и NP задачами? тема не раскрыта
Скиньте ссылочку, с чего начинать учить английский? учусь на программиста, с английским все плохо😢
Я начинал с "полоиглот англ за 16 часов". Лет 10 назад )
Пока какие-нибудь курсы изучения языка не поломали вам мозг, используйте секретный метод изучения. Берете свой любимый сериал, фильм или мультфильм на английском. Включаете английские титры. Русские не нужны, смысл происходящего в вашем любимом фильме вы уже точно помните. Все фразы которые хотите перенять и запомнить, громко орёте в распознавалку речи, типа "голосового помощника" в телефоне. Орать надо громко, перенимая не только слова, но и манеру произношения и жесты ( нужно обезьянничать, как это делают дети ). Если "распознавалка" понимает то что говорит актёр в фильме, но не понимает то, что пытаетесь изобразить вы сами, то в вашем произношении есть ошибка. Если "распознавалка" вас понимает, то человек-собеседник, потенциально, наниматель-экзаменатор вас точно поймёт. Более того оценит раскованность речи, а так-же перенятую у профессионального актёра мимику и язык тела (эмоджи). Сейчас наём на работу производят в основном удалённо в режиме видео, - тренируйтесь по возможности на камеру. С коллегами вам так-же придется общаться по видеоконференциям. Удалённая работа сейчас в моде. Используйте в общении только тот набор фраз, шаблонов речи (идиом), который выучили таким образом, - у собеседника возникнет иллюзия что вы владеете языком в полном объёме на уровне "native" или "near-native". Я так проработал английский(70), русский(90), польский(90), чешский(20), болгарский(10), венгерский(10), японский(10). Циферки в скобках это процент владения каждым языком. Что даёт такой подход? Я проработал с японцами пол года, общаясь на японском, прежде чем тем удалось понять что я и десятой части японского языка толком-то и не знаю. Записывайте на диктофон то что вам говорят, можно внимательно прослушать позже, или даже прогнать через "распознавалку". Особого внимания заслуживает встроенная в язык механика подтверждения понимания - слушать собеседника нужно активно, мимика и жесты очень важны. Изучите пустые фразы - заполнители, пословицы, длинные ругательства, упоминания погоды, анекдоты, истории за котиков (заготовленные истории) Это очень помогает болтать без умолку, пока думаешь о том чтобы такого сказать, или пытаешься понять о чем конкретно тебя спросили. Ну и то, чего делать нельзя ни при каких обстоятельствах - не пытайтесь придумать фразу на своём родном языке и переводить её на выбранный вами язык на лету. Это никогда не работает, в вашем распоряжении есть только то, что вам удалось идеально отрепетировать. Даже такая мелочь как произнести имя "Серёжа", например на близко-родственном украинском языке, без акцента, можно тренировать неделю. Некоторые слова выбранного вами языка вы так и сможете научиться произносить. Просто избегайте произносить такие слова. Всегда помните, что язык Эллочки-людоедки из "12 стульев" существует в любом языке. Но во многих бытовых случаях достаточно и его. Весь набор наиболее употребляемых в языке фраз и выражений, никогда не соответствует академическим правилам этого языка. В основном это сплошные исключения из правил, включающие и "новояз", и слова-паразиты. Как в в польском "перделка", "пердолыты", "попердолила до склэпу" ... никогда не употребляется в литературном варианте языка ( как русский мат ), но без понимания этих слов-паразитов, часто невозможно понять смысл фразы целиком.
Дякую за відео)
Да, го гайд на производительность
Ну большинство на с подобных языках пишут в взуалке, где кулэнг включен по умолчанию))) Так что двойной ___ Легален!
Где 12 часов по плюсам?)
Когда будет геймдев ?
8:50 помню кто то писал что 3 вложений for() очень плохо
Три сложнейшие проблемы в программировании: 1. САМОЗАНЯТОСТЬ
Про питон , не знаю почему автор не потратил примерно пять минут на гугление, но различие в питоне __ и _ это протекдед и приватные методы. Отличие в том что протекдет метод это по сути алиас для названия метода как название класса + название метода и сделано это для того что б этот метод был гарантировано уникальным. А еще не пишите в камел кейсе на питоне это не по пеп8 и глазки болят
Что такое теоретическая компрессоциация??
12 часов о плюсах ждем
просто прогайте на go и не парьтесь
Грустно, что примеры на питоне не соответствуют пеп8
Я то за если напишешь какой-то гайд лайн. Я на питоне не пишу в принципе, но думаю если бы писал, то делал бы красиво все.
Children Computer Science (CCS ❤) просто поддержу кометном вместо лайка) всегда приятно 10 минут посмотреть))
python: _a - private, __a - protected. в первом случае не желательно использовать, а в последнем прям нельзя(хотя можно)))))
наоборот _a protected, __a private
Сначало виде по плюсам, становимся в очередь
В JS именование констант с большой буквы отнюдь необязательно, даже наоборот я не видел, чтобы так кто-то делал, за исключением чрезвычайно редких моментов
В англоязычных обучалках типа curriculum на freecodecamp делают упор что константы следовало бы писать большими буквами.
Константы - это более широкое понятие. Есть просто const - в том числе и вполне изменяемые сложные объекты - они по сути не настоящие "константы", только формально. Есть enum (хотя типа нет, но enum есть), - там тоже никто большими не пишет. Но вот глобальные строки или нумерик - пишут. В частности в тех же .env файликах я никогда и не видел как-то по-другому записанных констант...
А вообще лучше прочитайте «чистый код» Роберта Мартина
Цитата: Java - язык в котором есть реально интерфейсы… Ну common) Java произошел от C++ взяв лучшее) В том числе и интерфейсы ;-)
Них..я не понятно, но Очень интересно.
Просто лучший...
неожиданно большой актив
крутой видос реально, но, блин, можно говорить чутка помедленнее)
Привет, сделай крутой видос о с++🎉🎉🎉
Крутой )