Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Свитки
  
 

Фильтр по датам

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
  
 
Во Флориде и в Королевстве сейчас  12:02[Войти] | [Зарегистрироваться]

К вопросу о выборе языка программирования.

Владимир Лось
дата публикации 21-12-1999 00:00

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

Это не вопрос вкуса, симпатий или нелюбви. Здесь не может быть компромиссов, ибо, если мы вступаем в сделку с совестью или отходим от истины, то получается нечто вроде творений Microsoft. Опыт активного программирования у меня - тринадцать лет. Диапазон проектов - от автоматизации аэродинамической трубы до разработки информационной экспертной системы анализа экономической деятельности министерства. Языки реализации - от ассемблера PDP-11 до С++. География от Новосибирска до Киева. Кроме того, опыт преподавательской деятельности в ВУЗе (микропроцессоры, ОО-технологии, основы программирования).

Теперь - тишина на фланге С-онистов! Посидите пять минут спокойно, помолчите, не размахивайте руками, отдохните. Дайте слово паскалисту (если кому-то согреет душу - пасквилянту).

Да! Вы (поклонники С/С++) сейчас на коне! Ни в одной фирме нельзя быть нанятым на работу без экзамена на знание С++. Посмотрите объявления на работу в Интернете. Полистайте околокомпьютерную журнальную макулатуру (это вообще отдельная песня) - так все и пестрит С/С++ и Java. Скорее вызывает удивление появление статей, в которых авторы пытаются рассказать о том, что существует и нечто еще в мире языков и операционных систем. А ведь есть!

Для начала небольшое лирическое отступление.

Из опыта преподавания последних лет в ВУЗе, я сделал интересное наблюдение. У студентов (даже первокурсников!) стал формироваться некий «американский» стиль мышления и манеры выполнения заданий. То есть ГЛАВНЫМ ПРИ ОБУЧЕНИИ СТАНОВИТСЯ ПРОЦЕСС НАБОРА СТАНДАРТНЫХ РЕШЕНИЙ ПОД ТИПОВЫЕ СИТУАЦИИ. ПРИЗЫВЫ К ОСМЫСЛЕНИЮ ПРИНЦИПОВ, НА КОТОРЫХ ПОЛУЧЕНО ТО ИЛИ ИНОЕ РЕШЕНИЕ, ПОНИМАНИЮ ВАЖНОСТИ РАЗВИТИЯ РЕШЕНИЯ ЗАДАЧИ ДО ОБОБЩЕННОГО ПОДХОДА, ВСТРЕЧАЮТ ВСЕ БОЛЬШЕЕ НЕ ТО, ЧТО НЕЖЕЛАНИЕ, А ПРОСТО НЕПОНИМАНИЕ со стороны студентов. Поясню на собственном примере. На нашем потоке (специальность АСУ) училось примерно 55 человек. Где-то треть в той или иной степени были заинтересованы в овладении специальностью. Все 19 человек, по моим сведениям, не смотря на «веселые» времена работают по специальности. Об остальных говорить не будем - то был известный балласт, пришедший в ВУЗ кто за «корочкой», кто за мужем, кто чтобы продлить детство. А что сейчас? Первый курс этого года: 63 души, 3 группы. НА ШЕСЬДЕСЯТ ТРИ ЧЕЛОВЕКА ТОЛЬКО ЧЕТВЕРО С КАКИМ-ТО ПОНИМАНИЕМ КУДА ОНИ ПОПАЛИ И ЧТО ИМ НУЖНО ДЕЛАТЬ! Из остальной пассивной массы где-то половина способно проглотить начитанный материал, с толкача уяснить его на лабораторных работах и практике и продержаться до ближайшей сессии. Оставшийся контингент, видимо расстанется с институтом после февраля...

Зачем я все это рассказываю? Затем, что это сегодняшнее положение вещей. А ведь у меня перед глазами студенты всех пяти с половиной курсов нашей специальности. Можно проследить изменение миропонимания, подходов к обучению и восприятию материала, отношения к специальности вообще и к программированию в частности. Изменение не только в зависимости от года обучения, но и, как я говорил, от года поступления. И вот тут у меня возникает двоякое чувство. С одной стороны мне страшно за них, жалко своих времени и сил, которые я на них трачу в стенах ВУЗа (тем более, что жизнь за этими стенами вносит свои коррективы в виде базарной экономики и вечные ценности как-то стали выходить из моды). С другой - возникает чувство дьявольского спокойствия: С ТАКОГО РОДА КОНТИНГЕНТОМ МНЕ НЕЧЕГО БОЯТЬСЯ ОСТАТЬСЯ БЕЗ РАБОТЫ!

Можно опять переспросить: ну и о чем этот плач Ярославны? А о том, что активно и критически мыслящий студент и специалист стал выходить из моды. Мышление, настроенное на накопление суммы решений, просто не в состоянии трезво и критично оценить то, что ему предлагается в качестве средства решения встающих перед ним задач. Получилось в одном месте - получится и в другом! Что об этом пишут в толстых журналах? Ах там еще и иностранный дядька-менеджер в крахмальной рубашке и при красивом галстуке объясняет, что успех его фирмой достигнут за счет применения этого средства? А что местная околокомпьютерная богема со старшего курса по этому поводу вчера на ВЦ трепала? А посмотрим объявления на сайтах в Интернете в требованиях к кандидатам на работу? И там это средство среди обязательных, которые необходимо знать? Заучу-ка я его раз и навсегда и у меня больше никогда проблем не будет! Это мысли пассивной части, т.н. «среднего» студента. А что те кто поактивней? У них мысли более оформлены на освоение продукта. Эти и книжки по нему достают (даже перечитывают - и не один раз). К преподавателю пристают с вопросами. Но только тематика вопросов опять-таки странновата. Вопросы все больше не по поводу подходов к решению частей задач, а о способах выражения тех или иных понятий предметных областей решаемых задач средствами языка. Вы можете задать вопрос: а что же тут странного? - люди учатся, у них возникают проблемы при освоении нового материала, они консультируются у преподавателя, а этот преподаватель еще и возмущается. Да, согласен, если бы это были студенты первого-второго года обучения. А если к Вам приходит на консультацию не самый глупый лоб с четвертого-пятого курса и начинает задавать вопросы, касающиеся чисто синтаксических конструкций языка, на котором он программирует (по крайней мере подразумевается) уже 4 года?

Поначалу (в первый год преподавательской активности) я с готовностью шел навстречу. В этом была польза и для меня: шлифовались навыки объяснения, заполнялись пробелы, все раскладывалось по полочкам в голове. Но потом я провел анализ зависимости задержек сдач проектов и количества посещений консультаций в зависимости от выбранного языка реализации. Догадайтесь о результатах сами. Кто-то опять поднимет тезис примитивности Паскаля. Ребята! Простота и примитивность, согласитесь, разные вещи. Людям (студентам, программистам) надо решать задачи, а не бороться с синтаксическими извратами, опциями среды и командной строки или ворошить восьмисотстраничные руководства в поисках ответа почему же что-то идет не так. Я, как системотехник, работаю в терминах предметной области, мне не нужно знать, что при таком-то ключе компилятор с линковщиком разместят элементы данных по адресам кратным четырем, а иначе слепят все вместе, и следить при этом за моей подпрограммой копирования областей памяти. Я могу и не знать о всех частных условиях вызовов конструкторов копирования. Мне более понятно понятие модуля как конкретной единицы компиляции и группирования близких по смысловому значению переменных и функций в файл исходника, чем «размазанное» по нескольким файлам понятие пространства имени. Что легче: прочитать 20-ти страничное руководство с описанием общих принципов, поняв которые, можно обращаться к этому руководству раз в год или постоянно таскать с собой двухтомник с описанием кучи исключений из правил и рассмотрением частных случаев? А как на счет перехода на другую систему программирования (без смены языка)? Помнится создатели С++ говорили о мобильности? А о совместимости средств разработки забыли? А что по поводу файлов помощи в среде? Я имею в виду их размеры, - прямое следствие «успешных» реализаций сред разработки. Сюда еще приплюсуйте описания API тех ОС, на которых эти среды установлены! А ведь есть еще и куча всяких тулсов третьих фирм, направленных на «улучшение» этих сред и «облегчение» труда разработчика. Нико не подсчитывал время, затраченное на их изучение? А различного рода библиотеки, причем с идеологией, отличной от первоначальной идеологии среды разработки и операционных систем? После этого не приходится удивляться недоверчивым взглядам собеседников, когда рассказываешь им об инсталяхах операционок, помещающихся на одной дискете или средах разработки в единицы мегабайт (кстати две трети из этого объема - хелпы). Говоришь с людьми о новых технологиях и слышишь, что кто-то создал ActiveX -элемент размером всего 56 килобайт и начинаешь ловить многозначительные переглядывания, когда начинаешь рассказывать, что элемент с такими же функциональными возможностями может быть размером в полтора килобайта. А при словах, что операционка может быть размером в 200 кило (и при этом воплощать все передовые тенденции развития ПО) , явственно чувствуешь желание собеседников вызвать скорую или просто набить вам фейс - как же! ведь тут не использовался С++.

Так что же? Я могу еще долго мыслью по древу расплываться, приводить всяческие аргументы. Но все это перекрывает один и тот же контраргумент. Выражается он в вопросах вроде: кто на этом работает или что на этом написано? Не то, чтобы это удар ниже пояса, но ежиться заставляет. Крыть нечем. Все что сделано Виртом по проекту Оберон и Компонентному Паскалю (в Черном Ящике) знакомо ограниченной части академической среды и десятку энтузиастов. Какие-то фирменные вещи мне не известны. Публикаций (по крайней мере на русском языке) очень мало, да и то, по-моему, только в Интернете. О выдающихся качествах как самого Компонентного Паскаля и фреймвока в среде Черного Ящика знают очень мало. Я, как преподаватель, просто не решусь делать курс по этой системе: мне жаль студентов и своих усилий. Применения (в обозримом будущем) они этой системе не найдут и канут их знания как вода в песок. Причина та же: спрос на тот или иной язык (среду разработки) формируется рынком - а, значит, все теми же троечниками менеджерами-недоучками обчитавшимися рекламных врезок а-ля «новое средство от NuMega поможет вам избежать ошибок при работе с памятью», которые смыслят в программировании как ежик в пылесосах. Вот и приходится возвращаться к монстрам типа VisualStudio на шести(!!!!!!!!!!!) сидюках. Кстати, говорят уже сервис-паки пошли по народу.

Программирование не искусство. Это наука. Проектирование программ - отчасти искусство, согласен. Искусство в программировании возникает там, где пытаемся преодолеть трудности, вызванные недостаточной проработкой решения задачи на стадии проектирования. Тогда возникает законный вопрос: а какая разница в том, какой язык мы выбираем для реализации проекта? Первая мысль - никакой! Вторая - если четко проработан проект системы, ясно определена предметная область и ее сущности (с их поведением, наследованием, внутренней структурой и т.п.), произведена разбивка всего этого на логически связанные блоки (модули), то зачем нам какие-то сложные навороты в языке, он должен быть как можно проще (повторюсь: проще - не примитивнее!), для того что бы просто выразить в терминах математических абстракций, решения стадии проектирования. Кстати простота языка позволят легко применять его не только программистам, но и на более ранних этапах, - аналитикам, алгоритмистам, дизайнерам, - что повысит степень их взаимопонимания и координации (при перепроектировании). (Вы попробуйте какого-нибудь консультанта по предметной области (если он не бывший программист-практик) попросить почитать третье издание Страуструпа! Отличное упражнение на заведение врагов.) Кроме всего прочего, для простого языка проще разрабатывать средства поддержки (вроде CASE-средств). Именно для этого и создавались Оберон и Компонентный Паскаль: с одной стороны - способность быть языком описания проектируемых систем, с другой - удобным средством реализации принятых решений.

Компонентный Паскаль очень прост. Из моего опыта: хватает одной лекции для аудитории, знакомой с Delphi или С/С++-средами. Правда я говорю ТОЛЬКО о языке. Изучение классов, формирующих BCF (система классов в BlackBox Component Builder, фреймвок), занимает более значительное время (что естественно для такого класса ПО - Вы спросите любого сишника сколько времени ему понадобилось, чтобы понять идеологию (если таковая существует) и научиться свободно применять MFC). Что интересно, типичной реакцией студентов после лекции был вопрос: Зачем понадобилось это объяснять? ЭТО И ТАК ПОНЯТНО! Вам ни о чем это не говорит? Вирт вычленил самую суть, убрал все наносное, оставил только то что нужно, основы. На этой основе создал минимальный набор классов (типов) для повседневной работы, - а дальше счастливого пути - берите ваши задачи и просто решайте их в этой среде. Решайте задачи, а не постигайте потаенные и неописанные нюансы функционирования компилятора, среды разработки или библиотеки классов. Если Вам что-то не нравится - перекраивайте среду, режьте, добавляйте новые модули, переделывайте Help - все в вашей власти. Есть ряд запрещенных территорий - но это именно то, что позволяет Вам быть таким свободным, - лучше (по-началу) в них не лезть. Гибкость среды поражает. Первая реакция на размеры модулей (реакция сишников, конечно): «Ну в ВижуалБэйсике тоже модули миниатюрные!». И сразу удивленно-недоверчивый взгляд, когда говоришь, что это чистый 32-хразрядный код. А вы когда-нибудь видели фокус с добавлением в формочку (в режиме конструирования) дополнительного управляющего элемента так, чтобы он тут же появился в ее рабочем аналоге (рабочая форма здесь же на экране)? И это БЕЗ ПЕРЕКОМПИЛЯЦИИ проекта. Кстати, вы можете, не отходя от кассы (не перекомпилировав код!), назначить нововведенному элементу опции того, с какой переменной какого модуля ему общаться. Без перекомпиляции! И это - не интерпретатор! На людей, пообщавшихся несколько лет с Мелкософтовскими продуктами это производит впечатление! А Вы никогда не пытались в какой-нибудь среде откомпилировать надпись на форме? Или заголовок кнопки? А отформатировать хелп, атрибуты его текста? Построить свои документы гипертекста? Вставлять управляющие элементы в текст? И это без всяких дополнительных пакетов! Это все просто заложено в среде, во фрэймвоке, в языке. А знаете сколько весит единственный запускаемый экзешник среды? Вы стоите? Сядьте! 78 кило! Все остальное - от надстройки над файловой системой до компилятора - КОМПОНЕНТЫ. ПРИЧЕМ, РЕАЛЬНО РАБОТАЮЩИЕ! Кстати не только на писюке, но и на Маке. Здесь все можно вставить во все! По сути дела нет привычного разбиения на этапы компиляции, линковки, запуска. Вы просто постоянно развиваете среду вместе с теми задачами, которые решаете. И еще! Не знаю как у других, а у меня больше всего ошибок в программах связано с отслеживанием выделения/освобождения памяти (я знаю, что я не самый аккуратный и внимательный человек на этой планете). Так вот, ребята, забудьте об этих проблемах! Решайте задачи, а о памяти (ее подчистке за вами) позаботится сборщик мусора. Кроме того, что Вы можете просто постоянно работать в среде, Вам иногда понадобится сделать автономную программу или динамическую библиотеку (в духе Виндов). И здесь у Вас есть интересная возможность! Вы можете и тут получать варианты EXE и DLL с возможностью сборки мусора или без нее. А такой гибкой системы настройки меню я вообще нигде не видел.

Кто-то упомянет о COM+, но последний появляется только сейчас, а виртовскому детищу уже около пятнадцати лет! Так что же? Вся эта братия во главе с Мелкософтом пыхтит, раздувает щеки, произносит фразы, но в конце концов приходит к принципам, заложенным командой Вирта (только в других формах). Так не лучше ли изначально не водить народ сорок лет по пустыни (чего кстати никогда не было...), а прямо заняться внедрением умных вещей с умной организацией. Или по-прежнему нам будут тыкать в лицо аргументами совместимости, соблюдения стандартов и массового переучивания народа? Но, что касается первого: а не дороже ли обходится поддержание старого маразма в рабочем состоянии (и попыток его развития), чем построения новых аккуратных систем? А по поводу второго: ТЕ стандарты тоже когда-то были приняты... По третьему же замечу, что когда-то ходила шутка, что даже внутри IBM никто полностью не знает PL/1. Это я к тому, что не дороже ли обходится обучение народа кучеобразному нагромождению средств в языке, все нюансы которого знают только гуру, чем показ средства, воплощающего на практике основные подходы и принципы построения программных систем?

И еще одно замечание.

Народ! Ведь не за горами очередная революция в области полупроводниковой техники. И гораздо раньше, чем вы ожидаете! Вы не боитесь, что она приведет к изменению не только архитектуры компов, но и к необходимости пересмотра самих принципов построения программ (в общеархитектурном смысле)? Ну, например, полетит к чертовой бабушке само понятие наследования. Я серьезно! (Кто хочет поподробнее обсудить эту тему - милости просим! Жду вопросов) Да, так вот, что тогда? Вы что, еще раз расширите С++ добавлением новых синтаксических уродств? А нет риска, что они придут в противоречие с имеющимися? И вы опять нагрузите имеющиеся в языке слова еще несколькими значениями? Или добавите новые? Да, еще не забудьте о новых библиотеках (и стандартах)! А еще надо обеспечить совместимость со старьем! Сколько страниц будут занимать руководства по ++С++ (или С**, или С!!) через 10 лет? Вы спросите: Ну, мужик, а ты-то что предлагаешь? А я ничего не предлагаю! Я за виртовскую линию языков спокоен. Может быть она и останется не столь популярной, но кардинальных изменений не претерпит. И не потому, что костна или неповоротлива. Просто в основе ее лежат строгие математические основания (а не сиюминутные модные поветрия). Ну а математика, ребята, это вещь претендующая на носительницу истины. Единственная проблема - это то, что ее (математики) изучение и понимание требует прилежания и великого напряга. Ни к первому ни к другому народ, в массе своей, не привык или не желает на это тратить время - отсюда и нераспространенность идей профессора Вирта, воплощенных в его языках и системах.

Что-то понесло меня. Вообще-то я человек неразговорчивый. И со статьями - только по крайней необходимости. А тут, видимо, накипело. Да и надоело уже видеть как воинствует серость, прикрывая собственные огрехи в программировании сложностью используемых средств. Был у меня знакомый по кафедре - полтора года сортировал матрицу десять на десять. Работал на С++. С шаблонами классов. Полтора года. С высшим образованием. Дал я втихаря это задание студенту-третьекурснику (не блиставшему особыми успехами в программинге). Через две недели пришлось ставить зачет. Тут один однокашник прирулил. Говорит, что их фирма начала на буржуев работать. В канторе большинство на Делфи работает. А буржуи рогом уперлись: У нас, говорят, все профессионалы на плюсах пишут - он у нас стандарт. Посидел народ наш, покумекали, и решили основные алгоритмы и компоненты на паскале ваять, а те исходники, к которым фрицы будут иметь доступ - на плюсах. Работали в Delphi 5.0 и C++Builder 4.0. Теперь все довольны. Немцы - соблюдением стандарта и сделанной качественно и раньше срока работой, наши - зарплатой и уверенностью в надежности, вразумительности, проработанности и краткости основных частей системы.

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

С наилучшими пожеланиями, Владимир.




Смотрите также материалы по темам:
[TComponent] [Проектирование, постановка задачи, средства разработки]

 Обсуждение материала [ 19-03-2010 05:41 ] 161 сообщение
  
Время на сайте: GMT минус 5 часов

Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
Функция может не работать в некоторых версиях броузеров.

Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

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

Яндекс цитирования