"> ?>
Наверх

7 смертных грехов программирования: области, в которых все разработчики профаны

Иллюзия компетентности — наше всё. Вы уверены, что разбираетесь в одной-двух из этих областей? Поздравляем, вы в меньшинстве. Подавляющее большинство ваших коллег лишь мастерски изображают понимание. Самое время сорвать покровы с коллективного блефа.

Опубликовано 10.12.2025 в 10:30
программирование

Основные идеи

Сложные логические выражения в коде часто нечитаемы. ChatGPT смог объяснить пример лишь одним длинным предложением.
Проблемы многопоточности и параллелизма создают трудноуловимые ошибки без понятного стека вызовов.
90% конфигураций Kubernetes — это копипаст из чужого рабочего YAML-файла без полного понимания.
Регулярные выражения, часовые пояса и Unicode — эзотерические темы, где разработчики полагаются на Stack Overflow.

Мнение автора

Я видел сотни строк кода. Я сталкивался с ошибками многопоточности, которые невозможно воспроизвести, а стек вызовов бесполезен. Мой главный вывод: проблема не в незнании основ, а в сложности реальных задач, где пересекаются множество условий, потоков и внешних систем. Не пытайтесь выучить всё в идеале. Сосредоточьтесь на том, чтобы писать максимально простой и ясный код.

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

Но давайте будем честны. Есть несколько вещей, от которых у нас просто голова идёт кругом, например, программирование. Темы, которые мы как бы обходим стороной и делаем вид, что действительно понимаем, но на самом деле они представляют собой странную смесь путаницы в наших головах. Мы хотим их понять. Мы покупаем и читаем книги, чтобы понять их, но в итоге мы просто притворяемся.

Что ж, я уверен, что ты всё это понимаешь, но окружающие тебя люди притворяются. Верно?

Ладно, не стесняйся. Мы все в одной лодке. Может быть, ты действительно разбираешься в одной или двух областях программирования. Но если ты утверждаешь, что разбираешься во всех? Хм, да, конечно.

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

Видео от DGL.RU

Сложные логические выражения

Я знаю, что постоянно об этом твержу, но мало что так вредит моему мозгу и сбивает меня с толку, как код, который выглядит вот так:

returnfunction shouldApplyFreeShipping(order: Order) : boolean { ((order.total >= 100 && order.itemCount > 0) && (order.isVIP || (!order.isVIP && order.paymentMethod === «кредит»)) && !(order.hasBackorder && order.shipping === «экспресс-доставка»)); }

От таких вещей мне хочется биться головой о стену. Конечно, это работает. Конечно, в этом есть все необходимые правила. Но если ты скажешь мне, что можешь прочитать это, удержать все правила в голове и на самом деле понять, что здесь происходит, я пристально посмотрю на тебя. Именно из-за такого кода я всегда говорю: «Не бойся объясняющей переменной».

Кстати, я попросил ChatGPT объяснить приведённый выше код одним предложением, и он выдал такое (правильное) объяснение:

Функция возвращает true только в том случае, если сумма заказа составляет не менее 100 долларов (около 7 700 рублей) и в нём есть хотя бы один товар, а клиент является VIP-пользователем или не является VIP-пользователем, но платит кредитной картой, и это не экспресс-доставка товара, которого нет в наличии.

Фу.

Проблемы многопоточности и параллелизма

Поскольку у процессоров, казалось бы, бесконечный запас ядер, многопоточность сегодня стала неотъемлемой частью программирования. И, конечно же, многопоточность создает гигантские проблемы в программировании. Я уверен, что каждый из нас сталкивался с серьезной ошибкой в многопоточности, которая периодически воспроизводится, а стек вызовов от нее не больше пользы, чем от кроссворда, в котором не хватает всех подсказок. Это совершенно неизбежно.

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

Математика с плавающей запятой

Новому разработчику требуется время, чтобы принять (и тем более понять, почему) тот факт, что такие числа, как 0,7 и ⅓, не могут быть точно представлены в виде чисел с плавающей запятой в компьютере. Это кажется странным, но в конце концов мы смиряемся с этим. Но действительно ли вы понимаете почему? Возможно. Даже если вы понимаете, это не значит, что вы сможете каждый раз получать отчёт о расходах с точностью до копейки, не так ли? Нет.

Как- нибудь связано с Kubernetes

Ладно, кто-то там понимает, как работает Kubernetes, потому что он действительно используется. Но давайте начистоту: только небольшое сообщество преданных своему делу гуру действительно знает, как настраивать топологию кластера, сеть, управление доступом на основе ролей, пользовательские определения ресурсов, контроллеры входящего трафика, классы хранения, бюджеты на устранение сбоев в работе модулей, правила привязки и прочую мишуру.

Большинство из нас знают только основы YAML и собирают что-то работающее по кусочкам, а потом молятся, чтобы оно не сломалось. Признайтесь, 90 % ваших настроек Kubernetes были скопированы и вставлены из чужой рабочей конфигурации, в которой вы разбираетесь лишь наполовину.

Юникод и кодировка символов

Многие из нас выросли на старых добрых наборах символов ASCII и ANSI. Затем появился Unicode, который открыл цифровую вселенную для эмодзи, бесконечных символов Wingdings и нелатинских символов. Unicode — это здорово, но его практически невозможно понять. Например, кажется, что символы Unicode должны быть размером в два байта… но это не так. Но это только моё мнение. Я не сомневаюсь, что остальные из вас могут описать различия между UTF-8, ISO-8859-1 и Windows-1252. Конечно, можете.

Часовые пояса и переход на летнее время

Думаю, на всей планете найдётся всего четыре человека, которые действительно понимают все правила, связанные с часовыми поясами на Земле. Вы почти наверняка не входите в их число. Готов поспорить, вы даже не знали, что Непал — одно из трёх мест на Земле, где разница во времени составляет 45 минут. Можете ли вы правильно отсортировать временные метки с учётом правил перехода на летнее время? Сколько сейчас времени в городе Нокс, штат Индиана? Вы уверены? Поверь мне, ты не уверен.

Позвольте мне сказать так… Джон Скит, обладатель абсурдно высокой репутации на Stack Overflow, — действительно умный парень, который написал библиотеку для работы с датами и временем для .NET, и даже ему трудно уследить за всем этим.

Регулярные выражения

Сложные логические выражения ставят меня в тупик, но, по крайней мере, их довольно легко записать. Нет ничего сложнее для чтения и записи, чем сложное регулярное выражение. Правила эзотерические и запутанные. Символы имеют неясное, относительное значение. Я предполагаю, что регулярные выражения были созданы инопланетянами и каким-то образом попали к нам в качестве извращённой шутки.

Конечно, вы, вероятно, можете написать простое выражение для сопоставления. Но что-то помимо основ? Если вы похожи на меня, то почти наверняка скопировали его из ответа на Stack Overflow.

Посмотри на это:

/^(?:\+?\d{1,3}[-.\s]?)?(?:\(?\d{1,4}\)?[-.\s]?)?(?:\d[-.\s]?){6,14}\d$/

Вы ведь сразу поняли, что приведённое выше регулярное выражение соответствует международным телефонным номерам, верно? Это очевидно! (По крайней мере, так было написано в комментарии, когда кто-то скопировал его из блога.)

Ладно, хватит. Теперь у меня действительно болит голова. Я мог бы продолжать. (Ты вообще понимаешь свой скрипт сборки? И даже не начинай про аннулирование кэша…) Дело в том, что разработка программного обеспечения — сложный и трудоёмкий процесс, в котором много непонятных моментов. То, что мы вообще что-то делаем, — свидетельство нашего усердия и настойчивости.

Программирование для детей: лучшие программы на 2025 год

Ник Ходжес

Ник Ходжес

Кем он только не работал. Официантом, поваром и даже телемаркетером. За последнее он до сих пор извиняется. Он успел побыть учителем и офицером военно-морской разведки. В итоге этот путь привёл его в мир IT. Он стал разработчиком, написал книгу о коде, а потом стал руководить целыми командами.

Источник: Infoworld
Подпишитесь на наши новости:
Нажимая кнопку «Подписаться», вы принимаете «Пользовательское соглашение» и даёте согласие с «Политикой обработки персональных данных»