Главная страница Visual 2000 · Общий список статей

Системы программирования — проблемы выбора и обучения
В продолжение дискуссии, начатой в статьях, которые были опубликованы в PC Week/RE N 18/97, с. 54 (автор В. Биллиг) и N 24'97, с. 47 (К. Малеванов)

Андрей Колесов

© 1997, Андрей Колесов
Авторский вариант. Это — неопубликованный вариант статьи. Спустя два месяца бы подготовлен, а затем и опубликован сокращенный вариант.

Заниматься поиском ответа на вопрос...
О критериях выбора инструмента
О перспективах языков программирования
Как учить программированию
Начинать сразу с разработки
Таблица. Использование средств разработки Microsoft


Заниматься поиском ответа на вопрос...

Заниматься поиском ответа на вопрос "какой язык программирования лучше" — дело довольно бесперспективное. Каждая система имеет свои плюсы и минусы, область применения, круг пользователей и пр. Именно поэтому мы имеем достаточно большое разнообразие средств, а не одно "самое лучшее".

Более того, успех того или иного языка определяется не столько изысканностью его синтаксических возможностей, сколько оптимальным соответствием потребностям пользователей. Наверное, лучшим примером здесь является Фортран, который всегда был объектом критики за примитивизм своих языковых конструкций. Но его жизнеспособность — на протяжении почти 50-ти лет, за которые ушли в прошлое его, вроде бы, более прогрессивные соперники (Алгол, PL и др.) — говорит о правильной стратегии развития данного языка.

В начало статьи

О критериях выбора инструмента

На самом деле прогноз перспектив языковых средств на российском рынке можно сделать довольно просто. При всех особенностях национальной разработки ПО мы довольно четко следуем в фарватере этой отрасли в США. Поэтому краткосрочный прогноз на два-три года выглядит так — надо посмотреть, что происходит на американском рынке сегодня. Это особенно хорошо видно на примере Visual Basic: еще относитльено недавно в нашей стране о нем даже и говорить-то в профессиональной среде было не очень принято. А сегодня он стал полноправным инструментом для отечественных профессионалов (сошлюсь в данном случае на трехлетний опыт участия в конференциях DevCon).

Именно поэтому представляется довольно странным, что дискуссия о языках почему-то свелась к дилемме "Visual C++ или Delphi". А как же VB, превосходящий по популярности в мире все остальные средства именно в профессиональной сфере? А где набирающая силу Java? (см. таблицу) Не говоря уже о том, что использование различных инструментов в одном проекте является довольно заурядным явлением: одного для разработки пользовательского интерфейса, второго — для создания расчетных модулей, третьего — для обеспечения доступа к базам данных и т.д. Так было и двадцать лет назад, но сегодня это стало особенно актуально в условиях компонентной модели создания приложений. И можно привести немало примеров проектов, в реализации которых на вопрос "или/или" дается ответ — "и то, и другое".

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

Если оставить в стороне все же довольно узкие области программирования, наподобие разработки драйверов, создания инструментов для графической обработки и пр., и посмотреть на характерный код массовых законченных приложений, то мы увидим в них в основном весьма примитивные языковые конструкции типа операторов присвоения и условных переходов. Проблемы разработки уже давно переместились в целом из области написания кодов в сферу умения использовать средства макропрограммирования. В результате проблема переносимости программного кода выглядит сегодня совершенно по-иному, чем ранее. Например, VB гораздо ближе к Delphi, чем к своим DOS-овским собратьям.

Решающее значение сейчас имеют возможности самой среды разработки, которые зачастую совсем не связаны с используемым в ней языком. Например, отсутствие до недавнего времени в VB настоящего компилятора и классов, а также другие ограничения связаны не с особенностями языка Бейсик, а с позиционированием данного инструмента в общей стратегии Microsoft в области средств разработки. Поэтому, видимо, имеет смысл вести речь не столько о языках программирования, сколько о конкретных инструментах. Обратите внимание — в статье Владимира Биллига говорится именно о Delphi и Visual С++, а не о Паскале и Си++.

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

Например, практически по единодушному признанию специалистов, сегодня Delhpi является одним из лучших и элегантных средств разработки. Но лидерство VB на рынке определяется его массовостью, которая породила невиданный ранее рынок различных дополнений и расширений для него, в результате чего он становится фактически стандартом макроязыка для широкого круга бизнес-приложений. На принятие решений при серьезных разработках существенное влияние оказывают сейчас слухи о неясных перспективах самой Borland. Разработчики со стажем хорошо помнят о существенном уроне, понесенном пользователям фирмы в результате прекращения поддержки и развития ею своего Turbo-Basic в 1988 г. (а это было одно из ведущих Бейсик-средств той поры). Да, эта система не погибла совсем, под названием PowerBasic она жива и развивается до сих пор, но в качестве конкурента для VB даже не упоминается уже лет пять.

В начало статьи

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

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

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

Конечно, есть важные области применения (причем не столько по объему, сколько по приоретету задач), где эффективность кода, наличие изощренных средств программирования являются очень важными. Здесь традиционно сильные позиции занимают Си и Паскаль. Однако нужно отметить, что лидерство Си подкрепляется не только его синтаксическими особенностями, но и его распространенностью на большинстве компьютерных платформ: мэйнфреймы, Unix, ПК (сейчас уже трудно разделить следствие и причину). С точки зрения большинства разработчиков основным доводом в пользу выбора Си являются не достоинства самого языка, а в первую очередь межплатформенная переносимость кода, что было всегда особенно важно в мире Unix-систем с их различиями в аппаратной реализации.

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

В этом плане весьма характерным является появление языка Java. В общественном мнении вокруг него почему-то сложилось несколько одностороннее восприятие, как технологии, ориентированной исключительно на некоторые новые области применения и методы реализации (Internet, апплеты, байт-код и пр.). Но это представляется, по крайней мере, не очень верным. Здесь как раз изначальными являются весьма существенные синтаксические упрощения Си. И заслуга Sun состоит в том, что она первая решительно призвала отказаться от архитектурных излишеств Си, которыми так гордились Си-программисты, но с которыми в душе, как выясняется, многие были давно готовы расстаться.

Областью применения Java являются отнюдь не только специальные области Internet — прошедший в начале июля в Лондоне международный Форум по Java показал, что основной объем разработок смещается в область традиционных прикладных систем. При этом Java представляет прямую конкуренцию не всем существующим языкам программирования, а именно Си/Си++. Собственно, именно так ее анонсировала в свое время Sun и это же подтверждается имеющейся статистикой.

Здесь хотелось бы подчеркнуть, что позиционирование Java в качестве некоторого "суперязыка", который, например, чуть ли не автоматически решает проблемы межплатформенной переносимости, является сегодня, по крайней мере, преждевременным. Может вполне оказаться, что в результате баталий "Sun против Microsoft, а Microsoft — против всех" единый стандарт языка вообще просто развалится на отдельные подмножества...

В начало статьи

Как учить программированию

В последние годы из общения с преподавателями вузов, студентами и разработчиками складывается впечатление, что сегодня сколь-нибудь определенного подхода к обучению программированию у нас вообще не существует. Прежде всего не следует смешивать в одну кучу проблемы обучения студентов и школьников, особенно детей в младших и средних классах. Точно также, говоря о студентах, нужно четко определиться, что методика и объем обучения для компьютерных и некомпьютерных специальностей должны различаться. Представляется, что сегодня основные проблемы у нас связаны с обучением именно последней категории. Важность этого вопроса определяется не только тем, что на "непрофессионалов" по-прежнему ложится довольно значительная часть программных разработок, особенно в научной сфере. Не менее существенно и то, что число реальных профессиональных программистов в значительной степени пополняется за счет представителей совсем других специальностей. Какие задачи мы собираемся решить, обучая студентов программированию? Еще десять лет над все было предельно ясно — круг пользователей ЭВМ практически на 100% состоял из программистов, а значит освоение "компьютерной грамотности" сводилось к изучению некого языка программирования. При этом наиболее характерным подходом было (и к сожалению, остается) обучение при принципу "что знаем, то и преподаем", особо не заботясь о вопросе, "а зачем это нужно". Результатом такого обучения является то, что большинство студентов забывает о программировании на следующий же день после сдачи экзаменов. Сегодня очевидно, что программирование является в лучшем случае частью проблемы компьютерного грамоты, а методика его преподавания должна поменяться самым решительным образом. За последние несколько лет технология разработки программ претерпела настоящие революционные изменения (визуальное программирование, событийная логика программы, компонентная технология, использование макросредств и пр.), что должно отразиться на методике обучения, но это заметно далеко не всегда. В этом плане схема "типичного пути начинающего программиста: Бейсик->Паскаль->Си++->программирование под Windows", приведенная в письме Кирилла Малеванова, при всей своей несовременности, является на самом деле весьма характерной. Причем не только для "Дворцов творчества юных", но и для высшей школы. Здесь возникает естественный вопрос: а что же делается на первых трех этапах? Программируется под DOS или вообще просто изучается теория языков? Но такая постановка вопроса напоминает известный анекдот о бассейне, который обещают наполнить водой, когда все научатся плавать. Если же речь идет о практической работе на компьютере, то не понятно, что имеется в виду, например, под словом "Бейсик" — GW, Turbo, Quick, Visual? Ведь это — совершенно разные системы! Которая из них уступает Паскалю и какому Паскалю? Вопросы эти являются отнюдь не праздными, так как даже в последние два-три года у меня было немало контактов с преподавателями школ и вузов, которые говорили о негибкости Бейсик, имея, оказывается, в виду систему GW времен эпохи PC (даже еще не XT) начала 80-х годов.

В начало статьи

Начинать сразу с разработки

Классическая схема обучения программированию раньше выглядела следующим образом: сначала теоретическое изучение синтаксиса некоторого языка, а уже потом выполнение некоторых практических заданий. Сегодня же для написания первых программ для Windows вообще не нужно знать об особенностях языка — нужно понимать общую логику разработки приложения (в том числе использования компонентной технологии и разнообразных дополнительных средств) и уметь работать в среде инструмента. И только после этого можно переходить к изучению языка для "изысканного программирования" на уровне кода. Какое средство разработки годится для решения подобной задачи? Мой ответ — Visual Basic. Во-первых, это позволит в максимальной степени абстрагироваться от языковых проблем. Во-вторых, — познакомиться со средой программирования, характерной для всех средств разработки Microsoft (возможно, они представляют собой не самые лучшие достижения в этой области, но их так много...) и даже других фирм, например Visual Fortran фирмы DEC. В-третьих, не нужно быть большим пророком, чтобы предсказать, что именно эта система будет наиболее массовой в нашей стране в ближайшее время. Например, можно уверенно предполагать, что к программированию в VBA в ближайшее время приобщится большинство "продвинутых" пользователей. Разумеется, для будущих профессиональных программистов курс типа "твое первое Windows-приложение" может быть только началом для дальнейшего обучения, в частности, языкам программирования. И здесь на вопрос "Си или Паскаль или Бейсик?" ответ представляется также очевидным — и то, и другой, и третье! В этом связи хотелось бы вспомнить замечательную книгу Дж. Йордана "Конструирование и структурное проектирование программ", изданную в нашей стране в переводе почти двадцать лет назад. В ней технология программирования излагалась на логическом уровне с примерами реализации сразу на четырех языках — Фортран, Кобол, ПЛ и даже Ассемблер. Это был прекрасный пример того, что на самом деле абсолютное большинство задач можно решить с помощью любого языкового средства, причем "красиво и современно" без всяких ссылок на их, например, неструктурированность. Сегодня же такое сравнительное изучение языков должно быть дополнено соответствующим сопоставлением разных сред разработки. Разумеется, такой подход не нацеливает на доскональное изучение конкретного средства разработки или языка, но разве это является целью компьютерного образования? Профессиональное освоение своего инструмента реально возможно только в ходе практической работе и самообучения. Для компьютерной отрасли, как наиболее динамично развивающейся сферы, как нигде актуальна основная цель образования — заложить основы для будущего обучения всю свою жизнь. Можно сразу предвидеть вопрос: а что делать, если у нас есть только 286-е компьютеры? Ответ на него, возможно, покажется резким — поменять их на что-то более современное. Представьте себе, что при подготовке водителей автобусов их сначала будут в течение года обучать езде на собачьих упряжках... По собственному опыту могу сказать — детальное знание систем Basic/DOS очень мало помогает (скорее, даже мешает) изучению VB для Windows. Но если даже брать за основу программирование в DOS, то акценты нужно делать на тех моментах, которые могут реально пригодится в будущем. Кстати, Visual Basic 1.0 и Windows 3.х, хотя и с трудом, но работают даже на 286-х.

В начало статьи

Таблица. Использование средств разработки Microsoft

 

Март 96

Июль 96

Ноябрь 96

Март 97

VB

39%

50%

49%

53%

VC++

26%

25%

26%

24%

VJ++

1%

1%

3%

6%

В начало статьи