swift или java что легче

Гид по выбору первого языка программирования

С какого языка начать изучение программирования? ALMAMAT Blog составил гид по выбору первого языка. Обучение на IT-рынке продолжается постоянно, и через время разработчик будет работать с несколькими языками, инструментами и технологиями. Сначала будет не очень понятно, но шаг за шагом все получится.

По популярности

По версии TIOBE Index, Python стал языком 2018 года. В январе 2019 года в ТОП-3 популярных языков программирования входят Java, С и Python. Индекс TIOBE имеет ряд критериев, вычисляется по данным 25 поисковых движков и отражает популярность языков программирования на мировом рынке. В Топ-10 TIOBE Index также входят: C++, Visual Basic. NET, JavaScript, C#, PHP, SQL, Objective-C. Дополнительно, в Топ-20 входят: MATLAB, R, Perl, Assembly Language, Swift, Go, Delphi/Object Pascal, Ruby, Pl/SQL и Visual Basic.

Дмитрий Грин

CEO ALMAMAT. Global IT University

«В Кремниевой долине С, Python, Java и JavaScript – топовые языки. Зная С, легко освоить другие языки. Python – потому что AI пишется преимущественно на нем. Java – универсальный и потому популярный».

По доступности

Python, JavaScript, Swift, Ruby, Java осваивают довольно легко.

По входу на рынок труда

Много вакансий для разработчиков, пишущих на Java, JavaScript, Python, SQL, C/C++, PHP. iOS-разработчику нужны Objective-C (сложный) и Swift (простой). QA-инженеру для автоматизации тестирования понадобятся, например, Java или JavaScript, но могут использоваться и другие языки. Читайте интервью ALMAMAT Blog с QA-инженером Setka Сабиной Хасановой.

По деньгам

Деньги на разных рынках принципиально разные. Например, в Кремниевой долине в разы выше. Много достойных вакансий для тех, кто пишет на Java (разработкой под Android) и Java Script; на С/С++, а также на Objective-С и Swift (разработка под iOS).

Глобально, на порядки больше денег приносят работа в компаниях-мейджорах и такие языки, как F#, Clojure, Groovy, Perl, Erlang, Rust, Scala, Go. Кстати, в этом же ряду популярный простой и лаконичный Ruby. А Rust любят многие в IT-комьюнити. Менее популярные языки часто изучают в дополнение к своему основному, широко используемому на рынке.

Доступные и популярные языки, такие как Java или JavaScript (JS), а также языки, дающие фундаментальные знания (С/С++), приносят хорошие деньги и позволяют быстро находить работу в России, на аутсорсе или с релокацией в другие страны.

По спектру применений

1. С и С++

Для тех, кто знает С/С++, много работы. Они находятся в хорошей форме, у них большое комьюнити и широкое применение. Они повлияли на развитие других популярных языков, а значит потом будет легче изучать новое. С++ это мультипарадигмальный язык общего назначения, не очень сложный и закладывающий добротный базис на старте.

2. Java

Широкое применение: Android-приложения, серверные приложения в больших компаниях, автоматизация тестирования, веб, Big Data, веб-приложения и др.

3. JavaScript

Node.js превращает JavaScript в язык общего назначения. JS это и фронтенд, и бэкенд. Подходит и в работе тестировщика, QA-инженера.

Не самый простой язык для сложных проектов. Интересные сферы применения: игры; веб-сервисы; облачные сервисы; десктопные, мобильные, кроссплатформенные приложения и др.

5. Python

AI, игры, Big Data, веб, mobile и др.

По перспективам

JavaScipt, C/С++, Python, Swift, Java. (После Java легче изучать перспективные Go и Scala. Scala используется в таких компаниях, как Twitter, Asana, Soundcloud, Hootsuite, Groupon.com, Foursquare, Tumblr и Coursera, но как первый язык его брать не рекомендуют, лучше подготовиться). Есть прогнозы о том, что Go, Scala, R, Rust, Kotlin, Elixir, Clojure и Haskell будут набирать популярность, но начинать лучше с мейнстримового языка.

Отдельно стоит тут сказать про C/С++: немного сложнее в изучении, но если вы хотите сделать карьеру в IT, то это хороший выбор для старта. Вы будете глубже понимать программирование, а не только иметь навыки. Тут нужны баланс, правильные стратегия и тактика, об этом подробнее поговорим чуть позже. Чтобы зарабатывать и скорее войти на рынок, нужны навыки, причем именно те, которые описывают в своих вакансиях работодатели. А для того, чтобы стать архитектором, ведущим разработчиком, нужно еще и глубокое понимание в дополнение к стеку разработчика.

По намерениям

Какая сфера привлекает вас больше других?

1. «Хочу делать сайты и веб-приложения»

Java, JavaScript, HTML 5, Ruby, Python, SQL, PHP

2. «Хочу написать приложение для айфона»

Swift (потребуется макбук или iPad с клавиатурой, чтобы писать код). Коммерческому iOS-разработчику нужно знать Objective-С и Swift.

3. «Хочу писать приложения под Android»

4. «Хочу сделать карьеру в IT»

Разница между «работать» и «сделать карьеру» в IT есть, как и на других рынках. Хорошо начать с С/C++, так часто пишут, потому что между ними есть несколько отличий, а в целом они похожи. В описании вакансий часто пишут именно С/C++. Работы много и на российском, и на калифорнийском рынках. Хорошие перспективы для развития и вертикального роста.

5. «Хочу работать с темой AI»

6. «Хочу работать с данными»

Python, Java, R, Scala

7. «Хочу работать в геймдев»

Базис – С# и среда Unity

8. «Хочу понять, как все это работает»

9. «Хочу работать в робототехнике»

10. «Хочу быстро сделать свой стартап»

Ruby, Java, Swift, JavaScript

11. «Хочу работать в IoT, интернете вещей»

С/C++, Python, Java, Go, JavaScript

12. «Хочу работать в известной компании»

Вот данные авторитетного ресурса Stackshare.io по использованию популярных языков программирования в известных компаниях:

Java (Airbnb, Instagram, Uber Technologies, Spotify, Netflix, Pinterest, Slack, Google, LinkedIn, Lyft)

Python (Instagram, Uber Technologies, Spotify, Netflix, Facebook, Dropbox, Pinteres, Reddit, Google)

Читайте также:  viewnx 2 что это

С (Twich, Telegram Messenger)

JavaScipt (Airbnb, Instagram, Slack, Reddit, eBay, Asana, Coursera, Product Hunt, MIT)

C++ (Google, Twich, IBM, Lyft)

C# (Microsoft, Stack Overflow)

Objective-С (Apple, Instagram, Uber Technologies, Pinterest, Slack, Snapchat)

Swift (Lyft, Asana, Apple)

Go (Google, Uber, Medium, Lyft, Shopify, Twich, Codeacademy)

Ruby (Airbnb, Shopify, StackShare, Twich, Starbucks, Hulu, Kickstarter, Product Hunt, Hotel Tonight, MIT, Coinbase, Codeacademy)

13. «Хочу перейти на IT-рынок»

Если входить через специальность QA-инженера, то можно начать, например, с JavaScript, Java, Ruby или Python. Названия Java и JavaScript похожи, но свойства языков различаются, оба языка – топовые и характеризуются как доступные для новичков.

Получилось выбрать?

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

Свой стартовый язык имеет смысл выбрать между популярными (JavaScript, Java и Python), удобными (лаконичный Ruby, визуализирующий обучение Swift), перспективными (Go) и фундаментальными (С/С++: полно работы и, умея, положим, на С++, вы потом будете учиться писать на других языках быстрее).

Кроме того, QA-инженеру, например, не обязательно глубоко знать язык программирования, чтобы начать заниматься автоматизацией тестирования: можно развиваться в программировании параллельно ежедневной работе. almamat blog

Источник

Котлин против Свифта: Android и iOS движутся к созданию универсального языка?

Друзья, всем привет. На связи Дмитрий Кожевин — преподаватель базового курса «Android-разработчик» в OTUS. Специально для читателей нашего блога я подготовил перевод вот такой отчасти провокационной статьи. Очень интересно ваше мнение, поэтому после прочтения приглашаю всех в комментарии к данной публикации.

Как только Kotlin получил поддержку Google, явное волнение фанатов Kotlin стало не единственной реакцией. Те, кто не знаком с Kotlin, были весьма обеспокоены его уровнем совместимости с Java, средним временем, необходимым для его освоения, а также преимуществами использования Kotlin в целом.

В своих попытках объяснить и представить язык максимально коротким и ясным способом многие разработчики Kotlin ссылались на трехлетнюю параллель между Kotlin и вторым официальным языком iOS — Swift. Называя Kotlin «Swift of Android», все упростило задачу и помогло создать образ для языка. Тем не менее, это изображение также вызвало споры в сообществе iOS, так как некоторые разработчики iOS не сочли сравнение лестным и увидели в Kotlin просто подражателя.

По крайней мере, следует отметить, что хотя Swift появился в 2013 году, Kotlin появился еще в 2011 году. Следовательно, даже если сравнение Kotlin и Swift (в этом точном порядке) может быть удобным из-за более раннего знакомства Swift с широкой аудиторией, любое утверждение, что Котлин подражает — не оправдано.

Тем не менее, стоит ли сравнивать? Если да, то насколько сильно простирается сходство? И намекает ли его существование на тот факт, что выпуск приложений для iOS и Android изначально может стать проще и быстрее в будущем? Огромный опыт ScienceSoft в услугах по разработке мобильных приложений позволяет спекулировать на этом этапе. Давайте посмотрим на это.

Синтаксис

Синтаксис Swift не просто напоминает синтаксис Kotlin — в небольших кусках кода может быть до 77% сходства строк.

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

Kotlin Swift
fun func
val let
null nil
trait protocol
constructor init
: ->
Any AnyObject
!! !

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

И вот как классы объявлены в обоих:

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

Security

Хотя Swift и Kotlin сильны и статичны с точки зрения типизирования, они также позволяют работать с динамическими типами. Таким образом, языки остаются краткими и гибкими, позволяя заблаговременно устранять ошибки и несоответствия. Поэтому они считаются очень безопасными и особенно надежными для больших проектов.
Кроме того, эти два языка сочетают в себе подходы к обработке необязательных значений и null/nil безопасности с помощью оператора безопасной навигации «?» или типы опций. Меры предосторожности со знаком «?» выражены почти одинаково как в Kotlin, так и в Swift:

Особенности

Например, в Kotlin можно найти лямбда-выражения Java. В Swift это блоки или замыкания, термины из Objective-C. То, как оба выражения вызываются в код, аналогично тому, как они работают.

Kotlin Swift
< < _in
println(«Lambda Expression») print(«Closure Expression»)
> >

Функция, известная как вычисляемые свойства в Swift, которая является определенным объявлением свойства с вызовом get, также включена в Kotlin:

На самом деле, вместо перечисления функций, которые существуют на обоих языках, было бы проще перечислить те, которые не имеют. А именно, только Kotlin поддерживает:

Значение сходства

Два языка четко разделяют идеологию, поскольку они решают те же проблемы, которые были созданы языками их предков: они менее многословны и ограничены по функциям, более удобочитаемы и удобны для работы. В то же время и Kotlin, и Swift остаются совместимыми с Java и Objective-C соответственно, что позволяет использовать их как в новых проектах, так и в обслуживании старых.

Более того, сильное сходство двух языков может помочь в разработке собственных приложений для iOS и Android. Разумеется, нельзя сказать, что приложения на обеих платформах могут совместно использовать один код, поскольку языки и библиотеки для конкретных ОС не идентичны. Тем не менее, подходы к логике и функциональности приложения могут быть очень похожими, благодаря синтаксическому и функциональному сходству между Swift и Kotlin. Это может сделать разработку, тестирование и обслуживание быстрее и проще.

Универсальный язык для iOS и Android?

Теоретически, Google мог уже принять Swift в качестве официального языка вместо Kotlin; даже в 2016 году ходили слухи об этой возможности. Такой шаг, возможно, не создал бы ситуацию, когда какие-либо кроссплатформенные инструменты разработки стали бы неактуальными, но разница между этими двумя платформами, несомненно, стала бы размытой.

Однако такой шаг также был бы неразумным, и не только из-за конкурентоспособности бизнеса. Хотя Свифт и Котлин похожи, больше всего они похожи на своих предшественников. Другими словами, Свифт и Котлин преодолевают разрыв между Objective-C и Java. Однако переход с Java на Kotlin все же более естественный и плавный, чем переход с Java на Swift.

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

Источник

Swift vs. Kotlin. Отличия важны

Вы наверняка видели это сравнение Swift и Kotlin: http://nilhcem.com/swift-is-like-kotlin/. Довольно интересное, правда? Я согласен, что в этих языках много схожего, но в этой статье я обращу внимание на некоторые аспекты, которые их все-таки разнят.

Я занимаюсь Android-разработкой с 2013 и большую часть времени разрабатывал приложения на Java. Недавно же у меня появилась возможность попробовать iOS и Swift. Я был впечатлен тем, что на Swift получается писать очень клевый код. Если вы приложите усилия — ваш код будет похож на поэму.

Через семь месяцев я вернулся к Android. Но вместо Java начал кодить на Kotlin. Google объявил на Google IO 2017, что Kotlin теперь официальный язык для Android. И я решил учить его. Мне не понадобилось много времени, чтобы заметить сходство между Kotlin и Swift. Но я бы не сказал, что они очень похожи. Ниже я покажу отличия между ними. Я не буду описывать все, а только те, которые мне интересны. Рассмотрим примеры.

Структуры vs. Data-классы. Значения и ссылки

Структуры и Data-классы — упрощенные версии классов. Они похожи в использовании, выглядит это так

Но класс по прежнему остается классом. Этот тип передается по ссылке. А вот структура — по значению. «И что?» спросите вы. Я объясню на примере.

Давайте создадим наш data-класс в Kotlin и структуру в Swift, а затем сравним результаты.

Чему равно data для foo2 в обоих случаях? Ответ 4 для data-класса Kotlin и 2 для структуры на Swift.

Результаты отличаются, потому что var foo2 = foo1 в Swift создает копию экземпляра структуры (детальнее тут), а в Kotlin — еще одну ссылку на тот же объект (детальнее тут)

Если вы работаете с Java, вы вероятно знакомы с паттерном Defensive Copy. Если нет — наверстаем упущенное. Здесь вы найдете больше информации по теме.

В общем: существует возможность изменения состояния объекта изнутри или извне. Первый вариант — предпочтительнее и более распространен, а вот второй — нет. Особенно когда вы работаете со ссылочным типом и не ожидаете изменений его состояния. Это может осложнить поиск багов. Для предотвращения этой проблемы, вам следует создавать защищенную копию мутабельного объекта перед тем как передавать его куда-либо. Kotlin гораздо полезнее в таких ситуациях, чем Java, но по неосторожности все еще могут возникать проблемы. Рассмотрим простой пример:

Я объявил pages как MutableList, потому что хочу их менять внутри этого объекта (добавлять, удалять и т.п.). Pages не private, потому что мне нужен доступ к их состоянию извне. Пока все идет нормально.

Теперь у меня есть доступ к текущему состоянию книги:

Я добавляю новую страницу в bookPages:

К сожалению, я также изменил состояние исходной книги. А это совсем не то, чего я хотел.

Мы можем воспользоваться защищенной копией, чтобы избежать этого. Это очень легко в Kotlin.

Теперь у нас все хорошо. 🙂

А что же Swift? Тут все работает из коробки. Да, массивы — это структуры. Структуры передаются по значению, как мы уже упоминали выше, поэтому когда вы пишете:

вы работаете с копией списка страниц.

Таким образом мы имеем дело с передачей данных по значению. Это очень важно для понимания отличий, если вы не хотите испытывать головную боль во время отладки. 🙂 Многие «объекты» являются структурами в Swift, например Int, CGPoint, Array и т.п.

Интерфейсы и Протоколы и Расширения

Это моя любимая тема. 😀

Начнем со сравнения интерфейса и протокола. В принципе, они идентичны.

Кроме того, для протоколов может потребоваться определенный инициализатор (конструктор в Kotlin).

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

Расширения позволяют добавлять функционал к существующим классам (или структурам ;)) не наследуя их. Это так просто. Согласитесь, это крутая возможность.

Это что-то новое для Android-разработчиков, поэтому нам нравится пользоваться этим постоянно! Создавать расширения в Kotlin — не запускать ракеты в космос.

Вы можете создавать расширения для свойств:

Как видите, мы не использовали здесь никаких ключевых слов.

В Kotlin есть некоторые предопределенные расширения, которые довольно круты, например «orEmpty()» для опциональных строк:

Это полезное расширение выглядит так:

‘?:’ пытается получить значение из ‘this’ (что является текущим значением нашей строки). Если же там будет null, взамен будет возвращена пустая строка.

Так-с, теперь посмотрим на расширения в Swift.

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

Если вы будете искать расширение подобное «orEmpty()» — у меня для вас плохие новости. Но можно его добавить, не так ли? Давайте попробуем!

но вот что вы увидите:

Опционал в Swift — это generic-перечисление, с заданным типом Wrapped. В нашем случае Wrapped — это строка, поэтому расширение будет выглядеть так:

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

Однако компилятор защитит вас и не скомпилирует этот код. Но если вы добавите больше таких расширений — ваша автоподсказка будет забита мусором.

Значит Kotlin-расширения удобнее чем в Swift? Я бы сказал, что расширения в Swift предназначены для других целей ;). Android-разработчики, держитесь!

Протоколы и расширения созданы, чтоб работать вместе. Вы можете создать свой протокол и расширение для класса, чтоб соответствовать этому протоколу. Это звучит безумно, но это еще не все! Есть такая вещь, как условное соответствие протоколу. Это означает, что класс/структура может соответствовать протоколу при выполнении определенных условий.

Допустим у нас есть много мест, где необходимо показать всплывающий alert. Нам нравится принцип DRY и мы не хотим копипастить код. Мы можем решить эту проблему используя протокол и расширение.

Сначала создадим протокол:

Затем, расширение с реализацией по-умолчанию:

Так-с, метод presentAlert только создает alert, но ничего не показывает. Нам нужна ссылка на вью-контроллер для этого. Можем ли мы передать его как параметр в этот метод? Не очень хорошая идея. Давайте воспользуемся условием Where!

Что у нас тут? Мы добавили специфическое требование к расширению нашего протокола. Оно предназначено только для UIViewController. Благодаря этому мы можем пользоваться методами UIViewController в методе presentAlert. Это позволяет нам вывести alert на экран.

Теперь у всех UIViewController появилась новая возможность:

Также, комбинация протоколов и расширений очень полезна для тестирования. Ребята, сколько раз вы пытались тестировать Android final-класс в своем приложении? Это не проблема для Swift.

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

В тесте нам нужно проверить вызывается ли метод drawSomething у объекта map при отработке метода drawSomethingOnMap. Это может быть сложно даже с Mockito (хорошо известной тест-библиотекой для Android). Но с протоколом и расширением — это будет выглядеть так:

И теперь ваш метод drawSomethingOnMap использует протокол вместо класса.

Sealed-классы — перечисления на стероидах

Наконец, я хотел бы упомянуть перечисления.

Нет отличий между Java-перечислениями и Kotlin-перечислениями, поэтому тут мне добавить нечего. Но у нас есть кое-что новое взамен, и это «супер-перечисления» — sealed-классы. Откуда взялось понятие «супер-перечисление»? Обратимся к документации Kotlin:

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

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

Это sealed-класс, который является моделью статуса заказа. Очень похоже на то, как мы работаем с перечислениями, но с одной оговоркой. Значение Canceled содержит причину отмены. Причины отмены могут быть разными.

Мы не можем делать так с обычными перечислениями. Если значение перечисления создано — его уже не изменить.

Вы обратили внимание, на другие отличия? Я воспользовался еще одной фишкой sealed-класса. Это — связанные данные разных типов. Классическое перечисления предполагает передачу связанных данных для всех вариантов значений перечисления, и все значения должны быть одного и того же типа.

В Swift есть эквивалент sealed-класса и он называется… перечисление. Перечисление в Kotlin — это просто пережиток Java, и 90% времени вы будете пользоваться sealed-классами. Трудно отличить sealed-класс от перечисления Swift. Они отличаются только названием и, конечно же, sealed-класс передается по ссылке, а перечисление в Swift — по значению. Пожалуйста, поправьте меня, если я не прав.

Мы не прощаемся

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

Источник

Читайте также:  turanabol tablets что это
Информ портал о технике и не только