Универсальные языки программирования примеры
Современные языки программирования, которые заставят вас страдать: Часть 1, ООП
Современные языки программирования, которые заставят вас страдать: Часть 1, ООП
Прим. ред. Это перевод статьи Ильи Суздальницкого. Мнение редакции может не совпадать с мнением автора оригинала.
В этой статье автор попытался дать объективную оценку современных популярных (и не очень) языков программирования. Если вы не согласны с автором, делитесь мнением в комментариях, и голосуйте за свои любимые языки программирования в нашем баттле.
Си-подобные языки
Особенности языка: C++ может многое. Слишком многое. Это попытка стать универсальным, при этом не будучи хорошим в чём-то одном. В языке есть: оператор goto, указатели, ссылки, ООП, перегрузка операторов и другие не особо полезные фичи.
Почему C++ такой? Полагаю из-за возраста. Язык был создан в далёком 1979 году, когда его создатели не знали на чём нужно фокусироваться. Добавлять в язык больше возможностей считалось хорошей идеей, ведь это увеличивало область применения.
Скорость: C++ славится долгой компиляцией. Она значительно дольше чем у Java, но не так плоха, как у Scala. С другой стороны производительность уже скомпилированных приложений и время их запуска достаточно хороши.
Экосистема\Инструментарий: описание ошибок — не сильная сторона C++, это иллюстрирует следующий твит:
В С++ мы не говорим «Пропущен символ *», мы говорим:
Сборка мусора: этой фичи никогда не было в C++. Ручное управление сборкой мусора — источник множества ошибок.
ООП, которое не получилось: во времена создания C++ ООП была крутой новой парадигмой, но при её реализации было допущено несколько критических ошибок. По крайней мере в С++ использовать ООП не обязательно (В отличие от Java).
Сложность изучения: С++ — сложный низкоуровневый язык без автоматического управления памятью. Его сложно изучать новичкам из-за чрезмерного количества функций.
Параллелизм: язык создавался во времена одноядерных вычислений, только в последние десятилетия в него была добавлена рудиментарная поддержка параллелизма.
Обработка ошибок: предпочтительный механизм обработки — выброс и обработка исключений.
Иммутабельность: поддержка отсутствует.
Поддержка NULL: все ссылки могут быть NULL.
Вердикт: неудавшаяся попытка превзойти язык Си. Вероятно, стоит использовать только для системного программирования. Однако и здесь есть лучшие альтернативы. Например, такие современные языки программирования, как Rust и Go.
Сборка мусора: это одно из ключевых преимуществ Java над C++, позволяющее избежать множества багов.
Экосистема: Java существует достаточно долго, поэтому она обладает внушительной экосистемой для бэкенд-разработки. Это значительно уменьшает затраты на разработку.
ООП: Подробнее моё мнение об ООП можно узнать в статье ООП — катастрофа на триллион долларов. Вместо этого я процитирую более выдающегося человека: «Мне жаль, что я придумал для этого термин «объекты», и люди сфокусировались на побочной идее. Главная идея — сообщения» — Алан Кей, изобретатель ООП.
Скорость: Java запускается на JVM, что замедляет время старта. Я видел программы которые запускались по 30 секунд и дольше, что неприемлемо для современных приложений. Время компиляции растет на больших проектах, что влияет на продуктивность разработчиков (но всё ещё не так плохо как в Scala). Однако производительность JVM во время выполнения программы действительно хороша.
Сложность изучения: Хотя Java довольно простой язык, писать на нём хороший объектно-ориентированный код действительно сложно.
Параллелизм: Java также как и C++ был создан в эру одноядерных вычислений, и имеет лишь рудиментарную поддержку параллелизма.
Поддержка NULL: все ссылки могут быть NULL.
Обработка ошибок: предпочтительный механизм обработки — выброс и обработка исключений.
Иммутабельность: поддержка отсутствует.
Вердикт: Java был неплохим современным языком программирования в момент своего появления. Его портит сосредоточенность на ООП. Язык очень многословен и страдает от шаблонного кода.
Синтаксис: синтаксис C# всегда немного опережал Java. Он меньше страдает от шаблонного кода. Но хоть C# и объектно-ориентированный язык, он тоже страдает от многословности. Приятно видеть как синтаксис C# улучшается с каждым релизом, добавляются: сопоставление с образцом, кортежи и другие возможности.
ООП: C#, как и Java больше сосредоточен на ООП. И снова, вместо того чтобы рассказывать о недостатках ООП, я процитирую более выдающегося человека: «Я считаю, что недостаточное переиспользование больше относится к ООП языкам, чем функциональным. Потому что проблема ООП языков в неявной среде, которую они таскают за собой. Вы хотите банан, но получаете гориллу, держащую банан и целые джунгли» — Джо Армстронг, создатель языка Erlang.
Мультипарадигменность: разработчики утверждают, что C# — мультипарадигменный язык. В частности, говорят что C# поддерживает функциональное программирование. Я считаю, что поддержки функций первого класса не достаточно для того, чтобы считать язык функциональным. Что для этого нужно? Как минимум встроенная поддержка иммутабельных структур данных, сопоставления с образцом, конвейерный оператор для создания цепочек функций и алгебраические типы данных.
Параллелизм: аналогично с C++ и Java.
Поддержка NULL: аналогично с C++ и Java.
Обработка ошибок: аналогично с C++ и Java.
Иммутабельность: аналогично с C++ и Java.
Вердикт: как и в случае с Java я бы порекомендовал более современные языки программирования. C# под капотом — та же Java, с более современным синтаксисом.
Python
Экосистема: есть библиотеки почти на любой случай. В отличие от JavaScript, Python нельзя использовать для фронтенда. Это компенсируется множеством библиотек для анализа данных.
Сложность изучения: простой язык, который можно выучить за пару недель.
Типизация: имеет динамическую типизацию.
Скорость: Python — интерпретируемый язык программирования и является одним из самых медленных языков по времени выполнения программы. В случаях когда производительность важна, можно использовать Cython. Скорость запуска программ также страдает, в сравнении с нативными языками.
Инструменты: управление зависимостями в Python разочаровывает. Существует: pip, pipenv, virtiualenv, pip freeze и другие. Для сравнения — NPM в JS это всё что вам нужно.
Параллелизм: имеет только рудиментарную поддержку параллелизма.
Поддержка NULL: Все ссылки в Python могут быть NULL.
Обработка ошибок: предпочтительный механизм обработки — выброс и обработка исключений.
Иммутабельность: поддержка отсутствует.
Вердикт: увы, Python не имеет достаточной поддержки функционального программирования, которое как нельзя лучше подходит для анализа данных (лучше использовать Elixir). Язык не стоит использовать где-то кроме анализа данных (когда нет других альтернатив). Julia вероятно может быть хорошей заменой, но её экосистема ещё не такая зрелая, как у Pyhton.
Скорость: язык создавался быстрым. Компиляция на Rust занимает больше времени чем на Go. Выполнение программ немного быстрее чем на Go.
Поддержка NULL: первый язык из нашего списка, использующий современную альтернативу. Вместо NULL значения здесь используется Option.
Обработка ошибок: Rust использует для этого подход современных функциональных языков программирования. Существует специальный тип Result, который показывает, что операция может выдать ошибку. Это очень похоже на Option, но случай None тоже хранит результат.
Управление памятью: нет сборщика мусора.
Параллелизм: из-за отсутствия сборки мусора параллелизм в Rust довольно сложен.
Иммутабельность: не поддерживается.
Низкоуровневый язык: в следствие этого, язык сложен для изучения, а производительность разработчиков меньше, чем на высокоуровневых языках.
Вердикт: Rust хорош для системного программирования, имеет мощную систему типов, Option и современную обработку ошибок. Однако, он всё ещё менее популярен чем TS и JS, потому что не подходит для бэкенда\Web API.
TypeScript
Надмножество JS: это плюс, потому что многие уже знают JavaScript. Но с другой стороны, язык тянет за собой всё из JS.
Экосистема: здесь всё также наследуется от JS, что даёт доступ к огромной экосистеме JS. Работать с NPM очень приятно, особенно после Python. Однако, не все JS-библиотеки поддерживают TypeScript.
Система типов: с одной стороны поддерживает алгебраические типы данных, с другой имеет только рудиментарную поддержку приведения типов. Вы будете использовать Any чаще, чем вам того хотелось бы.
Поддержка NULL: в версии 2.0 была добавлена поддержка non-nullable типов, её можно включить с помощью флага –strictNullChecks. Однако это не подразумевается в языке.
Обработка ошибок: предпочтительный механизм обработки — выброс и обработка исключений.
Новые фичи JS: JavaScript быстрее получает клевые обновления. Используя Babel можно использовать даже экспериментальные фичи.
Иммутабельность: JS разработчики могут использовать библиотеки для этого. В TypeScript приходится полагаться на нативные массивы/оператор spread (копирование при записи):
К сожалению нативный оператор spread не производит глубокое копирование, а ручное расширение является громоздким. Копирование больших массивов/объектов плохо сказывается на производительности.
Ключевое слово readonly делает свойства иммутабельными. Однако это всё ещё далеко от адекватной поддержки иммутабельности.
TypeScript&React: если вы занимаетесь фронтендом, то наверняка используете React. Он не создан для работы с TS. React пригоден для функциональных языков.
Нужен ли TypeScript? Мне кажется что шумиха вокруг TS имеет ту же природу, что и популярность Java\C#. Её причина — поддержка большими корпорациями.
Вердикт: хотя TypeScript и позиционируется как «лучше чем JS», его достоинства переоценены.
Параллелизм: это киллер фича языка. Как и Erlang\Elixir, Go следует mailbox модели параллелизма. Параллелизм в Go с помощью горутины в случае ошибки убивает всю программу, когда как параллелизм в Elixir убивает один из процессов.
Скорость: Go — очень быстрый язык, как по времени компиляции, так и скорости запуска программ.
Сложность изучения: это простой язык, который можно изучить за месяц.
Обработка ошибок: Go не поддерживает исключения. Вместо этого нужно явно обрабатывать возможные ошибки. Как и Rust, он возвращает два значения: результат вызова и возможную ошибку.
Не ООП: хоть многие со мной не согласятся, я считаю отсутствие ООП фич большим достоинством.
Типизация: отсутствие дженериков в Go приводит к дублированию кода.
Поддержка NULL: к сожалению, Gо использует NULL, а не более безопасные альтернативы.
Иммутабельность: не поддерживается.
Вердикт: Если вы не работаете в Google, тогда Go, вероятно, не лучший выбор. Go — простой язык, подходящий для системного программирования. Он действительно быстрый, лёгкий для изучения и отлично справляется с многопоточностью.
Javascript
Экосистема: это сильная сторона JS. Этот язык используют в вебе, CLI, data science, и даже машинном обучении.
Сложность изучения: JavaScript один из самых простых для изучения языков. Его можно освоить за пару недель.
Типизация: JS — динамически типизирован. И это иногда порождает странные вещи вроде:
Иммутабельность: выше уже говорилось о том, что оператор spread снижает производительность. Однако, JS-библиотеки могут помочь.
React не создан для JavaScript: использование PropTypes обязательно в связке React+JS. Однако это означает, что PropTypes должны поддерживаться, что может стать вашим кошмаром.
Также возможны проблемы с производительностью в подобных моментах:
Такой невинный на первый взгляд код, может стать кошмарным, из-за того, что в JS []!=[]. Он заставит огромный список перерендериться при каждом обновлении.
Ключевое слово this: это, возможно, худшее, что есть в JS. Оно порождает неоднозначное поведение. Использование этого ключевого слова часто приводит к странным ошибкам.
Параллелизм: JS поддерживает однопоточный параллелизм в цикле событий. Это устраняет необходимость синхронизации потоков (блокировки). Хотя JavaScript и не ориентирована на параллелизм, работать с ним здесь проще, чем большинстве других языков.
Новые фичи JS: быстро получают поддержку (можно использовать экспериментальные).
Обработка ошибок: предпочтительный механизм обработки — выброс и обработка исключений.
Вердикт: JS — не идеален. Но при должной дисциплине может быть хорошим языком для фуллстек разработки.
Какой язык программирования учить прямо сейчас: 9 самых востребованных
Самые востребованные языки программирования
Язык программирования — это набор лексических, синтаксических и семантических правил, которые придумали люди, чтобы создавать программы. Изучить язык до начального уровня можно за 6–10 месяцев, но если ошибиться с выбором, язык может устареть, а вы потеряете время и деньги.
Чтобы отслеживать востребованность языков программирования, компании составляют специальные рейтинги. Преподаватель онлайн-школы цифрового творчества и программирования для детей «Кодабра» Николай Ведерников выбрал языки, которые занимают высокие места в рейтингах TIOBE и IEEE. В первый рейтинг попадают языки, на которых написано больше всего строк кода, для второго используют чуть больше критериев. Например, популярность на сайтах для поиска работы, упоминания в сервисах для программистов и соцсетях.
Самые востребованные языки программирования:
Стоит ли учиться программированию на C
C — один из самых старых и популярных языков программирования. Он «легкий» и быстрый, поэтому его используют там, где нужна высокая производительность. Например, для создания драйверов, операционных систем или ПО для микроконтроллеров. При этом C сложно изучить — многое приходится писать с нуля. Если сравнивать языки программирования с автомобилями, то C — гоночный болид, неудобный на городских дорогах, но очень быстрый.
Где используют. С помощью С создают драйвера, пишут ядра операционных систем, а также пишут библиотеки для Python и других языков.
Сколько платят программисту. В Москве разработчик на C получает в среднем от 100 тыс. до 250 тыс. руб. В других городах зарплаты меньше — от 50 тыс. до 200 тыс. руб.
Зачем изучать обычным людям. С — это не тот язык, на котором можно легко написать приложение для смартфона или программу для умного дома. Но с него можно начать изучение языков программирования. Учиться непросто, но если справитесь, поймете принцип действия почти всех остальных языков.
Стоит ли учиться программировать на Java
Java — кроссплатформенный язык с большим количеством библиотек и большим сообществом разработчиков. Кроссплатформенность — это возможность написать программу один раз и сразу пользоваться ей на нескольких операционных системах: Windows, Linux и MacOS. Благодаря библиотекам Java подойдет практически для всего: работы с графикой, звуком, создания небольших игр. А в большом сообществе начинающий разработчик легко найдет готовые куски кода для разных задач и ответы почти на любые вопросы.
Программисты пользуются библиотеками, чтобы создавать программы быстрее. Библиотека — это набор готовых программ, объектов и функций для решения типовых задач.
Где используют. Java — это язык для всего. На нем пишут мобильные приложения для Android, программы для микроволновых печей и серверы. Для разработки мобильных приложений сейчас все активнее используют язык Kotlin. Но на Java уже написали очень много приложений, которые придется обслуживать и обновлять.
Сколько платят программисту. Зарплаты Java-разработчиков не сильно отличаются от обычных зарплат программистов — от 100 тыс. до 250 тыс. руб. в Москве.
Стоит ли учиться программировать на Python
Python — логичный и относительно простой язык с минималистичным синтаксисом. У него небольшой набор основных правил, язык легко читать и писать на нем не сложно. Разработчики написали для Python множество библиотек, поэтому вы можете использовать готовые решения в своих проектах. Главный минус Python — его невысокая скорость. Программы на нем будут работать в среднем медленнее, чем на других языках.
Где используют. Чаще всего на Python создают серверы, обрабатывают данные и разрабатывают нейронные сети. После изучения Python можно работать бэкенд-разработчиком или разработчиком в сфере data science. С помощью Python можно «прикрутить» неочевидные функции к программам — это его главное удобство. Например, создать нейронную сеть для определения степени поражения легких, а заодно в этой же программе сделать просмотр снимков КТ.
Сколько платят программисту. Разработчик в крупной компании в Москве, знающий Python, зарабатывает от 100 тыс. до 250 тыс. руб. При этом спрос на разработчиков в сфере data science растет, поэтому можно рассчитывать даже на более высокую оплату.
Зачем изучать. С помощью Python можно создать бота для мессенджеров или социальных сетей. Или написать программу для парсинга — поиска и переноса информации с разных сайтов в один документ. Такая программа пригодится дизайнерам и журналистам.
Стоит ли учиться программировать на C++
С++ — кроссплатформенный язык семейства C с расширенными функциями.
Огромное количество программистов пишут на нем код, делятся библиотеками и шаблонами, отвечают на вопросы новичков.
Где используют. Чаще всего на С++ создают операционные системы, драйверы и утилиты. Делают популярные десктопные приложения серий Adobe и Office. Из-за высокой скорости и производительности C++ используют для разработки компьютерных игр. Например, на нем написан популярный движок Unreal Engine.
Сколько платят программисту. В регионах разработчик на C++ зарабатывает от 50 тыс. до 150 тыс. руб., в Москве — от 100 тыс. до 250 тыс. руб. Зарплата зависит не только от города, но и от сферы — в геймдеве можно заработать больше, чем в разработке системных приложений.
Зачем изучать. C++ плохо подходит для решения простых «домашних» задач, но с него можно начать обучение языкам, чтобы понять их структуру и принципы. Если решили изучать, запаситесь терпением — с С++ в полной мере работает принцип «тяжело в учении — легко в бою».
Стоит ли учиться программировать на C#
C# (си-шарп) — язык, изначально придуманный компанией Microsoft, чтобы создавать приложения под Windows. Это объектно-ориентированный язык — его сложнее изучать, но проще использовать, например, меньше писать одинаковый код. С помощью С# можно работать с платформой WPF, которая помогает создавать «красивые» оконные приложения. Например, последние версии MS Office.
Где используют. Чаще всего на C# пишут приложения для Windows и создают компьютерные игры. Например, на C# работает популярный движок Unity. Кроме того, на нем можно разрабатывать системные приложения и создавать библиотеки для С++.
Сколько платят программисту. В регионах разработчики на С# получают от 35 тыс. до 130 тыс. руб., в Москве — от 100 тыс. до 250 тыс. руб.
Зачем изучать. С помощью C# можно создать оконное приложение для Windows, например, калькулятор или небольшую игру. Но изучать его сложнее, чем языки для создания мобильных приложений.
Стоит ли учиться программировать на JavaScript
JavaScript — быстрый кроссплатформенный язык для веб-разработки. С помощью кода на JavaScript разработчик «говорит» странице, как она будет реагировать на действия пользователя. С помощью JS можно показывать пользователю информацию без перезагрузки страницы — так работают выпадающие меню, всплывающие окна, оконные клавиатуры.
При этом у JavaScript есть свои ограничения — он позволяет допускать ошибки, которые затем сложно обнаружить. Поэтому его редко используют для создания сложного программного обеспечения, например, ПО серверов.
Где используют. JS постоянно используют для веб-разработки. На нем удобно создавать мобильные и десктопные приложения, которые будут работать через браузер. Например, Notion, Discord, Visual Studio Code.
Сколько платят программисту. Разработчик на JavaScript в Москве зарабатывает от 140 тыс. до 300 тыс. руб.
Зачем изучать. С помощью JS можно создать простой сайт или модуль для него, работающий с запросами клиента. Например, онлайн-калькулятор.
Стоит ли учиться программировать на PHP
PHP — используют в веб-разработке для создания программ, которые работают на сервере и помогают обрабатывать запросы клиентов. PHP постепенно теряет популярность, потому что серверы можно создавать с помощью других языков. Но на PHP до сих пор работают многие ранее созданные сайты, например, «ВКонтакте».
Где используют. С помощью PHP создают программы, которые работают на сервере и помогают отправлять почту с сайта, взаимодействовать с базами данным. PHP облегчает работу интернет-магазинов — можно не создавать 1 тыс. одинаковых страниц, а генерировать их автоматически из базы данных по запросу клиента.
Сколько платят программисту. В регионах PHP-разработчик получает от 50 тыс. до 120 тыс. руб., в московских компаниях — от 80 тыс. до 220 тыс. руб.
Зачем изучать. Со знанием PHP легко начать карьеру разработчика. Такой разработчик сможет найти работу, даже если у него мало опыта.
Стоит ли учиться программировать на R
R — это язык для обработки данных, статистики и машинного обучения. R постоянно конкурирует с Python, его чаще используют в научных исследованиях.
R — бесплатный, у него большие возможности для обработки данных и необычный синтаксис, более понятный математикам, от этого популярный в академической среде.
Где используют. Чаще всего с помощью R обрабатывают данные в научных исследованиях. На нем создают нейронные сети.
Сколько платят программисту. Разработчики и дата-аналитики, использующие R, зарабатывают от 100 тыс. до 200 тыс. руб. Точная сумма зависит от типа компаний — иногда в научных проектах, получающих международные гранты, можно заработать больше.
Зачем изучать обычным людям. Не стоит.
Стоит ли учиться программировать на Arduino
Arduino — это упрощенный диалект C++, на котором пишут только программы для контроллеров Arduino. Но вот эти контроллеры используют почти везде — от устройств для автоматического полива до полноценных систем «умный дом» и разнообразных роботов.
Arduino существует только в связке с контроллерами, поэтому его не всегда считают полноценным языком. Чтобы на нем работать, нужно купить специальную плату, соединить с компьютером и с помощью специального ПО писать для контроллера программу. Зато можно написать программу, поставить контроллер в нужное устройство и сразу проверить, насколько хорошо она работает.
Где используют. Специалисты, знающие Arduino, могут работать инженерами-электронщиками и разработчиками ПО для микроконтроллеров. Иногда — в школах роботехники.
Сколько платят программисту. В Москве инженеры-электронщики зарабатывают от 50 тыс. до 120 тыс. руб., преподаватели — от 30 тыс. до 100 тыс. руб.
Зачем изучать. Arduino удобен именно для решения простых бытовых задач. Его легко использовать дома и на даче — создавать системы полива, вентиляторы, охранные системы, системы для аквариумов. С Arduino можно развивать логическое мышление детей — с ним легко понять принцип работы технических устройств.
Какие языки теряют актуальность
Сомнительная идея изучать Perl в 2021 году, — считает ИТ-предприниматель и идейный вдохновитель школы программирования для детей CODDY Оксана Селендеева. Perl — язык программирования для системного администрирования, веб-разработки, игр. У Perl-разработчиков довольно высокая зарплата — 150 тыс. ₽ в месяц, но начиная с 2017 года вакансий для таких разработчиков почти нет. Лучше обратить внимание на Python. На нем выполняют те же задачи, но язык в 2021 году намного более востребован в ИТ-сфере.
Теряют актуальность и другие языки: Fortran, Objective-C, Haskell, Visual Basic.
По версии Stack Overflow, самые «страшные» языки в 2020 году — VBA, Objective-C, Perl, Assembly, C. «Страшные» означают, что большинство разработчиков, которые сейчас пишут код на этих языках программирования, не планируют продолжать с ними работать.
Общие тренды ИТ-сферы вне зависимости от языков программирования
Код становится более читабельным. В последние годы разрабатывают все больше приложений, в том числе для мобильных устройств. Приложения становятся все сложнее по архитектуре, их нужно постоянно обновлять и обслуживать — важно, чтобы код можно было легко прочитать и понять. Приложение может жить десять лет. За это время сменится несколько разработчиков, которым нужно будет понимать код, написанный другими. Поэтому важно, чтобы программы не только решали свои задачи, но и были аккуратно, понятно написаны.
Растет популярность мобильной разработки и машинного обучения. Мобильная разработка стала привычным делом за несколько лет. Многие компании запускают только мобильные приложения, не думая об их браузерных и десктопных версиях. Из-за этого сильнее разрабатывают стандарты мобильной разработки. С одной стороны, это усложняет работу, с другой — сообществу выгодно обучить новичков этим стандартам.
Машинное обучение из диковинки становится неотъемлемой частью жизни — предсказывание и обработка данных слишком часто помогают в обычных ситуациях. Становится больше приложений по распознаванию лиц и обработке голосовых сообщений в текст.
Нужно писать код для всех платформ. Платформ становится все больше — в этом году Apple оснастила свои ноутбуки ARM-процессорами, которые раньше использовала только для смартфонов и планшетов. Поэтому разработчики должны учитывать все существующие технические возможности и писать приложения так, чтобы они работали везде.
Работодатели хотят посмотреть портфолио на GitHub. Если раньше при найме сотрудника работодатели смотрели приложения, к которым программист приложил руку, то теперь даже непрофессионалы все чаще хотят увидеть код. На Гитхабе можно посмотреть все проекты разработчика, увидеть, как он думает и пишет, как развивался и рос.
Программирование молодеет. Дети и подростки изучают программирование на онлайн-курсах или самостоятельно. Из-за этого уже в 13–15 лет они могут писать приложения, выкладывать их в Appstore или GooglePlay и даже зарабатывать деньги. Некоторые из них так начинают карьеру разработчика и конкурируют с выпускниками вузов и более старшими коллегами.
Еще пять статей о программировании
В Telegram-канале «Списать не получится» мы еще больше рассказываем о трендах в образовании и о том, как учиться в течение всей жизни и делать это с удовольствием. Подписывайтесь!