Плохой Код Убивает

Плохой программист Джон допустил ошибку в коде, из-за которой каждый пользователь программы тратил в среднем 15 минут времени на поиск обходного пути проблемы.

Было 10 миллионов пользователей.

Итого 150 миллионов минут = 2,5 миллиона часов потрачено впустую.

Если человек спит 8 часов в сутки, то на сознательную деятельность у него остается 16 часов.

То есть Джон уничтожил 156 250 человеко-дней ≈ 427,8 человеко-лет. Средний человек живет 64 года, поэтому Джон убил около 6,68 человек.

Как ты спишь, Джон, серийный программист? Пользователи — это нижняя часть пищевой цепочки.

Программисты тоже медленно убивают друг друга.



Правила хорошего кода

Простота-понятность-компактность, производительность, отсутствие дублирования.

Если вы напишете что-то более сложное, чем «привет, мир», оно будет располагаться не в одном, а в нескольких файлах.

Как правило, файлов больше десятка.

Всем им даны странные короткие имена (программисты любят аббревиатуры).

Человек, который попытается понять ваш код, будет плеваться, шипеть и ругать вас.

Ваша карма будет испорчена, и следующие несколько жизней вы будете собакой в Корее.

Примечание: «Привет, мир» — это не ошибка, именно так LibreOffice Writer поставил кавычки.

Джонни, привет! Всегда пожалуйста! Шучу, никогда.



Как выбрать хорошее имя

Хорошее имя максимально короткое, но в то же время максимально точно отражает суть объекта.

Люди будут читать ваш код (и вы сами перед сном), поэтому имена должны быть понятны людям.

John_bad_programmer — хорошее имя.

Хорошее имя состоит из одного, двух или трех слов.

Три – это много.

Одно хорошо, но зачастую этого недостаточно, чтобы отразить суть.

Прочтите следующие имена файлов (классов).

Сможете ли вы догадаться о назначении кода, не заглядывая внутрь?

  
  
   

profiler.h jitter_measurement.h developer_menu.h Animation2D.h Rectangle.h Wind_effect.h

Имя объекта внутри файла совпадает с именем файла.

Не нужно путаницы.

Если после моих объяснений вы продолжите давать файлам странные имена типа SoMFVec2s.h, вы застрелитесь.

Это разумный поступок, поскольку таким образом программист спасает жизни нескольким людям.

Примечание.

Ограничение на имя файла 8.3 было снято более 20 лет назад.

Нужны ли именам префиксы?

НЕТ.

Никакого визуального шума не требуется.

Современные «текстовые редакторы для программистов» дадут вам информацию о прототипе чего угодно при нажатии кнопки или наведении курсора мыши.

Поэтому любые префиксы в 20NN совершенно не нужны.

То же самое можно сказать и о пространствах имен: пространство имен — это префикс.

Постоянно используя префиксы типа std::cv:: вы, конечно, защитите себя от ошибки случайного использования объекта из другого пространства имен.

НО! Вы когда-нибудь были так неправы? Ошибка привела к чему-то серьезному? И вам придется вводить лишние символы сотни и сотни раз.

Оцените затраты.

Кстати, это твоя единственная жизнь.

Потратили 100 часов своей жизни на набор префиксов? Ты нормальный? Лучше бы я пошла погулять.

Мама

Можно ли давать объектам короткие имена?

НУЖНО.



int i; char c; byte b; string s; vector v; pointer p; argument a1;

Короткие имена хороши тем, что содержат наименьшее количество визуального шума и быстрее всего читаются и понимаются.

Зачастую совершенно ясно, над чем вы совершаете действие, поэтому обязательно дайте этому объекту короткое имя для удобства как чукотского писателя, так и чукотского читателя.

В поле зрения полэкрана - экрана короткое имя будет всем на пользу.



Подпространство

В окне «Панель управления Windows» вы видите объекты «Установка обновлений Windows», «Службы Windows» и «Шрифты Windows».

Несомненно, вас считают идиотом, забывшим, где он находится.

А еще для человека, который любит нагружать свой мозг: искать нужный объект снова и снова, отфильтровывая визуальный шум.

В подпространстве находятся 52 объекта, которые не разделены на группы ни по каким критериям.

Костыля тоже нет: «быстрый поиск пары букв с клавиатуры».

Наслаждаться.

Используйте подпространство с умом.

Имя библиотеки, имя каталога, имя файла, пространство имен, имя класса, имя функции.

К тому моменту, когда читатель взглянет на вашу функцию, он уже пройдет 5 уровней именования.

Программисты конечно не умственно отсталые, они запоминают контекст.

Комментарии

Если вы пишете понятный код с разумными именами, то комментировать вам практически нечего.

Только места с неочевидными вещами, хаки.

Лучше потратить силы на краткое описание того, что делает этот модуль.



Кстати.

….

и давайте вместе с нашей программой создадим сотню других, совершенно бесполезных, которыми никто не будет пользоваться.

И мы заставим пользователя установить их все на диск.

Мы не дадим ему выбора.

А свою основную работу мы как-нибудь сделаем – ошибемся и готово.

И это сойдет! Ха-ха-ха! Какая у нас сложная, объёмная, неустойчивая и саморазрушающаяся система! Удивительный! А давайте ещё при установке одного из обновлений потреблять 6 гигабайт памяти, чтобы на ноутбуке с отключенным файлом подкачки пользовательские приложения вылетали.

Ведь нам нужны все 6 гигабайт! Ой, иди купи больше памяти! И они будут медленно устанавливаться даже на самые современные компьютеры! Давайте создадим в нашей операционной системе кучу сетевых сервисов, которыми никто не будет пользоваться.

Но мы включим их все по умолчанию.

В наших сервисах будет много уязвимостей, желательно на уровне удаленного выполнения кода, и мы их постоянно будем исправлять! Блаженство! И наш установщик обновлений зависнет, съедая гигабайт памяти и 100% ресурсов процессора.

И мы будем совершать ошибки.

Пусть, например, наше обновление KB3136000 будет установлено много раз.

Джон, ты гений!

Трудный!

Я потратил около 20 минут на поиск этой функции.

Простая задача: разбить строку по разделителям.

Простую задачу следует решить максимально просто:

void split(const string& s, std::vector<string>& result, const string& delimiters = " ") {

Теги: #C++ #Ненормальное программирование #C++

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.