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

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

Приложение базы данных фильмов

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

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

Это была задача, над которой я работал на прошлой неделе. Я пытался выполнить эту задачу в течение нескольких недель, но только на прошлой неделе я наконец нашел способ ее выполнить. Я пытался решить эту проблему с разных сторон, от использования простого хука useState до использования Redux для ведения списка для каждого отдельного пользователя. Сложность заключалась в том, чтобы вести отдельный список наблюдения для каждого пользователя, который входил в приложение и выходил из него. Я даже подумал об удалении аутентификации и, таким образом, сделать его простым приложением без персонализации для кого-либо. Но именно тогда я нашел способ, действительно очевидный, Firebase. Тот же инструмент, который помог мне настроить аутентификацию, должен помочь в ведении базы данных для каждого отдельного пользователя. Здесь важно отметить, что я не использую здесь какие-либо серверные технологии, и поэтому я пытался найти решение в области самого React.

Поэтому я посмотрел несколько видеороликов, прочитал статьи о Firebase Firestore, и все заработало именно так, как было задумано. Теперь у приложения была подлинная функция, которую каждый пользователь мог использовать индивидуально, тем самым завершив мой квест по созданию функционального приложения для базы данных фильмов. Я назвал его The CinemaDB (не совсем оригинально, я знаю ;D). Это идеально? Я так не думаю. Я чувствую, что код мог бы быть намного чище. Я также нарушил принцип программирования DRY(не повторяйтесь) в нескольких местах, где я знаю, что могу избежать написания кода, внеся несколько изменений. Но эти недостатки дают мне возможность продолжать учиться, продолжая решать проблемы и создавать функциональные и, что более важно, полезные приложения.

Решение проблем с ДСА

Я решил вернуться к решению проблем в DSA еще раз на этой неделе. Из своего опыта я пришел к выводу, что нерегулярное решение DSA так же хорошо, как и полное отсутствие решения какой-либо проблемы. Поэтому последовательность в решении DSA имеет первостепенное значение. Причина в том, что многие проблемы в DSA взаимосвязаны. Например, большинство задач в связанных списках представляют собой комбинацию обхода, вставки, удаления, реверсирования, быстрого и медленного указателя и т. д. Почти каждую задачу в связанных списках можно разбить на эти задачи и решить. Это означает, что если вы решили все эти проблемы в первые 4 дня и столкнулись с более серьезной проблемой на 5-й день, вы, вероятно, решите ее быстрее благодаря знакомству с концепцией, разработанной в предыдущие дни. Чтобы вернуться к привычке, я решил начать с задач на собеседовании в LeetCode и начал решать по 3–5 задач в день. Будем надеяться, что в ближайшие недели и месяцы я смогу добиться некоторой последовательности.