Роб Пайк (один из ключевых создателей языка Go, один из разработчиков Unix, в частности, создал первую граф. систему окон для Unix) в своём канале в bluesky в ответ на сообщение, отправленное от лица LLM-модели Claude Opus, эмоционально выразил своё отношение к ИИ и их роли в современной мире:
«Идите [к чёрту], ребята. Вы насилуете нашу планету, тратите триллионы на токсичное, неперерабатываемое оборудование, разрушая при этом основы общества, но ещё находите время, чтобы заставить свои злобные машины поблагодарить меня за моё стремление к более простым программам.
И к тому же вы обучаете вашего монстра на данных, которые произвёл в том числе и я, своими руками, без отсылки или компенсации.
Просто валите [к чёрту]. Проваливайте все.
Не помню, когда я последний раз был так зол.
У всех остальных же я прошу прощения за своё, пусть ненамеренное и скорее незначительное, участие в реализации этого насилия против человечества.»
https://bsky.app/profile/robpike.io/post/3matwg6w3ic2s
«Идите [к чёрту], ребята. Вы насилуете нашу планету, тратите триллионы на токсичное, неперерабатываемое оборудование, разрушая при этом основы общества, но ещё находите время, чтобы заставить свои злобные машины поблагодарить меня за моё стремление к более простым программам.
И к тому же вы обучаете вашего монстра на данных, которые произвёл в том числе и я, своими руками, без отсылки или компенсации.
Просто валите [к чёрту]. Проваливайте все.
Не помню, когда я последний раз был так зол.
У всех остальных же я прошу прощения за своё, пусть ненамеренное и скорее незначительное, участие в реализации этого насилия против человечества.»
https://bsky.app/profile/robpike.io/post/3matwg6w3ic2s
👏57❤9👍8🤔2
Как работает NAT (Network Address Translation)
(продолжение предыдущего поста)
1. Основная задача NAT
NAT — это технология, позволяющая нескольким устройствам в локальной сети (LAN) использовать один публичный IP-адрес. Это достигается путём изменения IP-адресов в заголовках пакетов данных при их передаче через маршрутизатор (NAT-шлюз).
2. Компоненты, показанные на изображении
На схеме представлены:
* Локальные устройства с частными IP-адресами (например, 192.168.0.13, 192.168.0.25, 192.168.0.30) — устройства внутри локальной сети.
* NAT-шлюз (роутер) — устройство, выполняющее преобразование адресов. Ему присвоен публичный IP-адрес (184.28.207.5).
* Публичный IP-адрес (184.28.207.5) — адрес, видимый в интернете.
* Таблица NAT — хранит соответствие между частными IP-адресами и портами локальных устройств и преобразованными публичными адресами и портами.
* Внешний ресурс (например, DNS-сервер 8.8.8.8) — цель запроса из локальной сети.
3. Процесс работы NAT по шагам
Шаг 1. Исходный пакет (до трансляции)
Когда устройство в локальной сети (например, с IP 192.168.0.13) отправляет запрос в интернет (например, к DNS-серверу 8.8.8.8:53), пакет имеет:
* Source IP & Port (исходный IP и порт): 192.168.0.13:1000 (локальный адрес и порт устройства).
* Destination IP & Port (целевой IP и порт): 8.8.8.8:53 (адрес и порт сервера в интернете).
Шаг 2. Преобразование адреса NAT-шлюзом
NAT-шлюз перехватывает пакет и изменяет его заголовки:
* Заменяет локальный IP-адрес (192.168.0.13) на свой публичный IP-адрес (184.28.207.5).
* Заменяет локальный порт (1000) на уникальный публичный порт (например, 10000), чтобы различать соединения от разных устройств.
* Сохраняет соответствие «локальный IP:порт → публичный IP:порт» в таблице NAT.
Шаг 3. Пакет после трансляции
После преобразования пакет выглядит так:
* Source IP & Port: 184.28.207.5:10000 (публичный IP и порт NAT-шлюза).
* Destination IP & Port: 8.8.8.8:53 (не изменяется — это адрес цели).
Шаг 4. Ответ от сервера
Когда сервер (8.8.8.8) отвечает, он отправляет данные на публичный IP и порт (184.28.207.5:10000).
Шаг 5. Обратная трансляция
NAT-шлюз:
* Проверяет таблицу NAT и находит запись: «184.28.207.5:10000 → 192.168.0.13:1000».
* Преобразует публичный IP и порт обратно в локальные.
* Передаёт ответ устройству с IP 192.168.0.13.
4. Таблица NAT
Таблица NAT хранит соответствия для всех активных соединений, например:
* 192.168.0.13:1000 ↔️ 184.28.207.5:10000;
* 192.168.0.25:2000 ↔️ 184.28.207.5:20000;
* 192.168.0.30:3000 ↔️ 184.28.207.5:30000.
5. Итог
Благодаря NAT:
* Несколько устройств используют один публичный IP-адрес.
* Локальные IP-адреса скрыты от интернета — это повышает безопасность сети.
* Маршрутизатор управляет трафиком, преобразуя адреса «на лету».
Таким образом, NAT обеспечивает экономию IP-адресов и защиту локальной сети.
(продолжение предыдущего поста)
1. Основная задача NAT
NAT — это технология, позволяющая нескольким устройствам в локальной сети (LAN) использовать один публичный IP-адрес. Это достигается путём изменения IP-адресов в заголовках пакетов данных при их передаче через маршрутизатор (NAT-шлюз).
2. Компоненты, показанные на изображении
На схеме представлены:
* Локальные устройства с частными IP-адресами (например, 192.168.0.13, 192.168.0.25, 192.168.0.30) — устройства внутри локальной сети.
* NAT-шлюз (роутер) — устройство, выполняющее преобразование адресов. Ему присвоен публичный IP-адрес (184.28.207.5).
* Публичный IP-адрес (184.28.207.5) — адрес, видимый в интернете.
* Таблица NAT — хранит соответствие между частными IP-адресами и портами локальных устройств и преобразованными публичными адресами и портами.
* Внешний ресурс (например, DNS-сервер 8.8.8.8) — цель запроса из локальной сети.
3. Процесс работы NAT по шагам
Шаг 1. Исходный пакет (до трансляции)
Когда устройство в локальной сети (например, с IP 192.168.0.13) отправляет запрос в интернет (например, к DNS-серверу 8.8.8.8:53), пакет имеет:
* Source IP & Port (исходный IP и порт): 192.168.0.13:1000 (локальный адрес и порт устройства).
* Destination IP & Port (целевой IP и порт): 8.8.8.8:53 (адрес и порт сервера в интернете).
Шаг 2. Преобразование адреса NAT-шлюзом
NAT-шлюз перехватывает пакет и изменяет его заголовки:
* Заменяет локальный IP-адрес (192.168.0.13) на свой публичный IP-адрес (184.28.207.5).
* Заменяет локальный порт (1000) на уникальный публичный порт (например, 10000), чтобы различать соединения от разных устройств.
* Сохраняет соответствие «локальный IP:порт → публичный IP:порт» в таблице NAT.
Шаг 3. Пакет после трансляции
После преобразования пакет выглядит так:
* Source IP & Port: 184.28.207.5:10000 (публичный IP и порт NAT-шлюза).
* Destination IP & Port: 8.8.8.8:53 (не изменяется — это адрес цели).
Шаг 4. Ответ от сервера
Когда сервер (8.8.8.8) отвечает, он отправляет данные на публичный IP и порт (184.28.207.5:10000).
Шаг 5. Обратная трансляция
NAT-шлюз:
* Проверяет таблицу NAT и находит запись: «184.28.207.5:10000 → 192.168.0.13:1000».
* Преобразует публичный IP и порт обратно в локальные.
* Передаёт ответ устройству с IP 192.168.0.13.
4. Таблица NAT
Таблица NAT хранит соответствия для всех активных соединений, например:
* 192.168.0.13:1000 ↔️ 184.28.207.5:10000;
* 192.168.0.25:2000 ↔️ 184.28.207.5:20000;
* 192.168.0.30:3000 ↔️ 184.28.207.5:30000.
5. Итог
Благодаря NAT:
* Несколько устройств используют один публичный IP-адрес.
* Локальные IP-адреса скрыты от интернета — это повышает безопасность сети.
* Маршрутизатор управляет трафиком, преобразуя адреса «на лету».
Таким образом, NAT обеспечивает экономию IP-адресов и защиту локальной сети.
Telegram
METANIT.COM
Как работает NAT (Network Address Translation)
(продолжение в следующем посте)
(продолжение в следующем посте)
👍9❤5🔥2💋2😱1
Расспространенные алгоритмы криптографии/шифрования
Hashing Algorithms (используются для контрольных сумм, обеспечения целостности данных и хранения паролей):
1. MD5 — быстрая функция хеширования, но небезопасна из-за коллизий.
2. SHA-1 — более безопасна, чем MD5, но сейчас взломана (не использовать в новых системах).
3. SHA-256 — часть семейства SHA-2, широко используется и безопасна.
4. SHA-512 — более длинная версия SHA-256, обеспечивает повышенную безопасность.
5. BLAKE2 — быстрее и безопаснее SHA-2, современная альтернатива.
6. RIPEMD-160 — альтернатива SHA, используется для генерации адресов в Bitcoin.
7. CRC32 — лёгкий алгоритм хеширования для обнаружения ошибок, но не криптографически безопасен.
Алгоритмы хеширования паролей и вывода ключей (используются для безопасного хранения или получения ключей из паролей):
8. bcrypt — алгоритм хеширования паролей, специально замедленный для защиты от перебора.
9. scrypt — хеширование паролей с высокой нагрузкой на память, лучше защищён от ASIC-устройств по сравнению с bcrypt.
10. Argon2 — современный рекомендуемый стандарт хеширования паролей (победитель конкурса PHC).
11. PBKDF2 — итеративная функция вывода ключей, используется во многих защищённых системах.
12. HKDF — функция вывода ключей на основе HMAC, используется в TLS, Signal.
Алгоритмы симметричного шифрования (один и тот же ключ используется для шифрования и дешифрования):
13. AES (Advanced Encryption Standard) — промышленный стандарт симметричного шифрования (128, 192, 256 бит).
14. ChaCha20 — быстрый и безопасный потоковый шифр, используется в мобильных и ограниченных устройствах.
15. 3DES — тройной стандарт шифрования данных, устарел и небезопасен.
16. Blowfish — блочный шифр старого образца, заменён более безопасными вариантами, такими как AES.
17. Twofish — преемник Blowfish, был кандидатом на роль AES, но не был выбран.
18. RC4 — небезопасный потоковый шифр, не использовать в новых системах.
Алгоритмы асимметричного (с открытым ключом) шифрования (используют пару открытый/закрытый ключ для шифрования и дешифрования):
19. RSA — классический алгоритм шифрования с открытым ключом, широко используется в TLS и для подписей.
20. DSA (Digital Signature Algorithm) — алгоритм цифровой подписи, в основном заменён более новыми вариантами.
21. Diffie-Hellman — алгоритм обмена ключами, позволяет обмениваться секретами без их раскрытия.
22. Elliptic Curve Cryptography (ECC) — более безопасен при использовании меньших ключей, применяется в современных системах.
23. Ed25519 — высокопроизводительный алгоритм цифровых подписей на эллиптических кривых.
24. ECDSA — вариант DSA на эллиптических кривых, используется в Bitcoin, Ethereum и TLS.
25. X25519 — быстрый алгоритм обмена ключами Diffie-Hellman на эллиптических кривых.
Цифровые подписи и обеспечение целостности:
26. HMAC (Hash-based Message Authentication Code) — объединяет хеш с секретным ключом для обеспечения целостности.
27. RSA Signatures — подписывание данных с помощью закрытого ключа, чтобы другие могли проверить с помощью открытого ключа.
28. EdDSA — схема подписи, использующая скрученные кривые Эдвардса (например, Ed25519).
29. MAC (Message Authentication Code) — подтверждает, что данные не были изменены, аналогично HMAC.
Режимы работы (для блочных шифров, таких как AES) (определяют, как блочные шифры обрабатывают данные, превышающие размер блока):
30. ECB (Electronic Codebook) — небезопасен; одинаковые блоки открытого текста дают одинаковый шифротекст.
31. CBC (Cipher Block Chaining) — использует вектор инициализации (IV) для добавления случайности к блокам.
32. CTR (Counter Mode) — преобразует блочный шифр в потоковый шифр.
33. GCM (Galois/Counter Mode) — режим AES с встроенной аутентификацией (используется в TLS).
34. CFB (Cipher Feedback Mode) — преобразует блочный шифр в самосинхронизирующийся потоковый шифр.
35. OFB (Output Feedback Mode) — преобразует блочный шифр в синхронный потоковый шифр.
Hashing Algorithms (используются для контрольных сумм, обеспечения целостности данных и хранения паролей):
1. MD5 — быстрая функция хеширования, но небезопасна из-за коллизий.
2. SHA-1 — более безопасна, чем MD5, но сейчас взломана (не использовать в новых системах).
3. SHA-256 — часть семейства SHA-2, широко используется и безопасна.
4. SHA-512 — более длинная версия SHA-256, обеспечивает повышенную безопасность.
5. BLAKE2 — быстрее и безопаснее SHA-2, современная альтернатива.
6. RIPEMD-160 — альтернатива SHA, используется для генерации адресов в Bitcoin.
7. CRC32 — лёгкий алгоритм хеширования для обнаружения ошибок, но не криптографически безопасен.
Алгоритмы хеширования паролей и вывода ключей (используются для безопасного хранения или получения ключей из паролей):
8. bcrypt — алгоритм хеширования паролей, специально замедленный для защиты от перебора.
9. scrypt — хеширование паролей с высокой нагрузкой на память, лучше защищён от ASIC-устройств по сравнению с bcrypt.
10. Argon2 — современный рекомендуемый стандарт хеширования паролей (победитель конкурса PHC).
11. PBKDF2 — итеративная функция вывода ключей, используется во многих защищённых системах.
12. HKDF — функция вывода ключей на основе HMAC, используется в TLS, Signal.
Алгоритмы симметричного шифрования (один и тот же ключ используется для шифрования и дешифрования):
13. AES (Advanced Encryption Standard) — промышленный стандарт симметричного шифрования (128, 192, 256 бит).
14. ChaCha20 — быстрый и безопасный потоковый шифр, используется в мобильных и ограниченных устройствах.
15. 3DES — тройной стандарт шифрования данных, устарел и небезопасен.
16. Blowfish — блочный шифр старого образца, заменён более безопасными вариантами, такими как AES.
17. Twofish — преемник Blowfish, был кандидатом на роль AES, но не был выбран.
18. RC4 — небезопасный потоковый шифр, не использовать в новых системах.
Алгоритмы асимметричного (с открытым ключом) шифрования (используют пару открытый/закрытый ключ для шифрования и дешифрования):
19. RSA — классический алгоритм шифрования с открытым ключом, широко используется в TLS и для подписей.
20. DSA (Digital Signature Algorithm) — алгоритм цифровой подписи, в основном заменён более новыми вариантами.
21. Diffie-Hellman — алгоритм обмена ключами, позволяет обмениваться секретами без их раскрытия.
22. Elliptic Curve Cryptography (ECC) — более безопасен при использовании меньших ключей, применяется в современных системах.
23. Ed25519 — высокопроизводительный алгоритм цифровых подписей на эллиптических кривых.
24. ECDSA — вариант DSA на эллиптических кривых, используется в Bitcoin, Ethereum и TLS.
25. X25519 — быстрый алгоритм обмена ключами Diffie-Hellman на эллиптических кривых.
Цифровые подписи и обеспечение целостности:
26. HMAC (Hash-based Message Authentication Code) — объединяет хеш с секретным ключом для обеспечения целостности.
27. RSA Signatures — подписывание данных с помощью закрытого ключа, чтобы другие могли проверить с помощью открытого ключа.
28. EdDSA — схема подписи, использующая скрученные кривые Эдвардса (например, Ed25519).
29. MAC (Message Authentication Code) — подтверждает, что данные не были изменены, аналогично HMAC.
Режимы работы (для блочных шифров, таких как AES) (определяют, как блочные шифры обрабатывают данные, превышающие размер блока):
30. ECB (Electronic Codebook) — небезопасен; одинаковые блоки открытого текста дают одинаковый шифротекст.
31. CBC (Cipher Block Chaining) — использует вектор инициализации (IV) для добавления случайности к блокам.
32. CTR (Counter Mode) — преобразует блочный шифр в потоковый шифр.
33. GCM (Galois/Counter Mode) — режим AES с встроенной аутентификацией (используется в TLS).
34. CFB (Cipher Feedback Mode) — преобразует блочный шифр в самосинхронизирующийся потоковый шифр.
35. OFB (Output Feedback Mode) — преобразует блочный шифр в синхронный потоковый шифр.
👍24🔥8❤5
Масштабирование чтения и записи в веб-приложении
(продолжение в следующем посте)
(продолжение в следующем посте)
Масштабирование чтения и записи в веб-приложении
(продолжение предыдущего поста)
Масштабирование операций чтения и записи являются частыми задачами в веб-приложении по мере увеличения нагрузки. Рассмотрим распространенные стратегии масштабирования операций чтения и записи.
1) Стратегии масштабирования чтений (проще)
Цель: Эффективно обрабатывать большой объём запросов на чтение.
Внутренний кэш (уровень приложения)
* кэш в оперативной памяти (например, локальный словарь, кэш LRU внутри экземпляра приложения);
* предотвращает повторные вычисления, но не распределяется между экземплярами.
Кэш в оперативной памяти (Redis, Memcached)
* хранит часто запрашиваемые данные в ОЗУ для сверхбыстрого доступа;
* сокращает количество запросов к базе данных, улучшая время отклика;
* оптимален для нагрузок с большим объёмом чтений (например, пользовательские сессии, предварительно вычисленные данные).
Копии для чтения (Read Replicas)
* множественные копии основной базы данных обрабатывают запросы на чтение;
* распределяет нагрузку от чтения по нескольким узлам;
* подходит для аналитических панелей и приложений с большим объёмом контента.
Сеть доставки контента (CDN — Content Delivery Network)
* кэширует статические ресурсы (изображения, видео, HTML) на периферийных узлах;
* сокращает задержки за счёт предоставления данных с ближайшего узла.
2) Стратегии масштабирования записей (сложнее)
Цель: Распределить нагрузку от записи и сохранить согласованность данных.
Шардинг (сегментация)
* разделяет данные по нескольким базам данных на основе ключа (например, ID пользователя);
* предотвращает перегрузку одной базы данных;
* требует тщательного проектирования запросов, чтобы избежать обращений к нескольким сегментам.
CQRS (разделение ответственности за команды и запросы — Command Query Responsibility Segregation)
* разделяет модели чтения и записи по разным базам данных или сервисам;
* позволяет оптимизировать нагрузки с большим объёмом записи и чтения отдельно.
Архитектура, управляемая событиями (Event-Driven Architecture)
* вместо прямых записей в БД публикуются события, которые обрабатываются асинхронно;
* помогает разделить сервисы и распределить нагрузку от записи;
* пример: сервис заказов отправляет событие «Заказ создан» → сервис инвентаризации асинхронно обновляет остатки.
Базы данных, оптимизированные для записи (Write-Optimized Databases)
* используют механизмы хранения с логической структурой (например, LSM-деревья в Cassandra, RocksDB) для нагрузок с большим объёмом записи;
* полезны в случаях высокочастотных операций (например, торговые системы, системы журналирования).
Что в итоге:
* Масштабирование чтений проще добавить позже.
* Масштабирование записей нужно проектировать на раннем этапе, чтобы избежать сложностей с рефакторингом.
(продолжение предыдущего поста)
Масштабирование операций чтения и записи являются частыми задачами в веб-приложении по мере увеличения нагрузки. Рассмотрим распространенные стратегии масштабирования операций чтения и записи.
1) Стратегии масштабирования чтений (проще)
Цель: Эффективно обрабатывать большой объём запросов на чтение.
Внутренний кэш (уровень приложения)
* кэш в оперативной памяти (например, локальный словарь, кэш LRU внутри экземпляра приложения);
* предотвращает повторные вычисления, но не распределяется между экземплярами.
Кэш в оперативной памяти (Redis, Memcached)
* хранит часто запрашиваемые данные в ОЗУ для сверхбыстрого доступа;
* сокращает количество запросов к базе данных, улучшая время отклика;
* оптимален для нагрузок с большим объёмом чтений (например, пользовательские сессии, предварительно вычисленные данные).
Копии для чтения (Read Replicas)
* множественные копии основной базы данных обрабатывают запросы на чтение;
* распределяет нагрузку от чтения по нескольким узлам;
* подходит для аналитических панелей и приложений с большим объёмом контента.
Сеть доставки контента (CDN — Content Delivery Network)
* кэширует статические ресурсы (изображения, видео, HTML) на периферийных узлах;
* сокращает задержки за счёт предоставления данных с ближайшего узла.
2) Стратегии масштабирования записей (сложнее)
Цель: Распределить нагрузку от записи и сохранить согласованность данных.
Шардинг (сегментация)
* разделяет данные по нескольким базам данных на основе ключа (например, ID пользователя);
* предотвращает перегрузку одной базы данных;
* требует тщательного проектирования запросов, чтобы избежать обращений к нескольким сегментам.
CQRS (разделение ответственности за команды и запросы — Command Query Responsibility Segregation)
* разделяет модели чтения и записи по разным базам данных или сервисам;
* позволяет оптимизировать нагрузки с большим объёмом записи и чтения отдельно.
Архитектура, управляемая событиями (Event-Driven Architecture)
* вместо прямых записей в БД публикуются события, которые обрабатываются асинхронно;
* помогает разделить сервисы и распределить нагрузку от записи;
* пример: сервис заказов отправляет событие «Заказ создан» → сервис инвентаризации асинхронно обновляет остатки.
Базы данных, оптимизированные для записи (Write-Optimized Databases)
* используют механизмы хранения с логической структурой (например, LSM-деревья в Cassandra, RocksDB) для нагрузок с большим объёмом записи;
* полезны в случаях высокочастотных операций (например, торговые системы, системы журналирования).
Что в итоге:
* Масштабирование чтений проще добавить позже.
* Масштабирование записей нужно проектировать на раннем этапе, чтобы избежать сложностей с рефакторингом.
Telegram
METANIT.COM
Масштабирование чтения и записи в веб-приложении
(продолжение в следующем посте)
(продолжение в следующем посте)
❤8👍3🔥2
Жизненный цикл разработки программного обеспечения
(продолжение предыдущего поста)
Жизненный цикл разработки ПО включает несколько моделей, каждая из которых предлагает свой подход к этапам создания продукта. Каждая модель жизненного цикла разработки ПО имеет свои преимущества и недостатки, выбор зависит от:
* сложности и масштаба проекта;
* гибкости требований;
* сроков разработки;
* вовлечённости заказчика;
* доступных ресурсов.
Рассмотрим основные модели:
1. Waterfall (Каскадная модель):
* Последовательность этапов: анализ → проектирование (design) → разработка (build) → тестирование (test) → развёртывание (deploy).
* Особенности: строгая последовательность, переход к следующему этапу только после завершения предыдущего. Подходит для проектов с чётко определёнными требованиями (например, электронная коммерция).
* Итог: структурированный и предсказуемый процесс, но менее гибкий к изменениям.
2. Spiral (Спиральная модель):
* Структура: комбинация каскадного и итеративного подходов. Этапы повторяются в виде спирали: оценка → планирование → разработка → тестирование.
* Ключевые элементы: оценка рисков, поэтапная разработка, тестирование на каждом витке спирали.
* Применение: проекты с высоким уровнем неопределённости и риска, длительные циклы разработки.
* Итог: баланс между гибкостью и контролем рисков.
3. Agile (Гибкая модель):
* Основа: итеративные циклы (спринты), быстрая адаптация к изменениям.
* Этапы: серия спринтов, в каждом из которых разрабатывается часть функционала.
* Фокус: сотрудничество с клиентом, быстрая обратная связь, поэтапная поставка рабочих версий ПО.
* Применение: динамичные рынки, стартапы, проекты с неясными требованиями.
* Итог: высокая адаптивность, но требует активного участия заказчика.
4. Iterative (Итеративная модель):
* Принцип: разработка через последовательные итерации (циклы), каждая из которых улучшает предыдущий прототип.
* Этапы: требования → анализ → проектирование → тестирование → реализация → обзор → повтор.
* Применение: сложные проекты, где конечная цель не определена чётко.
* Итог: постепенное приближение к финальному продукту с учётом обратной связи.
5. V-Model (V-образная модель):
* Структура: усовершенствованная каскадная модель с акцентом на тестирование. Этапы разработки «зеркальны» этапам тестирования.
* Этапы разработки: бизнес-требования → системные требования → высокоуровневый дизайн → низкоуровневый дизайн → кодирование.
* Этапы тестирования: приёмочное тестирование → системная интеграция → компонентное тестирование → модульное тестирование.
* Применение: проекты с жёсткими требованиями к качеству (аэрокосмическая отрасль, здравоохранение).
* Итог: тщательная проверка на каждом этапе, минимизация ошибок.
6. Incremental (Инкрементальная модель):
* Принцип: разработка ПО частями (инкрементами), каждый из которых добавляет новый функционал.
* Этапы: анализ → проектирование → кодирование → тестирование → развёртывание (повторяется для каждого инкремента).
* Применение: проекты с ограниченными ресурсами, когда нужно быстро предоставить рабочую версию ПО.
* Итог: поэтапная поставка функционала, гибкость в управлении требованиями.
7. Big Bang (Модель «Большого взрыва»):
* Суть: отсутствие чёткого планирования, разработка начинается с накопления ресурсов и идей, затем происходит «взрыв» активности.
* Этапы: накопление ресурсов → разработка → тестирование → продукт.
* Применение: небольшие проекты с креативным подходом, когда требования не определены заранее.
* Риски: высокий риск срыва сроков и бюджета из-за отсутствия структуры.
(продолжение предыдущего поста)
Жизненный цикл разработки ПО включает несколько моделей, каждая из которых предлагает свой подход к этапам создания продукта. Каждая модель жизненного цикла разработки ПО имеет свои преимущества и недостатки, выбор зависит от:
* сложности и масштаба проекта;
* гибкости требований;
* сроков разработки;
* вовлечённости заказчика;
* доступных ресурсов.
Рассмотрим основные модели:
1. Waterfall (Каскадная модель):
* Последовательность этапов: анализ → проектирование (design) → разработка (build) → тестирование (test) → развёртывание (deploy).
* Особенности: строгая последовательность, переход к следующему этапу только после завершения предыдущего. Подходит для проектов с чётко определёнными требованиями (например, электронная коммерция).
* Итог: структурированный и предсказуемый процесс, но менее гибкий к изменениям.
2. Spiral (Спиральная модель):
* Структура: комбинация каскадного и итеративного подходов. Этапы повторяются в виде спирали: оценка → планирование → разработка → тестирование.
* Ключевые элементы: оценка рисков, поэтапная разработка, тестирование на каждом витке спирали.
* Применение: проекты с высоким уровнем неопределённости и риска, длительные циклы разработки.
* Итог: баланс между гибкостью и контролем рисков.
3. Agile (Гибкая модель):
* Основа: итеративные циклы (спринты), быстрая адаптация к изменениям.
* Этапы: серия спринтов, в каждом из которых разрабатывается часть функционала.
* Фокус: сотрудничество с клиентом, быстрая обратная связь, поэтапная поставка рабочих версий ПО.
* Применение: динамичные рынки, стартапы, проекты с неясными требованиями.
* Итог: высокая адаптивность, но требует активного участия заказчика.
4. Iterative (Итеративная модель):
* Принцип: разработка через последовательные итерации (циклы), каждая из которых улучшает предыдущий прототип.
* Этапы: требования → анализ → проектирование → тестирование → реализация → обзор → повтор.
* Применение: сложные проекты, где конечная цель не определена чётко.
* Итог: постепенное приближение к финальному продукту с учётом обратной связи.
5. V-Model (V-образная модель):
* Структура: усовершенствованная каскадная модель с акцентом на тестирование. Этапы разработки «зеркальны» этапам тестирования.
* Этапы разработки: бизнес-требования → системные требования → высокоуровневый дизайн → низкоуровневый дизайн → кодирование.
* Этапы тестирования: приёмочное тестирование → системная интеграция → компонентное тестирование → модульное тестирование.
* Применение: проекты с жёсткими требованиями к качеству (аэрокосмическая отрасль, здравоохранение).
* Итог: тщательная проверка на каждом этапе, минимизация ошибок.
6. Incremental (Инкрементальная модель):
* Принцип: разработка ПО частями (инкрементами), каждый из которых добавляет новый функционал.
* Этапы: анализ → проектирование → кодирование → тестирование → развёртывание (повторяется для каждого инкремента).
* Применение: проекты с ограниченными ресурсами, когда нужно быстро предоставить рабочую версию ПО.
* Итог: поэтапная поставка функционала, гибкость в управлении требованиями.
7. Big Bang (Модель «Большого взрыва»):
* Суть: отсутствие чёткого планирования, разработка начинается с накопления ресурсов и идей, затем происходит «взрыв» активности.
* Этапы: накопление ресурсов → разработка → тестирование → продукт.
* Применение: небольшие проекты с креативным подходом, когда требования не определены заранее.
* Риски: высокий риск срыва сроков и бюджета из-за отсутствия структуры.
❤9🤷♂1🤮1
8. RAD (Rapid Application Development — быстрая разработка приложений):
* Основа: итеративный и инкрементальный подход с акцентом на быстрое создание прототипов.
* Этапы: анализ и быстрый дизайн → разработка прототипа → демонстрация → доработка → тестирование → развёртывание.
* Применение: проекты с быстро меняющимися требованиями, необходимость быстрого выхода на рынок.
* Итог: ускоренная разработка за счёт активного вовлечения заказчика и использования прототипов.
* Основа: итеративный и инкрементальный подход с акцентом на быстрое создание прототипов.
* Этапы: анализ и быстрый дизайн → разработка прототипа → демонстрация → доработка → тестирование → развёртывание.
* Применение: проекты с быстро меняющимися требованиями, необходимость быстрого выхода на рынок.
* Итог: ускоренная разработка за счёт активного вовлечения заказчика и использования прототипов.
Telegram
METANIT.COM
Жизненный цикл разработки программного обеспечения
(продолжение в следующем посте)
(продолжение в следующем посте)
❤2👍2💯2🤷♂1
This media is not supported in your browser
VIEW IN TELEGRAM
Наглядно, что такое интеграл
👍21🤓13🆒6❤3
Выполнение программы
(продолжение предыдущего поста)
Программа проходит путь от исходного кода до исполняемого файла, загружается в память, взаимодействует с ОС через системные вызовы, использует ресурсы компьютера (CPU, память, устройства) и завершается с очисткой всех задействованных ресурсов. Рассмотрим пошагово.
1. Компиляция и загрузка программы (Program Compilation and Loading)
- Исходный код (например,
- Компилятор преобразует исходный код в объектный файл (
- Используются библиотеки (например,
- Происходит статическая компоновка — связывание объектного файла с библиотеками для создания промежуточного кода.
- Далее подключается динамическая компоновка — связывание с динамическими библиотеками (
- В итоге формируется исполняемый файл (
2. Взаимодействие пользователя и распределение памяти (User Interaction and Memory Allocation)
- Пользователь запускает программу через графический интерфейс (например, клик по иконке).
- Операционная система (ОС) получает запрос и инициирует загрузку исполняемого файла.
- ОС выделяет память для программы, используя структуру памяти:
- Memory pool (пул памяти) — общее пространство для распределения.
- Stack (стек) — для хранения локальных переменных и вызовов функций.
- Heap (куча) — для динамического выделения памяти (
- Сегменты: BSS (неинициализированные данные), Data (инициализированные данные), Code (исполняемый код).
- Программа загружается в выделенную область памяти.
3. Системные вызовы (System Calls)
- Программа взаимодействует с ОС через системные вызовы (
- Процесс вызова:
1. Программа делает системный вызов (например, открытие файла).
2. Управление передаётся ядру ОС (
3. Ядро выполняет операцию через сервисные программы (например, чтение данных с диска).
4. Результат возвращается программе, которая продолжает выполнение.
- Таблица системных вызовов (
4. Состояние ЦП и структура памяти (CPU Status and Memory Structure)
- Программа выполняется на центральном процессоре (CPU), который работает в двух режимах:
- Пользовательский режим (user model) — выполнение прикладного кода.
- Режим ядра (kernel model) — выполнение системных вызовов и привилегированных операций.
- Кэширование: CPU использует кэши (L1, L2, L3) для ускорения доступа к данным.
- RAM хранит исполняемый код и данные программы во время работы.
- Регистры программ (
5. Архитектура фон Неймана (Von Neumann Architecture)
- Программа и данные хранятся в единой памяти (принцип фон Неймана).
- Центральный процессор (CPU) состоит из:
- Control Unit (CU) — управляет выполнением инструкций.
- Arithmetic/Logic Unit (ALU) — выполняет арифметические и логические операции.
- Данные поступают с устройств ввода (Input Device), обрабатываются процессором и выводятся на устройства вывода (Output Device).
- Memory Unit хранит промежуточные результаты и инструкции.
6. Завершение программы и освобождение ресурсов (Program Termination and Resource Recovery)
- Программа завершается по команде
- ОС выполняет очистку ресурсов:
- Освобождение файловых ресурсов (закрытие дескрипторов файлов).
- Освобождение сетевых ресурсов (разрыв соединений).
- Возврат памяти (освобождение стека, кучи, сегментов).
- Все ресурсы возвращаются в пул ОС, программа завершается, и её состояние удаляется из памяти.
(продолжение предыдущего поста)
Программа проходит путь от исходного кода до исполняемого файла, загружается в память, взаимодействует с ОС через системные вызовы, использует ресурсы компьютера (CPU, память, устройства) и завершается с очисткой всех задействованных ресурсов. Рассмотрим пошагово.
1. Компиляция и загрузка программы (Program Compilation and Loading)
- Исходный код (например,
Enter.c) передаётся компилятору.- Компилятор преобразует исходный код в объектный файл (
Enter.obj), проверяя синтаксис и семантику.- Используются библиотеки (например,
cw32.lib), из которых извлекаются необходимые функции (например, sprintf()).- Происходит статическая компоновка — связывание объектного файла с библиотеками для создания промежуточного кода.
- Далее подключается динамическая компоновка — связывание с динамическими библиотеками (
user32.dll и др.), используемыми для функций вроде MessageBox().- В итоге формируется исполняемый файл (
Enter.exe), готовый к запуску.2. Взаимодействие пользователя и распределение памяти (User Interaction and Memory Allocation)
- Пользователь запускает программу через графический интерфейс (например, клик по иконке).
- Операционная система (ОС) получает запрос и инициирует загрузку исполняемого файла.
- ОС выделяет память для программы, используя структуру памяти:
- Memory pool (пул памяти) — общее пространство для распределения.
- Stack (стек) — для хранения локальных переменных и вызовов функций.
- Heap (куча) — для динамического выделения памяти (
malloc, free).- Сегменты: BSS (неинициализированные данные), Data (инициализированные данные), Code (исполняемый код).
- Программа загружается в выделенную область памяти.
3. Системные вызовы (System Calls)
- Программа взаимодействует с ОС через системные вызовы (
system call), которые обеспечивают доступ к ресурсам (файлам, сети, устройствам).- Процесс вызова:
1. Программа делает системный вызов (например, открытие файла).
2. Управление передаётся ядру ОС (
kernel model), которое проверяет права доступа и параметры вызова.3. Ядро выполняет операцию через сервисные программы (например, чтение данных с диска).
4. Результат возвращается программе, которая продолжает выполнение.
- Таблица системных вызовов (
Sys_call_table) хранит адреса функций ядра.4. Состояние ЦП и структура памяти (CPU Status and Memory Structure)
- Программа выполняется на центральном процессоре (CPU), который работает в двух режимах:
- Пользовательский режим (user model) — выполнение прикладного кода.
- Режим ядра (kernel model) — выполнение системных вызовов и привилегированных операций.
- Кэширование: CPU использует кэши (L1, L2, L3) для ускорения доступа к данным.
- RAM хранит исполняемый код и данные программы во время работы.
- Регистры программ (
Program register) сохраняют состояние выполнения (адрес следующей инструкции).5. Архитектура фон Неймана (Von Neumann Architecture)
- Программа и данные хранятся в единой памяти (принцип фон Неймана).
- Центральный процессор (CPU) состоит из:
- Control Unit (CU) — управляет выполнением инструкций.
- Arithmetic/Logic Unit (ALU) — выполняет арифметические и логические операции.
- Данные поступают с устройств ввода (Input Device), обрабатываются процессором и выводятся на устройства вывода (Output Device).
- Memory Unit хранит промежуточные результаты и инструкции.
6. Завершение программы и освобождение ресурсов (Program Termination and Resource Recovery)
- Программа завершается по команде
exit() или по инициативе пользователя.- ОС выполняет очистку ресурсов:
- Освобождение файловых ресурсов (закрытие дескрипторов файлов).
- Освобождение сетевых ресурсов (разрыв соединений).
- Возврат памяти (освобождение стека, кучи, сегментов).
- Все ресурсы возвращаются в пул ОС, программа завершается, и её состояние удаляется из памяти.
Telegram
METANIT.COM
Выполнение программы
(продолжение в следующем посте)
(продолжение в следующем посте)
🔥8❤🔥5❤4
В Думу внесли законопроект о подтверждении для сайтов значимых действий
Правительство внесло в Госдуму законопроект № 1110676-8, который с 1 сентября 2026 года вводит для российских сайтов обязательное подтверждение значимых действий в интернете кодами из СМС и одновременно сообщениями с использованием мессенджера Max. Перечень таких действий утвердит правительство.
В банковской и иных сферах финансового рынка перечень значимых действий будет дополнительно согласовываться с Банком России.
https://www.interfax.ru/russia/1065345
Правительство внесло в Госдуму законопроект № 1110676-8, который с 1 сентября 2026 года вводит для российских сайтов обязательное подтверждение значимых действий в интернете кодами из СМС и одновременно сообщениями с использованием мессенджера Max. Перечень таких действий утвердит правительство.
В банковской и иных сферах финансового рынка перечень значимых действий будет дополнительно согласовываться с Банком России.
https://www.interfax.ru/russia/1065345
Интерфакс
В Думу внесли законопроект о подтверждении для сайтов значимых действий
Интерфакс: Правительство внесло в Госдуму законопроект № 1110676-8, который с 1 сентября 2026 года вводит для российских сайтов обязательное подтверждение значимых действий в интернете кодами из СМС и одновременно сообщениями с использованием мессенджера…
🤡37👎3💊2🤷2🖕1
Спрос на ИИ-специалистов в России растет быстрее предложения. Опубликовано почти 200 тысяч вакансий
Потребность российской экономики в кадрах в сфере искусственного интеллекта в 2025 г. увеличилась примерно на 18% по сравнению с 2024 г. За год на российских рекрутинговых ИТ-платформах было опубликовано почти 200 тыс. вакансий для специалистов, а в 2024 г. их было около 170 тыс. К кадрам по искусственному интеллекту работодатели относит ИТ-инженеров, ИТ-разработчиков, системных архитекторов и аналитиков и иных инженерно-научных и прикладных специалистов, которые создают и интегрируют ИТ-решения на основе этой технологии.
Число таких вакансий растет в среднем на 5 под пункта быстрее, чем количество ИИ-специалистов с нужными компетенциями. По примерным оценкам J’son Partners Consulting, сейчас в России 100 тыс. - 120 тыс. ИИ-кадров (+15% к 2024 г., следует из аналитики компании), из которых обучением моделей занимается около 1 тыс.-3 тыс. инженеров в сфере Machine Learning (ML), остальное приходится на специалистов по данным т.е. data science.
Согласно совместному исследованию HeadHunter и Skillaz, с 2022 г. спрос на специалистов данного профиля вырос в два раза. Абсолютные значения количества вакансий и резюме в исследовании не раскрываются.
https://www.cnews.ru/news/top/2025-12-30_v_2025_godu_spros_na_ii-spetsialistov
Потребность российской экономики в кадрах в сфере искусственного интеллекта в 2025 г. увеличилась примерно на 18% по сравнению с 2024 г. За год на российских рекрутинговых ИТ-платформах было опубликовано почти 200 тыс. вакансий для специалистов, а в 2024 г. их было около 170 тыс. К кадрам по искусственному интеллекту работодатели относит ИТ-инженеров, ИТ-разработчиков, системных архитекторов и аналитиков и иных инженерно-научных и прикладных специалистов, которые создают и интегрируют ИТ-решения на основе этой технологии.
Число таких вакансий растет в среднем на 5 под пункта быстрее, чем количество ИИ-специалистов с нужными компетенциями. По примерным оценкам J’son Partners Consulting, сейчас в России 100 тыс. - 120 тыс. ИИ-кадров (+15% к 2024 г., следует из аналитики компании), из которых обучением моделей занимается около 1 тыс.-3 тыс. инженеров в сфере Machine Learning (ML), остальное приходится на специалистов по данным т.е. data science.
Согласно совместному исследованию HeadHunter и Skillaz, с 2022 г. спрос на специалистов данного профиля вырос в два раза. Абсолютные значения количества вакансий и резюме в исследовании не раскрываются.
https://www.cnews.ru/news/top/2025-12-30_v_2025_godu_spros_na_ii-spetsialistov
CNews.ru
Спрос на ИИ-специалистов в России растет быстрее предложения. Опубликовано почти 200 тысяч вакансий - CNews
Потребность российской экономики в кадрах в сфере искусственного интеллекта в 2025 г. увеличилась примерно на 18% по сравнению с 2024 г. За год на российских рекрутинговых ИТ-платформах было...
🤔11🤡9😁5👍3❤2🕊1
В 2025 году произошло множество значимых событий в мире программирования. Помянем основные из них:
### Укрепление позиций Rust
На конференции Maintainers Summit в декабре 2025 года разработчики ядра Linux решили перевести поддержку языка Rust из экспериментального статуса в категорию основных возможностей. Эксперимент по добавлению в ядро возможности разработки компонентов на Rust начался три года назад с версии 6.1.
За это время в состав ядра были включены абстракции для разработки на Rust драйверов для GPU, файловых систем, блочных устройств, сетевых адаптеров и USB-устройств. Например, развиваются драйверы Nova для видеокарт NVIDIA, asahi для GPU Apple AGX, Tyr для GPU ARM Mali, а также реализация IPC Binder.
Поддержка Rust неактивна по умолчанию и не приводит к включению этого языка в число обязательных сборочных зависимостей ядра. Однако сторонники продвижения Rust считают, что этот язык помогает избежать многих ошибок, связанных с особенностями C, и позволяет сократить время разработки за счёт снижения трудозатрат на отладку.
Параллельно Microsoft активно внедряет поддержку Rust в Windows, даже были высказывания, что компания планирует к 2030 году полностью заменить весь код на C/C++ на Rust. Однако позднее компания дезавуировала подобные высказывания.
Google также продвигает Rust в Android, но менее агрессивно
### Выход .NET 10:
Выпуск с долгосрочной поддержкой (Long Term Support, LTS), что гарантирует стабильность и актуальность вплоть до конца 2028 года, и знаменует собой качественный прогресс в эволюции платформы, делая её более привлекательной для широкого круга разработчиков и предприятий
Новые оптимизации повышают производительность приложений и уменьшают потребление ресурсов. Повышение эффективности работы с многопоточностью и параллельной обработкой данных. Оптимизирован JIT-компилятор, ускоряющий выполнение кода путем уменьшения нагрузки на процессор и улучшение обработки аргументов структур. Добавлена поддержка инструкций AVX10.2 для Intel и ARM64 SVE, позволяющая эффективнее использовать аппаратные возможности современных процессоров.
Значительно улучшено быстродействие NativeAOT (ранней компиляции) за счёт снижения размера исполняемых файлов и ускорения старта приложений.
Возможность стековой аллокации небольших массивов фиксированного размера, что уменьшает нагрузку на динамическое выделение памяти.
Сопровождается обновленнием языка C# - C# 14 со многими нововведениями, из которых следует отметить прежде всего расширенные возможности расширения классов (extension blocks), позволяющие элегантно дополнять базовые классы методами и свойствами.
Добавлена поддержка выполнения кода в виде скриптов без создания проекта.
### Java 25
Плановый выпуск тем не менее знаменует собой важную веху в развитии языка программирования Java. Из нововведенией прежде всего следует отметить возможность создавать более компактные исходные файлы и метод main, что упрощает процесс для начинающих и для разработчиков скриптов, позволяя создавать Java-программы с меньшим количеством шаблонного кода
Также следует отметить развитие Structured Concurrency, которая предоставляет высокоуровневый API для управления параллельными задачами, обеспечивая четкую организацию и обработку исключений, и Scoped Values, которая предоставляет безопасную передачу неизменяемых данных между потоками, что обеспечивает лучшую интеграцию с виртуальными потоками и устраняет необходимость использования ThreadLocal.
Кроме того, добавлена возможность массового подключения всех пакетов модуля одной строкой, что упрощает работу с крупными проектами и снижает сложность импорта, и упрощённое разрешение зависимостей и автоматический импорт пакетов, что ускоряет разработку и уменьшает когнитивную нагрузку
И, как обычно, все это сопровождается оптимизацией работы с памятью. В частности, функциональность Compact Object Headers позволяет сократить размер заголовков объектов в Java-куче и снижает потребление памяти, улучшает плотность кучи и общую производительность, особенно в приложениях с большим количеством объектов
### Укрепление позиций Rust
На конференции Maintainers Summit в декабре 2025 года разработчики ядра Linux решили перевести поддержку языка Rust из экспериментального статуса в категорию основных возможностей. Эксперимент по добавлению в ядро возможности разработки компонентов на Rust начался три года назад с версии 6.1.
За это время в состав ядра были включены абстракции для разработки на Rust драйверов для GPU, файловых систем, блочных устройств, сетевых адаптеров и USB-устройств. Например, развиваются драйверы Nova для видеокарт NVIDIA, asahi для GPU Apple AGX, Tyr для GPU ARM Mali, а также реализация IPC Binder.
Поддержка Rust неактивна по умолчанию и не приводит к включению этого языка в число обязательных сборочных зависимостей ядра. Однако сторонники продвижения Rust считают, что этот язык помогает избежать многих ошибок, связанных с особенностями C, и позволяет сократить время разработки за счёт снижения трудозатрат на отладку.
Параллельно Microsoft активно внедряет поддержку Rust в Windows, даже были высказывания, что компания планирует к 2030 году полностью заменить весь код на C/C++ на Rust. Однако позднее компания дезавуировала подобные высказывания.
Google также продвигает Rust в Android, но менее агрессивно
### Выход .NET 10:
Выпуск с долгосрочной поддержкой (Long Term Support, LTS), что гарантирует стабильность и актуальность вплоть до конца 2028 года, и знаменует собой качественный прогресс в эволюции платформы, делая её более привлекательной для широкого круга разработчиков и предприятий
Новые оптимизации повышают производительность приложений и уменьшают потребление ресурсов. Повышение эффективности работы с многопоточностью и параллельной обработкой данных. Оптимизирован JIT-компилятор, ускоряющий выполнение кода путем уменьшения нагрузки на процессор и улучшение обработки аргументов структур. Добавлена поддержка инструкций AVX10.2 для Intel и ARM64 SVE, позволяющая эффективнее использовать аппаратные возможности современных процессоров.
Значительно улучшено быстродействие NativeAOT (ранней компиляции) за счёт снижения размера исполняемых файлов и ускорения старта приложений.
Возможность стековой аллокации небольших массивов фиксированного размера, что уменьшает нагрузку на динамическое выделение памяти.
Сопровождается обновленнием языка C# - C# 14 со многими нововведениями, из которых следует отметить прежде всего расширенные возможности расширения классов (extension blocks), позволяющие элегантно дополнять базовые классы методами и свойствами.
Добавлена поддержка выполнения кода в виде скриптов без создания проекта.
### Java 25
Плановый выпуск тем не менее знаменует собой важную веху в развитии языка программирования Java. Из нововведенией прежде всего следует отметить возможность создавать более компактные исходные файлы и метод main, что упрощает процесс для начинающих и для разработчиков скриптов, позволяя создавать Java-программы с меньшим количеством шаблонного кода
Также следует отметить развитие Structured Concurrency, которая предоставляет высокоуровневый API для управления параллельными задачами, обеспечивая четкую организацию и обработку исключений, и Scoped Values, которая предоставляет безопасную передачу неизменяемых данных между потоками, что обеспечивает лучшую интеграцию с виртуальными потоками и устраняет необходимость использования ThreadLocal.
Кроме того, добавлена возможность массового подключения всех пакетов модуля одной строкой, что упрощает работу с крупными проектами и снижает сложность импорта, и упрощённое разрешение зависимостей и автоматический импорт пакетов, что ускоряет разработку и уменьшает когнитивную нагрузку
И, как обычно, все это сопровождается оптимизацией работы с памятью. В частности, функциональность Compact Object Headers позволяет сократить размер заголовков объектов в Java-куче и снижает потребление памяти, улучшает плотность кучи и общую производительность, особенно в приложениях с большим количеством объектов
❤8👍4❤🔥2🤮2👎1
### Python 3.14
Выход Python 3.14 в октябре 2025 года ознаменовал важные изменения и улучшения, направленные на повышение производительности, улучшение поддержки многопоточности и предоставление новых возможностей для разработчиков.
Интерпретатор Python 3.14 получил значительные улучшения, включающие оптимизацию обработки команд CPython и увеличение производительности на уровне байт-кода. Результаты тестов показывают, что средний прирост производительности составляет около 30%, что достигается без необходимости внесения изменений в существующий код.
Важнейшим изменением является удаление механизма GIL, который препятствовал эффективному использованию многопроцессорных систем. Теперь Python позволяет эффективно распределять задачи между несколькими потоками, значительно увеличивая производительность в многопоточных приложениях. Это открывает путь к новому уровню производительности для интенсивных вычислительных задач и многопоточности.
Python 3.14 отличается значительным увеличением производительности за счет оптимизации внутренней работы интерпретатора. Испытания показывают, что новое решение позволяет выполнять задачи быстрее и использовать меньше памяти, что особенно важно для больших проектов и интенсивных вычислений
### Swift для Android
Компания Apple открыла возможность разработки приложений на языке Swift для операционной системы Android, что ранее было ограничено экосистемой Apple. Хотя поддержка пока неполная, но в перспективе Swift может стать альтернативой инструментам для кросс-платформенной разработке, как Kotlin Multiplatform, Flutter (Dart), .NET MAUI (C#), React Native (JS/TS)
### Искусственный интеллект и инструменты для разработчиков
В 2025 году продолжил развиваться подход, при котором ИИ выступает не просто помощником, а полноценным соавтором разработчика. Примерно 60% специалистов среднего уровня активно использовали ИИ-ассистентов в работе.
Появился термин «вайбкодинг» (vibe coding), который описывает ситуацию, когда разработчик задаёт направление желаемого результата, а реализацию берёт на себя ИИ. В России этот подход стал стандартным инструментом для быстрого прототипирования и создания MVP, особенно в стартапах и продуктовых командах.
Однако эксперты предупреждают, что код, созданный с помощью вайбкодинга, часто оказывается хрупким: его сложно поддерживать и масштабировать. В индустрии даже появился термин «вайб-похмелье» для описания ситуации, когда проект приходится переписывать с нуля, потому что никто уже не понимает, как он устроен.
### Развитие рынка труда для разработчиков
В 2025 году рынок труда для программистов в России и мире претерпевал значительные изменения, связанные с экономическими факторами, технологическим прогрессом и структурными сдвигами в отрасли.
Увеличилось количество вакансий в сферах машинного обучения, AI, кибербезопасности, разработки приложений виртуальной реальности, операционной инженерии.
В России наблюдался дисбаланс между количеством соискателей и спросом на определённые категории специалистов. По данным hh_ru, на одну ИТ-вакансию в 2025 году приходилось около 14 резюме, что почти вдвое выше «комфортного» уровня. При этом конкуренция была максимальной среди начинающих специалистов (джунов) — 18,6 резюме на одну вакансию, тогда как на позиции сеньоров приходилось всего 3 резюме, и не все из них соответствовали требованиям.
Рынок труда характеризуется избытком джунов. Многие недавние выпускники онлайн-курсов и вузов не обладали достаточными практическими навыками для выполнения коммерческих задач. У них часто были завышенные зарплатные ожидания.
И в то же время наблюдается дефицит middle- и senior-специалистов. Компании остро нуждались в опытных разработчиках, способных быстро включаться в сложные проекты и принимать ключевые решения.
Выход Python 3.14 в октябре 2025 года ознаменовал важные изменения и улучшения, направленные на повышение производительности, улучшение поддержки многопоточности и предоставление новых возможностей для разработчиков.
Интерпретатор Python 3.14 получил значительные улучшения, включающие оптимизацию обработки команд CPython и увеличение производительности на уровне байт-кода. Результаты тестов показывают, что средний прирост производительности составляет около 30%, что достигается без необходимости внесения изменений в существующий код.
Важнейшим изменением является удаление механизма GIL, который препятствовал эффективному использованию многопроцессорных систем. Теперь Python позволяет эффективно распределять задачи между несколькими потоками, значительно увеличивая производительность в многопоточных приложениях. Это открывает путь к новому уровню производительности для интенсивных вычислительных задач и многопоточности.
Python 3.14 отличается значительным увеличением производительности за счет оптимизации внутренней работы интерпретатора. Испытания показывают, что новое решение позволяет выполнять задачи быстрее и использовать меньше памяти, что особенно важно для больших проектов и интенсивных вычислений
### Swift для Android
Компания Apple открыла возможность разработки приложений на языке Swift для операционной системы Android, что ранее было ограничено экосистемой Apple. Хотя поддержка пока неполная, но в перспективе Swift может стать альтернативой инструментам для кросс-платформенной разработке, как Kotlin Multiplatform, Flutter (Dart), .NET MAUI (C#), React Native (JS/TS)
### Искусственный интеллект и инструменты для разработчиков
В 2025 году продолжил развиваться подход, при котором ИИ выступает не просто помощником, а полноценным соавтором разработчика. Примерно 60% специалистов среднего уровня активно использовали ИИ-ассистентов в работе.
Появился термин «вайбкодинг» (vibe coding), который описывает ситуацию, когда разработчик задаёт направление желаемого результата, а реализацию берёт на себя ИИ. В России этот подход стал стандартным инструментом для быстрого прототипирования и создания MVP, особенно в стартапах и продуктовых командах.
Однако эксперты предупреждают, что код, созданный с помощью вайбкодинга, часто оказывается хрупким: его сложно поддерживать и масштабировать. В индустрии даже появился термин «вайб-похмелье» для описания ситуации, когда проект приходится переписывать с нуля, потому что никто уже не понимает, как он устроен.
### Развитие рынка труда для разработчиков
В 2025 году рынок труда для программистов в России и мире претерпевал значительные изменения, связанные с экономическими факторами, технологическим прогрессом и структурными сдвигами в отрасли.
Увеличилось количество вакансий в сферах машинного обучения, AI, кибербезопасности, разработки приложений виртуальной реальности, операционной инженерии.
В России наблюдался дисбаланс между количеством соискателей и спросом на определённые категории специалистов. По данным hh_ru, на одну ИТ-вакансию в 2025 году приходилось около 14 резюме, что почти вдвое выше «комфортного» уровня. При этом конкуренция была максимальной среди начинающих специалистов (джунов) — 18,6 резюме на одну вакансию, тогда как на позиции сеньоров приходилось всего 3 резюме, и не все из них соответствовали требованиям.
Рынок труда характеризуется избытком джунов. Многие недавние выпускники онлайн-курсов и вузов не обладали достаточными практическими навыками для выполнения коммерческих задач. У них часто были завышенные зарплатные ожидания.
И в то же время наблюдается дефицит middle- и senior-специалистов. Компании остро нуждались в опытных разработчиках, способных быстро включаться в сложные проекты и принимать ключевые решения.
❤5❤🔥2👎1👏1
На российский рынок труда также оказали влияние некоторые локальные особенности. Например, влияние импортозамещения: переход на отечественные решения (например, замену Oracle на PostgreSQL, SAP на 1С) создал спрос на специалистов, знакомых с российскими продуктами
В то де время экономические факторы, в частности, высокая ключевая ставка ЦБ и замедление экономики, а также оптимизация расходов привели к снижению количества вакансий, произошло сокращение бюджетов и проектов.
Тем не менее также стоит отметить и гос. поддержку в этой сфере: действовали программы льготной ипотеки для IT-специалистов (до 2030 года), отсрочка от призыва для сотрудников аккредитованных компаний, образовательные инициативы (увеличение бюджетных мест в вузах, корпоративные университеты).
Мировой рынок IT в 2025 году столкнулся с заметным охлаждением. По данным компании ZipRecruiter, в США количество IT-вакансий за последний год сократилось на 56%. Крупные технологические компании (Microsoft, Intel, Tata Consultancy Services) проводили масштабные сокращения.
ИИ начал массово внедряться в процессы разработки, что привело к сокращению спроса на специалистов, выполняющих рутинные задачи. По некоторым оценкам, доля кода, создаваемого с помощью ИИ, достигла около 50%. Однако это повысило спрос на сеньоров для ревью кода, постановки требований и работы с аналитикой.
В США и Индии и в ряде других стран (как и в России) фиксировалось сокращение позиций для начинающих специалистов и рост спроса на узкопрофильных экспертов. Компании искали специалистов с опытом в конкретных сферах: финансы, e-commerce, кибербезопасность, машинное обучение.
В то де время экономические факторы, в частности, высокая ключевая ставка ЦБ и замедление экономики, а также оптимизация расходов привели к снижению количества вакансий, произошло сокращение бюджетов и проектов.
Тем не менее также стоит отметить и гос. поддержку в этой сфере: действовали программы льготной ипотеки для IT-специалистов (до 2030 года), отсрочка от призыва для сотрудников аккредитованных компаний, образовательные инициативы (увеличение бюджетных мест в вузах, корпоративные университеты).
Мировой рынок IT в 2025 году столкнулся с заметным охлаждением. По данным компании ZipRecruiter, в США количество IT-вакансий за последний год сократилось на 56%. Крупные технологические компании (Microsoft, Intel, Tata Consultancy Services) проводили масштабные сокращения.
ИИ начал массово внедряться в процессы разработки, что привело к сокращению спроса на специалистов, выполняющих рутинные задачи. По некоторым оценкам, доля кода, создаваемого с помощью ИИ, достигла около 50%. Однако это повысило спрос на сеньоров для ревью кода, постановки требований и работы с аналитикой.
В США и Индии и в ряде других стран (как и в России) фиксировалось сокращение позиций для начинающих специалистов и рост спроса на узкопрофильных экспертов. Компании искали специалистов с опытом в конкретных сферах: финансы, e-commerce, кибербезопасность, машинное обучение.
👍14🔥4❤2👎2❤🔥1🤬1
Список базовых команд Linux для повседневного использования
(продолжение предыдущего поста)
1. Bash Commands (базовые команды Bash):
-
-
-
-
-
-
-
2. File commands (команды работы с файлами и директориями):
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
3. File permissions (команды управления правами доступа к файлам):
-
-
-
4. Process management (управление процессами):
-
-
-
-
-
5. Searching (поиск):
-
-
-
-
-
-
6. Network (сетевые команды):
-
-
-
-
-
-
7. SSH (команды SSH):
-
-
-
8. Installation (команды установки):
-
-
-
(продолжение предыдущего поста)
1. Bash Commands (базовые команды Bash):
-
uname -a — показать систему и ядро;-
head -n1 /etc/issue — показать дистрибутив;-
mount — показать смонтированные файловые системы;-
date — показать системную дату;-
uptime — показать время работы системы;-
whoami — показать имя пользователя;-
man command — показать руководство по команде.2. File commands (команды работы с файлами и директориями):
-
ls — список директории;-
ls -a — показать всё (включая скрытые файлы);-
ls -R — рекурсивный список;-
ls -r — обратный порядок;-
ls -t — сортировка по времени последнего изменения;-
ls -S — сортировка по размеру файла;-
ls -l — длинный формат списка;-
ls -1 — по одному файлу в строке;-
ls -m — вывод через запятую;-
ls -Q — вывод в кавычках;-
cd — перейти в домашнюю директорию;-
pwd — показать текущую директорию;-
mkdir dir — создать директорию dir;-
cd dir — перейти в директорию dir;-
rm file — удалить файл;-
rm -r dir — удалить директорию dir (рекурсивно);-
rm -f file — принудительно удалить файл;-
rm -rf dir — удалить директорию dir (рекурсивно, без подтверждения);-
cp file1 file2 — скопировать file1 в file2;-
mv file1 file2 — переименовать file1 в file2;-
ln -s file link — создать символьную ссылку «link» на файл;-
touch file — создать или обновить файл;-
cat > file — поместить стандартный ввод в файл;-
more file — вывести содержимое файла;-
less file — вывести содержимое файла (с постраничным просмотром);-
head file — вывести первые 10 строк файла;-
tail file — вывести последние 10 строк файла.3. File permissions (команды управления правами доступа к файлам):
-
chmod 775 file — изменить права доступа файла на 775;-
chmod -R 600 folder — рекурсивно изменить права доступа папки на 600;-
chown user.group file — изменить владельца файла на user и группу на group.4. Process management (управление процессами):
-
ps — показать снимок процессов;-
top — показать процессы в реальном времени;-
kill pid — завершить процесс с ID pid;-
pkill name — завершить процесс по имени name;-
killall name — завершить все процессы, имена которых начинаются с name.5. Searching (поиск):
-
grep pattern files — поиск шаблона в файлах;-
grep -i — поиск без учёта регистра;-
grep -r — рекурсивный поиск;-
grep -v — инвертированный поиск (показать строки, где шаблон не найден);-
grep -o — показать только совпадающую часть файла;-
find /dir/ -name name* — найти файлы, начинающиеся с name в директории /dir/.6. Network (сетевые команды):
-
ping host — отправить пинг на хост host;-
dig domain — получить DNS для домена;-
dig -x host — обратный поиск по хосту;-
wget file — скачать файл;-
wget -c file — продолжить прерванную загрузку;-
wget -r url — рекурсивно скачать файлы с URL.7. SSH (команды SSH):
-
ssh user@host — подключиться к хосту как пользователь user;-
ssh -p port user@host — подключиться, используя порт p;-
ssh -D port user@host — подключиться и использовать бинд-порт.8. Installation (команды установки):
-
./configure — настройка перед компиляцией;-
make — компиляция программы;-
make install — установка скомпилированной программы.Telegram
METANIT.COM
Список базовых команд Linux для повседневного использования
(продолжение в следующем посте)
(продолжение в следующем посте)
❤🔥11🎄7👏1
Стратегии совместного использования кода
(продолжение предыдущего поста)
Есть 4 основные стратегии совместного использования кода в микросервисной архитектуре: Code Replication (Кодовое дублирование), Shared Library (Общая библиотека), Shared Service (Общий сервис) и Sidecar (Сайдкар). Рассмотрим каждую из них подробно.
#### 1. Code Replication (Кодовое дублирование)
Суть: код, необходимый нескольким сервисам, копируется (дублируется) в каждый из них. На схеме видно, что
Преимущества:
* простота реализации — не требует дополнительных инфраструктурных решений;
* автономность сервисов — каждый сервис содержит весь необходимый код локально;
* отсутствие сетевых задержек, связанных с обращением к внешним ресурсам.
Недостатки:
* дублирование кода ведёт к увеличению объёма кода и усложняет его поддержку;
* при необходимости обновления общего кода нужно вносить изменения во все сервисы, что увеличивает риск ошибок и время на развёртывание;
* сложность синхронизации версий кода между сервисами.
Когда использовать: подходит для небольших проектов или случаев, когда код используется редко и не требует частого обновления.
#### 2. Shared Library (Общая библиотека)
Суть: сервисы используют общую библиотеку кода. На схеме показано, что
Преимущества:
* уменьшение объёма кода за счёт его централизации;
* упрощение поддержки — обновления вносятся в одном месте;
* возможность повторного использования кода между сервисами;
* поддержка версий библиотеки позволяет контролировать совместимость.
Недостатки:
* зависимость сервисов от общей библиотеки может усложнить развёртывание и обновление;
* необходимость синхронизации версий библиотеки между сервисами;
* риск конфликтов зависимостей, если сервисы используют разные версии библиотеки.
Когда использовать: оптимально для проектов с большим количеством сервисов, использующих общий функционал (например, библиотеки для логирования, трассировки, работы с API).
#### 3. Shared Service (Общий сервис)
Суть: вместо включения кода в сервисы или использования библиотек, сервисы обращаются к отдельному общему сервису по сети. На схеме
Преимущества:
* полная изоляция логики — общий сервис можно обновлять независимо от клиентских сервисов;
* централизованное управление функционалом (например, аутентификация, кэширование, обработка платежей);
* масштабируемость — общий сервис можно масштабировать отдельно от клиентских сервисов;
* упрощение развёртывания новых сервисов — достаточно добавить вызов к общему сервису.
Недостатки:
* сетевые задержки при обращении к общему сервису;
* единая точка отказа — если общий сервис упадёт, все зависящие от него сервисы потеряют функциональность;
* усложнение архитектуры и необходимость управления сетевыми вызовами.
Когда использовать: подходит для критических сервисов с высокой нагрузкой (например, сервис аутентификации, платёжный шлюз), где важна централизованная логика и масштабируемость.
#### 4. Sidecar (Сайдкар)
Суть: отдельный процесс (сайдкар) запускается вместе с сервисом и предоставляет ему дополнительные функции. На схеме
Преимущества:
* изоляция кросс-функционального кода (логирование, мониторинг) от бизнес-логики сервиса;
* возможность обновления сайдкара без изменения основного сервиса;
* упрощение внедрения общих функций (например, трассировки, аутентификации) в существующие сервисы;
* поддержка микросервисной изоляции при сохранении централизованного управления некоторыми аспектами (логирование, безопасность).
Недостатки:
* усложнение развёртывания — нужно управлять двумя процессами (сервис + сайдкар);
* дополнительные ресурсы — сайдкар потребляет ресурсы наравне с основным сервисом;
* необходимость синхронизации работы сервиса и сайдкара.
(продолжение предыдущего поста)
Есть 4 основные стратегии совместного использования кода в микросервисной архитектуре: Code Replication (Кодовое дублирование), Shared Library (Общая библиотека), Shared Service (Общий сервис) и Sidecar (Сайдкар). Рассмотрим каждую из них подробно.
#### 1. Code Replication (Кодовое дублирование)
Суть: код, необходимый нескольким сервисам, копируется (дублируется) в каждый из них. На схеме видно, что
SERVICE A, SERVICE B и SERVICE C содержат копию SHARED CODE.Преимущества:
* простота реализации — не требует дополнительных инфраструктурных решений;
* автономность сервисов — каждый сервис содержит весь необходимый код локально;
* отсутствие сетевых задержек, связанных с обращением к внешним ресурсам.
Недостатки:
* дублирование кода ведёт к увеличению объёма кода и усложняет его поддержку;
* при необходимости обновления общего кода нужно вносить изменения во все сервисы, что увеличивает риск ошибок и время на развёртывание;
* сложность синхронизации версий кода между сервисами.
Когда использовать: подходит для небольших проектов или случаев, когда код используется редко и не требует частого обновления.
#### 2. Shared Library (Общая библиотека)
Суть: сервисы используют общую библиотеку кода. На схеме показано, что
SERVICE A, SERVICE B и SERVICE C подключают модули (SC1, SC2, SC3, SC4, SC5) из общей библиотеки.Преимущества:
* уменьшение объёма кода за счёт его централизации;
* упрощение поддержки — обновления вносятся в одном месте;
* возможность повторного использования кода между сервисами;
* поддержка версий библиотеки позволяет контролировать совместимость.
Недостатки:
* зависимость сервисов от общей библиотеки может усложнить развёртывание и обновление;
* необходимость синхронизации версий библиотеки между сервисами;
* риск конфликтов зависимостей, если сервисы используют разные версии библиотеки.
Когда использовать: оптимально для проектов с большим количеством сервисов, использующих общий функционал (например, библиотеки для логирования, трассировки, работы с API).
#### 3. Shared Service (Общий сервис)
Суть: вместо включения кода в сервисы или использования библиотек, сервисы обращаются к отдельному общему сервису по сети. На схеме
SERVICE A, SERVICE B и SERVICE C делают сетевые вызовы к SHARED SERVICE.Преимущества:
* полная изоляция логики — общий сервис можно обновлять независимо от клиентских сервисов;
* централизованное управление функционалом (например, аутентификация, кэширование, обработка платежей);
* масштабируемость — общий сервис можно масштабировать отдельно от клиентских сервисов;
* упрощение развёртывания новых сервисов — достаточно добавить вызов к общему сервису.
Недостатки:
* сетевые задержки при обращении к общему сервису;
* единая точка отказа — если общий сервис упадёт, все зависящие от него сервисы потеряют функциональность;
* усложнение архитектуры и необходимость управления сетевыми вызовами.
Когда использовать: подходит для критических сервисов с высокой нагрузкой (например, сервис аутентификации, платёжный шлюз), где важна централизованная логика и масштабируемость.
#### 4. Sidecar (Сайдкар)
Суть: отдельный процесс (сайдкар) запускается вместе с сервисом и предоставляет ему дополнительные функции. На схеме
SERVICE A и SERVICE B работают вместе с SIDECAR, который отвечает за логирование, мониторинг, работу с Circuit Breaker и другие задачи.Преимущества:
* изоляция кросс-функционального кода (логирование, мониторинг) от бизнес-логики сервиса;
* возможность обновления сайдкара без изменения основного сервиса;
* упрощение внедрения общих функций (например, трассировки, аутентификации) в существующие сервисы;
* поддержка микросервисной изоляции при сохранении централизованного управления некоторыми аспектами (логирование, безопасность).
Недостатки:
* усложнение развёртывания — нужно управлять двумя процессами (сервис + сайдкар);
* дополнительные ресурсы — сайдкар потребляет ресурсы наравне с основным сервисом;
* необходимость синхронизации работы сервиса и сайдкара.
❤5👍2🔥2