"> ?>
Наверх

Стыдно признаться: 7 вещей в программировании, которые вы зря пытаетесь понять

Большинство из нас просто кивает и делает вид, что во всем разобрался. А на самом деле — нет.

Опубликовано 15.12.2025 в 21:39
Сложные темы в программировании: что известно? | DGL.RU

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

Многие разработчики притворяются, что понимают сложные концепции, хотя это не так.
Kubernetes, многопоточность и Unicode — одни из самых непонятных тем в IT-сфере.
Сложные булевы выражения и регулярки заставляют программистов копировать код со Stack Overflow.
Не стоит стыдиться пробелов в знаниях, ведь разработка ПО — это очень сложная отрасль.

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

Эта статья — отличное напоминание, что никто не знает всего. Вместо того чтобы имитировать понимание Kubernetes или регулярок, лучше сосредоточиться на основах и не бояться задавать вопросы. Признание того, что вы чего-то не знаете, — первый шаг к тому, чтобы действительно в этом разобраться.

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

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

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

Видео от DGL.RU

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

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

Сложные булевы выражения

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

function shouldApplyFreeShipping(order: Order): boolean {
  return ((order.total >= 100 && order.itemCount > 0)
    && (order.isVIP ||
      (!order.isVIP && order.paymentMethod === "credit"))
    && !(order.hasBackorder && order.shipping === "express"));
}

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

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

Оно возвращает true только тогда, когда заказ стоит не менее 100 долларов и содержит хотя бы один товар, клиент является VIP-персоной или не-VIP, который платит кредитной картой, и это не экспресс-доставка, которая содержит товар с отложенным заказом.

М-да.

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

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

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

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

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

Все, что связано с Kubernetes

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

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

Unicode и кодировки символов

Многие из нас выросли на старых добрых наборах символов 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$/

Вы же с первого взгляда поняли, что это регулярное выражение для проверки международных телефонных номеров, да? Очевидно же! (Или, по крайней мере, так утверждал комментарий, когда кто-то вставил его из поста в блоге).

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

Ваш любимый Python для ИИ — большая ошибка. Пора переходить на JavaScript

Ник Ходжес

Ник Ходжес

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

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