![](/stc/img/evkova.png)
Классификация языков программирования. Критерии выбора среды и языка разработки
Содержание:
Введение
Несмотря на огромное количество программных продуктов которыми мы пользуемся может возникнуть необходимость составления (написания) собственной программы.
Освоение правил написания программы позволяет лучше ориентироваться в каждой конкретной программе. Понимать, что может сделать программа, а чего не может.
Язык программирования — это основной инструмент разработки и решения поставленных задач. Обычно специалист выбирает один, который изучает на уровне, близком к идеальному, или стремится им овладеть досконально в будущем.
Например, программист выбрал основным для себя язык общего назначения — скажем, С, Python, Lisp, PHP и другие. Тогда ему нужна как минимум еще одна технология, уже более узконаправленная. Ведь в работе может появиться потребность решить задачу нетривиальным путем.
Языки программирования похожи друг на друга, поэтому чем больше вы их знаете, тем проще учить новые. Однако всегда важна цель — для чего каждый из них осваивается. Как и любым инструментом, языком нужно пользоваться на практике, иначе знания быстро забудутся. Сам процесс изучения нового порой помогает лучше понять другие технологии.
ЯЗЫКИ ПРОГРАММИРОВАНИЯ
Язык программирования - формальная знаковая система, предназначенная для записи компьютерных программ. Язык программирования определяет набор лексических, синтаксических и семантических правил, определяющих внешний вид программы и действия, которые выполнит исполнитель (обычно - ЭВМ) под её управлением.
Языки программирования классифицируются в зависимости от самых разных критериев. Но чаще всего они подразделяются на языки высокого и низкого уровня. Чем ближе язык к естественному языку, тем более вели его шансы попасть в категорию языков высокого уровня. И наоборот, если язык ближе к машинным командам, в этом случае его называют языком низкого уровня. Поэтому всё множество языков программирования можно разделить на две группы: языки низкого уровня и языки высокого уровня.
ЯЗЫКИ НИЗКОГО И ВЫСОКОГО УРОВНЯ ПРОГРАММИРОВАНИЯ
Первые компьютеры приходилось программировать двоичными машинными кодами. Однако программировать таким образом — довольно трудоемкая и тяжелая задача. Для упрощения этой задачи начали появляться языки программирования низкого уровня, которые позволяли задавать машинные команды в понятном для человека виде. Для преобразования их в двоичный код были созданы специальные программы — трансляторы.
Трансляторы делятся на:
компиляторы — превращают текст программы в машинный код, который можно сохранить и после этого использовать уже без компилятора (примером является исполняемые файлы с расширением *.exe).
интерпретаторы — превращают часть программы в машинный код, выполняют его и после этого переходят к следующей части. При этом каждый раз при выполнении программы используется интерпретатор.
Примером языка низкого уровня является ассемблер. Языки низкого уровня ориентированы на конкретный тип процессора и учитывают его особенности, поэтому для переноса программы на ассемблере на другую аппаратную платформу её нужно почти полностью переписать. Определенные различия есть и в синтаксисе программ под разные компиляторы. Правда, центральные процессоры для компьютеров фирм AMD и Intel практически совместимы и отличаются лишь некоторыми специфическими командами. А вот специализированные процессоры для других устройств, например, видеокарт и телефонов содержат существенные различия.
Языки низкого уровня, как правило, используют для написания небольших системных программ, драйверов устройств, модулей стыков с нестандартным оборудованием, программирование специализированных микропроцессоров, когда важнейшими требованиями являются компактность, быстродействие и возможность прямого доступа к аппаратным ресурсам. Ассемблер — язык низкого уровня, широко применяется до сих пор.
Особенности конкретных компьютерных архитектур в них не учитываются, поэтому созданные приложения легко переносятся с компьютера на компьютер. В большинстве случаев достаточно просто перекомпилировать программу под определенную компьютерную архитектурную и операционную систему. Разрабатывать программы на таких языках значительно проще и ошибок допускается меньше. Значительно сокращается время разработки программы, что особенно важно при работе над большими программными проектами.
Сейчас в среде разработчиков считается, что языки программирования, которые имеют прямой доступ к памяти и регистров или имеют ассемблерные вставки, нужно считать языками программирования с низким уровнем абстракции. Поэтому большинство языков, считавшихся языками высокого уровня до 2000 года сейчас уже таковыми не считаются.
Адресный язык программирования: Фортран, Кобол, Алгол, Pascal, Pascal ABC, Python, Java, C, Basic, C++, Objective-C, Smalltalk, C#, Delphi,
Недостатком некоторых языков высокого уровня является большой размер программ в сравнении с программами на языках низкого уровня. С другой стороны, для алгоритмически и структурно сложных программ при использовании суперкомпиляции преимущество может быть на стороне языков высокого уровня. Сам текст программ на языке высокого уровня меньше, однако, если взять в байтах, то код, изначально написанный на ассемблере, будет более компактным.
Поэтому в основном языки высокого уровня используются для разработки программного обеспечения компьютеров и устройств, которые имеют большой объём памяти. А разные подвиды ассемблера применяются для программирования других устройств, где критичным является размер программы.
ПАСКАЛЬ
Само названия языка — “Паскаль” — возникло в честь одного из великих французских математиков и физиков Блеза Паскаля (1623-1662). Немного из истории жизни французского мыслителя. Блез Паскаль родился в семье известного математика Этьена Паскаля.
Отличительная черта всех его родных — необыкновенная одаренность. У него было две сестры: у старшей сестры Жильберты были в большей степени развиты математические способности и литературный талант, а у младшей сестры Жаклины — артистический дар. Свое детство Блез Паскаль провел в Париже, школу никогда не посещал.
Единственный учитель, которого Паскаль признавал, был его отец Этьен. В четырехлетнем возрасте Блез уже умел читать и писать, начал интересоваться эвклидовой геометрией, а в 15 лет уже на равных мог обсуждать с известными на тот момент парижскими учеными сложнейшие математические задачи. Из юноши Паскаля вырастал гениальный математик.
Одним из известных изобретений Блеза Паскаля стал арифмометр (паскалево колесо), который производил все арифметические действия. Он представлял собой латунный ящик с интересным механизмом (рис. ниже).
Этот арифмометр прославил Блеза Паскаля во всех западных странах. Толпы народов со старого света направлялись в Люксембургский дворец (Париж), чтобы лицезреть это уникальное приспособление того времени.
История языка Паскаль продолжается, и в 50-е годы XX века появились первые языки программирования высокого уровня: ФОРТРАН, КОБОЛ и АЛГОЛ. ФОРТРАН и КОБОЛ они существуют и по сей день, а вот АЛГОЛ как раз и стал родоначальником языка программирования Паскаль.
Первая версия АЛГОЛа появилась в 1958 году, разработчиком которого был создатель ФОРТРАНа Джон Бэкус. Последующими версиями языка АЛГОЛ стали АЛГОЛ-60 и АЛГОЛ-68. Однако из-за громоздкости языков АЛГОЛ-60 и АЛГОЛ-68 создавались большие трудности.
Поэтому в 1965 году Международная федерация по обработке информации предложила проект нескольким специалистам ЭВМ. Необходимо было создать новый язык программирования — преемник АЛГОЛа-60.
В этом проекте и принял участие будущий создатель языка программирования Паскаль — Николас Вирт, швейцарский ученый, на тот момент доцент факультета информатики Стэнфордского университета.
Николас Вирт начал разрабатывать проект АЛГОЛ-W. Целью проекта было обучение студентов различным методам: “структурное программирование”, “программирование сверху вниз” и др. В 1970 году произошли два великих события:
- появление операционной системы UNIX
- появление нового языка программирования.
Николас Вирт назвал новый язык программирования в честь французского математика XVII века Блеза Паскаля, поскольку Паскаль создал вычислительное устройство (паскалево колесо). Первая версия нового языка программирования вышла на компьютере CDC 6000.
Успех языка Паскаль:
Выдающийся успех языка Паскаль обусловлен рядом причин:
- Язык в естественной форме отразил самые важные современные концепции технологии разработки программ.
- Именно благодаря своей компактности, целостности и ортогональности понятий, язык программирования Паскаль оказался весьма легок для изучения и освоения.
- Несмотря на кажущуюся простоту языка, он оказался пригодным для достаточно широкого спектра приложений, для разработки очень больших и сложных программ, даже операционных систем.
- Паскаль весьма технологичен для реализации почти для всех (в том числе нетрадиционных) машинных текстур. Существует интересное сравнение: разработка Паскаль-транслятора почти не превышает по трудоемкости хорошую дипломную работу выпускника вуза.
АССЕМБЛЕР
Язык Ассемблера - это символическое представление машинного языка. Он облегчает процесс программирования по сравнению с программированием в машинных кодах. Некоторые задачи, например, обмен с нестандартными устройствами обработки данных сложных структур невозможно решить с помощью языков программирования высокого уровня. Это под силу ассемблеру. В принципе, язык Ассемблер является машинным языком. И программист, реализующий какую-либо задачу на язык высокого уровня, с помощью Ассемблера может определить осмысленно ли решение данной задачи, с точки зрения использования ЭВМ. Ассемблер имеет одну особенность, которая отпугивает многих начинающих языков программистов,- ассемблер является машинно-зависимым языком. Это означает, что пишущий на ассемблере работает непосредственно с ресурсами компьютера, что требует хорошего знания его архитектуры, логики работы операционной системы, а также большой аккуратности при написании программы.
Несмотря на то, что ассемблер является машинно-ориентированным языком, то есть языком низкого уровня, программист может применять его для работы, как на высоком, так и на среднем уровне. Низкий уровень программирования на ассемблере подразумевает прямое обращение к каналам ввода-вывода устройств, называемых портами ввода-вывода, и прямой доступ в оперативную память.Turbo Assembler, помимо полной поддержки транслятора фирмы Microsoft имеет дополнительные возможности, объединённые в режиме, названном разработчиками Ideal. Использование этого режима даёт возможность начинающему программисту применять более наглядный и простой стиль разработки программ. Более опытные программисты, пишущие на ассемблере, могут использовать такие возможности режима Ideal, как вложенные структуры, объединения.
Важной особенностью режима Ideal является применение проверки типов данных, подобно языкам высокого уровня, что позволяет выявить многие ошибки ещё на этапе трансляции.
Ассемблер предоставляет программисту полую свободу действий при разработке программы, что является и его достоинством, и недостатком, так как требует от разработчика знания системы команд данного компьютера и его операционной системы. Кроме того, несмотря на минимальный размер выполняемого файла при максимальной скорости работы, время, необходимое для создания программы, резко возрастает с увеличением объёма разрабатываемого проекта. Поэтому ассемблер был и остаётся языком программирования для профессионалов.
СИ ++
Наследник C язык C++ быстро завоевал поддержку, являясь обновленной версией языка C. C++ был разработан шведским программистом по имени Бьярн Страуструп (Bjarne Stroustrup) в начале 1980-х. C++ имеет на вооружении несколько дополнительных команд и операторов, но основное отличие заключается в подходе к программированию.
Главная причина, по которой и сейчас C++ остается популярным, - он поддерживает объектно-ориентированное программирование (ООП). ООП - это иной способ написания программ, помогающий программисту писать программы быстрее и с наименьшим числом ошибок. ООП также позволяет повысить скорость обслуживания.
Так как Си++ восходит, главным образом, к Си. Поэтому сделанного в Си акцента на средствах низкого уровня достаточно, чтобы справляться с самыми насущными задачами системного программирования. Си, в свою очередь, многим обязан своему предшественнику BCPL.Си++ - это машинно-ориентированный язык программирования, задуманный так, чтобы сделать программирование более приятным для серьёзного программиста. За исключением второстепенных деталей Си++ является надмножеством языка программирования Си.
Позднее была проведена проверка определения Си++, чтобы удостовериться в том, что любая конструкция, допустимая и в Си, и в Си++, действительно означает в обоих языках одно и то же. В Си++ нет типов данных высокого уровня и нет первичных операций высокого уровня. В нём нет, например, матричного типа с операций обращения.
Если пользователю понадобится подобный тип, его можно определить в самом языке. По сути дела, основным, чем занимается программирование на Си++ - это определение универсальных и специально-прикладных типов.
Популярность объектно-ориентированного языка C++ дала начало множеству новых языков для современного Интернета. Причиной успешного развития языка Java (Джава) (и его производных, таких как JavaScript) является широкомасштабное использование в нем языка C++, и хотя C++ не поддерживает достаточной безопасности программирования web-сайтов, его объектно-ориентированная природа делает Java хорошим кандидатом для программирования объектов Интернета. Компания Sun Microsystems изменила язык C++, добавив в него элементы обеспечения достаточной безопасности и убрав ряд сомнительных возможностей C++. (Примером является множественность наследования, которая позволяет генерацию одного объекта программирования, такого как окно, из набора нескольких родительских окон с различными характеристиками. Подобная концепция сбивает с толку даже при формулировании ее на высоком уровне.)
БЕЙСИК
Язык Бэйсик (он же Бейсик, он же BASIC) входит в семейство языков программирования высокого уровня.
BASIC - это аббревиатура, которая расшифровывается так: Beginner’s All-purpose Symbolic Instruction Code - универсальный код символических инструкций для начинающих).
Язык программирования Бейсик был разработан в 1964 году. Затея заключалась в том, чтобы создать язык, с помощью которого студенты, не имеющие навыков программирования, могли самостоятельно создавать компьютерные программы для решения своих задач.
Этот язык в своё время был очень популярен и расплодился по миру компьютеров в виде различных диалектов, в основном, как язык для домашних компьютеров.
Бэйсик с момента создания многократно дорабатывался и усложнялся, повинуясь законам современного программирования. По этой причине к настоящему времени он уже утратил (по сравнению с первыми версиями) свою простоту. Хотя, даже с учётом этого, современный Бэйсик всё-равно остаётся относительно простым языком, по сравнению с такими языками, как, например, С++.
Начиная с 1960-х годов компьютеры становились всё более доступными. На компьютерах могли работать уже не только учёные-программисты, но и школьники и студенты, которые не являлись программистами. Однако у этих школьников и студентов уже появились задачи, которые надо было решать с помощью компьютеров.
Готовых программ тогда почти не было. Поэтому под каждую задачу надо было создавать отдельную программу. И делать это на компьютерах тех лет, используя имеющиеся тогда языки программирования, было очень сложно (отчасти поэтому раньше языки программирования создавались для решения конкретных задач, например, ПРОЛОГ был ориентирован на создание систем с искусственным интеллектом, ФОРТРАН - для работы с математическими формулами в научных и инженерных вычислениях и т.п.).
Поэтому неудивительно, что у кого-то появилась мысль создать язык программирования настолько простой, насколько это вообще возможно, чтобы люди, совсем незнакомые с программированием, могли создавать хотя бы простые программы для решения каких-то задач на компьютерах (эта мысль была воплощена в жизнь, хотя потом критики ставили эти особенности в вину Бейсику).
В итоге в 1964 году преподавателями Дартмутского Колледжа Джоном Кемени и Томасом Курцем был придуман язык Бэйсик, и под их руководством был реализован командой студентов колледжа. Со временем, когда стали появляться другие диалекты, изначальную реализацию стали называть Dartmouth BASIC.
Бейсик был задуман и сделан так, чтобы студенты могли относительно легко создавать свои программы. Бэйсик был ориентирован на пользователей, для которых скорость выполнения программ не была слишком важной, и которым намного более важно было иметь возможность использовать компьютер для решения своих задач в принципе, не имея специальной подготовки (напомню, готовых программ тогда почти не было).
При разработке языка Бэйсик использовались следующие восемь принципов:
- Язык должен быть простым в использовании и понятным для начинающих.
- Должен быть языком программирования общего назначения (а не специального, как, например, упомянутые выше Фортран и Пролог).
- Язык должен предоставлять возможность расширения функциональности, доступную опытным программистам.
- Язык должен быть интерактивным, то есть выполнять команды пользователя.
- Язык должен предоставлять однозначные и понятные сообщения об ошибках.
- Язык должен быстро работать на небольших программах.
- Язык не должен быть привязан к “железу” и не должен требовать от программиста понимания работы этого самого “железа”.
- Язык должен защищать пользователя от операционной системы (или операционную систему от пользователя - кому как больше нравится))).
При создании Бэйсика за основу были взяты частично Фортран II и частично Алгол 60. Первоначально Бэйсик был реализован на мейнфрейме GE-265 с поддержкой множества терминалов (мейнфрейм - это большой высокопроизводительный отказоустойчивый сервер).
Несмотря на то, что язык уже использовался на нескольких мини-компьютерах, его настоящее распространение началось с внедрения на микрокомпьютере Альтаир 8800.
Многие языки программирования были слишком громоздкими, чтобы поместиться в небольшую память, которую пользователи подобных компьютеров могли себе позволить. Для машин с таким медленным носителем информации, как бумажная лента (позднее - магнитофонная кассета), и без подходящего текстового редактора такой небольшой язык, как Бейсик, был наилучшим решением.
В 1975 году Microsoft (тогда это были лишь двое - Билл Гейтс и Пол Аллен, при участии Монте Давидова), выпустила Altair BASIC. Затем его версии появились на другой платформе под лицензией и скоро в использовании были уже миллионы копий и различных вариантов. Один из вариантов, Applesoft BASIC, стал стандартным языком на Apple II. Для операционной системы CP/M был создан диалект BASIC-80, который надолго опередил свое время.
Кстати, Билл Гейтс говорил, что Бэйсик - это его любимый язык программирования.
Наиболее бурно и успешно Бэйсик развивался в течение 1970-х и в начале 1980-х годов. В это время почти все персональные компьютеры имели собственный интерпретатор Бейсика, часто зашиваемый прямо в ПЗУ. В простейших компьютерах он даже выполнял функции операционной системы.
Практически все более мощные компьютеры также имели интерактивные Бейсик-системы. Было создано несколько новых версий Бейсика для платформы IBM PC и совместимых. Microsoft продавала Бейсик для MS-DOS/PC DOS, включая BASICA, GW-BASIC (модификация BASICA, не требующая «прошивки» от IBM) и QuickBASIC.
Компания Borland, получившая широкую известность благодаря Turbo Pascal (с которым она и вышла впервые на рынок) в 1985 году выпустила основанную на той же программной среде систему Turbo Basic 1.0 (его наследники впоследствии продавались другой компанией под именем PowerBASIC).
К концу 1980-х годов персональные компьютеры стали намного мощнее и предоставляли новые возможности (такие, как графический интерфейс пользователя). Использовать эти новые возможности в Бейсике было уже не так просто и не так удобно. Кроме того, появились недорогие компиляторы более продвинутых языков (таких как Паскаль и Си), которые, к тому же, имели навороченные по тем временам средства разработки и дополнительные библиотеки с готовыми стандартными подпрограммами (например, Borland Pascal с библиотекой Turbo Vision).
Бейсик начал терять популярность, хотя огромное число его версий ещё использовались и продавались. В это же время начался постепенный переход Бэйсика в сторону признанных структурных языков: расширился словарь и набор конструкций языка, появились сложные ветвления, именованные подпрограммы и функции, длинные имена переменных.
РЕФАЛ
Несомненно, надо рассказать и о некоторых языках программирования, созданных у нас на родине. Один из таких языков является Рефал, разработанный у нас в России (СССР), в 1966г. ИПМ АН СССР. Этот язык прост и удобен для описания манипуляций над произвольными текстовыми объектами.
Рефал широко применяется при разработке трансляторов с алгоритмических языков как универсальных и проблемно - ориентированных, так и автокодов. Кроме использования в задачах трансляции, Рефал имеет такие важные сферы применения, как машинное выполнение громоздких аналитических выкладок в теоретической физике и прикладной математике; проектирование «умных» информационных систем, осуществляющих нетривиальную логическую обработку информации; машинное доказательство теорем; моделирование целенаправленного поведения; разработка диалоговых обучающих систем; исследования в области искусственного интеллекта и т.п.
Программирование на Рефале имеет специфику, связанную, прежде всего, с тем, что Рефал является языком функционального типа в отличие от обычных операторных языков типа Алгол, Фортран и т.д.. Если программа на операторных языках - ни что иное, как совокупность приказов-операторов, то программа на Рефале представляет собой по существу описание связей и отношений между определенными вследствие того, что в Рефале программист сам определяет структуру обрабатываемой информации, эффективность программы существенно зависит от удачного или неудачного выбора этой структуры. Для задания структур в Рефале используются скобки, а специфика всех реализаций языка такова, что использование скобок резко повышает эффективность выполнения программы. Это достигается с помощью адресного соединения скобок.
Определенной спецификой обладают и переменные типа «выражения» имеется в виду их способность удлиняться при отождествлении. Правильное использование переменных этого типа также позволяет значительно повысить эффективность Рефал - программы.
JAVA
Java - объектно-ориентированный язык программирования, разрабатываемый компанией Sun Microsystems. Приложения Java обычно компилируются в специальный байт-код, поэтому они могут работать на любой виртуальной Java-машине (JVM) независимо от компьютерной архитектуры. Дата официального выпуска -- 23 мая 1995 года. Изначально язык назывался Oak («дуб») и разрабатывался Джеймсом Гослингом для программирования бытовых электронных устройств. Впоследствии он был переименован в Java и стал использоваться для написания клиентских приложений и серверного программного обеспечения. Назван в честь марки кофе Java, поэтому на официальной эмблеме языка изображена чашка с парящим кофе.
Достоинство выполнения программ в полной независимости байт-кода от операционной системы и оборудования позволяет выполнять Java-приложения на любом устройстве, для которого существует соответствующая виртуальная машина. Другой важной особенностью технологии Java является гибкая система безопасности благодаря тому, что исполнение программы полностью контролируется виртуальной машиной. Любые операции, которые превышают установленные полномочия программы (например, попытка несанкционированного доступа к данным или соединения с другим компьютером) вызывают немедленное прерывание.
К недостаткам концепции виртуальной машины относят то, что исполнение байт-кода виртуальной машиной может снижать производительность программ и алгоритмов, реализованных на языке Java. Данное утверждение было справедливо для первых версий виртуальной машины Java, однако в последнее время оно практически потеряло актуальность. Этому способствовал ряд усовершенствований: применение технологии трансляции байт-кода в машинный код непосредственно во время работы программы (JIT-технология) с возможностью сохранения версий класса в машинном коде, широкое использование платформенно-ориентированного (native-код) в стандартных библиотеках, аппаратные средства, обеспечивающие ускоренную обработку байт-кода (например, технология Jazelle, поддерживаемая некоторыми процессорами фирмы ARM).
Идеи, заложенные в концепцию и различные реализации среды виртуальной машины Java, вдохновили множество энтузиастов на расширение перечня языков, которые могли бы быть использованы для создания программ, исполняемых на виртуальной машине. Эти идеи нашли также выражение в спецификации общеязыковой инфраструктуры CLI, заложенной в основу платформы .NET компанией Microsoft.
СПОСОБЫ РЕАЛИЗАЦИИ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ
Создать язык, удобный для написания программ, недостаточно. Для каждого языка нужен свой переводчик. Такими переводчиками являются специальные программы-трансляторы.
Транслятор - это программа, предназначенная для перевода программы, написанной на одном языке программирования, в программу на другом языке программирования. Процесс перевода называется трансляцией. Тексты исходной и результирующей программ находятся в памяти компьютера. Примером транслятора является компилятор.
Компилятор - это транслятор текста на машинный язык, который считывает исходный текст. Он оценивает его в соответствии с синтаксической конструкцией языка и переводит на машинный язык. Другими словами, компилятор не исполняет программы, он их строит. Процесс такого перевода называется компиляцией.
Байт-код - это промежуточный подход, при котором программа преобразуется в промежуточный двоичный вид, интерпретируемый некой «виртуальной машиной» во время исполнения.
Компилятор создаёт законченный результат - программу в машинных кодах. Затем эта программа выполняется. Откомпилированный вариант исходной программы можно сохранить на диске. Для повторного выполнения исходной программы компилятор уже не нужен. Достаточно загрузить с диска в память компьютера откомпилированный в предыдущий раз вариант и выполнить его.
Существует другой способ сочетания процессов трансляции и выполнения программы. Он называется интерпретацией. Суть процесса интерпретации состоит в следующем. Вначале переводится в машинные коды, а затем выполняется первая строка программы. Когда выполнение первой строки окончено, начинается перевод второй строки, которая затем выполняется и так далее. Управляет этим процессом программа-интерпретатор.
Интерпретатор - это программа, предназначенная для построчных трансляции и выполнения исходной программы. Такой процесс называется интерпретацией. По-другому можно сказать, что интерпретатор моделирует некоторую вычислительную виртуальную машину, для которой базовыми инструкциями служат не элементарные команды процессора, а операторы языка программирования. В процесс трансляции входит проверка исходной программы на соответствие правилам используемого в ней языка. Если в программе обнаружены ошибки, транслятор вводит сообщение о них на устройство вывода (обычно, на экран дисплея).
Интерпретатор сообщает о найденных им ошибках после трансляции каждой строки программы. Компилятор транслирует программу намного быстрее, чем интерпретатор, но сообщает о найденных им ошибках после завершения компиляции всей программы. Найти и исправить ошибки в этом случае труднее. Интерпретаторы рассчитаны на языки, предназначенные для обучения программированию, и используются начинающими программистами. Большинство современных языков предназначены для разработки сложных пакетов программ и рассчитаны на компиляцию.
Иногда один и тот же язык может использовать и компилятор, и интерпретатор. К числу таких языков относится, например, Бейсик. Как правило, программы-компиляторы и интерпретаторы называются так же, как и языки, для перевода с которых они предназначены. Слова Паскаль, Ада, Си могут относиться как к названиям языков, так и к названиям соответствующих программ.
Недостаток компилятора - трудоёмкость трансляции языков программирования, ориентированных на обработку данных сложных структур, часто заранее неизвестной или динамически меняющейся во время работы программы. С помощью интерпретатора, наоборот, допустимо в любой момент остановить программу, исследовать содержимое памяти, организовать диалог с пользователем, выполнить сколь угодно сложные преобразования и при этом постоянно контролировать состояние окружающей программно - аппаратной среды, благодаря чему достигается высокая надёжность работы.
Недостатком интерпретаторов является то, что они тихоходны. Ими затрачивается слишком много времени на разгадывание того, что делать, вместо того чтобы заниматься действительно делом. При исполнении программных операторов, интерпретатор должен сначала сканировать каждый оператор с целью прочтения его содержимого (что этот человек просит меня сделать?), а затем выполнить запрошенную операцию. Операторы в циклах сканируются излишне много. В реальных системах программирования перемешаны технологии и компиляции и интерпретации. Причиной вновь вспыхнувшего интереса к компиляторам стало появление быстрых и сложных 64-разрядных микропроцессоров, типичным представителем которых можно считать Intel Itanium. Ответственность за увеличение производительности, на которое потенциально способны будущие 64-разрядные процессоры, ложится на компиляторы нового поколения. Такие компиляторы уже создаются в исследовательских лабораториях ряда компаний - Hewlett-Packard, Intel, MetaWare, Microsoft и других. В феврале прошлого года компания Silicon Graphics объявила о том, что ее оптимизированные компиляторы позволяют увеличить на 30-100% по сравнению с существующими продуктами производительность программ, работающих на компьютерах с процессорами Itanium и операционной системой Linux. Как и их предшественники, оптимизированные компиляторы преобразуют программы на высокоуровневом языке в машинный код. Помимо этого, они гарантируют максимально эффективное использование памяти (и в первую очередь процессорного кэша и механизма распараллеливания). Например, процессоры Itanium предназначены для того, чтобы одновременно обрабатывать до шести команд на каждый такт процессора. В прошлом году Microsoft анонсировала C#, объектно-ориентированный язык программирования, согласованный с XML. Корпорация подает новый язык как логическое продолжение Си и C++ для Web-приложений. Ключевыми модулями станут Common Language Runtime для C# и специальный компилятор, который преобразует текст, написанный на традиционных языках Кобол, Perl, Фортран или других, в промежуточный язык, который будет работать на новой платформе Microsoft .Net. Может появиться новое поколение компиляторов, позволяющих увеличить производительность до уровня, позволяющего убедить профессионалов в необходимости использовать 64-разрядные аппаратные архитектуры. (См. приложение№1).
КЛАССИФИКАЦИЯ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ
Существующие языки программирования классифицируют по четырём основным группам: процедурные, объектно ориентированные, функциональные и логические. Дадим краткие определения каждого подхода.
Процедурное программирование - такое программирование, когда программа отделена от данных и состоит из последовательности команд, обрабатывающих данные. Данные как правило хранятся в виде переменных. Весь процесс вычисления сводится к изменению их содержимого.
Декларативные языки программирования - это языки объявлений и построения структур. К ним относятся функциональные и логические языки программирования. В этих языках не производится алгоритмических действий явно, то есть алгоритм не задается программистом, а строится самой программой. В декларативных языках задается, производится построение какой-либо структуры или системы, то есть декларируются (объявляются) какие-то свойства создаваемого объекта. Эти языки получили широкое применение в системах автоматизированного проектирования (САПР), в так называемых CAD-пакетах, в моделировании, системах искусственного интеллекта.
Объектно-ориентированное программирование - в этих языках переменные и функции группируются в так называемые классы (шаблоны). Благодаря этому достигается более высокий уровень структуризации программы. Объекты, порождённые от классов, вызывают методы (функции или процедуры) друг друга и меняют таким образом состояние свойств (переменных). С формально-математической стороны объектно-ориентированный способ написания программ базируется на процедурной модели программирования, но с содержательной стороны ООП базируется не на функции, а на объекте, как целостной системе, имеющей стандартный автоматический межобъектный интерфейс.
Сетевые языки - языки предназначенные для организации взаимодействия удаленных компьютеров в интенсивном интерактивном режиме, а поэтому они построены на принципах интерпретации, то есть построчной, интерактивной обработки строк программного кода, описывающего некоторый сценарий (скрипт) сетевого взаимодействия компьютеров, поэтому часто они называются скриптовыми языками, хотя скриптовые языки не обязательно являются сетевыми, к примеру, пакетные командные языки различных операционных сред.
МАШИННО-ОРИЕНТИРОВАННЫЕ ЯЗЫКИ
Машинно-ориентированные языки - это языки, наборы операторов и изобразительные средства которых существенно зависят от особенностей ЭВМ (внутреннего языка, структуры памяти и т.д.). Машинно-ориентированные языки позволяют использовать все возможности и особенности Машинно - зависимых языков: высокое качество создаваемых программ (компактность и скорость выполнения); возможность использования конкретных аппаратных ресурсов; предсказуемость объектного кода и заказов памяти; для составления эффективных программ необходимо знать систему команд и особенности функционирования данной ЭВМ; трудоемкость процесса составления программ ( особенно на машинных языках и ЯСК), плохо защищенного от появления ошибок; низкая скорость программирования; невозможность непосредственного использования программ, составленных на этих языках, на ЭВМ других типов. Машинно-ориентированные языки по степени автоматического программирования подразделяются на классы.
Машинный язык. Отдельный компьютер имеет свой определенный Машинный язык (далее МЯ), ему предписывают выполнение указываемых операций над определяемыми ими операндами, поэтому МЯ является командным. Однако, некоторые семейства ЭВМ (например, ЕС ЭВМ, IBM/370/ и др.) имеют единый МЯ для ЭВМ разной мощности. В команде любого из них сообщается информация о местонахождении операндов и типе выполняемой операции.
В новых модулях ЭВМ намечается тенденция к повышению внутренних языков машинно-аппаратным путем реализовывать более сложные команды, приближающиеся по своим функциональным действиям к операторам алгоритмических языков программирования.
Языки Символического Кодирования. Языки Символического Кодирования (далее ЯСК), так же, как и МЯ, являются командными. Однако коды операций и адреса в машинных командах, представляющие собой последовательность двоичных (во внутреннем коде) или восьмеричных (часто используемых при написании программ) цифр, в ЯСК заменены на символы (идентификаторы), форма написания которых помогает программисту легче запоминать смысловое содержание операции. Это обеспечивает существенное уменьшение числа ошибок при составлении программ.
Автокоды. Есть также языки, включающие в себя все возможности ЯСК, посредством расширенного введения макрокоманд - они называются Автокоды. В различных программах встречаются некоторые достаточно часто использующиеся командные последовательности, которые соответствуют определенным процедурам преобразования информации. Эффективная реализация таких процедур обеспечивается оформлением их в виде специальных макрокоманд и включением последних в язык программирования, доступный программисту. Макрокоманды переводятся в машинные команды двумя путями - расстановкой и генерированием. В постановочной системе содержатся «остовы» - серии команд, реализующих требуемую функцию, обозначенную макрокомандой. Макрокоманды обеспечивают передачу фактических параметров, которые в процессе трансляции вставляются в «остов» программы, превращая её в реальную машинную программу. В системе с генерацией имеются специальные программы, анализирующие макрокоманду, которые определяют, какую функцию необходимо выполнить и формируют необходимую последовательность команд, реализующих данную функцию. Обе указанных системы используют трансляторы с ЯСК и набор макрокоманд, которые также являются операторами автокода. Развитые автокоды получили название Ассемблеры. Сервисные программы и пр., как правило, составлены на языках типа Ассемблер. Более подробно о языке Ассемблер я расскажу в главе 5.Макрос. Язык, являющийся средством для замены последовательности символов описывающих выполнение требуемых действий ЭВМ на более сжатую форму - называется Макрос (средство замены). В основном, Макрос предназначен для того, чтобы сократить запись исходной программы. Компонент программного обеспечения, обеспечивающий функционирование макросов, называется макропроцессором. На макропроцессор поступает макроопределяющий и исходный текст. Реакция макропроцессора на вызов-выдача выходного текста. Макрос одинаково может работать, как с программами, так и с данными.
МАШИННО-НЕЗАВИСИМЫЕ ЯЗЫКИ
Машинно-независимые языки - это средство описания алгоритмов решения задач и информации, подлежащей обработке. Они удобны в использовании для широкого круга пользователей и не требуют от них знания особенностей организации функционирования ЭВМ и ВС.
Подобные языки получили название высокоуровневых языков программирования. Программы, составляемые на таких языках, представляют собой последовательности операторов, структурированные согласно правилам рассматривания языка (задачи, сегменты, блоки и т.д.). Операторы языка описывают действия, которые должна выполнять система после трансляции программы на МЯ. То есть, командные последовательности (процедуры, подпрограммы), часто используемые в машинных программах, представлены в высокоуровневых языках отдельными операторами. Программист получил возможность не расписывать в деталях вычислительный процесс на уровне машинных команд, а сосредоточиться на основных особенностях алгоритма.
Проблемно - ориентированные языки. С расширением областей применения вычислительной техники возникла необходимость формализовать представление постановки и решение новых классов задач. Необходимо было создать такие языки программирования, которые, используя в данной области обозначения и терминологию, позволили бы описывать требуемые алгоритмы решения для поставленных задач, ими стали проблемно - ориентированные языки. Эти языки - языки ориентированные на решение определенных проблем, должны обеспечить программиста средствами, позволяющими коротко и четко формулировать задачу и получать результаты в требуемой форме.
Проблемных языков очень много, например: Фортран, Алгол - языки, созданные для решения математических задач; Simula, Слэнг - для моделирования; Лисп, Снобол - для работы со списочными структурами. О них я расскажу дальше.
Универсальные языки. Универсальные языки были созданы для широкого круга задач: коммерческих, научных, моделирования и т.д. Первый универсальный язык был разработан фирмой IBM, ставший в последовательности языков Пл/1. Второй по мощности универсальный язык называется Алгол-68. Он позволяет работать с символами, разрядами, числами с фиксированной и плавающей запятой. Пл/1 имеет развитую систему операторов для управления форматами, для работы с полями переменной длины, с данными организованными в сложные структуры, и для эффективного использования каналов связи. Язык учитывает включенные во многие машины возможности прерывания и имеет соответствующие операторы. Предусмотрена возможность параллельного выполнение участков программ. Программы в Пл/1 компилируются с помощью автоматических процедур. Язык использует многие свойства Фортрана, Алгола, Кобола. Однако он допускает не только динамическое, но и управляемое и статистическое распределения памяти.
Диалоговые языки. Появление новых технических возможностей поставило задачу перед системными программистами - создать программные средства, обеспечивающие оперативное взаимодействие человека с ЭВМ их назвали диалоговыми языками. Эти работы велись в двух направлениях. Создавались специальные управляющие языки для обеспечения оперативного воздействия на прохождение задач, которые составлялись на любых раннее неразработанных (не диалоговых) языках. Разрабатывались также языки, которые кроме целей управления обеспечивали бы описание алгоритмов решения задач.
Необходимость обеспечения оперативного взаимодействия с пользователем потребовала сохранения в памяти ЭВМ копии исходной программы даже после получения объектной программы в машинных кодах. При внесении изменений в программу с использованием диалогового языка система программирования с помощью специальных таблиц устанавливает взаимосвязь структур исходной и объектной программ. Это позволяет осуществить требуемые редакционные изменения в объектной программе.
Одним из примеров диалоговых языков является Бейсик. Он использует обозначения подобные обычным математическим выражениям. Многие операторы являются упрощенными вариантами операторов языка Фортран. Поэтому этот язык позволяет решать достаточно широкий круг задач.
Непроцедурные языки. Непроцедурные языки составляют группу языков, описывающих организацию данных, обрабатываемых по фиксированным алгоритмам (табличные языки и генераторы отчетов), и языков связи с операционными системами. Позволяя четко описывать как задачу, так и необходимые для её решения действия, таблицы решений дают возможность в наглядной форме определить, какие условия должны быть выполнены, прежде чем переходить к какому-либо действию. Одна таблица решений, описывающая некоторую ситуацию, содержит все возможные блок-схемы реализаций алгоритмов решения.
Табличные методы легко осваиваются специалистами любых профессий. Программы, составленные на табличном языке, удобно описывают сложные ситуации, возникающие при системном анализе.
КРИТЕРИИ ВЫБОРА СРЕДЫ И ЯЗЫКА РАЗРАБОТКИ ПРОГРАММ
При выборе языка программирования нужно учитывать множество факторов. Например, если при разработке динамической Web-страницы вы в качестве наилучшего варианта выберите JavaServer Pages (JSP)/сервлеты, другие могут предпочесть PHP или аналогичный язык сценариев. Не существует какого-то одного языка, который является наилучшим выбором. Можно отдать предпочтение определенным факторам, таким как производительность и безопасность корпоративных приложений, по сравнению с другими факторами, такими как количество строк кода. Любое решение сопряжено с какими-то компромиссами.
После получения проекта или задания нужно выполнить подготовительную работу до решения поставленной задачи. Зачастую выбор языка не рассматривается как часть этой подготовительной работы.
При выборе языка для персонального проекта можно положиться на свои личные предпочтения. Здесь может оказаться важным количество строк кода; очевидным выбором будет язык, позволяющий выполнить задачу при помощи 10 строк кода вместо 20. Сначала хочется получить решение, а потом позаботиться об удобочитаемости или производительности.
В проектах для крупных организаций применяется другой сценарий. Для решения конкретной проблемы группы разработчиков создают компоненты, взаимодействующие и взаимосвязанные между собой. На выбор языка могут повлиять такие факторы, как переносимость программы на другую платформу или доступность ресурсов.
Правильный выбор языка программирования поможет создать компактное, простое в отладке, расширении, документировании и исправлении ошибок решение. При выборе языка программирования учитываются следующие факторы:
- Целевая платформа.
- Гибкость языка.
- Время исполнения проекта.
- Производительность.
- Поддержка и сообщество.
- Целевая платформа
Самым важным фактором является платформа, на которой программа будет работать. Рассмотрим для примера Java™ и C. Если программа написана на C и должна работать на машинах с Windows® и Linux®, потребуются компиляторы для платформ и два разных исполняемых файла. В случае с Java сгенерированного байт-кода будет достаточно для выполнения программы на любом компьютере, на котором установлена виртуальная Java-машина.
Аналогичный аргумент применим и для Web-сайтов. Они должны выглядеть и работать одинаково во всех браузерах. Использование тегов CSS3 и HTML5 без проверки совместимости с браузерами приведет к разному отображению и поведению сайта в разных браузерах.
Гибкость языка определяется тем, насколько легко можно добавлять к существующей программе новые функциональные возможности. Это может быть добавление нового набора функций или использование существующей библиотеки для добавления новой функциональности. Рассмотрите следующие вопросы, связанные с гибкостью:
- Можно ли использовать новую функциональность без подключения новой библиотеки?
- Если нет, доступна ли эта функциональность в библиотеке языка?
- Если эта функциональность не встроена в язык и не доступна в библиотеке, какие усилия нужно приложить для ее создания с нуля?
До принятия решения необходимо знать, как спроектирована программа, и какие функциональные возможности оставлены на потом.
Хотя сравнение этих языков технически некорректно, рассмотрим Perl и Python. Perl имеет встроенную поддержку регулярных выражений. В Python необходимо импортировать модуль re из стандартной библиотеки.
Время исполнения – это время, необходимое для создания рабочей версии программы, т.е. версии, готовой для работы в производственных условиях и выполняющей предусмотренные функции. При расчете этого времени необходимо учитывать не только логику управления, но и логику представления.
Время исполнения проекта очень зависит от размера кода. Теоретически, чем легче изучить язык и чем меньше объем кода, тем меньше это время.
Например, сайт управления контентом на PHP-сценариях можно разработать за несколько дней, в то время как создание кода сервлетов может занять несколько месяцев, при условии, что вы начали изучать оба языка с нуля.
Каждая программа и платформа имеет определенный предел производительности, и на эту производительность влияет используемый при разработке язык. Существует множество способов сравнения скорости работы в одинаковой среде программ, написанных на разных языках. Можно использовать различные эталонные тесты, хотя их результаты не являются конкретной оценкой производительности какого бы то ни было языка.
Рассмотрим два варианта Web-приложения, написанных на Java и на Python. На основании данных тестирования можно прийти к заключению, что в одинаковой среде приложение, написанное на Java, должно работать быстрее, чем приложение, написанное на Python. А как насчет самой среды? Если средой является одноядерная x86 Ubuntu Intel Q6600, это справедливо, поскольку вычислительная мощность ограничена. А если взять Web-приложение, работающее в облачной среде на Google App Engine? Такое приложение может использовать практически неограниченную процессорную мощность, и обе программы возвратят результаты почти за одно и то же время. Теперь основным фактором выбора будет количество строк кода и удобство обслуживания.
Производительность языка нужно учитывать в случае, когда целевая среда не предлагает широкой масштабируемости, – например, при разработке для мобильных устройств.
Язык программирования, как и хорошая программа, должен опираться на твердую поддержку сообщества. Язык с активным форумом скорее всего будет популярнее замечательного языка, помощь по которому трудно найти.
Поддержка сообщества – это вики-сайты, форумы, учебные руководства и, самое важное, дополнительные библиотеки, развивающие язык. Прошли те дни, когда люди работали автономно. Никто не захочет перерывать горы документации, чтобы решить одну маленькую проблему. Если у языка много сторонников, это увеличивает шансы того, что ранее кто-нибудь сталкивался с вашей проблемой и уже написал об этом на вики-сайте или на форуме.
Хороший пример значения сообщества дает язык Perl. Архив Comprehensive Perl Archive Network (CPAN) поддерживается усилиями сообщества. Главная цель CPAN – помочь программистам в поиске модулей и программ, не включенных в стандартный дистрибутив Perl. По своей структуре он децентрализован; авторы обслуживают и улучшают свои собственные модули. Обычной практикой является создание ответвлений и конкурирующих модулей для одной и той же задачи или цели.
Сценарии проектов, приведенные в данном разделе, иллюстрируют различные факторы, влияющие на принятие решения относительно выбора языка программирования.
- REST-сервис для операции сложения.
- Простая программа чтения фидов.
- Корпоративные приложения.
- Исследовательские проекты.
REST-сервис для операции сложения
В этом сценарии рассматривается REST-сервис, выполняющий сложение. Сервис вызывается по URL, http://<url>?num1=number1&num2=number2, а результат должен содержать сумму двух чисел, переданных сервису. Эту программу можно написать на разных языках.
Возможности JSP позволяют использовать его преимущественно на корпоративном уровне. Например, в случае использования JSP программа при самом первом вызове загружается в память как сервлет. При каждом последующем запросе вызывается программа, находящаяся в памяти, что улучшает время ее реакции. Она также идеальна для среды Java. В случае использования PHP программа загружается в память при каждом вызове, что может увеличить время реакции для критических приложений.
Еще одной важной функциональной возможностью JSP, которая делает его более подходящим выбором для предприятия, является его многопоточность. PHP не имеет встроенной поддержки многопоточности.
Простая программа чтения фидов
Цель этого сценария заключается в предоставлении программе ссылки на фид. Программа должна получить фид и вывести все его заголовки. Чтобы сделать программу более интересной, мы подпишемся на фид в JSON-формате, а не в RSS.
Корпоративные приложения
При разработке корпоративных приложений проектировщики и программисты должны пройти по канату, балансируя между производительностью, безопасностью, простотой обслуживания и временем разработки. Речь идет не просто о выборе языка программирования, который обеспечит лучшие показатели производительности. Не менее важными факторами являются время создания рабочей версии, гибкость и степень интегрируемости в существующую инфраструктуру.
Важную роль играет также среда, в которой программа будет использоваться. Корпоративные программы никогда не работают автономно. Каждая программа становится частью более крупной задачи, поэтому важным фактором становится способность к взаимодействию.
Представьте себе, что предприятие, использующее свои реализованные на Java-коде Web-сервисы, хочет в качестве надежной платформы добавить WebSphere® MQ. Нет никакого смысла использовать для написания приложения C-интерфейсы системы WebSphere MQ; следует выбрать Java.
Исследовательские проекты
Предположим, что вашим следующим проектом является исследование в области, не связанной с ИТ и компьютерами. Пусть это будет, например, обработка изображений, обработка звука, использование водяных знаков или исследование фондового рынка. Необходимо создать код для имитации реального поведения, но вы не очень разбираетесь в компьютерах.
Проект требует быстрого написания большого количества необязательно идеального кода. Самым важным фактором является время исполнения. В данном случае это означает, насколько быстро можно сделать работающий компонент, чтобы быстрее вернуться к основной задаче. Это напоминает написание маленьких заглушек без особого внимания к способности к взаимодействию. Проект может стать полноценным продуктом, но в данный момент он находится на начальном этапе. Основной задачей является создание прототипа.
В такой ситуации на помощь могут прийти такие языки, как MATLAB и LISP. Если вы начнете создавать прототип на C, то погрузитесь в дебри переменных и указателей и не получите реальных результатов исследования. MATLAB интегрируется с C/C++ и Fortran, что позволяет вызывать C-код из MATLAB и наоборот.
ЗАКЛЮЧЕНИЕ
Изобретение языка программирования высшего уровня позволило нам общаться с машиной, понимать её (если конечно Вам знаком используемый язык), как понимает американец немного знакомый с русским языком древнюю азбуку Кириллицы. Проще говоря, мы в нашем развитии науки программирования пока что с ЭВМ на ВЫ. Поверьте, мне это не сарказм вы только посмотрите, как развилась наука программирования с того времени, как появились языки программирования, а ведь язык программирования высшего уровня, судя по всему ещё младенец. Но если мы обратим внимание на темпы роста и развития новейших технологий в области программирования, то можно предположить, что в ближайшем будущем, человеческие познания в этой сфере, помогут произвести на свет языки, умеющие принимать, обрабатывать и передавать информации в виде мысли, слова, звука или жеста. Так и хочется назвать это детище компьютеризированного будущего: «языки программирования "высочайшего" уровня». Возможно, концепция решения этого вопроса проста, а ближайшее будущее этого проекта уже не за горами, и в этот момент, где-нибудь в Запорожье, Амстердаме, Токио или Иерусалиме, перед стареньким 133MHz горбится молодой, никем не признанный специалист и разрабатывает новейшую систему искусственного интеллекта, которая наконец-то позволит человеку, с помощью своих машинных языков, вести диалог с машиной на ТЫ.
Современные языки программирования обеспечивают огромные преимущества по сравнению с предшествующими языками. Они более структурированы и предоставляют интегрированную среду разработки.
В 1970-х самым популярным языком общего применения был Pascal, но в 1980-х его применение резко сократилось.
Язык C, разработанный компанией Bell Laboratories, является очень эффективным, но низкоуровневым языком программирования. Язык C - это основа современных языков.
Самым большим преимуществом языка C++ над его предшественником является поддержка объектно-ориентированного программирования.
Visual Basic, наследник языка BASIC, обеспечивает наилучшую базу программирования для начинающих.
Выбор используемого языка определяется многими факторами.
Большинство языков имеют специализацию и подходят для написания определенного типа программ. Выбор языка определяется исходя из направленности разрабатываемой программы. Кроме того, программист должен отдавать себе отчет в том, насколько этот язык распространен, на тот случай, если кому-то в будущем придется заниматься обслуживанием его программы.
Список использованных источников
- «Информационные технологии управления»: Инфоматика-М.Ф. Меняев: Омега-л, 2003 г.;
- “Информатика”, базовый курс , 2-е издание./ Под ред. С.В. Симоновича-СПб. Питер, 2004.;
- Ассемблер для Windows , Пирогов В. Ю. 2007 г;
- Магданурова Г. И, «Visual Basic на практике», 2008г.;
- Васильев П. П. «Турбо Паскаль в примерах и задачах», 2002г.;
- А.С. Есипов, «Информатика и информационные технологии», 2004г.;
- В. В. Васильченко «FORTRAN. Программирование Windows-приложений на языке FORTRAN.», 2006 г;
- Брюс Эккель «Философия Java», 2015г.
- © Copyright IBM Corporation 2012 Джерри Регунад, Неха Джайн. Торговые марки. Выбор оптимального языка программирования
- Классификация правовых норм
- Теория и практика разделения властей (Общетеоретическая характеристика разделения властей)
- Характеристики и типы мониторов для персональных компьютеров
- Проектирование реализации операций бизнес-процесса «Управление документооборотом»(Выбор комплекса задач автоматизации)
- Система защиты информации в банковских системах (Описание работы банкоматов)
- Этапы и особенности ведения социально-психологического тренинга(Понятие коммуникативных навыков)
- Особенности политики мотивации персонала малых предприятий (Теоретические основы политики мотивации персонала малых предприятий)
- формирование ассортимента
- Классификация ассортимента, анализ потребительских свойств и основы производства товара
- Теория ожиданий и теория справедливости (Теоретические аспекты теории ожидания и теории справедливости)
- Коммерческая деятельность розничного торгового предприятия и ее совершенствование (на примере сети магазинов Хомяк) (Теоретические основы организации и развития розничной торговли)
- Выбор стиля руководства в организации (Анализ выбора стиля руководства в компании ООО «Дисма»)