Вверх по реке
АрхивКак всегда, для красного словца я не пожалел смысла: правильнее было бы назвать тему "Программирование для Чайника" (причем слово "Чайник" прописать именно с прописной, чтобы не возникло недоразумений) - но такое название было бы менее, на мой вкус, лозунгово-эффектно. Осталось понадеяться на подзаголовок да на то, что читать тему начнут с этой статьи, так что недоразумения (что тема - совсем не о программируемых и дистанционно управляемых контроллерах для разного рода бытовых приборов [что, кстати, само по себе представляется мне тоже весьма завлекательной темой]) разъяснятся в первом же абзаце.
Говорить сегодня о самодеятельном программировании представляется мне занятием ретроградным и реакционным. С каждым месяцем компьютеры все решительнее переходят в разряд бытовых приборов, едва ли не тех же самых чайников (со строчной буквы) и, уж во всяком случае, - телевизоров, видеомагнитофонов, автомобилей… Вот чуть-чуть еще осталось: упростить интерфейс до чисто голосового, с одной стороны, и трехмерного - с другой, прибрать последние ошибки и…
Тем не менее, я совершенно сознательно плыву по реке вверх. Потому что читатель "Компьютерры" (как он представляется мне по его письмам) - это человек, которому не только (а иногда и не столько) хочется облегчать свои труды с помощью персональных "считалок", но и уж-жасно интересно знать, как эти "считалки" устроены. Было раньше такое словцо (ныне, кажется, полностью утратившее смысл и содержание): "автолюбитель". Так вот: читатель "Компьютерры" (в некотором, но заметном проценте) - "комьютеролюбитель". Этому самому некоторому проценту тема и посвящена.
Теоретически да: мне должно быть совершенно незачем знать, что там и как устроено у компьютера, у телевизора, у автомобиля. Практически же… Как-то по дороге из Москвы в Питер, на довольно глухом (сто верст вправо-влево - пустота) участке мотор вдруг стал захлебываться и тянуть только на холостых. Время было довольно позднее. Сравнительно цивилизованные способы устранения неприятности (остановить и уговорить кого-нибудь отбуксировать машину к ближайшему центру цивилизации; дождаться, пока выйдут на работу профессионалы; уговорить их покопаться в моторе) стоили бы около суток времени, много нервов и некоторое количество денег. И я решил попробовать сам. Задумавшись о возможной причине, я полез раскручивать карбюратор (принцип работы которого я все же понимаю, хоть и весьма слаб в тонкостях конструкции). Через пятнадцать минут трудов причина оказалась очевидной: один из жиклеров открутился от вибрации и упал, так что бензин шел в цилиндры мощной и практически безвоздушной струей. Я вкрутил жиклер назад и через полчаса уже ехал с ветерком по направлению к Питеру.
Тема показалась мне довольно важной по двум причинам.
1. Для того чтобы понимать компьютер (хотя бы на том уровне, на котором я понимаю автомобиль), надо непременно немножко на нем попрограммировать. Все равно на чем, но, по своему опыту - лучше всего посвятить два-три месяца (по вечерам, в виде досуга) изучению ассемблера. Написать на нем десяток программ строк по пятьдесят-сто, которые бы чистили экран, выводили на него в нужном месте нужные (не нужные) тексты, проделывали бы еще какие-нибудь пустяки. После этого, глядя на любой сложности DOS-программу, вы более или менее (как я - карбюратор) понимаете, как она сделана. А стоит те же два-три месяца поиграть, скажем, с Visual Basic'ом - понятными станут и программы для Windows. То есть понятными в принципе. То есть у вас возникнет ощущение, что дай вам срок и мотивацию - вы тоже сумеете что-то в этом роде написать, даже, возможно, еще лучше. А ошибки, которые вы будете поначалу сотнями вылавливать из своих программ, возможно, заставят вас мягче и конструктивнее относиться к ошибкам в программах чужих. Тоже, что называется, - с пониманием.
2. Обладая таким мощным инструментом, как персоналка, просто стыдно целый ряд рутинных операций проделывать вручную. А далеко не для всех рутинных операций, особенно ваших, домашних, есть под рукой (или даже в принципе) готовые и вполне подходящие программы. Или, как замечает Михаил Попов в статье "Минутное дело", их быстрее написать, чем отыскать.
Примерами таких вполне "персональных" задач могу поделиться из своего опыта. В одном из недавних "Огородов" я написал, что "Windows обычно встречает меня приветствием от имени и голосом супруги, варьируемым в зависимости от времени суток", и тут же получил письмо от одного молодого (как мне показалось) человека: "Возник вопрос: а как такое устроить? Напишите, если не сложно". Я ответил: "Да ничего сложного. Малюсенькая программка на QuickBASIC, которая анализирует время суток и переписывает один из заранее заготовленных звуковых файлов в файл со стандартным именем wstart.wav, который и назначен у меня загрузочным звуком Windows". Писал я эту программку минут, кажется, пять и у меня даже сохранился ее листинг, если таким гордым словом можно назвать такой пустяк:
t$ = TIME$
t% = VAL(LEFT$(t$, 2))
IF t% > 7 AND t% <= 11 THEN SHELL "copy e:\opus\sound\speak\mon.wav c:\wstart.wav"
IF t% > 11 AND t% <= 17 THEN SHELL "copy e:\opus\sound\speak\day.wav c:\wstart.wav"
IF t% > 17 AND t% <= 23 THEN SHELL "copy e:\opus\sound\speak\evening.wav c:\wstart.wav"
IF t% <= 7 THEN SHELL "copy e:\opus\sound\speak\night.wav c:\wstart.wav"
END
Все, как видите, элементарно. Я беру числовое значение переменной текущего времени и анализирую две первые цифры, которые и означают с точностью до часов время суток. И в зависимости от этого…
Совершенно ненужный пустяк. Но как приятно. И как действует на приходящих в гости даже профессиональных программистов!
Или с днями рождения. Конечно, существуют различные скедулеры, органайзеры и электронные расписания, куда можно загонять даты рождения друзей и знакомых. Но тут чаще всего получается как в детском стишке (не помню автора):
Остается узелочек
На платочке завязать.
Завязал я узелочек,
Да забыл платочек взять…
Редкий из этих самых скедулеров-органайзеров я дольше двух недель держу загруженным в систему - и места много отбирают, и глючат, порой. А так: написал на VB крохотную программку, поставил ее ShortCut в StartUp, и, если чей день рожденья, - при загрузке Windows она выдает такую, приблизительно, табличку. А dat-файл, из которого она читает нужные сведения, удивительно прост и написан в текстовом формате.
С теми же, приблизительно, целями я написал еще несколько программок, две из которых, таймер и конвертор различных единиц измерения, шутник Андрей Шипилов даже выложил на своем сайте по адресу www.trailerpark.com/phase2/aship/soft.htm, рядом с собственноручной программой от г-на Кузнецова.
Несколько примеров слегка другого характера, практического и необходимого в конкретных условиях научной работы, приводит в своей статье "Я не любитель, я другой…" ученый Александр Моисеевич Шкроб. Правда, статья его слегка похожа на воспоминания из серии "Они были первыми", которые так не любит упомянутый Георгий Кузнецов (и я его нелюбовь, вообще говоря, разделяю, ибо вызвана она, как я понимаю, малой практической содержательностью и легкостью изготовления подобных воспоминаний), но заключенный в ней заряд "помоги себе сам" или "мы не можем ждать милостей от…", как мне кажется, и сегодня, и завтра есть и будет актуальным. Мне приходилось наблюдать работу и нынешних ученых, в основном, не прикладников, - причем не только в нашей разваливающейся академической системе, но и во Франции, скажем, Германии, Швеции - получается так, что мало что из готового им подходит. Оно, в общем, и понятно: с одной стороны, каждое новое направление на то и новое, чтобы для него мало что было готового; с другой - ученые даже в массе не являются привлекательным рынком для производителей современного, мощного, но и громоздкого, трудоемкого программного обеспечения. А ведь и впрямь: пользуясь даже самым немудрящим QuickBASIC'ом, можно в сотни раз облегчить себе труд по специфической обработке собранных данных, причем самодельную эту программу можно в десять минут переписывать-перенастраивать в соответствии со вновь возникающими идеями и гипотезами.
Ну и, наконец, рутинная работа в совершенно современной среде, например, Microsoft Office 97, должна нормального человека и утомлять, и, главное, может быть, - раздражать. А звать всякий раз штатного программиста (если он в штате есть), чтоб написал тебе макрос, избавляющий от перепечатывания одних и тех же слов, внесения одних и тех же (или типовых) поправок, - дело не всегда удобное как практически, так и психологически.
Снова пример из собственной жизни. Вот уже несколько лет я пользуюсь программой Microsoft Scenes, эдаким скринсэйвером, позволяющим менять на экране заложенные вами картинки и, после того как компьютер снова в работе, - оставлять последнюю в качестве "обоев". Это старая версия программы, кажется, 1.0 (новую я нигде и никак не могу раздобыть), она сделана довольно закрыто от пользователя. Хотя в нее встроен механизм чтения и временного разворачивания jpg-файлов в формат bmp (которым она и пользуется и в режиме слайд-шоу, и в режиме "обоев"), механизм этот от пользователя утаен. Чтобы его включить, надо внести в ini-файл десятки мелких поправок (например, заменить расширения bmp на jpg и кое-что еще). Первое время, пока картинок у меня накопилось не довольно много и база пополнялась не довольно часто, я делал это вручную. Потом мне стало лень и… стыдно. Я вызвал было QuickBASIC, предварительно вообразив себе, насколько громоздкой получится программа, да тут же и вспомнил про Word. Написать (даже не написать, а записать) макрос, корректирующий ini-файлы Microsoft Scenes, оказалось занятием минуты на три. Ввиду не универсальности задачи, листинг не привожу, но, уверяю, он не сложнее и не длиннее того, что приведен Михаилом Поповым в уже упомянутой статье "Минутное дело", посвященной как раз макропрограммированию в Word'е. Не сложнее это дело и в Excel'е, а Microsoft Access, в сущности, сам является средой программирования, и если кому не лень в нем разобраться (это не слишком сложно, зато потом получите массу удовольствия) - тот будет иметь дома или на работе крайне удобные и под себя заточенные программы-базы. Например, своих компакт-дисков. Или органических молекул. Или… Попечением двоих молодых людей выпускающие редакторы "Компьютерры" вот уже полгода пользуются подобной базой при выпуске новых номеров, а коммуникатор потом - для всяческих подсчетов и расчетов.
Тот же Михаил Попов рассказывает вкратце (мало - чтобы обучиться, но сверх головы - чтобы заинтересоваться) и о командном языке REXX, а мой коллега Сергей Леонов напоминает нынешним юзерам, уже в массе и забывшим про DOS, о неожиданно (для некоторых) широких возможностях его командного языка, мощнее всего проявляющегося в пакетных файлах. (Завороженный в свое время расширенными возможностями такого рода командного процессора от Symantec - NDOS, - я даже написал о них целую книжку.) Денис же Коновальчик из Магнитогорска, старый КСПшник, в небольшой статье "Струн рекурсивный перебор…" приводит листинг программы на Паскале по созданию новых аккордов для гитары.
Вообще говоря, мне кажется, что для собственноручных упражнений язык программирования не так уж и важен: концептуально все они одинаковы, а различаются (в холодном высшем смысле) только синтаксисом. Кому, как говорится, попадья, а кому - свиной хрящик. Судя по статейке "Маленький бит, динамик и Windows '95", ее автору, отлично знакомому все читателям "Компьютерры" по замечательным юмористическим рисункам, убежденному "чайнику с программным управлением", свиной хрящик (Паскаль) показался столь же вкусным, как и коллеге из Магнитогорска. Статейка, на мой взгляд, мало что наглядно демонстрирует отсутствие непреодолимого конфликта 60-х между физиками и лириками, но и задевает одну весьма общую в последнее время проблему незапуска многих старых DOS-программ на слишком быстрых для них современных машинах, и даже уже по одному этому может оказаться полезной многим.
Короче говоря, тема номера, разумеется, программировать вас не научит (захотите - научитесь сами за несколько дней и несколько тоненьких книжек; тут ведь, что интересно: результат вашего опыта может быть испробован прямо сейчас!). Однако, кого - подвигнет вспомнить старое, кого - поверить в то, что программировать
а) безумно интересно
б) часто - весьма полезно
г) очень поучительно в смысле понимания компьютера как инструмента.
А чтобы вам не казалось, что, занявшись столь ретроградным делом, вы окажетесь в одиночестве, я приберег на закуску статью того же Дениса Коновальчика "Hello, World!", где рассказывается о весьма многочисленном всемирном Интернет-сообществе программистов-любителей, двери куда открыты всем.