ПОЧЕМУ ПРОГРАММА УПРАВЛЕНИЯ СПЕЙС ШАТТЛОМ ВЕСИЛА ВСЕГО 1 МЕГАБАЙТ, А ПРИЛОЖЕНИЕ ИНСТАГРАМ В ВАШЕМ ТЕЛЕФОНЕ — 200?

Oleg Kyrmyzy
pochemuzachemkak
Published in
4 min readDec 5, 2020

Спейс Шаттл (Space Shuttle) или космический челнок — программа многоразовых транспортных космических кораблей, доставляющих грузы на орбиту Земли. Программа была разработана в США и функционировала с 1981 по 2011 год. После доставки груза корабли возвращались на Землю и затем использовались повторно. К числу их грузов относится, например, знаменитый телескоп Хаббл. Хотя на корабле всегда был экипаж, все его системы могли функционировать автономно. При всей сложности программы автопилота весила она меньше 1 мегабайта. И это удивительные цифры, ведь большинство сегодняшних программ и приложений, таких как, например, инстраграм, весят в сотни и даже тысячи раз больше!

В чём подвох? Одна из причин кроется в языках программирования, которые применялись при написании программ. Язык программирования — это своего рода интерфейс, необходимый для общения человека с компьютером. Компьютер понимает только один язык — язык нулей и единиц, все команды и инструкции в виде их уникальной последовательности хранятся в памяти процессора (в этом тексте мы уже писали как работает процессор). Программа, состоящая из таких последовательностей, называется машинным кодом. Его очевидный недостаток — запоминать команды из последовательностей единиц и нулей крайне неудобно. Для упрощения работы с машинным кодом был разработан язык ассемблера. В нём бинарным последовательностям команд соответствуют команды в виде директив на английском языке. Программа на языке ассемблера сначала транслируется в машинный код и лишь затем выполняется процессором.

Язык ассемблера — базовый язык для любого из языков программирования (а их больше тысячи). По нему все существующие языки программированиям делятся на низкоуровневые и высокоуровневые языки. Низкоуровневыми считаются машинный код и язык ассемблера, высокоуровневыми — все остальные языки. Правда это деление условное. На практике большинство новых языков программирования основываются на уже зарекомендовавших себя старых языках. К примеру, язык Python был написан на языке C (си), который в свою очередь основан на более ранней версии языка B (би). Такие цепочки зависимостей делают проще создание нового языка, но требуют большего объёма памяти, так как включают в себя функционал языков-родителей. Поэтому приложение инстаграм, написанное на Python (его серверная часть), занимает больше места, чем программа управления Спейс Шаттлом, написанная на языке ассемблера.

ЗАЧЕМ ТАК МНОГО ЯЗЫКОВ ПРОГРАММИРОВАНИЯ?

Наверняка этот вопрос интересует многих, кто собирался или собирается попробовать свои силы в программировании. В компьютерных науках часто используются понятие абстракции: не нужно понимать, как работают транзисторы в процессоре, чтобы написать код на языке ассемблера. В то же время не обязательно знать, как написать код на языке ассемблера, чтобы написать программу на C. Такую градацию можно разделить на уровни абстракции. Чем выше уровень, тем проще писать код. Идеальным, то есть обладающим самым высоким уровнем абстракции, был бы код, практически не отличимый от человеческой речи.

Программа для вывода “hello world” на низкоуровневом языке ассемблера (1-ая картинка) и на высокоуровневом языке Python (2-ая картинка). Просто оцените размер кода в первом и во втором случае. Источник

С другой стороны, практически каждый новый язык является коммерческим проектом. Компаниям необходимо сокращать время работы программистов, чтобы ускорить выход их продукта на рынок. К примеру, в 2009 году Google представил свой язык Go, а в 2015 Apple запустил Swift. При этом увеличение размера программ и снижение эффективности кода не являются большой проблемой, поскольку покрываются ростом производительности процессоров и доступностью больших объёмов памяти. Иногда этот процесс называют компромиссом абстракции (abstraction penalty), то есть упрощением языка взамен на рост издержек его обслуживания.

Источник

КАК ИСПОЛЬЗУЮТСЯ РАЗНЫЕ ЯЗЫКИ ПРОГРАММИРОВАНИЯ?

Существование большого количества языков в том числе оправдывается спецификой их применения. Не существует одного языка, который одинаково хорошо подходил бы для решения всех задач. Поэтому за вопросом “Зачем так много языков?” как правило следует вопрос “А как каждый из них используется?”. В этой части будут кратко описаны самые популярные языки программирования и где они применяются.

С/С++: С — один из самых старых языков, однако на нём написано большинство операционных систем (Windows, Linux и MacOS), он же используется для их обновления. С++ — улучшенная версия языка С, применяется для создания настольных приложений, разработки игр или написания программ для электроники.

Java: Обычно занимает первую строчку среди самых популярных языков. Компромисс между С++ и Python. Основное преимущество — эффективность кода при работе с любыми операционными системами. Java можно использовать практически для любых задач, но чаще всего язык применяют крупные компании для обработки данных.

Python/Ruby/MATLAB: Одни из самых простых и понятных языков. С помощью Python, например, можно как писать телеграмм-ботов, так и проектировать нейросети. Однако программы на этих языках значительно медленнее, чем программы на С++ или Java, поэтому используются не во всех коммерческих проектах.

Fortran: Язык математических функций, один из самых первых языков, но используется до сих пор. Применяется в инженерных программах — например, расчёт напряжения в опорах и несущих конструкциях зданий.

Swift/Kotlin: Языки разработки мобильных приложений. Swift для разработки под iOS, а Kotlin — для Android. Кстати, Kotlin был написан командой разработчиков из Санкт-Петербурга.

Php: Язык разработки web-страниц. На php, например, изначально писались Facebook и Вконтакте.

JavaScript: Самый большой друг web-дизайнеров. JavaScript определяет то, как на наши действия реагируют страницы в браузерах.

Ещё больше любопытного в Телеграм-канале:

https://t.me/pochemuzachemkak

--

--

Oleg Kyrmyzy
pochemuzachemkak

Computer vision and electronics engineer | Pochemuzachemkak telegram-channel