Краткая и на 146% точная история языков программирования
Содержание:
- Введение в программирование на основе JavaScript
- Видеокурсы
- Абстрактный семантический граф
- Языки программирования
- Поставил и забыл: просто системник
- Лексический анализатор / лексер
- Оплата труда
- Важные качества
- Знания и навыки
- Средний компьютер для кодинга в 2020 году
- Самые простые языки для новичка
- Профилировщик кода (профайлер, профилер)
- Побочные эффекты программирования
- Экзотика и минимализм: Raspberry Pi
- Примечания
- Языки программирования
- Принцип «собаки, кошки и рыбы»
- Алгоритмы
- C++
- Языки программирования
Введение в программирование на основе JavaScript
С этого момента будет использоваться язык программирования JavaScript для приведения конкретных примеров.
Образцы кода будут напечатаны специальным непропорциональным шрифтом и выделены в рамки. Непропорциональный шрифт уравнивает кегельные площадки для каждой буквы. Так задумано, чтобы облегчить разработчикам поиск опечаток в командах. В качестве примера давайте рассмотрим следующие изображения:
Пропорциональный текст
Непропорциональный текст
В предложениях присутствуют следующие ошибки: лишний пробел после слова for, лишний апостроф после слова Alice, а также пропущенная буква в слове without
Возможно, вы все ошибки заметили сразу, но обратите внимание, что их проще заметить на второй картинке, где расположен непропорциональный текст
Работа с данными в коде
Давайте перейдём к практической части и попробуем написать какой-нибудь код. Основным элементом в компьютерной программе является переменная, которая в свою очередь определяет имя для какой-нибудь информации, будь то число или текст. Всегда нужно давать названия данным.
Существует две основные причины, по которым следует именовать данные:
- Вам зачастую не известно, что будет скрываться под переменной. Например, Facebook не знает, когда у вас день рождения, поэтому он использует переменную с общим названием для обозначения даты или обозначения её отсутствия. (Переменные не могут содержать пробелы, поэтому следует разграничивать слова другими символами.) Переменная присваивается любой дате, которую вы введёте, и дальше программа продолжает использовать ваши данные, скрывая их за переменной.
- Вам может быть сложно вспомнить, что значит та или иная переменная. Например, нужно указать компьютеру, что 86-е декабря не является реальной датой. Следовательно, мы где-нибудь должны указать, что в декабре 31 день. Но 31 — это число (данные), поэтому если вы будете использовать 31 во всём своём коде, чтобы таким образом обозначить количество дней в этом месяце, то однажды запутаетесь. Ведь у нас существуют прочие месяцы. Таким образом, можно присвоить числу 31 имя . Теперь вы точно не запутаетесь. Отлично, идём дальше!
Примечание в названиях переменных нельзя использовать апострофы.
Чтобы переменная существовала, её нужно объявить. Объявление переменных служит в роли свидетельства о «рождении» для данных. Давайте посмотрим на пример:
Ключевое слово означает переменную (сокращение от variable). Использование сокращений ускоряет работу с кодом.
Также переменной нужно присвоить значение:
Всё очень просто. Объявляете переменную, присваиваете ей значение и используете везде в коде, например, вместо числа 31.
Следует помнить, что вы также можете объявлять переменные для данных, которые ещё не существуют. Давайте вернёмся к примерам. Вы можете объявить и сообщить приложению, чтобы оно ожидало ввода значения. Всё, что будет введено пользователем для этой переменной, будет использоваться в тексте под именем .
Переменные могут содержать не только даты и числа. Например, вы можете объявить целую строку или фрагмент текста:
Теперь можно где угодно в коде написать и компьютер поймёт, что речь идёт о .
Как насчёт проверки этих утверждений? Давайте протестируем всё, что было сказано выше. Откройте консоль в Google Chrome нажатием клавиши F12 (для владельцев Mac рекомендуется ознакомиться с этой статьёй). Перед вами появится следующее окно:
Убедитесь, что выбрана вкладка «Console», кликните на пустом поле рядом со знаком «больше» (), объявите переменную и присвойте ей значение, а затем нажмите клавишу ввода.
В консоли отображается сообщение из-за того, что строка кода не вывела какие-либо данные, чего, собственно, делать и не должна. Теперь введите название своей переменной в строку и нажмите кнопку ввода.
Примите поздравления! Консоль (которая также служит в роли интерпретатора) понимает вашу переменную. Её значение было выведено в виде текста, который вы ей присвоили. Кстати, вы могли заметить, что были использованы одинарные кавычки, но вы также можете использовать двойные. Только не смешивайте их (т. е. не следует делать ‘так”).
Многие языки программирования требовательны к конкретной информации о том, какую именно переменную вы объявляете. Например, в C++ ключевое слово отсутствует. В C++ слово используется для объявления небольших целых чисел; используется для объявления больших целых чисел; и используются для объявления десятичных чисел, а используется для объявления текста. Но пока что вам не стоит в это вникать, вы сможете подробнее ознакомиться с C++ позже.
Видеокурсы
Harvard CS50 (с переводом на русский). Курс лекций по основам программирования для начинающих. Если вы хотите разобраться в этом вообще с нуля, посмотрите эти видео. Ребята понятно и доходчиво разбирают все популярные темы и подают это в доступной форме. Правда, лекции с четвёртой начинаются уже довольно сложные вопросы, поэтому вечером под ужин посмотреть не получится.
Курс по JavaScript и Node.js преподавателя Киевского политехнического института Тимура Шемсединова (на русском). В плейлисте на момент написания статьи — 87 лекций, от самых базовых понятий до композиции функций и рефакторинга. Единственный момент — первые четыре лекции могут показаться нудноватыми, но с пятой всё гораздо активнее.
Курсы freeCodeCamp (на английском). Если хотите прокачаться одновременно в английском и программировании, обратите внимание на этот канал. Есть почти все популярные языки программирования, длительность каждого урока — от 3 до 14 часов.
Абстрактный семантический граф
Переход от синтаксического дерева к семантическому графу
В этой части я реализовал структуру, по своей сути наиболее близкую к «промежуточному представлению» (intermediate representation) в LLVM. Существует небольшая, но важная разница между абстрактным синтаксическим деревом (АСД) и абстрактным семантическим графом (АСГ).
АСГ vs АСД
Грубо говоря, семантический граф — это синтаксическое дерево с контекстом. То есть, он содержит информацию наподобие какой тип возвращает функция или в каких местах используется одна и та же переменная. Из-за того, что графу нужно распознать и запомнить весь этот контекст, коду, который его генерирует, необходима поддержка в виде множества различных поясняющих таблиц.
Запуск
После того, как граф составлен, запуск программы становится довольно простой задачей. Каждый узел содержит реализацию функции, которая получает некоторые данные на вход, делает то, что запрограммировано (включая возможный вызов вспомогательных функций), и возвращает результат. Это — интерпретатор в действии.
Языки программирования
Разные языки программирования поддерживают разные стили программирования (называемые парадигмами программирования ). Выбор используемого языка зависит от многих факторов, таких как политика компании, соответствие задаче, доступность сторонних пакетов или индивидуальные предпочтения. В идеале будет выбран язык программирования, наиболее подходящий для поставленной задачи. Компромиссы от этого идеала включают поиск достаточного количества программистов, знающих язык для создания команды, наличие компиляторов для этого языка и эффективность выполнения программ, написанных на данном языке. Языки образуют приблизительный спектр от «низкого уровня» до «высокого уровня»; «низкоуровневые» языки обычно более ориентированы на машины и быстрее выполняются, тогда как «высокоуровневые» языки более абстрактны и проще в использовании, но выполняются медленнее. Обычно кодировать на «высокоуровневых» языках проще, чем на «низкоуровневых».
Аллен Дауни в своей книге « Как думать как компьютерный ученый» пишет:
- Детали выглядят по-разному на разных языках, но несколько основных инструкций есть практически на каждом языке:
- Ввод: сбор данных с клавиатуры, файла или другого устройства.
- Вывод: отображение данных на экране или отправка данных в файл или другое устройство.
- Арифметика: выполняйте основные арифметические операции, такие как сложение и умножение.
- Условное выполнение: проверьте наличие определенных условий и выполните соответствующую последовательность операторов.
- Повторение: повторяйте какое-то действие, обычно с некоторыми вариациями.
Многие компьютерные языки предоставляют механизм для вызова функций, предоставляемых разделяемыми библиотеками . Если функции в библиотеке следуют соответствующим соглашениям во время выполнения (например, метод передачи аргументов ), то эти функции могут быть написаны на любом другом языке.
Поставил и забыл: просто системник
— но лучше берите не готовый, а попросите опытного друга собрать компьютер с нуля.
Подойдёт тем, у кого есть стационарное рабочее место и кто не любит частые переезды. Отдельный плюс — повышенная ремонтопригодность и возможности для обновления. Дело в том, что всё содержимое системного блока легко достать и заменить одни детали на другие. Нужно больше памяти? Добавляем. Не хватает места для файлов? Снимаем крышку и вставляем рядом второй жёсткий диск. В ноутбуке так не получится, в лучшем случае можно заменить диск. Если очень повезёт — ещё и память.
К системнику нужна клавиатура, мышь и монитор. И это можно считать плюсом, а можно и минусом: с одной стороны, всё можно выбрать под свои задачи. С другой — всё стоит дополнительных денег.
Внешне это не очень красиво, зато практично.
Лексический анализатор / лексер
Строка исходного кода проходит через лексер и превращается в список токенов.
Первый шаг в большинстве ЯП — это лексический анализ. Говоря по-простому, он представляет собой разбиение текста на токены, то есть единицы языка: переменные, названия функций (идентификаторы), операторы, числа. Таким образом, подав лексеру на вход строку с исходным кодом, мы получим на выходе список всех токенов, которые в ней содержатся.
Обращения к исходному коду уже не будет происходить на следующих этапах, поэтому лексер должен выдать всю необходимую для них информацию.
Flex
При создании языка первым делом я написал лексер. Позже я изучил инструменты, которые могли бы сделать лексический анализ проще и уменьшить количество возникающих багов.
Одним из основных таких инструментов является Flex — генератор лексических анализаторов. Он принимает на вход файл с описанием грамматики языка, а потом создаёт программу на C, которая в свою очередь анализирует строку и выдаёт нужный результат.
Моё решение
Я решил оставить написанный мной анализатор. Особых преимуществ у Flex я в итоге не увидел, а его использование только создало бы дополнительные зависимости, усложняющие процесс сборки. К тому же, мой выбор обеспечивает больше гибкости — например, можно добавить к языку оператор без необходимости редактировать несколько файлов.
Оплата труда
Важные качества
Профессия системный программист предполагает склонность к точным наукам и технике, хорошую память (в том числе оперативную), усидчивость, умение концентрировать и переключать внимание, ответственность, самоорганизованность
Знания и навыки
Специалист по программированию систем должен уметь с помощью математических методов разрабатывать алгоритмы программ для решения поставленных задач и самостоятельно писать эти программы, модифицировать и адаптировать готовые программы к конкретной системе, обеспечивать оптимальное применение прикладных программ, создавать базы данных и т.д.
Он должен владеть технологией и системного, и прикладного программирования, знать технологии защиты баз данных.
Средний компьютер для кодинга в 2020 году
Процессор. Может быть фирмы Intel или AMD. Если Intel, то подойдёт что угодно, начиная с Core i5. Всё, что ниже, может не очень быстро работать на современных операционных системах (что не помешает работать на них медленно).
Оперативная память. Чем её больше, тем проще компьютеру работать со множеством задач. Если нужно просто писать код, то сейчас хватит 8 гигабайт, большая часть которых уйдёт на операционную систему и браузер. Вы удивитесь, но современные браузеры могут нехило так нагружать и память, и процессор. Как будто это не ты смотришь Ютуб, а Ютуб смотрит тебя ?
Жёсткий диск. Есть два варианта: обычный HDD (очень много места, но медленный) или SSD (поменьше места, но в тысячу раз быстрее). Если есть возможность, лучше выбирать компьютер с SSD. Минимальный объём — 128 гигабайт, этого хватит для операционной системы, среды разработки и ещё останется место для своих проектов.
Самые простые языки для новичка
HTML + CSS — языки, которые используются всегда вместе. HTML предназначен для разметки блоков сайта по смыслу, а CSS задает расположение, размер, цвет и даже анимацию. Их должен хорошо знать каждый веб-разработчик. Начать изучение программирования стоит именно с них, т.к. вы привыкнете к коду: научитесь правильно структурировать, привыкнете к скобкам и другим знакам.
При интенсивном изучении HTML + CSS устроиться на работу стажером верстальщиком можно уже через месяц, а взять и качественно выполнить заказы на фрилансе – через полтора-два. У меня есть подборка курсов по верстке сайтов, которые помогут недорого и правильно войти в IT.
JavaScript — наряду с HTML и CSS предназначен для работы с web-страницами. В отличие от них он помогает добавить страницам динамичность. Плавно выпадающие части меню или смена картинок в блоке создано при помощи JavaScript. Изучение этого языка – следующая ступень для верстальщика. Так он становится Frontend-разработчиком, который сейчас очень востребован.
Почему еще стоит обратить внимание на JavaScript? Язык динамично развивается и становится полноценным хозяином веба. Сегодня его можно использовать не только для того, чтобы отобразить что-то браузере, но и в работе с сервером, и даже мобильными приложениями! К тому же для начала изучения JavaScript не нужно ничего, кроме браузера
Чтобы не ходить вокруг да около изучения языков программирования, с чего начать, я знаю несколько курсов по Frontend-разработке, которые обещают гарантированное трудоустройство либо завоевали доверие у работодателей. За качество ручаюсь. Если результата не будет, можете кидать в меня камни.
Python — возможно самый легкий в изучении язык. Но изучить язык и уметь его хорошо применять – разные вещи. Хоть он и самый простой, но я поставлю его на 3-е место, поскольку устроиться на работу чуть сложнее, чем с предыдущими языками. Сейчас вакансий по Python много, но именно по Junior – меньше, чем на предыдущих + если вы выбираете веб-разработку, то вам все равно нужно начать с HTML+CSS+JavaScript.
Но Python хорош своей широкой областью применения: скрипты автоматизации, парсинг, веб-разработка, тестирование, Data Science…В общем он применяется практически везде. Его так и называют «Второй лучший язык во всем». Т.е. где-то он первый, а под какие-то задачи есть лучшие языки. Но Python можно всегда смело ставить на второе место.
Подробнее о том, что делает Python-разработчик, вы можете почитать в этой статье. Там же вы найдете ресурсы для обучения и курсы.
PHP — сейчас считается основным серверным языком в веб-разработке, но его постепенно вытесняет Python и JavaScript. Для того чтобы его освоить, нужны минимальные знания HTML и CSS, потому что PHP используется в основном для создания веб-сайтов.
Отмечу, что большинство популярных систем управления контентом написаны на PHP, поэтому мелких фриланс заданий хоть отбавляй. Но его популярность для создания сложных систем – падает.
Вообще я считаю, что веб-разработка – самая простая и понятная для новичков. Все вышеперечисленные языки относятся в основном к ней. У меня есть подборка комплексных курсов по веб-разработке. Некоторые предлагают заработок уже через 4 месяца, а некоторые гарантированно трудоустраивают.
Но, если вы решили выбрать PHP, то вот сравнение курсов по нему.
Профилировщик кода (профайлер, профилер)
Профилировщик кода, или как часто на жаргоне его называют профилер (от слова profiler) — это инструмент, который собирает информацию о работе программы. Как правило, профилер требуется в тех случаях, когда ваша программа работает не так быстро, как хотелось бы.
Чтобы найти узкое место программы запускают профилер, который фиксирует время выполнения различных фрагментов программы.
Существует много профилеров, как универсальных, так и специализированных. Большой список можно найти здесь (en).
Но самым популярным профилером является GNU Gprof. Он есть в сборке Си-экспресс. Чтобы его использовать, нужно сделать следующие действия:
1. Включить профилирование в параметрах сборки проекта. Щелкнуть правой кнопкой на проекте и выбрать соответствующий пункт меню.
2. Перекомпилировать и запустить программу.
3. Запустить профилер. Меню — Модули — Code profiler
Побочные эффекты программирования
Писать код очень интересно, но это требует немало времени, усидчивости и внимательности. Так, например, написав какой-то код, вы можете быть уверены в его правильности, но компьютер говорит об обратном, и вы начинаете исправлять ошибки до тех пор, пока это не удовлетворит именно компьютер. Стоит отметить, что процесс обучения программированию имеет положительные побочные эффекты, среди которых:
- Компьютер в отличие от человека воспринимает все буквально. Поэтому если вам удастся справиться с машиной, то управление людьми станет для вас чем-то очень простым и доступным.
- Начиная работать с компьютером, вы уже по-новому смотрите на обработку той или иной информации. Если вы смогли получить опыт в области автоматизации, для вас не составит никакого труда узнать, как получить ту или иную информацию с последующей обработкой.
- Профессиональную коммуникацию также можно отнести к положительным побочкам, так как вы сможете поддерживать разговор с программистами, черпая от них новую информацию. Кроме того, мир IT невероятно интересен и полезен для понимания.
- К незначительному минусу можно отнести ответственность, которая ложится на вас, когда вы начинаете писать программу. Пусть даже вы пишете ее под себя, но вы все равно ее где-то попробуете и проверите. Бывают ситуации, когда программист не учел всех моментов, и программа дает сбой, в связи с чем незначительные ошибки могут привести к большим неудобствам. Именно поэтому вы должны понимать, что несете ответственность за программу, которую сами же и написали.
Экзотика и минимализм: Raspberry Pi
Raspberry Pi — это одноплатный компьютер: на платке размером с кредитную карту стоят порты, процессор и память. Подключаете к этому клавиатуру, мышь и монитор — и у вас есть компьютер. Стоит такая плата 30–100 долларов.
Особенность в том, что в нём будет операционная система «Линукс». Но для неё есть программы для разработки на любом языке, а также необходимый минимум браузеров и офисных приложений.
На Raspberry Pi будет сложно писать приложения для Айфонов или код для Windows, но всё остальное — вполне реально. Заодно прокачаетесь в настройке «Линукса».
На Pi можно сделать не слишком мощный, но рабочий сервер.
На момент написания статьи самое последнее поколение Raspberry Pi — четвёртое. Поддерживает два экрана!
Примечания
- Вирт Н. Алгоритмы + структуры данных = программы. — М.: Мир, 1985;
- Вирт Н. Алгоритмы и структуры данных. Новая версия для Оберона + CD. М.: ДМК Пресс, 2010. ISBN 978-5-94074-584-6, 0-13-022005-9
- Антонов Е. «Древнегреческий компьютер» оказался древнее, чем считалось // Наука и жизнь. — 2014. — 11 декабря (№ 12).
- А.И. Китов. Электронные цифровые машины. — Москва, 1956.
- Архангельский А.Я. Программирование на С++Builder 6. — Москва: БИНОМ, 2003. — 1152 с. — ISBN 5-7989-0239-0.
- ↑ Макки Алекс. Введение .Net 4.0 и Visual Studio 2010 для профессионалов. — Москва: ООО «И.Д. Вильямс», 2010. — 416 с. — ISBN 978-5-8459-1639-6. — ISBN 978-1-43-022455-6.
Языки программирования
Фактически, язык программирования, это набор правил описания команд и заранее созданных функций. Каждый язык программирования ограничивает разработчика строго предопределенным набором ключевых слов и команд, которые могут быть использованы при разработке. Выделяют несколько уровней языков:
- низкого уровня (ассемблер) — работают напрямую с процессорными командами
- высокого уровня (C++, C#, Java и др.) — больше похожи на обычный язык
Во время разработки программного продукта могут выделяться разные уровни абстракций. То есть по разному представляться объекты реального мира. В зависимости от этого языки программирования принято разбивать на следующие виды:
- Процедурные — определяют решение задачи шаг за шагом, вся система разбивается на ряд связанных между собой процедур.
- Объектно-ориентированные — программа разрабатывается как совокупность взаимосвязанных объектов, каждый из которых может порождать множество конкретных реализаций. С точки зрения декомпозиции объекта разработки может быть удобнее;
- Декларативные — представляют собой языки описания проблемы и ожидаемого результата.
Принцип «собаки, кошки и рыбы»
(или принцип причинно-следственной связи)
Представьте, что у вас есть комната. В этой комнате есть кошка и рыба в чаше. Рыба ведёт себя как обычно. В определённый момент происходят 2 вещи: собака входит в комнату, а кошка выходит из комнаты. В то же время рыба начинает петь. Вопрос: что заставило рыбу петь?
Можно рассмотреть много возможностей. Можно предположить, это случилось потому, что вошла собака. А можно предположить, что причина в том, что вышла кошка. А может быть, причина в комбинации обоих событий. Возможно, оба события тут не при чём. А дело в том, что 18:17 — это время превращения рыбы в ведьму. Может быть, все рыбы поют. Некоторые из этих вариантов могут оказаться правдой.
Что действительно важно для программиста, так это уметь изолировать причины изменений. Вы будете сталкиваться с подобными ситуациями на протяжении всего времени, пока вы кодите
В таких ситуациях мы, возможно, захотим спросить себя: можем ли мы симулировать вход собаки без выхода кошки (это может многое прояснить); можем ли мы симулировать выход кошки без входа собаки; можем ли мы полностью воспроизвести обстановку (например, время 18:17), чтобы понять, влияет ли она на пение рыбы, вне зависимости от собак и кошек. И так далее. Очень важно применять методологию для установления причин изменений. Эта способность будет помогать вам снова и снова, пока вы кодите.
Алгоритмы
После того, как было принято решение о возможности программной реализации поставленной задачи, необходимо построить алгоритм её решения. То есть максимально подробно описать последовательность шагов по решению задачи с учетом всех возможных ветвлений, циклов и ошибок. На самом деле, строить алгоритм можно и для простейших повседневных операций. Так, к примеру, можно описать алгоритм заваривания чая:
- Открыть чайник.
- Если в чайнике нет воды — набрать воду из под крана.
- Поставить чайник на газовую плиту.
- Открыть газ.
- Зажечь огонь.
- Дождаться, пока закипит вода в чайнике.
- Насыпать в чашку заварку.
- Залить заварку горячей водой.
Этот алгоритм не универсален, однако для человека, который засыпает заварку в кружку и имеет дома газовую, а не электрическую плиту, он действителен.
Существует несколько способов описания алгоритма:
- граф — схемы;
- словесный;
- псевдокод;
- программный код.
C++
Введение в программирование (C++)
Объём: 12 уроков.Площадка: Stepik.Организатор: Академия Яндекса, Высшая школа экономики (НИУ ВШЭ).Язык: русский.
Базовый курс, который познакомит с основами C++ и поможет прибрести опыт, необходимый для более углублённого изучения программирования. Процесс обучения построен на выполнении множества небольших практических задач, охватывающих все основные конструкции языка.
Introduction to C++
Объём: 4 недели, 3–5 часов в неделю.Площадка: edX.Организатор: Microsoft.Язык: английский.
Краткий вводный курс в C++ от экспертов Microsoft. На занятиях студенты освоят синтаксис и базовые принципы этого языка программирования, научатся создавать функции и подготовятся к изучению более сложных аспектов C++.
Основы C++
Объём: 12 лекций (13 часов видео).Площадка: «Смотри и учись».Организатор: «Смотри и учись».Язык: русский.
Рассчитанный на новичков онлайн‑курс, который посвящён основам языка C++. Охватывает базовые элементы и азы объектно‑ориентированного программирования с примерами и заданиями. Заключительная часть отводится практическому применению полученных навыков.
Программирование на языке C++
Объём: 41 урок (10 часов видео).Площадка: Stepik.Организатор: Computer Science Center (CS центр).Язык: русский.
Подробный базовый курс по C++, в котором особое внимание уделено основным принципам работы программ и процессу компиляции. Синтаксические конструкции рассматриваются лишь на первой лекции, поэтому слушатели должны быть знакомы с понятиями «переменная», «функция», «цикл»
Углублённое программирование на C/C++
Объём: 12 уроков (16 часов видео).Площадка: Stepik.Организатор: Mail.ru Group.Язык: русский.
Ориентированный на начинающих разработчиков онлайн‑курс, который предполагает знание основ C++. Материалы помогут приобрести навыки создания программ средней сложности и типовых шаблонов объектно‑ориентированного программирования. Также рассматриваются ключевые аспекты работы с памятью, асинхронные вычисления и диалекты.
C++ Programming — Advanced Features
Объём: 5 модулей, 2–3 часа.Площадка: Alison.Организатор: Microsoft.Язык: английский.
Более сложный онлайн‑курс, в котором студенты научатся создавать быстрые программы, используя продвинутые возможности C++. Всего за несколько часов лекторы объяснят ключевые расширенные функции этого языка, которые будут закреплены практическими занятиями.
Языки программирования
Большая часть работы программистов связана с написанием исходного кода, тестированием и отладкой программ на одном из языков программирования. Исходные тексты и исполняемые файлы программ являются объектами авторского права и являются интеллектуальной собственностью их авторов и правообладателей[источник не указан 233 дня].
Различные языки программирования поддерживают различные стили программирования (парадигмы программирования). Выбор нужного языка программирования для некоторых частей алгоритма позволяет сократить время написания программы и решить задачу описания алгоритма наиболее эффективно. Разные языки требуют от программиста различного уровня внимания к деталям при реализации алгоритма, результатом чего часто бывает компромисс между простотой и производительностью (или между временем программиста и временем пользователя).
Единственный язык, напрямую выполняемый ЭВМ — это машинный язык (также называемый машинным кодом и языком машинных команд). Изначально все программы писались в машинном коде, но сейчас этого практически уже не делается. Вместо этого программисты пишут исходный код на том или ином языке программирования, затем, используя компилятор, транслируют его в один или несколько этапов в машинный код, готовый к исполнению на целевом процессоре, или в промежуточное представление, которое может быть исполнено специальным интерпретатором — виртуальной машиной. Но это справедливо только для языков высокого уровня. Если требуется полный низкоуровневый контроль над системой на уровне машинных команд и отдельных ячеек памяти, программы пишут на языке ассемблера, мнемонические инструкции которого преобразуются один к одному в соответствующие инструкции машинного языка целевого процессора ЭВМ (по этой причине трансляторы с языков ассемблера получаются алгоритмически простейшими трансляторами).
В некоторых языках вместо машинного кода генерируется интерпретируемый двоичный код «виртуальной машины», также называемый байт-кодом (byte-code). Такой подход применяется в Forth, некоторых реализациях Lisp, Java, Perl, Python, языках для .NET Framework.
Скриншот фрагмента кода на языке Java в текстовом редакторе vim, демонстрирующий подсветку синтаксиса, поддержку Unicode, фолдинг