Почему один из самых популярных языков программирования называют мертвым и кому он нужен?
Category: О проекте
Дмитрий Герасимов, основатель, генеральный директор компании Demlabs
Блокчейн-платформа CellFrame Network написана на низкоуровневом языке С. Почему мы выбрали именно его для создания наших максимально быстрых, надежных и безопасных сервисов?
В этой статье речь пойдет о языке С, а также о том, почему он до сих пор актуален и зачем его осваивать тем, кто занимается разработкой на других языках. Также немного затронем язык ассемблер. Разговаривать о них мы будем в разрезе системного программирования. Но также поговорим и об их прикладном значении.
Какие и кому нужны программисты
Ответ на вопрос «Кому и какие программисты нужны?» зависит от языка программирования, который необходим тому или иному заказчику. Давайте посмотрим, кому нужны программисты на С:
- Малый и средний бизнес
Чаще всего этот сегмент имеет потребность в сайтах или несложных сервисах. Но язык С актуален и для него. Здесь он может понадобиться для запуска процесса чипизации ПО: переноса тех или иных команд с универсального компьютера на связанные с ним гаджеты.
*Пример использования С в процессе чипизации ПО: устройство, включающее лампочку на камере одновременно с моментом начала съемки, чтобы человеку было ясно, что запись началась.
- Корпорации
Основной заказчик на рынке услуг по использованию языка С: с его помощью можно решить множество любые запросы, идущие от корпораций.
- Государство
Заказчик, схожий по запросам с корпорациями и активно использующий возможно языка С для своих нужд.
- Наука
Чаще всего в сфере науки язык программирования имеет прикладное значение. С здесь тоже используется, но реже, чем, например, Python.
Два периода, когда язык С считался мертвым
1 период. 2000 - 2005 гг.
В тот момент взлет переживал язык Java. Появилось ощущение, что низкоуровневые языки — близкие к машинным кодам и имеющие мало абстракций — теряют свою актуальность.
Тогда заказы на написание решений на языке С приходили практически только от корпораций. В России того времени — Хабра еще не было — комьюнити разработчиков на С общались на русскоязычном сайте IBM.
В тот момент что-либо узнать об этом языке или получить указания по написанию кода на С можно было по сути из двух источников:
- на сайте Opennet (до сих пор еще жив!)
- на русскоязычном сайте IBM
2 период. 2016 год - по настоящее время.
Сейчас взлет переживает язык Rust. Это своего рода конкурент языка С. В рамках этой конкуренции язык С переживает большое давление (эта конкуренция похожа на ту, которая была между C++ и Java в начале нулевых). Сейчас все, что раньше предполагалось писать на языке С, все чаще пишут на языке Rust. Но и здесь возможен некий откат.
Сегодня программирование популярно, люди массово идут на курсы программирования на разных языках. А вот в 80-90-е ситуация была совсем иная: в программисты шли энтузиасты, которые изучали не только программирование, но и массу всего смежного. К тому же, это всегда были люди с высшим образованием: те, кто закончил университет по специальности «программирование» (или, по крайней мере, «математика»).
На настоящий момент общество — как зарубежное, так и русскоязычное — воспринимает язык С, как язык предыдущего поколения. Программирование на этом языке представляется чем-то олдскульным.
Особенности российского программирования (и программистов!)
- Традиция олимпиад
- ВПК (интересные задачи для программистов, которые пишут на С: например, в области ракетостроения, создания дронов и т.п.
- Плохое знание английского и, как следствие, создание собственных оригинальных решений, не похожих на общепринятые.
- Плохие навыки коммуникаций. Это часто заставляет многих отечественных программистов идти в горизонтальный карьерный рост — от джуниора до архитектора и…все.
- habr.com, как площадка для обмена опытом.
- Традиция «изобретать велосипед»: склонность «перепридумывать» уже существующие решения.
Сегодня общие решения нередко становятся не слишком надежными: возникает так называемая проблема «supply channel attack» (внедрение каких-либо негативных элементов в общедоступную библиотеку данных)
В сфере криптовалют это особенно опасно (язык Rust), ведь при закладке вредоносного элемента в код криптовалют можно украсть сотни миллионов и даже миллиардов долларов. Совсем недавно подобное произошло с криптовалютой Solana).
История С/С++
Почему эти два языка идут вместе и считаются основой для программирования?
Ведь последние десять лет эти языки не популярны, и код на них пишут редко.
Но все-таки это основа. Почему?
Изначально был ассемблер — машинно-ориентированный язык программирования низкого уровня. Этому языку уже за 70, он основан на работе с машинным языком, языком «процессора». Каждая его команда — это команда процессора, а не операционной или файловой системы. Но он оказался неудобным: уже в 50-60 годах было очевидно, что работать с ним непросто.
Следующим этапом стало появление языка С — компилируемого, статически-типируемого языка программирования общего назначения (разрабатывался Ритчи и Керниганом в 69-73 гг.). Название свое язык получил потому, что стал следующим шагом в разработке после языка B. Впрочем, есть и другая трактовка этого названия: С — кроссплатформенный (cross-platform) ассемблер.
Язык С был призван совместить несовместимое — мир человеческих абстракций и машинных кодов. Он стал прародителем почти всех существующих языков (наравне с языком Simula и Lisp).
С++ стал прямым объектно-ориентированным продолжением языка С. Это первый действительно универсальный язык программирования (особенно в промышленности).
Дополнительно С породил Objective-C и Objective-C++ (языки экосистемы Apple) и — уже позднее — Rust, Go, Java, С# и многие другие.
С и С++ для языков программирования — это как латынь для латинских языков. Они в основе всего. Знаем их — знаем все.
Области применения С и ассемблера
Программисту на С необязательно, но рекомендуется знать ассемблер. Это расширяет его возможности и глубину понимания того, какую важность имеет время выполнения задач. Зачастую, время исполнения даже важнее, чем производительность.
Во многом именно поэтому техника Apple имеет преимущество перед Android — ее разработчики думали об оптимизации на низком уровне, о времени исполнения. Вследствие этого телефоны Apple дольше живут на одной батарее и демонстрируют более быстрый отклик интерфейса.
- High Load (Высоконагруженные системы)
- облачные вычисления
- научные вычисления (телескопы, дроны и т.п.)
- мультимедиа
- Встраиваемые системы (например, чипизация ПО)
Наиболее распространенная область применения языка С — программирование, прошивка «железа».
- в полноценных мини-компьютерах (например, Raspberry Pi)
- в системах без ОС (8- и 16-ти битные чипы Attiny)
- системы, в которых есть только ядро
- Криптография
- Системные службы (все, что «под капотом» у операционной системы)
- Вредоносное ПО
- ПО энтузиастов
- Написание графических приложений (например, wireshark — приложение для анализа сетевого трафика)
- Написание игровых движков (например, в Quake Arena 3)
- Blockchain
Уровни программирования
Пространство пользователя:
- системное программирование (самая очевидная среда использования языка С) : системные библиотеки и сервисы ОС
- прикладное программирование: frontend, middleware, backend
Пространство ядра (напрямую работаем с процессором и элементами железа):
- системное программирование: драйверы и службы ядра
- прикладное программирование: простейшие встраиваемые системы
Псевдо ООП (объектно-ориентированное программирование)
Как устроен исходник на С? Никаких объектов в коде нет, но программист читает код — у него в голове появляется ООП. Эта техника называется псевдо ООП и относится к zero cost abstraction («абстракции с нулевой стоимостью»).
Конкуренты С
- Rust (самый молодой, быстрый и производительный, активно используется в криптоиндустрии)
- C++ (может делать некоторые вещи быстрее, чем C)
- GO (golang) (нет небезопасного режима (арифметики указателей), есть псевдо функции (goroutines) без собственного стека, которые в некоторых типовых задачах предполагают скорость работы даже более высокую, чем у C++)
Почему сейчас стоит писать на С
- Производительность (высокая скорость): Rust медленнее в 2-3 раза, C++ — в 5 раз, Java — в 20 раз, Python — в 200 раз
- Максимальная портируемость (заведется даже на холодильнике!)
- Много готовых разнообразных библиотек
- Меньше конкурентов
- Можно сделать любой сервис
- Это круто!
Будущее C
- AI-отладка: статистический анализ кода для отладки языка C, который может повлечь за собой отмирание многих высокоуровневых языков в будущем)
- CoPilot: искусственный псевдоинтеллект от компании Microsoft, который подсказывает код
- Чипизация ПО (программирование гаджетов)
- Стандартные компоненты
- Новые ОС
- Новые языки
Последние записи
-
Как использовать оборудование для майнинга ETH? Представляем сервис видеосвязи Cellf
13 Окт 2022
-
AMA-сессия с Дмитрием Герасимовым, 29 сентября 2022
12 Окт 2022
-
Как запустить ноду, участвовать в тестнете и зарабатывать: ключевые моменты
19 Сен 2022
-
AMA-сессия с Дмитрием Герасимовым, 11 августа 2022
26 Авг 2022