Разработка больших программ с нуля, быстро и со вкусом

от автора

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

Нашими жертвами будут www.skillshare.com/ и animoto.com/. В оба проекта на старте вкладывали по нескольку миллионов долларов. Очень дорого эти проекты стоят и сейчас. Пожалуйста, напишите в комментариях, с какого из них начнем? Или, может быть, предложите что-то другое?

Между делом принимаю поздравления и пожелания в связи с первым хабрапостом.

Рекогносцировка

Рекогносцировка (от лат. recognosco — осматриваю) — в военном деле — осмотр позиций противника в районе предстоящих боевых действий лично командиром (командующим) и офицерами штабов для получения преимущества и принятия решения; в мирное время — при подготовке учений и других действиях. (Википедия)

skillshare.com

Люди создают занятия и курсы занятий, последние проходят модерацию, другие люди подписываются на них, (опционально) имеют возможность заплатить и посещать онлайн-вебинары или оффлайновые занятия.

animoto.com

Люди загружают фотографии, нажимают кнопку «Сделать клево» и получают действительно клевые видеоролики. Вопрос клевости видеоролика очевидно следует рассматривать отдельно, так как он очень важен.

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

Методы

Закон Парето, или принцип Парето, или принцип 20/80 — эмпирическое правило, названное в честь экономиста и социолога Вильфредо Парето, в наиболее общем виде формулируется как «20 % усилий дают 80 % результата, а остальные 80 % усилий — лишь 20 % результата». Может использоваться как базовая установка в анализе факторов эффективности какой-либо деятельности и оптимизации её результатов: правильно выбрав минимум самых важных действий, можно быстро получить значительную часть от планируемого полного результата, при этом дальнейшие улучшения неэффективны и могут быть неоправданны (согласно кривой Парето). (Википедия)

Ищите 90-процентное решение. (из принципов Unix)

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

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

Мы с вами найдем самые ответственные и тонкие места, сделаем работоспособные прототипы (которые, кстати, можно показывать руководителю/начальнику/инвестору), и потом из них соберем цельную систему, которую следующим действием усовершенствуем.

Инструментарий

Нам необходимо:
— спроектировать программы
— написать программы
— протестировать их
— запустить
— сопровождать

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

Работа программиста связана с непрерывным управлением абстракциями. Их нужно придумывать, продумывать, сортировать, сортировать, удалять и восстанавливать, менять местами, расширять и сужать, сортировать… Если вы еще не знакомы с ООП — приготовьтесь к внезапному погружению. Наберите воздуха в легкие, вдохните глубоко…

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

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

Еще один хороший способ балансировать нагрузку на мозг — интерактивно обсуждать действия с коллегами. Гуглите «парное программирование». Кстати, у нас на работе все относительно сложные, объемные или ответственные вещи делаются парами. Это очень удобно — можно обсуждать, и удобно писать код — один пишет, второй отслеживает ошибки и концепцию.

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

Для программирования мы будем использовать
— PHP5 с его долгожданным ООП
— CodeIgniter
— IDE (выбирайте любую, на вкус и на цвет, как говорят)
— nginx и php5-fpm
— mysql (хотя Active Record CodeIgniter позволяет использовать другие БД)
— Ubuntu, ffmpeg и imagemagick (для animoto)

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

Инструментарий тестирования, запуска и сопровождения также обсудим позднее — когда перейдем к этим этапам.

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

Ввиду того, что избранные программы являются веб-приложениями, нам понадобится LAMP. Мне не очень нравится, как ведет себя Apache на десктопе (я тут еще другими делами занимаюсь), не очень хочется возиться с виртуалками, поэтому в качестве веб-сервера используем nginx.

Настройка LAMP

Установим требуемое (hi, Ubuntu!)

sudo apt-get install php5 php5-fpm php5-mysql mysql-server ffmpeg php5-imagick imagemagick phpmyadmin 

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

Ffmpeg и imagemagick пригодятся нам, чтобы создавать видеоролики из фотографий, и сделать их действительно эффектными

После установки создадим директорию для проекта, например /home/user/works/animoto.localhost и добавим виртуальный хост

server {     root /home/user/works/animoto.localhost/www;     index index.html index.php;     error_log  /home/user/works/animoto.localhost/error.log;     charset         utf8;     source_charset  utf8;     server_name animoto.localhost www.animoto.localhost;     location / { 	try_files $uri $uri/ /index.html /index.php; 	}     #error_page 404 /404.html;     location ~ \.php$ { 	fastcgi_pass unix:/var/run/php5-fpm.sock; 	fastcgi_index  index.php; 	fastcgi_param  SCRIPT_FILENAME  /home/user/works/animoto .localhost/www$fastcgi_script_name; 	include fastcgi_params; 	}     location ~ /\.ht { 	deny all; 	}  } 

Здесь мы создаем локальный хост animoto.localhost, и отправляем запросы PHP к PHP, а также запрещаем просмотр .ht* — просто на всякий случай, вдруг эта конфигурация попадет в продакшн.

Добавим в /etc/hosts определение

127.0.0.1	animoto.localhost 

Это позволит иметь доступ к локальному сайту с вашего компьютера.

Создадим файл по адресу /home/user/works/animoto.localhost/www/index.php
с содержанием

<? echo 'Hello world'; 

Запустим PHP и nginx

sudo service nginx start sudo service php5-fpm start 

После этого в браузере попробуем перейти на animoto.localhost

Если получилось — отлично. Если нет — давайте обсудим в комментариях.

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

Продолжение следует

— анализ избранных программ
— разделение и поиск важнейших функций
— реализация основного функционала, разработка и тестирование прототипов
— объединение прототипов в альфа-версию
— пожелания в комментариях

Если где-то что-то сильно не так — пожалуйста, намекните в личку. Спасибо!

ссылка на оригинал статьи http://habrahabr.ru/post/166717/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *