[People]
eXcode e-zine #3
Автор: Нгуен [LedWorm] Павел
mail: ledworm@excode.ru

Интервью с Олегом Калашниковым

Вступление

Если вы изучаете ассемблер, то наверняка вы слышали об Олеге Калашникове, об его замечательной рассылке "Ассемблер это просто! Учимся программировать" и об одноименной книге. Кроме этого, Олег является основателем и администратором популярнейшего ресурса RusFAQ.ru. Олег заслужил хорошую репутацию, благодаря своей отзывчивости, и готовности помочь новичкам, столкнувшимся с проблемами.




Олег Калашников


LedWorm: Здравствуйте. Расскажите вкратце о своей внекомпьютерной жизни. Где работаете? Есть ли жена, дети? Сколько лет? Где живете? Чем увлекаетесь помимо компьютеров? Какой университет закончили? Про раннее детство можете не рассказывать.

О. К. (Олег Калашников): Здравствуйте! Мне 29 лет, живу в Москве, женат, сыну 5,5 лет, работаю веб-программистом в дизайн-студии. Образование неполное высшее (МГЛУ). Основное время провожу, безусловно, за рабочим местом. Работа нравится, получаю от неё удовольствие. Свободное время провожу с семьёй. Также очень люблю дискотеки, весёлые компании и путешествия по стране.

LedWorm: С какого возраста увлекаетесь компьютерами, с какого - программированием?

О. К.: Впервые с компьютером я познакомился в 1988 году, когда у нас появились ZX-Spectrum. Мне тогда было 11 лет. Именно на них я начал потихоньку осваивать встроенный в ПЗУ Бейсик. Конечно, не с первого дня увлёкся программированием. Сперва, как все нормальные дети, играл в игрушки. Потом меня заинтересовало, какие ещё команды, кроме LOAD "", может выполнять компьютер. Так и увлёкся. Где-то через годик начал осваивать Ассемблер для Z-80, пробовал писать небольшие программки. Но в тот период как раз стали появляться компьютерные центры, в которых стояли ЕС-1840/1841. Эти машины были уже совсем другого уровня, что меня привлекало в них больше, чем простенькие «Спектрумы».

Первое, что я «программировал» - это обычные bat-файлы. Смешно, конечно, но тогда такого объёма литературы, как сейчас, не было, а слова Интернет вообще никто не знал. Поэтому приходилось довольствоваться скудными комментариями в готовых bat-файлах. В целом, познавать приходилось всё самому методом проб и ошибок. Знакомых и друзей, увлекающихся компьютерами, у меня тогда не было, поэтому я был как волк-одиночка.

Не знаю, кем бы я вообще стал, если бы не один случай. В 1991 году в одном книжном лотке я наткнулся на книгу Роберта Джордейна «Справочник программиста IBM PC/XT/AT» и сразу же купил её. Каково же было моё разочарование, когда я узнал, что это всего лишь справочник для программиста на Ассемблере, а не пошаговое справочное руководство для начинающих. Т.е. книга для тех, кто уже освоил этот язык, а я тогда не знал ни одной команды Ассемблера IBM-совместимых машин, не говоря уже о каких-то специфических терминах. Книга являлась типичным справочным руководством, по которому мне, собственно, пришлось осваивать Ассемблер. Было сложно, но очень интересно. Основные знания я почерпнул исключительно из неё, за что огромное спасибо Р. Джордейну, который умеет просто и понятно объяснять сложные вещи.

Ну а дальше были другие книги, но ни одна из них не была написана таким живым, простым и понятным языком, как та первая книга. Я её до сих пор храню как реликвию…

LedWorm: Для вас программирование - это хобби, работа, или просто способ убить время?

О. К.: Программирование для меня – это, прежде всего, хобби и работа. Убиваю время я совсем по-другому. Я считаю, что настоящий программист – это не тот, который, когда пишет код, думает, сколько денег он получит. Настоящий программист тот, который думает, как оптимальней построить алгоритм, как организовать единую структуру данных, как оптимизировать существующие подпрограммы. И вот когда после долгих часов упорной работы, поиска ошибки программа наконец ведёт себя именно так, как я задумал – это действительно классно! Эти ощущения невозможно сравнить ни с какими другими.

Когда я работал с книгой Джордейна и пробовал писать мелкие программы на Ассемблере для IBM-совместимых компьютеров - это было моё хобби. Помню, в 1994 году я написал оболочку типа Norton Commander на чистом Ассемблере, плюс прикрутил антивирусные возможности. Сам же в ней и работал. И даже тогда это было моё хобби, не более. Потом, когда началась взрослая жизнь, я понял, что уровень моих знаний в программировании находится на таком уровне, что люди готовы платить деньги за их использование. В этот момент программирование и стало моей работой, профессиональной деятельностью. И это очень здорово, когда за работу, которую ты выполняешь с огромным удовольствием, ещё и платят зарплату. По-моему, нет ничего лучше…

LedWorm: Большинство знают вас как ведущего замечательной рассылки "Ассемблер? Это просто! Учимся программировать" и одноименной книги. Как удалось достичь успеха, какими источниками информации пользовались?

О. К.: Успех – это, прежде всего, труд. Успеха невозможно добиться за 1-2 дня. Даже актёры, которые, казалось бы, в одно утро просыпаются известными, прежде работают в кадре несколько месяцев. И если работают на совесть, то тогда в один прекрасный день просыпаются известными. Ещё ни один человек, который сидит сложа руки и умеет только критиковать чужой труд, не достиг успеха и популярности.

Начиналось всё с создания обычной рассылки «Ассемблер? Это просто! Учимся программировать» на сервере рассылок Subscribe.ru. В течение 1,5 – 2 лет я отправлял написанные мной рассылки подписчикам, которых было около 18.000, отвечал на вопросы читателей, помогал разобраться с Ассемблером. Отвечая на эти вопросы и оказывая дополнительную помощь подписчикам, я совершенствовал свои знания, в дальнейшем очень пригодились при написании одноимённой книги. Я учёл все часто задаваемые вопросы, добавил материала, существенно обработал существующий. Фактически, мне пришлось работать 5 лет, чтобы моё имя стало более-менее узнаваемым и популярным как определённых кругах, так и в отдельной части Рунета.

Работа над книгой заняла чуть больше 2-х лет, естественно, с перерывами, т.к. основное время уделялось моей основной работе и семье. И вот в начале 2005 года я подписываю контракт с известным и крупным издательством «БХВ-Петербург», а в августе того же года книга появляется на полках книжных магазинов России, стран СНГ и за рубежом. Основной источник информации для рассылок и книги – это мои личные знания. Основную базу знаний я получил, как уже упоминал, из книги Джордейна.

LedWorm: Какие языки программирования знаете, какие изучаете, какие считаете лучшими и какие используете в повседневной жизни?

О. К.: В настоящий момент моим основным языком программирования является Perl, т.к. я работаю веб-программистом. Иногда приходится прибегать к PHP, но это случается крайне редко. Perl я выбрал потому, что он более всего похож на C++ и, соответственно, более мощный, чем PHP.

А в жизни приходилось иметь дело с разными языками: Basic, Pascal, C, C++, VBA и, конечно же, Ассемблер. Про такие языки, как HTML, XML я не говорю, т.к. они являются языками разметки текста, а не языками программирования, что многие это часто путают.

Сейчас изучаю в основном не какие-то конкретные языки программирования, а расширяю свои познания в уже освоенных мной языках. Я не вижу особого смысла знать 5-10 языков программирования, которые пересекаются друг с другом. Все веб-проекты я пишу «с нуля», даже в случаях, если требуется поддержка и доработка уже существующего веб-проекта. Гораздо проще и быстрее переписать проект «с нуля», чем разбираться в чужом коде, в чужих алгоритмах. Это, безусловно, имеет смысл только в тех случаях, когда требуется внести существенные изменения в уже написанный другим программистом проект. И в настоящий момент (а я сдал уже порядка 30 проектов) ещё ни разу не столкнулся с ситуацией, когда Perl не позволяет реализовать пожелания заказчика.

LedWorm: Каким вы видите будущее языка программирования Ассемблер? Как вы считаете, изменится ли его значимость в ближайшее будущее?

О. К.: Ассемблер никогда не потеряет своей актуальности, т.к. он является языком самого процессора. Это значит, что на каком бы языке высокого уровня (С, Бейсик) вы не писали, компилятор переводит его в машинный код, который легко представить в мнемонике языка Ассемблера. Но ни одну скомпилированную программу невозможно вернуть назад в исходный код любого языка высокого уровня. Для ассемблерщика же достаточно запустить отладчик, и он получит исходный код программы на Ассемблере. А дальше – дело техники…

Без Ассемблера невозможно написать полноценную операционную систему. Есть ситуации, которые требуют присутствия ассемблерщика. Это может быть, например, критические участки кода, которые должны быть выполнены максимально быстро, иначе вся операционная система будет жутко «тормозить». Сюда же можно отнести всевозможные драйвера устройств, дополнительные «примочки» для ПЗУ, например, для защиты компьютера от несанкционированного доступа: это когда на плату памяти, имеющую сильные ограничения по объёму, необходимо записать программу, запускающуюся ещё до загрузки операционной системы. Языки высокого уровня здесь вряд ли могут быть полезны…

LedWorm: Еще одним вашим замечательным проектом является RusFAQ.ru. Огромное количество людей ежедневно задают вопросы и получают ответы. Ежедневный оборот трафика огромен. Расскажите, пожалуйста, об истории проекта, с чего все началось.

О. К.: Началось всё с рассылки «Ассемблер? Это просто! Учимся программировать», которую я создал в 2000 году. Со временем число подписчиков росло, количество вопросов постоянно увеличивалось, я уже просто не успевал отвечать на все вопросы. Настало время, когда нужно было что-то предпринять. Так был создан домен Kalashnikoff.ru, в котором я поместил форму для отправки вопроса экспертам по Ассемблеру. Каждый желающий мог зарегистрироваться в качестве эксперта, получать вопросы от подписчиков и отвечать на них. Так сказать, взаимная помощь. В 2001 году я создаю домен RusFAQ.ru, куда переношу код из Kalashnikoff.ru, а в последнем размещаю просто архив рассылки, делаю свою типичную домашнюю страничку. Со временем разделы на портале увеличивались, система переписывалась «с нуля» 4 раза, совершенствовалась.

Переломным моментом в судьбе RusFAQ.ru стал июнь 2005 года. В это время состоялась первая общероссийская встреча участников портала в Нижнем Новгороде, вследствие чего был создан Высший Совет Экспертов (ВСЭ), призванный навести порядок на сетевом и пользовательском уровнях и поддерживать его в дальнейшем. То, чего мы добились за 10 месяцев совместной работы, я думаю, лучше расскажут сами Мастера ВСЭ:

Администратор по безопасности ВСЭ Максим Зотов (Khedin):

«На данный момент портал RusFAQ.ru представляет собой комплексный проект, ориентированный на широкий круг аудитории, в том числе и в областях, не связанных с вычислительной техникой и программированием.

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

1. Изменения и усовершенствования программного кода.
2. Обеспечение безопасности на сетевом уровне.
В первом случае всё было сделано исключительно Олегом Калашниковым. Я могу сказать лишь то, что на данный момент портал в плане кода является одним из самых защищённых и надежных систем в Рунете. И это естественно, ведь и код уникален, и 5 лет функционирования не прошли даром.
Во втором случае достижения делим мы с Олегом. Организован защищённый доступ на портал с использованием протокола SSL для обеспечения конфиденциальности учётных данных пользователей. Реализована защита от спамеров, флудеров и тому подобных сетевых хулиганов на уровне доступа к порталу. В частности, ограничения коснулись анонимных прокси-серверов. С одной стороны мы прекрасно понимаем, что Интернет в идеале является синонимом понятия «анонимность», но с другой мы не можем позволить снизить качество сервиса, допуская на портал неадекватных посетителей сети."

Администратор по кадрам ВСЭ Star Wolf:

«Что касается участников, то можно констатировать как неизменный рост количества профессионалов, так и повышение квалификации у существующих экспертов. На мой взгляд, очень большую роль в этом сыграла реформа топ-менеджмента портала. Ведь ещё год назад он существовал сам по себе, и никто не нёс ответственности за свои ответы. А сейчас мы, как администрация, практически за каждого эксперта и его ответы можем поручиться. И следует отметить, что такое высокое качество сервиса организовано и поддерживается на альтруистических стремлениях и идеях администрации портала!

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

LedWorm: Участвовали ли вы в других проектах? Расскажите о наиболее успешных.

О. К.: Таких готовых глобальных проектов, как издание книги по Ассемблеру или написание RusFAQ.ru ещё не участвовал. В данный момент работа над некоторыми такими проектами идёт, но рассказывать о них раньше времени не могу по понятным причинам.

LedWorm: Какими на ваш взгляд качествами должен обладать хороший программист?

О. К.: Настоящими программистами не становятся, ими рождаются. А если говорить об ассемблерщиках, то это вообще отдельная категория программистов. Такие люди, когда пишут программы, думают на Ассемблере, ибо он в корне отличается от всех остальных языков. Например, в Бейсике, чтобы вывести на экран слово, достаточно набрать одну строчку - print «Hello!». В Ассемблере же нужно порой написать 10 и более строк, чтобы программа выполнила какую-нибудь простую операцию. В данном случае, чем выше профессионализм программиста, тем быстрее и оптимальней он напишет код.

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

LedWorm: Какие из периодических изданий (как бумажных, так и электронных) вы считает наиболее интересными? Какие читаете сами?

О. К.: Сейчас в продаже есть огромное количество различной литературы – бери и учись! Каждый может найти себе журнал или книгу по вкусу. Есть, конечно, известные журналы или книги крупных, зарекомендовавших себя издательств. С большим уважением отношусь к «Microsoft Press», «БХВ-Питербург», «Питер», журналу «Upgrade». Есть некоторые интересные и полезные статьи в журнале «Хакер». В любом случае, если издательство известное, то я всегда обращаю внимание на книгу с интересной для меня тематикой.

LedWorm: Занимались ли вы когда-нибудь взломом ПО? Использовали ли ассемблер не "по назначению"?

О. К.: Я думаю, что каждый программист, изучивший Ассемблер, старается использовать его на практике как можно скорее. Но писать большие программы на чистом Ассемблере очень проблематично, т.к. это отнимает очень много времени и сил. Поэтому первое, что делают такие программисты – начинают писать вирусы или исследовать программы сторонних авторов, стараясь что-либо поменять в них «на лету», т.е. не дизассемблируя, а редактируя непосредственно exe-файлы. Безусловно, этим в своё время занимался и я, т.к. это действительно познавательно и интересно. Но делал это исключительно ради интереса. То есть, мне, как и любому другому взломщику ПО, доставляло огромную радость, когда программа мне «подчинялась» и уже не требовала ввода серийного номера.

LedWorm: Каким программам отдаете предпочтение? (компилятор, отладчик, редактор, инсталлятор, дизассемблер).

О. К.: Компилятором всегда пользовался Macro Assembler корпорации Microsoft, как самым мощным из существовавших программ-ассемблеров в то время. Под Windows можно использовать MASM32.

Отладчик для новичков в Ассемблере, делающих первые шаги в программировании под MS-DOS, - это, безусловно, AFD pro. Простой, удобный и интуитивно понятный. Для профессионалов вполне подойдёт известный всем SoftICE.

Редактор для ассемблерщика роли не играет. Главный принцип: чем проще, тем лучше. Раньше я пользовался Norton Commander’ом и DOS Navigator’ом, теперь постоянно использую в работе исключительно Far Manager.

Дизассемблер всегда был и остаётся один единственный: IDA Pro. Он удобен, быстр и лёгок в понимании.

А в целом, особых советов нет. Если программиста устраивает какая-то программа, то пусть пользуется ей. Главное – тратить время не на настройки или установки программы, а на сам процесс программирования.

LedWorm: Сколько времени в среднем проводите за компьютером в день? Сколько времени вам понадобилось на изучение ассемблера до приличного уровня?

О. К.: Сразу два разных вопроса. Отвечу отдельно по каждому.

1. Учитывая то, что я работаю веб-программистом, то весь рабочий день провожу перед монитором. Дома в будние дни стараюсь не пользоваться ПК, т.к. мне и на работе хватает выше крыши. Свой домашний компьютер включаю только по выходным и занимаюсь исключительно своими проектами. Если рабочий день 8 часов, то и получается, что 8 часов в сутки провожу перед монитором.

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

2. Сколько времени нужно для изучения Ассемблера? Приличный уровень – понятие весьма относительное. Каждый понимает это по-своему. В Ассемблере не главное знать все операторы, а главное – иметь практический опыт их использования, т.е. практика программирования. Чем больше – тем лучше. На мой взгляд, мне понадобилось примерно 3-4 года практики, чтобы я стал более-менее сносно разбираться в чужом коде и писать оптимальные собственные программы.

LedWorm: Что посоветуете нашим читателям, которые хотят изучить ассемблер. С чего им лучше начинать?

О. К.: Начинать всегда лучше с простого, переходя к сложному. Например, я всем советую изучать Ассемблер, разрабатывая программы сначала под MS-DOS – так проще понять синтаксис и основы этого языка. Ассемблер – это язык процессора, который не знает, что такое операционная система, поэтому знания, полученные на практике программирования под MS-DOS, вам всегда пригодятся в будущем. Программисту, который только начинает изучать Ассемблер, сложно сразу разобраться в среде Windows. Я советую начать именно в DOS по следующим причинам:

1. MS-DOS по своей структуре гораздо проще Windows.
2. Начинающему программисту гораздо проще разобраться с прерываниями MS-DOS, чем с WinAPI. По сути, WinAPI – это «продвинутый» вариант прерываний.
3. В MS-DOS программист может сделать такое, что Windows категорически отвергнет, просто «убив» запущенный процесс. Это позволит глубже изучить сам язык программирования и принципы работы процессора.
4. И самое важное повторю ещё раз: знания, полученные при программировании под MS-DOS вам понадобятся и в будущем. Это база.

LedWorm: Спасибо, что ответили на наши вопросы, желаем вам успехов. Всего доброго.

О.К.: И вам также успехов! Счастливо!