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

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

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 разная и обладает своими особенностями. Кто знает, какая из них придется вам больше по душе.

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

  • анализируем;
  • проектируем;
  • кодируем;
  • тестируем;
  • испытываем;
  • сопровождаем.

Алгоритм программирования

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

  • дискретность;
  • точность;
  • понятность;
  • отличный результат;
  • массовость.

Цель программирования:

  • надежность;
  • универсальность;
  • совместимость;
  • удобочитаемость;
  • эффект.

Как делать программы на компьютер?

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

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

Пример по написанию задачи:

Составление алгоритма поиска наибольшего числа среди определенной последовательности цифр:

  • обозначаем все числа, как n, а1, а2 и так далее;
  • max- максимальное число;
  • i - порядковый номер.

Последовательность и составление действий:

  • вводим числа;
  • переменной цифре присваиваем значение а1;
  • переменной i - значение 2;
  • когда а1 будет больше max, в том случае переменной max присваиваем значение а1;
  • увеличиваем значение переменной i;
  • когда i больше n - тогда выводим max, в ином случае возвращаемся к четвертому пункту.

Также можно составляющийся алгоритм показать в виде специальной блок-схемы:

Возвращаясь к вопросу, как писать программы на компьютере, вы должны понимать, что после составления необходимого алгоритма его следует переложить еще и на алгоритмический язык. При составлении программ не нужно ограничиваться только 2-мя операторами (IF и GOTO). Следует уяснить, что если использовать не один, а несколько операторов для разных алгоритмов, то это позволит сделать программу гораздо лучше и компактнее.

Вывод

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

  • системные;
  • прикладные;
  • новые системы.

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

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

Создание программы

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

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

Изучение программирования - не то, чем можно заниматься между делом. Но не нужно тратить всю жизнь, чтобы понять основы. Есть множество способов облегчить себе обучение.

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

В то же время нельзя прекращать развиваться. Вы можете двигаться медленно или быстро, но не пропускайте ни одну тему. Осваивая больше материалов, вы создаёте себе фундамент для будущего.

1. Изучайте примеры кода

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

2. Не просто читайте примеры кода - запускайте их!

Когда вы читаете обучающее руководство или учебник, легко посмотреть на пример и сказать: «Я понял, я понял. Да, в этом есть смысл». Конечно, вы могли понять его, но вы не знаете наверняка действительно ли вы поняли его правильно. Есть лишь один способ выяснить - сделать что-то с кодом.

Если вы до сих пор не сделали этого, установите среду разработки (IDE), которая поддерживает ваш язык программирования.

Затем перенесите пример в IDE - если вы набьёте его вместо того чтобы просто скопировать, вы действительно пройдётесь по нему от начала до конца. Ввод кода заставит вас уделять внимание деталям синтаксиса языка, например точкам с запятыми, которыми должна заканчиваться каждая строка.

Теперь скомпилируйте и запустите код. Убедитесь, что он делает именно то, что должен.

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

3. Начните писать свой код как можно раньше

Как только вы что-то поймёте про язык - даже если от него у вас уже кружится голова - начните писать программы на нём. Иногда трудно найти идеи для программ. Это нормально, в самом начале вам не надо придумывать свою идею.

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

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

4. Научитесь использовать отладчик

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

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

Первое время исправление ошибок с отладчиком будет занимать много времени. Но по мере того, как количество ошибок в вашем коде будет расти, отладчик начнёт экономить уйму вашего времени. А количество ошибок, поверьте, будет измеряться десятками.

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

5. Ищите больше источников

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

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

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

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

А с чем-то программируемым я столкнулся так: у отца были «Электроника МК-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-х), можно себе позволить вообще что угодно, любой стартап. Но когда у тебя семья и большая ипотека, всё становится сложнее.

  • Сергей Савенков

    какой то “куцый” обзор… как будто спешили куда то