Следует понимать, что в сложившейся в наши дни программной индустрии
различные языки программирования заняли разные ниши. Некоторые из них
достигли успеха именно благодаря специализации, яркие примеры: JavaScript и PHP. Другие, как Python и Java — существенно более универсальны и получили признание и распространение за счёт возможности сходными средствами решать разные задачи. Но ни один современный язык, в том числе широко рекламируемые C# и C++, не может эффективно использоваться для решения любых задач.
В настоящее время программирование применяется в самых различных об-
ластях человеческой деятельности, таких как:
1. Системное программирование…
Скачать исходники для статьи можно ниже
1. Системное программирование
Написание операционных систем, компиляторов, интерпретаторов, вирту-
альных машин. В этой области требования к быстродействию и потребле-
нию памяти очень велики, а создание переносимых программ затруднено
необходимостью тесно и напрямую взаимодействовать с конкретным обо-
рудованием («железом»). Основные языки программирования в этой об-
ласти: ассемблер, а также компилируемые языки, компиляторы которых
написаны на них самих методом постепенной самораскрутки (всегда име-
ют платформозависимое ассемблерное ядро): C, C++, Objective C, Pascal,
Ada.
2. Программирование встраиваемых устройств
Создание операционных систем и прикладных программ для разных «ма-
лых» вычислительных машин: станков с программным управлением, се-
тевых маршрутизаторов, модемов, автомобильной и авиационной электро-
ники. По сути, эта область примыкает к системному программированию
и потому здесь используются примерно те же средства: ассемблер, Forth,
некоторые компилируемые языки.
3. Программирование видеокарт
Видеоускорители имеют весьма специфические аппаратные особенности:
они не могут работать напрямую с устройствами ввода/вывода, не могут
сами динамически выделять память, часто способны работать эффективно
только с действительными числами одинарной точности (4 байта), эффек-
тивно могут выполнять одинаковые инструкции над разными данными, но
очень теряют в производительности при необходимости глобальной про-
верки условий и частой синхронизации потоков. Поэтому для них созданы
специализированные языки: OpenCL и CUDA.
4. Программирование высоко нагруженных серверов
Задача состоит в управлении большим числом (часто 10 тысяч и более в се-
кунду) запросов, поступающих как локально с этого же компьютера, так и,
главным образом, по сети. По запросам необходимо производить некоторые
вычисления и/или поиск в базах данных. На первом месте в таких задачах
стоит надёжность: сбой работы над одним из запросов не должен приво-
дить к краху исполнения всех остальных или полной остановке сервера. На
втором месте — производительность, в том числе способность, не снижая
существенно производительности на 1 поток, обрабатывать одновременно
много потоков с использованием нескольких вычислительных ядер или да-
же нескольких физически разнесённых ЭВМ (это свойство называется мас-
штабируемостью). Основные языки здесь: Java, C#, Erlang, то есть язы-
ки, использующие виртуальные машины и имеющие достаточно высокие
возможности абстрагирования (ООП), что позволяет локализовать многие
ошибки времени исполнения. Реже используется C++, поскольку, несмот-
ря на высокую производительность и широкие возможности, программы на
C++ часто приводят к некорректной работе с памятью. В последнее время
популярны Scala и Go в качестве замены Java, поскольку Scala позволяет
писать более лаконичный и сложный код частично в функциональном сти-
ле, а Go прост, поддерживает очень эффективную модель многопоточных
вычислений и эффективно компилируется в машинный код.
5. Программы для работы с базами данных
Эта область частично пересекается с предыдущей, но затрагивает также
клиентские программы, где требования к скорости и надёжности работы
не такие жёсткие. Программы в этой области, как правило, сочетают в себе
две части. На одном языке написана высокоуровневая обёртка, с которою
взаимодействует пользователь. Для её написания часто используются 1С,
C#, Delphi, а также многие интерпретируемые языки, в первую очередь
Python и Ruby. Вторая часть отвечает за непосредственное взаимодействие
с базою данных и написана на одном из диалектов языка запросов SQL.
6. Системное администрирование
Задача системного администратора — автоматизация основных работ по
обслуживанию серверов. Это резервное копирование данных, установка об-
новлений, а также новых программ и библиотек, восстановление после сбоя,
синхронизация разных серверов в кластере, запуск различных задач раз-
ных пользователей и их распределение по отдельным процессорным ядрам.
Персональному компьютеру системный администратор почти не нужен, все
основные действия по поддержанию компьютера в работоспособном состоя-
нии производит сам пользователь. Долгое время основным языком систем-
ных администраторов был shell script, но в настоящее время языки общего
применения, в первую очередь Python, также стали активно применяться,
поскольку позволяют, владея на высоком уровне одним языком, совмещать
работу системного администратора с работою, например, веб-программиста
или программиста баз данных.
7. Написание графических интерфейсов пользователя
В этой области очень большое распространение получила парадигма ООП
и парадигма визуального программирования. Пишут на многих языках,
как компилируемых: C++, Object Pascal, Vala, так и интерпретируемых:
Python, Tcl, Ruby. Java и C# также иногда используются в данной области.
8. Веб-программирование
Написание программ, работающих в браузере, начиная от простых сайтов и
заканчивая сложными компьютерными играми, имеет определённую специ-
фику. В настоящее время здесь используются все основные скриптовые язы-
ки: PHP, Python, Ruby (на платформе Rails). Наибольшую популярность
имеет JavaScript, поскольку его виртуальная машина хорошо оптимизиро-
вана по производительности и потреблению памяти во всех популярных
браузерах.
9. Компьютерные игры
Уже долгое время индустрия компьютерных игр является локомотивом
развития как аппаратных средств: центральных процессоров и особенно
видеокарт, так и концепций и языков программирования. Первоначально
игры писались на системных языках и мало отличались от прочих про-
грамм, но впоследствии именно в игростроении наибольшее распростране-
ние получила концепция объектно-ориентированного программирования.
В настоящее время только самые критичные для производительности ча-
сти пишутся на высокопроизводительных языках вроде C++, большая же
часть программной логики и управляющих скриптов, графический интер-
фейс пользователя, и даже многие базовые части пишут на интерпрети-
руемых языках, самым популярным из которых здесь является Python.
Основная причина этого — необходимость соблюдать сроки: времени на
разработку игр нужно много, но самая лучшая и надёжная игра потерпит
фиаско на рынке, если опоздает даже на 2–3 года.
10. Научное программирование
Учёные долгое время были одними из основных потребителей ЭВМ. Для
них был создан первый компилируемый язык — Fortran, который и в на-
стоящее время используется в случае, когда производительность программ
имеет ключевое значение. Однако возможности современных компьютеров
оказались столь велики, что избыточны для решения большинства задач
с точки зрения производительности и объёма памяти. В результате наи-
большее признание в последние 20 лет получили языки интерпретируемого
типа, глубоко интегрированные со средствами разработки, библиотеками
алгоритмов и средствами построения графиков. Такие интегрированные
системы условно называют «пакетами». Наиболее известными примерами
таких систем являются коммерческие MATLAB, Mathematica, Stasistica, а
также бесплатные/свободные R, SciLab, GNU Octave. Единственный язык
общего назначения, в настоящее время не только сохранивший свою привлекательность, но и успешно теснящий математические пакеты, в том числе
и коммерческие, — это Python. Произошло это благодаря простоте и по-
нятности языка с одной стороны, и наличию очень хороших и высокопро-
изводительных библиотек алгоритмов и средств для построения графиков.
Есть и проекты создания специализированного научного языка, самым по-
пулярным и развитым из которых является Julia.