Green-sell.info

Новые технологии
40 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Особенности системного программирования

Системное программирование

Системное программирование (или программирование систем) — подраздел программирования, заключающийся в работе над системным программным обеспечением.

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

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

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

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

Подводя итог, можно утверждать, что СИСТЕМНЫМ следует называть подраздел программирования как вида инженерной деятельности, в котором программист использует специфические и часто уникальные свойства и возможности ВНУТРЕННИХ УРОВНЕЙ вычислительной системы.

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

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

Wikimedia Foundation . 2010 .

Смотреть что такое «Системное программирование» в других словарях:

системное программирование — — [http://www.iks media.ru/glossary/index.html?glossid=2400324] Тематики электросвязь, основные понятия EN systems programming … Справочник технического переводчика

системное программирование — sisteminis programavimas statusas T sritis automatika atitikmenys: angl. system programming vok. Systemprogrammierung, f rus. системное программирование, n pranc. programmation système, f … Automatikos terminų žodynas

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

Системное программное обеспечение — Системное программное обеспечение это комплекс программ, которые обеспечивают управление компонентами компьютерной системы, такими как процессор, оперативная память, устройства ввода вывода, сетевое оборудование, выступая как «межслойный… … Википедия

ПРОГРАММИРОВАНИЕ — 1) процесс составления программы, плана действий; 2) дисциплина, изучающая методы и приемы составления программ. С определенной долей условности П. как дисциплина делится на программирование теоретическое, изучающее математич. абстракции программ … Математическая энциклопедия

ПРОГРАММИРОВАНИЕ — 1) процесс составления программы, плана действий. 2) Раздел информатики, изучающий методы и приёмы составления программ. С долей условности П. как дисциплина разделяется на: теоретическое, изучающее матем. абстракции программ (как объектов с… … Физическая энциклопедия

ПРОГРАММИРОВАНИЕ — совокупность и последовательность действий в целях получения конкретного результата; (1) П. в вычислительной технике процесс составления (см.) в соответствии с данным (см.) на ЭВМ, а также создание средств программного обеспечения, с помощью… … Большая политехническая энциклопедия

Перехват (программирование) — У этого термина существуют и другие значения, см. Перехват. Перехват (англ. hooking) технология, позволяющая изменить стандартное поведение тех или иных компонентов информационной системы. Содержание 1 Назначение технологии перехвата … Википедия

Событийно-ориентированное программирование — Парадигмы программирования Агентно ориентированная Компонентно ориентированная Конкатенативная Декларативная (контрастирует с Императивной) Ограничениями Функциональная Потоком данных Таблично ориентированная (электронные таблицы) Реактивная … Википедия

RAD (программирование) — У этого термина существуют и другие значения, см. RAD. Разработка программного обеспечения Процесс разработки ПО Шаги процесса Анализ • Проектиро … Википедия

Системное программирование — System programming

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

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

содержание

обзор

Следующие атрибуты характеризуют программирование систем:

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

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

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

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

история

Первоначально система программисты всегда писали в ассемблере . Эксперименты с аппаратной поддержки в языках высокого уровня в конце 1960 — х годов привели к таким языкам , как PL / S , BLISS , BCPL , и расширенный ALGOL для Burroughs больших систем . Forth также имеет применение в качестве языка системы. В 1980 — е годы, C стал повсеместно, опираясь на рост Unix . Совсем недавно подмножество C ++ называется Embedded C ++ видел некоторые используют, например , она используется в / O Kit I водителей MacOS .

Альтернативное использование

По историческим причинам некоторые организации используют термин программист системы для описания функции задания , которое было бы более точно назвать системный администратор . Это особенно верно в отношении организаций, компьютерных ресурсы исторически доминировали мэйнфреймы , хотя этот термин даже используются для описания рабочих функций , которые не связаны с мэйнфреймами. Такое использование возникло потому , что администрация IBM мэйнфреймов часто вовлекается написание пользовательского ассемблера ( Basic ассемблер от IBM (БАЛ)), который интегрирован с операционной системой , такими как OS / MVS , DOS / VSE или VM / CMS . Действительно, некоторые IBM программные продукты имели значительный вклад кода из персонала программирования клиента. Этот тип программирования прогрессивно реже, но термин программист системы по- прежнему является де — факто название должности для сотрудников , непосредственно управляющей IBM мэйнфреймы.

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

Системный программист

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

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

Содержание:

История профессии

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

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

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

В 1804 году был изобретен еще один программируемый механизм – жаккардовый ткацкий станок. Он воспроизводил узоры на тканях с помощью перфокарт.

Профессия системный программист в современном понимании возникла в середине XIX в., когда Чарльз Бэббидж и Ада Лавлейс создали аналитическую машину. И именно Ада стала первым программистом, в ее честь даже был назван универсальный компьютерный язык.

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

Особенности профессии

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

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

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

Обязанности

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

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

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

Важные качества

Профессия системный программист подходит тем, кто имеет:

  • аналитический склад ума;
  • отличную память;
  • любит точные науки.

Также необходимы усидчивость, педантичность, умение переключать внимание, внимательность, ответственность.

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

Навыки и знания

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

Ему необходимо уметь работать в системе open source и с различными инструментами анализа и разработки программных систем, писать программы, разрабатывать алгоритмы. Пригодятся знание С++, Ассемблер, физики, математики, английского языка.

Перспективы и карьера

В будущем у системного программиста есть возможность IT-директором, руководителем проекта, возглавить команду программистов.

Обучение

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

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

Те, кто все же хочет иметь диплом, должны поступить в ВУЗ.

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

Системы программирования

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

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

Специальное программное обеспечение состоит из прикладных программ, проблемно ориентированных на решение определенных задач.

Состав систем программирования

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

Попробуй обратиться за помощью к преподавателям

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

Системы программирования состоят из: трансляторов с языков высокого уровня; редактирующих и компонующих средств, а также средств загрузки программ; макроассемблеров (машинно-ориентированных языков); отладчиков машинных программ.

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

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

Процедурные (или алгоритмические) программы — это системы предписаний для решения определенных задач.

Компьютер лишь механически выполняет эти предписания.

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

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

Задай вопрос специалистам и получи
ответ уже через 15 минут!

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

К наиболее известным процедурным системам программирования относят:

  1. Fortran, один из старейших и по сей день используемых в решении задач математической ориентации язык.
  2. Basic, являющийся универсальным символическим кодом инструкций для начинающих пользователей, самый популярный среди пользователей.
  3. ALGOL, представляющий собой алгоритмический язык, сыгравший большую роль в теории, в настоящее время практически не используется.
  4. PL/1 — многоцелевой язык, который в настоящее время не используется.
  5. Си – широко используемый язык при создании систем программного обеспечения.
  6. Pascal – чрезвычайно популярный язык как среди новичков в программировании, так и среди профессионалов. На его основе созданы более мощные языки такие, как Ada, Delphi.
  7. COBOL – язык, ориентированный на общий бизнес, сейчас практически не используется.
  8. Delphi – очень популярный объективно-ориентированный язык визуального программирования.
  9. Java – платформенно независимый язык объективно-ориентированного программирования, эффективен при создании интерактивных web-страниц.

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

Машинно-ориентированные системы программирования

По уровню формализации входного языка, целевому назначению и структуре системы программирования делят на: машинно-ориентированные и машинно-независимые.

Машинно-ориентированные состоят из входного языка, наборов операторов и изобразительных средств. Для систем подобного типа характерны:

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

По степени автоматического программирования машинно-ориентированные системы подразделяют на классы:

  1. Машинный язык. В системе такого типа отдельный компьютер обладает своим определенным машинным языком, которому предписывается выполнение операций над операндами. Этот язык является командным.
  2. Система символического кодирования. В системах такого типа используют языки символического кодирования, являющиеся командными. Коды операций и адреса в машинных командах в языках символьного кодирования заменены символами (идентификаторами), формы написания которых помогают легче запоминать программисту смысловое содержание операции. Это способствует существенному уменьшению числа ошибок при составлении программ.
  3. Автокоды. Содержат все возможности языков символического кодирования через процесс расширенного введения макрокоманд. В различных программах часто встречаются некоторые используемые командные последовательности, соответствующие определенным процедурам преобразования информации. Эти последовательности оформляют в виде специальных макрокоманд, которые затем можно использовать в языке программирования при написании программ. Макрокоманды переводятся в машинные команды 2 способами: расстановкой и генерированием. В первом способе используются «остовы» – серии команд реализации требуемой функции, обозначенной макрокомандой. Макрокоманды передают фактические параметры, вставляемые в процессе трансляции в «остов» программы, преобразуя ее в реальную машинную программу. Системы с генерацией содержат специальные программы анализа макрокоманд, определяющие какую функцию нужно выполнить и формирующие последовательности команд, реализующих эту функцию. Обе системы используют трансляторы с языка символьного кодирования и наборы макрокоманд, являющиеся операторами автокода.
  4. Макросы. Представляют собой более сжатую форму записи, используемую для замены последовательности символов описания выполнения требуемых действий ЭВМ. Предназначены для сокращения записи исходных программ. Компонент программного обеспечения, с помощью которого обеспечивается функционирование макросов, называют макропроцессором. На него поступает макросопределяющий и исходный тексты. Реакцией макропроцессора на вызов является выдача выходного текста.
Читать еще:  Политика безопасности организации это

Машинно-независимые системы программирования

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

Машинно-независимые системы программирования подразделяют на:

  1. Процедурно-ориентированные системы. В этих системах входные языки программирования предназначены для записи при решении задач алгоритмов обработки информации. Эти языки обеспечивают программиста средствами четкого формулирования задач и получения результатов в требуемой форме.
  2. Проблемно-ориентированные системы используют в качестве входного языка язык программирования с проблемной ориентацией. Языки подобного типа обеспечивают программиста средствами короткой и четкой формулировки задач и средствами получения результатов в требуемой форме. Программы на этих языках программирования записываются в терминах решаемой задачи и реализуются через выполнение определенных процедур.
  3. Диалоговые языки. Обеспечивают оперативное взаимодействие пользователя с компьютером через сохранение в его памяти копии исходной программы в машинных кодах. В процессе изменений в программе система программирования устанавливает с помощью специальных таблиц взаимосвязь между структурами исходной и объектной программ, что дает возможность в дальнейшем редактировать объектную программу.
  4. Непроцедурные языки. Составляют группу языков, с помощью которых описывается организация обрабатываемых данных и языков связи с операционными системами. Являются табличными языками, позволяющими четко описывать как задачу, так и ее решения в наглядной форме. В одной таблице решений, описывающей некоторую ситуацию, содержатся все возможные блок-схемы реализаций алгоритмов решения.

Интерпретаторы и компиляторы

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

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

Далее сгенерированный объектный код обрабатывается специальной программой — сборщиком или редактором связей. В результате текст программы преобразовывается в готовый к исполнению файл, он сохраняется в памяти компьютера или на диске. Этот файл может самостоятельно работать под управлением опера¬ционной системы.

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

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

Так и не нашли ответ
на свой вопрос?

Просто напиши с чем тебе
нужна помощь

Программирование «с нуля». Как изучать системное программирование

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

Антиутопия компьютерной педагогики
Во многих современных учебниках по программированию настоятельно рекомендуется начинать с освоения какой-либо системы визуального программирования – Delphi, C++ Builder, Visual C++ или Visual Basic. При этом приводятся следующие аргументы:

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

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


Еще более спорным является тезис о целесообразности начинать изучение программирования непосредственно с объектного подхода. Спору нет, ООП – прогрессивная и современная технология, однако это – не панацея. И сейчас во многих случаях решения, диктуемые этим подходом, оказываются далеко не оптимальными. Но не это главное. Главное заключается в том, что идея программного моделирования предметной области, лежащая в основе концепции ООП, слишком сложна для восприятия без предварительной подготовки. И если понять сам принцип восприятия мира как множества взаимодействующих сущностей при наличии определенного философского фундамента еще возможно, то осознать, как исполняется объектная программа на ЭВМ, – почти непосильная задача.
Наконец, третий тезис также не бесспорен. Во-первых, потому что изучение программирования лишь на несколько процентов состоит в освоении конкретной среды, а большую часть времени и сил приходится тратить на осознание общих принципов, формирование специфики мышления, ознакомление с типовыми подходами и приемами. Во-вторых, практика показывает, что профессиональному программисту труднее всего работать именно в той среде, с которой начиналось его обучение.
Это легко объяснимо – на начальной стадии каждый из нас делает массу ошибок, формирует множество неверных представлений, которые впоследствии пересматриваются, однако оставляют заметный след в нашем сознании. И, вторично оказываясь в той же ситуации, с которой ему приходилось сталкиваться в процессе обучения, специалист как бы теряет накопленные профессиональные навыки и непроизвольно ищет решение на основании давних ассоциаций новичка. По крайней мере таково его первое движение, а именно оно играет основную роль в принятии разработчиком ключевых проектных решений.
Однако главное заключается в другом: использование визуальных сред, во всяком случае правильное использование, полностью заслоняет от пользователя архитектуру машины, специфику выполнения ею написанной программы. А между тем, для того, чтобы программирование не превращалось в мистический процесс укрощения своенравного компьютера, а оставалось ремеслом, профессией, очень важно, чтобы разработчик хорошо понимал принципы выполнения своей программы. И с этой точки зрения обучение на основе визуальных сред и ООП бессмысленно, ибо человек, наученный таким образом, подобен монтеру из известной рекламы – работающая программа невольно вызывает у него восклицание: «Ё-мое, что ж я сделал-то?»

Читать еще:  Редактор связей системы программирования

«К четырем прибавить два. «
Интересно, что идея начинать обучение с конца характерна только для программирования. В самом деле, никто ведь не пытается преподавать релятивистскую механику прежде законов Ньютона! Все науки прошли долгий путь развития, множество ошибочных и неточных теорий, некорректных экспериментов. Школьник, изучая их, как бы повторяет за несколько лет всё, что делало человечество в течение тысячелетий. Бессмысленная трата времени? Нет! Двигаясь таким образом, ученик как бы сам приходит к тем же выводам, что и его великие предшественники.
Отчего же не начать программирование с начала? Нет, не с тумблеров и светодиодов разумеется, но с фон-неймановской архитектуры и понятия программы как последовательности исполняемых команд. Естественно, рассматривать принципы машинной организации «всухую», особенно если вы молоды и честолюбивы, совсем неинтересно. А потому, если уж начинать писать программы, то лучше всего сразу осваивать язык ассемблера.
Парадокс? Ведь Ассемблер по сей день считается едва ли не самым сложным из языков программирования. Однако на самом деле он имеет немало достоинств именно с точки зрения «обучения с нуля».
Во-первых, Ассемблер прост. Это не просто сенсационное заявление – это факт. Архитектура компьютера, будь то IBM-совместимый ПК или промышленный контроллер от Toshiba, как правило, сравнительно проста – память, регистры, стек. Несколько видов адресации да условные и безусловные переходы. Порождаемый каждой командой эффект обычно тривиален для понимания, а потому весь процесс изучения сводится к механическому запоминанию мнемоник инструкций. Если последние достаточно логичны, как, например, в Ассемблере процессоров Intel, учить машинный язык совсем несложно.
Во-вторых, изучая язык Ассемблера, учащийся волей-неволей вынужден сталкиваться с архитектурными особенностями своего компьютера. Такие понятия, как сегменты памяти, порты или escape-последовательности из чисто абстрактных категорий становятся инструментами для решения прикладных задач. Более того, понимая, можно ли реализовать ту или иную программу на Ассемблере, хотя бы теоретически, программист ощущает пределы возможностей машины, осознает, что можно требовать от компьютера, а что – нет.
Еще одно несомненное преимущество заключается в том, что переход от Ассемблера к языку высокого уровня значительно проще, чем наоборот. Осваивая C++ или Паскаль, ассемблерщик представляет себе, как работает та или иная конструкция на уровне машинного кода, во что она будет скомпилирована. Соответственно, он понимает свою программу, не боится ее.
Кроме того, и это психологически важно, Ассемблер благодаря своей универсальности рождает уверенность, что в случае необходимости отдельные фрагменты программы могут быть написаны или отлажены на самом низком уровне. А это – пусть эфемерная, но всё же гарантия того, что любая техническая проблема может быть решена, пусть большой кровью, но наверняка.
И, наконец, даже сейчас язык Ассемблера иногда бывает полезен и даже незаменим. И не только при программировании для спецмашин, контроллеров и другого «экзотического» оборудования, но и при разработке некоторых программ для ПК – драйверов, системных утилит, фрагментов операционных систем, при реализации алгоритмов, требующих повышенной производительности.
Очень часто основным недостатком Ассемблера называют громоздкость написанных на нем программ и сложность их тестирования и отладки. Действительно, работать с десятками и сотнями тысяч строк кода самыми примитивными средствами нелегко. Но именно так рождается то упорство, та бесконечная настойчивость, без которой самый одаренный человек никогда не сможет стать хорошим программистом. Ибо для хорошего профессионала мало придумать красивый алгоритм, нужно еще уметь при необходимости дни и недели «выуживать» из него неуловимую, непонятную ошибку.

«Мы всё начнем сначала…»
Если вы вознамерились начать учиться программированию с освоения Ассемблера, то небесполезно будет знать несколько азбучных истин, способных существенно облегчить учебный процесс.
Во-первых – о книгах. Учиться программированию проще и эффективнее с книгой в руках, но достать в наше время хорошую книгу по Ассемблеру непросто. Чаще всего попадаются либо справочники по архитектуре ЭВМ, либо толстые учебники с массой примеров, лишающие читателя всякого удовольствия от самостоятельного творчества и мешающие воспринимать принципы построения программ, затмевая их массой ненужных деталей. Начинающему лучше всего подойдет простой справочник по системе команд процессора и функциям операционной системы. Удобным компьютерным вариантом такого пособия может служить система TechnoHelp.
Не стоит пытаться писать на Ассемблере под Windows. Вообще, желание сразу получить красивые окошечки мало совместимо с последовательным изучением программирования. В данном же случае вы рискуете утонуть в массе ненужных и непонятных деталей.
Первое, с чем следует ознакомиться, – организация ЭВМ: регистры, память, стек. Первые несколько программ логично написать максимально просто – несколько пересылок между регистрами и памятью, запись и чтение из стека, передачи управления, вызов процедур. Работу программ можно изучить по шагам (в режиме трассировки) в любом доступном отладчике – Turbo Debugger, AFD и даже MS Debug.
Далее можно переходить к функциям DOS – выводу на экран, работе с файлами, распределением памяти. Последний шаг – программирование внешних устройств: динамика, таймера, параллельного и последовательного порта. Имея в запасе такой инструментарий, можно переходить к реальным задачам. Интереснее, но и сложнее всего разрабатывать резидентные программы и драйверы: овладев этим искусством, вы можете смело переходить к языкам более высокого уровня.

Доброе напутствие
Чтобы закончить с общими рекомендациями по тому, как проще всего освоить язык Ассемблера, стоит дать еще несколько конкретных советов:
1. По мнению большинства ассемблерщиков, лучший транслятор для IBM PC – TASM фирмы Borland. Версия, поскольку вы вряд ли будете писать очень сложные программы, решающего значения не имеет.
2. Знание Ассемблера – не вершина, а только первая ступень к профессионализму. Если вам удалось в совершенстве овладеть этим языком, вы скорее всего хорошо представляете себе устройство компьютера и базовые принципы исполнения программ в однозадачной операционной системе. Это – необходимые навыки, но не более того.
3. Закончив изучать Ассемблер, познакомьтесь с одним из процедурных языков, лучше всего Паскалем или C++ в режиме расширенного C. Только поняв особенности конструкций высокого уровня, овладев технологией структурного программирования можно начать готовиться к штурму ООП.
4. Разрабатывая программы на Ассемблере, не стремитесь как можно шире использовать макросредства и специальные директивы компилятора. Во-первых, этим вы, скорее всего, сведете к нулю переносимость своей программы, во-вторых, для целей обучения значительно полезнее, чтобы каждая инструкция, исполняемая в программе, была написана вами собственноручно.
5. Не «срисовывайте» готовые примеры. Возможно, есть люди, способные обучаться на чужом опыте эффективнее, чем на своем, но только мне такие не известны. Естественно, модификация работающих примеров позволит получать результат значительно быстрее, чем при работе «с нуля», только познавательный эффект от нее будет, увы, невелик.
6. Стремитесь не только узнать, но и сделать: доделывайте работу до конца. Разработать хорошую программу на Ассемблере не просто, но если вы справитесь с этой задачей, быстрота и компактность вашего детища станут достойной наградой за труды.
Дерзайте, леди и джентльмены!

OCR: fir-vst, 2016
Рисунок: Игорь Копельницкий
©

Ссылка на основную публикацию
ВсеИнструменты
Adblock
detector
×
×