Большой процент так называемых «экспертов» сегодня знают только, как использовать какой-нибудь хайповый инструмент, но они ничего не понимают в том, как все работает на более глубоком уровне. Это реальный вызов и большая проблема на будущее.
Рулевое колесо — это абстракция, которая облегчает управление автомобилем. Усилитель руля — это еще один уровень абстракции, который еще больше улучшает впечатления от вождения. Абстракции хороши, они обычно повышают качество жизни. Однако у нас в Дании есть пословица, которая гласит:
«Слишком мало» и «слишком много» испортят всё.
Что толку от абстракции, когда она ломается и никто больше не понимает, как работает технология, лежащая в её основе?
Слишком много в IT-индустрии сосредоточено на извлечении прибыли и слишком мало — на всём остальном. Вам нужно иметь возможность выпускать новые продукты или новые услуги всё быстрее и быстрее. А это означает ещё больше абстракций и больше автоматизации, меньше и меньше людей и меньше глубокого понимания.
Сегодня «программистов» и «системных администраторов» практически не существует, вместо них у нас теперь есть должности DevOps и даже DevSecOps, в которые индустрия очень старается втиснуть все возможные задачи и повесить их на одного человека. Технические специалисты должны заниматься и разработкой (Dev), и безопасностью (Sec), и «операциями» (Ops), то есть системным администрированием. Но поскольку ни один человек не может по-настоящему всё это освоить, приходится максимально всё автоматизировать, чтобы сэкономить деньги и избежать сложностей человеческого взаимодействия между различными отделами. В результате современного технического специалиста учат только тому, как использовать конкретные инструменты, но тогда он или она получает очень мало знаний о технологиях, на которых такие инструменты работают.
Совсем не кстати и то, что технологии становятся все более трудными для понимания, а все больше и больше современной жизни сильно зависит от используемых нами технологий. Так что же произойдет, когда уровень понимания в технологической индустрии достигнет такой низкой точки, при которой большинство людей даже не будут знать, как починить инструменты, которые они используют?
Люди привыкли к такому количеству абстракций, и они думают, что такой подход правильный, и они с радостью вносят свой вклад в этот бардак, добавляя еще больше абстракций.
Да, да, давайте все снова кодить на ассемблере!
— саркастический комментарий надменного разработчика
Абстракции нам нужны, без сомнения, но за каждый уровень абстракции приходится платить, что, по иронии судьбы, в конечном итоге может привести к огромной потере прибыли.
Уже сейчас большинство «специалистов по безопасности» очень мало знают о собственно безопасности, а знают только о том, как использовать какой-то готовый инструмент для пентеста. Инструмент для пентеста показывает кучу зеленых огоньков в своем веб-интерфейсе, и предполагается, что все хорошо. Тем не менее, настоящий эксперт по безопасности со злыми намерениями давным-давно взломал систему и всё это время распродаёт ценные данные в даркнете. Ничто не утекает и ничто не обнаруживается. Это может продолжаться годами, и никто об этом не узнает, ну, потому что графический интерфейс говорит, что 🟢все в порядке.
Один простой пример
Одна компания, которой я помогал с безопасностью, использовала стороннюю фирму-подрядчика, которая наняла именно таких людей. Разработчики знали, как собрать сайт и API, используя «современный фреймворк», но мало что понимали в устройстве самого фреймворка и совершенно ничего — о безопасности. И как только начали возникать проблемы, никто не мог разобраться, что происходит. Если точнее, они мучались с этой ситуацией в течение нескольких месяцев, прежде чем, наконец, решили обратиться за помощью.
Одного взгляда на то, насколько плохо все работало, хватило, чтобы понять что что-то не так. Я скопировал всё для проверки в оффлайне и первым делом начал смотреть код этой системы. Я провел вечер, просматривая строки кода, файл за файлом, сравнивая оригинальные файлы фреймворка с теми, что работали на хост-машинах компании. Просто просматривая код и файлы.
Конечно, в мои намерения не входило просматривать все подряд, но часто удивительно, как много можно узнать из небольшого ручного осмотра. Часто правда лежит прямо на поверхности, и, проявив немного терпения, вы можете найти ее. Для этого, конечно, требуется нечто большее, чем просто базовое понимание того, как работает технология. Некоторые студенты сегодня, по-видимому, даже не знают, что такое файлы и папки?
Короче говоря, в данном случае оказалось, что они были взломаны, и система использовалась как своего рода бэкенд для распространения порно и прочего хлама. Проблемы же с производительностью были вызваны не взломом, а самим фреймворком, который был ужасно медленным (в этом нет ничего удивительного, но это уже другая история). Взлом был довольно скрытным и, скорее всего, никогда бы не был обнаружен, если бы я не решил «поковыряться» и фактически просмотреть файлы и код.
ПРИМЕЧАНИЕ
Я намеренно не вдаюсь в подробности этого случая с примерами кода и т. д., поскольку для этого понадобится отдельный пост, явно посвященный теме безопасности (и, возможно, конкретным проблемам с производительностью), что не тема этого поста.
Советы тем, кто изучает технологии
-
Никогда не следуйте просто хайпу или тенденциям;
-
Будьте любопытны. Не просто изучайте инструменты, попытайтесь понять, как работает лежащая в их основе технология;
-
Если возможно, попробуйте хотя бы раз вручную сделать то, что, делает за вас инструмент;
-
Если возможно, попробуйте взглянуть на код инструмента. Даже базовое понимание кода может быть очень ценным;
-
Оставайтесь любознательными. Продолжайте учиться. Экспериментируйте. Погрузитесь глубже в технологию, которая вас интересует. Если возможно, создайте домашнюю лабораторию и используйте ее как площадку для обучения и совершенствования;
-
Подвергайте сомнению все. Особенно то, что кажется не имеет никакого смысла. Не просто предполагайте, что кто-то другой знает лучше — так вы быстро превращаетесь в слепого последователя. Иногда кто-то другой действительно знает лучше, но не стоит просто предполагать, что так оно и есть. И будьте храбры! Отстаивайте правду и свои убеждения, даже если это заставляет вас чувствовать себя одиноким.
P.S.:
В этом посте я хочу сказать не о том, что все должны понимать все «с нуля» или что вам не следует использовать какие-либо инструменты. Как я уже сказал, нам нужны абстракции. Кроме того, у нас есть люди, которые специализируются в различных областях, например, механик ремонтирует грузовик, а водитель им управляет.
Скорее, я говорю о том как важно инженерное отношение к технологии со стороны людей, работающих с технологиями.
Например, в разработке программного обеспечения слишком много специалистов были абстрагированы и заменены инструментами и автоматизацией, и все меньше и меньше людей понимают что-либо хотя-бы на один уровень ниже, чем уровень, на которым они работают.
Это серьезная проблема, потому что в конечном итоге мы достигнем точки, когда очень немногие люди смогут что-либо починить на нижележащих уровнях. И в том-то и дело, что мы уже отчасти дошли до этой точки!
Около полугода назад я наткнулся на некоторых веб-разработчиков, которые не знали, что можно создать веб-сайт без инструмента развертывания и что вам вообще не нужен никакой JavaScript, даже когда веб-сайт принимает оплату. Я спросил об этом своего друга, который в то время преподавал класс по Python, и он сказал:
Не удивляйтесь этому. Таков сегодняшний уровень. Индустрия хочет, чтобы мы массово выпускали людей, которые знают, как «нажимать кнопки», а не людей, которые понимают что-либо на более глубоком уровне. Они более или менее заинтересованы только в быстром внедрении.
Я знаю, всегда найдутся люди, которые проявят интерес к более низкоуровневой разработке программного обеспечения, но дело не в этом. Дело в том, что конкретно в разработке программного обеспечения мы давно достигли точки, когда добавили слишком много уровней абстракции и слишком мало людей понимают, что они делают. Индустрия простреливает себе ногу.
Если, например, я веб-разработчик, будь то front-end или back-end, или занимаюсь так называемой «интеграционной работой», и я создаю веб-сайты без особого кодирования или каких-либо знаний о TCP/IP, DNS, HTTP, TLS, безопасности и т.д., используя только готовые инструменты или фреймворки, то это сделает меня примерно таким же полезным, как обезьяна с динамометрическим ключом, когда что-то пойдет не так.
Автор:
evil_HFT