Пишем программу для компьютера - пошаговая инструкция, приложение и советы. Как писать компьютерные программы

Я сижу за клавиатурой и набираю эту статью. В CD-ишнике вращается диск: из колонок льется негромкая музыка. В правом нижнем углу экрана перемигиваются два монитора: из Интернета "скачивается" информация. В фоновом режиме работают часы, планировщик, Outlook и много еще чего. Компьютер сейчас - это многофункциональный комбайн для "перемалывания" информации, причем, такой информации, большая часть которой безразлична в каждый конкретный момент времени пользователю, а ведь изначально вычислительные машины разрабатывались лишь для проведения сложных математических расчетов, без которых пользователю было никак не обойтись. Точнее, расчетов не столько сложных, а скорее громоздких, для которых необходимо проводить большое количество однотипных вычислений. Не случайно в первую очередь возможностями вычислительных машин воспользовались военные шифровальщики и ученые- физики.

В настоящее время существует большое количество специализированных программных пакетов для самых разных расчетов, от экранного калькулятора и EXEL до Mathlab. Всегда можно подобрать программный продукт для необходимых расчетов. Но как быть, когда надо произвести некие специфические расчеты, а из освоенных пакетов ничто для этих целей не подходит? Особенно если этот расчет предполагается произвести только один раз. Не изучать же из-за этого Mathlab. Но если вы слегка владеете одним из языков программирования, есть смысл попытаться написать такую программу самому.

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

В качестве примера постараемся решить следующую простенькую задачу.

Масса тела = 50+(рост-150) x 0,32 +(возраст-21)/5

АД (верхнее)=102+0,7 x возраст+0,15 x масса тела

АД (нижнее)=78+0,17 x возраст+0,1 x масса тела

Масса тела = 50+(рост-150) x 0,75 +(возраст-21)/4

АД (верхнее)=109+0,5 x возраст+0,1 x масса тела

АД (нижнее)=74+0,1 x возраст+0,15 x масса тела

Пусть мы стремимся, чтобы как можно больше людей смогло контролировать свое физическое состояние, и с этой целью хотим поместить программу расчета на специальном сайте в Интернете. Для этих целей нам необходимо знать как минимум HTML. Конечно, можно выставить голые формулы на сайте, предоставив посетителям возможность самим заняться подсчетами в столбик. Но гораздо приятнее просто подставить значения и получить готовый результат. Здесь уже одного HTML недостаточно, надо знать какой-то язык программирования. В принципе, подойдет любой; два плюс три запрограммировать можно на любом языке. Но если написать программку, скажем, на С++, то встанет вопрос, каким боком ее "прилепить" к html-у. Кроме того, придется еще разбираться и с CGI. Чтобы избежать этого, можно воспользоваться языком Java, написав соответствующий аплет, но кто сказал, что это так просто, и, с другой стороны, стоит ли стрелять из пушек по воробьям? Поэтому для несложных прикладных задач как нельзя лучше подойдет JavaScript. Если вы этим языком не владеете, а знаете, например, VBScript, то вам не стоит расстраиваться, эти языки из одной "весовой категории" и почти все, что может JavaScript, может и VBScript и наоборот. Если вы еще не освоили не один из этих языков, то, почитав денька два учебник из серии "для чайников", сможете сносно писать некоммерческие программки "для себя".

Итак, с языками определились, начинаем программировать. Некоторые думают, что программирование - это написание кодов программ. Нет. Написание кодов - это всего лишь кодирование, или в случае HTML - верстка.

Начнем программирование с общих утверждений, что должна выполнять программа.

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

Далее

Программа должна делать корректные вычисления, не утруждая пользователя излишними запросами и специальными установками. Так как наша программа должна выполняться в Интернете, то здесь важна скорость, работа без излишних перезагрузок. Использование языка JavaScript удовлетворяет этим условиям. Поэтому идем дальше и пытаемся постепенно углубиться в детали.

У нас есть три пути:

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

Второй. Создать расчетную часть, а затем надстроить над ней интерфейс.

Третий. Начать с разработки интерфейса и под него подстраивать расчет.

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

Создание интерфейса WEB-странички

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






Узнайте
свою оптимальную физическую форму


Пол:

Женский
Мужской
Возраст лет Рост см Вес кг





Первый этап проектирования интерфейса закончен. Внесем в текст формы некоторые изменения. Так как мы не собираемся никуда отправлять данные из формы, уберем method="POST", но зато добавим название формы, чтобы нам было удобнее в дальнейшем работать. Пусть форма называется "Zdorov". Переименуем также названия полей формы: "D1"="pol", "T1"="Let", "T2"="Rost", "T3"="Ves", "B1"="shet". Для удобства уберем также все теги форматирования шрифтов, заменив их на ... .

В результате форма "Zdorov" примет вид:


Пол
Женский
Мужской

Возраст лет
Рост см
Вес кг

m0=Math.round(50+(document.Zdorov.Rost.value-150)*0.32+(document.Zdorov.Let.value-21)/5);


adv0=Math.round(102+0.7*document.Zdo-rov.Let.value+0.15*m0); adn0=Math.round(78+0.17*document.Zdo-rov.Let.value+0.1*m0);

adv1=Math.round(102+0.7*document.Zdor-ov.Let.value+0.15*document.Zdorov.Ves.value);

}
else{



v1=Math.round(109+0.5*document.Zdor-ov.Let.value+0.1*document.Zdorov.Ves.value);
};

} Функция Sthet() является скриптом для расчета физической формы. Смысл записей скрипта понятен из комментариев.

Внедрение скрипта в HTML-документ

Завершающий этап работы - компоновка программного кода.

Скрипт помещаем в часть ... документа. Кнопку "Посчитать" заставляем инициализировать расчет:

Добавляем стиль текста.


h3 {font-family: Arial;color: yellow";}

В итоге получаем следующий HTML-документ:





Узнайте свою оптимальную физическую форму

h3 {font-family: Arial;color: "yellow";}








Пол
Женский
Мужской

Возраст
лет Рост
см Вес
кг



Напишите мне письмо


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

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


Практически все пользователи ПК размышляли о том, чтобы написать собственную программу. Даже если она будет невероятно простой, но зато полезной и сделанной лично вами. Естественно, для этого требуются определенные знания и навыки в области программирования. Однако, если регулярно практиковаться и изучать материалы по поводу того, как создать программу для компьютера, то в будущем можно научиться создавать полезный софт, выкладывать его в Сети и даже зарабатывать на нем.

Создание программы
  • Если вы твердо решили воплотить мечту о собственной программе в реальность, то изначально определитесь, чему она будет посвящена (какие задачи она позволит решить). Тут многое будет зависеть от вашей фантазии и личных предпочтений. Вполне возможно, что вы уже сталкивались с тем, что для решения конкретной проблемы в Интернете нет подходящих программ, поэтому вам захотелось написать свою. На этой стадии нужно понимать, на какую аудиторию она будет рассчитана.
  • В дальнейшем сделайте выбор в пользу определенной операционной системы. Каждый программист, прежде чем создать программу, продумывает, в какой среде она будет функционировать. На сегодняшний день наиболее популярной и распространенной считается ОС Windows. Именно поэтому свой выбор рекомендуется остановить на этой системе.
  • Определитесь со средствами программирования. К примеру, чтобы создать простую чит программу, можно использовать следующие языки программирования: Borland Delphi, MS Visual Basic, C++ Builder. Они предоставляют возможность писать программы по принципу конструктора - из готовых элементов вы формируете единое целое.
  • Кроме того, можно скачать специальные программы. К примеру, «Алгоритм» (скачать ее можно с сайта). Установите программу на свой персональный компьютер и можете пытаться создавать свои первые простейшие приложения. Интерфейс «Алгоритма» русскоязычный. Разобраться в этой программе не составит особого труда.
  • Во время написания своего приложения попробуйте выделить определенную «изюминку» - то, что будет отличать программу, написанную вами, от аналогов. Поработайте над интерфейсом. Если это ваша первая программа, то рекомендуется отдать предпочтение типичному Windows-интерфейсу. Можно использовать дизайнерские формы. С их помощью вы не просто поймете, каким будет интерфейс приложения еще на стадии построения, но и сможете задавать характеристики различных объектов, что существенно облегчит процесс.
  • Постарайтесь оформить собственные идеи в алгоритм. Если приложение довольно серьезное (например, вы решили создать программу для взлома) и функционирует с собственным типом файлов, то его необходимо зарегистрировать за программой. Для этого применяется специализированный инсталлятор.
  • Создайте файл помощи. Для этого желательно использовать специальные компиляторы. Они поставляются с различными средами визуального программирования (Visual Basic, Delphi и пр.).
  • Разумеется, сделать все это без надлежащей подготовки крайне сложно. Именно поэтому предварительно стоит пройти небольшое обучение и разобраться в основах программирования, прежде чем приступать к созданию собственных приложений.

    Программирование – процесс творческий и интересный. Для того, чтобы создавать программы не всегда нужно знать языки. Какой же инструмент нужен для создания программ? Вам необходима среда программирования. С ее помощью ваши команды переводятся в понятный для компьютера бинарный код. Вот только языков существует очень много, а сред программирования еще больше. Мы рассмотрим список программ для создания программ.

    PascalABC.NET – это простая бесплатная среда разработки для языка Паскаль. Именно ее чаще всего используют в школах и университетах для обучения. Эта программа на русском языке позволит вам создавать проекты любой сложности. Редактор кода будет подсказывать и помогать вам, а компилятор — указывать на ошибки. Обладает высокой скоростью выполнения программ.

    Преимущество использования языка Паскаль — он представляет собой объектно-ориентированное программирование. ООП гораздо удобнее процедурного программирования, хотя и объемнее.

    К сожалению, PascalABC.NET немного требователен к ресурсам компьютера и на более старых машинах может подвисать.

    Free Pascal

    Фри Паскаль – это кроссплатформенный компилятор, а не среда программирования. С его помощью вы можете проверить программу на правильность написания, а также запустить ее. Но вы не сможете откомпилировать ее в.ехе. Free Pascal имеет высокую скорость выполнения, а также простой и понятный интерфейс.

    Так же, как и в многих подобных ему программах, редактор кода в Free Pascal может помогать программисту завершая за него написание команд.

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

    Turbo Pascal

    Практически первый инструмент для создания программ на компьютер – Турбо Паскаль. Эта среда программирования создана для операционной системы DOS и чтобы запустить ее на Windows нужно устанавливать дополнительное ПО. Поддерживается русский язык, обладает высокой скоростью выполнения и компиляции.

    Turbo Pascal обладает такой интересной функцией, как трассировка. В режиме трассировки вы можете наблюдать за работой программы пошагово и следить за изменением данных. Это поможет обнаружить ошибки, найти которые сложнее всего — логические ошибки.

    Хотя Turbo Pascal прост и надежен в использовании, все же он слегка устарел: созданный в 1996 году, Турбо Паскаль актуален только для одной ОС — DOS.

    Это визуальная среда программирования на языке Паскаль. Ее удобный, интуитивно понятный интерфейс позволяет с легкостью создавать программы с минимальными знаниями языка. Lazarus практически полностью совместим с языком программирования Delphi.

    В отличии от Алгоритма и HiAsm, Лазарус все таки предполагает знания языка, в нашем случае — Pascal. Здесь вы не только собираете программу мышью по кусочкам, но также и прописываете код для каждого элемента. Это позволяет вам больше понимать процессы, происходящие в программе.

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

    К сожалению, если у вас возникнут вопросы, то ответы искать вам придется в интернете, так как Лазарус не имеет документации.

    HiAsm

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

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

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

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

    Также Алгоритм позволяет вам работать с графическим модулем, но приложения с использованием графики будут выполняться довольно долго.

    В бесплатной версии можно компилировать проект из.alg в.exe только на сайте разработчика и только 3 раза в день. Это один из основных минусов. Вы можете приобрести лицензионную версию и компилировать проекты прямо в программе.

    IntelliJ IDEA – это одна из самых популярных кроссплатформенных IDE. Эта среда имеет бесплатную, слегка ограниченную версию и платную. Для большинства программистов вполне хватает и бесплатной версии. Она обладает мощным редактором кода, который будет исправлять ошибки и завершать за вас код. Если вы допускаете ошибку, среда сообщает вам об этом и предлагает возможные варианты решения. Это интеллектуальная среда разработки, которая предугадывает ваши действия.

    Еще одной удобной функцией в InteliiJ IDEA является автоматическое управление памятью. Так называемый «сборщик мусора» постоянно следит за памятью, которая выделяется для программы, и, в случае когда память больше не нужна, сборщик освобождает ее.

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

    Чаще всего Eclipse используют для работы с языком программирования Java, но он также поддерживает работу и с другими языками. Это один из основных конкурентов IntelliJ IDEA. Отличие Eclipse от ему подобных программ в том, что к нему можно устанавливать различные дополнения и его можно полностью настроить под себя.

    Eclipse также обладает высокой скорость компиляции и выполнения. Каждую программу, созданную в этой среде, вы сможете запустить на любой операционной системе, так как Java — кроссплатформенный язык.

    Отличие Eclipse от IntelliJ IDEA — интерфейс. В Эклипсе он гораздо проще и понятнее, что делает его более удобным для новичков.

    Но также, как и все IDE для Java, Эклипс все же имеет свои системные требования, поэтому работать он будет не на каждом компьютере. Хотя не такие уж эти требования и высокие.

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

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

    Система программирования PascalABC отлично подходит для начального изучения и позволяет плавно перейти к более сложному программированию. Данная программа распространяется бесплатно (в её состав входит электронный задачник с большим количеством примеров, а документация и справочная система доступна на русском языке). В качестве примера попробуем написать программу для компьютера, используя PascalABC.

    Быстрая навигация по статье

    Знакомство с PascalABC

    После запуска программы появляется окно среды программирования PascalABC. Интерфейс несложный и включает в себя несколько элементов:

    • Строка меню - содержит все необходимые пункты для редактирования, правки и запуска программы;
    • Строка панели инструментов - на ней расположены часто используемые команды;
    • Рабочее поле - основная рабочая область программы.
    Создание программы

    У всех программ, написанных на языке PascalABC, общий шаблон оформления. Каждая программа состоит из нескольких блоков:

    • Описание переменных - к какому типу относятся вводимые данные;
    • Ввод данных - вводятся данные, необходимые для решения поставленной задачи;
    • Основной блок - выполняются поставленные задачи;
    • Вывод данных - выводится результат работы программы.

    Алгоритм программы выглядит так:

    • Вводим переменную а, которая является числом;
    • Начало программы;
    • Ввод данных;
    • Работа программы;
    • Вывод данных;
    • Конец программы.

    Пример кода программы:

    Program vvod;
    var a:integer;
    begin
    readln (a);
    writeln ("Вы ввели число ", a);
    end.

    Разбор данной программы по строкам
    • Program vvod; — название программы (используется только латинский алфавит, цифры или знак "_"). Каждая строчка заканчивается точкой с запятой;
    • var a:integer; — идёт перечисление переменных. В данном примере используется одна переменная - «a», при этом слово «var» — служебное (с его помощью задаются переменные). Далее описывается вид переменных (integer — целые числа и real — дробные);
    • begin - это слово обозначает начало программы (точка с запятой после него не ставится);
    • readln (a); — ввод данных. Во время работы программы вводится значение переменной (в данном примере используется любое целое число);
    • writeln ("Вы ввели число ", a); — вывод данных. В скобках пишется то, что должен показать компьютер. Если должен выводиться какой-нибудь текст, то его нужно вставить в одинарные кавычки;
    • end. - программа завершена (в конце ставится точка).

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

    Дошкольником начинаешь развлекать себя играми на советском калькуляторе, и вскоре обнаруживаешь, что надо управлять десятками миллиардов записей в базах данных. На наши вопросы-о-том-как-становятся-программистами ответил Монс Андерсон, также известный как «Владимир Перепелица».

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

    А с чем-то программируемым я столкнулся так: у отца были «Электроника МК-52», «МК-61», программируемые калькуляторы. Соответственно, первая книжечка – это вот игровая программа, набирай и играй. Я точно помню «Крестики-нолики», «Морской бой» и еще была какая-то фигня логическая.

    До сих пор помню комбинацию кнопочек В/О С/П, хотя уже не помню, что она значит.

    Однажды я взял папин калькулятор и запорол ему большую хорошую инженерную программу. Калькулятор был с памятью, я её и затёр игрушкой какой-то. Он меня заставил программу перенабирать. Потом у меня появился Sinclair, спаянный вручную одним папиным знакомым. Нестандартный Sinclair: у него не было дисковода, так что все программы мои были write only. То есть включил, написал, потестировал, погонял, выключил.

    Первый x86 компьютер - 200-й Pentium MMX с Windows 95 OSR2 - мне купили в декабре 1997 года, потому что я в 10 классе перешел в информатико-математическую школу и без компьютера было трудно. Я туда поставил Pascal, Delphi, подсмотрел у кого-то, как писать ассемблерные вставки. Так и писал на Pascal с ассемблерными вставками и бесил соседей тем, что не вылезаю из инета - модемный тариф был часов на 400 в месяц, а телефон - на спаренной с соседями линии.

    Обязательно ли получать высшее образование?

    У меня в 11 классе дипломов всяких пачечка была: химия - 2 место по стране, астрономия - 2 место, информатика на областном уровне (спортивное программирование никогда не было моей стезей), физика – тоже что-то типа того. Решили с родителями, что нужно поступать в крутой институт, и выбрали МФТИ. Это при том, что жили мы в Николаеве. Но - знакомый знакомого был деканом факультета физической и квантовой электроники МФТИ, и я, весь из себя олимпиадник, поехал в Москву сдавать вступительные экзамены. Не сдал.

    Но так как в школу я пошел рано, до армии оставался год, так что я пошел на заочное отделение МФТИ. Учился, решал задачки, а днем работал на стройке коттеджей для «новых русских». Пилил камни, клал кирпичи, встречался с рэкетом - конец 90-х же!

    Со второй попытки поступил, два года проучился, а на третий - бросил. Не подружился с математикой.

    С самого первого курса, с первой лекции по матанализу, когда рассказывают абсолютно очевидные вещи и говорят, что сейчас это будут доказывать. Я так не могу. Вот физика, химия - их я люблю, понимаю, воспринимаю. Я могу прийти, вообще ничего не читав, сесть напротив физика и обсуждать с ним любую тему, которую он захочет. Если чего-то не знаю, не помню, я буду спрашивать, уточнять. А математика и матан, все эти доказательства, теоремы Коши и им подобные... К зимней сессии у меня было три незачета и недопуск к экзаменам. Конечно, мог сдать, но решил, что учиться меня научили, а продолжать вот это - неинтересно.

    Я к тому моменту уже программировал что-то на заказ, так что очевидный ответ - да, чтобы зарабатывать деньги программированием или даже стать хорошим программистом, диплом не нужен. Именно по программированию у нас в вузе препод был довольно-таки «халявщиком», а по программе нужно было учить Pascal, который мы уже знали.

    Для тех, кто не застал эту прекрасную эпоху: вот так выглядит Турбо Паскаль

    В какой компании работать, а каких избегать?

    Отчислился я в начале 2003, и после университета года четыре работал системным администратором и писал разные сайтики. Например, предыдущий сайт «Опоры России» напилил единолично, начиная с кода и базы данных и заканчивая версткой/дизайном.

    Затем я устроился в хостинг-провайдер «Агава» Perl-разработчиком (в резюме у меня Perl`a не было, так что все удивились, когда я решил 4 толстых тестовых задания, которые никто никогда не решал). Я начал ковырять биллинг, начал параллельно изучать новые технологии, которые там применялись. Находил и исправлял нелепости в коде, вроде отправления 1500 SQL-запросов для отрисовки одной страницы. Узнал, что такое ORM , сам написал ORM. Узнал, что такое фреймворки , сам написал фреймворк.

    Тут случился кризис 2008 года. «Агава» начала увольнять разработчиков (потому что они стоили дороже) и нанимать менеджеров. Менеджеры накапливались и все сильнее конфликтовали с друг другом, что неудивительно, когда на одного разработчика - 5-7 менеджеров.

    У меня был запас денег, а значит и времени, для новых собеседований. Я ходил в Яндекс, он мне не понравился. Я ходил в Mail.ru. Mail.ru мне тогда сильно не понравился. Пошел в Рамблер, мне понравились технологии, которые у них использовались, понравились люди. Был еще где-то, в конторах типа ашмановской, но в итоге выбрал Рамблер.

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

    Именно разработка этой штуки натолкнула меня на асинхронно-событийные технологии, которыми я сейчас занимаюсь как основным направлением.

    Дальше мы писали Рамблер-Фото и это был отличнейший пример использования agile-методологий . Мы разрабатывали его четко по Scrum , начиная с прописывания всех , менеджер сидел прямо с нами, мы делали daily scrums. Проект получился, на мой взгляд, и технологически и продуктово очень хорошим. Когда с него позже сняли всех разработчиков и практически всё администрирование, он проработал еще года два вообще без вмешательства. Я не знаю, зачем его было закрывать, неужели несчастные восемь серверов так много денег ели? Как говорили те, у кого оставался доступ к админке, пользовательские смски (то есть деньги), приходили до самого последнего дня.

    Не знаю, что было в голове у тех, кто этим управлял. Это было уже во времена Афиши-Рамблер, «объединенной компании». Тогда сняли руководство технологического Рамблера и поставили медийное руководство Афиши. Наступил сложный период, когда вся эта объединенная компания пыталась найти себя. Нашла она себя в том, что теперь это не технологическая компания, а медийная, и курс развития будет соответствующий.

    К этому моменту у большей части программистов (и не только) деморализация была полная. Разработчики говорили: «Мы не знаем, что мы делаем, зачем мы делаем и когда выкинут то, что мы делаем сейчас».

    Потому что прямо на их глазах закрывали какие-то проекты, которые обсуждались, делались и были сделаны, Рамблер-Авиа, например.

    Я точно так же, - уже не помню сколько, кажется, около года - руководил проектом Рамблер-Контакты, был такой мессенджер.

    Техническое руководство, архитектура, плюс писал некоторые компоненты. И наш проект закрыли приблизительно так же. Хотя у нас был клиент с неплохим дизайном и интересным функционалом. У нас были офигительные отзывы. Приходили отзывы пользователей: «Классный клиент, отличный дизайн, делайте еще» и т.д.

    Помню совсем нелепую историю. В какой-то момент нам сказали, что мы упёрлись в «потолок». По графику был рост пользователей, и где-то он остановился. Мы начали разбираться, обнаружили такую штуку: кто-то из рекламщиков фиганул рекламу «Скачай аську "Контакты"». Мы полезли в логи, в логах - тысячи айсикьюшных логинов. Они пытались войти в ICQ нашим клиентом, и Рамблер не мог их пустить. Конечно, они не стали нашими пользователями.

    В общем, это были последние дни. Часть людей из менеджеров говорила: может быть, получится сохранить проект. Кто-то говорил: нет, проект под закрытие. Причем это говорилось еще до того, как были выяснены все подробности - что случилось, почему замедлился рост аудитории. «14 человек пилили проект два года, но мы все равно это закрываем». Не попытались никак сохранить, перенять экспертизу, просто потушили сервера, выкинув все потраченные ресурсы.

    Вывод простой: хреновое управление способно убить вообще любой проект.

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

    Разумеется, я из Рамблера ушел - в Mail.ru, куда меня давно звали. Пришел один, но значился как руководитель отдела, получил полномочия писать, что я хочу и как я хочу. Начал писать и набирать людей, отдел почти сразу вырос до пяти человек.

    Формально я отношусь к «почте», но в основном делаю интеграционные проекты. Например, API для Почты, которые связывают её с внешним миром. Когда были более-менее написаны аватарки, связки со всякими соцсетями, меня попросили по-быстрому помочь с проектом «Облако». Я включился в работу и вот уже 2 года я занимаюсь Облаком@Mail.Ru.

    Работаю на Perl я в довольно узкой сфере - занимаюсь асинхронными сетевыми приложениями. Их использует любой высоконагруженный софт, где большое количество запросов, либо большое количество одновременных соединений, много действий «наружу», основную часть которых составляет ожидание. Ходить в API других сервисов, обновлять сотни тысяч ключей и тому подобное.

    В принципе, по ходу занимаюсь многими технологиями, выявляю и устраняю различные проблемы. Уровень нагрузки на один сервер у нас доходит до 30-40 тысяч запросов в секунду, и я обычно заморачиваюсь на тему высокой производительности кода. Я довольно-таки убежденный адепт подхода, что программы пишутся для компов, а не для людей, которые будут их потом читать или поддерживать. Мы пишем программы для компов, компы должны уметь их эффективно читать и исполнять.

    Для примера, в свое время, когда я сюда пришел, то наткнулся на список рассылки с тестами производительности HTTP-серверов на Perl и понял, что они сильно проигрывают (в полтора раза!) имеющимся решениям на Python, Nodе. И возмутился.

    Сел, составил план, как всё сделать, чего нужно написать, запланировал оптимизацию с использованием C. Но на практике я остановился еще до того, как воткнул сишные кусочки, потому что уже обошел по производительности все перловые решения, питоновые и нодовые. Я помню, что предыдущее решение было на уровне 2500-3000 запросов в секунду, Python брал 5000, Node – 6000, на чистом Перле у меня получилось 8000 на одном процессорном ядре.

    В любой задаче может быть применён вот такой подход:
    1. Ставим цель: достигнуть определённого решения.
    2. Выбираем средства, которые могут удовлетворять решению.
    3. Если средство подходит - PROFIT
    4. Если не подходит (а так обычно и бывает), то либо решение дорабатываем напильником, либо, если не подходит очень сильно, делаем своё.
    5. Проводим сравнительную характеристику нового решения и существующего.
    6. Если существующее вдруг оказывается быстрее, то выявляем место или метод, за счёт которого получается такой результат, и вносим правки в новое решение.

    Просто ли стать программистом?

    Мне кажется, сейчас войти в профессию программиста гораздо проще, чем 15 лет назад.

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

    Среды разработки были так себе, и языков популярных, быстро разворачиваемых, особо не было... Сейчас инструменты стали умнее, появились обучающие штуки, куда просто приходишь и решаешь задачи - Codeacademy, HTML Academy.

    Codeacademy, самый популярный мировой проект обучения коду, предлагает писать код сразу, пропустив теоретическое обучение.

    Конкуренция? На низком уровне конкуренция была всегда. Достаточно было кому-то набросать HTML-страничку, поставить тег с угловыми скобками и вопросами, и он уже начинал считать себя серверным программистом на PHP. Вообще не зная, что такое cgi, что такое заголовки, HTTP. На таком уровне конкуренция всегда есть. Когда человек уже поднимается по уровню, начинает понимать и архитектуру приложений, и как это все работает, даже рабочий язык становится не важен.

    Проверить, насколько вам интересно программирование, очень просто: надо открыть любой обучающий проект и попробовать что-то сделать.

    А если хочется чего-нибудь такого живого, разнообразного, всякого, но, тем не менее, тоже хорошо оплачиваемого, это Perl и С. А если такого стартаперского: по-быстренькому чего-нибудь собрать, запустить и показать инвесторам, - то тут, наверное, стоит посмотреть на Ruby, Go, может быть, Python. Тут уже как понравится. Кому-то, может, по душе придется Javascript с Angular и MongoDB.

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

    Я видел джавистов, которые писали на Perl. Это ужасно. Они постоянно недовольны, они постоянно возмущаются, им всё не нравится, и они стремятся все сделать по-своему. Они стремятся сделать всю эту гору классов, абстрактные фабрики, которые в Perl не нужны. Там это можно сделать, но он про другое. В Perl вообще можно очень многое сделать, что есть в других языках, но оно не является для этого языка органичным.

    Perl - довольно своеобразный язык. Его автор - лингвист, и при разработке самого синтаксиса языка он применял всякие, скажем так, лингвистические подходы. Основной принцип - TIMTOWTDI - «любую вещь можно сделать многими способами» (there is more than one way to do it).

    Когда кто-то говорит про Перл, что он сложный, что его невозможно читать, я могу ответить только одно: можно взять китайский язык и говорить, что язык – ужасный, его невозможно читать, ничего не понятно.

    Любой язык, любую технологию, с которой ты сталкиваешься, нужно сначала изучить. Есть уровень чтения, есть уровень записи - уровень, когда ты можешь на языке писать. Большинство обычно изучают маленький объем, начинают считать, что они знают язык, и когда сталкиваются с программами, написанными с применением сложного синтаксиса, просто не могут их прочесть и начинают утверждать, что язык плох.

    Единственное, для чего, на мой взгляд, Перл плохенько подходит, – написание драйверов. Сложно мне представить, как на Перле писать драйвера. Еще его слабая сторона – математика, она медленнее в 20-30 раз, чем в C. То есть если нам нужно обсчитать детерминант матрицы 100*100, для этого нужно брать C или какие-то специально заточенные под это дело языки.

    Я писал на Java и могу сказать, что JVM – отличная вещь, очень быстрая, на ней можно написать очень высокопроизводительную штуку. Был у нас проект «Рамблер-Контакты» с jabber-сервером на джаве. И джависты, не могли нормально сделать XML-парсер, у них все время либо тормозил, либо криво парсил. Поэтому я взял свой сишный парсер, который у меня был написан для Perl, и перегнал его на джаву. Просто написал по-сишному. Он парсил, возможно, в несколько раз быстрее, чем то, что у них было до этого. И не глючил.

    В целом я с новыми языками знакомлюсь, но не начинаю на них писать, потому что ни один из них мне пока не понравился больше. С Perl я чувствую себя магом.

    Я могу сделать что угодно: такие запросы отправить, распарсить что угодно, собрать, подключить Си и так далее. С другим языком мне придется очень долго достигать такого же уровня.

    Если бы не было Perl, я бы, наверное, остановился на Ruby. Но Ruby не могло быть без Перла, у которого он многое позаимствовал.

    Меня спрашивают, почему я в свое время не изучил Python? Питоновых вакансий же больше. А я последние несколько лет не ищу вакансии - меня уже зовут: «Приходи к нам пособеседоваться», «Не интересно ли тебе перейти». Постоянно висит одна: зазывают игрушки писать, а я всё отказываюсь.

    Чем вдохновляться?

    Лично мне нравится создавать и менять что-то созданное. В реальном мире с реальными материалами… я многими вещами занимался: обработкой материалов, литьем металла - там очень сложно что-то скопировать, что-то доработать. Заинтересовался ювелирным литьем, но ведь запредельные деньги нужны, чтобы достать оборудование. Можно, конечно, по старинке, как это делали много лет назад, но сейчас есть классные устройства для того, чтобы ювелирку делать. Только цена попытки - огромная. А в программировании можно пробовать себя практически бесплатно, только ценой времени. И это большое удовольствие.

    Еще, наверное, здесь играет роль честолюбие. Мне приятно, когда мои какие-то компоненты, продукты или еще какие модули - быстрее всех прочих, в рамках одного языка или в рамках разных языков.

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

    Правда, с этим связано то, что я - плохой мейнтейнер. Я всё, что пишу, выкладываю на github и на CPAN, но пересобирать старые модули - лениво (хотя я стараюсь). Пример – есть у меня XML Parser Style - модуль-плагин к XML Parser’у. Это первая версия. Потом я нахожу что-то лучше, удобнее, интереснее, пишу следующий модуль. Потом я прекращаю их использовать и пишу свой XML Parser, очень крутой, быстрый. И проблема в том, что мне присылают патчи в те модули, которыми я перестал пользоваться. Залезаешь в код трехлетней давности смотришь: «Блин, да это неэффективно, я так писал? Эх, да это все переписать надо». А переписывать что-то старое неинтересно - зачем?

    Как заниматься (само)обучением?

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

    Основной материал моего обучения – это документация, это статьи, это исходники. Очень люблю читать исходники. Еще есть эксперименты на практике, и соревнования, и, в принципе, я стараюсь следить за тем, что происходит вообще в среде, в разрезе «а что бывает, если привносить в Perl что-нибудь из других языков».

    Проходил сертификацию на Scrum, изучал, но это не было остро необходимым. Не то что я вдруг понимал: блин, надо бы поучиться! Мне всегда хватало собственного интереса. Когда в какой-то момент не хватало архитектурных знаний, я садился и читал: про базы данных, про сети.

    Я немного преподавал в МФТИ... до того, как меня оттуда отчислили. В первом семестре по информатике был уже изученный вдоль и поперек Pascal. 10 минут на задачу, остальное времени на этой же машине сидишь, пишешь какие-нибудь фрактальчики на ассемблере. Препод наш это увидел и сказал: «Ну всё!». И говорит (мне и еще одному парню, который вместо ассемблера на С++ писал): «Раз вы тут такие все из себя и вам неинтересно, вот ты читаешь одногруппникам курс C++ полгода, а ты читаешь ассемблер. А я вам ставлю зачет за весь год, идет?». Ну ок.

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

    С недавнего времени совместно с двумя другими крутыми Perl-разработчиками я веду курс программирования на Perl в МГУ. Очень интересный опыт, который показал, что среди большой выборки людей обязательно найдётся немало тех, кому этот язык придётся по душе.

    Мне вообще нравится рассказывать. Когда еще в Агаве работал и какие-то вещи интересные накапывал, меня просили рассказать. Я рассказал на маленькой внутриперловой тусовке на Moscow.pm. Оказалось, что это всем интересно, и попросили рассказать на большой конференции. Я пошел на большую - YAPC::Russia 2008 - рассказал на сорок минут плюс весь обед. Мне понравилось. Я рассказывал и на конференции Highload, и еще где-то (кажется, на devcon).

    Потом подумал: все, что знаю, я рассказал. Но практика показала, что люди даже того, что я уже не раз рассказывал, все равно не знают. И это можно повторять. А тут подвернулась возможность рассказать это студентам. Причем у студентов мозги не заморочены мыслями, что Perl – это прошлый век. Они готовы смотреть на самые разные технологии, им всё интересно.

    Чего ждать от будущего?

    Размышлять, куда всё движется, приходится - раз уж я этим занимаюсь. На самом деле, я не вижу предпосылок для кардинальных изменений в программировании. Хорошо, за 20-30 лет языки изменятся: мы будем писать не просто программы, а программы, которые пишут программы.

    Будет развитие в сторону уменьшения рутинных операций, в сторону повторения одного и того же. Возможно, где-то случится смена технологий, типа «перейдем с кристаллов на оптику».

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

    Напоследок мы решили сыграть с мистером Андерсоном блиц-раунд в «вопрос-ответ».

    - Расскажи какую-нибудь смешную историю времен школьного программирования?

    Когда я перешел в информатико-математическую школу в 10 классе, одноклассники уже писали на Pascal, им его с 8 класса давали. Я быстренько справился с его синтаксисом, но старался программы сдавать за урок. Потому что я не умел сохранять! Ни одна зараза не рассказала мне, как сохранить на эту чёртову дискету. Казалось бы, возьми да узнай, но как-то у меня не получалось с сохранением, уже не помню почему именно. Первый семестр 10 класса - оценка у меня еле-еле 3, просто потому что я не умел сохранять. Родители подумали-подумали, решили, что при таких раскладах недолго мне учиться в этой школе, и купили домашний компьютер.

    - А какая первая игрушка была на домашнем компьютере?

    - считает, что каждый программист должен поработать в стартапе... Был такой опыт?

    Я уходил из «Агавы» - делать сайты. Собрались с несколькими человеками, прикинули, заказов было уже порядочно на тот момент - каждый третий из знакомых (такое было окружение) спрашивал: а могу ли я ему сделать сайтик? Я как-то начал делать сайты, но с чисто программерской стороны закопался: думал, сейчас сделаю универсальный фреймворк. Идея была такая: напилю конструктор, а дальше буду на нём собирать сайты.

    Практика показала, что те скиллы, которые у меня были тогда, только меня могли обеспечивать. Я не видел путей к расширению. Мог бы взять еще людей, но они бы делали, на мой взгляд, либо также, либо хуже с той же скоростью, поэтому мы бы просто делили эти деньги. Я не видел какого-то роста. Сдал, какие были, сайты, решил на это дело забить и вернулся в «Агаву» с повышением зарплаты относительно предыдущей. Оказалось, что на тот момент штатная работа была доходнее, чем фрилансинг.

    Мне кажется, что из меня плохой стартапер, потому что я хочу делать качественнее, даже если это требует времени. Какой-нибудь студент, который позволит себе быстро наклепать прототип и показать инвестору, может быть более успешным стартапером, чем я.

    Использовать своё время

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

    Родственное умение - .

    - Ты о чем-то жалеешь из своей трудовой биографии?

    Жалею, что потратил первые годы на всякую фигню, сайтики эти, сисадминство. Какой-то опыт оно дало, но этот опыт я получил бы за гораздо меньшее время. Думаю, мне бы понравилось, если бы я пошел в Mail.ru плюс-минус сразу, как только бросил институт и понял, что компы чинить - это не моё.

    Тем, кто моложе, я бы посоветовал помнить, что время – единственный ценный ресурс.

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