Теория программирования (Основы)


Введение

  Здравствуйте я разработчик программного обеспечения, и просто хочу поделится своим опытом. Это будет интересно как начинающим программистам, так и тем у кого уже есть опыт (может подчеркнете что-то для себя).
  Я не буду писать о платформах разработки программного обеспечения, будет только теория (потому и назвал "Теория программирования"), под словом "проект" будет подразумеваться ваша программа, скрипт и т.д., нет никакой разницы на какой и под какую платформу вы разрабатываете, не будет примеров кода и прочего (возможно просто ссылки на что-то интересное).
  Помните! Это мое личное мнение и на данный момент я считаю именно так, возможно через какое-то время я изменю свою точку зрения. Я буду писать почему нужно делать именно так, в связи с чем решил разбить все это на основные аспекты.
  И так, у вас есть идея, и желание реализовать ее максимально хорошо, а я просто дам вам свой опыт, поехали!

Продумывание

    Вы должны смотреть в будущее и сразу предусмотреть все возможные варианты развития вашего проекта, и то как его будет использовать пользователь. Например: Будет ли проект портативным?, Сколько языков он будет поддерживать?, Будут автоматические обновления?, Будет графический пользовательский интерфейс?, Как будет реализован графический пользовательский интерфейс?, На каких операционных системах будет использоватся ваш проект?, Как будет реализована механика работы проекта? и так далее. Нужно сразу продумать все детали проекта, так как потом, когда он будет готов, вносить в него кардинальные изменения будет тяжело, и это часто влечет за собой кучу ошибок\багов.
  О механике работы проекта. Здесь все может исходить из вашего личного опыта пользования программного обеспечения. Примеры: 
1. Я не люблю диалоги выбора языка интерфейса (при запуске проекта). Зачем? Ведь можно использовать язык операционной системы и дать возможность менять его в проекте опционально.
2. Мне не нравятся проекты которые требуют установки, это просто не практично. Проект тяжело использовать, плюс ко всему процесс инсталляции тоже отнимает время.
3. Не нравятся проекты которые требуют настройки. Их необходимо настраивать и этот процесс отнимает кучу времени. Добавьте к этому еще отсутствие стандартного значения, просто ад. В конечном итоге находится какой-то мануал, ты все настраиваешь как там написано и все работает! Возникает вопрос "почему разработчик не сделал стандартный шаблон, с которым у большинства пользователей все будет работать?"
  Обратите внимание на то как работает браузер Google Chrome (он работает на базе проекта Chromium, так-же на нем работают Opera, Tor и все кому не лень...), при переходе на браузер Google Chrome все дружно забыли о том что такое Adobe Flash Player, а тем более о том что его нужно обновлять, в настройках нет кнопки сохранить, все сохраняется на лету (зашел поставил галку, вышел), его вообще не нужно настраивать, установил и используй по назначению, интерфейс разгружен и простой.

Графический пользовательский интерфейс

  Интерфейс проекта должен быть продуман (даже если это консоль). Это очень важно! Тут дело не в пользователях, которые буду пользоваться вашим проектом, а в удобности и практичности в первую очередь для разработчика проекта. Если вы легко ориентируетесь в своем проекте это отлично, но и пользователь тоже должен хорошо в нем розбираться. Продуманный интерфейс - это интуитивно понятный интерфейс (запомните это!). Если он действительно такой, это сразу снижает количество документации\гайдов\информации о вашем проекте, а это жирный плюс для вас (лично мне не нравится писать документацию по использованию проекта с скриншотами и прочими прелестями). Нужно придерживаться основным правилам при планировании и разработке интерфейса:
1. После запуска проекта, у пользователя сразу должна быть возможность использовать проект по назначению.
2. "Правило 3-х касаний" © Стив Джобс (я к сожалению не смог найти источник). Ваш проект должен выполнить свою основную функцию (а в идеале любую другую) за три касания\клика, или меньше. В вашем проекте очень много опций? - не проблема, просто сделайте шаблоны настроек (как в компьютерных играх при настройке графики), чем проще для простого пользователя тем лучше.
3. Интерфейс должен быть максимально разгружен, минимализм рулит. Опять таки в вашем проекте много всего? как быть? - подавайте информацию порциями, разбейте весь процесс на пару основных этапов. Например: мастер инсталляции программ, отдельное окно для каждого действия, вместо окна с опциями.
Обратите внимание на сайт www.google.com и браузер Google Chrome, при том что компания Google зарабатывает на рекламе, интерфейс сайта и браузера не загружены контентом, нет нечего лишнего.

Локализация

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

Обновления

  Ваш проект должен знать о появлении на свет новой версии, и донести эту информацию до пользователя. Это очень важно, так как пользователь не будет ежедневно проверять выпустили ли вы новую версию проекта. Как минимум нужно чтобы проект выдавал сообщение о новой версии, а в идеале он должен сам полностью обновится до последней версии, как допустим в том-же браузере Google Chrome.

Публикация

  Это самый интересный момент. Очень много споров может быть вокруг этой темы. Первое что приходит в голову "нужно создать свой сайт! с комьюнити и плюшками", и это будет правильный вариант, но стоит помнить что сайт нужно продвигать, делать его популярным и т.д., НО "у нас просто есть идея проекта, желание реализовать проект", тут не интересен вариант залипания со своим сайтом (если вы конечно не шлепаете сайты за 10 минут).
  И так, как публиковать, по пунктам:
1. Создаем электронную почту для обратной связи, конкретно для вашего проекта. Не нужно указывать вашу личную почту (я так не делаю). Нет желания лазить по 10-ти почтовым ящикам? - можно настроить переадресацию с почты проекта на вашу личную почту.
2. Создаем информационную страничку (сайт), есть море бесплатных хостингов, я остановился на Google Сайты т. к. он не отключает сайт через определенный период времени (как это делает uCoz), нет назойливой рекламы, есть встроенный переводчик (очень удобно). Для информационной странички отлично.
3. Место загрузки проекта пользователями это самое интересное. Кто-то настойчиво рекомендует GitHub, я согласен это надежный сервис (очень надежный), но он создан для разработчиков программного обеспечения, и использовать его в качестве места загрузки проекта пользователями это сомнительный вариант, хотя использовать можно. Но я остановился на SourceForge, из преимуществ есть постоянная ссылка на загрузку проекта (ссылка одна, а загружается всегда последняя версия), есть возможность просмотреть статистику загрузок проекта (очень информативная статистика), можно загружать скриншоты, в поиске Google отображается рейтинг вашего проекта, пользователи могут оставлять свои комментарии\отзывы, также они могут подписаться на ваши обновления по электронной почте, есть Wiki и еще много приятных плюшек (ох да чуть не забыл, есть зеленая кнопка "Download"), это отличный вариант. Правда есть и свои минусы, например SourceForge бывает просто не доступен (это может случится с любым сервисом, тем более с бесплатным), это не приятно, поэтому рекомендую обзавестись зеркалом (дополнительная ссылка на загрузку проекта, если что не так с SourceForge), можно использовать тот-же GitHub или что-то попроще, например MegaGoogle Drive, и прочие файловые хранилища.
4. Форум. Создаем тему\ветку на форуме который соответствует тематике проекта, если в проекте предусмотрен английский язык ищем англоязычный форум. Не всегда нужно зацикливаться на одном форуме, если есть форум на котором движения больше, смело создавайте ветку и там.
В итоге получается удобная среда как для вас, так и для пользователей. При выходе новой версии проекта вы добавляете новую версию на SourceForge, при этом вам не нужно редактировать ссылки на загрузку на своем сайте и форумах (конечно можно просто дать общий доступ к папке в облаке, как вариант). Так-же вам не нужно платить за хостинг, есть мощное комьюнити, все выглядит солидно (отдельная почта, отдельный сайт, солидняк!) и главное это не напрягает вас.

Итог

  В итоге вы получите годный проект! Это конечно не все на что стоит обратить внимание, а самое основное, важное. Такой проект сможет обрести популярность во всем мире, его легко скачать, использовать, есть поддержка и куча статистики.
  Если вы дочитали прям до этих строк хочу сказать вам "Спасибо!". 


                                                                                                  С уважением Octanium

Комментарии

  1. это не теория программирования.
    это о разработке конечного продукта. к программированию имеет опосредованное отношение.

    ОтветитьУдалить
    Ответы
    1. Я не хотел привязываться к какому-то языку программирования или платформе. Только теория которую можно применить в любом языке программирования\платформе.
      Спасибо, я учту ваше мнение в будущем.

      Удалить

Отправить комментарий