Языки программирования xxi века — Подскажите, не могу найти

Содержание

Как эффективно изучать языки программирования? Отвечают эксперты

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

Андрей Шестаков , разработчик DIRECTUM

Как эффективно изучить новый язык программирования? Вопрос, с которым сталкивается каждый разработчик. За 11 лет в ИТ я сам изучал 10 языков и на практике понял, какие моменты нужно учесть для лучшего освоения.

Цель первична

Просто познакомиться с новым языком программирования — цель достойная, но когда речь заходит об эффективности, необходим измеримый результат. Нужно чётко сформулировать конечную цель и ответить на вопрос: «Зачем?».

Язык может быть нужен, чтобы:

  • устроиться на работу в компанию, где основной язык C#;
  • написать ПО для межконтинентальной ракеты;
  • создать свой сайт;
  • оптимизировать запрос к базе данных на PostgreSQL в чужом проекте;
  • получить статус Senior-разработчика.

Конкретно сформулированная цель позволит достигнуть желаемого результата.

Теория и практика

Теория нужна, чтобы как можно быстрее перейти к практике!

  • Первым делом установите среду разработки — так будет проще писать код и запускать свои новые программы.
  • Затем возьмите учебник. Не важно, из серии «для чайников» или толстенный справочник — ориентируйтесь на свой уровень и цели.
  • Если учебники навевают тоску и воспоминания о школе — в сети есть огромное количество видеокурсов, лекций и вебинаров (ищите в YouTube).
  • Ещё один хороший инструмент для изучения — интернет-площадки, которые предоставляют полноценные курсы с теорией и практическими заданиями. Например SoloLearn с мобильными приложениями.

Было бы желание, а способ изучения и материалы найдутся.

Окружение

Окружение становится турбокнопкой к эффективности.

  • Идеальный вариант — работать вместе с людьми, которые уже имеют богатый опыт в разработке на интересующем языке программирования. Какими бы бесконечными ни были ресурсы сети Интернет, консультацию опытного коллеги переоценить сложно. При каждом удобном случае нужно демонстрировать свои решения, отправлять код на review, внимательно слушать обратную связь и обсуждать вопросы.
  • Если более продвинутого коллеги рядом нет, то на помощь придут профильные ресурсы в сети. Плюс можно подписаться на каналы, новостные группы и рассылки по выбранному языку.

Борис Тоботрас , руководитель Центра программных решений «Инфосистемы Джет»

Изучать синтаксис языка программирования исключительно в теории не стоит. Помню, когда я учился в 9-ом классе, когда у меня даже не было компьютера, я прочитал книгу про Algol-60 и ничего не понял. В освоении языков самое важное — практика! Поэтому на первых этапах надо изучать не синтаксис, а идиоматику — средства, которыми принято выражаться в этом языке. Надо научиться понимать, как правильно формулировать. Без этого код будут плохо понимать другие программисты, даже если синтаксис будет правильным.

Если говорить об алгоритме изучения языка, советую:

  1. Сначала почитать об этом языке: его истории, синтаксисе и основных инструментах. На это человеку, который уже знает основы программирования, достаточно будет потратить один вечер.
  2. Начать читать чужой код. Если надо научиться языку Scala или Clojure, я иду на GitHub, нахожу работающие проекты или известных людей, заслуживающих доверия, и изучаю их код. Как художник вдохновляется шедеврами признанных мастеров, программист может учиться идиоматике языка, читая код более опытных специалистов.
  3. Уже через пару дней можно начать экспериментировать и делать попытки создать что-то своё. Если язык позволяет написать web-сервис, можно сделать записную книжку, прогноз погоды, что-то несложное. Меняя код, искать наилучшие варианты, постепенно усложняя задачи.
  4. После этого нужно начать применять новый язык в решении реальных задач, углубляя в процессе его понимание и способы применения. Тут уже нет предела совершенству!

Максим Хайкин , ведущий разработчик BestDoctor

Труднее всего для новичка в программировании не заучить синтаксические правила, а научиться понимать смысл кода. Даже небольшие программы, с которых начинаются учебники и курсы, для многих сперва выглядят неделимой стеной текста. Что уж говорить о попытках внести туда какие-то изменения — чаще всего они будут заканчиваться непонятными ошибками и вызывать фрустрацию.

Поэтому начинать нужно с практики. Возьмите любое пособие по изучению иностранного языка — там почти сразу будут простые упражнения, в которых надо подставить в предложение правильное слово. Потом, когда вы поймёте, например, как работают глаголы-связки и где должно находиться подлежащее, вы будете учиться писать предложения целиком самостоятельно, а потом связывать предложения в текст. А новые слова и новые правила грамматики будут идти параллельно, начиная с наиболее часто используемых.

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

При этом очень важна самостоятельная работа. Чем больше упражнений будут сопровождать ваше пособие, тем лучше. С учётом того, что вы начинаете с маленьких упражнений, вам будет сложнее допустить ошибку и проще найти и понять, как её исправить.

Через некоторое время код для вас превратится из иностранного манускрипта в понятную структуру, которая создаёт описания, сохраняет значения в памяти и производит действия тогда, когда вы этого захотите.

Сергей Комаров , директор департамента информационных решений компании РДТЕХ

Выбор оптимального варианта зависит от того, знаете ли вы какие-то другие языки программирования и есть ли у вас опыт программирования вообще. Если опыт есть, то изучение очередного языка программирования не представляется сложной задачей — достаточно посмотреть правила написания и оформления программ, а также синтаксис основных конструкций нового языка (объявление переменных, процедур/функций, циклов и т. д.) и можно сразу приступать к практике. Обычно предлагаемые в Сети курсы и материалы ориентированы именно на эту многочисленную аудиторию.

Другое дело, когда человек только начал постигать науку программирования. В этом случае предпочтение стоит отдать одному из популярных и достаточно простых языков, таких как JavaScript или Python, и найти обучающие курсы по программированию, основанные именно на этом языке. Обычно подобные курсы построены таким образом, что теория перемежается с практикой, необходимой для закрепления материала, а в конце курса предлагается самостоятельно реализовать более сложную задачу.

Несколько слов стоит сказать о практической задаче. Лучше всего пробовать решать какую-то свою актуальную задачу (например реализовать приложение для управления компонентами «Умного дома»), максимально её упростив для начала. Как показывает мой опыт, это отлично мотивирует, ведь на выходе удаётся достичь сразу двух целей: и язык/технологию новую изучить, и реализовать давнюю идею.

Михаил Бадин , программист платформы Валарм, компания «Онсек»

Как правило, специалист начинает изучать тот или иной язык программирования в двух случаях. Первый — когда он только начинает погружаться в программирование, и это первый язык для изучения. Второй — когда один или несколько языков уже освоены, и хочется развивать свои компетенции дальше. В каждом случае будет свой алгоритм действий.

Вы начинающий программист

Очень часто людям, которые только начинают свой путь в программировании, сложно освоить весь объём новой информации, который они получают из книг и видеолекций. Они не могут категоризировать весь объём поступающих данных самостоятельно. В этом случае поможет ментор: человек, который сможет скоординировать процесс обучения, обратить внимание на важные вещи, стать проводником в мир ИТ. Поэтому если у вас есть знакомый программист, который готов стать ментором, то вполне возможно изучать язык по видеолекциям и книгам, периодически консультируясь с ним. Пусть он даст вам вектор движения и будет корректировать его по мере надобности — а с самостоятельным изучением темы вы справитесь своими силами.

Если же такого знакомого нет, то лучший путь для изучения языка — офлайн- или онлайн-курсы. Во время прохождения курсов обязательно консультируйтесь с преподавателем, задавайте вопросы, даже те, которые кажутся вам глупыми, а также выполняйте все задания. Благодаря непосредственному доступу к носителю экспертизы вы очень ускоритесь в освоении языка и пройдёте наикратчайший путь от новичка до специалиста.

Вы уже знаете один или несколько языков программирования

В этом случае достаточно прочитать книгу или посмотреть видеолекции по нужному языку программирования. Проходить курсы вряд ли необходимо, так как они в подавляющем случае разработаны для начинающих программистов, и темп изучения покажется вам слишком медленным. Единственное, что нужно помнить — в каждом языке есть свой подход к написанию кода. Например, если вы изучали JavaScript, а потом захотели освоить Golang, не пытайтесь писать код на Golang, используя практики программирования на JavaScript. Лучше потратить дополнительное время для изучения best coding practices изучаемого языка, чтобы не быть «белой вороной» и не вгонять в ступор других людей, когда они увидят получившийся код.

Александр Бочкин , генеральный директор компании «Инфомаксимум»

Половина нашей команды — разработчики. И даже среди них нет единой точки зрения о том, с чего стоит начинать изучать тот или иной язык программирования. Все по-разному пришли в разработку — кто-то «играл в код» ещё в начальной школе, другой изучал сам вопреки основной профессии.

Сам я по образованию программист, много лет занимался разработкой на С++. По опыту скажу: нельзя найти универсальный и единственно правильный путь изучения программирования. Если кому-то «заходит» только практика, это не значит, что другой, прикладывая максимальные усилия, тем же путём освоит язык.

На мой взгляд, наиболее приближен к идеалу следующий алгоритм изучения языка:

  • Определитесь с областью разработки и той сферой, где бы вы хотели в дальнейшем применять полученные знания. Заранее настройтесь морально, что как минимум полгода вы будете тратить свободное время на изучение языка.
  • Не бросайтесь как в омут с головой в практику и непонятные километры кода, изучите теоретические основы, коих сейчас масса. Важно проследить развитие языка и понять стек технологий, фишки и особенности синтаксиса.
  • Подтяните английский язык, расширяйте словарный запас. Незнание иностранного значительно сужает рамки возможностей программиста, лишает общения с коллегами и получения информации из оригинальной технической документации, поскольку всё будет доходить постфактум и с искажениями в переводе.
  • Получив первичное представление о технологиях и особенностях языка, приступайте к практике: выполняйте задания из видеокурсов и книг, поищите интересные YouTube-каналы, на базе примеров составляйте и решайте свои задачи, усложняя вводные. За основу возьмите задания, например с бирж фриланса. Не следуйте слепо тому образцу, который будет «подан» и «разжеван».
  • Начните работу над собственными проектами. Пусть простыми, даже элементарными, но это даст толчок к развитию в профессии. В данном случае лучше заранее собрать все «грабли», чем спотыкаться в дальнейшем.
  • Если будут возникать вопросы — а они будут возникать — не ленитесь обращаться к специализированным ресурсам и книгам более продвинутого уровня, чтобы повышать скиллы.

И запомните одну вещь — учиться и совершенствоваться необходимо на протяжении всего своего пути. Это аксиома.

Вячеслав Жиров , исполнительный директор Астраханского технопарка FABRIKA

Если речь идёт о программисте, который уже умеет кодить и работать со сторонними библиотеками — это одно дело. Уже есть понимание механизма и нужно наращивать, что называется, «мясо» — добавлять знания новых языков к уже имеющимся. Если же речь о том, кто только учится, то не рекомендую начинать обучение с конкретных языков. Нужно учиться кодить в принципе. То есть строить алгоритмы.

Несомненно, важно изучать и теоретическую базу — это основа, и без неё невозможно научиться писать качественный код. Достаточно сильную теоретическую базу для самостоятельного изучения дают книги, курсы онлайн-академий и видео-разборы. Следует, однако, помнить, что чем раньше приступить к решению практических задач, тем продуктивнее будет идти обучение. Тут важно соблюдать баланс теоретической подкованности и практического опыта.

Как для обучения, так и для развития новых компетенций у работающих программистов отлично подходят различные практические тренажёры. Например, полезно решать задачи по олимпиадному программированию, где знания определённого языка накладываются на решение задач с использованием другого. Среди резидентов технопарка популярна площадка Timus Online Judge — крупнейший архив задач по программированию с автоматической проверяющей системой. Особенность таких тренажёров в том, что для решения задач не используются фреймворки, сторонние библиотеки и методы сортировки. Ты должен сам писать код от и до. Отлично прокачивает умение строить алгоритмы.

Весьма достойный тренажёр есть также и для SQL. В целом, для программистов олимпиадное программирование — это не только обучение, а некий вид спорта, где можно соревноваться с коллегами и самим собой, чтобы показать себе, чего ты стоишь.

Отличный вариант «прокачки» компетенций в том или ином языка — стажировка в сильной проектной группе, в IT-компании, специализирующейся на этом языке. Это самый экстремальный, но, пожалуй, самый эффективный способ быстро освоить язык программирования.

Алена Батицкая , преподаватель направления «Программирование» в Нетологии, frontend-разработчик

На вопрос, какой алгоритм самостоятельного изучения языка программирования самый правильный, нет однозначного ответа, поскольку все люди разные.

В первую очередь следует определить, сколько времени в день или в неделю вы готовы тратить на освоение нового материала. Если свободного времени достаточно, то можно самостоятельно изучать язык по разнообразным материалам — универсального ресурса, который подойдет для изучения любого языка, к сожалению нет. Параллельно нужно самостоятельно практиковаться и отрабатывать полученные знания на пет-проектах, например на сайте Codewars, где можно найти практику сразу по многим языкам.

Самые лучшие источники знаний написаны на английском языке. Даже русскоязычные разработчики пишут статьи на английском, поскольку это позволяет охватить бо́льшую аудиторию. Переводы появляются не всегда и часто запаздывают. Поэтому важно обратить внимание на свой уровень английского языка и при необходимости включить его в свой план обучения.

Также при самостоятельном изучении языка важно обращать внимание на уровень материалов. Поскольку у каждой задачи в программировании есть больше одного решения, вы можете найти разнообразные статьи на интересующую вас тему, главное не запутаться в них. Но существуют так называемые «best practice», которые позволяют избежать постоянного изобретения велосипеда. Их нужно искать более тщательно.

Если времени не так уж и много, а новое знание освоить очень хочется, то оптимальным будет поискать подходящий онлайн-курс, благо их теперь очень много. Это позволит получить концентрированный поток знаний и обратную связь от профессионалов, что сильно ускорит процесс обучения. И дополнительный бонус — вам не придётся тратить время на самостоятельный поиск хороших материалов.

Какой бы способ изучения вы не выбрали, самым важным является практика! В программировании совершенно не важно, какие курсы или учебные заведения вы окончили. На любом собеседовании вам будут задавать предельно практичные вопросы. Поэтому во время или после прохождения какого-либо курса или по ходу изучения языка самостоятельно практикуйтесь как можно больше. Если перевести соотношение теории к практике в проценты, то, на мой взгляд, оно составит примерно 20/80. Работодателю важно сразу после найма получить работоспособного программиста, а не тратить время на перевод теоретических знаний в практические навыки и умения.

Андрей Степанов , руководитель отдела интеграционных решений компании «Синимекс»

Вопрос достаточно сложный. Нельзя выбирать между теорией и практикой, должна быть гармония. Нужно учить синтаксис и понимать алгоритмы и основы. При этом без практики эти знания не имеют ценности. Нужно чередовать — прочитали некоторую часть, затем опробовали на практике. При этом, на мой взгляд, совсем не обязательно покупать платные подписки на курсы. Очень много материалов есть в открытом доступе. Большое количество интересных практических задач можно получить, задав в Google вопрос «олимпиадные задачи по программированию». На них вам придётся поискать и почитать теорию про алгоритмы, их сложность, структуры данных и прочее. При этом они дают возможность писать свой код, и потом при разборе увидеть свои ошибки и варианты решения из best practice.

Как только почувствовали уверенность — нужно браться за боевые задачи, чтобы увидеть реальный мир и реальные проблемы. Зачастую в учебнике и обучающих задачах многие сложные и интересные практические моменты пощупать не получится. Начните писать свой проект на GitHub. Ещё очень важный момент: ваш шанс на успех сильно повысит наличие ментора — более опытного друга/коллеги/наставника, который может помочь, если у вас «затык», что-то объяснить, проверить результат вашей работы и дать правильный вектор вашему развитию. Никогда не останавливайтесь на достигнутом. Удачи.

Сергей Ширкин , декан факультета Искусственного Интеллекта в онлайн-университете GeekUniversity

В изучении языка программирования вам, скорее всего, потребуется соблюдать баланс между изучением синтаксиса и применением его на практике.

Следующие шаги помогут вам сделать это правильно.

Определитесь с конечной целью

При изучении языка программирования нужно для начала хотя бы примерно представлять, что вы хотите в итоге научиться делать. К примеру, ваша цель — научиться писать игры, либо делать сайты, либо написать приложение с использованием искусственного интеллекта.

А может, вы хотите уметь делать и то, и другое, и третье? Такое тоже возможно.

Вам будет легче продолжить изучать язык программирования, если у вас будет определённая цель, даже если в будущем вы передумаете и будете применять свои знания совсем для другого.

Учите синтаксис небольшими порциями

Не нужно сразу штудировать целый учебник по программированию. Проходите теорию по небольшим пунктам.

Сразу применяйте знания на практике

К примеру, вы прочитали часть материала про работу со строками. Возможно, даже всего лишь про одну команду. Сразу же попробуйте эту команду применить на практике, самостоятельно придумав для этого небольшой пример. Если вы хотите отработать команду, с помощью которой можно сделать замену символа в строке, возьмите конкретное слово и замените там какой-либо символ.

Решайте задачи по программированию

Пройдя небольшой раздел, попробуйте порешать задачи на эту тему. В интернете много сайтов с задачами, которые можно решать онлайн и сразу увидеть результат. Например, если вы изучаете Python, вам подойдет сайт pythontutor.ru.

Переходите к созданию проектов

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

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

Большую роль здесь играет эффект новизны — как за счёт того, что язык программирования изучается относительно недавно, так и за счёт нового рабочего окружения.

Валерий Чеванин , руководитель отдела разработки в AWG.RU

Подход к изучению нового языка сильно зависит от предыдущего опыта программирования. Если его нет, то проще начинать с азов и учиться по книжке с уроками и заданиями. При этом важно выбирать актуальный учебник — учить древнюю версию даже не сильно обновляемого языка программирования занятие неблагодарное и бесполезное. Если есть опыт в программировании, то новый для изучения язык выбирается обычно на основе либо применимости к какой-то области (и тогда обычно всё идёт от конкретных задач — то есть, практический путь), либо на основе «хайпа». Во втором случае проще найти эксперта, который будет готов ответить на вопросы и рассказать о подводных камнях.

Алгоритм может быть следующий:

  1. Выбор языка (например Python), на основе широты его применения, актуальности и прогноз, где язык может быть использован (например Data Science).
  2. Просмотр нескольких скрин-кастов (от простого к сложному), оценка барьера вхождения (достаточно ли у меня скилов на освоение языка, например хватит ли мне знаний математики для программирования на Python).
  3. Поиск готовых решений и наработок для примера.
  4. Подбор литературы (в рамках данного примера масса бесплатных вариантов).
  5. Финальный шаг: идём в сторону Coursera, а потом уже наступает «инженерка» с реальными задачами и решением проблем в обнимку со StackOverflow.

Александр Братчиков , автор программы курса «Фронтенд-разработчик» в Яндекс.Практикум

Самое сложное на старте — выбрать направление. Например, в разработке сайтов их три: фронтенд, бэкенд, фулстек. Как понять, к какому направлению больше лежит душа? В идеале — попробовать фронтенд и бэкенд, а потом определиться, что интересно изучить дальше.

Если говорить о фронтенде, то обязательные основы — HTML и CSS, нужные для вёрстки, и язык программирования JavaScript, который делает сайт интерактивным. Фронтенд-разработчику важно понимать на базовом уровне, как устроен бэкенд, поэтому нужно изучить, как происходит сборка проекта — подключение сайта к серверу и его «доставка» до пользователя.

Лучше равномерно распределить занятия во времени — тратить на обучение один-два вечера в неделю не так эффективно, как проходить небольшие уроки каждый день. Чтобы быстрее перейти к практике, на начальном этапе нужно заниматься не меньше десяти часов в неделю.

Через месяц-полтора уже получится сверстать несложный сайт, ещё через два месяца — «оживить» сайт при помощи JavaScript и адаптировать его для разных устройств.

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

Леонид Голиков , PR Менеджер в IT Компании Enterprise сегмента

Изучение любого языка происходит примерно одинаково, но всё же обязательные шаги примерно следующие:

  1. Изучение базового синтаксиса.
  2. Некая математическая база (линейная алгебра), которая даёт понимание для пространственного мышления — помогает разбираться в матрицах, массивах, объектах, строить алгоритмы. Если база есть — двигаемся дальше, т.к. она одинакова для всех языков.
  3. Далее уже изучаем архитектуру языка для написания классов, объектов.
  4. Попутно узнаём методы отладки и дебага.
  5. Те, кто дожил до этого момента, приступают к изучению паттернов, применяемых к архитектуре именно этого языка.
    Но перед всей этой кухней идёт очень важная вещь — настройка рабочей среды. В каждой ОС по-своему: установка самого языка, поиск удобного текстового редактора, установка всяких побочных программ типа Docker, веб-сервера и пакетных установщиков.

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

Ещё один вариант. Придумываете для себя простой, но интересный проект, а далее начинаете его пытаться делать, параллельно задавая вопросы в Google или StackOverflow. Там можно прояснить вопросы простого характера и найти в комментариях полезные мнения. Но тут есть и минус. Без понимания базовых концепций программирование может превратиться в «загугли решение». Некоторые девелоперы так и копируют асинхронные функции, не понимая, что такое вообще асинхронность.

Если вы уже разрабатывали на каком-то языке, то сидеть и отдельно изучать синтаксис нет смысла. Можно сразу лезть в практику и по ходу дела разбираться с особенностями нового языка.

Иван Загайнов , руководитель группы Computer Vision ABBYY

Ответ во многом зависит от языка программирования и сферы его применения.

Допустим, человек занимается научными исследованиями, и сотрудники его лаборатории в проектах используют Fortran — это одна ситуация. Другой вариант — студент, изучающий машинное обучение, который хочет писать проекты на Python. Ещё вариант: разработчик решил изучить С++, чтобы устроиться на работу в коммерческую компанию. Эти и другие ситуации требуют разного подхода и объёма прилагаемых усилий для изучения языка.

Я попытаюсь дать общие рекомендации, но в каждом случае в этот алгоритм следует вносить коррективы.

1. Найдите хорошую книгу, освещающую основной синтаксис языка, с примерами и объяснением принципов работы. От правильного выбора книги зависит многое, она сформирует ваше первоначальное «видение» языка. Разумеется, в будущем оно будет корректироваться по мере накопления вашего личного опыта работы с ним.

2. Практика. В каждом языке есть свой «Hello, world!». Пытайтесь сразу же применять полученные знания на практике, закрепляйте освоенные конструкции языка.

3. Будьте любознательными. Как только в голове возникает вопрос, ответа на который вы не знаете, — ищите его не откладывая! В интернете полно форумов и блогов, в которых разработчики обсуждают практически все нюансы языков. Ни одна книга не может охватить их все. Особенно это касается языков, имеющих богатый набор выразительных средств.

4. Изучайте основы ООП, паттерны программирования, алгоритмы и структуры данных. Посмотрите, как устроены библиотеки внутри, загляните в их код. Великолепное формальное знание языка ещё не означает, что вы будете писать элегантный и эффективный код на нём.

5. Старайтесь, чтобы ваш код увидело как можно больше коллег, чтобы как можно раньше получить фидбэк на то, как вы пишете или оформляете код. Оформление кода или code style в крупных проектах — отдельная тема, и её тоже следует изучить. Также как и процесс code review.

6. Если вам требуется глубокое понимание языка (например если вы разработчик в крупной коммерческой компании), не ограничивайте себя изучением только его одного. Посмотрите вокруг на остальное: скриптовые языки, ассемблер. Задайте себе вопрос, чем они отличаются, почему устроены иначе, какую цель преследовали авторы этих языков? Изучайте различные фреймворки, библиотеки, погрузитесь немного в теорию компиляции, разберитесь с тем, как устроен процесс «сборки» проектов в разных средах.

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

8. В какой-то момент стоит открыть документацию, или, говоря проще, изучить «стандарт» языка. Многие привычные вещи в этот момент откроются вам с нового ракурса. Не помешает также проследить исторический путь развития языка, разобраться, что в нём менялось от одной версии стандарта к следующей.

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

10. Помните, что нельзя «изучить» какой-то язык «от и до». Язык не монумент, он живёт и развивается, это же справедливо и в отношении естественных языков. И если язык «живой», востребованный в мире, то процесс изменений в нём со временем становится всё более интенсивным.

На этом у меня всё. Ищите свой путь, не бойтесь наступать на «грабли». Чем раньше вы их «соберёте» — тем меньше «мин» будет в проектах, которые вы после себя оставите.

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

Программирование — самая перспективная профессия XXI века. Какие бывают языки программирования, для чего они используются и как развиваются?

Автоматизация охватывает всё новые области, компьютеры все больше входят в нашу жизнь. И это многообразие задач переходит в многообразие программ, которые написаны на языках программирования.

Наиболее важным, но в то же время наиболее незаметным свойством любого инструмента является его влияние на формирование привычек людей, которые имеют обыкновение им пользоваться.

Когда этот язык — язык программирования, его влияние, независимо от нашего желания, сказывается на нашем способе мышления.

Нидерландский учёный, труды которого оказали влияние на развитие информатики и информационных технологий

Для чего нужны языки программирования

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

Естественные языки используются для общения людей между собой, а языки программирования предназначены для управления компьютером, то есть для выражения человеческих идей в понятном для компьютера виде.

ЯП подчиняется той задаче, которая стоит перед компьютерной программой. Он зависит от оборудования, на котором выполняется алгоритм. Соответственно, практически для каждой задачи и каждого оборудования можно использовать наиболее подходящий ЯП. Вот почему языков программирования так много.

С момента описания первого универсального программируемого устройства в 1835 году — им считается разностная машина Чарльза Бэббиджа — человечество создало более8000 языков программирования. Конкретно для этой машины первую программу написала в 1842 году леди Ада Лавлейс, ее считают первым в мире программистом. К сожалению, саму машину не удалось полностью собрать при жизни создателя из-за несовершенства технологий и дотошности Бэббиджа. Машина считывает данные с перфокарт и использует паровой двигатель как источник энергии. Если бы механизм собрали по плану, то он стал бы первым в мире компьютером.

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

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

С каждым новым языком процесс программирования становится более универсальным. Поэтому многообразие языков — это очень хорошо. Оно показывает прогресс и позволяет двигаться дальше.

Какие бывают языки программирования

Уже в начале XIX века появились первые «программируемые» механизмы: ткацкие станки, музыкальные шкатулки и т.д. Каждый из них программировался своим собственным набором инструкций. Так появились предметно-ориентированные языки программирования, которые в огромном количестве создаются до сих пор по мере появления новых устройств и аппаратного обеспечения.

Кроме предметно-ориентированных, существуют учебные языки программирования, которые созданы специально для обучения начинающих программистов. Например, из одного такого учебного языка ABC вырос популярный сейчас язык программирования Python. Поэтому он такой простой и понятный.

Текст программы для отображения «Hello, world» на языке Python

>>> print («Hello, world»)

Существуют эзотерические языки — своеобразные произведения искусства, которые невозможно применять на реальных задачах. Например, язык Malbolge специально создан для максимального затруднения написания программ.

Текст программы для отображения «Hello, world» на языке Malbolge

Выделяют такие подходы к программированию (на профессиональном языке они называются парадигмами): аспектно-ориентированные, структурные, процедурные, логические, объектно-ориентированные, функциональные, мультипарадигмальные языки.

Общепринятой классификации не существует, но исторически принято разделять ЯП на высокоуровневые и низкоуровневые языки.

Языки высокого уровня

Языки программирования высокого уровня освобождают программистов от необходимости детализировать программы до слишком мелких машинных команд и знать особенности конкретных вычислительных устройств.

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

Машинно-ориентированные языки

Компиляторы никогда не станут такими же умными, как люди, они не могут читать мысли программиста. Поэтому для написания максимально эффективной программы, которая идеально реализует замысел программиста, придется писать в машинных кодах.

Дональд Кнут в своей классической книге «Искусство программирования» приводил такой довод в пользу низкоуровневых языков: «Например, некоторые комбинаторные вычисления нужно повторять триллионы раз, и мы сэкономим приблизительно 11,6 дней работы за счет того, что сократим время вычислений во внутреннем цикле всего на одну микросекунду». Даже один сэкономленный такт вычислений дает огромную экономию в крупном масштабе!

Если вам попалась невероятно эффективная и быстрая программа — она наверняка написана с применением низкоуровневого языка.

Популярность языков

Какие основные языки программирования — определить непросто. Существуют различные метрики для измерения популярности языков, каждая из которых отражает определенный аспект популярности языка:

  1. Подсчет числа вакансий с упоминанием этого языка.
  2. Количество проданных книг (учебников или справочников).
  3. Оценка количества строк кода, написанных на языке (например, по статистике хостингов, где публикуются тексты программ).
  4. Подсчет упоминаний языка в запросах поисковиков.

Например, журнал IEEE Spectrum попытался составить самый объективную картину популярности языков программирования по12 метрикам из10 источников. Вот как выглядела в 2020 году таблица, отранжированная по этим параметрам:

По активности разработчиков на GitHub в 2020 году рейтинг выглядит так:

По каждой метрике может лидировать какой-то один язык, а по другой метрике — другой. Например, Cobol до сих пор доминирует в корпоративных дата-центрах, на нем написано много программ, хотя новых практически не пишут. Вариации языка C используются в системном программировании, а язык Java популярен для написания приложений под Android. Прочие языки регулярно используются для создания других разнообразных приложений.

За каким языком программирования будущее — покажет история, но исследователи отмечают, что по совокупности метрик в последнее время растет популярность Python, который сейчас вышел на 1-е место. Поднялись по рейтингу C# и Swift. По количеству вакансий для программистов C значительно опережает Python. В веб-программировании популярны JavaScript и PHP.

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

Курс «Профессия Веб-разработчик» предполагает, что по окончании годичной программы студент сможет устроиться джуниор-программистом. Программа обучение рассчитана на один год и составлена из трех основных курсов: «Веб-разработчик», «JavaScript с нуля» и «Базовые навыки PHP». По окончании курса студент получает глубокие комплексные знания, необходимые для профессиональной работы.

Как начать обучение программированию, если ты полный ноль

Здравствуйте, дорогие читатели!

О заработках программистов ходят легенды. О возможности работать разработчиком на фрилансе (то есть, в пижаме и за чашкой кофе либо на берегу океана) тоже. Этим легендам верят и в эту сферу хотят попасть.

Подогревает интерес то, что сами программисты твердят, будто путь в профессию открыт для всех, не только для технарей. Главное, знать, где его найти. Интересуетесь им тоже? Тогда эта статья, описывающая программирование для чайников – для вас!

Всем ли дано

Как-то Вуди Аллен сказал, что большая часть жизни – это показуха. Все хотят написать книгу, сценарий (программу), но дальше желаний мало у кого доходит, а зря. Если вы начали, вы на полпути к завершению. И не нужно откладывать начало на завтра, на следующий месяц либо на понедельник и искать причины не реализовать идею прямо сейчас.

Было бы желание. Подтверждает это и публикация на Хабре, которую написал незрячий программист. Незрячий, но опытный и умеющий хорошо кодить. Мы живем в XXI веке, а, значит, у нас море возможностей.

Правильный старт – полдела

На вопрос том, что нужно для того, чтобы обучиться программированию с нуля и потом этим зарабатывать, гуру отвечают: «Усвоение основ, которые впоследствии встречаются в работы повсеместно». Это:

Разобравшись с ними, можно будет понять, как работает программа и как алгоритмы ее работы реализовать на практике. Найти эти знания самостоятельно можно в книгах. Но еще более важно выбрать язык и определиться с направлением программирования.

С какого языка начать

В большинстве технических вузов обучение начинают с немного устаревших языков. Это могут быть Turbo Pascal и Turbo C. Сами программисты их сейчас практически не используют, но цель обучения эти языки оправдывают. Они помогают студентам разобраться с тонкостями работы с оперативной памятью и помогают постичь, какой путь требуется пройти, чтобы преобразовать замысел в работающую программу.

Кроме того, тот же язык С является своеобразной основой для создания современных языков и изучить его будущему программисту очень полезно.

Если же интересуют перспективные языки программирования, обратите внимание на:

  • Python. К слову, с него многие начинающие программисты и начинают. Секрет его популярности – не в обширном функционале, а в возможности быстро приступить к практике. Чтобы начать работу, достаточно скачать файл и его запустить. Разобраться в тонкостях работы также несложно: есть масса книг, написанных под Python. Кстати, этот язык используется во многих крупных компаниях, и те, кто хорошо в нем разбираются, всегда могут найти работу.
  • Java. Очень популярный, применяется на всех устройствах и платформах. Специалисты, которые освоили его, востребованы и всегда смогут найти высокооплачиваемую должность. К слову, он не имеет ничего общего с JavaScript.
  • PHP. На сайте уже есть публикации про него. Его называют «не совсем настоящим» языком программирования, так как он заточен исключительно под веб, в то же время его редко применяют в веб-приложениях. Язык лежит в основе самых популярных «движков», или CMS. (В этой публикации я уже писал о том, что такое CMS простыми словами, а здесь вы можете увидеть, какие они бывают и как выглядят) Поэтому, если вы разберетесь с ним, а затем и с WordPress, которая является одной из самых популярных систем управления сайтами, работу себе вы всегда найдете. Здесь я уже писал с чего начать процесс ее изучения.

Есть и другие языки: Ruby (как и Python скриптовый), С# (по функционалу похож на Java, позволяет создавать сайты и приложения на фреймворке .NET), С++ (сложная версия С, которая открывает массу возможностей, разбираться с которыми лучше с наставником).

Как изучать

Есть три способа выучить основы программирования, не имея никаких навыков.

Самообразование

В этом случае в свободное время нужно будет читать книги, например:

  • «Изучаем РНР и MySQL» Л. Бейли и М. Моррисон;
  • « Простой Python. Современный стиль программирования » Б. Любанович и др.

Затем полученные знания использовать на практике. Тогда за год – два при условии прилежного изучения можно будет освоить профессию бесплатно. Главное, помнить, ради чего все начиналось и постоянно практиковать.

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

Помощь ментора

Ментор – это опытный программист, который направит вас на путь истинный. Он и литературу посоветует, и код проверит, и задания на отработку практических навыков подкинет. Главное, его отыскать. Где? На форумах, онлайн-конференциях. Причем, отыскать и заинтересовать работать с вами.

Тренинги

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

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

Куда податься

С чего начать обучение? С выбора направления, которое подскажет и выбор языка. Есть:

  • Веб-программирование – перспективная и быстроразвивающаяся область, для работы с которой нужен только компьютер и браузер. Позволяет создавать и поддерживать сайты. Освоив его, вы приобретете специальность, благодаря которой сможете хорошо зарабатывать. Хотите быть веб-программистом? Учите PHP.
  • Разработка программ и приложений. Сложное, но интересное направление, разобраться в котором без знания основ практически невозможно. Выбор языка зависит от сферы: мобильные, под Android (читайте здесь что это и почему он лучше) или другую платформу. Java подойдет.
  • Системное администрирование. Здесь все просто: нужно настраивать программы ранее кем-то созданные. В этом направление важно разностороннее развитие.

Путь к успеху во всех случаях лежит через умение совершенствоваться и саморазвиваться.

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

Почти экстремальное программирование: мозголомы 21 века

Содержание статьи

К необычным языкам программирования все давно привыкли. Чуть ли не каждый новый язык принято обзывать «странным» и «в корне отличным от всех предыдущих». И создатели С и творцы Перла с Фортом с рвением призывали «забыть весь предыдущий опыт – этот язык в корне отличается от языков, обычно используемых в практическом программированием». За этой мишурой как-то и забываешь, что помимо практического программирования, есть ещё и теоретическое, экспериментальное. Языки столь странные, что кажутся абсурдными. Но не спешите скоропостижно щёлкать по крестику браузера (или мочалить Ctrl+F4), речь не пойдёт о детских забавах и странных шутках андеграунда. Неужели вы думаете, что в спрятанных за толстыми пуленепробиваемыми стёклами глазах бородатых мужиков, не один десяток лет отдавших железным монстрам, кроется искорка веселья? Отнюдь. Любая наработка в экспериментальном программирование таит в себе цель. Пусть не всегда доступную пониманию простых смертных.

CLWNPA

Большинство людей, познакомившихся с Compiler Language With No Pronounceable Acronym (так называется язык), помимо того, что сошли с ума и стройными рядами отправились работать в компьютерные журналы, вынесли интересное мнение: и в программирование есть место жёсткому стёбу. Стоит ли говорить, что авторы языка – Дон Вудс и Джеймс Лион – перед собой такую задачу не ставили. О, воскликнут заросшие профессионалы с воспалённым блеском в глазах, как так, язык полностью абсурдный с идиотской документацией и нулевой практической реализуемостью. Не спешите ломать автору руки и ноги (кто-то вас опередил, хо-хо-хо!).

Обратите внимание, суть языка заключалась в том, чтобы ни одна команда не была похожа на что либо уже созданное. Это ли не чудо! Вы только представьте, большинство языков рождаются друг из друга как генетические мутанты – посредством инцеста. А тут разом появляется питомец с чистой кровью, разобраться в котором не так просто, как с его более популярными собратьями. Не эту ли технологию используют военные в своих разработках? Забудьте про С, AJAX и Linux – ядерными закромами родины и атомными электростанциями управляет такая высокоинтеллектуальная хренотень, что высоколобый разработчик свободного софта обязан совершить харакири собственными заскорузлыми ногтями, лишь бросив взгляд на детище яйцеголовых. Пусть в
CLWNPA к инструкциям добавлялись команды please и with the divine help, а другие команды явно выдавали в пользователи поклонника теории Электронных Богов (компьютеры, вирусы, интернет – следующая после человека ступень эволюции), т.е. сложностью язык не отличался (разве что набожностью). Но он был первым (или не совсем первым, но это несколько другая история), в котором человек вышел за жёсткие рамки самопрограммирования. Вышел, чтобы объятый ужасом вбежать обратно.

BrainFuck

МозгоТрах стал логическим продолжением
CLWNPA (кстати говоря, на Хакере был цикл
статей по основам языка — все там на самом
деле довольно просто :)). Если можно не так как все, то почему нельзя не так как всегда? Идея, лёгшая в основу языка, проста как минет асфальтоукладчицы – доказать возможность существование рабочего языка, коренным образом отличавшегося от всех. Главное слово тут – рабочий. Просто создать новый язык программирования сложно, но возможно (примерно как смастерить собственный компьютеры и поставить на него свою же ось), а вот сделать так, чтобы на нём решались многие (желательно – все!) современные вычислительные задачи – работа не для талантливых студентов. И ведь удалось же! Решение было найдено, но о нём не вострубили СМИ, а авторам не дали Нобелевской премии – поскольку BrainFuck как ковбой Джо из анекдота никому не было нужен. Никто не мог понять, зачем нужен язык,
на котором сакраментальная фраза «Hello world!» выглядела вот так:

Жалкие овцы, что тут можно сказать, жалкие и недалёкие люди. Не берусь судить, что в ЦРУ использовали этот язык, но то, что им заинтересовались – точно! И не только ЦРУ. Забудьте про все стандарты шифрования – достаточно на БрейнФаке написать аналог WinGuard Pro, чтобы обломать зубы многим дешифровальщикам. Это – чудо. Это – грандиозный шедевр программирования. Это – техногенный прорыв, усиленный оргиазмическим эффектом. Язык можно превратить в нечто неописуемое, сложно поддающееся пониманию, а значит практически безопасное. Кулхакеры, ловите на заметку, пишите письма на МозгоТрахе и его старших детях и не беспокойтесь о спутниках-шпионах.

Malbolge

Ничем иным как стремлением к тотальной безопасности объяснить появление этого языка нельзя. И действительно, вот где ад для программиста и непаханое поле для контрразведчика. Текст, написанный на этом языке (пусть мы говорим о программирование, но ничто не мешает нам программировать английский и – давайте пофантазируем – родной русский язык) скорее всего никто не признает разумным. В том то вся и фишка! Вот увидите, не пройдёт и десятка лет, как школьнику начнут в курилках разговаривать на Malbolge. Если есть более безопасный язык, то я его знать не хочу – потому что иначе мозг перегрузится и сгорит. Итак, слово «мама» для компьютерного языка или «hello world»:

Языки программирования, разработанные российскими и советскими программистами

Kotlin (Ко́тлин) — это статически типизированный язык программирования, работающий поверх JVM и разрабатываемый компанией JetBrains. Также компилируется в JavaScript, и в исполняемый код ряда платформ через инфраструктуру LLVM. Язык назван в честь острова Котлин в Финском заливе, на котором расположен город Кронштадт.

Авторы ставили целью создать язык более лаконичный и типобезопасный, чем Java, и более простой, чем Scala. Следствием упрощения по сравнению со Scala стали также более быстрая компиляция и лучшая поддержка языка в IDE. Язык полностью совместим с Java, что позволяет java-разработчикам постепенно перейти к его использованию; в частности, в Android язык встраивается с помощью Gradle, что позволяет для существующего android-приложения внедрять новые функции на Kotlin без переписывания приложения целиком.

Компания Google на конференции для разработчиков I/O 2020 объявила, что теперь язык программирования Kotlin будет приоритетным для разработки приложений для операционной системы Android. Все новые API и библиотеки Jetpack будут публиковаться сначала на Kotlin, и только потом на других языках.

Согласно рейтингу RedMonk Kotlin — самый быстрорастущий язык программирования. Он вошел в топ-20 самых распространённых и «обсуждаемых» разработчиками языков программирования по версии аналитиков компании RedMonk.

JetBrains (ранее — IntelliJ) — международная компания, которая делает инструменты для разработки на языках Java, Kotlin, C#, C++, Ruby, Python, PHP, JavaScript и многих других, а также средства командной работы.

JetBrains основана в 2000 году. Головной офис расположен в Праге. Основатели: Сергей Дмитриев, Евгений Беляев и Валентин Кипятков.

По состоянию на 2020 год у компании шесть офисов — в Праге, Санкт-Петербурге, Бостоне, Москве, Мюнхене и Новосибирске.

Наиболее известный продукт JetBrains — интегрированная среда разработки IntelliJ IDEA.

В 2009 году JetBrains открыла код платформы IntelliJ, на которой основана IntelliJ IDEA, и выпустила бесплатную версию IntelliJ IDEA Community Edition.

С 2010 года компания разрабатывает язык программирования Kotlin. В мае 2020 года компания Google сообщила, что включает поддержку Kotlin в Android Studio 3.0 — официальный инструмент разработки для ОС Android.

На 2020 год у компании более 5 млн пользователей, среди клиентов: Google, Salesforce, Twitter, Citibank, HP, Airbnb.

В 2020 году JetBrains впервые стала глобальным спонсором международной студенческой олимпиады по программированию ACM ICPC.

Встроенный язык программирования 1С:Предприятие

Встроенный язык программирования 1С:Предприятие — язык программирования, который используется в семействе программ «1С:Предприятие». Данный язык является интерпретируемым языком высокого уровня. Интерпретация текста программного модуля в байт-код выполняется в момент обращения к этому модулю в процессе работы, таким образом обычно интерпретируется только часть текстов программных модулей (в версиях 7.7 и старше). Начиная с версии 8.2 модули компилируются.

Средой исполнения языка является программная платформа «1С:Предприятие». Визуальная среда разработки («Конфигуратор») является неотъемлемой частью пакета программ «1С:Предприятие».

Диалекты языка для платформ 1С седьмых версий (7.0, 7.5, 7.7) совместимы «снизу вверх» с незначительными исключениями. Языки для платформ 1С:7.х и 1С:8.х совместимы по основным операторам, но значительно отличаются в работе с прикладными объектами, вследствие чего перенос кода из 1С:7.х в 1С:8.х не имеет смысла.

Встроенный язык 1С:8 наиболее подобен по своему синтаксису языку Visual Basic.

Платформой предоставляется фиксированный набор базовых классов, ориентированных на решение типовых задач прикладной области:

Константа,
Справочник,
Документ,
Журнал документов,
Перечисление,
Отчёт,
Обработка
План счетов и др.

На основании базовых классов средствами визуального конфигурирования можно создавать любое количество порождённых классов (возможность определить новый класс программно — отсутствует). Допускается только одна явная ступень наследования классов. Как правило, объекты порождённых классов представляют собой записи (или некоторые наборы записей) в базе данных. Такие классы образуют «Дерево метаданных». В терминах встроенного языка программирования 1С такие классы называются объектами метаданных.

Основными видами объектов метаданных являются: Справочники, Документы, Отчёты, Обработки, Планы видов характеристик, Планы счетов, Планы видов расчёта, Регистры сведений, Регистры накопления, Регистры расчёта, Бизнес-процессы, Задачи.

Поддерживаются русский и английский синтаксис команд.

Проекты на встроенном языке 1С:Предприятия называются конфигурациями. Распространение (продажа) и внедрение таких конфигураций — это основная коммерческая деятельность фирм-партнёров 1С.

Рабочее название языка — «1Сик» («одинэсик») — очень быстро исчезло из официальных источников. Сейчас при упоминании этого языка в письменных документах нужно писать 1С Язык программирования. Впрочем, часто этот язык называют «встроенный язык», в контексте обсуждения 1С:Предприятия.

Дружелюбный русский алгоритмический язык, который обеспечивает наглядность (сокр. ДРАКОН) — визуальный алгоритмический язык программирования и моделирования.

Язык построен за счёт формализации и эргономизации блок-схем алгоритмов, описанных в ГОСТ 19.701-90 и ISO 5807-85.

Язык может быть использован для разработки программ реального времени.

Правила языка ДРАКОН по созданию диаграмм разрабатывались с учётом требований эргономики, то есть изначально оптимизированы для восприятия алгоритмов человеком с использованием технологий компьютерной графики. При этом, данный язык рассчитан на создание программ, которые можно было бы просматривать как модели, содержащие код на текстовом языке.

Возможности языка ДРАКОН могут расширяться в зависимости от нужд пользователя: на языке ДРАКОН можно писать программы для ЭВМ за счет включения в себя функционала и синтаксиса поддерживаемого ИС ДРАКОН или DRAKON Editor текстового языка программирования; при этом программа для ЭВМ, написанная таким образом, считается написанной на гибридном языке ДРАКОН-[название языка].

Вышеописанный подход повышает эргономику, особенно в ситуации, когда программа пишется продолжительное время и/или коллективно (например, с поддерживается с помощью GIT), создавая обстановку, позволяющую писать программу, имея в процессе её написания её же модель, которая облегчает возможность ориентироваться внутри исходного кода.

Программа, считающаяся написанной на «чистом» языке ДРАКОН, является моделью поведения.

Разработка и использование языка ДРАКОН и его инструментальных средств для ракет-носителей и разгонных блоков космических аппаратов

Разработка языка ДРАКОН и системы программирования началась в 1986 году. Через 11 лет на базе ДРАКОНа была построена автоматизированная Технология разработки алгоритмов и программ (CASE-технология) под названием «ГРАФИТ-ФЛОКС».

Затем язык ДРАКОН и система ГРАФИТ-ФЛОКС поступили в эксплуатацию. С их помощью были разработаны многие алгоритмы и программы разгонного блока космических аппаратов ДМ-SL Международного проекта «Морской старт». В общей сложности на разработку и отработку программного обеспечения и других элементов системы управления ушло три года. К 1999 году все работы были закончены. Система была готова к старту.

Первый пуск ракетного комплекса «Морской старт» состоялся 28 марта 1999 года. Он произошёл в 5 часов 30 минут по московскому времени (27 марта 1999 г. в 18 часов 30 минут по тихоокеанскому времени) со стартовой платформы «Одиссей» в Тихом океане в районе островов Кирибати. Этот пуск был ответственным испытанием языка ДРАКОН и технологии «ГРАФИТ-ФЛОКС». Он продемонстрировал их эффективность и надежность. С тех пор по программе «Морской старт» проведено свыше 30 ракетных пусков.

Язык ДРАКОН используется и в других космических программах, например: разгонный блок космических аппаратов «Фрегат»; модернизированная ракета-носитель тяжелого класса «Протон-М»; разгонный блок космических аппаратов ДМ-SLБ (проект «Наземный старт»); разгонный блок космических аппаратов ДМ-03; первая ступень южнокорейской ракеты-носителя легкого класса KSLV-1 (Korean Space Launch Vehicle #1); ракета-носитель легкого класса Ангара 1.2; ракета-носитель тяжелого класса Ангара-А5 и др.

Поскольку результаты использования ДРАКОНа были стабильно высокими, руководство Пилюгинского центра приняло решение об использовании ДРАКОН-технологии в последующих проектах.

Разработка инструментальных средств языка ДРАКОН для широкого применения

Распространение языка ДРАКОН можно разделить на два этапа. На начальном этапе информация о ДРАКОНе была недоступна для пользователей, так как работы по ракетно-космическим программам и, в частности, по космической программе Буран были строго засекречены как составляющие государственную тайну. В тот период область применения ДРАКОНа была ограничена ракетно-космической техникой. Язык применялся и применяется в Пилюгинском центре при разработке программ для бортового компьютера «Бисер», установленного на борту ракет-носителей и разгонных блоков космических аппаратов.

На втором этапе, в результате политики гласности, свободы слова, снятия неоправданных ограничений на распространение информации и рассекречивания ранее закрытых сведений и проектов появилась возможность приспособить инструментальные средства языка ДРАКОН для гражданских нужд широкого применения, то есть создать их в несекретном варианте для эксплуатации на персональных компьютерах и др. Сфера применения языка стала постепенно расширяться. Началось использование дракон-схем за рамками ракетно-космической техники — для решения задач в различных предметных областях и отраслях экономики.

Этому способствовал ряд обстоятельств. В открытой литературе стали доступны публикации по языку ДРАКОН. Часть этих материалов появилась в Интернете в конце 2006 года.

Геннадий Тышов разработал программу «ИС Дракон» (для ОС Windows). Степан Митькин (Норвегия), по своей инициативе (независимо от Пилюгинского центра), разработал программу «DRAKON Editor» (для ОС Windows, Mac, Linux). Программы выложены для свободного скачивания. Пользователи программ получили возможность формировать и использовать визуальные алгоритмы.

Parser — объектно-ориентированный скриптовый язык программирования, созданный для генерации HTML-страниц на веб-сервере с поддержкой CGI. Разработан Студией Артемия Лебедева и выпущен под лицензией, сходной с GNU GPL. Язык специально спроектирован и оптимизирован для того, чтобы было удобно создавать простые сайты. Работа с формами, cookies, табличными файлами, базами данных и XML — часть языка, а модульность языка позволяет легко наращивать функциональность. Последнее обновление 3.4.5 состоялось 28 апреля 2020 года.

Parser в известном смысле — макроязык, в котором нет оператора print. Весь текст, набранный в исходном файле, по сути, большой оператор print, а конструкции Parser являются погруженными в текст. Получается, что вы не пишете программу, которая выводит текст — наоборот, в имеющийся текст вы добавляете логику и организацию, блоки (методы), на которые вы разбиваете HTML-код.

В каждый каталог, с которым будет работать Parser, можно класть файл auto.p, в котором будут описаны основные настройки и методы. Особенностью является наследственность (наличие в нескольких каталогах по пути к скрипту) и безусловное подключение этого файла. Таким образом, вывод меню можно описать лишь в одном файле, и он автоматически будет применен ко всему сайту.

Некоторые ограничения (например, работа с изображениями) легко устраняются использованием сторонних консольных утилит и shell-скриптов.

Jancy разработан компанией Tibbo с российскими корнями и московским представительством. Это компилируемый язык, но скриптовый по назначению. Его особенности:

*Безопасные толстые указатели на данные и безопасная адресная арифметика — при этом с поддержкой стекового выделения;
*Высокая степень ABI-совместимости и совместимости на уровне исходных кодов с C, что выливается в возможность вызывать функции скрипта напрямую их хостового C++ приложения, а также копипастить определения C-структур;
*Реактивное программирование (Excel-подобный пересчёт специально объявленных выражений при изменении правой части);
*Исключения в виде синтаксического сахара над стандартной моделью кодов ошибок;

Пифагор — функционально-потоковый язык программирования, предназначенный для разработки переносимых (архитектурно-независимых) параллельных программ.

Язык «Пифагор» разработан в Красноярском Государственном Техническом Университете в 1995 году, в настоящее время разработка ведется в Институте Космических и Информационных Технологий Сибирского Федерального Университета.

Название является сокращением фразы «Параллельный Информационно-Функциональный АлГОРитмический» или «Parallel Informational and Functional AlGORithmic».

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

РЕФАЛ (РЕкурсивных Функций АЛгоритмический) — один из старейших функциональных языков программирования, ориентированный на символьные вычисления: обработку символьных строк (например, алгебраические выкладки); перевод с одного языка (искусственного или естественного) на другой; решение проблем, связанных с искусственным интеллектом. Соединяет в себе математическую простоту с практической направленностью на написание больших и сложных программ.

Отличительной чертой языка является использование сопоставления с образцом и переписывания термов как основного способа определения функций.

Первая версия РЕФАЛа была создана в 1966 году Валентином Турчиным в качестве метаязыка для описания семантики других языков. Впоследствии, в результате появления достаточно эффективных реализаций на ЭВМ, он стал находить практическое использование в качестве языка программирования. В настоящее время основными диалектами языка являются РЕФАЛ-2 (1970-е), РЕФАЛ-5 (1985) и РЕФАЛ+ (1990), отличающиеся друг от друга деталями синтаксиса и набором дополнительных средств, расширяющих первоначальный вариант.

ПРОФТ — язык программирования, разработанный в 2000 году в качества опыта по созданию языка программирования основанного на русском языке.

Особенностями языка являются использование русского синтаксиса, как средства повышения производительности программирования.

Каждая структурная единица программы, называемая предложением, заканчивается точкой. Соответственно, десятичная часть числа отделяется запятой.

Кроме структурного (процедурного) подхода, в ПРОФТе широко используется возможность выполнения произвольного кода в контексте программы с помощью действия ВыполнитьТекст. Это позволяет широко использовать хранилище кода, избагая таким образом избыточного кодирования.

До 2006 года ПРОФТ-интерпретатор и Система программирования ПРОФТ 5 были написаны на языке программирования VisualBasic. Из-за низкого быстродействия при обработке большого объема данных было решено полностью переписать интерпретатор на языке Си. Новый интерпретатор создан только с использованием API-функций, без применения сторонних библиотек (таких, например, как MFC). Начиная с лета 2007 года система программирования ПРОФТ 5 была полностью переписана на ПРОФТе.

«Эль-76» — язык программирования высокого уровня, основанный на использовании русскоязычной лексики и предназначенный для советских многопроцессорных вычислительных комплексов «Эльбрус».

Его разработка была осуществлена в 1972—1973 годах в Институте точной механики и вычислительной техники АН СССР имени С. А. Лебедева (СССР), изначально он носил название «Автокод Эльбрус», затем ему было дано наименование «Эль-76».

Как и большинство языков того времени, он поддерживает парадигму структурного программирования (декомпозицию программы на автономные процедуры), кроме этого в нём реализованы методики линейных последовательностей операторов, альтернативных сочленений с выбором альтернативы по условию или по номеру альтернативы, циклов и параллельно выполняемых ветвей. «Эль-76» обладает специальными средствами обработки особых случаев, которые называются «структурными переходами» и «ситуациями».

«Эль-76» органически объединяет в себе некоторые низкоуровневые свойства машинного языка, непосредственно контролирующего функции устройств ЭВМ, и ряд высокоуровневых средств во многом аналогичных Алголу-68. Одной из основных особенностей «Эль-76» считалась реализованная возможность хранения в компьютерной памяти информации о типе объявленной переменной вместе с её значением и её изменениями в процессе выполнения кода.

Участники создания языка: Б. А. Бабаян, В. М. Пентковский, С. В. Семенихин, С. В. Веретенников, В. Ю. Волконский, С. М. Зотов, А. И. Иванов, Ю. С . Румянцев, В. П. Торчигин, М. И. Харитонов, В. С. Шевеков.

ОСМО — язык программирования высокого уровня, использующий русскую лексику. Разработан в 1980-е годы в СССР. ОСМО сокращение от словосочетания: языковые Средства Общесистемного Математического Обеспечения систем обработки экономической информации (ОСМО СОЭИ). Язык разработан для решения задач систем обработки экономической информации.

ОВСЕИ — язык программирования высокого уровня, использующий русскую лексику, используемый для записи и решения экономических задач. Разработан в 1980-е годы в СССР. ОВСЕИ сокращение словосочетания язык Описания Вывода Составных Единиц Информации. В этом языке действия ЭВМ задаются переменными (именуются реквизитами), служебными словами и знаками.

ПРОЗА — язык программирования высокого уровня, использующий русскую лексику. Разработан в 1980-е годы в СССР. ПРОЗА является языковыми средствами описания постановки задач систем обработки экономической информации. Проза должна была применяться на предприятиях СССР. Название происходит от ПРограмма Описания ЗАдач.

ЯМБ — язык программирования, разработанный в конце 1970-х годов в СССР, используемый для бухгалтерских записей, учёта и статистики. Использовался на машинах ЭБМ Искра-554, Искра-555, Искра-2106, Нева-501. ЯМБ — сокращение слов Язык Машин Бухгалтерских.

Другая версия этого происхождения названия языка ЯМБ — это инициалы руководителя группы его разработки, Ярошевской Марины Борисовны.

Кроме использования в вышеуказанных машинах язык ЯМБ входил также к комплект поставки IBM PC/XT-совместимой ПЭВМ «Искра 1030.11».

АЛМИР-65 — язык программирования, разработанный в СССР в 1965 году в Институте кибернетики АН УССР под руководством академика Виктора Глушкова. Название расшифровывается как «алгоритмический язык для машины инженерных решений». Из названия ясно, что АЛМИР-65 использовался на ЭВМ МИР (Машина для Инженерных Расчётов).

Аналитик — язык программирования, разработан в 1968 г. в Институте кибернетики АН УССР под руководством академика Виктора Михайловича Глушкова. Является развитием языка АЛМИР-65, сохранив с ним совместимость.

Отличительной чертой языка являются абстрактные типы данных, вычисления в произвольных алгебрах, аналитические преобразования.

Был реализован на машинах МИР-2.

Позднее была разработана версия Аналитик-74, реализованная на машинах МИР-3.

На данный момент язык АНАЛИТИК существует в виде системы компьютерной алгебры АНАЛИТИК-2010, которая разрабатывается совместно Институтом проблем математических машин и систем НАН Украины и Полтавским национальным техническим университетом имени Юрия Кондратюка.

Язык системного программирования (машинно-ориентированный язык), задумывался как язык-посредник при трансляции с различных языков. Идея состояла в том, что для каждой аппаратной платформы достаточно было написать транслятор Алмо — и ты уже можешь работать с множеством языков программирования, которые имели трансляцию в Алмо. Были созданы реализации языка для основных отечественных машин того времени (М-20, БЭСМ-6, Минск 2, Урал 11) и трансляторы с Алгола-60 и ФОРТРАНа в Алмо, причем все трансляторы также были написаны на Алмо и “раскручены” на всех этих машинах.

«. название языка — Сигма — неожиданно очень удачно стало соответствовать сути разработанного языка, которую можно описать как «Символьный Генератор и Макроассемблер».
Всего в истории языка Сигма было три его реализации: на М-20, на БЭСМ-б и на самом языке Сигма. Первая, конечно самая памятная, т.к. это была мол первая работа в области системного программирования (да и вообще первая работа). Вторая была выполнена на лучшей, по моему мнению, отечественной машине БЭСМ-6. Третья опиралась на вторую, была раскручена сама через себя и могла генерировать программы как для БЭСМ-6, так и для СМ-4 и ЕС ЭВМ.»

Центральным звеном проекта БЕТА был Внутренний язык, который должен был стать единым языком-посредником в БЕТА-системе «наибольшим общим делителем» входных языков и «наименьшим общим кратным» выходных машин. Кроме этой своей роли промежуточного языка, позволяющего уменьшить число путей в схеме m -языковой n -машинной трансляции с m * n до m + n , внутренний язык должен был также явиться средой оптимизирующих преобразований, т.е. он ещё должен был быть достаточно богат, чтобы на нем было возможно представить результаты оптимизации; например, экономию совпадающих подвыражений в операторе a [ i , j , k ] := b [ i , j , k ] + c [ i , j , k ].

В итоге система БЕТА была реализована для языков Симула-67, Паскаль, Модула-2, Ада (подмножество) и выходных машин БЭСМ6 и СМ-4. Был реализован скромный набор оптимизаций — несмотря на обширные замыслы, более скромный, чем в системе Альфа. В общем, сравнительно с Альфа-системой, проект БЕТА следует признать неудачным.

ЯРМО (Язык Реализации, Машинно-Ориентированный)

Машинно-ориентированный язык программирования, построенный для ЭВМ БЭСМ-6 и отражающий все тогдашние веяния в информатике. Язык программирования ЯРМО разработан в 1973 году в Новосибирском филиале ИТМиВТ. Впоследствии было разработано несколько версий языка. На нём в 1977 году была создана операционная система «Феликс» для СВС — первая в стране ОС на языке высокого уровня.

КуМи́р (Комплект Учебных МИРов или Миры Кушниренко) — язык и система программирования, предназначенная для поддержки начальных курсов информатики и программирования в средней и высшей школе. Основана на методике, разработанной во второй половине 1980-х годов под руководством академика А. П. Ершова. Эта методика широко использовалась в средних школах СССР и России. В системе КуМир используется придуманный А. П. Ершовым школьный алгоритмический язык — простой алголоподобный язык с русской лексикой и встроенными командами управления программными исполнителями (Робот, Чертёжник).

В 1995 году «КуМир» был рекомендован Министерством образования РФ в качестве основного учебного материала по курсу «Основы информатики и вычислительной техники» на основе учебника А. Г. Кушниренко, Г. В. Лебедева и Р. А. Свореня.

В настоящее время разработана и развивается новая версия КуМира, использующая библиотеку Qt и работающая в операционных системах Linux и Windows. Постановка задачи на разработку новой версии была выполнена А. Г. Кушниренко и А. Г. Леоновым. Разработка ведётся пущинской группой сотрудников НИИСИ РАН под руководством М. А. Ройтберга.

В 2020 г. в ФГУ ФНЦ Научно-исследовательский институт системных исследований РАН запланировано развитие и поддержка системы КуМир.

РАПИРА — Расширенный Адаптированный Поплан-Интерпретатор, Редактор, Архив — процедурный язык программирования. Разработан в начале 1980-х годов в СССР в качестве средства перехода от более простых языков (в частности, учебного языка Робик) к языкам высокого уровня. Синтаксис построен на основе русской лексики. Язык использовался в школах для изучения информатики. Преподавание на Рапире велось в «Заочной школе программирования» в журнале «Квант» с начала 1980 года.

Как видно из расшифровки названия языка, язык РАПИРА изначально был реализован как набор макрорасширений на базе языка ПОПЛАН — интерпретатора языка POP-2. для БЭСМ-6. Некоторые синтаксические конструкции были перенесены из языка Сетл.

Язык Рапира был реализован для БЭСМ-6, а затем для первой советской ПЭВМ «Агат» в начале 1980-х годов силами нескольких студентов и выпускников Новосибирского государственного университета под началом Г. А. Звенигородского, при участии школьников, в том числе на Всесоюзных летних школах юных программистов (ВЛШЮП, 1982 г.). По своим возможностям язык не уступал другим известным на то время учебным языкам.

Существовали также реализации языка Рапира для КУВТ УКНЦ и Ямаха КУВТ, а также для ЕС ЭВМ (1982 г., руководитель разработки на алголе-68 — проф. А. Н. Терехов).

Учебный алгоритмический язык

Уче́бный алгоритми́ческий язы́к — формальный язык, используемый для записи, реализации и изучения алгоритмов. В отличие от большинства языков программирования, не привязан к архитектуре компьютера, не содержит деталей, связанных с устройством машины.

При изучении информатики в школах для изучения основ алгоритмизации применяется т. н. Русский алгоритмический язык (школьный алгоритмический язык), использующий понятные школьнику слова на русском языке. Алголо-подобный алгоритмический язык с русским синтаксисом был введён в употребление академиком А. П. Ершовым в середине 1980-х годов в качестве основы для «безмашинного» курса информатики. Впервые был опубликован в учебнике «Основы информатики и вычислительной техники» в 1985 г. Язык также применялся для записи алгоритмов в учебнике А. Г. Кушниренко, Г. В. Лебедева и Р. А. Свореня «Основы информатики и вычислительной техники» для 9-10 классов (1990 г. и последующие переиздания; общий тираж составил 7 млн экземпляров).

Ро́бик — язык программирования, созданный в СССР для обучения основам программирования школьников младших классов (8-11 лет). Язык был разработан в 1975 году, а затем доработан для включения в систему программного обеспечения «Школьница» для компьютера «Агат».

В языке используется синтаксис, построенный на русской лексике.

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

Альфа-язык — расширенный диалект языка программирования Algol 60. Разработан в СССР в 1960-х гг под руководством Андрея Петровича Ершова.

Язык был дополнен типом «комплексный», над которым можно было выполнять все арифметические операции. В языке Альфа появилась возможность работы с массивами целиком, для чего было введено понятие многомерного значения и многомерной переменной и ряд других расширений, призванных приблизить Алгол к естественной математической нотации.

АЛГЭК — язык программирования для описания экономических задач. Разработан в 1964 как расширение универсального алгоритмического языка АЛГОЛ-60 средствами языка КОБОЛ. А. имеет аппарат для описания составных единиц информации (документов и их массивов), текстовых величин и процессов их обработки с доступом ко всем элементам. Задание форматов величин позволяет иметь разветвленную систему процедур ввода и вывода. Транслятор с А. разработан для машины «МИНСК-22».

АЛГЭМ — язык программирования для описания экономических и вычислительных задач, построенный на базе АЛГОЛ-60 и КОБОЛл. Разработан в 1964—66. По сравнению с АЛГОЛ-ом А. содержит дополнительно: строчные (текстовые) переменные и выражения, используемые при операциях над символьной информацией, составные переменные и массивы, позволяющие представлять в машине различные формы экономических документов, указания видов переменных, позволяющие задавать для значений переменных состав и расположения различных типов символов (буквы, цифры и т. д.), что важно для редактирования значений при выдаче на печать. Транслятор с языка А. реализован на ЦВМ «Минск-22».

«СИРИУС» — система разговорного программирования для решения широкого класса задач, включающих в себя аналитические преобразования в комплексе с обычными вычислениями. Ее составными частями являются одноименные входной язык и транслятор полуинтерпретирующего типа для машин «М-222», однако входной язык и принципы построения системы независимы от конкретной машины. Система разработана в СССР в 1970.

Предметная область входного языка охватывает большинство объектов матем. анализа: вещественные и комплексные числа, векторы и матрицы с аналитическими компонентами, функции, операторы ∑, П, ∫, lim, max, min и т. п. Входной язык содержит символ «∞», что позволяет естественным образом использовать суммы, интегралы с бесконечными пределами, операторы предельного перехода и т. д. Возникновение ситуаций типа деления на нуль и переполнения разрядной, сетки которые обычно приводят к прерываниям при выполнении программы, в системе «С.» приводят к появлению символа «∞». Система позволяет выполнять следующие преобразования: раскрытие скобок, приведение подобных членов, упрощение аналитических выражений, разложение в ряды, замена переменных и подстановка одних выражений в другие, решение уравнений в буквенном виде, разложение на множители, аналитические операции над матрицами и векторами и т. д.

Программа на входном языке состоит из последовательности формул, выражений, уравнений и предписаний, которые представляют собой русские предложения в форме повелительного наклонения.

При решении задачи возможен многократный обмен информацией между человеком и машиной, т. е. «разговор» человека с машиной (поэтому система наз. разговорной).

ЯЗЫК МАШИНЫ «МИР»

ЯЗЫК МАШИНЫ «МИР» — язык программирования, ориентированный на описание алгоритмов решения инженерных и научно-технических задач и включающий средства общения человека с машиной в диалога режиме. Программы на Я. м. «МИР» просты по структуре и хорошо обозримы. Программа состоит из операторной части — последовательности операторов и описательной части — последовательности описаний. Алфавит языка включает в себя заглавные буквы рус. и лат. алфавитов, десятичные цифры, знаки операций (в т. ч. знаки ∑, П, ∫), знаки отношений , скобки, разделители, знаки элементарных ф-ций и служебные слова, взятые из рус. языка. В языке различают два типа данных — целые и десятичные, над которыми определены арифметические операции. Описания типов в языке нет, тип данного определяется по контексту. Отличительной особенностью языка является явное задание в программе указания о разрядности (количества цифр в мантиссе десятичных чисел, которые сохраняются при выполнении операций над числами), с которой должен быть реализован алгоритм. Это соответствует вычисл. возможностям ЭВМ семейства «МИР».

Еще упомяну несколько языков программирования:

*Аналитик-74 — язык программирования, использовавшийся на советских ЭВМ серии МИР.

*Глагол — основанный на русском языке компилируемый процедурный язык программирования со статической типизацией, сходный с языками Оберон и Паскаль.

*ЯАП — язык автоматического программирования, использовавшийся на советских ЭВМ Наири и Наири-2.

*Эпсилон — машинно-ориентированный язык программирования, разработанный в 1967 году в новосибирском академгородке.

*Jpho — язык программирования стекового типа, реализованный на Java. Не требует компиляции, интегрируется с Java, может интерпретировать разные тексты.;

Сценарии: высокоуровневое программирование для XXI века

Джон Остераут Компания Scriptics, ouster@scriptics.com Языки программирования систем Языки высокого уровня Типизация Языки сценариев Бестиповость Интерпретируемость Разные средства для разных задач Рост значимости языков сценариев Программисты по случаю Роль объектов

В условиях постоянного роста производительности компьютеров и изменений в масштабах и номенклатуре приложений все большую значимость приобретает такой инструмент, как языки сценариев (scripting languages). Одно из фундаментальных изменений в подходе к программированию за последние 15 лет связано с переходом от традиционных языков программирования систем, таких как Си или С++, к языкам описания сценариев наподобие Perl или Tcl. На практике многие специалисты так или иначе вовлечены в этот процесс, но далеко не все осознают, что на самом деле происходит. В данной статье мы попытаемся объяснить, почему в следующем столетии языки сценариев лучше подойдут для решения многих задач, чем языки программирования систем.

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

Два вида языков хорошо дополняют друг друга, и большинство компьютерных платформ, начиная с 60-х гг., в той или иной форме их включали. Обычно они используются совместно в компонентных средах, где компоненты создаются при помощи языков программирования систем и соединяются при помощи языков сценариев. Однако непрерывный рост производительности компьютеров, появление новых языков сценариев, растущая значимость графических интерфейсов пользователя и компонентных архитектур и, наконец, экспансия Internet чрезвычайно расширили сферу применения языков сценариев. Эти тенденции останутся в силе в течение следующего десятилетия, и соответственно будет расти число приложений, написанных полностью на языках сценариев, в то время как языки программирования систем станут использоваться в основном для создания компонентов.

Языки программирования систем

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

В конце 50-х начали появляться языки более высокого уровня: Лисп, Фортран и Алгол, в которых уже не было однозначного соответствия между операторами и машинными командами; компилятор транслирует каждый оператор исходной программы в последовательность двоичных команд. В дальнейшем линия Алгола продолжилась в целом ряде языков программирования систем: PL/1, Паскаль, Си, С++ и Java. Постепенно они почти полностью вытеснили языки ассемблера при разработке больших приложений.

Языки высокого уровня

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

  • назначение регистров выполняется компилятором, и программистам не требуется писать код для пересылки информации между регистрами и памятью;
  • последовательности вызова процедур генерируются автоматически, а программисты могут не беспокоиться о пересылке аргументов в стек вызова и из него;
  • для управляющих структур можно использовать простые ключевые слова, такие как while и if — компилятор сам генерирует все необходимые для их реализации машинные команды.

В среднем, каждая строка кода в языках программирования систем транслируется примерно в пять машинных команд, сравнительно с одной командой на строку в ассемблерной программе. В неформальном анализе восьми файлов на Си, написанных разными людьми, я обнаружил, что это отношение простирается от трех до семи команд на строку кода [1]; в своем известном исследовании Кейперс Джоунс (Capers Jones) показал, что для заданной задачи по сравнению с языками программирования систем языки ассемблера требуют написания большего количества строк кода в отношении от трех до шести раз [2]. Программисты могут писать примерно одно и то же количество строк кода за год независимо от языка [3], поэтому языки программирования систем позволяют создавать приложения быстрее, чем языки ассемблера.

Типизация

Еще одно коренное отличие языков ассемблера от языков программирования систем — в типизации. Я использую термин типизация (typing) для обозначения той степени, с которой смысл информации специфицируется заранее — до ее использования. В сильно типизированном языке программист декларирует, как каждая порция информации будет использована, а язык предотвращает ее использование другим способом. В слабо типизированном языке не существует априори заданных ограничений на использование информации; ее смысл определяется только способом, которым она используется.

Сами по себе современные компьютеры принципиально бестиповые. Любое слово памяти может хранить величину любого типа, будь то целое или вещественное число, указатель или команда. Смысл (значение) величины определяется тем, как она применяется. Если счетчик команд указывает на слово памяти, то оно трактуется как команда; если на слово ссылается команда сложения целых, то оно трактуется как целое, и т.д. Одно и то же слово может использоваться в разных случаях по разному.

Современные языки программирования систем, напротив, сильно типизированы, например:

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

Типизация обеспечивает ряд преимуществ. Во-первых, она делает большие программы более управляемыми благодаря точному определению используемых сущностей и их отличий от других. Во-вторых, компиляторы используют информацию о типах для обнаружения определенных видов ошибок, таких как попытка задействовать величину с плавающей точкой как указатель. В-третьих, типизация повышает эффективность исполнения, позволяя компилятору генерировать специализированный код. Например, если компилятор «знает», что переменная всегда содержит величину целого типа, то он может генерировать целочисленные команды для манипулирования этой переменной; если же информации о типе переменной нет, компилятор должен генерировать дополнительные команды для проверки типа переменной во время исполнения.

Языки сценариев

Языки Perl [4], Python [5], Rexx [6], Tcl [7], Visual Basic и оболочки Unix (shell) представляют стиль программирования, отличный от присущего языкам программирования систем. Этот стиль предполагает, что набор полезных в контексте решаемой задачи компонентов уже существует и остается должным образом их скомбинировать. Например, Tcl и Visual Basic могут служить для размещения на экране набора управляющих элементов пользовательского интерфейса, а написанные на shell командные файлы позволяют собрать программы-фильтры в конвейеры. Хотя языки сценариев часто используются для расширения свойств компонентов, они мало пригодны для программирования сложных алгоритмов и структур данных, обычно как раз и обеспечиваемых компонентами. Вот почему языки сценариев часто называют склеивающими языками (glue languages) или языками интеграции систем (system integration languages).

Бестиповость

Существует тенденция делать языки сценариев бестиповыми для упрощения связывания компонентов. Все сущности выглядят и ведут себя одинаковым образом, а значит могут стать взаимозаменяемыми. Например, в Tcl или Visual Basic переменная может в один момент содержать строку, а в следующий — целое число. Код и данные часто взаимозаменяемы, так что программа может генерировать другую программу и затем исполнять ее. Универсальным способом представления для различных сущностей программы в языках сценариев служат цепочки символов.

Языки сценариев весьма облегчают задачу «сцепления» компонентов. В них нет никаких заведомых ограничений — все компоненты и величины представляются единообразно, могут использоваться в любой ситуации. Компоненты, спроектированные для одной цели, могут в дальнейшем применяться для совершенно других целей, о которых и не думали их создатели. Например, в shell все программы-фильтры читают поток символов с устройства ввода и пишут его в устройство вывода. Любые две программы могут быть связаны путем присоединения выхода одной из них ко входу другой. Следующая команда shell соединяет вместе три фильтра для подсчета числа строк в выборке, содержащей слово «scripting»:

Программа select читает текст, выбранный для вывода на дисплей, и выдает его в качестве своего выхода; программа grep, получив его на входе, выдает на выход строки, содержащие слово «scripting»; наконец, программа wc подсчитывает количество строк на своем входе. Каждая из этих программ может быть использована во многих других ситуациях при выполнении разнообразных задач.

Сильно типизированная природа языков программирования систем не способствует повторному использованию кода, а заставляет программистов создавать массу однотипных интерфейсов, каждый из которых рассчитан на объекты специфических типов. Что же до объектов других типов, то компилятор запрещает их использование с этими интерфейсами, даже если это было бы полезно. Поэтому, чтобы использовать новый объект с существующим интерфейсом, необходимо запрограммировать преобразование типа этого объекта в допустимый тип. Это в свою очередь потребует перекомпиляции части или всего приложения, но поскольку многие приложения распространяются в двоичной форме, подобная модификация оказывается попросту невозможной.

Чтобы оценить по достоинству бестиповые языки, рассмотрим следующую команду на Tcl:

Эта команда создает новую управляющую кнопку, предназначенную для отображения цепочки символов шрифтом Times размером 16 кеглей, и печатает короткое сообщение, когда пользователь щелкнет по этой кнопке. Команда смешивает шесть разных типов сущностей в один оператор: имя команды (button), управление кнопкой (.b), имена свойств ( -text, -font, -command), простые строки (Hello! и hello), описание шрифта (Times 16), включающее имя гарнитуры (Times) и размер (16), и, наконец, еще одну Tcl-команду (puts hello). Все эти сущности представляются единообразно, посредством цепочек символов. В этом примере свойства могут задаваться в любом порядке, а неспецифицированным свойствам дается значение по умолчанию.

При реализации на Java тот же пример требует 7 строк кода в двух методах. При использовании C++ и библиотеки базовых классов MFC потребуется около 25 строк в трех процедурах [1]. Только установка шрифта требует нескольких строк:

Большая часть этого кода — следствие сильной типизации. Для установки шрифта кнопки управления должен быть вызван метод SetFont, но этому методу в качестве аргумента следует передать указатель на объект Cfont, что, в свою очередь, требует, чтобы новый объект был объявлен и инициализирован. Для инициализации объекта Cfont надо вызвать его метод CreateFont, но он имеет жесткий интерфейс, требующий задания 14 аргументов. В Tcl же существенные характеристики шрифта можно использовать без каких-либо деклараций или преобразований. Кроме того, Tcl позволяет включить поведение управляющей кнопки прямо в команду, которая эту кнопку создает, в то время как на C++ и Java для этого приходится писать отдельно декларируемый метод. (На практике с таким примером, вероятно, проще всего было бы справиться с помощью графической среды разработки, которая скрывает от пользователя сложность базового языка. Пользователь просто вводит величины свойств в форму, и среда разработки генерирует код. Однако в более сложных ситуациях, таких как назначение величин свойств в зависимости от различных условий или при необходимости генерировать интерфейсы «на лету», программисту все равно приходится оперировать базовым языком).

Может показаться, что бестиповая природа языков сценариев не позволяет своевременно распознавать ошибки, но на практике такие языки оказываются столь же безопасными, как и языки программирования систем. Допустим, в примере с кнопкой размер шрифта задан бессмысленной цепочкой наподобие ‘IO’. Языки сценариев способны обнаружить такую ошибку в самый последний момент, при выполнении команды. Сильная типизация позволяет выявлять ошибки в процессе компиляции, так что в проверках во время исполнения уже нет нужды. Однако платой за эффективность являются жесткие ограничения, которые приводят к усложнению кода и снижению гибкости программ.

Интерпретируемость

В то время, как языки программирования систем обычно являются компилируемыми, языки сценариев почти всегда интерпретируемые. Когда постоянная перекомпиляция не требуется, процесс разработки идет быстрее. Интерпретаторы делают его более гибким, позволяя вносить изменения в программы непосредственно во время их исполнения. Например, многие инструментальные среды для синтеза и анализа интегральных схем включают интерпретатор Tcl; в них сценарии на Tcl используются как для специфицирования исследуемых объектов, так и для управления работой самого инструментария. Интерпретаторы позволяют реализовать такой мощный метод, как генерация программы «на лету» — во время исполнения. Например, опирающийся на Tcl браузер способен выполнять синтаксический разбор HTML-страницы, транслируя ее в сценарий на Tcl путем применения нескольких последовательных подстановок регулярных выражений. Затем этот сценарий исполняется и страница появляется на экране.

Языки сценариев менее эффективны, чем языки программирования систем — именно вследствие использования интерпретаторов вместо компиляторов, а также из-за того, что базовые понятия языка выбираются из соображений выразительной мощности и простоты, а не в расчете на максимально эффективную проекцию на архитектуру компьютера. Например, языки сценариев часто используют цепочки символов переменной длины тогда, когда языки программирования систем прибегают к фрагментам памяти, длина которых кратна величине машинного слова; прибегают к кэш-таблицам там, где языки программирования систем работают с индексированными массивами.

К счастью, эффективность не является главным требованием к языкам сценариев. Фрагменты на них по размеру обычно значительно уступают приложениям, написанным на языках программирования систем; соответственно, общая производительность склеенной с помощью языка сценариев программы определяется, в основном, производительностью отдельных компонентов — а они, как правило, реализуются на языках программирования систем.

Языки сценариев имеют более высокий уровень, чем языки программирования систем в том смысле, что один оператор в среднем способен выполнить намного больше работы (это сотни или даже тысячи машинных команд), в то время как оператор в языках программирования систем выполняет около пяти машинных команд (рис. 1). Частично эта разница опять же связана с интерпретируемой природой языков сценариев, но в основном определяется тем, что элементарные операции в нем обладают более богатой функциональностью. Например, в языке Perl инициировать подстановку регулярных выражений так же легко, как выполнить сложение целых чисел. В Tcl переменную легко трассировать с одновременным учетом возникающих побочных эффектов, что, в частности, можно использовать для непрерывного обновления ее значения на экране.

Рисунок 1.
Сравнение языков на основе уровня программирования и силы типизации

Языки сценариев особенно удобны для быстрой разработки приложений — таблица 1, быть может не слишком строго, но наглядно иллюстрирует этот факт. В таблице описаны несколько приложений, либо сначала реализованные на языке программирования систем, а затем переписанные на языке сценариев, либо наоборот. «Сценарная» версия во всех случаях требовала меньше кода и времени разработки; коэффициент, выражающий эту разницу, варьировался от 2 до 60. Сценарные языки были менее эффективны, когда использовались для первой реализации; впрочем, и без того очевидно, что новая реализация всегда выигрывает от осмысления первого опыта. Так или иначе, от 5 до 10 — более правдоподобное значение коэффициента, выражающего разницу между написанием сценария и программированием систем, чем приведенные в таблице экстремальные значения. Результаты зависят, естественно, и от разрабатываемого приложения. В последнем примере из таблицы часть приложения, связанная с графическим пользовательским интерфейсом, реализована с помощью технологии склейки — в отличие от собственно моделирующей части; это объясняет, почему в данном случае сценарный подход обеспечил меньше преимуществ, чем в других приложениях.

Приложение Сравнение Фактор «кода» * Фактор «усилий» ** Комментарии
База данных (Кен Кори) Версия на Tcl: 1 день Версия на C++: 2 месяца нет данных 60 Версия на С++ реализована первой; версия Tcl обладает большей функциональностью
Тестирование и установка компьютерной системы (Энди Белси) Тест на Cи: 272 тыс. строк, 120 месяцев; приложение на Си: 90 тыс. строк, 60 месяцев Версия на Tcl/Perl: 7700 строк, 8 месяцев 47 22 Версия на Си реализована первой; версия на Tcl/Perl заменила оба приложения на Си
Библиотека для базы данных (Кен Кори) Версия на С++: 2-3 месяца Версия на Tcl: 1 неделя нет данных 8-12 Версия на С++ реализована первой
Сканирующая программа защиты (Джим Грэхам) Версия на Си: 3000 строк Версия на Tcl: 300 строк 10 нет данных Версия на Си реализована первой; версия на Tcl имела большую функциональность
Графики добычи нефти (Дан Шенк) Версия на Си: 3 месяца Версия на Tcl: 2 недели нет данных 6 Версия на Tcl реализована первой
Диспетчер очередей (Пол Хили) Версия на Си: 1200 строк, 4-8 недель Версия на Tcl: 500 строк, 1 неделя 2,5 4-8 Версия на Си реализована первой, не имела комментариев; версия на Tcl обладает большей функциональностью и снабжена комментариями
Электронные таблицы Версия на Си: 1460 строк Версия на Tcl: 380 строк 4 нет данных Версия на Tcl реализована первой
Система моделирования и графический пользовательский интерфейс (Рэнди Ванг) Версия на Java: 3400 строк, 3-4 недели Версия на Tcl: 1600 строк, меньше 1 недели 2 3-4 Версия на Tcl обладала примерно на 10-20% большей функциональностью и была реализована первой
* Фактор «кода» есть отношение строк кода для двух реализаций
** Фактор «усилий» есть отношение времен разработки (в большинстве случаев две версии реализовывались различными людьми)

Информация в таблице была получена от нескольких разработчиков на Tcl в ответ на статью, помещенную в comp.lang.tcl newsgroup.

Разные средства для разных задач

Языки сценариев не могут заменить языки программирования систем (впрочем, верно и обратное). Каждый из двух типов языков имеет собственную нишу. Если при создании приложений необходимо склеивать компоненты и интегрировать системы, то языки сценариев позволят сделать это в 5-10 раз быстрее. В то же время особенности языков программирования систем облегчают реализацию сложных алгоритмов и структур данных. Кроме того, языки программирования систем позволяют писать программы в 10-20 раз более быстрые, чем языки сценариев, поскольку содержат намного меньше операций проверки во время исполнения.

Можно сделать вывод, что оба типа языков должны использоваться в сочетании друг с другом. Например, системные программисты пишут компоненты ActiveX на Си, а их менее искушенные коллеги могут затем использовать эти компоненты при создании приложений с помощью Visual Basic. В Unix несложно писать командные файлы на shell, инициирующие работу приложений на Си. Одна из причин популярности Tcl — его способность к расширению путем создания новых команд, реализованных на Си.

Рост значимости языков сценариев

Итак, языки сценариев существуют долгие годы, но с недавних пор они начали играть более важную роль. Это стало результатом действия нескольких факторов. Самый важный из них — переход от простой «смеси» совместно используемых, но отдельно функционирующих приложений к «склеивающим» приложениям. Три слагаемых этого изменения: графические пользовательские интерфейсы, Internet и компонентные интегрированные среды.

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

Мне не приходилось слышать о каких-либо средах быстрой разработки графических пользовательских интерфейсов на основе языка программирования систем. В случае с Windows, Macintosh Toolbox или Unix Motif подобные средства, опирающиеся на Си или C++, всегда оказывались тяжелыми для изучения, неудобными и негибкими. В некоторых из перечисленных систем неплохие графические средства для проектирования экрана скрывают базовый язык — но не в тех случаях, когда дизайнеру приходится программировать, чтобы сгенерировать поведение для элементов интерфейса. Все лучшие среды быстрой разработки графических пользовательских интерфейсов основаны на языках сценариев: Visual Basic, HyperCard и Tcl/Tk.

Экспансия Internet во многом способствовала популяризации языков сценариев. В конце концов, Сеть — не что иное, как склеивающий инструмент. Она не создает новых данных или вычислительных процедур, а просто делает огромное множество уже существующих ресурсов более доступными. Идеальным для большинства задач в Internet был бы язык, способный обеспечить совместную работу всех связанных компонентов — язык сценариев. Например, Perl стал популярным средством для написания сценариев графических пользовательских интерфейсов, а JavaScript оказался удобным инструментом для сценарной разработки Web-страниц.

Третий пример сценарно-ориентированных приложений — компонентные интегрированные среды, такие как ActiveX и JavaBeans. Без хорошего языка сценариев, прямо предназначенного для манипулирования компонентами, потенциал интегрированных сред в значительной мере не получит реального воплощения. Не удивительно, что интегрированные среды завоевали столь большую популярность на ПК — ведь именно на этой платформе Visual Basic обеспечивает удобное средство для сценарно- ориентированных технологий, а на других платформах, например, Unix/CORBA, такого рода средства в компонентную интегрированную среду в явном виде не включены.

Еще одна причина популярности языков сценариев коренится в значительном прогрессе сценарно-ориентированных технологий. Современные языки сценариев Tcl и Perl далеко ушли от своих предшественников. Например, JCL не обеспечивал даже базового взаимодействия, а ранний shell не поддерживал процедур. Впрочем и сегодня сценарные технологии не достигли полной зрелости. Например, Visual Basic не является полноценным языком сценариев — он изначально проектировался как простой язык программирования систем и только затем приобрел свойственные языку сценариев черты.

Важный стимул для совершенствования сценарных технологий — постоянно увеличивающаяся производительность компьютеров. Еще недавно казалось, что единственный способ получить высокопроизводительное приложение — создать его на языке программирования систем, а то и на языке ассемблера. Однако, по сравнению с машинами двадцатилетней давности производительность увеличилась в 100-500 раз и продолжает удваиваться каждые 18 месяцев. Сегодня многие приложения, реализованные на интерпретируемом языке, имеют отличную производительность. Например, сценарий на Tcl может манипулировать множеством в несколько тысяч объектов и при этом обеспечивать приемлемое время отклика. Чем производительнее компьютеры, тем привлекательнее сценарно-ориентированные технологии для создания больших и сложных приложений.

Программисты по случаю

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

Программисты «по случаю» не склонны тратить месяцы на изучение языка, а хотели бы освоить его за несколько часов. В случае языков сценариев это вполне реально. Их легче осваивать, поскольку у них простой синтаксис и обычно опущены сложные конструкции наподобие объектов и потоков. Сравните Visual Basic и Visual C++ — мало кому из непрофессионалов может прийти сама мысль об использовании Visual C++, но очень многие с успехом пишут на Visual Basic.

Уже сегодня количество приложений, написанных на языках сценариев, превосходит число тех, что написаны на языках программирования систем. Это верно и для Unix-систем, в которых функционирует намного больше сценариев на shell, чем программ на Си; и для Windows, где больше приложений на Visual Basic, чем на Си или C++. Конечно, большинство сложных и наиболее распространенных приложений по-прежнему создается на языках программирования систем, так что сопоставление общего количества строк кода или числа установленных копий пока еще говорит в их пользу. Однако, языки сценариев стали основной движущей силой в разработке приложений, и их доля на рынке будет возрастать.

Роль объектов

Языки сценариев не избалованы вниманием экспертов в области языков и программной инженерии, которые сфокусировались на объектно-ориентированных языках программирования систем C++ и Java. Широко распространилось мнение, что именно объектно-ориентированное программирование представляет собой следующий шаг в эволюции языков. Утверждается, например, что такие его особенности, как сильная типизация и наследование сокращают время разработки, усиливают степень повторного использования компонентов и решают многие другие проблемы, включая и те, которые стоят перед языками сценариев.

Но действительно ли выгоды от объектно-ориентированного программирования столь велики? К сожалению, я пока еще не видел надежных количественных данных, чтобы с уверенностью дать утвердительный ответ на этот вопрос. По моему мнению, использование объектов способно принести достаточно скромные дивиденды: возможное увеличение в производительности я оцениваю в диапазоне 20-30%, а вовсе не в два и тем более не в 10 раз. Хорошо известно противоречивое отношение программистского сообщества к C++, а некоторые влиятельные эксперты начинают все громче высказываться вообще против объектно-ориентированного программирования как такового [8]. В любом случае, объекты не увеличивают производительность столь существенно, как сценарная технология, а обеспечиваемые ими преимущества могут быть достигнуты и с помощью языков сценариев.

Объектно-ориентированное программирование не обеспечивает качественного скачка в производительности, так как, в сущности, не повышает уровень программирования, да и не слишком благоприятствует повторному использованию. В таких языках, как С++, программисты, как и раньше, работают с небольшими базовыми элементами, которые должны быть описаны во всех их деталях. В принципе, мощные библиотечные модули могли бы разрешить эту проблему; если бы библиотеки использовались действительно широко, они могли бы повысить уровень программирования. Но на сегодняшний день таких библиотек немного. Сильная типизация большинства объектно-ориентированных языков делает модули весьма специализированными, затрудняя их повторное использование; для совместной работы модулей часто приходится программировать преобразования, транслирующие один тип в другой.

Другая проблема объектно-ориентированных языков — их акцент на наследовании. «Наследование реализации», при котором один класс заимствует код, написанный для другого, — весьма сомнительная идея, приводящая к проблемам при разработке и повторном использовании: реализации классов привязываются друг к другу, так что ни один класс не может быть понят без другого. Подкласс нельзя понять без знания того, как унаследованные методы реализованы в его суперклассе, а суперкласс, в свою очередь, нельзя понять, не зная, какие из его методов наследуются в подклассах. В сложной иерархии классов, ни один отдельный класс не может быть понят без понимания всех других классов в иерархии. Что еще хуже, класс нельзя безболезненно выделить из иерархии для повторного использования. Множественное наследование делает проблему еще более тяжелой. Наследование реализации вызывает взаимное «переплетение» классов и их уязвимость, сходные с теми, что наблюдались, когда сверх меры использовали оператор goto.

Языки сценариев фактически ввели в действие принцип повторного использования. Модель, которой они следуют при создании приложений, предполагает, что необходимые компоненты могут быть встроены в язык программирования систем и затем склеены вместе с помощью языка сценариев. Такое «разделение труда» обеспечивает естественную схему для повторного использования. Компоненты проектируются в расчете на повторное использование, что и реализуется с помощью сценариев, использующих хорошо определенные интерфейсы между компонентами. В Tcl компонентами являются настраиваемые пользователем команды, реализуемые на Си; они выглядят подобно встроенным командам, поэтому их легко использовать в сценариях Tcl. В Visual Basic в качестве компонентов служат элементы ActiveX.

Тем не менее, у объектно-ориентированного программирования действительно есть по крайней мере два полезных свойства. Первое — инкапсуляция: объекты объединяют данные и код способом, скрывающим детали реализации; это облегчает управление разработкой больших систем. Второе — наследование интерфейса, при котором классы обеспечивают одни и те же методы и атрибуты, даже если реализованы по-разному. Это делает классы взаимозаменяемыми и поощряет повторное использование.

К счастью, сильные стороны объектов в языках программирования систем могут быть достигнуты и в языках сценариев, практически каждый из которых в той или иной степени поддерживает объектно-ориентированное программирование. Например, Python является объектно-ориентированным языком сценариев; последняя версия Perl включает поддержку объектов; Object Rexx является объектно-ориентированной версией Rexx, а Incr Tcl — объектно-ориентированное расширение Tcl. При этом сохраняется присущая языкам сценариев бестиповость объектов.

Другие языки

Существует много иных атрибутов языков программирования, кроме типизации и уровня программирования, и имеется немало интересных языков, которые не могут быть однозначно отнесены к «чистым» языкам программирования систем или языкам сценариев. Например, семейство языков Lisp располагается где-то между ними, имея атрибуты, свойственные обоим классам языков. В Lisp впервые были реализованы такие концепции, как интерпретация и динамическая типизация, ставшие непременной принадлежностью языков сценариев, так же как и автоматическое управление памятью и интегрированные среды разработки, ныне используемые в языках обоих типов.

Заключение

Итак, языки сценариев предлагают иные по сравнению с языками программирования систем приоритеты: они пренебрегают заботой об эффективности и силе типизации, но значительно повышают продуктивность труда программистов и поощряют повторное использование. Это приобретает все больший смысл по мере того, как компьютеры становятся быстрее и дешевле, а программистский труд — дороже. Языки программирования систем хорошо подходят для создания компонентов, реализующих сложные алгоритмы и структуры данных, в то время как языки сценариев ориентированы на склеивающие приложения, где сложность скрыта в компонентах. «Склеивающая» технология становится все более распространенной при создании приложений; вот почему языки сценариев станут ведущей парадигмой программирования в 21 веке.

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

Литература


  1. J. Ousterhout, «Additional Information for Scripting White Paper», — http://www.scriptics.com/people/john.ousterhout/scriptextra.html.
  2. C. Jones, «Programming Language Table, Release 8.2», — Mar. 1996, — http://www.spr.com/library/0langtbl.htm.
  3. B. Boehm, «Software Engineering Economics», — Prentice Hall, Englewood Cliffs, NJ, 1981.
  4. L. Wall, T. Christiansen, and R. Schwartz, «Programming Perl», 2nd ed., — O’Reilly & Associates, Sebastopol, CA, 1996.
  5. M. Lutz, «Programming Python», — O’Reilly & Associates, Sebastopol, CA, 1996.
  6. R. O’Hara and D. Gomberg, «Modern Programming Using REXX», — Prentice Hall, Englewood Cliffs, N, 1988.
  7. J. Ousterhout, «Td and Tk Toolkit», — Addison-Wesley, Reading, MA, 1994.
  8. S. Johnson, «Objecting To Objects», — Invited Talk, Usenix Technical Conf., San Francisko, Jan. 1994.

Об авторе: Джон Остераут (John Ousterhaut) — основатель и руководитель компании Scriptics. До недавнего времени работал в Sun Microsystems, где возглавлял проект SunScript. Его интересы включают сценарные языки, программирование для Internet, пользовательские интерфейсы и операционные системы. Джон известен в России как создатель языка сценариев Tcl и инструментария Tcl toolkit. Остераут удостоен многих престижных наград, в том числе премии ACM Grace Murray Hopper Award и Президентской премии Национального научного фонда США.

John K. Ousterhout «Scripting: Higher-Level Programming for the 21st Century», — Computer, Vol.31, N.3, March 1998. Reprinted with permission, Copyright IEEE CS. All rights reserved.

Выбор типа языка


  • Является ли связывание уже существующих компонентов приоритетной задачей при построении приложения?
  • Будет ли приложение манипулировать несколькими объектами разной природы?
  • Включает ли приложение развитый графический пользовательский интерфейс?
  • Предполагается ли в рамках приложения много манипулировать цепочками символов?
  • Будет ли функциональность приложения меняться с течением времени?
  • Должно ли приложение быть расширяемым?

Если ответы на эти вопросы утвердительные, стоит подумать об использовании языка сценариев. С другой стороны, утвердительные ответы на следующие вопросы означают, что лучше использовать язык программирования систем.

  • Будут ли в приложении сложные алгоритмы или сложные структуры данных?
  • Предполагаются ли манипуляции с большими массивами данных, например, со всеми пикселами изображения, при которых производительность становится критичной?
  • Являются ли функции приложения хорошо определенными и мало подверженными изменениям?

В течение последние 30 лет в большинстве основных вычислительных платформ применялись средства обоих типов. Например, одним из первых языков сценариев был Job Control Language (JCL), использовавшийся для управления последовательностью шагов задания в OS/360. Сами же по себе отдельные шаги задания писались на PL/1, Фортране или языке ассемблера. В 80-х гг. на Unix-машинах для системного программирования служил Си, а для задания сценариев обработки — оболочки sh и csh. С наступлением эры ПК лидерами в сфере программирования систем стали Си и C++, а ведущим языком сценариев — Visual Basic. Наконец, в формирующемся на наших глазах мире Internet приоритетным языком программирования систем считается Java, а разработка сценариев ведется на JavaScript, Perl и Tcl.

Поделитесь материалом с коллегами и друзьями

Современные языки программирования: краткий обзор

Компьютеры так прочно вошли в нашу жизнь, что мы уже не можем представить ее без них. Трудно поверить, что только полвека назад появились первые компьютеры, которые были медлительными и громоздкими. Сейчас у нас есть огромное многообразие — от ультратонких ноутбуков до мощных игровых компьютеров.

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

В наши дни существует около 8 тысяч таких языков, многие из которых понятны лишь авторам. Однако есть такие языки программирования, которые стали международными и используются миллионами людей ежедневно.

Зачем нужны языки программирования

Без языка программирования ни один компьютер работать не будет. С его помощью создаются определенные математические алгоритмы, которые помогают компьютеру выполнять команды пользователя.

  • Язык программирования выглядит совсем не так, как мы привыкли представлять себе язык — это набор различных символов, которые преобразуются в понятный компьютеру код.
  • Классификация языков программирования от низких до высоких уровней зависит от того, настолько близок язык к человеку. Чем меньше язык программирования понятен человеку, тем по уровню он ниже.
  • Большая часть языков преобразуется в понятный машине код с помощью программ-трансляторов. С их помощью прописываются лексические, семантические и синтаксические правила, которые определят, какие действия запросит пользователь и внешний вид программы.
  • Язык программирования — неотъемлемая часть работы любого компьютера. В современном мире с ними работают программисты, которые прописывают коды и создают программы с использованием сложных кодовых конструкций.

Для обычного человека написание даже первой странички сайта покажется странной комбинацией различных символов. Для программиста этот код позволяет задать компьютеру нужную команду и выполнить ее. На языке программирования обычный пользователь общается с компьютером.

История языков программирования

Первыми «ласточками» в истории языка программирования считаются такие обычные вещи, как музыкальная шкатулка или жаккардовый ткацкий станок. Они появились еще в XVIII-XIX веках.

Начало же современному программированию было дано в 1930-1940-е годы, когда были написаны лямбда-исчисление и машина Тьюринга. То время можно назвать началом истории разработки языков программирования, ведь компьютеры становились все популярнее. В 1940-е годы появились первые электрические компьютеры, и тогда же немецкий инженер Ц. Кузе разработал Планкалькюль, первый высокоуровневый язык.

В 1950-е годы были разработаны машинные коды, которые считаются языками программирования первого поколения. Но их приходилось переписывать для каждой ЭВМ отдельно, так что первым реально работающим языком программирования можно считать «Краткий код». Он первым стал представлять собой не набор математических кодов, а выражения, которые потом перерабатывались в код.

Затем появились языки второго поколения — они были проще для человека, но ограничивались использованием ассемблера. Так называли программу, которая переводила команду на машинный язык, своего рода переводчик.

А уже к середине 1950-х годов стали зарождаться языки третьего поколения. Их отличает то, что они подходят для любой программы, их не нужно переписывать под каждую заново. Они уже считают полноценными языками высокого уровня.

В 1960-годы языки программирования начали стандартизировать и улучшать. Хоть затем и появились языки четвертого и пятого поколения, они являются более усовершенствованными версиями языков третьего поколения.

После того, как стал развиваться интернет в 1990-е годы, появились еще языки для написания веб-страниц. Сейчас развитие языков программирования идет по большей части в сторону безопасности пользователя.

Список языков программирования

Есть тысячи языков программирования. Мы выделили те, что наиболее популярны и чаще используются в современном мире.

Basic

Basic или Бейсик называют группу языков программирования высокого уровня. Его создали профессора колледжа Дартмут в 1964 году с целью помощи студентам в создании собственных компьютерных программ. Сейчас детище Томаса Курца и Джона Кемени стало основным языком, на котором пишутся программы для ОС Windows.

В далеком 1972 году Дэннис Ритчи придумал язык, который остается популярен и сейчас. Программисты любят его за успешное сочетание в нем элементов как высокого, так и низкого уровней программирования. Кстати, для тех языков программирования, которые используются для написания сайтов, основой является как раз язык Си.

Этот язык произошел от Си, но он больше уделяет внимание обобщенному программированию. Сейчас он является одним из самых популярных языков, ведь на нем пишут огромное количество программ. Он подходит для создания ОС, драйверов, серверов, игр, прикладных программ и много другого. Си ++ является универсальным языком, который эффективен, многофункционален и доступен большинству программистов.

Python

Разработка этого языка началась в 1980-х годах голландцем Гвидо ван Россумом, но его первая версия была выпущена только в 2008 году. Он отличается постоянным усовершенствованием и активным сообществом пользователей. Python является высокоуровневым языком с большим объемом различных функций. Особенно хорошо он справляется с веб-разработкой, анализом данных и автоматизацией процессов.

Этот язык лидирует среди тех, что применяются в разработке веб-сайтов и поддерживается практически всеми хостинг-провайдерами. Он применяется, в основном, для разработки веб-сайтов и веб-приложений. Впервые PHP был представлен публике в 1995 году датским программистом Расмусом Лердорфом.

Язык программирования Java работает с веб-приложениями, которые транслируются в байт-код. Он может работать на любой компьютерной архитектуре, так как код преобразуется с помощью Java-машины. Он появился в 1996 году и последние годы он стал самым популярным языком программирования. Однако многие недовольны из-за того, что он работает медленнее, чем его конкуренты.

JavaScript

Хотя JavaScript похож на Java, но все же является отдельным языком. Чаще всего используется в качестве встраиваемого языка: приложения получают доступ к веб-страницам с его помощью. Он более легок в применении и дается даже тем, кто мало знаком с программированием. Доля его использования ежегодно растет.

Go (Golang)

В 2007 году компания Google занялась разработкой собственного языка программирования, с помощью которого бы можно было решать реальные проблемы. Созданием языка занимались Роб Пайк и Кен Томпсон, которые уже в 2009 году представили Go. Для компании Google он является заменой популярных языков Си и Си ++. Он не стал прорывом, но зато используется для создания серьезных проектов.

Этот язык программирования является системой, с помощью которой можно удобно управлять базами данных. Первые разработки были начаты еще в 1970-х годов, но первый вариант SQL был представлен в 1986 году. В современном мире SQL довольно популярен в качестве удобного языка для улучшения, управления и создания баз данных.

Swift

Компания Apple тоже придумала собственный язык программирования, чтобы создавать на нем приложения для всех родственных гаджетов. Apple представила свой язык в 2014 году как удобный, надежный, свободный и доступный любому программисту. Он был создан персонально для продуктов Apple.

Pascal

Никлаус Вирт создал этот язык в 1969 году, а назвали язык в честь математика Блеза Паскаля. Он является популярным языком программирования и в наши дни. Именно на нем обучают студентов на первом курсе университета и в старшей школе. На его основе построено множество других языков.

В современном мире без языков программирования невозможно обойтись. Все больше и больше людей самостоятельно выбирают профессию программиста, хоть она и сложна на первый взгляд, но быстро развивается и становится популярной с каждым годом. А языки программирования — сложный, но интересный процесс создания компьютерного мира!

Нравится статья? Поддержи наш проект и поделись с друзьями!

Почти экстремальное программирование: мозголомы 21 века

Содержание статьи

К необычным языкам программирования все давно привыкли. Чуть ли не каждый новый язык принято обзывать «странным» и «в корне отличным от всех предыдущих». И создатели С и творцы Перла с Фортом с рвением призывали «забыть весь предыдущий опыт – этот язык в корне отличается от языков, обычно используемых в практическом программированием». За этой мишурой как-то и забываешь, что помимо практического программирования, есть ещё и теоретическое, экспериментальное. Языки столь странные, что кажутся абсурдными. Но не спешите скоропостижно щёлкать по крестику браузера (или мочалить Ctrl+F4), речь не пойдёт о детских забавах и странных шутках андеграунда. Неужели вы думаете, что в спрятанных за толстыми пуленепробиваемыми стёклами глазах бородатых мужиков, не один десяток лет отдавших железным монстрам, кроется искорка веселья? Отнюдь. Любая наработка в экспериментальном программирование таит в себе цель. Пусть не всегда доступную пониманию простых смертных.

CLWNPA

Большинство людей, познакомившихся с Compiler Language With No Pronounceable Acronym (так называется язык), помимо того, что сошли с ума и стройными рядами отправились работать в компьютерные журналы, вынесли интересное мнение: и в программирование есть место жёсткому стёбу. Стоит ли говорить, что авторы языка – Дон Вудс и Джеймс Лион – перед собой такую задачу не ставили. О, воскликнут заросшие профессионалы с воспалённым блеском в глазах, как так, язык полностью абсурдный с идиотской документацией и нулевой практической реализуемостью. Не спешите ломать автору руки и ноги (кто-то вас опередил, хо-хо-хо!).

Обратите внимание, суть языка заключалась в том, чтобы ни одна команда не была похожа на что либо уже созданное. Это ли не чудо! Вы только представьте, большинство языков рождаются друг из друга как генетические мутанты – посредством инцеста. А тут разом появляется питомец с чистой кровью, разобраться в котором не так просто, как с его более популярными собратьями. Не эту ли технологию используют военные в своих разработках? Забудьте про С, AJAX и Linux – ядерными закромами родины и атомными электростанциями управляет такая высокоинтеллектуальная хренотень, что высоколобый разработчик свободного софта обязан совершить харакири собственными заскорузлыми ногтями, лишь бросив взгляд на детище яйцеголовых. Пусть в
CLWNPA к инструкциям добавлялись команды please и with the divine help, а другие команды явно выдавали в пользователи поклонника теории Электронных Богов (компьютеры, вирусы, интернет – следующая после человека ступень эволюции), т.е. сложностью язык не отличался (разве что набожностью). Но он был первым (или не совсем первым, но это несколько другая история), в котором человек вышел за жёсткие рамки самопрограммирования. Вышел, чтобы объятый ужасом вбежать обратно.

BrainFuck

МозгоТрах стал логическим продолжением
CLWNPA (кстати говоря, на Хакере был цикл
статей по основам языка — все там на самом
деле довольно просто :)). Если можно не так как все, то почему нельзя не так как всегда? Идея, лёгшая в основу языка, проста как минет асфальтоукладчицы – доказать возможность существование рабочего языка, коренным образом отличавшегося от всех. Главное слово тут – рабочий. Просто создать новый язык программирования сложно, но возможно (примерно как смастерить собственный компьютеры и поставить на него свою же ось), а вот сделать так, чтобы на нём решались многие (желательно – все!) современные вычислительные задачи – работа не для талантливых студентов. И ведь удалось же! Решение было найдено, но о нём не вострубили СМИ, а авторам не дали Нобелевской премии – поскольку BrainFuck как ковбой Джо из анекдота никому не было нужен. Никто не мог понять, зачем нужен язык,
на котором сакраментальная фраза «Hello world!» выглядела вот так:

Жалкие овцы, что тут можно сказать, жалкие и недалёкие люди. Не берусь судить, что в ЦРУ использовали этот язык, но то, что им заинтересовались – точно! И не только ЦРУ. Забудьте про все стандарты шифрования – достаточно на БрейнФаке написать аналог WinGuard Pro, чтобы обломать зубы многим дешифровальщикам. Это – чудо. Это – грандиозный шедевр программирования. Это – техногенный прорыв, усиленный оргиазмическим эффектом. Язык можно превратить в нечто неописуемое, сложно поддающееся пониманию, а значит практически безопасное. Кулхакеры, ловите на заметку, пишите письма на МозгоТрахе и его старших детях и не беспокойтесь о спутниках-шпионах.

Malbolge

Ничем иным как стремлением к тотальной безопасности объяснить появление этого языка нельзя. И действительно, вот где ад для программиста и непаханое поле для контрразведчика. Текст, написанный на этом языке (пусть мы говорим о программирование, но ничто не мешает нам программировать английский и – давайте пофантазируем – родной русский язык) скорее всего никто не признает разумным. В том то вся и фишка! Вот увидите, не пройдёт и десятка лет, как школьнику начнут в курилках разговаривать на Malbolge. Если есть более безопасный язык, то я его знать не хочу – потому что иначе мозг перегрузится и сгорит. Итак, слово «мама» для компьютерного языка или «hello world»:

Рейтинг языков программирования в 2020 году

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

Например, в середине в 80-х стал очень популярен язык Prolog, но потом его популярность резко снизилась. И сейчас на нем практически никто не пишет. А место популярного новичка занял Python.

Как же узнать рейтинг языков программирования? Общего рейтинга не существует, так как нет простого способа собрать подобную статистику. Но существуют разные способы оценки популярности языков программирования. Рассмотрим самые популярные рейтинги.

1. Рейтинг Черной утки

Самым крупным сайтом, посвященным программам с открытым исходным кодом является сайт Black Duck (Черная утка) blackducksoftware.com

Одним из проектов Черной утки является каталог open source. В этом каталоге представлено около 500 000 проектов. Так как у всех проектов код открыт, то легко определить, на каком языке эти проекты написаны. На январь 2020 года рейтинг выглядит так.

Как видно, здесь практически половина программ (46%) написано на C. Это понятно, потому что С — это язык общения программистов. Это единственный язык, компилятор которого есть на всех платформах: от встроенных систем до суперкомпьютеров.

2. Рейтинг Wappalyzer для веб-приложений

Сервис Wappalyzer использует различные методы для идентификации веб-технологий. Рейтинг языков программирования для разработки сайтов на январь 2020 выглядит так.

В веб-программировании однозначно лидирует язык PHP, более 80% сайтов написано на этом языке.

3. Рейтинг TIOBE Index

Рейтинг TIOBE Index построен на оценке результатов поисковых запросов, содержащих название языка. Логика этого индекса очень проста: «Если язык ищут в поисковых системах, то он популярен». Конечно же, это заявление спорное, потому что программисты-профессионалы крайне редко будут искать в поисковике именно название языка программирования. Они чаще ищут решение конкретной задачи. Но громадный плюс этого рейтинга в том, что он достаточно объективно показывает интерес к тому или иному языку.

Индекс TIOBE показывает самые популярные языки программирования, информации о которых искали на 25-ти самых популярных поисковых системах, то есть запросы вида: «+» programming». Индекс подсчитывается каждый месяц.

Индекс TIOBE на январь 2020 года выглядит так:

В этом индексе однозначным лидером является Java.

На графике изменений индекса хорошо видны как менялась популярность языков программирования. Но при этом первое-второе место постоянно делят два языка Java и C. Хотя Java активно продвигается компанией Oracle, а язык C никто не продвигает.

И еще интересно то, что C++ ни разу не смог превысить по популярности C.

4. Рейтинг IEEE Spectrum

Ежегодный рейтинг IEEE Spectrum Top Programming Languages использует 11 метрик из 9-ти источников, включая поисковые запросы, упоминания в твиттере и даже упоминания в вакансиях на работу программиста. С одной стороны этот рейтинг использует больше данных, но с другой стороны во многих источниках данные имеют связанный характер. Чем больше публикуются вакансий на некоторый язык программирования, тем больше запросов будет в поисковых системах. То есть у новых языков больше шансов попасть на вершину рейтинга.

Рейтинг IEEE на 2020 год выглядит так:

Важностью особенностью рейтинга IEEE является то, что рейтинг интерактивный и можно поиграть с параметрами. В этом рейтинге лидирует Python.

5. Рейтинг Stack Overflow

Сайт Stack Overflow — это площадка, на которой разработчики могут задавать и отвечать на вопросы по программированию. Этот сайт имеет около 40 миллионов посещений в месяц. Есть русскоязычная версия сайта: ru.stackoverflow.com

Этот рейтинг рассчитывается на основе опроса разработчиков. В январе 2020 года было опрошено более 100 000 разработчиков и составлен рейтинг языков программирования. Скорее это рейтинг языков, которые вызывают вопросы. В этом рейтинге лидером стал JavaScript.

Такая популярность вполне объяснима, сейчас JavaScript бурно развивается и каждая новая возможность вызывает массу вопросов, поэтому программисты идут на сайт Stack Overflow, чтобы задать вопросы.

Любопытно, что C не попал даже в первую десятку.

6. Вакансии на Head Hunter

Можно подойти к рейтингу языков программирования с другой стороны и посмотреть, какие языки указываются в вакансиях и сколько собираются платить. Одна из самых популярных площадок для поиска работы в IT-сфере — это сайт HeadHunter. Там есть отдельный раздел — вакансии для программистов.

Внизу страницы можно посмотреть список похожих запросов и убедиться, что у работодателей немного другие запросы.

Здесь видно, что программист, знающий Pascal (среда Delphi), все еще востребован.

7. Google Books Ngram Viewer

И в конце рассмотрим чрезвычайно полезный сервис Гугл, на котором можно смотреть использование ключевых слов в публикациях.Поэтому можно смотреть популярность не только языков программирования, а любых технологий.

В начале этой статьи приведены графики использования слов Prolog и Python. А теперь введем JavaScript, Python и PHP.

Видно как в 1992 году появляется интерес к JavaScript и он быстро обгоняет Python и PHP.

Похожие записи:

Комментарии 18

Совсем мелкая ошибка в предпоследнем предложении. Вы написали «В начале этой статьи приведены графики использования слов Prolog и Pascal», а там были Prolog и Phyton.

«Для оценки перспективности своих усилий каждый программист должен регулярно смотреть рейтинг языков программирования.» — совет неоднозначный. Профессионал обычно хорошо знает 1-2 языка и специализируется на них довольно долго. Изучение другого языка происходит обычно по причине старта какого-нибудь проекта, или тупика в карьере с текущими знаниями.

Здравствуйте! Спасибо за статью!
Хотел бы узнать Ваше мнение насчет языка программирования Prolog. Дело в том, что язык программирования Prolog используется в разработке программ для искусственного интеллекта.Так как технологии искусственного интеллекта развиваются все интенсивнее, не станет ли язык программирования Prolog популярным, ну или востребованным?

Здравствуйте! Язык Prolog стал популярен в 1980-х годах в связи с японской программой создания программы искусственного интеллекта. Но эту программа кончилась грандиозным провалом. В результате все наработки были розданы бесплатно и никаких полезных программ так и не было создано. Поэтому сейчас Prolog полностью морально устарел и не используется. Даже если и будет новый прорыв в разработке искусственного интеллекта, то, скорее всего, он будет связан с другой технологией и другим языком программирования.

В девяностом году шеф мой взял аспиранта себе на написание САПР, типа Симулинк в Матлабе. Тогда ещё XT-шки были в диковинку. И был в то время бум создания «Искусственного интеллекта». Ходили шутки, что это нужно, когда своего интеллекта не хватает. Ну и аспирант этот решил создавать этот САПР на языке Пролог. Тогда ещё книг, типа Братко не было. В ДОСе работали. Ну и он разобрался в языке этом глубоко так. Ему понравилось в нём лазить по деревьям и делать откаты. В других языках это геморройно было, а в Прологе это вшито как аксиома (исходные кирпичики языка). То есть если программа заходит в тупик, то как-то самореализуется всё там, что она, делая откаты назад сама ищет выход из этого тупика. И аспиранту это нравилось в ней. Написал он в ней САПР свой, «Гаммой» назвал его, была куча публикаций. Но потом бросил заниматься этим и диссертации не защитил. Его пригласили в СберБанк программистом работать, а там зарплаты уже со стипендией аспиранта не сравнить. Так всё это и забросилось. Отчёт в семи томах кода сохранился с той поры и валяется где-то. У меня на даче очень много книг по Прологу на чердаке стопками лежит не тронутых, а Братко, по моему, аж десять экземпляров. В то время хлеб стоил сто рублей, а книги эти по рублю продавались. На растопку жалко их рвать…

Интересный обзор! А что вы можете сказать про Rust в контексте перспективы дальнейшего развития?

Какой язык перспективен для инженера-конструктора с условием

Результаты опроса : Какой язык перспективен для инженера-конструктора?
С/С++ 52 14.81%
Delphi 17 4.84%
Пайтон 33 9.40%
Фортран 1 0.28%
Basic/VB/VBA/VB.NET 85 24.22%
джава 7 1.99%
другой, какой — см. по тексту 27 7.69%
матерный 129 36.75%
Голосовавшие: 351. Вы ещё не голосовали в этом опросе

Страница 1 из 34 1 2 3 11 > 34 »
23.03.2007, 21:50 #1
The_Mercy_Seat

23.03.2007, 23:15

#2

23.03.2007, 23:17 #3

Инженер по автоматизации (строительство)

23.03.2007, 23:23 1 | 1 #4

Артиллерист — вертолётчик. Дипломированный инженер-механик. Technologist

23.03.2007, 23:34 #5

проектирование гидротехнических сооружений

Серёга — Bilder
Посмотреть профиль
Найти ещё сообщения от Серёга — Bilder

24.03.2007, 00:31 #6

24.03.2007, 00:50 Re: Какой язык перспективен для инженера-конструктора с усло #7

Если времени минимум, то из представленного списка — безусловно VB/VBA в силу легкости изучения.

Если же учитывать максимальную пользу, то посоветую следующее. Изучите простой язык с максимальными возможностями работы со строками и файлами, т.е. скриптовый. От такого языка будет больше всего пользы в краткой перспективе, потому что быстро научиться программировать серьезные объектно-ориентированные проекты невозможно. (Большинство представленных вами серьезных языков — ООП-ориентированные.)

Имеет смысл изучать программистскую латынь C (без плюсов!) или, опять же, Бейсик. Тогда у вас будет возможность быстро разбираться со всевозможными встроенными языками для простых задач.

Сам использую среди прочего VBScript (знатный бред; только потому, что знаю VBA), за что и прошу не бить. Все IMHO. Буду еще Python пробовать, если руки дойдут.

Александр Бауск
Посмотреть профиль
Посетить домашнюю страницу Александр Бауск
Найти ещё сообщения от Александр Бауск

24.03.2007, 01:27 #8

24.03.2007, 01:34 #9

Александр Бауск
Посмотреть профиль
Посетить домашнюю страницу Александр Бауск
Найти ещё сообщения от Александр Бауск

24.03.2007, 07:44 #10

24.03.2007, 08:01 #11

24.03.2007, 08:03 #12

24.03.2007, 08:53 #13

24.03.2007, 10:42 #14

24.03.2007, 11:01 #15

24.03.2007, 11:05 #16

Александр Бауск
Посмотреть профиль
Посетить домашнюю страницу Александр Бауск
Найти ещё сообщения от Александр Бауск

24.03.2007, 11:30 #17

Цель опроса – исследовать общественное мнение, ознакомится с аргументацией и возможно узнать что то новое.
Попробую сам пройтись по пунктам опроса.

С/С++ король языков, после, наверно, Ассемблера, но для инженера, если он не изучал его раньше принудительно, IMHO сложноват.. Т.е. хороший инструмент для сложных задач не есть хороший для простых, и вряд ли кто посоветует инженеру, включая его разработчиков. Оценка 3.

Delphi, удачный пожалуй язык, простой, функциональный, как говорится каждый студент должен уметь писать программки в дельфи. Оценка 5.

ФОРТРАН – наверно незаменимая штука для расчетных приложений. Я имею ввиду удачный компилятор, и набор математических библиотек. Для рядового инженера, опять таки, если он к нему не привык раньше – не уверен. Хотя сейчас нет проблем с выделением памяти и пр. + синтаксис простой (почти чистый английский язык) , поставлю ему 4.

Basic/VB/VBA/VB.NET – бейсикоподобные языки. Хороши по нескольким позициям: внедренность в популярные виндовые программы (MS Office, AutoCAD (etc), OpenOffice, из расчетных пожалуй только STAAD_Pro могу назвать). Компиляторы бесплатные: майкрософтовский NET2005express, FreeBasic, Rapid-Q Basic (последние два наряду с Гамбасом – и для линя тоже). Оценка 5, как и дельфям.

Python . Не принимаю в расчет, что он интерпретируемый (имея программу на Пайтоне несложно получить exe-шник). Плюсы – прост, функционален. И еще, это наверно оптимальный язык для любителей OpenSource. Хотел бы поговорить о нем с кем-нибудь подробнее. Затрудняюсь с оценкой – 5 или 4.

Цукерберг рекомендует:  Создание информационной архитектуры
Понравилась статья? Поделиться с друзьями:
Все языки программирования для начинающих