Елена Булыгина предлагает Вам запомнить сайт «Ленусик»
Вы хотите запомнить сайт «Ленусик»?
Да Нет
×
Прогноз погоды

Основная статья: Swift

«Шесть сезонов „Игры престолов“ за две недели на работе...»

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

Эта работа мне не очень нравилась, поскольку я был занят только одну половину дня, а вторую — предоставлен самому себе. «Свободного» времени было столько, что я просмотрел шесть сезонов «Игры престолов» всего за пару недель — и не дома, а на работе.

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

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

Программирование — то, что доктор прописал

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

Уговорил и меня попробовать. Правда, я решил оценить возможности Java — прошёл сначала короткое онлайн-обучение по этому языку. После этого решил проработать вопрос серьёзнее: поискал в сети курсы и нашёл GeekBrains. Помню, понравилось то, что они связаны с Mail.Ru Group, поэтому остановился на этом варианте.

Выбрал iOS-разработку. Я большой поклонник продукции Apple и думаю, что её мобильные устройства будут востребованы ещё долго. А значит, и на специалистов будет спрос. Apple — компания, которая двигает технологии вперёд. Конечно, уже не так, как при Джобсе, но всё же она находится на переднем крае hi-tech.

Этап обучения 

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

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

Ещё один нюанс: уже заканчивая карьеру менеджера, я делал приложение для работодателя. Это был калькулятор стоимости литра топлива на базе в Бишкеке с учётом всех издержек при покупке в разных местах. Например, компании предлагают купить 92-й бензин на границе Киргизии и России по 400 долларов за тонну. Мы эту сумму забиваем в калькулятор и видим результат: литр этого бензина на нашей базе будет стоить 30 сом (местная валюта). В то же время мы знаем, что прямо сейчас можем купить в Бишкеке рядом с базой такое же топливо, а его финальная стоимость будет 25 сом за литр. Так можно быстро сравнивать варианты и принимать решения.

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

Так я применил свой опыт на практике — и это пригодилось впоследствии.

Трудоустройство

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

Несколько раз мне отказали — ведь в резюме я честно писал, что опыта работы нет. Но после очередного собеседования HR посоветовала его всё же указать — она узнала, что на предыдущем рабочем месте я разрабатывал приложение.

Это сработало: на собеседования меня стали приглашать гораздо чаще. В итоге я устроился в «Альфа-Банк» разработчиком. Возможно, помогло и то, что на курсах мы изучали вопросы, которые обычно задают на собеседованиях, и мои ответы понравились интервьюеру.

Что касается работы, то сначала меня оценили как «начинающего middle», и эти было очень неожиданно. Со временем я дорос до старшего разработчика.

Доходы, дорога на работу и другие нюансы

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

На дорогу до офиса трачу примерно столько же времени, но зато появилось много других плюсов. Это корпоративные «плюшки» и бонусы, ДМС, фитнес. Удобный и просторный офис, а также возможность работать удалённо — этой зимой попробую из Испании. Компания оплачивает поездки на конференции. Ещё «Альфа-Банк» сейчас развивает мерч-направление, так что как сотрудник я всегда могу купить свитшот с хорошей скидкой :)

Свободного времени стало гораздо меньше — я реально занят работой, причём такой, которая приносит удовольствие мне и пользу компании. Это имеет для меня большое значение.

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

Планы на будущее

Мне хочется двигаться дальше, совершенствоваться как разработчику. Для этого планирую изучить Ruby и Go. Причём не только для себя, но и в интересах компании — есть несколько проектов, где нужны эти технологии. Учиться на работе сейчас уже нет времени, но не теряю надежды обязательно освоить всё, что запланировал.

Хочу стать тимлидом и делаю всё для этого — такой план на ближайшее будущее. В долгосрочной перспективе хочу начать бизнес в сфере разработки: может, открыть собственную студию и сфокусироваться на мобильных приложениях.

Советы начинающим

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

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

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

Просто делать свою работу, если она нравится, и верить в успех. В большинстве случаев именно так всё и получается.

Хотите узнать больше о выпускниках факультета iOS-разработки и других факультетов программирования GeekBrains? Вот их истории:

Пройти обучение

20 дек 19, 11:46
0 0
Статистика 1
Показы: 1 Охват: 0 Прочтений: 0

«Сходил на два-три собеседования и нашёл работу»

Университет готовил Евгения Кириллова к градообразующему химзаводу Нижнекамска, но наш герой спустя год в Geek University стал iOS-разработчиком на удалёнке. Теперь он делится советами и вдохновением!

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

Вид на Нижнекамск со стороны Елабуги

На заводе я проработал немного. Мне не понравилось, и я устроился в строительную фирму. Там я, конечно, сидел за компьютером, но к программированию моя деятельность никак не относилась — я вёл документацию. Заниматься этим всю жизнь не хотел, а вот разработчиком мечтал стать, ещё когда школу заканчивал. 

Почему iOS

Незадолго до поступления на факультет iOS-разработки я поменял телефон. У меня была Nokia Lumia на Windows, а потом я купил iPhone — мне в нём всё так понравилось, что появилась симпатия к Apple. Затем на работе вместо компьютера с Windows поставили iMac, и тут опять всё оказалось очень здорово. Экосистема Apple впечатлила! Потом я открыл для себя язык программирования Swift. Так постепенно из разных предпосылок сформировалось желание стать iOS-разработчиком. И как раз GeekBrains подвернулся очень удачно. Я долго думал и всё-таки решился, когда появилась не просто профессия, а факультет.

О трудностях и мотивации

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

Процесс обучения GeekBrains был для меня в новинку. В институте преподаватели дают студентам всё то, что им нужно, чтобы выполнить задание и сдать экзамен: берёшь книгу и конспекты, готовишься, и всё в порядке. Здесь же нужно было очень много информации самим искать в интернете. Это как раз то, что на работе теперь постоянно происходит. 

Конечно, один из аспектов, который меня привлекал в будущей работе — значительное увеличение зарплаты. Ну и засиживался я до утра потому, что мне интересно программирование. Оно настолько увлекало, что я не замечал, как летит время. Я даже не зевал и не пил кофе, чтобы не воткнуться головой в клавиатуру. Я просто сидел и решал поставленные задачи!

Трудоустройство и ценность GeekBrains

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

Начал я ходить по собеседованиям. Для меня это всегда эмоциональный момент. По итогам либо воодушевление чувствуется, либо сильная подавленность. И тут важно не падать духом, искать поддержки, хладнокровно во всём разбираться. Я после неудачных собеседований писал в нашу группу в Telegram о том, какие вопросы задавали. Сообщество всегда помогало и заряжало мотивацией!

Работу нашёл быстро, сходил всего на два или три собеседования. Третья четверть у нас заканчивалась с 2018-м календарным годом, как раз тогда я договорился с работодателем. И в первый день 2019 года подписал трудовой договор.

Устроился тогда в компанию «Технократия», которая занимается аутсорсом в сфере IT. Съездил как-то раз к ним на митап в Казань. Меня, кстати, на мероприятие позвал одногруппник, который там тогда жил. А потом, когда я уже решил, что пора трудоустраиваться, то к ним и обратился. Они узнали, что я был на их митапе, это их обрадовало, и в итоге меня взяли.

Зимний отдых «технократов», тут есть и я :)

В «Технократии» я был чуть ли не единственным удалённым сотрудником, что оказалось не совсем удобно. А переезжать в Казань я не хотел. Поэтому через четыре месяца я без особых усилий перешёл в компанию Work-zilla, где все на удалёнке — сотрудники распределены и по России, и по другим странам. До сих пор работаю здесь!

Честно скажу, что обучение на факультете iOS не то что помогло в трудоустройстве, оно стало определяющим фактором. В нижнекамском институте мы изучали технологии и языки, которые уже не используются. Разве что совсем немного C++. Знания оттуда мне если и помогли, то только на время подготовительных курсов, которые длились месяц. А всё остальное — это GeekBrains и то, что я сам где-то изучал. Но GB — 90%, если не больше.

Из программы пригодилось вообще всё. Но наиболее полезным и интересным мне показалось содержание третьей четверти, в которой был курс «Профессиональное программирование». Там рассматривались вопросы, которые в первую очередь задают на собеседованиях. Если раньше нас учили просто написать программу как-нибудь, то здесь — делать это правильно, с применением лучших практик, чтобы код хорошо поддерживался. Очень часто на собеседованиях спрашивают про SOLID, и как раз там мы проходили эти принципы. Действительно всё пригодилось! Был даже курс, который сначала казался скучным, а потом в работе я возвращался к нашим методичкам и применял те знания. 

И насчёт зарплаты: GeekBrains, когда указывал её размер, не обманул! :)

Как выглядит мой рабочий день

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

Мой кабинет, обустроенный на балконе

Начало и конец рабочего дня не регламентированы, есть лишь рекомендация, чтоб пересечения времени с другими сотрудниками было как можно больше. Я начинаю свой день в 8 или даже немного пораньше. Отвожу детей в садик, прихожу домой и начинаю работать. Заканчиваю в 17, так как опять нужно идти в садик :)

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

Чтобы мы не только работали, но и общались, друг друга знали, у нас организованы клубы. Например, есть книжный клуб: мы выбираем книгу, читаем её, а потом собираемся в Skype и обсуждаем. Время таких клубов тоже считается рабочим.

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

Пара советов абитуриентам и студентам

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

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

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

Не ограничивайтесь учёбой в GeekBrains — пользуйтесь другими ресурсами. Но выбирайте их тщательно. Например, я раньше следил за множеством источников, но потом обнаружил, что они часто публикуют статьи людей, которые перефразируют сказанное Apple. Компания каждый год проводит конференцию для разработчиков WWDC. Там показывают и рассказывают, что есть нового в их среде разработки, технологиях. Если есть хотя бы среднее знание английского, то очень рекомендую следить. Можно смотреть и читать на их сайте. Можно в приложении для iOS или Apple TV. 

Можно почитать перевод учебника Apple. Но из-за частых обновлений я всё же рекомендую его в оригинале. Советую ещё интересный блог про язык Swift — Swift by Sundell. И, конечно, тематические разделы Хабра, Medium. Рекомендую также подкаст «Подлодка» — еженедельное аудиошоу про IT и всё, что с ним связано.

А вот несколько полезных Telegram-каналов, на которые я успел подписаться:

Чуть не забыл совет для абитуриентов — поступайте под Новый год, я так большую скидку получил.

О важности непрерывного обучения и немного о планах

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

Я сейчас поднимаю фундаментальные знания, которые пригодятся в любой области профессии. Насколько мне известно, когда программист устраивается, например, в Google, его там не считают разработчиком сайтов или специалистом по какому-то языку. Это просто инженеры, которые могут делать по большому счёту всё. Не важно, на каком языке ты пишешь, — если у тебя есть фундаментальные знания, то ты новый язык изучишь за неделю и будешь делать на нём то, что требуется.

Если заглядывать дальше, лет на 5–10, то я не хочу ограничиваться iOS. Сейчас на острие прогресса машинное обучение, было бы здорово в эту область заглянуть — и, возможно, стать в ней специалистом. Сейчас эти профессионалы как раз самые востребованные и высокооплачиваемые, там интересные вещи происходят. И технологии машинного обучения применяются всё больше: хоть в самоуправляемых машинах, хоть в поисковой выдаче. Может, даже когда-нибудь получится сделать робота, который будет ходить по Марсу и сам всё делать, а не ждать команд с Земли.

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

Пока предпочтений в этом направлении нет — просто хочется делать то, что принесёт как можно большую пользу людям на нашей планете. Что-то масштабное — как SpaceX, например. Поэтому и подтягиваю фундаментальные знания. Читаю книгу «Совершенный код» — она очень большая, её ещё называют библией программиста. Хочу прочитать «Приёмы объектно-ориентированного проектирования. Паттерны проектирования» от «Банды четырёх», а также «Алгоритмы. Построение и анализ», авторы — Томас Х. Кормен, Чарльз И. Лейзерсон. Пожалуй, это мой заключительный совет — на случай, если кому-нибудь тоже хочется стать универсальным солдатом в программировании.

Советуем прислушаться к совету Евгения о поступлении под Новый Год — с 1 декабре вас ждут ещё большие скидки на все наши учебные программы!

Пройти обучение

29 ноя 19, 12:45
0 0
Статистика 1
Показы: 1 Охват: 0 Прочтений: 0

12 вопросов об iOS-разработке: интервью с деканом

На вопросы отвечает декан факультета iOS-разработки Андрей Антропов.

— Андрей, приветствую! Сколько вы уже в iOS-разработке?

— Здравствуйте. В iOS-разработке я три года. Перешел из бэкенд-сферы и до сих пор не жалею: получаю сплошное удовольствие от связки Swift-iOS. Успел поработать и фрилансером, и в команде. Сейчас разрабатываю приложения в замечательной студии Morizo-Digital.

— Чем вас привлекла сфера iOS? И какие она предлагает пути развития? Особенно интересны самые перспективные, на ваш взгляд, направления iOS-разработки.

— Когда я переходил в iOS, ориентировался на цветущие и довольные лица друзей — они уже давно занимались разработкой под эту ОС. Теперь же я могу сказать, что их положительные отзывы не были преувеличенными. Сфера у нас одновременно интересная (на передовом рубеже развития техники), высокооплачиваемая, и что самое удивительное — хороших специалистов в ней до сих пор не хватает.

Основной путь развития очевиден — создание мобильных приложений для iPhone и iPad. Но в последнее время открываются и другие возможности.

  • Разработка приложений для умных часов (watchOS), которые все плотнее входят в нашу жизнь.
  • Серверная Swift-разработка. Еще пару лет назад она была причудой энтузиастов, а сейчас вовлекает все больше людей. Я говорю не только о фреймворках Vapor, Kitura, но и о системной библиотеке SwiftNIO от Apple, которая позволяет использовать вышеперечисленные библиотеки в серверных решениях. Появление SwiftNIO показывает, что Apple заинтересована развивать серверное Linux-направление.
  • MacOS-разработка. Она все ближе и доступнее с выходом Marzipan — фреймворка, который позволит создавать macOS-приложения при помощи основной iOS-библиотеки UIKit. Знания, полученные при изучении iOS, становятся еще универсальнее.
  • Всеми любимая разработка игр. Их можно создавать не только при помощи Unity (привет факультету разработки игр), но и посредством встроенных системных инструментов SpriteKit и SceneKit.
  • Многое другое. Что говорить, если уже сейчас можно запускать Swift на Raspberry Pi и создавать умные устройства, управляемые с телефона.

Конкретно в iOS-разработке наибольший ажиотаж за последний год — вокруг приложений, использующих машинное обучение (ML) и дополненную реальность (AR).

Для обеих этих сфер Apple создала очень удобные системные библиотеки MLKit и ARKit соответственно. Они позволяют интегрировать последние достижения ML и AR при помощи нескольких строк кода.

В дальнейшем предложение будет диктовать спрос: ждем заявок от интернет-магазинов на AR-примерочные или, например, анализ и обработку отзывов средствами Machine Learning.

— Что интересного сейчас происходит с самим языком Swift — как он развивается и меняется в последние несколько лет?

— Swift очень вырос, окреп за последние годы и де-факто стал основным языком iOS-разработки. Думаю, не сильно ошибусь, если скажу, что 95 % новых iOS-приложений создаются на Swift. Кроме того, как я уже сказал, продолжается экспансия языка Swift на платформу Linux.

Реализованный в 2014 году Swift 4.2 LSP (Language Server Protocol) позволяет удобно работать с языком не только в заточенной под macOS среде Xcode, но и в других IDE, которые можно запускать и на Linux. Например, в Visual Studio Code. Количество системных приложений, которые Apple переписали с Objective-C на Swift, в iOS версий 10, 11 и 12 растет экспоненциально.

— Чтобы начать писать для iOS, нужно иметь Apple-устройство под рукой. Каков минимальный набор начинающего разработчика? Я слышала, надо еще платить какие-то отчисления...

— К сожалению, входной барьер в iOS-разработку высок, но это связано со стоимостью оборудования. Для начала вам потребуется MacBook, желательно не очень древней модели. На него вы установите среду разработки Xcode, после чего сможете начать писать первую программу. Больше на старте ничего платить не придется: достаточно бесплатного сертификата, привязанного к вашему Apple ID.

А вот чтобы загрузить свое приложение в магазин, понадобится оплатить distribution-лицензию. Она стоит 99 $ в год, но обычно эти деньги вносит не разработчик, а заказчик приложения.

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

— iOS-разработка — это не только Swift, но и Objective-C. Для каких задач предпочтительнее каждый из этих языков? И зачем студенты факультета еще учат основы C?

— Надо понимать, что Objective-C долгие годы был единственным языком разработки для macOS и iOS. За это время программисты написали на нем множество библиотек и модулей, которые до сих пор повсеместно используются, и заменить их в один миг нельзя. Да и, скорее всего, не нужно. Так что Swift и Obj-C — это спайка двух родственных технологий.

Да, сейчас Swift вышел на уровень, когда вы можете писать приложения, не зная Obj-C. О существовании последнего вы можете даже не подозревать. Но для полного понимания системных процессов знание Obj-C очень полезно. А ведь мы хотим, чтобы подход студентов к разработке был глубоким.

Кроме того, спрос на программистов Obj-C до сих пор высок. Особенно в компаниях с богатой историей разработки и массой так называемого legacy-кода, который нужно поддерживать и оптимизировать.

Если мы копнем еще глубже, то увидим, что некоторые iOS-проекты требуют библиотек на C/C++. В отдельных случаях это позволяет достичь большого прироста производительности. Чтобы не ходить далеко за примером: на C/C++ реализована популярная библиотека Realm для хранения данных в мобильных приложениях.

Поэтому мы считаем, что знание основ языка С (например, указателей и memory layout) сегодня пригодится любому разработчику.

— Главный вопрос, который я задаю всем деканам: какие проекты делают ваши студенты?

— Приложения для работы с VK, для интернет-магазина и системы поиска билетов. Полученного в итоге опыта оказывается достаточно для трудоустройства. Многие наши выпускники работают в крупных компаниях, таких как Сбербанк, «Мамба», «Везёт».

— Что можно рассказать о факультативах от партнеров?

— Факультативы — это видеоуроки и вебинары от экспертов, которые обучают студентов продвинутым технологиям. Например, в прошлом году мы записали факультатив по Core Data от «Тинькофф Банка». Сейчас записываем факультатив по архитектурам приложений со старшим разработчиком браузера Mail.ru Group. Также готовим факультатив «Реактивное программирование» от AGIMA.

— Вы начали писать для iOS, уже имея опыт в Python. Был ли этот переход легким и насколько отличается процесс изучения этих языков?

— Кривая обучения у обоих языков довольно пологая — они очень дружелюбны к новичкам. Это здорово, ведь программирование должно привлекать, а не отталкивать. Безусловно, если вы знаете один из популярных языков, будь то С/C++, Java, Python, Go или Ruby — освоить Swift вам гораздо легче, чем тому, что учит его с нуля. Все перечисленные языки реализуют объектно-ориентированный подход, а значит у них много общего.

— В обращении к студентам вы упомянули о сходстве Swift и Python в плане интуитивной семантики. А было что-то, что поначалу удивило в Swift?

— Меня очень удивила легкость, с которой в Swift мы можем отойти от ООП-парадигмы в сторону функциональной.

Как и многим техническим специалистам, в университете нам преподавали Lisp и Prolog. С тех пор к функциональному программированию я относился очень настороженно и поначалу сторонился функционального подхода в Swift. Но со временем понял, что FP на Swift и Lisp — это земля и небо, а работа с математическими вычислениями и функциями может быть лаконичной, логичной и приятной.

— Ваша основная работа в Morizo-Digital тоже связана с iOS-разработкой?

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

— По вашему опыту, какие темы в Swift для студентов — самые трудные?

— Swift богат возможностями: есть и дженерики, и протоколы, и ассоциативные типы, которые на самом деле являются дженериками для протоколов, а есть еще и расширения протоколов. В работе с протоколами и расширениями протоколов компилятор может применять статическую либо динамическую отправку методов — у них разная скорость выполнения. Наша же главная задача — оптимизировать код правильно. Когда мы пытаемся сочетать продвинутые техники, чтобы получить суперпродвинутую, — не грех и запутаться. Не знаю, как студенты, а я чуть не сбился, пока писал ответ на этот вопрос.

Если вам интересно, о чем я, можете посмотреть на opaque result types, которые появятся в Swift 5.1. Увидите, какие проблемы они решат.

— Какие материалы вы рекомендуете ученикам в дополнение к занятиям и методичкам?

— Я советую черпать знания изо всех проверенных источников. Условно их можно разделить на три типа:

1. Блоги, статьи, подкасты.

  • Обновленный блог Мэтта — автора популярнейших библиотек AFNetworking/Alamofire. Здесь можно почитать думы опытного программиста об iOS-делах насущных. Сложность материала: высокая.
  • Блог Джона Санделла — большого iOS-энтузиаста и участника всех возможных конференций. Он написал больше 100 статей о самых разных аспектах разработки и жизни программиста. Сложность материала: умеренная.
  • Шон Аллен — программист, который интересен искренностью и открытостью, с которой он рассказывает сообществу о своей работе. По понедельникам он делится с аудиторией новостями Swift.
  • Flawless App Stories — блог на Medium с подборкой статей по актуальным проблемам разработки от разных авторов. Замечателен тем, что позволяет взглянуть на процесс глазами сотен людей. Сложность материалов: очень разная.
  • Антуан Ван дер Ли — голландец, который в своем блоге сочетает множество тем: от разбора основ программирования до проблем выгорания и личности программиста.
  • iOS Dev Weekly — подборка самых актуальных новостей мира Swift. Уже несколько лет выходит каждую пятницу.
  • iOS Goodies — еще одна подборка новостей и обучающих статей, только выходит по вторникам.

2. Обучающие сайты.

  • RayWendelich — сайт №1 с обучающими материалами по iOS. Здесь много статей, видеоуроков и абсолютно замечательных книг, но в основном, конечно, платных.
  • ObjC.io — аналог предыдущего сайта, но с более глубокой академической подачей материала. Это для философов от Swift.
  • HackingWithSwift — сайт Ивана Урганта от Swift, Пола Хадсона (Paul Hudson) — мастера презентаций, Adobe After Effects и заготовленных шуток-каламбуров. В отличие от первых двух сайтов, здесь полно бесплатных статей и видео. Есть даже бесплатная обучающая программа.
  • Pointfree.co — мой любимый сайт, где двое дядек рассуждают о функциональном подходе в Swift. Их увлеченные лица как бы намекают, что они с удовольствием дискутировали бы и бесплатно. Но, к сожалению, для просмотра большинства видео нужна платная подписка.

3. Конференции разработчиков (записи выступлений, скорее всего, доступны на YouTube).

Русскоязычные:

Англоязычные:

И конечно, главное событие года для каждого iOS-программиста — конференция WWDC от Apple.

— Спасибо! Андрей, будем ждать вопросов от желающих изучать Swift и iOS-разработку. :)

Пройти обучение

4 июн 19, 13:04
0 0
Статистика 1
Показы: 1 Охват: 0 Прочтений: 0

Лучшие приложения для macOS на 2019 год. Часть 1

 Публикуем его в двух частях: первая — о программах для организации интерфейса и продуктивности, вторая — про развлечения и соцсети, безопасность и память.

Хотите извлечь максимум пользы из системы macOS? Мы позаботились об этом. В App Store есть сотни тысяч отличных приложений, совместимых с macOS, не говоря уже о тысячах других программ, разбросанных по интернету. Мы собрали список из 28 популярных приложений — вообще таких много, поэтому мы сократили перечень до тех, что будут полезны среднестатистическому пользователю.

Интерфейс

Alfred 3 (бесплатно)

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

Bartender 3 (15 баксов)

Это приложение для тех, кто использует слишком много приложений. Bartender — хитрый инструмент, который разработан с учетом особенностей системы. Он помогает систематизировать интерфейс: вы можете выбрать, какие приложения появятся в строке меню, и изменить их расположение как угодно. Еще есть поиск/навигация по приложениям в меню и возможность переместить/скрыть их в дополнительную вкладку. В последнюю версию добавили навигацию с помощью клавиатуры. А еще можно четыре недели пользоваться бесплатной пробной подпиской.

Amphetamine (бесплатно)

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

Dropzone 3 (10 баксов)

После установки Dropzone кажется неотъемлемой частью системы. Программа работает как инструмент быстрого доступа: мгновенно копирует и перемещает файлы, запускает приложения, шерит посты в Facebook и Flickr. А еще можно загружать файлы по FTP и Amazon S3 и сокращать ссылки с помощью Google URL Shortener. Все это скрывается за миниатюрной иконкой в строке меню.

Google Chrome (бесплатно)

Не нуждается в представлениях. К сожалению, Safari не может похвастаться таким же интуитивным управлением и удобством. Chrome — один из самых быстрых браузеров для десктопа, который на всех устройствах с одним аккаунтом поддерживает автоматическую синхронизацию закладок, открытых вкладок, истории поиска. Еще его плюсы — настраиваемость и мгновенный поиск.

Magnet (75 ₽)

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

Unclutter (1410 ₽)

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

После обновления появились темная тема (хотя в macOS Mojave и так есть дефолтный ночной режим) и перетаскивание окон на рабочем столе поверх других. Файлы и заметки автоматически синхронизируются между устройствами через Dropbox.

Продуктивность

Evernote (бесплатно)

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

Evernote предлагает бесплатную версию с базовыми функциями, до 60 МБ загрузки файлов в месяц и синхронизацию с двумя устройствами. Если вы привыкли брать от инструментов все, минимальной функциональности не хватит — премиум-версия стоит 35 $ в год.

Day One (бесплатно)

Вести личный дневник — старая традиция: спросите у Бенджамина Франклина, который десятилетиями писал автобиографию. Day one — это цифровой компаньон для тех, кто хочет запечатлеть моменты своей жизни. Кроме текста, можно добавлять в дневник фотографии, напоминания и теги, которые помогают организовать работу. Главный плюс приложения — защита паролем не дает возможности любопытным глазам подсмотреть ваши записи.

Приложение с базовыми функциями и ограниченным количеством записей бесплатное. Для доступа ко всем возможностям и обновлениям есть премиум-подписка за 35 $ в год.

Things 3 (3790 ₽)

Things 3 — отличное приложение для отслеживания задач и управления списком дел. После полного обновления дизайна оно стало еще полезнее: теперь можно легко синхронизировать списки со стандартным «Календарем» на macOS. Вы можете добавить описания к задачам, чек-листы, предстоящие задания или вечерние планы, автоматические напоминания и много чего еще. Если вы не против инвестировать в хорошее приложение для управления задачами, это того стоит. А если не уверены, можно протестировать бесплатную пробную версию.

Hazel 4 (32 $)

Hazel — приложение для сложной организации: вы настраиваете собственные правила распознавания, сортировки и перемещения файлов и загрузок. Это помогает удобно управлять файлами — сортировать по типу, автоматически применять имена и теги. Или назначать особые наборы правил каждому файлу, папке и загрузке на компьютере.

Приложение отлично подходит для ведения финансов. Будьте готовы, что понадобится время для установки всех правил управления файлами.

Fantastical 2 (3790 ₽)

Fantastical 2 — единственное приложение для работы с календарями, которое вам понадобится. Если вы не против потратить на него 50 долларов, конечно. Высокая цена, но приложение дает доступ к мощному набору инструментов. А полноэкранное окно календаря настолько же красивое, насколько практичное. Отличительная черта Fantastical 2 — удобные напоминания в календаре: просто напишите «Ужин с Алексеем в четверг в 19:30», проверяйте этот пункт в расписании и ждите напоминания.

Pixelmator (2290 ₽)

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

Pocket (бесплатно)

Как следует из названия, Pocket (карман) — это инструмент, который собирает для вас статьи, видео и сайты для просмотра в будущем. Он объединяет контент в простой в использовании интерфейс, который доступен офлайн.

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

PDF Expert (5590 ₽)

Работа с PDF-файлами — вынужденная рутина для тех, кто имеет дело с текстами, и PDF Expert немного облегчает эту задачу. Минималистичное программное обеспечение помогает заполнять формы и объединять PDF-файлы с помощью множества инструментов для редактирования, комментирования и подписи файлов на лету. Программа совместима с функциями непрерывной работы на устройствах Apple, поэтому вы можете приступить к задаче на ноутбуке, перейти на смартфон и не бояться потерять документ.

Reeder 3 (бесплатно)

Google Reader, может, и не работает, но хороший RSS-ридер — все еще полезная штука. Reeder 3 — один из лучших. Десктопное приложение с шикарным внешним видом, который идеально дополняет полупрозрачные панели macOS, поддерживает режим частного просмотра и сопрягается с большинством RSS-агрегаторов — Feedly, Feedbin, Fever. Темы, управление жестами и другие настройки также входят в стандартный набор функций.

Wunderlist (бесплатно)

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

Пройти обучение

23 апр 19, 15:56
0 0
Статистика 1
Показы: 1 Охват: 0 Прочтений: 0

Почему iOS-приложения на Swift 5 станут легче и быстрее

Swift существует, чтобы упрощать создание софта для устройств Apple. Тем удивительнее, что до сих пор iOS и другие «яблочные» операционные системы не имели библиотек Swift в своем составе. Стандартные функции языка разработчику приходилось включать в приложение. Пользователь дольше скачивал программу и тратил на нее больше дискового пространства. Написанная на Swift 3 программа не работала с откомпилированными модулями Swift 4. Это называют отсутствием обратной совместимости. Мелочь, а неприятно.

Стандартные библиотеки Swift не были «родными» для ОС — она воспринимала их как файлы пользователя и не спешила подгружать при запуске программ. Это влияло на скорость загрузки софта. Загрузка динамических библиотек Swift занимала 95 % времени от запуска приложения до начала выполнения кода.

В новой версии языка Apple устранила недочеты, чтобы разработчикам было проще оптимизировать приложения.

Swift 5 обеспечивает бинарную совместимость. Это значит, что написанные на нем программы смогут без перекомпиляции работать с будущими версиями языка и в последующих релизах ОС от Apple. Кроме того, больше не нужно включать в программу стандартные функции Swift — они будут храниться в системе.

Сейчас ждут релиза свежие версии систем для мобильных устройств, телевизоров и часов: iOS 12.2, macOS 10.14.4, tvOS 12.2 и watchOS 5.2 — пока они на стадии бета-версий. Когда они выйдут, пользователи откроют App Store и обнаружат, что написанные на Swift 5 приложения весят меньше. А еще программы начнут быстрее запускаться, потому что библиотеки в составе ОС будут кешироваться в памяти, чтобы приложения обращались к ним мгновенно.

Apple обещает, что старые проблемы исчезнут в одночасье — по одному обновлению!

Будут улучшения ощутимы или это реклама?

Чтобы внести ясность, вы можете скачать из App Store интересные вам приложения и посмотреть, сколько весят Swift-библиотеки к ним. Бразильский разработчик Гильерме Рамбо так и сделал. Вот какие результаты он получил:

  • Twitter-клиент Chirp для Apple Watch весит 29 Мб, из которых 11,6 Мб — стандартные библиотеки Swift. После обновления до Swift 5 размер приложения уменьшится на 30 %, то есть оно будет весить менее 20 Мб. Результат впечатляющий, но он относится к библиотекам для watchOS. Как дела в iOS? Следующие приложения проходили проверку на iPhone XS Max.
  • Инженерный калькулятор PСalc при весе 86,8 Мб включает 7,5 Мб стандартных библиотек. С переходом на Swift 5 размер приложения уменьшится на 9 % — до 80 Мб.
  • Apollo for Reddit занимает 35,7 Мб, в том числе 7,5 Мб Swift-библиотек. Значит, в iOS 12.2 вес приложения не превысит 30 Мб, то есть сократится примерно на 20 %.

Точный объем дискового пространства, который можно будет сэкономить с переходом на пятый Swift, зависит от устройства.

Для разработчиков лучшая часть новости в том, что миграция проектов с Swift 4.2 будет простой.

Код, который компилировался на «четверке», скомпилируется и в Swift 5. А вот исходники на более ранней, третьей версии языка, новому компилятору не скормить. Еще учтите, что уже скомпилированные модули Swift 4 «прикрутить» к новым программам не удастся.

Сколько ждать изменений

Те, кто пользуются бета-версиями «яблочных» операционок и ставят софт через TestFlight, могут оценить разницу в весе приложений на Swift 5 уже сейчас! Остальным придется запастись терпением: дождаться свежей релизной версии своей ОС, а потом — обновления любимых приложений, написанных на Swift 4.

Зато с переводом собственных приложений на «пятерку» можно не откладывать. Когда пользователи ваших программ смогут оценить плюсы, о которых мы говорили выше, — зависит от вас. Не бросайте свои разработки — поддерживайте их и используйте новые возможности и преимущества, которые дает язык. Тем более что перейти на Swift 5 можно без существенной правки кода.

Пройти обучение

12 фев 19, 14:28
0 0
Статистика 1
Показы: 1 Охват: 0 Прочтений: 0

История языков программирования: 2010-е

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

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

  • Изобретались новые языки взамен фундаментальных. Objective-C, C++, JavaScript, PHP и другие прекрасно справлялись с текущими задачами. Но в будущем, при значительном росте объема информации, их синтаксис и возможности могли вызывать сложности у программистов. Чаще всего улучшения сводились к упрощению синтаксиса, чтобы сократить время разработки и выпуска нового ПО;
  • Разрабатывались новые алгоритмы и библиотеки для создания искусственного интеллекта. В перспективе именно ИИ должен взять на себя работы низкой сложности: прямой контакт с пользователем, внедрение обновлений, поиск и устранение большинства багов;
  • Повышалась гибкость языков. В те языки, которые еще имели пространство для глобальных улучшений, добавлялись полноценные возможности ООП, функционального программирования, библиотеки для работы с периферией, дизайном, математикой и прочее.

Последние две концепции проявились почти во всех популярных языках программирования: Python, Java, JavaScript и даже Fortran с Ada. В 2010-х они развивались и адаптировались к актуальным задачам, что добавило им сторонников. Но всегда были и те, кто находил в популярных языках причины торможения эволюции. И в качестве ответа публике предлагали новые ЯП, лишенные характерных изъянов.

Борьба с С

Язык С++ уже более 30 лет успешно существует в мире программирования, позволяя решать широкий спектр задач — особенно там, где требуется высокая производительность при ограниченных ресурсах. Заменить его пытаются уже давно, но упрощение синтаксиса и определенных конструкций (в частности, работы с памятью) неизбежно снижает скорость исполнения, а значит теряется главная прелесть. В этом плане язык Rust, официально представленный компанией Mozilla в 2010 году, подобрался к успеху ближе всего.

Он не сильно уступает в производительности С++, однако дает больше надежности на выходе, да и в плане синтаксиса чуть удобнее для программиста. Позитивная оценка со стороны сообщества разработчиков подтверждается ежегодным опросом на портале Stackoverflow, где Rust уже 4 года остается в тройке наиболее любимых языков и третий раз стабильно возглавляет рейтинг. И хотя объемы работ на С/С++ и Rust несопоставимы, есть шанс, что в ближайшем десятилетии пропасть между ними будет уменьшаться.

Корпорации тоже против вечного

В XXI веке в IT выросла роль узкого круга компаний, практически каждая из которых запустила свой язык программирования. Вы помните, что в Microsoft на рубеже 90-х и 2000-х разработали C#. В 2010-х эта традиция продолжилась: компания Apple запустила Swift, Facebook — Hack, Google — Dart (а ведь в 2000-х появился еще и Go).

Каждый из этих языков должен был заменить или дополнить своего популярного предшественника. Так, Swift пришел на смену Objective-C. По выходной производительности приложений эти два языка схожи, но если брать трудозатраты разработчика, Swift демонстрирует серьезное превосходство. В Apple при этом не стали форсировать события и принуждать всех переходить на новые методы разработки. Но — чтобы вы понимали эффект — согласно статистике портала TIOBE, всего за год после выхода Swift количество запросов «Objective-C» в популярных поисковиках снизилось почти в 10 раз. Сегодня востребованность языков уже сопоставима.

У Dart история чуть более витиеватая — общий успех все еще под сомнением, да и подвижки в популярности происходят лишь благодаря влиятельному покровителю. Правда, и задача сложнее — заменить JavaScript. Впервые Dart появился в 2011 году — в Google на него возлагали большие надежды, активно развивали, продвигали в массы. Основными «фишками» языка должны были стать не только упрощенный синтаксис и повышенная надежность программ, но и варианты запуска: с компиляцией в JavaScript-код и без нее (прямая работа с браузером Chromium). Но в итоге оказалось, что этого недостаточно, чтобы заставить разработчиков массово отказываться от JavaScript. В результате в Google в 2016-м заморозили все работы по проекту, а в феврале этого года неожиданно громыхнули с выходом Dart 2. Пока все выглядит хорошо, а эффективность такого шага сможем оценить лишь в новом десятилетии.

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

В некотором роде схожая судьба выпала Kotlin — продукту компании JetBrains и идеологическому конкуренту Java. В сравнении с оригиналом, здесь улучшен синтаксис и повышена безопасность выходного кода. Не стоит забывать и об официальной поддержке популярных IDE: IntelliJ IDEA и Android Studio. В результате у языка немало поклонников, но среди них практически нет тех, кто бы отказался от Java в пользу Kotlin. Возможно, стоит подождать.

Чудотворный Elixir

Было в 2010-м и развитие на фронте функциональных языков программирования. В 80-х годах в телекоммуникационной сфере был разработан Erlang — узкоспециализированный язык для написания высоконадежных утилит и прикладных программ. Большой славы он не снискал, но и в истории не затерялся: до сих пор используется для написания части кода в серверах видеостриминга. Надежность ценится всегда.

Сегодня на смену Erlang пришел Elixir — язык с улучшенным синтаксисом, отдаленно напоминающим Ruby. Они полностью совместимы, поэтому многие разработчики с удовольствием уходят от откровенно устаревших форм записи к современным. Но, как и с рассмотренными выше «заменителями», этот процесс лишь в ранней стадии исполнения.

Моська по имени Julia

В 2010 году была предпринята еще одна попытка создать «научный» язык программирования — инструмент, способный в равной степени эффективно работать с математикой и визуализацией данных. Так в стенах Нью-Йоркского Университета родилась Julia. Она уже превзошла по производительности главных конкурентов — Python и MATLAB, использует схожий интуитивно понятный синтаксис, но пока катастрофически страдает из-за узкого спектра возможностей. Учитывая тенденцию к ускорению работы программ и невозможность развития в этом направлении нынешних языков-лидеров, в ближайшем десятилетии Julia может или сама стать заметной силой, или послужить основой очередного языка, созданного огромной корпорацией.

Куда теперь движется IT

В 2000-х в обиход вошло понятие «смартфон», 2010-е начались с массового внедрения «планшетов» и «фаблетов», но уже к 2020-му мы подходим, постепенно стирая границы между компьютерными устройствами — по сути это все и смартфоны, и планшеты, и ноутбуки.

Главная перспектива IT теперь состоит не в том, чтобы преобразовывать мир с помощью отдельных гаджетов, а создать принципиально новый — «мир виртуальной реальности». Сегодня есть лишь зачатки этой технологии, созданные на базе давно известных языков и алгоритмов. Но как смартфоны, социальные сети и «большие данные» предопределили развитие программирования в 2010-х, так и необходимость обрабатывать еще и «естественную» информацию даст толчок новой ветви развития в 2020-х. И тогда, возможно, популярные языки станут куда менее востребованы, а на смену им придут новаторские: высокопроизводительные и с элементарным синтаксисом.

Или все-таки нет?


1 авг 18, 17:18
0 0
Статистика 1
Показы: 1 Охват: 0 Прочтений: 0

5 языков программирования, которые надо учить первыми

Сегодня каждый, кто стремится попасть в IT, задается вопросом — какой язык программирования изучить? Все ищут универсальный ответ, который предопределит головокружительную карьеру. Да, до изобретения интернета и появления мобильных платформ можно было освоить один язык, написать на нем программу и быть востребованным разработчиком. Сегодня реалии таковы, что даже джуниорам предъявляется огромный список требований, среди которых — знание нескольких языков.

Судите сами: для веб-разработки неплохо бы владеть PHP, JavaScript, Python, Ruby, а еще HTML и CSS; в мобильной сфере — Swift, Objective-C, Java, C#. Перечень языков для создания десктопных приложений можно даже не начинать — по сути, все будут полезны. Именно поэтому мы взяли на себя ответственность назвать 5 языков программирования, которые надо изучить хотя бы шапочно, чтобы сегодня называться программистом.

Python

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

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

def fib_recursion(i):
	if i > 1:
   	 return fib_recursion(i-1) + fib_recursion(i-2)
	return i
            	
for i in range(10):
	print i, fib_recursion(i)

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

Стоит упомянуть, что на данный момент актуальны две версии: Python 2 и Python 3. Вам за основу лучше брать последнюю, так как поддержка Python 2, а значит — и активная разработка на ней, прекратится совсем скоро.

JavaScript

Следующий must have среди языков — JavaScript, для работы с ним хватит браузера. Синтаксис здесь на порядок сложнее: появляются служебные символы и конструкции с разношерстными скобками, названия функций далеко не всегда раскрывают суть действия, и даже простейший код имеет структурированный вид. Взглянем на переписанный код с функцией Фибоначчи:

function fib_recursion(n) {
   return n < 1 ? 0
    	: n <= 2 ? 1
    	: fib_recursion(n - 1) + fib_recursion(n - 2);
}
 
console.log(fib_recursion(10));

Объем кода практически не изменился, зато снизилась читаемость. После изучения Python вы без проблем разберетесь, как работает структура return, и оцените удобство именно такого способа записи.

Кроме того, экосистема JavaScript богаче, чем Python. Она предлагает обилие сред разработки, редакторов кода, фреймворков, библиотек. Это еще один шаг к пониманию, как работает «взрослое» программирование.

В целом, JavaScript незначительно уступает Python по спектру решаемых задач, но его возможности «глубже». Знание этого языка пригодится при разработке программ на любых платформах.

C#

Если вы не определились с языком, значит еще не решили, что вас привлекает: веб, мобильные или десктопные приложения. Тогда ваше решение — C#, универсальный инструмент для всех направлений разработки. Чтобы создавать десктопные приложения, понадобится Visual Studio (версия Community — бесплатная). Для мира мобильных устройств установите Xamarian, а для веба пригодится ASP.NET.

Взглянем на наш код на языке C#:

static void Main(string[] args)
{
	int number = 10;
	fib_recursion(number);
}
 
static void fib_recursion(int n, int a = 0, int b = 1)
{
	if (n == 0) return;
	Console.WriteLine(a);
	fib_recursion(--n, b, b+a);
}

Код вновь незначительно усложнился — это связано с использованием ключевого слова static. На этом этапе вы познакомитесь с грамотным использованием памяти, областями видимости данных и полностью погрузитесь в ООП. Ну, если не успели при знакомстве с JavaScript.

Swift

Подходим к самому интересному — языкам, безупречное владение которыми поможет вам попасть в сферу мобильной разработки. Swift не вполне универсален: он еще не полностью вытеснил Objective-C из приложений для Apple, но перспективы у него блестящие.

Четвертая версия Swift вышла в 2017 году: она содержит множество улучшений для работы со строками, коллекциями; возросла надежность и многое другое. Это уже не «сырой» язык, а классический представитель верхушки рейтинга TIOBE с планомерным развитием. С помощью Swift вы можете создавать приложения для всех продуктов Apple: macOS, watchOS, iOS и любой новой системы, если она появится.

Посмотрим на код последовательности Фибоначчи:

func fib_recursion(num1: Int, num2: Int, steps: Int) {
 
	if steps > 0 {
    	let newNum = num1 + num2
    	fib_recursion(num2, num2: newNum, steps: steps-1)
	}
	else {
    	print("result = \(num2)")
	}
}
fib_recursion(0, num2: 1, steps: 10)

Java

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

Кроме того, Java — великолепный язык, чтобы полноценно понять программирование: здесь реализованы все принципы ООП, организована работа с памятью и периферией, можно поупражняться с функциональным программированием.

А вот так выглядит Java-код нашей последовательности в простейшем императивном случае:

public class MainClass {
 
  public static long fib_recursion(long number) {
	if ((number == 0) || (number == 1))
  	return number;
	else
  	return fib_recursion(number - 1) + fib_recursion(number - 2);
  }
 
  public static void main(String[] args) {
	for (int counter = 0; counter <= 10; counter++)
  	System.out.printf("Fibonacci of %d is: %d\n", counter, fib_recursion(counter));
  }
}

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

Заключение

К списку можно было бы добавить ряд полезных языков вроде PHP, C++ или Ruby. Или несколько функциональных для общего развития: Lisp, Haskell, Clojure. Впрочем, до этого вы обязательно дойдете. Но сперва выбирайте специализацию, записывайтесь на курсы GeekBrains и осваивайте пять описанных must know языков.

Пройти обучение

24 июл 18, 16:59
0 0
Статистика 1
Показы: 1 Охват: 0 Прочтений: 0

Три свежие книги для начинающих разработчиков Swift

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

Мы подобрали только актуальные книги по Swift, которые вышли недавно либо затрагивают области, не зависящие от версии языка.

Официальная книга Swift Programming Language от Apple

Если с другими более устоявшимися языками разработчики советуют проверенные издания классических IT-авторов, то со Swift вас в первую очередь отправят читать официальную книгу от компании Apple, которая этот язык и разработала.

Swift Programming Language (Swift 4.1 edition) можно бесплатно скачать в itunes. На форумах и личных блогах можно найти переводы российских разработчиков, но они тоже затрагивают только предыдущие версии языка. Если вы читаете на английском, скачивайте последнюю официальную версию книги от Apple. Язык изложения сухой и довольно технический, но есть много примеров кода и даже иллюстрации различных приложений.

О том, с каким языком программирования  вам предстоит работать, можете судить по первой главе книги:

«По традиции, первая программа на новом языке должна выводить на экран словосочетание «Hello, world». На Swift это пишется всего в одну строку:

print("Hello, world!")

Если вы писали до этого код на C или Objective-C, этот синтаксис должен быть вам знаком. На Swift эта строка является законченной программой. Не нужно дополнительно импортировать отдельные библиотеки для таких функций, как ввод/вывод или обработка строк. Код, написанный в глобальной области, используется как входная точка для программы, так что функция main() больше не нужна. Также вам не нужно писать точки с запятой после каждой строки».

Swift для детей

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

«Swift для детей» — самое свежее издание об этом языке на русском. Для российских читателей издательство «Манн, Иванов и Фербер» выпустило ее в январе 2018 года. Авторы книги — разработчики iOS, многодетная мама Глория Уинквсит и руководитель отдела по созданию приложений для врачей и пациентов Мэтт Маккарти.

Первый раздел посвящен редактору Xcode: как его установить, настроить и написать первый код в XcodePlayground. Cледующие две части — практические. Шаг за шагом авторы издания предлагают написать приложение Birthday Tracker и игру Schoolhouse Skateboarder. В конце учебника — краткий справочник с информацией по официальной документации Swift, комбинациями клавиш для Xcode и симулятора IOS.

Несмотря на красочные детские иллюстрации (а может и благодаря им), книга хорошо подойдет и взрослым. Чтобы оценить, насколько хорошо авторы объясняют материал, посмотрите на отрывок из главы «Как давать названия константам и переменным»:

«Переменную и константу можно называть как угодно, но только не словами, которые используются самим Swift. К примеру, вы не можете называть переменную словом var. Запись var var может привести в замешательство и вас, и компьютер. Если попытаетесь назвать переменную или константу словом, зарезервированным Swift, у вас возникнет ошибка. Также в одном блоке программы «не уживутся» две переменные и константы с одним именем. Не бойтесь использовать длинные названия, избегайте сокращений. Так будет проще разобраться, зачем нужна переменная или константа. Если бы изучали чужую программу, что для вас было бы понятнее — numKids или numberOfKidsInMyClass?».

iOS 11 Programming Fundamentals with Swift: Swift, Xcode, and Cocoa Basics

Автор книги Мэтт Нойбург, судя по его краткой биографии в предисловии, — человек уникальный. С самого детства его одновременно интересовали и литература, и программирование; в обеих сферах он достиг больших успехов. Нойбург защитил докторскую по древнегреческой литературе, написал множество гайдов для программистов и разработал приложения MemoryStick, NotLight и Thucydides. Наверное, поэтому его книги с очень практическим значением такой приятный язык и отличный стиль изложения.

Последняя версия книга вышла в октябре прошлого года и разбирает всю теорию программирования на  Swift 4.0. Информация в издании разбита на 3 большие части:

  • Language (язык)
  • IDE (интегрированная среда разработки)
  • Cocoa (объектно-ориентированный API для macOS)

В предисловии автор довольно нескромно, но очень мотивационно пишет о своей методике обучения Swift:

«Мой способ обучения программированию на Swift отличается от других методик, в том числе от того, что предлагает Apple. Мой подход — систематический, евклидианский, все обучающие блоки связаны между собой и выстроены именно в той последовательности, которую я считаю наиболее эффективной. В то же время, в этом издании я постарался ограничиться основами — не уходить в детали. Swift — язык не сложный, но у него есть свои подводные камни. Я считаю, что не нужно глубоко вникать во все его нюансы сразу, поэтому осознанно не стал объяснять некоторые темы в книге. Например, в этой книге вы не найдете ничего о Swift Playgrounds или REPL. Я сфокусировался на актуальной практике программирования под IOS, поэтому в книге много советов из моего личного опыта разработчика».

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

Пройти обучение

17 апр 18, 12:33
0 0
Статистика 1
Показы: 1 Охват: 0 Прочтений: 0

Самые распространенные ошибки iOS-разработчиков

Что может быть хуже того момента, когда App Store отвергает ваше приложение из-за багов? Когда приложение с кучей багов размещается в магазине. Оно получает один негативный отзыв, второй… Репутация компании и разработчика катится вниз и восстановить её уже очень сложно.

iOS – вторая по популярности мобильная ОС в мире, причём 65% пользователей использует самую свежую версию. И каждый из них ждёт от любого приложения качества и высокой стабильности. В ситуации, когда к команде разработчиков каждый день присоединяется 1000 новичков, добиться этого не просто. Ниже приведены 10 наиболее популярных ошибок по версии Toptal, которые совершают неопытные iOS-разработчики. Запомните и постарайтесь избегать их.

Отсутствие понимания устройства асинхронных процессов

Одна из наиболее распространённых ошибок – неправильная обработка асинхронного кода. Давайте рассмотрим простой пример: пользователь открывает страницу с таблицей, данные подгружаются с сервера и размещаются в ней. Описать процесс можно так:

@property (nonatomic, strong) NSArray *dataFromServer;
- (void)viewDidLoad {
            __weak __typeof(self) weakSelf = self;
            [[ApiManager shared] latestDataWithCompletionBlock:^(NSArray *newData, NSError *error){
                           weakSelf.dataFromServer = newData;              // 1
            }];
            [self.tableView reloadData];                                  // 2

}

// and other data source delegate methods
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
            return self.dataFromServer.count;
}

На первый взгляд всё в порядке, но давайте проанализируем: мы сначала получаем данные, потом обновляем UI. Загвоздка в том, что получение данных – асинхронный процесс, и новые данные не будут получены до перегрузки интерфейса. Поэтому данный код необходимо переписать, поставив строку «2» сразу после «1»:

@property (nonatomic, strong) NSArray *dataFromServer;
- (void)viewDidLoad {
            __weak __typeof(self) weakSelf = self;
            [[ApiManager shared] latestDataWithCompletionBlock:^(NSArray *newData, NSError *error){
                           weakSelf.dataFromServer = newData;              // 1
                           [weakSelf.tableView reloadData];       // 2
            }];
}

// and other data source delegate methods

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
            return self.dataFromServer.count;
}

Впрочем, и такая запись может не привести к нужному результату, если…

Запуск кода, связанного с UI, не в главном потоке

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

Многие популярные библиотеки (Alamofire, AFNetworking и Haneke) требуют вызова completionBlock в основной очереди. Но иногда разработчики просто забывают об этом. А ведь сделать это так просто:

dispatch_async(dispatch_get_main_queue(), ^{
  [self.tableView reloadData];
});

Непонимание многопоточности и параллелизма

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

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

  • Почти каждое мобильное приложение использует веб-сервисы (к примеру, для вычислений или работы с БД). Если вы поместите их в главную очередь, то приложение или «подвиснет» на время выполнения, или iOS его закроет, если это затянется надолго.  Именно поэтому перемещение таких операций в параллельный поток – прекрасный выход из ситуации.
  • Все современные iOS-устройства имеют несколько ядер, так почему бы не воспользоваться этим для повышения быстродействия?

Но, как уже было сказано, пользоваться параллелизмом надо уметь. Давайте рассмотрим пару популярных ошибок, связанных с ним (часть кода опущена для удобства):

Случай 1

final class SpinLock {
private var lock = OS_SPINLOCK_INIT

func withLock<Return>(@noescape body: () -> Return) -> Return {
    OSSpinLockLock(&lock)
    defer { OSSpinLockUnlock(&lock) }
    return body()
}
}

class ThreadSafeVar<Value> {
private let lock: ReadWriteLock
private var _value: Value

var value: Value {
    get {
        return lock.withReadLock {
            return _value
        }
    }

    set {
        lock.withWriteLock {
            _value = newValue
        }
    }
}

}

Мультипоточный код:

let counter = ThreadSafeVar<Int>(value: 0)
// this code might be called from several threads
counter.value += 1
if (counter.value == someValue) {
    // do something
}

Итак, мы создали ThreadSafeVar для обработки counter, что должно сделать работу с потоками безопасной. Или нет? Два потока могут достигать линии инкремента одновременно, поэтому выражение counter.value == someValue никогда не станет истиной. Для разрешения этой ситуации создадим ThreadSafeCounter, который возвращает значение после увеличения:

class ThreadSafeCounter {
    private var value: Int32 = 0
    func increment() -> Int {
        return Int(OSAtomicIncrement32(&value))
    }
}

Случай 2

struct SynchronizedDataArray {
    
    private let synchronizationQueue = dispatch_queue_create("queue_name", nil)
    private var _data = [DataType]()
    var data: [DataType] {
        var dataInternal = [DataType]()
        dispatch_sync(self.synchronizationQueue) {
            dataInternal = self._data
        }
        
        return dataInternal
    }
 
    mutating func append(item: DataType) {
        appendItems([item])
    }
    
    mutating func appendItems(items: [DataType]) {
        dispatch_barrier_sync(synchronizationQueue) {
            self._data += items
        }
    }
}

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

Да, такой код будет работать. Но потребуется провести несколько тестов, чтобы удостовериться в  том, что потери производительности незначительны. В противном случае стоит искать другое решение.

Незнание тонкостей работы с переменными объектами

Swift очень полезен для предотвращения ошибок с типами, но iOS-разработчики используют также Objective-C. Именно здесь существует опасность с переменными объектами, которые могут приводить к скрытым проблемам. Известно, что неизменяемые объекты должны вызываться из функций, но, к сожалению, немногие знают, почему. Давайте рассмотрим следующий код:

// Box.h
@interface Box: NSObject
@property (nonatomic, readonly, strong) NSArray <Box *> *boxes;
@end
 
// Box.m
@interface Box()
@property (nonatomic, strong) NSMutableArray <Box *> *m_boxes;
- (void)addBox:(Box *)box;
@end
 
@implementation Box
- (instancetype)init {
    self = [super init];
    if (self) {
        _m_boxes = [NSMutableArray array];
    }
    return self;
}
- (void)addBox:(Box *)box {
    [self.m_boxes addObject:box];
}
- (NSArray *)boxes {
    return self.m_boxes;
}
@end

Код корректен, NSArray является подклассом NSMutableArray. Так что может пойти не так?

Чаще всего проблема возникает, когда другой разработчик решает сделать следующее:

NSArray<Box *> *childBoxes = [box boxes];
if ([childBoxes isKindOfClass:[NSMutableArray class]]) {
                // add more boxes to childBoxes
}

Это действие крайне негативно скажется на работе класса.

А вот другой случай, в результате которого программа поведёт себя непредсказуемо:

Box *box = [[Box alloc] init];
NSArray<Box *> *childBoxes = [box boxes];
 
[box addBox:[[Box alloc] init]];
NSArray<Box *> *newChildBoxes = [box boxes];

Вы ожидаете, что [newChildBoxes count] > [childBoxes count], но что если не так? В этом случае класс плохо описан, так как он меняет значение, которое уже возвращено.

Исправить это можно, если вы допишете в начальный код:

- (NSArray *)boxes {
    return [self.m_boxes copy];
}

Непонимание принципов работы NSDictionary

Если вы когда-нибудь работали с NSDictionary и произвольным классом, то знаете, что не можете использовать класс, если он не соответствует NSCopying в качестве ключа словаря. Многие iOS-разработчики задаются вопросом, зачем Apple добавила это ограничение.

Вам поможет понимание работы  NSDictionary. Технически это всего лишь хэш-таблица. Упрощённо рассмотрим, как она работает при добавлении объекта в качестве ключа:

  • Шаг 1: рассчитывается hash(Key).
  • Шаг 2: основываясь на хэше, ищется место для размещения объекта. Обычно это делается путем вычисления модуля хэш-значения со значением словаря. Затем полученный индекс используется для хранения пары «ключ / значение».
  • Шаг 3: если в этом месте отсутствует объект, то создаётся связанный список для записи и хранения нашей пары «ключ/значение». В противном случае пара добавляется в конец списка.

А вот как извлекается:

  • Шаг 1: высчитывается hash(Key).
  • Шаги2: ищется ключ по хэшу. Если данные отсутствует, возвращается nil.
  • Шаг 3: если там связанный список, выполняются итерации объекта, пока [stored_key isEqual:Key].

На основании этого мы можем сделать два вывода:

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

Давайте рассмотрим это на простом классе:

@interface Person
@property NSMutableString *name;
@end
 
@implementation Person
 
- (BOOL)isEqual:(id)object {
  if (self == object) {
    return YES;
  }
 
  if (![object isKindOfClass:[Person class]]) {
    return NO;
  }
 
  return [self.name isEqualToSting:((Person *)object).name];
}
 
- (NSUInteger)hash {
  return [self.name hash];
}
 
@end

Теперь представьте, что NSDictionary не копирует ключи:

 
NSMutableDictionary *gotCharactersRating = [[NSMutableDictionary alloc] init];
Person *p = [[Person alloc] init];
p.name = @"Job Snow";
 
gotCharactersRating[p] = @10;

Потом мы обнаруживаем опечатку и исправляем её:

p.name = @"Jon Snow";

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

Или ещё хуже. Представьте себе, что мы уже имели «Jon Snow» в нашем словаре с рейтингом 5. Словарь будет иметь два разных значения для одного и того же ключа.

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

Использование StoryBoard вместо XIB

Большинство новых разработчиков iOS следуют рекомендациям Apple и используют сториборды по умолчанию для UI. У такого подхода есть не только [спорные] преимущества, но и явные недостатки. Начнём с плохого:

  • Использование Storyboard несколькими членами команды – крайне сложная задача. Технически реально использовать несколько сторибордов, но для этого придётся прописывать переходы.
  • Имена переходов и контроллеров в сторибордах – строки, которые вам придётся прописывать в коде (а из-за их количества это его уничтожит). Или создавать огромный список констант. Можно ещё использовать SBConstants, но это тоже не сильно упрощает задачу.
  • Использование сторибордов практически исключает модульное программирование из-за малого числа повторов. Для минимального продукта (MVC) или прототипа это не критично, но для настоящего приложения это очень важный недостаток.

Преимущества:

  • Навигация интуитивно понятна. Теоретически. Фактически реальное приложение имеет десятки контроллеров, подключённых в разных направлениях. То есть навигация будет выглядеть как большой клубок ниток, который точно не даст вам понимания о взаимодействии данных.
  • Статические таблицы. Это неоспоримое преимущество, если не считать того, что 90% всех статических таблиц рано или поздно становится динамическими. А в этом случае лучше работать с XIB.

Путаницы со сравнением указателей и объектов

При сравнении двух объектов мы можем использовать два подхода: сопоставление указателей и самих объектов.

Равенство указателей означает, что оба ссылаются на один и тот же объект. В Objective-C мы используем для этого ==. Равенство объектов означает, что оба логически идентичны. К примеру, как один и тот же пользователь из разных таблиц. В Objective-C для этого используется isEqual или, что даже лучше, isEqualToString, isEqualToDate и т.д.

Взгляните на следующий код:

NSString *a = @"a";                      // 1
NSString *b = @"a";                         // 2
if (a == b) {                               // 3
    NSLog(@"%@ is equal to %@", a, b);
} else {
    NSLog(@"%@ is NOT equal to %@", a, b);
}

Что появится в  консоли, когда мы запустим код? Мы увидим «a is equal to b», так как оба указателя ссылаются на один и тот же объект в памяти.

Но теперь давайте изменим строку # 2 на:

NSString *b = [[@"a" mutableCopy] copy];

И теперь мы увидим «a is NOT equal to b» потому что указатели ссылаются на разные объекты, хоть визуально они и идентичны.

Проблема решает использованием isEqual или типизированной функцией. Внесём изменение в строку «3» и запишем код правильно:

if ([a isEqual:b]) {

Использование строго заданных значений

Существуют две основные проблемы со строго заданными значениями:

  • Часто неясно, что они представляют.
  • Если они используются в нескольких местах в коде, они должны быть повторно введены (или скопированы и вставлены).

Взгляните на пример:

if ([[NSDate date] timeIntervalSinceDate:self.lastAppLaunch] < 172800) {
    // do something
}
or
    [self.tableView registerNib:nib forCellReuseIdentifier:@"SimpleCell"];
    ...
    [self.tableView dequeueReusableCellWithIdentifier:@"SimpleCell"];

Что такое 172800 и почему именно это значение? На самом деле это число секунд в 2 сутках (то есть 24*60*60*2).

Вместо подобной записи вы можете определить значение с помощью инструкции #define. Например:

#define SECONDS_PER_DAY 86400
#define SIMPLE_CELL_IDENTIFIER @"SimpleCell"

#define – это макрос препроцессора, который заменяет значение именем в коде. То есть, если вы пропишите #define в файле заголовка и импортируете его где-нибудь, все вхождения будут заменены на строго заданные значения.

Но это решение не работает, когда возникает путаница с типами. Для его иллюстрации взгляните на код:

#define X = 3
...
CGFloat y = X / 2; 

Наверняка вы ждёте, что значение y будет 1.5, но это не так. На самом деле оно примет значение 1. Причина в том, что #define не имеет информации о типе. Так что в нашем случае на основании двух значений типа Int (3 и 2) получается результат также типа Int вместо Float.

Этого можно избежать, используя константы:

static const CGFloat X = 3;
...
CGFloat y = X / 2;  // y теперь 1.5

Использование default в конструкции switch

Использование выражения default в конструкции switch может привести к ошибкам и неправильной работе. Взгляните на код, написанный на Objective-C:

typedef NS_ENUM(NSUInteger, UserType) {
    UserTypeAdmin,
    UserTypeRegular
};
 
- (BOOL)canEditUserWithType:(UserType)userType {
    
    switch (userType) {
        case UserTypeAdmin:
            return YES;
        default:
            return NO;
    }
    
}

Аналогичный код на Swift:

enum UserType { case Admin, Regular } func canEditUserWithType(type: UserType) -> Bool { switch(type) { case .Admin: return true default: return false } }

Данный код описывает алгоритм, позволяющий вносить изменения только администраторам. Но что произойдёт, если мы захотим открыть доступ ещё и менеджерам? Ничего не получится, если мы не обновим блок кода switch. Однако если вместо default использовать значения enum, изменения будут учтены при компиляции и вы сможете это исправить перед тестированием или выпуском приложения. Вот так это должно выглядеть на Objective-C:

typedef NS_ENUM(NSUInteger, UserType) {
    UserTypeAdmin,
    UserTypeRegular,
    UserTypeManager
};
 
- (BOOL)canEditUserWithType:(UserType)userType {
    
    switch (userType) {
        case UserTypeAdmin:
        case UserTypeManager:
            return YES;
        case UserTypeRegular:
            return NO;
    }
    
}

Так – на Swift:

enum UserType {
    case Admin, Regular, Manager
}
 
func canEditUserWithType(type: UserType) -> Bool {
    switch(type) {
        case .Manager: fallthrough
        case .Admin: return true
        case .Regular: return false
    }
}

Использование NSLog для журнала логов

Многие iOS-разработчики используют NSLog в своих приложениях, чтобы вести служебные записи, однако это может стать большой ошибкой. Взгляните на документацию Apple, а именно на описание функции NSLog. Всё очень просто:

void NSLog(NSString *format, ...);

Проблема в том,что, если вы подключите своё устройство к XCode Organizer, увидите все свои отладочные сообщения. Именно по этой причине не стоит использовать NSLog для журнала: он содержит много нежелательной информации, кроме того, это выглядит непрофессионально.

Поэтому лучше заменить NSLogs на настраиваемый CocoaLumberjack или какой-нибудь фрейморк для протоколирования.

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

Знание Objective-C и Swift сделает вас отличным разработчиком iOS и предоставит возможности для работы над сложными проектами с использованием передовых технологий.

Пройти обучение

3 апр 18, 18:09
0 0
Статистика 1
Показы: 1 Охват: 0 Прочтений: 0
Показаны все темы: 9

Последние комментарии

нет комментариев
Читать

Поиск по блогу

Люди

7 пользователям нравится сайт lena2018.mirtesen.ru