История вопроса: Как появились языки программирования?

Когда были написаны первые «программы», компьютеров еще не было. Когда появились компьютеры — не было языков программирования, а были только машинные коды из нулей и единиц. Потом появился ассемблер и в доме Облонских все стало немного сложнее, чем было. А что происходит сейчас? Сколько существует языков в мире? И сколько их нужно знать, чтобы считаться порядочным программистом? Разобрались в эволюции способов общения с компьютерами вместе с разработчиком ПО и автором телеграм-канала «Программирование для гуманитариев»:

Нулевой уровень

За два с половиной века до появления компьютеров лионский ткач Жозеф Мари Жаккард во-первых, придумал механический ткацкий станок, а во-вторых, нашел способ запрограммировать выработку тканей со сложным узором. Жаккардова машина работала на перфокартах – прямоугольных кусках картона с отверстиями. Это первый пример программирования двоичным кодом: отверстие либо есть, либо нет. Перфокарты первых компьютеров отличались от жаккардовых размером и формой, но работали по тому же принципу. Жаккардова машина с перфокартами выглядела так.

На перфокартах должна была работать и аналитическая машина английского математика Чарльза Бэббиджа. С ее помощью он надеялся точно вычислять логарифмы, проверять данные астрономических наблюдений и проводить сложные вычисления. Уровень развития техники в середине XIX века создать такую машину не позволил, но рассказывал о своих идеях Бэббидж много. Среди тех, кто его слушал, была Ада Лавлейс. Она заинтересовалась идеей, составила инструкцию по программированию несуществующей машины и даже написала первую в мире программу — для вычисления чисел Бернулли. Числа Бернулли вычисляются вот по такой формуле.

Низкий уровень: объяснись с машиной

Компьютеры как начали работать на двоичных кодах, так и продолжают до сих пор. Даже новейшие микропроцессоры воспринимают команды из единиц и нулей, но человеку оперировать ими неудобно: чтобы ввести простейшую команду, нужно набрать последовательность из цифр, не ошибившись ни в одной позиции. Машине с кодами работать легко, человеку – трудно.

В 1950 году программы стали записывать в более удобной форме, обозначая команды и объекты не нулями и единицами, а буквами или сокращенными словами. Запоминать их было гораздо проще, чем ряды чисел. Так появился Assembler (ассемблер).

Примеры команд языка ассемблера:

MOV (move) – переместить операнд (то, над чем производится операция; это может быть число, переменная или выражение);

CMP (CoMPare) – сравнить операнды;

ADD (add) – сложить;

SUB (substract) – вычесть;

XCNG (exchange) – поменять значения.

Важные моменты:

  • ассемблер – это не один язык, а группа языков низкого уровня абстракции;
  • все языки ассемблера работают напрямую с процессором и памятью;
  • программы ассемблера часто пишутся для конкретного процессора (например, могут создаваться специальные команды);
  • ассемблер называют языком низкого уровня, потому что он близок к машинному коду;
  • на ассемблере пишут и сейчас, когда имеется небольшой объем памяти или требуется высокая скорость выполнения команд.

Высокий уровень: удобные и независимые

Следом за ассемблером в 1950-е стали появляться языки высокого уровня — американский Фортран (Fortran – FORmula TRANslator), и его европейский конкурент Алгол (Algol – ALGOrithmic Language) для вычислений, Лисп (Lisp — LISt Processing) для обработки списков, Кобол (Сobol — COmmon Business Oriented Language) для бизнес-приложений (например, по обеспечению транзакций). С процессором все эти языки общаются через трансляционные программы, которые переводят почти человеческие команды в понятный машине код. 

Общей особенностью языков высокого уровня является то, что написанные на них программы — большие и требуют большего объема памяти. Поэтому такие языки гораздо требовательнее к мощностям и памяти, чем ассемблер.

Чем хороши языки высокого уровня:

  • Можно писать для любого процессора («взаимопонимание» обеспечит трансляционная программа);
  • Программистам проще писать и понимать программы, написанные на этих языках;
  • Можно выбрать удобный язык для решения конкретных задач.



Дальше — больше

Языков высокого уровня появлялось много (и они продолжают появляться по сей день). Некоторые из языков, придуманных еще на ранних этапах развития информатики, продолжают использоваться: например, Паскаль (Paskal), разработанный в 70-х, используется в качестве учебного пособия для студентов и основы для других языков. 

Есть языки-однодневки, которые создаются просто в порядке эксперимента. Есть те, которые у всех на слуху (например, Java, Java Script, Python, C и C++), а есть те, что известны только в одной сфере – например, Эрланг (Erlang) в области телекоммуникаций. Языки могут создаваться для целей конкретной компании или потому, что хочется большего удобства, надежности или быстродействия. 

Однозначного ответа на вопрос «Сколько существует языков программирования?» — нет. Разные источники дают разные цифры: от 700 до 9 000, используя разные параметры: применимость, известность, цель (некоторые языки создаются исключительно из развлекательных целей и не особо функциональны). Компания TIOBE ежемесячно выделяет 50 наиболее популярных, исходя из количества известных программистов-носителей и курсов, предлагающих изучение.

ТОП-10 языков по востребованности (TIOBE)

Сколько языков нужно знать хорошему программисту?

Если речь идёт о по-настоящему глубоких знаниях языка, то для этого требуется многолетний опыт работы с ним, и по факту обычно у программиста такой опыт есть с 1-3 языками максимум теми, что являются для него основными. Эпизодически мы используем в работе и языки, которые знаем хуже, и которые не являются для нас основными. Если учитывать их тоже, то программист может «знать» и 10 языков.

Что же касается поверхностного знакомства с языком: понимания его синтаксиса, умения прочитать код на этом языке, и умения написать небольшую программу то на таком уровне можно и нужно владеть, скажем, 4-6 языками. Неплохо, если среди них есть:

  1. Язык со строгой типизацией (например, Java, С, С++, C# и другие),
  2. Язык, ориентированный на ООП — объектно-ориентированное программирование — (Java, C++, C# и др), 
  3. Язык с классическим си-подобным синтаксисом (опять-таки C, C++, Java, C#), 
  4. Скриптовый язык (например, Python), 
  5. Язык командной строки (bash). 

Еще хорошо бы немного познакомиться с функциональным программированием, просто чтобы понимать общую парадигму (языки семейства Lisp, Haskell и другие). 

Всем или почти всем нужно знать язык для работы с базами данных — SQL. Это то, что касается знаний «для общего развития». Помимо этого языки выбирают, исходя из того, что именно предстоит разрабатывать. Скажем, для разработки под iOS нужен swift, под андроидJava, под OS Windows или для игровой платформы Unity C#, для фронтовой части веб-сайтовJavascript, для data science — Python или R.

Текст: Анна Герус.
Иллюстрации: Дарья Глобина.

Поделиться:
Опубликовано в рубрике UncategorizedTagged , , , , , ,

SkillFactory.Рассылка