Самый мощный язык
программирования на свете
тот - которым Вы владеете
в совершенстве.
***
Пользователю программы абсолютно все равно на каком языке
она написана. Для него главное, чтобы она превосходно работала
и как можно скорее окупила потраченные на ее приобретение деньги.
Вначале немного статистики
Статью, которая на vbnet.ru была опубликована под названием «Моё первое впечатление о VB7» я написал 18 февраля 2002 г. В общей сложности статья была опубликована на пяти сайдах (под разными названиями и с разной редакцией) и судя по всему ее прочитало много народа. В качестве отзывов на статью я получил около 40 писем, но откровенно говоря большего разнообразия мыслей в этих письмах не было. Все письма расслоились на четыре папки, словно кровавый Мэри, слитый умелою рукой.
Первое время приходили письма с благодарностью за то, что я якобы отговорил того или иного читателя от изучения VB7 (???). Простите меня ребята, но по правде сказать у меня и в мыслях такого не было. Лично я изучаю VB7 полным ходом. Свидетельством этому есть хотя бы то, что я пишу эти статьи. Другое дело, что я абсолютно не в восторге от того, что мне на этот раз предлагает Майкрософт. Но с другой стороны я очень не хочу примерно лет через пять остаться безработным (а шанс тому есть, хотя далеко не сто процентный - прочитав эту статью Вы поймете почему).
Вторая группа писем возвела меня в ранг эксперта по всем вопросам хоть как-то касающимся компьютера. Это конечно очень льстит моему самолюбию - спасибо Вам большое, но тем не менее я хочу отказаться от этого статуса. Во-первых я обычный программист, который специализируется в очень узкой области. Шаг влево или в право от нее - и я такой же дилетант как и все остальные. Ну а во-вторых - в программировании нельзя выехать чужими мозгами. Это незыблемый закон жанра. Тем более что все в Ваших руках - компьютеры, программы, описание на них, языки программирования, и программы трассировки. По этому поводу хочу напомнить одну старую пословицу: «В мире программирования нет не решаемых проблем и не взламываемых программ. Единственно что действительно необходимо, это усидчивость и время».
Еще были письма от веселых ребят которых я именую шутниками. Эти ребята если видят чей либо почтовый адрес, сразу посылают в него письмо с вирусом. Хочу огорчить всех шутников. Их шутки даже не дошли до меня. Вот что значит хороший провайдер, который не зря ест абонплату. Все вирусы были доставлены мне в особой коробочке с ленточкой и яркой надписью «Осторожно вирус! Не запускать». От нечего делать я изучил несколько полученных вирусов (конечно же не запуская). Должен Вам сказать - сплошная дешевка. Что-нибудь вроде Loh.exe, который по базе 64 косит под *.avi файл.
Примерно месяц назад начали приходить письма от совсем начинающих программистов, которые меня крепко поматюкали за то, что я якобы всеми силами сдерживаю технический прогресс и призываю бойкотировать VB7. Вы спросите меня: «А откуда ты узнал что эти программисты начинающие?». О-оо... это очень просто. Понимаете. Программист - это одна из самых высокооплачиваемых профессий на свете. Но наличие денег у программистов вместе с тем просто обязывает и к некоторым запланированным представительским расходам. Вот типичный пример. Класс почтового ящика. Все письма 4 группы были присланы с какого-нибудь дармового майла типа майл-ру или рамблер. Из чего нетрудно сделать простые логические выводы: «Этот человек хоть и называет себя программистом, в действительности находится в очень стесненных материальных условиях. А следовательно у него нет практики (под практикой в данном случае я подразумеваю общение с заказчиками и написание для них программ, за деньги естественно). И следовательно, в квадрате, этот человек начинающий программист, и у него просто не может быть практики, или (что еще хуже) этот человек не думает о практике вообще. Знаете, программирование во имя программирования. Программировал всю жизнь, но не одной стоящей программы так и не написал.». Я совсем не обижаюсь на этих людей. Хотя бы потому, что сам был когда-то бедным начинающим программистом и смотрел на жизнь их газами. И еще. Я хочу пожелать этим ребятам, чтобы они стали программистами имеющими обширную практику. Повезет конечно далеко не всем. Но те кому повезет, начнут смотреть на жизнь вообще и на VB7 в частности, моими глазами.
А теперь о письмах в принципе. Не стесняйтесь написать мне письмо и рассказать о тех эмоциях, которые вызвала у Вас моя статья. Это поможет мне выбрать наиболее интересную тему для следующей статьи (если конечно следующая статья будет вообще). Кроме того, я абсолютно не обязуюсь отвечать на Ваши письма. И не потому что я лентяй. Понимаете, мой рабочий день - примерно так часов 14 в день и практически без выходных. А всякие там статьи и переписка по их поводу, в рабочий день совсем не входит, это давайте назовем так: часы досуга.
Эра Microsoft.NET грядет?
Visual Studio.Net это только видимая часть айсберга. Мы все его уже увидали. Одним этот айсберг нравится, другим нет... Но мало кто пока догадывается о том, что нечто большое и страшное скрывается под водой. И то что сверху, и то что под водой - это две неразрывные части одного целого.
А теперь я объясню туже самую мысль но совсем другими словами. Все дело в том, что Майкрософт даже и не думала работать над дальнейшим совершенствованием VB6 и С++. Вместо этого Майкрософт начала разрабатывать новую технологию которая называется Microsoft.NET. В дело было брошено все. Людские ресурсы. Оборотные средства. Майкрософт даже заявила что ради новой технологии влезла в долги. Новая технология (по заявлениям Майкрософт) должна изменить все. Должны появиться новые сетевые каналы с пропускной способностью, приведенной на один локальный компьютер, соизмеримой с современным контролером HDD. Должны появиться новые чипсэты, непосредственно в которые интегрирован сетевой контроллер. Должны появиться новые операционные системы которые способны работать с IP адресами также легко, как Windows работает с дисками A: и C:. Должны появиться новые программы, которые будут загружаться не с дисковода, а из сети.
Ну новая технология, ну и что, а причем здесь Visual Studio? Все очень просто. Майкрософт уже создала язык программирования на котором новая технология будет программироваться. И называется он (вы правильно подумали) Visual Studio.Net. VB при этом был переписан практически с нуля. Весьма радикально был изменен и C++. Теперь Си называется C# (Си-шарп кажется). Все неудобные для Microsoft.NET концепции из старых языков программирования были удалены. И наоборот. Все что необходимо для идеального написания Frame-Net приложений было включено в новые языки программирования. В принципе я совсем не против новых технологий и новых языков программирования - пускай себе живут, а я посмотрю для начала на них со стороны - выживут или нет? Просто в приличных домах Парижа уже давным-давно принято новые языки программирования называть новыми именами. Но Майкрософт решила схитрить. Тут все дело в том, что никто, даже сама Майкрософт, не может пока дать гарантии, что новая технология успешно пройдет горнило естественного отбора. А уж если Microsoft.NET загнется, то тогда и Visual Studio.Net никому не нужен. А кто тогда это будет покупать? И как отбить вложенные в разработку деньги? Вот и решила Майкрософт поцепить на новые языки программирования старые раскрученные имена. И как я увидел по своей почте, по поводу первой моей статьи, некоторые на эту уловку уже попались.
Немного подробнее о Microsoft.NET
Когда я изучал материалы опубликованные по поводу технологии .NET, мне открылось одно очень важное откровение: надвигается война. Эта война не будет войной информационных идей и технических решений (все эти решения уже приняты). Это война за монополию технологии в области Internet и за те сверхприбыли, которые такая монополия гарантирует. О программистах и о пользователях в этой войне думать никто не будет. Мы нужны только как пушечное мясо, чтобы из наших тел строить баррикады. А те из нас кто все-таки уцелеет будут просто поставлены перед фактом: хотите программировать - нет проблем - покупайте наши программы. Вы со мной не согласны? Ну что ж - заслушайте факты и сделайте выводы сами.
Главная концепция Microsoft.NET заключается в том, что все программы написанные согласно этой спецификации должны соответствовать требованиям полной независимости от аппаратных и операционных платформ. Сама по себе эта идея грандиозна (того и гляди сердце остановится от волнения). Только представьте себе. Вы сидите за своим компом типа PC и при помощи VS.Net ваяете некий софт. Наконец все готово - Вы сразу кидаете мыло другу: «Привет! А ну глянь.» и пристегиваете к письму интернет-ярлык. Ваш друг кликает этот ярлык мышкой, в следствии чего новоиспеченный софт загружается на его Vax по сети, проходит процедуру второй компиляции и ваш друг попросту начинает тащиться от ваших недюженых программистских способностей и от .NET технологии. Ну как? Вы в это поверили? Я откровенно говоря нет, хотя идея мне действительно нравится. Знаете почему я в это не верю? Потому что я практик. Я отлично понимаю что производители железа и операционных систем в обозримом будущем не смогут порешать все необходимые организационные, технические и самое главное, финансовые вопросы, необходимые для оживления этой технологии. Это понимает и Майкрософт, а потому она уже начала сколачивать союзную коалицию для проведения самых активных наездов на несогласных. Да что я вам тут рассказываю. Зайдите сами на русский сайд Майкрософт где все это описано нашим родным языком.
Теперь немного о механизме двойной компиляции. Я очень долго не мог понять, зачем это вообще потребовалось. Скажите мне, какой нормальный человек будет выпивать только пол чашки своего утреннего кофе дома, а другую половину тащить на работу. Я читал книги и статьи других авторов. Ах, каких дивных объяснений я только не находил для такого поведения VSN. И только когда я изучил концепции Microsoft.NET, в моей голове все стало на свои места. Понимаете в чем тут дело. Компилятор VSN просто не может откомпилировать программу вообще. Исходя из самого определения он просто не знает на каком процессоре она будет выполняться (здесь я просто обязан напомнить новичкам, что другие аппаратные платформы построены на совсем других процессорах, с совсем другими системами машинных кодов). Так что же делать - ну не отправлять же потребителю исходник программы? Нет, не отправлять. Тогда будем все-таки компилировать. После такой первичной компиляции получается некий полуфабрикат в формате IL (Intermedia Language). Это уже не исходник, но еще и не исполняемая программа. Но именно этот полуфабрикат и является программой распространяемой по сети. Попав на локальную машину для выполнения, полуфабрикат компилируется второй раз, применительно к особенностям этой локальной машины. Чтобы такая компиляция произошла (я до сих пор очухаться не могу - компиляция на машине заказчика - это что, сон?) необходим весьма большой программный пакет который называется CLR (Common Language Runtime) который включает в себя собственно JIT - компилятор (по сути это и есть основной компилятор). Я думаю не стоит особо объяснять, что для каждой платформы необходим уникальный CLR. Тогда вопрос - а кто эти все CLR будет клепать. Ответ готов - а кто хочет, для этого уже разработан и стандарт соответствующий, CLS (Common Language Specification) называется. По самым скромным оценкам CLR занимает несколько сот мегабайт. Тогда другой вопрос - а где взять CLR для локальной машины. На этот вопрос ответа нет.
И в заключении раздела еще один деликатный момент. Это пиратский рынок программ. Про страны пост Советского пространства я вообще молчу. Я хотел рассказать про пиратство там, у них, у которых пиратского рынка нет вообще. И тем не менее, согласно статистики каждая официально купленная программа установлена как минимум на двух компах - рабочем и домашнем. В масштабах корпорации Майкрософт это колоссальные потери. И именно технология Microsoft.NET имеет все шансы закрыть пиратское использование программ. В технологию вложено полное управление вторым этапом компиляции со стороны разработчика программы. Прибавьте сюда тот факт, что каждый процессор начиная с третьего пня, а также их недоделанные братья кселероны знают свой серийный номер, который хакать даже смысла не имеет. В качестве дистрибутива программы Вы покупаете всего на всего интернет-ярлык. При его активации проверяется серийный номер процессора, согласно которого на сервере разработчика генерится IL дистрибутив вашей именной программы. Знаете к чему мы так придем. Программирование станет уделом очень богатых людей. Вы не заглядывали в прайс Майкрософт? Обсуждаемый нами пакет VSN стоит в районе $3000.
Давайте помянем старый добрый Бейсик.
В этом разделе я просто хочу перечислить те возможности VB6 которые в нем были и которых больше нет в VB7. Но хочу Вас сразу предупредить - я покажусь Вам весьма и весьма оригинальным. Я буду называть потерей то, что в других опусах вам будет преподноситься как большая находка.
Бейсик перестал быть интерпретатором. Те кто читал предыдущую мою статью помнят, что я буквально сразу наступил на эти грабли и был по этому поводу просто взбешен. Да, для меня это действительно очень принципиальный момент. Написание, шлифовка и отладка программы требуют чтобы она была запущена на выполнение несколько тысяч раз. И при этом пусть даже самые небольшие задержки на компилирование неизбежно вырастут в часы потерянного времени.
Объектная ориентированность. Это не есть ноу-хау, как вам будут об этом говорить. Наследование уже давно существовало в Си-подобных языках и те кто хотел этим пользоваться, тот себе соответствующий язык программирования и выбирал. Огромным достоинство VB6 было как раз то, что наследования в нем не было. То есть, в суматохе работы над проектом Вы просто не могли сделать ту роковую ошибку, на поиски которой Вам пришлось бы угробить несколько бессонных ночей. Не верьте тем, кто будет Вам говорить: «а не применяйте этот механизм и все будет в порядке». VB7 полностью построен на механизмах наследования. Иными словами. Создавая в своем проекте новую форму, Вы делаете не что иное, как наследуете базовый класс VB7. Короче говоря. Хотите Вы или нет, а механизмы наследования Вам придется выучить наизусть и потом еще несколько лет сдавать самому себе экзамены на эту тему.
Многопоточность. Многопоточность это не есть атрибут того или иного языка программирования. Это одна из основных концепций самой операционной системы Windows. Вы не могли не слышать такие термины как нулевое кольцо, виртуальные машины, задачи, процессы, кучи и тому подобное (все эти термины и есть отдельные детали многопоточности). Но Вы могли запросто писать программы на VB6 (в том числе и многопоточные) не перегружая себя знаниями об этом всем. Но теперь Вам выпала огромная честь все это изучить. И отказаться от изучения у Вас просто нет никакой возможности. Самая простая операция VB7 - объявление переменной, теперь требует от программиста четкого понимая того, где эта переменная будет создана (в стеке, куче, в каком процессе), как долго эта переменная проживет и в какой копии этой переменной будет храниться ее действительное значение.
Типы переменных. На первый взгляд здесь нет ничего страшного. Концепцию переписали - Вы потратите всего пол часа на изучение новой концепции. И тем не менее есть одна проблема. По мере того как под .NET будут ложиться все новые и новые платформы, эту концепцию будут переписывать и переписывать. Разрядность шины данных процессора не такая уж и простая штука. Примерно такие же проблемы я вижу и в связи с интерфейсами типа API, COM и OLE (но это уже связано не с типами процессоров, а с типами операционных систем).
Преемственность. Это очень сложный вопрос. До сих пор Майкрософт хотя бы создавала видимость честной девушки, которая непогрешима в своем постоянстве. Мы все знали, что на деле преемственность версий нарушается, но прощали это, списывая все на издержки бурного развития технологий. Когда развитие технологии заводило в тупик преемственность - всегда находились «красивые» выходы из ситуации (например когда DOS меняли на Windows). Теперь создан прецедент. Открыто объявлено: при изменении текущей версии преемственность утеряна. Ответьте мне на один вопрос пожалуйста: сколько раз за одну жизнь можно терять честь? Я думаю что только один раз, ну а дальше как говорят пошло-поехало. Кто теперь может гарантировать что VB8 опять с нуля не перепишут.
Советы для тех, кто начнет изучать VB7.
Я по чисто принципиальным соображениям не буду описывать те или иные частные подробности нового языка. Об этом уже много написано и будет написано еще больше. Но с другой стороны я просто обязан вооружить читателей правильной стратегией изучения VB7. Работа в этом плане Вам предстоит очень большая. И если пойдете не в ту сторону, то можете вообще не дойти.
Вначале о концепциях языка. Я знаю, что начинающие программисты обычно пренебрегают концепциями. Очень зря. Писать простые программы конечно можно и без знания концепций. Но когда ваша программа начинает глючить, а вы не понимаете почему это происходит - о каком профессионализме тут может идти речь?... С описанием концепций у Майкрософт как-то не сложилось. Толи мой английский совсем плох, толи это описано весьма бездарно, короче говоря, просматривая MSDN по этому поводу я совсем ничего не понял. А потому совет первый: не пожалейте нескольких баксов на хорошую книгу - это сэкономит вам много времени. По поводу «хорошей» книжки я уже обменялся мнением с Иваном Шатрыкиным и мы единогласно порешили: книга издательства Питер под названием «Дан Эпплман; Переход на VB.NET стратегии, концепции, код» очень даже ничего. При изучении концепций у программистов хорошо владеющих VB6 будут очень сильные головные боли. VB6 и VB7 абсолютно не совместимы на концептуальном уровне. Но тем не менее задача в принципе решаемая. Это я проверил на себе. Мне и новые мысли удалось в голову влить, и старые при этом я почти не расплескал.
Графический интерфейс оболочки. Лично я с ним разобрался вообще без документации - методом научного втыка. Но наверно все-таки многолетний опыт программирования помог. Те кто имеют опыт работы в Си вообще будут как у себя дома. Некоторых усилий правда потребует окно настроек программы. В нем есть очень важные опции. Тут достаточно нескольких часов чтения MSDN. Совсем начинающим программистам все-таки наверно лучше подобрать себе еще одну книгу, в которой будет описан интерфейс программы (выше указанная для этих целей совсем не подходит).
Ну и наконец самая объемная часть работы. Вам господа предстоит проштудировать несколько тысяч ключевых слов нового языка и его окружения. Совет номер два: не доверяйтесь по этому поводу никаким книгам и никаким сайдам. Действуйте следующим образом. Запустите VB7 и откройте окно просмотрщика объектов (меню View / Other Windows / Object Browser). Вы увидите два окна. Левое - древовидный каталог имеющихся в вашем распоряжении библиотек (раньше это называлось объектами). Раскройте все узлы этого каталога. Пройдитесь выделением по всем его строкам. Когда Вы выделяете строку в левом окне, в правом окне вы видите частные характеристики выделенного элемента. После чего можно выделить элемент в правом окне. Для выделенного в любом окне элемента, снизу приводится краткое его описание (все это конечно на английском). Но я рекомендую вам после выделения элемента нажимать F1 и читать, читать и еще раз читать как завещал нам великий Билл.
Позвольте, но ведь тут не хватает одной главной детали.
Представьте себе что Вы уже установили на своем ПК Visual Studio.Net. Вы научились писать программы на этом языке. Вы даже написали свою первую программу. Знаете что будет дальше? Вам очень сильно захочется кому-нибудь ее показать. И вот тут только вы обратите свое внимание на то что это практически невозможно. Для того чтобы запустить ваш софт на другом компе, на этот комп придется вначале установить CLR размером в несколько сот мегабайт. И вот тут начинаются варианты. Вариант первый: установить на требуемый комп всю VSN. Вариант второй: создать дистрибутив CLR самостоятельно, объединив его с дистрибутивом своей программы. Вариант третий: развернуть CLR через интернет с сайда Майкрософт. Выберите себе вариант сами, какой вам понравится. Лично мне не нравится ни один.
Немного философии.
Давайте отвлечемся на время от тех проблем и эмоций которые встают перед нами в связи с этой так называемой технологической революцией и попытаемся разобраться с одним простым вопросом: зачем на свете вообще существуют компьютеры, и почему нас программистов все так любят и уважают? Мы не выращиваем корм и мы не шьем одежду. И тем не менее. Там где мы приложим свою руку, попросту исчезает ручной труд (это конечно идеальное завершение программистского цикла) или, на самый худой конец, производительность труда преумножается в сотни раз. Оторвитесь от своего компа и сходите на экскурсию в офис любой (не программистской) фирмы, и посмотрите внимательно на то, чем занимаются там люди. Они сводят балансы, пишут отчеты, ведут учет складских запасов - короче говоря занимаются офисной рутиной. Да, у этих людей уже есть компьютеры и профессиональные программы для офисной работы (Word, Access, 1С бухгалтерия и тому подобное), но тем не менее, их труд по-прежнему остается ручным. Проблема в том, что настройка этих программ под конкретные задачи офиса требует очень серьезных профессиональных навыков, а обывательский уровень образования в области ПК явно не обеспечивает требуемых знаний. Вот и получается: компьютеры есть, но они используются в режиме «печатная машинка».
Но безвыходных ситуаций не бывает. И выходы диктует жизнь. Один из этих выходов такой (правильнее сказать был таким). VB6 позволял в очень короткие сроки (несколько десятков часов работы программиста средней квалификации) полностью убрать ручной труд из той или иной офисной операции. Такие программы (их называют не серийными программами специального назначения) были дешевы и доступны. На этой стратегии была развита в последние годы целая индустрия. И вот после всего сказанного мной попробуйте мне доказать, что технология .NET позволит снизить требования к уровню образования клерков, или что не серийные программы специального назначения станут более дешевыми и доступными. Если у Вас это получится - я заберу обратно все мои обвинения брошенные в лицо Майкрософт.
Сегодня выводов не будет.
Очень легко писать статью когда все выводы уже сделаны. Все что остается в этом случае - это плавно подвести читателя к этим самым выводам. Но не в этот раз. В моей голове сумбур и противоречие. Одна моя половина вполне понимает что Visual Studio.Net это вполне серьезно и весьма возможно даже необратимо. Другая моя половина более прагматична и не позволяет мне бросить все и сломя голову побежать за призраком именуемым .NET. Потому для себя я принял такое решение: я буду продолжать практиковать на VB6 (тем более что делать это на VB7 пока просто невозможно). С другой стороны я уже давно начал изучение .NET и буду продолжать это занятие. И дальше одно из двух (фифти-фифти). Или я пожалею о потраченном времени (если .NET загнется), или я встречу эту новую эру без колебаний и страха.
написано для vbnet.ru
13.08.2002 г.
Гриненко Виталий
gwii@svitonline.com