IT-дайджест: главные новости ноября 2024 года.
Встречаются как-то ChatGPT, Claude и Gemini в виртуальном баре. ChatGPT говорит: «Я научился писать код лучше джуниоров!» Claude отвечает: «А я могу заменить мидла!» Gemini хвастается: «А я уже на уровне сеньора!» Тут из-за стойки выглядывает старый добрый Stack Overflow и усмехается: «Ребята, а кто будет писать те кривые ответы, на которых вас обучали?»
Эту шутку мы нашли на Reddit в прошлом месяце. И хотя звучит забавно, нейросети действительно всё ближе к тому, чтобы конкурировать с программистами за рабочие места. Давайте разберёмся, как к этому адаптироваться, и заодно обсудим другие важные события ноября.
Как стать востребованным специалистом и сохранить работу в эпоху нейросетей
Авторы издания Computerworld выяснили, что из-за развития нейросетей айтишником стало сложнее найти работу и удержаться на ней. Вместе с анализом они предложили рекомендации, которые помогут повысить шансы при трудоустройстве и оставаться востребованным специалистом.
Первый совет — научитесь работать с теми технологиями, где ощущается нехватка специалистов:
«В настоящее время наблюдается высокий спрос на такие технологии, как Rust, Go, Google Cloud Platform, Terraform и AWS. При этом число соискателей значительно меньше количества открытых вакансий».
Годовая динамика спроса на ключевые технологические навыки
Изображение: Indeed
Второй совет — освойте работу с нейросетями и применяйте их как инструмент повышения продуктивности в повседневных задачах. По данным различных исследований, в ближайшие годы нейросети смогут заменить две трети рабочих мест и автоматизировать каждую четвёртую задачу. Поэтому если разработчик не научится использовать нейросети, то его навыки могут быстро устареть или стать неконкурентоспособными.
Сравните двух сотрудников. Первый не использует нейросети и вручную пишет код для проверки данных в форме — выполняет несложную задачу, которая отнимает много времени. Второй быстро генерирует базовый код валидации и использует сэкономленное время на проработку бизнес-логики или улучшение пользовательского интерфейса. Очевидно, что второй разработчик будет для работодателя более ценным сотрудником.
Из прочих рекомендаций авторы выделяют следующие:
- Быть готовым к переезду: готовность к релокации у 80% технических специалистов значительно увеличивает их шансы на трудоустройство.
- Проявлять активность: поиск вакансий часто приносит лучшие результаты, чем пассивное ожидание предложений от рекрутеров.
- Интересуйтесь программами повышения квалификации — спрашивайте о них на собеседованиях и у текущего работодателя. Это продемонстрирует работодателю вашу заинтересованность в профессиональном росте и намерение задержаться в компании.
Rust как первый язык программирования: почему это хороший выбор и с чего начать
Разработчик Джейсон Дукеран рекомендует всем новичкам учить Rust:
«Rust с самого начала прививает программисту правильные навыки программирования. В индустрии существуют определённые стандарты, о которых самоучки узнают только после попадания в рабочую среду. Изучение Rust помогает выработать эти навыки с первых шагов».
Джейсон отмечает следующие особенности языка Rust:
- Подробное протоколирование ошибок — Rust не только сообщает об ошибке, но и предлагает способы её исправления.
- Строгий, но дружелюбный компилятор — он не только чётко указывает на проблемы в коде, но и подсказывает пути их исправления.
- Никакого ручного управления памятью — в отличие от C++, Rust использует умную систему автоматического управления памятью.
- Активное сообщество разработчиков, готовое помочь в любой момент.
«Если бы я был новичком, я бы непременно начал изучать Rust, так как он с самого начала предотвращает плохие привычки в программировании».
Джейсон Дукеран также предлагает полезные ресурсы для изучения Rust:
- Сайт rust-lang.org.
- Книга The Rust Programming Language.
- Проект на GitHub с подборкой упражнений Rustlings.
Хакеры использовали редкий язык программирования для обхода антивирусов
Компания Trustwave обнаружила новое вредоносное ПО Pronsis Loader, которое сложно выявить из-за его необычной структуры и поведения.
Программа Pronsis Loader написана на JPHP — малоизвестном языке программирования, который объединяет синтаксис PHP и JVM. Из-за особой структуры кода антивирусам сложно обнаружить вредоносное ПО на JPHP, поскольку оно не соответствует стандартным сигнатурам угроз.
Кроме того, Pronsis Loader действует в два этапа: сначала скрытно проникает в систему, а затем загружает другие вредоносные программы. На первом этапе Pronsis Loader может замаскироваться под обновление браузера, а после внедрения в систему — установить программу-вымогатель.
Если Pronsis Loader и другие подобные вирусы начнут быстро распространяться, то многим пользователям придётся усовершенствовать защиту — перейти на современные антивирусы, которые способны не только проверять сигнатуры, но и анализировать поведение программ.
Печальная история нового логотипа CSS
Таблицы стилей CSS получили новый логотип, который был утверждён голосованием сообщества в репозитории проекта CSS-Next на GitHub.
Особенность нового логотипа — цвет rebeccapurple (фиолетовый). Этот оттенок был добавлен в спецификацию CSS в 2014 году в память о Ребекке Мейер, дочери Эрика Мейера — значимого деятеля в CSS-сообществе.
Ребекка умерла в шесть лет от рака мозга. Сообщество предлагало назвать цвет beccapurple, однако Мейер настоял на rebeccapurple. Его дочь считала имя Бекка детским и хотела, чтобы с шести лет её звали Ребекка:
«Она дожила до шести. Почти двенадцать часов ей было шесть. Так что она Ребекка и должна быть ей».
Новый логотип CSS в цвете rebeccapurple
Изображение: CSS-Next / GitHub
Не тратьте время на React — учите базу: советы опытного разработчика
Если вы цените своё время — не тратьте его на изучение React. К такому выводу пришёл Кейт Сиркел, веб-разработчик с двадцатилетним опытом.
Первая причина. Современный React строится на хуках — специфичной технологии, которая больше нигде не используется. Поэтому вместо псевдофункциональных парадигм Кейт рекомендует освоить настоящие функциональные языки программирования, такие как Haskell или Elixir.
Вторая причина кроется в пользовательском интерфейсе:
«Сторонники React утверждают, что он научит вас современному UI. Однако в реальности автофокус работает нестабильно, а пользовательские элементы ведут себя непредсказуемо в разных версиях. Это не современный UI, а интерфейс образца 2013 года — времён его создания».
Вместо React Сиркел рекомендует изучать чистый JavaScript — без TypeScript и React. Суть в том, чтобы освоить базовые концепции и получить универсальные навыки, которые можно применить к любому фреймворку.
Для развития универсальных навыков программирования Кейт рекомендует осваивать современные языки со строгой типизацией:
«Я бы посоветовал Golang, Zig или Rust. Попробуйте создать на них приложение для командной строки. После этого вам будет проще разобраться с TypeScript. К тому же изучение системного языка научит вас управлению памятью и даст более глубокое понимание того, как работают динамические языки под капотом».
Дополнительно Кейт Сиркел советует изучать различные спецификации: HTTP, HTML, CSS, базы данных и Wi-Fi. По его мнению, это поможет выделиться среди коллег и приобрести ценные фундаментальные знания.
Ещё нужно вносить вклад в опенсорс. Кейт считает, что есть проекты с отличными возможностями для обучения и налаживания контактов:
«Если вы будете заниматься чем-то из вышеперечисленного (или всем сразу), вы окажетесь в намного более выгодном положении. Не тратьте время на изучение React — лучше изучите что-то действительно полезное».
Вот интересно, если бы Кейт Сиркел был начинающим разработчиком в поиске работы, последовал бы он своим советам? Или сначала освоил бы React, устроился на работу, а потом изучал всё остальное ради интереса?
WordPress против WP Engine: битва за права опенсорс-сообщества
Основатель WordPress Мэтт Мулленвег подал судебный иск против хостинг-провайдера WP Engine. В ответ WP Engine подала встречный иск против Мулленвега и компании Automattic, которая разрабатывает WordPress.
Суть конфликта в том, что WP Engine много лет пользуется торговой маркой WordPress. Мэтт предложил компании заплатить лицензионный сбор или внести свой вклад в проект с открытым исходным кодом:
«Мы считаем, что если бизнес зарабатывает сотни миллионов долларов на опенсорс-проекте, то он обязан делиться с сообществом. Если же компания отказывается, то она теряет право на использование торговой марки».
Это разбирательство напомнило о ключевой проблеме опенсорса, которую назвал Дрис Бёйтарт, создатель системы управления контентом Drupal:
«Создатели программного обеспечения с открытым исходным кодом вынуждены наблюдать, как их труд используется для извлечения прибыли. Часто это делают те, кто не вносит достойного вклада в развитие проекта».
Чад Уитакер, глава отдела открытых исходных кодов в Sentry, предлагает три способа решения этой проблемы:
- Коммерциализация — создание устойчивых бизнес-моделей для поддержки опенсорс-проектов. Например, это можно реализовать через платное сопровождение и техническую поддержку продуктов.
- Финансовая поддержка через прямые инвестиции от государственных органов и частных компаний. По этой модели сейчас работают FreeBSD, PHP Foundation, OpenJS Foundation и другие проекты.
- Система вознаграждений. Например, сообщество Drupal внедрило систему кредитов для поощрения активных участников. За свой вклад они получают различные бонусы: размещение рекламы на сайте Drupal, приоритетный доступ к обновлениям и специальные скидки.
Возможно, Мэтту Мулленвегу стоило бы перенять опыт других успешных опенсорс-проектов и внедрить прозрачную систему лицензирования торговой марки WordPress. Например, Mozilla Foundation позволяет компаниям использовать торговую марку Firefox, только если они получили письменное разрешение и их продукт не изменяет исходный код браузера.
Как перейти от прокрастинации к действию: советы эксперта
Около 20% взрослых постоянно откладывают дела на потом и не могут с этим поделать. Если вы тоже страдаете от прокрастинации, возможно, вам помогут советы Эрика Баркера, автора бестселлера The Wall Street Journal.
По мнению Эрика, люди избегают не самих задач, а связанных с ними эмоций. Если работа вызывает негативные ощущения, мы стремимся её отложить. Чтобы справиться с этим, важно разбить задачу на части:
«Превратите эту пугающую, масштабную задачу в цепочку простых, маленьких действий — настолько элементарных, что вам станет неловко их откладывать. В этом и заключается суть декомпозиции: она помогает вашему мозгу сделать первый шаг, а это — самое сложное».
Далее важно отпустить мысли о результате и сфокусироваться на процессе:
«Одно исследование показало, что когда люди фокусировались на процессе тренировки, занятия казались проще и приятнее. Они испытывали больше удовольствия, потому что не зацикливались на конечной цели — например, влезть в узкие джинсы к Рождеству».
Наконец, поговорите со своим «будущим я» — тем, кому вы сейчас портите жизнь. Когда вы начнёте испытывать чувство ответственности перед будущим собой, у вас появится мотивация действовать в настоящем.
Советы неплохие, но даже автор признаёт, что иногда вы можете срываться. В такие дни важно себя понять, простить и… накормить 🍕
Будущее уже здесь: AI-ассистенты в современных редакторах кода
Какой редактор кода с функциями искусственного интеллекта вы считаете лучшим? Такой же вопрос задал своим читателям Гергели Орос, инженер и автор рассылки The Pragmatic Engineer Newsletter. Вот результаты опроса:
Всего Орос получил 145 ответов. Помимо основных редакторов, участники отметили Cody от Sourcegraph, v0 от Vercel, Replit Agent, Bolt.new от StackBlitz, Neovim от Avante, Eclipse Theia, Augment Code и Continue.dev.
Гергели отмечает, что результаты опроса указывают на революцию в мире редакторов кода. За последние полтора года появилось множество новых IDE, и процесс их развития продолжается. Некоторые стартапы, такие как Magic и Cognition AI, уже привлекли многомиллионные инвестиции и вскоре планируют представить свои продукты в публичный доступ.
Кажется, будущее разработки уже невозможно представить без нейросетей и всевозможных умных помощников. Поэтому, если вы до сих пор их не использовали, пожалуй, время начать. Хотя бы просто попробуйте 🚀 ✨
Необычные сайты, которые стоит посетить
Если вы изучаете фронтенд, посмотрите, как устроен этот велосипед:
Скриншот: Codepen / Skillbox Media
Не очень впечатлило? Тогда вам на виртуальную муравьиную ферму:
Скриншот: Codepen / Skillbox Media
На сайте draw.audio вы можете нарисовать музыку — или, правильнее сказать, сыграть рисунок 🤔 В любом случае обязательно попробуйте:
Скриншот: Draw.Audio / Skillbox Media
«Правда ли песни о любви умирают?» — таким вопросом задались исследователи Дэвид Мора и Мишель Джиа. Они проанализировали 5100 хитов Billboard с 1958 по 2023 год и обнаружили, что любовные песни не умирают, а эволюционируют: «Люди любят, теряют и воссоединяются больше, чем когда-либо прежде». Но самое интересное — визуализация результатов исследования, которую мы рекомендуем посмотреть:
Скриншот: pudding.cool / Skillbox Media
И напоследок представляем вам машину Тьюринга из Lego. Машина Тьюринга — это теоретическая модель вычислительного устройства, демонстрирующая принципы работы современных компьютеров. Она работает как механизм, который действует по заданной программе: перемещается по ленте, считывает и записывает новые символы.
Машина Тьюринга из 2900 деталей Lego
Источник: Lego Ideas
Интересное на Reddit
В сабреддите ExperiencedDevs один из пользователей поделился наблюдением, к которому пришёл после пяти лет работы в IT:
«Почти все компании сильно недооценивают важность владения английским языком. Сотрудники настолько плохо описывают задачи, что приходится тратить много времени только на то, чтобы понять суть написанного».
Мы согласны: разработчику полезно знать английский язык. Но не менее важно развивать и другие качества — дисциплину, инициативность, критическое мышление, навыки командной работы и другие soft skills.
Другой участник того же саба рассказал историю про джуна, которому он поручил написать несколько скриптов на Python. Джун использовал ChatGPT и принёс проблемный код с ненужными функциями.
Позже автора поста перевели на другой проект, а джун сгенерировал новый проблемный код, который кто-то утвердил в пул-реквесте. В итоге простая задача переросла в серьёзную проблему и нескольким разработчикам пришлось потратить много времени на её устранение.
Бывает, конечно. Но, может, этот джун просто не умеет писать промпты?
На сабреддите LearnProgramming пользователь поинтересовался, как попасть в 1% лучших разработчиков мира. Вот что ему ответили:
«Секрет прост: нездоровый перфекционизм и полное отсутствие личной жизни на протяжении как минимум 20 лет».
Совет может быть действенным, но звучит довольно пессимистично. Мы бы посоветовали найти ментора, чтобы ускорить прогресс.
В сабреддите Frontend обсудили ключевую концепцию фронтенд-разработки — пользовательский опыт (UX). Если человеку трудно взаимодействовать с приложением, то это обесценивает всё остальное.
Представим интернет-магазин с современным дизайном, который быстро работает, адаптирован под различные устройства и написан на React с TypeScript. А теперь допустим, что в таком магазине часто не работает форма заказа и разработчики по каким-то причинам это не исправляют. В таком случае большинство клиентов, скорее всего, уйдут к конкурентам.
Большинство вредоносных программ создаётся на популярных языках программирования — Python, Java, C++ и других. Для обнаружения таких программ антивирусы обычно используют сигнатурный метод — они ищут характерные для вредоносного ПО шаблоны кода и поведения. Например, если в коде программы встречается команда delete system32, она становится сигнатурой, по которой антивирус идентифицирует угрозу.
Когда злоумышленники используют редкие языки программирования, антивирусам сложнее находить вредоносный код. Дело в том, что в базах сигнатур отсутствуют шаблоны для анализа программ на таких языках.
Хук — это специальная функция в React, которая помогает управлять состоянием и другими возможностями компонента. Например, если мы создадим на сайте счётчик, то хук useState будет выполнять три задачи:
— сохранять текущее значение счётчика (например, count);
— предоставлять функцию изменения значения (setCount);
— задавать начальное значение счётчика (например, 0).
С помощью классов реализовать такой же счётчик сложнее: нужно создавать конструктор, инициализировать начальное состояние, привязывать методы через bind и использовать специальный метод setState для обновления. Всё это делает код более громоздким и запутанным.