Организуем рабочий процесс для максимальной эффективности

Наш читатель, Стенли Винтергрин, поделился с вами советами по организации и оптимизации рабочего процесса при создании приложений.


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

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

1

Рабочее пространство (working place)

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

Примеры:

  • Для разработки приложений под Android я использую AndroidStudio — он включает в себя достаточный функционал и очень удобен (но, к сожалению, только на мощных машинах).
  • Для написания простых приложений на C++ (фриланс для студентов) я посчитал достаточным использования Sublime Text и gcc. Очень нетребовательный функционал. Таким образом, я создал систему, с помощью которой я могу легко писать приложение на моём домашнем компьютере на Windows и без проблем продолжать работу на нетбуке слабой мощности на Debian.
  • Также был опыт в разработке приложения на Unity3D. В данном случае я, конечно, использовал Unity3D, но он на самом деле выполняет лишь часть задач. Например, для редактирования скриптов на C# нужно использовать специальную утилиту. Мне не понравилось предлагаемое решение MonoDevelop, я посчитал его слишком требовательным (с учётом работы на относительно слабой машине) для того, чтобы писать небольшие скрипты. Поэтому для этого проекта я использовал комплекс из Unity3D и Notepad++.

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

Каталогизация (folder)

Теперь не такие важные, но очень полезные приёмы. Итак, под каждый проект нужно создать специальное место для хранения сопутствующих файлов. Внимание, необходимо разделить понятия «файлы проекта» и «сопутствующие файлы». Т.е. это не исходный код, а хранилище ресурсов — всё, что можно уложить в файл. Это должны быть медиафайлы (во многих проектах существует специальные папки под используемые в приложении ресурсы, я говорю о медиафайлах в более широком смысле), сборки проекта в разных версиях, необходимые файлы настроек проекта, сопроводительные документы, необходимые библиотеки и так далее. Суть этой части заключается в создании порядка. Мне часто попадались программисты, которые хранили данные беспорядочно, на рабочих столах, с непонятными названиями, файлы от разных проектов в одном месте, а так же часто теряли их.

Пример:

2

Я являюсь большим фанатом облачных технологий, поэтому для разработки использую Dropbox. Там у меня создана своя собственная и, что важно, удобная для меня иерархия. Хочу сказать, что важно, чтобы у вас всё было разложено по полочкам.

Dropbox имеет очень удобный (по моему мнению) клиент на Android, и я могу получить доступ к файлам проекта везде и почти всегда. Разворачиваясь на новом месте для работы, всё, что мне необходимо — это зайти в хранилище с другого компьютера и через браузер получить доступ сразу ко всем файлам проекта. Конечно, этот способ работает именно в моём случае, т.е. я всегда ношу с собой телефон с мобильным интернетом и работаю только в местах с доступом к Интернету.

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

Контроль версий (version control)

Если вы ещё не используете систему контроля версий, то бегите изучать эту тему. Чем раньше вы начнёте её применять, тем быстрее станете более эффективными. В разработке, конечно, это незаменимый инструмент. Тут нужно сказать, что главное — использовать эту технологию верно и пользоваться удобными инструментами. Таким образом, ваша разработка не будет стоять на месте. Код будет развиваться, а обо всех изменениях будет заботиться система контроля версий. Если у вас есть доступ в Интернет, то вы так же получаете сохранение кода и истории на сервисе, к которому можете получить доступ из любого места, и защищаете себя от потери кода и его порчи.

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

Пример:

Если данные являются файлами кеша для приложения, которое разрабатывается под две платформы (два репозитория), и этот кеш весит 70 Мб, то было бы логичнее как раз эту часть приложения (кеш) передать в какой-нибудь общий ресурс с общим доступом у разработчиков (сервер, облака и т.д.). Думаю, при таком раскладе кеш будет изменяться по воле заказчика, и пусть эти изменения не отслеживаются системой контроля версий. Таким образом, у вас будет два репозитория по 2–5 Мб для кода под каждую платформу и общий ресурс с кешем в 70 Мб, с которого будут брать файлы все, кому это необходимо.

Лично я использую git и сервисы: GitHub для личных проектов, Assembla для работы. А в процессе работы я решил для себя, что более удобный вариант — пользоваться консольной версией, а не встроенными в IDE аналогами. В управлении быстрее, работает с любыми git-репозиториями, и на всех машинах одинаково. Найдите лучший вариант для вашей ситуации и личных предпочтений.

Заметки (notes)

Для упорядочивания мыслей рекомендую использовать записные книжки. Записывайте всю информацию, относящуюся к проекту, которую можно перевести в текст. Создайте систему, с помощью которой всегда будет возможность манипулировать этим. Удобное чтение и запись мыслей по теме конкретной работы очень важны. Однако, легко запутаться в истинном назначении данного кейса. Текстовый документ со списком сценариев unit-тестов с доступом к комментированию и редактированию лучше отнести к файлу, который нужно определить в место с общим доступом для работников (сервер, облака… — folder). А если в голове появилась идея о том, как расположить элементы на экране, тут же записывайте список этих элементов в специально отведённое место в вашей книжке. Тут же вы можете оставить комментарии о каждом элементе. К тому же вам никто не мешает продублировать список unit-тестов из официального документа к себе для удобного чтения. Чем больше мыслей, идей и вспомогательной информации вы будете оставлять у себя в удобном виде с удобным доступом, тем меньше вероятность потери данных. И ещё вы сэкономите себе время на поиск необходимых элементов.

Пример:

Мне в разработке помогает сервис OneNote — облачная записная книжка с отличными десктопной, онлайн и Android версиями. Пользуюсь им для описания элементов и этапов разработки приложений: дизайны, модели данных, локализация, мысли вслух. Установленное приложение на моём телефоне позволяет не терять ход мысли, даже если я в пути или не на работе. Рекомендую дополнительно использовать бумажную записную книжку для тех же целей. Да и на бумаге удобнее создавать зарисовки и делать наброски.

3

Task manager

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

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

Пример применения Todoist:

4

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

Заключение

Эти пять моментов я считаю самыми главными (хотя я сам использую намного больше) и хочу, чтобы мой личный опыт помог вам в применении полезных сервисов для более качественной и быстрой разработки отличных приложений. Итак, группируйте все ваши проекты и всё с ними связанное сразу в понятном и удобном вам виде. Перепробуйте разные способы и выберите свой собственный. Добавьте сюда всё необходимое для вашего удобства. Найдите таймер по типу Toggl. Если вы фанат Pomodoro, приглядитесь к PomoDoneApp, а если вам больше по душе Kanban, то попробуйте Trello. Обязательно общайтесь с другими людьми (или даже сами с собой), создавайте беседы и диалоги: ведите горячие споры в Telegram или начинайте мозговые штурмы в gitter.im. Пользуйтесь сервисами по созданию блок-схем для построения алгоритмов, draw.io —очень хороший пример. Если вы пользуетесь онлайн-сервисами, то группируйте ссылки к сервисам под каждый проект для быстрого доступа. Удачи!