Как мне построить что-то, когда я знаю, что я ошибаюсь? - PullRequest
11 голосов
/ 20 февраля 2010

Фон

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

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

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

До сих пор я перестраивал back-end как минимум 11 раз с различными комбинациями PHP, SQL, Ruby, CouchDB, MongoDB, FriendlyORM, NodeJS и т. Д. И т. Д.Обычно я захожу очень далеко, прежде чем обнаруживаю огромный недостаток в своем подходе и начинаю сначала: RPC для REST, относящийся к документу.Я хорошо знаю, что преждевременная оптимизация - это корень всего зла, но приложение очень зависит от быстро движущихся высокодинамичных данных.RESTful API дизайн, масштабирование, сегментирование, кэширование, аутентификация, репликация - у меня нет большого опыта с этим, и я не могу ожидать, что в ближайшее время буду удаленно приличным.Эти вещи требуют многолетнего изучения и опыта.

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

Вопрос

Предполагая, что как бы я его не построил, серверная архитектура будетневерно и будет нуждаться в перестройке. Каков наилучший способ продолжить построение «достаточно» для продолжения разработки клиентского приложения?Даже если это неприятно, есть ли способ «собрать вместе» веб-сервис JSON?Рубин с Синатрой и МонгоДБ?Django?Есть ли какой-нибудь из готовых веб-сервисов?Нет необходимости в полноценном веб-фреймворке, так как нет уровня представления - только данные.Любой совет будет принята с благодарностью.

Ответы [ 7 ]

7 голосов
/ 20 февраля 2010

Сначала сделайте это медленно, с чистым модульным кодом.

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

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

5 голосов
/ 20 февраля 2010

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

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

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

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

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

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

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

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

3 голосов
/ 20 февраля 2010

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

2 голосов
/ 20 февраля 2010

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

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

(это также довольно забавное / информативное чтение)

2 голосов
/ 20 февраля 2010

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

  1. Начните с дизайна высокого уровня.
  2. Определите различные основные составляющие. Потратьте некоторое время для качественных шагов 1 и 2.
  3. Посмотрите, какие готовые компоненты вы можете использовать для быстрого внедрения различных компонентов. Учтите, что позже вы можете разорвать эти компоненты для чего-то другого (включая собственное решение).
  4. Revisit # 1 & # 2
  5. Выберите кусок или две и начните кодировать рабочий прототип для участвующих частей.
  6. После выполнения работы по ногам, начните снова с шага # 1 и посмотрите, что изменилось, чтобы вы могли соответственно компенсировать.
0 голосов
/ 21 февраля 2010

Я считаю, что есть только один способ завершить личный проект.

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

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

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

0 голосов
/ 21 февраля 2010

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

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