Краткая история Swift

Я помню, насколько важным это было, когда Swift был представлен на конференции Apple WWDC в 2014 году (Всемирная конференция разработчиков). Об этом говорили в городе, и все разработчики, с которыми я работал, не могли дождаться, чтобы попробовать его. Сообщество iOS было шумно, и новый язык вызвал большой ажиотаж.

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

Это был огромный успех, и через несколько лет после внедрения он стал стремительно расти. Он был самым любимым языком программирования в 2015 году, вторым по популярности в 2016 году, 11-м самым популярным языком программирования в 2017 году, обогнав Objective-C, а также он обогнал Objective-C в 2018 году. .

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

Популярность Swift продолжает расти, особенно для небольших приложений и стартапов. Разрыв между Swift и Objective-C будет только расти. У этого молодого языка светлое будущее.

Краткая история Objective-C

Objective-C - это объектно-ориентированный язык программирования, который является надмножеством C, как видно из названия языка. Это означает, что любая допустимая программа на C будет компилироваться с помощью компилятора Objective-C. Он заимствует весь свой не объектно-ориентированный синтаксис из C, а объектно-ориентированный синтаксис - из SmallTalk. Он был разработан в 1984 году, так что он успел развиться как язык и стал намного более стабильным, чем Swift.

Большинство людей знают Objective-C как язык, который используется для разработки приложений для iPhone, но история идет гораздо глубже. Я бы рекомендовал прочитать эту статью для более глубокого изучения.

Сильные стороны Swift

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

У мобильной разработки всегда было больше препятствий, чем у веб-разработки. Вам нужен симулятор, обычно вам нужна проприетарная интегрированная среда разработки (IDE), и вам нужно настроить весь проект только для тестирования небольшого прототипа. В случае Apple вам также понадобится учетная запись разработчика. Хорошая вещь в Playgrounds - это то, что вы можете обойти некоторые из них. Вам нужен Xcode или приложение Playgrounds, но это все. И вы можете сразу приступить к написанию и компиляции кода.

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

Похвально упомянуть хорошую утилиту Swift Package Manager, доступную только для Swift. Swift Package Manager - это просто менеджер зависимостей, интегрированный с системой сборки Swift. Это никоим образом не меняет правила игры, поскольку CocoaPods и Carthage выполняли эту работу давным-давно, но это еще одно решение, доступное при необходимости.

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

Особенности языка

Давайте углубимся в некоторые детали самого языка. Swift безопаснее из-за статической типизации и использования дополнительных параметров. В Swift, если вашему коду требуется строка, функции Swift гарантируют, что ваш код получит строку, а не другой тип, например int. Это, конечно, зависит от того, используете ли вы язык так, как он задуман, а не принудительно разворачиваете все.

Еще одна замечательная особенность Swift - его синтаксис. Особенно по сравнению с Objective-C. Лучшее слово для описания синтаксиса - «сжатый». Нет необходимости в точках с запятой, вызовах self или скобках вокруг операторов if. Такое ощущение, что вы пропускаете много вещей, которые вам и так не нужны. Это может улучшить процесс набора большого количества кода.

Некоторые люди говорят, что это приводит к увеличению скорости разработки, но я бы не сказал этого точно. Постоянная необходимость разворачивать объекты в соответствии с требованиями безопасности типов Swifts сводит на нет выгоды разработки, связанные с лаконичностью.

Swift также имеет множество отличных вариантов потока управления с guard, if-let, расширенными операторами switch, repeat-while и defer. Мне нравятся все различные варианты, потому что они позволяют людям управлять потоком своего кода так, чтобы они имели смысл. Многие ненавидят отсрочки, но любят охранников, и наоборот. На самом деле не имеет значения, что вам нравится или не нравится, но варианты есть, и вы можете кодировать так, как вам нравится.

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

Слабые стороны

Swift - молодой язык, и с этим происходят некоторые изменения. Миграция между версиями - это просто боль. В небольшой компании инструмент миграции, предоставляемый Apple, может оказаться полезным и охватить большинство случаев. Чем больше у вас кода, тем менее полезен он. Еще хуже, если ваша кодовая база содержит код Objective-C и Swift, которые взаимодействуют друг с другом.

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

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

Другая проблема заключается в том, что Swift плохо работает с Xcode. Xcode кажется очень нестабильным при работе со Swift, а автозаполнение иногда просто не работает. Это странно, учитывая, насколько сильно Apple продвигает Swift. Вы могли подумать, что они захотят сделать опыт использования Swift с Xcode в восторге.

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

Сильные стороны Objective-C

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

Что это означает в практических целях? Что ж, одним большим преимуществом является адаптируемость во время выполнения. Это означает, что становится возможным доступ к частным API или такие вещи, как имитация объектов во время выполнения. Это может быть особенно полезно при модульном тестировании. Такие библиотеки, как OCMock, делают это еще проще и позволяют проводить очень сложные тесты. Хорошие модульные тесты сделают ваше приложение более стабильным и надежным.

Говоря о стабильности, Objective-C существует уже давно, что делает его очень стабильным языком. С Swift вы столкнетесь с ошибками, которые довольно удивительны и могут нарушить стабильность вашего приложения. В приведенном выше примере этот сбой будет вызван фактическим языком, который вы используете для кодирования своего приложения, а не какой-либо ошибкой, созданной кодом, который вы написали. Это может расстраивать.

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

Слабые стороны

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

Однако я согласен с тем, что синтаксис блока разочаровывает. Есть даже сайт, посвященный расшифровке загадок блоков в Objective-C. На самом деле я довольно часто использую этот сайт в качестве справочника.

Самая большая проблема, с которой сейчас сталкивается Objective-C, заключается в том, что однажды Apple может отказаться от поддержки Objective-C с Cocoa и другими распространенными библиотеками, используемыми для создания приложений iOS. Поскольку Objective-C в основном используется для создания приложений для iOS, это стало бы похоронным звонком для языка. Это также означает, что новички в сообществе iOS боятся изучать Objective-C прямо сейчас, поскольку он, возможно, больше не будет использоваться в будущем.

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

Objective-C также не держит вас за руку, когда дело доходит до этих вещей. Хотя приятно, что приложение не аварийно завершает работу, когда вы отправляете сообщение на nil, это может привести ваше приложение в странное состояние. Подобные проблемы очень сложно устранять. Тот факт, что Swift имеет строгую типизацию и использование опций развертывания, предотвращает эти вещи во время компиляции.

Что мне следует изучать - Swift или Objective-C?

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

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

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

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

Понравилось то, что вы прочитали? Взгляните на некоторые из моих других статей:

Советы для вашего первого технического собеседования.

Начиная техническую карьеру с нуля.

Стоит ли вам получить степень в области информатики?