Шаг 1: Идея

Так как все разработки программного обеспечения начинаются (и часто умирают) как идея. Надеюсь, ради меня и ради этого проекта он переживет свое начало. Так или иначе, вот идея.

Меня часто вдохновляют книги, которые я читаю. Я заядлый читатель, если вам интересно, добавьте меня в GoodReads, и мы сможем поделиться идеями, но недавно меня вдохновила книга «Почему мы спим» Мэтью Уокера, доктора философии. Он обсуждает идею о том, что мы, как общество, непреднамеренно саботируем себя каждый день, не высыпаясь, и что, не получая 8 часов сна, мы, по сути, медленно лишаем сна до такой степени, что живем изо дня в день, как если бы мы не высыпались. спал 24+ часа. Например, если вы спите по 6 часов в сутки в течение 12 дней, к двенадцатому дню у вас будет такой же эффект, как если бы вы бодрствовали в течение 24 часов до этого, но я отвлекся.

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

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

Do

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

Затем я придумал вопросы, на которые хотел бы ответить: если я засну в определенное время (скажем, в 9 вечера), когда будет оптимальное время для пробуждения? Как выглядит цикл сна, вызывающий наибольшую активность в течение дня? Как кофеин влияет на мой сон?

Чувствовать

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

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

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

Предыдущий опыт

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

Подумайте

Вместо того, чтобы прыгать и извлекать данные из Fitbit и начинать играть с ними, я решил, что будет лучше прислушаться к некоторым советам, которые я узнал в колледже, и из другого вдохновляющего выступления, которое я слышал: Как думать как Программист Энди Харриса. В котором он сводит код к двум вещам. Алгоритмы и переменные. И в большинстве случаев дело не в том, что мы не знаем, как решить проблему, а в том, что мы решаем не ту проблему. Как только вы сможете свести свой алгоритм к простым шагам и узнать, каков результат этих шагов, а также где сохранить этот результат, у вас есть программа. Начав раньше, вы, по сути, поспешите и начнете решать не ту проблему. Так что я решил набрать еще немного.

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

  1. Автоматически извлекать журнал каждый день после регистрации сна
  2. Записывайте записи о качестве сна, относящиеся к этому ночному сну.
  3. Журнал сновидений
  4. Эвристический способ регистрации того, насколько я устал в течение дня, с помощью быстрого опроса.
  5. Отслеживание кофеина

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

Do

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

  1. Вытяните данные из Fitbit
  2. Очистка данных
    Это основная часть любого проекта по обработке и анализу данных. Это также то, что мне нравится делать, потому что то, что вы пропускаете/вставляете, повлияет на то, как данные будут отображаться интересным образом.
  3. Анализируйте и визуализируйте данные
    Примечание. Этот шаг будет меняться в зависимости от конечной цели, однако каждый из них станет отдельным алгоритмом.
  4. Создайте информационную панель с визуальным представлением данных
  5. Автоматизируйте процесс
  6. Добавьте больше данных для работы
  7. Итерация

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