Ярость против машины
Хотелось бы кое-что прояснить: процесс, который я описал, выглядит линейным и прямым. Причина в том, что до сих пор я рассказывал о своих успехах, а не о трудностях и ошибках.
Создание полезного, рабочего интернет-приложения немного похоже на сборку пазла, но с дополнительными трудностями: вы не знаете, какие фрагменты существуют, некоторые фрагменты необходимо создавать самому, а в случае ошибки рушится вся картинка.
На самом деле процесс программирования выглядел так. Когда я приходил к выводу, что понял, как должна работать та или иная часть программы, то писал код, тестировал его — и программа вылетала. Я пытался исправить ошибку. Это иногда получалось, иногда нет, а порой изменения приводили к новым проблемам. Если я заходил в тупик, то искал объяснение ошибки или нужную библиотеку на Stack Overflow или в Google.
В процессе обучения созданное вами приложение чаще не работает, чем работает. Кроме того, вы узнаете много полезного, например что такое контроль версий, позволяющий вернуться к предыдущей, рабочей версии программы.
Помните, я говорил, что до конца не понимаю, для чего нужен git? Оказывается, вот для чего: если вы редактируете файлы и программа вылетает, то найти причину бывает не так просто. В такой ситуации спасением становится возможность отката к предыдущей, рабочей версии. В противном случае есть опасность запаниковать.
На этапе добавления бокового поля мое приложение перестало работать. Я пытался выявить свою ошибку, но ничего не получалось. Я был готов рвать на себе волосы — если бы они у меня были.
Именно тогда я осознал ценность git branch и git merge: они позволяют создавать экспериментальные копии своей программы, а затем вносить изменения. Если копия заработала, вы можете сохранить изменения в оригинале. В случае ошибки вы просто удаляете экспериментальную ветвь, не теряя всей предыдущей работы.
Программирование — сложный процесс, и существует миллион возможностей сделать ошибку. Компьютер ничего не прощает и не выполняет неправильно сформулированные команды. Точно так же легко пропустить какие-нибудь мелочи, что приведет к непредсказуемым результатам. Я долго бился над ошибкой во фрагменте, связанном с сохранением пустых записей в базе данных, которые появлялись в списке страниц.
При каждом просмотре возникали фиктивные страницы, и я никак не мог понять, откуда они берутся. В конечном итоге выявилась ошибка в маршруте «показать все»: я использовал некорректную команду для извлечения записей из базы данных.