Как я создаю что-то, когда я буду знать, что пойму его превратно?

Фон

У меня есть персональный проект, который я пытался разработать в течение приблизительно 5 лет. В сущности это - онлайн-игра - веб-приложение. Это не "денежный производитель", просто что-то, что я действительно хочу создать, таким образом находя, что финансирование для найма квалифицированной команды очень маловероятно.

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

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

До сих пор я восстановил бэкенд по крайней мере 11 раз с различными комбинациями PHP, SQL, Ruby, CouchDB, MongoDB, FriendlyORM, NodeJS и т.д. и т.д. Я обычно не становлюсь очень далеким, прежде чем я обнаружу некоторый огромный дефект со своим подходом и запущусь: RPC к REST, реляционному к управляемому документу. Я хорошо знаю, что преждевременная оптимизация является корнем всего зла, но приложение очень зависит от быстро двигающихся, очень динамических данных. УСПОКОИТЕЛЬНЫЙ дизайн API, масштабирование, sharding, кэширование, автор, репликация - у меня нет большого опыта ни с одним из этого, и я не могу ожидать быть удаленно достойным в ближайшее время. Эти вещи требуют лет исследования и опыта.

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

Вопрос

Предположение, что однако я создаю его, архитектура бэкенда, будет неправильным и должно будет быть восстановлено, что лучший способ состоит в том, чтобы возобновить создание "как раз" для продолжения разработки клиентского приложения? Даже если это противно, там способ "бросить вместе" веб-сервис JSON? Ruby с Sinatra и MongoDB? Django? Есть ли некоторый out-o-the-box разработчик веб-сервиса? Нет никакой потребности в веб-платформе полного стека, поскольку нет никакого уровня представления - просто данные. Любой совет значительно ценился бы.

11
задан Franky-D 19 February 2010 в 21:47
поделиться

7 ответов

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

  1. Начните с проектирования высокого уровня.
  2. Определите различные основные части. Потратьте немного качественного времени на шаги № 1 и 2.
  3. Посмотрите, какие готовые компоненты вы можете использовать для быстрой реализации различных частей. Подумайте о том, что впоследствии вы можете использовать эти компоненты для чего-то другого (включая собственное решение).
  4. Пересмотрите #1 и #2
  5. Выберите один или два компонента и начните кодировать рабочий прототип для этих компонентов.
  6. Проделав всю работу, начните снова с шага #1 и посмотрите, что изменилось, чтобы вы могли компенсировать это соответствующим образом.
2
ответ дан 3 December 2019 в 06:20
поделиться

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

0
ответ дан 3 December 2019 в 06:20
поделиться

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

Я думаю, что эта статья от Wired, «научись отпускать» о том, что Duke Nukem навсегда не удалось в конечном итоге получить, объяснит это лучше, чем я.

http://www.wired.com/magazine/2009/12/fail_duke_nukem/

(несмотря на это, это тоже довольно интересное / информативное чтение)

2
ответ дан 3 December 2019 в 06:20
поделиться

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

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

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

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

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

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

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

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

5
ответ дан 3 December 2019 в 06:20
поделиться

Заставьте его работать медленно, сначала с чистым, модульным кодом.

Если код модульный, вы можете заменить слой или два без необходимости ломать все.

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

7
ответ дан 3 December 2019 в 06:20
поделиться

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

3
ответ дан 3 December 2019 в 06:20
поделиться

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

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

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

Затем вернитесь к своему прототипу, построенному по модульному принципу, и исправляйте по одной части за раз.

0
ответ дан 3 December 2019 в 06:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: