Найти тему

Часть IV: И у супергероев бывают слабости

Оглавление
- Всегда пиши код так, как будто человек, который будет его саппортить — психопат-убийца, который знает, где ты живешь.

Пролог

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

Это правда. Даже у супергероев бывают свои слабости, что уж, говорить о нас, смертных. Бэтмен - один из немногих, кто смог одолеть супермена, потому что он знал его уязвимое место. Слабость супермена - это криптонит, а слабость казаха - скриптонит. Из-за этого камня супермен терял все свои способности и становился худшей версией себя. Поэтому и у нас, у каждого есть "ахиллесова пята". Мой криптонит преследует меня по пятам или я осознанно таскаю его с собой в кармане. Всю силу этого камня я почувствовал, когда учился на магистратуре (последний курс). Мне нужно было написать диссертацию на английском около 70 страниц на тему "Анализ органических молекул в космосе". Начинать писать, конечно же, не хотелось, потому что я держал в голове число 70 и этот факт пугал мой мозг. Я делал все, что можно сделать - главное не писать диссертацию. Время шло и дедлайн был не за горами - оставалось две недели. Решил спросить совета у брата (будущего ментора): как быть и как решить эту дилемму. Ответ был прост: нужно разделить задачу на подзадачи и делать их каждый день по плану. Делая мини задания, появится ощущение маленькой победы и твой мозг будет заряжаться энергией, которую ты сможешь использовать для следующих подзадач. Таким образом, ты маленькими шагами придешь к своей цели. Воспользовавшись советом, я разделил свою работу на под-главы и абзацы, и мне показалось, что это вполне возможно сделать и я приступил к написанию своей диссертации. Каждый день я строго следовал своему плану и в конечном итоге, закончил вовремя и сдал работу в день дедлайна. Самое приятное, что профессора и ревьюеры из Германии оценили мою работу на 5. Итог басни - нужно уметь трезво оценивать свои силы, видеть в задаче самое главное и уметь делить ее на подзадачи.

Зачем такая длинная предыстория? Я хотел, чтобы вы поняли всю силу моего криптонита, который застал меня врасплох на этой неделе, когда я начинал писать свое первое приложение (не по гайду). После приложения "myPlaces", который я написал по курсу от Swiftbook.ru (это не реклама), было логично начать писать уже свое собственное приложение. Идей было много, но я остановился на toDoList-е со своими дополнительными фичами. Создавать приложение, следуя инструкциям - это, конечно, хорошо, но нужно учиться писать самому. Первым делом, создал проект, подключил Realm и начал добавлять все фичи и уже начал думать о дизайне. Я хотел одновременно сделать все и сразу, что привело к замыканию и я почувствовал то, что было у меня, когда я не мог начать писать диссертацию. К этому добавляется тот факт, что на учебке все было понятно и логично и что мы готовы к войне. Но оказывается на войне все по-другому. Сидя перед ноутом и смотря на свой проект, решил воспользоваться одной из трех подсказок "Звонок другу". Ментор сказал: "Сделай со своей жизнью что-нибудь". Стоп, эту фразу он говорил еще раньше, а на тот момент, он сказал, что нужно начать с простенькой модели моего приложения. И в этот момент я понял, что наступил на те же грабли. Нужно было менять свой подход.

Сила двух S или принцип поцелуя

Новый подход базировался на KISS принципе. Keep It Short and Simple. Создал новый проект и в Storyboard-е сделал два ViewController-а. На первом прикрепил TextField, DatePicker и Button, а на втором прикрепил TableView и Cell, в котором два Label-а (одно отвечает за название, а другое - за количество дней, другими словами, дедлайн). Решил проверить приложение и запустил его. В итоге, DatePicker отображается как строка, а хотелось, чтобы было колесо. Оказывается, после обновления, DatePicker по умолчанию идет как строка, и нужно в закладке Style в инспекторе поменять на wheels, что в принципе логично. Нужно теперь отправить информацию, которую мы получим от пользователя при помощи TextField и DatePicker - на ум пришел Segue. Прописав нужный код в первой вьюшке и запустив приложение, я убедился, что все работает. Следующей подзадачей было создать такой же проект, но теперь, чтобы первая вьюшка была списком вещей, которые нужно сделать пользователю, и BarButtonItem, чтобы переключиться на вторую вьюшку, которая нужна для добавления новых заметок. Все сделал так же, но в Segue поменял destination на source, чтобы мы могли отправить информацию назад. Но я хотел, чтобы второго ViewController-а не было совсем и вьюшка открывалась в первом Controller-е. Мы знаем, что есть несколько способов доваления View в проект: можно напрямую через Storyboard, можно через xib файл, а можно все сделать через код. Решив добавить View через код, создал новый Cocoa Touch class файл, который будет subclass of UIView. Нужно было закрепить View используя constraints. В Storyboard-е это делается легко и наглядно, когда в коде это выглядит немножко громоздко. Все мы знаем, что пить горячий чай в эту холодную погоду приятно, но пить чай с сахаром приятнее. С этим кодом тоже самое, писать одни и те же строки для объектов это хорошо, но если использовать SnapKit для этого, будет вообще класс. Это тот самый "сахар" для нас, который создает эту красивую обертку. В этот раз чтобы установить фреймворк, я использовал Swift Packages, которая намного легче и понятнее. Следующим шагом будет найти хороший дизайн и начать верстать это кодом. Надеюсь, в следующей статье, я смогу показать уже более-менее готовое приложение. Параллельно начал читать книгу "Грокаем алгоритмы" и просматривать top asked interview questions.

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