Большой процент так называемых «экспертов» сегодня знают только, как использовать какой-нибудь хайповый инструмент, но они ничего не понимают в том, как все работает на более глубоком уровне. Это реальный вызов и большая проблема на будущее.

Рулевое колесо — это абстракция, которая облегчает управление автомобилем. Усилитель руля — это еще один уровень абстракции, который еще больше улучшает впечатления от вождения. Абстракции хороши, они обычно повышают качество жизни. Однако у нас в Дании есть пословица, которая гласит:

«Слишком мало» и «слишком много» испортят всё.

Что толку от абстракции, когда она ломается и никто больше не понимает, как работает технология, лежащая в её основе?

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

Сегодня «программистов» и «системных администраторов» практически не существует, вместо них у нас теперь есть должности DevOps и даже DevSecOps, в которые индустрия очень старается втиснуть все возможные задачи и повесить их на одного человека. Технические специалисты должны заниматься и разработкой (Dev), и безопасностью (Sec), и «операциями» (Ops), то есть системным администрированием. Но поскольку ни один человек не может по-настоящему всё это освоить, приходится максимально всё автоматизировать, чтобы сэкономить деньги и избежать сложностей человеческого взаимодействия между различными отделами. В результате современного технического специалиста учат только тому, как использовать конкретные инструменты, но тогда он или она получает очень мало знаний о технологиях, на которых такие инструменты работают.

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

Люди привыкли к такому количеству абстракций, и они думают, что такой подход правильный, и они с радостью вносят свой вклад в этот бардак, добавляя еще больше абстракций.

Да, да, давайте все снова кодить на ассемблере!

— саркастический комментарий надменного разработчика

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

Уже сейчас большинство «специалистов по безопасности» очень мало знают о собственно безопасности, а знают только о том, как использовать какой-то готовый инструмент для пентеста. Инструмент для пентеста показывает кучу зеленых огоньков в своем веб-интерфейсе, и предполагается, что все хорошо. Тем не менее, настоящий эксперт по безопасности со злыми намерениями давным-давно взломал систему и всё это время распродаёт ценные данные в даркнете. Ничто не утекает и ничто не обнаруживается. Это может продолжаться годами, и никто об этом не узнает, ну, потому что графический интерфейс говорит, что ?все в порядке.

Один простой пример

Одна компания, которой я помогал с безопасностью, использовала стороннюю фирму-подрядчика, которая наняла именно таких людей. Разработчики знали, как собрать сайт и API, используя «современный фреймворк», но мало что понимали в устройстве самого фреймворка и совершенно ничего — о безопасности. И как только начали возникать проблемы, никто не мог разобраться, что происходит. Если точнее, они мучались с этой ситуацией в течение нескольких месяцев, прежде чем, наконец, решили обратиться за помощью.

Одного взгляда на то, насколько плохо все работало, хватило, чтобы понять что что-то не так. Я скопировал всё для проверки в оффлайне и первым делом начал смотреть код этой системы. Я провел вечер, просматривая строки кода, файл за файлом, сравнивая оригинальные файлы фреймворка с теми, что работали на хост-машинах компании. Просто просматривая код и файлы.

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

Короче говоря, в данном случае оказалось, что они были взломаны, и система использовалась как своего рода бэкенд для распространения порно и прочего хлама. Проблемы же с производительностью были вызваны не взломом, а самим фреймворком, который был ужасно медленным (в этом нет ничего удивительного, но это уже другая история). Взлом был довольно скрытным и, скорее всего, никогда бы не был обнаружен, если бы я не решил «поковыряться» и фактически просмотреть файлы и код.

ПРИМЕЧАНИЕ

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

Советы тем, кто изучает технологии

  • Никогда не следуйте просто хайпу или тенденциям;

  • Будьте любопытны. Не просто изучайте инструменты, попытайтесь понять, как работает лежащая в их основе технология;

  • Если возможно, попробуйте хотя бы раз вручную сделать то, что, делает за вас инструмент;

  • Если возможно, попробуйте взглянуть на код инструмента. Даже базовое понимание кода может быть очень ценным;

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

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

P.S.:

В этом посте я хочу сказать не о том, что все должны понимать все «с нуля» или ��то вам не следует использовать какие-либо инструменты. Как я уже сказал, нам нужны абстракции. Кроме того, у нас есть люди, которые специализируются в различных областях, например, механик ремонтирует грузовик, а водитель им управляет.

Скорее, я говорю о том как важно инженерное отношение к технологии со стороны людей, работающих с технологиями.

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

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

Около полугода назад я наткнулся на некоторых веб-разработчиков, которые не знали, что можно создать веб-сайт без инструмента развертывания и что вам вообще не нужен никакой JavaScript, даже когда веб-сайт принимает оплату. Я спросил об этом своего друга, который в то время преподавал класс по Python, и он сказал:

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

Я знаю, всегда найдутся люди, которые проявят интерес к более низкоуровневой разработке программного обеспечения, но дело не в этом. Дело в том, что конкретно в разработке программного обеспечения мы давно достигли точки, когда добавили слишком много уровней абстракции и слишком мало людей понимают, что они делают. Индустрия простреливает себе ногу.

Если, например, я веб-разработчик, будь то front-end или back-end, или занимаюсь так называемой «интеграционной работой», и я создаю веб-сайты без особого кодирования или каких-либо знаний о TCP/IP, DNS, HTTP, TLS, безопасности и т.д., используя только готовые инструменты или фреймворки, то это сделает меня примерно таким же полезным, как обезьяна с динамометрическим ключом, когда что-то пойдет не так.