Результаты поиска по запросу: c
Несколько советов при обучении по видеокурсам
Автор: Infopulse
Введение
В последнее время было много сказано о будущем электронного образования (eLearning), но многие ли понимают, как использовать наиболее популярный формат обучения – видео-обучение? Сегодня постараемся определить несколько подсказок для более эффективного использования видео-обучения.
В первую очередь вам стоит помнить, что просмотр видео курсов ставит вас в пассивную роль, тем не менее у вас остается возможность участвовать в дискуссии с вашими коллегами на форумах, чатах и т.д. Если у вас нет возможности вести обсуждение нового материала с ментором или с учащимся, приучитесь фиксировать свои достижения и затем возвращаться к ним для пересмотра ошибок.
Чередуйте просмотр видео и практические занятия, даже если вы смотрите продолжительный по времени урок, сделайте паузу и выполните часть домашнего задания. Это позволит в лучшей мере освоить пройденный материал и, как говорится, «закрепить» его на практике.
Проецируйте новый материал через призму вопроса «как сделать …?» или «как не делать …?». Это позволит вам быстрее приучиться к мысли, что все новые возможности нужно использовать для решения определенного рода задач. Также помните, что для решения любой задачи может существовать минимум два решения.
Тщательно сохраняйте все выполненные промежуточные практические задания, это поможет вам проводить работу над ошибками, и вы сможете воочию наблюдать ваш рост. Имея историю ваших работ, вы сможете анализировать возможность применения разных технологий для решения одной и той же задачи. Только так, на практике вы оцените, какую технологию лучше использовать в том или ином случае.
Проводите оценку ваших знаний путем сдачи экзаменов и получения сертификатов. Подтверждение ваших знаний в виде сертификатов – это первый шаг к построению успешной карьеры и планового повышения вашего уровня заработной платы.
В ходе обучения работайте над вашим портфолио, неважно в какой сфере вы специализируетесь, уже давно прошли те времена, когда портфолио было только у графических дизайнеров, сегодня каждый уважающий себя разработчик имеет открытый репозиторий на GitHub c личным проектом. Можете даже постить на вашей ленте в Facebook очередные достижения и фрагменты красиво написанного кода. Это будет стимулировать вас и вызовет положительные отзывы у ваших друзей.
Участвуйте в онлайн обсуждениях (интернет-конференции и вебинары). Подобные события позволят вам обзавестись новыми знакомствами и обсудить ваши вопросы с более опытными коллегами.
Как видите, можно легко выработать правила, которые будут полезны и приятны именно вам. В любом случае, помните - обучение должно строиться на сбалансированном распределении внимания между теорией, практикой и публичном заявлении, что вы что-то знаете и умеете.
Гибридные мобильные приложения - миф или реальность? Часть 1
Автор: Дмитрий Ивченко
Введение
Мои коллеги часто задаются вопросом: ”Сколько мы еще будем писать под разные платформы отдельно?”. Им конечно нравится разрабатывать под iOS на Obj-C или на Java под андроид, но снова и снова возникает вопрос о необходимости иметь в своей команде специалиста в обоих направлениях. Иначе вы не сможете дать доступ к сервисам всем вашим потенциальным клиентам.
Если вы хотите достичь большей аудитории, потому что ваши заказчики просят об этом или вы не хотите пропустить доход от миллионов возможных пользователей, вам нужно будет сделать ваше приложение доступным (по крайней мере на двух платформах).
Начните разрабатывать гибридные приложения, которые облегчат сложность разработки для нескольких платформ одновременно. Гибридное направление предполагает разработку приложений как веб-приложений, которые работают в браузере, а затем обертывание их таким образом, что они работают как родные приложения на мобильных операционных системах, таких как IOS, Android или Windows Phone. В дополнение к одной основной полученной кодовой базе, которая значительно упрощает управление жизненным циклом вашего приложения, гибридизованные версии веб-приложения могут быть зарегистрированы с App Store компании Apple или Play Store компании Google.
Эта статья призвана показать вам, как и почему вы должны придерживаться гибридного подхода в своем следующем проекте мобильных приложений.
1.2 Наступило время фреймворков
Разработка начинается с выбора фреймворка, но иногда это нелегкая задача. Они вырастают, как грибы, и может быть трудно выбрать правильный. Вы можете прочитать огромное количество статей, анализировать ваши языки программирования или рассчитать затраты и стоимость каждой из них. А можете просто открыть глаза и подумать, что на данный момент может быть наиболее стабильным, перспективным и бесплатным веб-фреймфорком.
Ответ - AngularJS.
Какие есть гибридные бесплатные фреймворки, которые предоставляют разработчикам неограниченные возможности?
Ответ - Cordova
Давайте объединим эти два удивительных механизма, и мы получим - Ionic Framework.
1.3 Почему именно Ionic
Ionic сочетает AngularJS (JavaScript) с HTML5 + CSS и использует Cordova, чтобы получить доступ к родным функциям устройства. Кроме того, он бесплатный, количество разработчиков и их поддержка растет с каждым днем.
Так что в целом, Ionic предлагает большие возможности для создания гибридных приложений, которые не только удивительно выглядят, но также ведут себя так естественно, как родные приложения и разработаны всего на одной общей базе кода.
В следующей части этой статьи будет рассмотрено как Ionic приложения могут заменить большинство из того, что вы ежедневно используете. Мы расскажем вам, как легко заменить хорошо известные компоненты из родного IOS или Android с помощью HTML5 и JavaScript, какая у них общая структура и как выглядит то, что вы можете достичь с гибридным подходом разработки.
Обзор популярных сервисов тестирования
Автор: Редакция ITVDN
Так как 2017 год совсем недавно остался позади, наша команда решила сделать небольшой новогодний подарок в виде разбора лучших сред автоматического тестирования, обладающих, помимо прочего, открытым исходным кодом.
1. Robot Framework
Robot Framework – это фреймворк для приемного тестирования (Acceptance Testing) и, помимо прочего, так называемого ATDD (Acceptance Test-Driven Development). Среда написана на языке Python, но также может быть развернута в рамках Jython (Java) и IronPython (.NET). По сей причине считается кроссплатформенной, ибо поддерживает Windows, Linux и MacOS соответственно.
Достоинства:
Упрощает автоматическое тестирование благодаря использованию подхода keyword-driven тестирования, в значительной мере помогая тестерам в создании читабельных, легко производимых тестов.
Простота в использовании «тестового синтаксиса».
Имеет в наличии отменную среду, включающую в себя богатый набор различных инструментов и библиотек, выполненных в виде отдельных проектов.
Огромное количество различных API делает систему очень гибкой.
Хотя и не в виде встроенной функции, однако Robot Framework позволяет проводить параллельные тесты при использовании библиотеки pabot или Selenium Grid.
Недостатки:
Трудно настроить структуру html-отчетов.
Примечание: эта среда будет очень полезной, если Вы нацеливаетесь на Keyword-Driven тестирование – и обширная база библиотек и расширений вряд ли заставит Вас в этом усомниться. Однако, чтобы добавить новые ключевые слова (RF test library API) базовые познания Java/Python/C программирования обязательны.
2. JUnit
JUnit – это среда для проведения юнит-тестов для приложений, написанных на языке Java.
Достоинства:
Тесты пишутся при помощи чистейшего Java – одного из лидирующих языков программирования современности.
Поддерживает TTD.
Позволяет создать свой собственный пакет для юнит-тестирования.
Прекрасно интегрируется в различные инструменты разработчика (к примеру – Maven) или среды разработки (к примеру, IntelliJ).
Благодаря достаточно высокой популярности поиск документации не составляет труда.
Недостатки:
Если необходимо использовать возможности mock-объектов, пользователь вынужден прибегать к помощи сторонних библиотек (Mockito или другие).
Чтение тестов у людей без технического образования может вызвать затруднения, так как, к примеру, имена методов в JUnit ограничены условностями языка Java.
Примечание: для тех разработчиков, которые желают писать юнит-тесты для собственных Java-приложений JUnit, пожалуй, лучшее из того, что можно бы пожелать. Однако, в случае если речь идет о функциональном тестировании программ, написанных на других языках, вероятно, Вам стоит выбрать другую среду.
3. Spock
Spock – это среда тестирования и спецификации для приложений, написанных на языках Java или Groovy. За основу взята среда JUnit.
Достоинства:
Позволяет создавать читабельные тесты с поддержкой чисто английских предложений, без необходимости следовать ограничениям языков программирования.
Предоставляет информативный контекст возникнувшей проблемы. Плюс, дает легко понять, что необходимо сделать, дабы исправить обнаруженный недостаток.
Имеет встроенную поддержку mock и stab объектов.
Поддерживает DDT (Data-Driven Tests).
Недостатки:
Требует базовых знаний языка программирования Groovy.
Примечание: идеально подойдет, если Ваше приложение базируется на JVM, плюс, Вы нацеливаетесь на BDD автоматическое тестирование с DSL.
4. NUnit
NUnit – среда для юнит-тестирования языков .NET виртуальной машины. Имевшей однажды огромное влияние JUnit, среда NUnit была полностью написана на C#. Помимо прочего, в арсенале так же имеется целый спектр новых возможностей, позволяющих использовать все преимущества языков .NET.
Достоинства:
Быстрая инициализация и выполнение теста.
Использует методы типа Assert с поддержкой аннотаций.
Позволяет проводить параллельное тестирование.
Поддерживает TDD.
Недостатки:
Так как использует только языки .NET стандарта, не является кроссплатформенным.
Интеграция в среду Visual Studio не представляется возможной. Использование NUnit означает больше расходов на сопровождение проекта.
Примечание: прекрасный фреймворк юнит-тестирования для C# с открытым исходным кодом, долгой историей и проверенной репутацией. Однако, в случае, если вы уже активно работаете с .NET языками, обратите свое внимание на MSTest.
5. TestNG
TestNG – сервис автоматического тестирования для Java. По сути, это те же JUnit и NUnit, но с улучшениями и новым функционалом (ибо NG читается как «новое поколение» - Next Generation). Среда была разработка для покрытия всех видов тестирования, которые только могут понадобится. А именно: юнит-тестирование, функциональное тестирование, тестирование интеграции и прочее.
Достоинства:
Прост во внедрении в проект.
Позволяет разработчику писать гибкие и всеобъемлющие тесты.
Поддерживает DDT.
Простые в понимании аннотации.
Простота в группировании тестовых кейсов.
Позволяет создавать параллельные тесты.
Недостатки:
Так как поддерживает только Java, Вы должны иметь хотя бы базовые познания этого языка.
Установка и калибровка среды тестирования занимает время.
Примечание: если вы работаете с Java, ищите инструмент для мульти задачного тестирования и можете уделить некоторое время на установку программы – TestNG определенно для Вас.
6. Jasmine
Jasmine – среда для юнит-тестирования JavaScript. Так же известен как Behavior Driven Development (BDD) подход JavaScript тестирования. Идеально подходит для веб-сайтов, проектов Node.js и вообще для всего, где JavaScript может найти свое применение. В основном используется в связке с AngularJS.
Достоинства:
Кроме JavaScript, так же может быть применен по отношению к Python или Ruby. Чрезвычайно полезен, если Вам нужен один сервис тестирования как для клиентской разработки, так и для серверной.
Поддерживается множеством CI (Codeship, Travic и прочее).
Имеет встроенный Assert-синтаксис.
Недостатки:
В большинстве сценариях требует прогонщика тестов (такого как Karma).
В случае с асинхронным тестированием возникают трудности.
Примечание: Jasmine может оказаться прекрасным решением, если Вы нуждаетесь в унифицированном (клиент-серверном) сервисе юнит-тестирования.
7. Mocha
Mocha – это еще один сервис JavaScript юнит-тестирования с занятным для русскоязычного сектора названием и отнюдь не банальным функционалом. Используется на NodeJs, в основном часто применяется в связке с ReactJS.
Достоинства:
Обладает встроенным тестовым прогонщиком.
Поддерживает асинхронное тестирование.
Позволяет большую гибкость, так как Вы спокойно можете использовать любую Assert-библиотеку (Chai, expect.js, Must.js прочие), которая будет отвечать Вашим требованиям (как замена стандартной NodeJs функции «assert»).
Недостатки:
Относительно новый сервис (появился в 2012 году), что означает он в активном развитии и некоторые аспекты технологии могут быть не до конца задокументированными.
Предоставляет только базовую структуру тестов, плюс требует дополнительную ручную установку и конфигурацию (для кого-то может быть плюсом).
Примечание: если Вы ищите независимую среду юнит-тестирования для JavaScript, Mocha – Ваше все!
А какую среду автоматического тестирования используете Вы? Что хорошего и что не очень Вы могли бы о ней сказать? Пожалуйста, приобщайтесь к дискуссии в комментариях! 😊
Автор перевода: Евгений Лукашук
Оригинал статьи
Система контроля версий “просто, как двери” или как научиться пользоваться git за пару часов
Автор: Дмитрий Ивченко
Введение
Я достаточно давно использую git практически во всех проектах. За это время я успел многому научиться и хочу поделиться опытом с читателями. Как известно, все новое пугает. Так говорит половина моих знакомых, которые не захотели потратить пару часов, чтобы разобраться с git раз и навсегда. Скорее всего, после прочтения этой статьи и они, и вы поймете, что это проще, чем кажется.
Я постараюсь показать, как эта VCS (Version Controll System) помогает разрабатывать проект. Эта статья рекомендована к прочтению тем, кто только делает первые шаги в разработке больших проектов.
Итак, Git — это «распределенная система контроля версий», где «система контроля версий» означает то, что она запоминает историю изменения своих файлов, а распределенная значит то, что мы можем работать с ней без доступа к интернету.
Для того чтобы начать:
Git акаунт на https://github.com
Консоль или же графический интерфейс.
Человек по ту сторону монитора, что сможет это поставить под свою ось, будь то Windows, Mac OS или Linux .
Моё окружение - это Mac OS X + Webstorm + Git + Bash .
Если у вас Windows, то, скорее всего, будет msysgit (git-bash) + TortoiseGit.
Как вы уже поняли, придется работать с консолью, потому вам будет необходимо усвоить несколько команд для установки git на вашу операционную систему.
Поговорим немного о том, как же установить git:
Установка для Linux
Установить Git под Linux как бинарный пакет можно, используя обычный менеджер.
Если у вас установлена Fedora, можно воспользовать yum:
$ yum install git-core
Если же у вас дистрибутив, например, Ubuntu, то вам нужно:
$ apt-get install git
Установка для Mac
Существует два способа установки Git на Mac OS X.
Первый - использовать графический компоновщик Git, который вы можете скачать здесь:
http://goo.gl/nB31LK
или же, для более продвинутых пользователей, просто вставьте следующую строчку в терминал
$ sudo port install gitweb + git-core +doc + bash_completion
Установка в Windows
Настроить Git в Windows просто: у проекта msysGit процедура установки самая легкая. Просто скачайте *.exe инсталлятор на GitHub:
http://goo.gl/cmGQSj
После установки у вас будет и консольная версия, и стандартная графическая.
Остались вопросы по установке?
Тогда вам сюда - https://goo.gl/lec2M0
Git — это коллекция инструментов для решения определенных проблем. Давайте рассмотрим компоненты Git пошагово:
Коммиты
Коммит (патч) — показывает некоторые изменения в файлах, что подверглись изменениям с момента предыдущего коммита. Коммит также содержит заголовки, в которых есть автор, время его создания и прочее. Git-коммит шифрует это в заголовке «parent», указывая, после какого коммита его нужно наложить.
Как применить коммит к другому коммиту?
Мы можем применить коммит только к полному набору файлов. Но после этого мы получим измененный набор файлов. Поэтому «коммит» также показывает состояние репозитория после добавления нового патча.
История Git — это вся цепочка изменений для воссоздания кодовой базы с нуля, коммит за коммитом. История коммиттов может выглядеть так:
Commit C: Родитель — B.
Добавь “Systematics” в конец файла «readMe.txt».
Commit B: Родитель — A.
Добавь “Bionic” в конец файла «readMe.txt».
Commit A: Создай файл «readMe.txt», содержащий “Cyber”.
Commit A здесь первый, это значит, что у него нет родителя. Это значит, что его патч может только добавить новые файлы — в репозитории нет никаких существующих файлов для изменения. Во всем остальном это такой же коммит, как и все остальные.
Итак, мы начинаем с пустого файла. Затем мы применяем патч A, который дает текст “Cyber”. Затем мы можем применить патч B, который даст нам “Cyber Bionic”. Наконец, мы применяем C, который дает “Cyber Bionic Systematics”.
Визуализация Git изображает историю коммиттов слева-направо, описанное выше будет выглядеть так:
A → B → C.
Тэги
Тэги — имена для коммитов, чем-то похожие на ветки. Однако, тэги должны быть постоянными: они, в основном, используются для названий версий релизов. Вы можете переключаться по тэгу, но тэг не может быть вашей «текущей веткой», и тэг никогда не появится автоматически, если вы коммитите впервые.
Также тэги (чаще всего) глобальные, с неограниченным пространством имен, как ветки.
Как просмотреть историю последних коммитов:
git log покажет название последних трех коммитов в ветке.
git log --oneline --graph --decorate намного лучше для просмотра (можете сами убедиться). Вы также можете установить tig, который делает, в основном, то же самое, но вы сможете использовать Enter на коммите, чтобы увидеть различия.
git log --follow показывает нам все изменения, только для конкретного файла (директории). --follow означает - следить за историей файла, включая изменение имени файла.
А сейчас время для команд, которые вы будете писать каждый день по многу раз
$ git status покажет, в какой ветке вы находитесь и какие файлы подверглись изменениям.
git add file_name добавляет только указанный файл (файлы) к патчу.
git add -A (all) добавляет к патчу все изменения, которые нужны вам в последующем коммите.
git commit -a откроет редактор для ввода текста коммита, затем будет создан коммит со всеми произведенными изменениями.
git commit -m “what is to change” запишет коммит и даст ему то описание, которое есть в скобках
git branch name создает новую ветку под названием name, основаную на коммите, но не переключается на нее. Для этого тебе понадобиться команда: git checkout -b origin/develop, которая создаст новую ветку, основанную на origin/develop, или на той, в которой вы находитесь, и переключится на нее.
git checkout производит переключение в ветку, которую вы укажите. Вы также можете перейти в удаленную ветку, в тэг или в конкретный коммит.
git rm file_name говорит Git, что ты собираешься удалить файл, а также удаляет его физически.
Конфликты слияния
Если вы делаете слияние или отправку изменений, возможно, ваши изменения будут конфликтовать с чужими. Git выведет сообщение:
"Автоматическое слияние не удалось, вы должны сделать это вручную".
Если вы посмотрите git status, то обнаружите новую секцию для конфликтующих файлов. И вам нужно это исправить, чтобы завершить слияние.
Откройте конфликтующий файл и увидите что-то вроде этого:
<<<<<<<
то что мы изменили
========
то что сделал ваш предшественник
>>>>>>>> origin/develop
Это говорит нам о том, что двое людей отредактировали одни и те же строки в том же самом файле по-разному, а Git не знает, что должно быть результатом.
Просто отредактируйте файл, как нужно, и выполните git add -А, чтобы сообщить Git, что вы готовы к отправке. Когда все конфликты будут решены и все файлы добавлены через git add -A, сделайте простой git commit для полного слияния.
Примечание:
Проверяйте, что вы действительно исправили все конфликты в файлах после слияния.
Иногда, конфликт - это когда один программист отредактировал файл, а другой удалил этот файл. Когда такое случается, Git покажет тебе, кто что сделал.
Надеюсь, что статья дала вам много новых знаний. И если это так - то вперед, создавать первый репозиторий на github.com и закреплять все, что прочитали.
Обзор текстовых редакторов и некоторых полезных плагинов
Автор: Антон Гончаров
Введение
Привет всем. Многие студенты, которые решили связать свою жизнь с програмированием, задаются такими вопросами:
- что выбрать своим главным инструментом в работе?
- чем пользуется большинство?
- чем пользоваться при написании своего кода?
- что лучше?
На эти вопросы нет однозначного ответа, каждый редактор по-своему хорош. Но постараюсь описать главные возможности тех редакторов, с которыми я сам столкнулся и пользовался в своей практике.
Сразу внесем ясность и расставим точки над i. Средства разработки делятся на два главных класса:
1 – Интегрированные среды разработки (IDE)
2 - Текстовые редакторы (text editor)
Официальное определение интегрированная среда разработки можно найти по адресу: https://ru.wikipedia.org/wiki
Официальное определение текстовый редактор по адресу: https://ru.wikipedia.org/wiki
Попытаюсь объяснить разницу между двумя этими классами своими словами.
Интегрированная среда разработки - это как швейцарский нож или трактор, он мультифункционален, а следственно, и граничен. Может делать много, но некоторые вещи делает не так, как нам хотелось бы. Посудите сами: трактор ведь может тянуть тяжелый груз, копать и, главное, может передвигаться. Но все это он делает медленно. К примеру, если стоит задача переместиться из пункта “А” в пункт “Б” (что является одной из функций трактора), для этого лучше пригодится спорткар или обычный легковой автомобиль, для этой операции нами не нужен трактор со всеми его функциями. Следовательно, мы можем сделать вывод, что для определенных операций нам нужны определенные инструменты. В этой статье я не буду рассматривать IDE и их фичи (feature). Хочу рассказать о главных текстовых редакторах и их возможностях.
Мой TOP текстовых редакторов:
1. Sublime Text
2. Brackets
3. Visual Studio Code (на этом месте был Atom)
Пробовал, но не понравились/не подошли, по каким-либо причинам (поэтому не рассматриваю их тут)
1. Notepad++ (Сайт https://notepad-plus-plus.org/)
2. Komodo Edit (Сайт http://komodoide.com/komodo-edit/)
3. Atom (Сайт https://atom.io/)
4. Textmate (Сайт https://macromates.com)
Итак ,начнем.
Sublime Text 3
сайт: http://www.sublimetext.com/3
Чем нравится:
кроссплатформенный
легкий
большая и понятная библиотека плагинов (дополнений)
легко настроить под себя
Что следует сделать после установки.
Зайти на сайт https://packagecontrol.io/installation
И сделать все согласно инструкции, открыть консоль Саблайма: найти вкладку View и кликнуть Show Console. В появившемся снизу поле ввода вставить следующий код:
import urllib.request,os,hashlib; h = 'eb2297e1a458f27d836c04bb0cbaf282' + 'd0e7a3098092775ccb37ca9d6b2e4b7d'; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); by = urllib.request.urlopen( 'http://packagecontrol.io/' + pf.replace(' ', '%20')).read(); dh = hashlib.sha256(by).hexdigest(); print('Error validating download (got %s instead of %s), please try manual install' % (dh, h)) if dh != h else open(os.path.join( ipp, pf), 'wb' ).write(by)
Должно получиться вот так:
Жмем Enter.
Так мы установили Package Control в наш Sublime. Теперь мы можем устанавливать плагины в редактор, нажав сочетание клавиш
Ctrl+Shift+P on Windows/Linux, ⇧⌘P on OS X
На сайте https://packagecontrol.io/ вы найдете множество плагинов с детальным описанием, руководством установки и руководством использования.
Теперь о плагинах.
Плагин – грубо говоря, это дополнение программы. Официальное определение
https://ru.wikipedia.org/wiki
Плагины, которые пригодились мне в работе, возможно, пригодятся и вам.
1. Emmet - https://packagecontrol.io/packages/Emmet
Плагин, который помогает быстро набирать код. С помощью шпаргалки вы быстро научитесь быстро набирать сложные конструкции html, указав лишь название тега и порядок иерархического положения елемента на странице. Его официальный сайт http://emmet.io/ и шпаргалка http://docs.emmet.io/cheat-sheet/
Еще одно условие: для работы этого дополнения нужен предустановленный nodeJS. Найти его можно тут: https://nodejs.org/
Думаю, что nodeJS у вас уже был предустановлен, а если не был, то он вам точно еще пригодится не раз.
2. SublimeCodeIntel - https://packagecontrol.io/packages/SublimeCodeIntel
Плагин портирован из текстового редактора Komodo Editor, помогает автодополнением к языкам программирования JavaScript, Python, Ruby, XML, HTML, CSS, PHP и другим.
3. SideBarEnchancements - https://packagecontrol.io/packages/SideBarEnhancements
Плагин открывает новые возможности боковой панели для работы с Вашими проектами.
4. BracketHighlighter - https://packagecontrol.io/packages/BracketHighlighter
Плагин позволяет отображать дополнительные скобки возле номеров строк, отображая, к примеру, блоки кода.
5. AutoFileName - https://packagecontrol.io/packages/AutoFileName
Плагин говорит сам за себя, когда мы пишем пути к нашим фалам, помогает, выводя дополнительное выскакивающее окошко, с выбором папок или файлов.
6. HTML-CSS-JS Prettify https://packagecontrol.io/packages/HTML-CSS-JS%20Prettify
Плагин “расческа”. Причесывает наш код, делает его более читабельным для человеческого глаза.
7. Color Highlighter - https://packagecontrol.io/packages/Color%20Highlighter
Плагин подсвечивает цвета при написании вайлов CSS/Less/SASS/SCSS/Stylus.
Остальные плагины, для работы с такими библиотеками как jQuery, Bootstrap, AngularJS, советую устанавливать осторожно, потому как постоянно выскакивающие окошки с помощью какого либо плагина если не пугают, то начинают очень надоедать. Поэтому советую не превращать текстовый редактор в “неубранный балкон”.
Также есть возможность установки из того-же Package Control множества тем и цветовых схем. Темы и цветовые схемы отличаются тем, что тема меняет полностью весь внешний вид Sublime, цветовая схема меняет только цвета подсветки синтаксиcа.
Файл настроек находится во вкладке Preferences>Settings Default/Settings User. Почему именно два файла? Потому что вы сможете изменять только Settings User. Оба файла являются, по сути, JSON объектами, поэтому разобраться и изменять свои настройки вы научитесь довольно быстро.
Brackets
сайт - http://brackets.io/
Этот текстовый редактор также поддерживает большинство перечисленых плагинов, и даже если таковых вы не найдете, то их аналоги точно есть в песочнице.
На правой боковой панели вы найдете несколько кнопок:
Первая в виде молнии – LivePreview. Запускает страницу с рашрирением html в вашем браузере, который установлен по умолчанию, браузер будет сам обновлять страницу.
Вторая в виде лего – Extension Manager. При клике вызывает модальное окно в, котором содержатся вкладки меню для выбора плагинов, тем, их установке и удалению.
Третья в виде “слоев торта” со стрелочкой вверх – Extract for Brackets. Ради этой кнопки и стоит устанавливать этот редактор.
Она позволяет после регистрации загрузить файлы psd формата для верстки прямо из текстового редактора, не загружая ничего больше.
Кликаете по кнопке Open PSD
Регистрируетесь или же входите под своим Adobe ID, загружаете PSD шаблон и начинаете верстать в разы быстрее.
Кликнув по какому либо элементу на шаблоне, вы можете моментально перенести: текст, css свойства, или же выгрузить картинку из шаблона пряму в папку с проектом.
С такими возможностями верстка становится в разы быстрее! Не агитирую, просто советую попробовать)
Visual Studio Code
сайт - https://code.visualstudio.com/
Бесплатный кроссплатформенный текстовый редактор, основанный на технологиях замечательного текстового редактора Atom от GitHub. Подробное описание можно прочитать по ссылке ниже:
https://uk.wikipedia.org/wiki/Visual_Studio_Code
Также будет полезна ссылка с документацией:
https://code.visualstudio.com/Docs/setup
Отличный текстовый редактор от компании Microsoft.
Облегченная и кроссплатформенная версия Visual Studio. Имеет схожий дизайн со своим старшим собратом. Похожие темы и подсказки в виде выпадающих окошек (контекстные подсказки). Так что разработчикам, перешедшим с Visual Studio, будет гораздо легче адаптироваться.
Еще несколько плюсов с коробки:
поддержка таких языков програмирования: JavaScript, C++, C#, PHP, XML, Java, Objective-C, HTML, CSS, Less, Sass и т.д. (полный перечень находится в документации).
отладчик
инструменты для работы с Git
автодополнения в стиле Emmet.
Настоятельно рекомендую обратить внимание и попробовать Visual Studio Code. Даже просто потому, что вы установите его и все, дальше просто приступаете к работе :)
На этом все. Думаю, что изложил свои мысли достаточно простым языком. Помните, что не важно, в каком текстовом редакторе или IDE вы работаете, это всего лишь инструмент, в конечном итоге вы можете остановить свой выбор на обычном блокноте и там разрабатывать приложения, для того, чтобы писать программы не обязательно иметь подсветку синтаксиса, всякие плюшки, главное, чтобы вам было удобно и при написании вы чувствовали себя комфортно.
Выбор за вами. Удачи!
Какую IT-специальность выбрать в 2023 году?
Автор: Влад Сверчков
Кратко об украинском IT в 2022 году.
Украинский IT-специалист в 2022 году.
Аналитические обзоры современного IT.
Какие IT-специальности будут востребованы в 2023 году?
Кому нужно хорошее владение английским языком?
Выводы.
Приветствуем наших читателей!
Украинское IT демонстрирует отличную прочность и адаптивность даже в условиях полномасштабной войны. Да, многим айтишникам пришлось осуществить вынужденное переселение в другие регионы страны или даже в другие государства, чтобы находиться в относительной безопасности. Однако большинство сохранило за собой работу и доходы, позволяющие не только обеспечивать себя и свои семьи необходимыми условиями и средствами для жизни, но еще и активно донатить на армию и разнообразные волонтёрские проекты – средний донат по состоянию на июнь 2022 года составил $270 в месяц (в соответствии с результатами опроса на DOU).
Стабильность и хорошие условия труда, возможность удалённой работы из любой точки мира, где есть интернет, большое количество IT-направлений на выбор – эти и другие особенности стали очень востребованными у многих украинцев. Появилось большое количество желающих попробовать свои силы в IT и вместе с тем созрели главные вопросы: “С чего начать? Какую IT специальность выбрать в 2023 году?”.
А ведь действительно – как грамотно оценить ситуацию на рынке IT и выбрать себе специальность, которая будет:
нравиться;
иметь хорошие карьерные перспективы;
обеспечивать удовлетворительные условия труда и ЗП?
Будем разбираться с этим в данной статье. Мы рассмотрим самые главные специальности, которые будут оптимальными для новичков и будут пользоваться спросом на рынке IT ещё долгое время.
Кратко об украинском IT в 2022 году
Не успел мир оправиться от кризиса, вызванного коронавирусом, как сразу появился новый в результате полномасштабного вторжения россии на территорию Украины.
Согласно аналитике Opendatabot – украинского ресурса, который предоставляет доступ к государственным данным и анализирует открытые данные, – IT-услуги стали единственным направлением бизнеса, которое показало прирост в 2022 году по сравнению с 2021 – на 27% (январь-май 2022). А второе исследование показывает, что за 8 месяцев этого года произошел рост экспорта IT-услуг на 16% по сравнению с соответствующим периодом в 2021 году. В августе 48% всех экспортируемых Украиной услуг принадлежали именно IT-отрасли.
Красноречива и статистика Джина – украинского ресурса по анонимному поиску вакансий.
Спрос на Djinni превышает количество предложений почти в три раза. В сентябре – 18 779 открытых вакансий и 52 405 кандидатов.
Из поста в телеграм-канале Джина легко видеть, что в августе 2022 было более 250 тысяч отзывов на вакансии – это при том, что с августа 2021 по февраль 2022 количество отзывов каждый месяц колебалось в пределах от 77 до почти 111 тысяч.
Еще один августовский пост демонстрирует зависимость среднего количества отзывов на вакансию от требования к опыту кандидата. Таким образом:
кандидаты без опыта – 75.25 отзывов на вакансию;
1 год опыта – 31.36 отзывов;
2 года – 12.39;
3 года – 5.76;
5 лет – 4.1.
У новичков сезон настоящих "голодных игр".
Тем не менее, IT-сектор демонстрирует хорошую стойкость и положительную динамику, несмотря на проблемы, принесенные войной. Это перспективная отрасль, которая не только дает массу преимуществ украинцам-айтишникам, но и хорошо подпитывает экономику.
Следует не забывать, что такая успеваемость во многом зависит от зарубежных заказчиков, ведь большинство украинских IT-продуктов и IT-услуг экспортируются за границу – примерно 95% (по материалам “Экономической правды”).
Украинский IT-специалист в 2022 году
Обратимся также и к свежему портрету украинского IT-специалиста от DOU за 2022 год (15 135 респондентов).
Наибольшее количество мужчин по направлениям:
DevOps, SRE (97.3%);
системное администрирование (95.8%);
CTO, высшие руководящие должности (92.9%);
разработка ПО, Software Engineering (91.3%);
разработка игр (89.5%);
Data Science (80.3%);
техническая служба поддержки (70%);
тестирование (65.8%);
менеджерские должности (64,9%).
Наибольшее количество женщин в HR/Recruiting (90%), маркетинге (64%) и техническом писательстве (62%). За ними следует дизайн (45.6%), сфера продаж (44%) и аналитика (42.5%).
Согласно картинке выше, наибольшее количество опрошенных украинских айтишников работает в качестве разработчиков. Далее следует профессия тестировщика, менеджера, HR/рекрутера и т. д.
Из картинки выше видно, что чаще всего респонденты имеют тайтл Middle (1-5 лет опыта) и Senior (3-9 лет). Разработчики уровня Junior составляют 16.2% (до 2-х лет опыта), а интерны – всего 1.3% (без опыта).
Наибольшее количество начинающих (Junior и Intern) среди:
HTML Coder (45%);
Data Science (27%);
Game Developers (25%);
аналитики (24%);
тестировщики (23%).
При этом IT Украины насчитывает большое количество начинающих. 6% опрошенных находятся в IT менее года, 59% трудоустроены в IT 5 лет или менее, а 71% имеют до 6 лет опыта по своей текущей специализации.
87% респондентов имеют высшее образование, а 8% из них – даже два. Еще 5% являются студентами и только на пути к получению диплома. Научной степенью владеет около 2% опрошенных. Чаще всего это те, кто разрабатывает ПО под различную электронику (Hardware Engineers – 9%), Data Science специалисты (7%) и представители высших руководящих должностей – CTO/CEO (6%).
Касательно английского: в этом году 53% респондентов оценили свой уровень как Upper Intermediate (выше среднего) или Advanced (углубленный). 33% определяют свой уровень как Intermediate (средний).
На изображении мы видим, что наиболее интересная работа у руководителей высшего звена (а кто бы сомневался?), специалистов в сфере маркетинга и HR/рекрутеров (критерии "цікава" (интересная) и “дуже цікава” (очень интересная)).
Наиболее недовольными оказались сисадмины, Support и специалисты по продажам. Специалисты первых двух направлений специализируются на решении технических проблем, поэтому частые дергания во время работы, необходимость быстро все починить и аффилированные с этими процессами стрессы для них не редкость. Еще можно добавить относительно невысокую медианную ЗП – $1000-$1045 – чуть выше Junior разработчика. А недовольство специалистов по продажам можно связать с большой ответственностью и последствиями частого общения с различными клиентами: Sales Manager должны всегда демонстрировать уверенность, знать все о своей компании и своем продукте, действовать так, чтобы не запятнать их имидж, быстро находить ответы на вопросы клиентов и выполнять другие профессиональные обязанности.
Аналитические обзоры современного IT
Воспользуемся аналитикой всемирно известного ресурса Stack Overflow, которым пользуется абсолютно каждый программист современности. Сравним последние на сегодняшний день опросы, проведенные данным ресурсом – Stack Overflow Developer Survey 2022 (70 000 респондентов) и Stack Overflow Developer Survey 2021 (80 000 респондентов). В опросах принимали участие специалисты из различных уголков мира.
Из иллюстрации выше видно, что наиболее популярными направлениями, в которых работают IT-специалисты, являются:
Электронная коммерция – интернет-магазины, финансовые и торговые сделки и транзакции, проведенные через интернет и т. д.
Финансовые технологии – оптимизация и усовершенствование финансовых услуг, оказываемых тем или иным бизнесом, компанией, корпорацией и т. д.
Разработка мобильных приложений под Android и iOS.
Медиасфера.
Медицинские технологии – улучшение качества и безопасности медицинских услуг различного характера.
Разработка игр под различные платформы.
Далее следуют направления, которые в этом году не пересекли 5-процентный барьер.
Из изображения выше видно, что наибольшее количество специалистов относится к следующим IT-направлениям:
FullStack – разработка серверной + клиентской части веб-приложений;
BackEnd – серверная сторона веб-приложений;
FrontEnd – клиентская сторона веб-приложений;
Desktop or enterprise – разработка настольных приложений (Desktop приложений), разработка приложений для нужд бизнеса (Enterprise).
На следующих позициях идут:
разработчики мобильных приложений – как под Android, так и под iOS;
DevOps специалисты – синхронизируют все этапы разработки ПО: от создания кода до тестирования и релиза;
инженеры облачных технологий – занимаются облачной (cloud) инфраструктурой;
администраторы баз данных;
системные администраторы.
Просмотрим первые позиции этого же рейтинга, но за 2021 год.
Наблюдаем аналогичную картину: первые позиции заняты направлениями FullStack, BackEnd, FrontEnd, Desktop, Enterprise, Mobile Development, DevOps.
Обратимся и к рейтингам языков программирования. Опрос Stack Overflow 2022:
Опрос Stack Overflow 2021:
Первое место в обоих рейтингах занимает язык программирования JavaScript, широко применяемый в web девелопменте (и во FrontEnd, и в BackEnd областях). Далее следуют языки верстки – HTML & CSS – инструменты, которые используют при создании визуальной составляющей веб-сайтов и веб-приложений (FrontEnd). На третье место попадает SQL – язык запросов для работы с реляционными базами данных (БД), который обязательно используют разработчики серверной части веб-приложений, администраторы БД и другие специалисты.
Python, Java и C# – очень востребованные среди работодателей и популярные среди разработчиков языки программирования, отличающиеся широким спектром применения, понятностью синтаксиса, относительной простотой. Они попадают в каждый ТОП-10 различных языковых опросов уже много лет; их перспективность и актуальность обещает удерживаться еще долгое время. Особой популярностью пользуется Python, поскольку его синтаксис максимально прост и лаконичен.
TypeScript – это тот же JavaScript, только с несколькими нововведениями и строгой типизацией для увеличения читаемости кода, а также уменьшения количества возможных ошибок. Используется в веб-разработке вместе с соответствующими фреймворками и платформами.
Node.js – платформа, которая расширяет возможности и область применения JavaScript (бэкенд, настольные приложения, микроконтроллеры).
Bash/Shell/PowerShell – инструменты, которые чаще всего пригождаются системным администраторам и DevOps инженерам, потому что позволяют автоматизировать различные рутинные процессы, благодаря чему они и получили высокие позиции в рейтинге.
C/C++ – это современные корифеи от мира IT-разработки. Непростые в изучении языки, которые имеют очень большие возможности и мощности. Незаменимы при создании ресурсоемкого ПО, игр, микроконтроллеров и т. д.
PHP – классический язык серверной разработки. Несмотря на возраст, до сих пор популярен и востребован.
Рассмотрим также и рейтинг языков в соответствии с индексом TIOBE. Он ежемесячно оценивает популярность языков программирования и считается респектабельным источником – масса аналитиков ссылается на него в ходе своих исследований.
Рейтинг TIOBE отличается от опроса Stack Overflow – это связано с разницей опорных точек этих аналитик. Стек оверфлоу опирается на опрос, статистика TIOBE основывается на количестве квалифицированных инженеров во всем мире, а также на количестве курсов и сторонних поставщиков. Такие известные поисковые движки и сервисы, как Google, Yahoo!, Wikipedia, Amazon, Bing, YouTube и Baidu используются в расчете рейтингов. Следует отметить, что TIOBE не указывает, какой язык является наилучшим, или на каком написано наибольшее количество кода. Он может быть использован, чтобы обнаружить, соответствуют ли ваши навыки запросам современности, или чтобы принять стратегическое решение относительно того, какой язык следует использовать для создания нового приложения или программной системы. Больше информации о методах определения индекса по ссылке.
Рейтинг языков в соответствии с индексом PYPL выглядит следующим образом:
PYPL создан за счет анализа того, насколько часто люди ищут в поисковике Google туториалы (инструкции, документации) по языкам программирования. Проще говоря, чем больше гуглят туториалы к тому или иному языку, тем выше его позиция в рейтинге.
Рассмотрим список популярных веб-технологий в соответствии с опросом Stack Overflow за 2022 и 2021 годы соответственно:
Как видно из диаграмм, главные позиции принадлежат FrontEnd библиотекам и фреймворкам – jQuery, React.js, Vue.js, Angular, BackEnd-технологиям (Node.js, Express), а также технологиям .NET платформы – ASP.NET и ASP.NET Core. После них идут фреймворки Django и Flask (Python).
Список других фреймворков, библиотек и инструментов разработки:
Первое место сейчас занимает платформа .NET от компании Майкрософт. Затем следуют технологии направления Python: NumPy (дает доступ к ряду математических конструкций), Pandas (манипулирование данными и их анализ). За ними – фреймворк Spring (Java), предназначенный для веб-разработки. Менее популярны инструменты Python для работы с данными и ML – TensorFlow, Scikit-learn, а также платформы для мобильной разработки – Flutter и React Native.
Полученные сведения уже дают достаточное представление о том, что сейчас происходит на рынке IT-услуг и позволяют делать определенные прогнозы относительно востребованности IT-профессий.
Какие IT-специальности будут востребованы в 2023 году?
FrontEnd Developer
FrontEnd – это ответвление в разработке, направленное на создание клиентской стороны веб-приложений, веб-сайтов или другого ПО и информационных систем: внешний вид приложений, пользовательская логика, анимации – все, с чем пользователь может взаимодействовать напрямую.
Когда говорят о FrontEnd или BackEnd, чаще всего подразумевают именно Web стихию. На самом же деле, фронтенд и бэкенд бывают не только в вебе, но и в десктопных и мобильных приложениях. Однако исторически сложилось так, что под этими двумя терминами понимают именно веб составляющую, поэтому и в этой статье мы будем придерживаться этих традиций.
Согласно анализу Stack Overflow Developer Survey 2022 и 2021 годов, а также анализу индексов TIOBE и PYPL, ядро фронтенда – HTML, CSS и JavaScript – до сих пор востребовано и используется многими разработчиками.
Кроме того, ресурсы поиска работы в IT содержат большое количество вакансий FrontEnd Developer. Например, на уже упомянутом Djinni на момент написания статьи было опубликовано 1399 предложений по направлению JavaScript / FrontEnd, тогда как на C# / .NET, Java и Python специальности приходилось 678, 884 и 514 вакансий соответственно.
IT-индустрия имеет большой спрос на FrontEnd разработчиков, поэтому нет никаких сомнений, что это направление будет актуально и в 2023 году.
BackEnd Developer (Python, Java, C#, PHP)
BackEnd – это ответвление в разработке, направленное на создание серверной стороны веб-приложений или веб-сайтов: взаимодействие приложения с БД, работа с данными пользователя, серверная и вычислительная логика, программно-аппаратная часть сервиса – всё, что скрыто от пользователя и находится “под капотом”.
На вооружении BackEnd девелопер держит один из популярных языков программирования: C# / PHP / Python / Java / JavaScript (Node.js) / Ruby и т. д. Также данный специалист знает множество сопутствующих технологий и инструментов серверной разработки.
BackEnd развивается параллельно с FrontEnd-ом, айти-рынок имеет много соответствующих предложений с хорошими условиями труда, поэтому перспективность изучения данного направления очевидна.
Full Stack Developer
Синтез двух вышеописанных специальностей. Не секрет, что любой работодатель ценит сотрудника, который может успешно выполнять несколько задач, совмещая в себе обязанности других специалистов. Так же и в IT – особенно ценны разработчики, которые способны своими знаниями и навыками покрыть несколько профессий, а в данном случае – FrontEnd и BackEnd.
Подробный разбор специальности Full Stack Developer вы найдете в нашей статье. Там мы объясняем специфику данного направления, необходимые для изучения технологии, преимущества и недостатки профессии, а также даем важные советы по овладению этой профессией.
Mobile Developer (Android / iOS)
Мобильная разработка является относительно молодой, поскольку зародилась чуть более двух десятков лет назад. За это время она претерпела многие изменения и сегодня возглавляет одну из главных позиций в IT. При этом наработками специалистов этой сферы пользуется почти каждый человек — это не только смартфоны и планшеты, но и фитнес-браслеты, смарт часы, электронные книги, составляющие «интернета вещей» и другие гаджеты.
Наиболее популярные языки мобильной разработки: Java / Kotlin под Android разработку и Objective-C / Swift под iOS.
DevOps инженер
DevOps – это методология, являющаяся симбиозом разработки (Development) и системного администрирования (Operations). Её главная цель – увеличение частоты выпуска релизов. Специалисты данного направления также должны разбираться в использовании облачных технологий и обладать навыками автоматизации инфраструктуры.
DevOps Engineers выбирают Python в качестве основного языка программирования за его лаконичность, многозадачность и поддержку большого разнообразия специальных пакетов, созданных для повышения эффективности этого языка программирования, а также за другие преимущества. Python в основном используют вместе с командной оболочкой Bash с целью упростить процессы развертывания ПО и автоматизировать различные задачи системного администрирования (написание скриптов).
Фактически, DevOps специалисты – это программисты-сисадмины. Бизнес очень любит специалистов-мультитулов, поэтому эта профессия очень актуальна, престижна и одна из самых высокооплачиваемых в IT.
CyberSecurity
IT-индустрия наращивает свои объемы и мощности, следовательно, растет востребованность и тех, кто должен её защищать. На это и направлена деятельность специалиста по кибербезопасности. Данное направление имеет несколько ответвлений, и вы можете как защищать инфраструктуру от проникновения и выстраивать надежную оборону (направление "защиты"), так и выявлять уязвимости путем всевозможных хакерских методов – такие специалисты называются пентестерами (направление "атаки").
Можете погрузиться в анализ и риски (должность Security Analyst и Risk Compliance Specialist соответственно), заниматься защитой инфраструктуры и поиском компьютерных вирусов (Malware Researcher), а также испытать себя во многих других “кибербезопасных” специальностях – эта сфера дает много возможностей для реализации людям с сильными аналитическими способностями, внимательностью, рассудительностью и стрессоустойчивостью.
Database Administrator, DBA
Комфортная жизнедеятельность в современном мире зависит от баз данных: картотека пациентов больницы, учёт студентов и их успеваемости, учётные записи пользователей различных сервисов, банковские счета, разнообразный контент в интернете и т. д. Существует реальная потребность в специалистах, умеющих грамотно обслуживать эти БД и сопутствующую инфраструктуру.
Кроме того, DBA берет на себя такие функции, как выработка требований к базам данных, их проектирование, реализация, эффективное использование и поддержание целостности БД, включая управление учетными записями пользователей БД и защиту от несанкционированного доступа.
Здесь важно владеть языком запросов SQL, одной из СУБД (PostgreSQL, например), а также различными технологиями и приемами системного администрирования.
PM (Project Manager)
Современное IT имеет острый дефицит хороших, талантливых проектных менеджеров – управленцев, которые руководят IT-проектом в целом. Часто это бывшие программисты или тестировщики. Однако чтобы стать проджект менеджером, необязательно иметь айтишное прошлое.
Ключевые обязанности PM: проектирование и расстановка приоритетов, планирование выполнения задач, контроль, коммуникации, а также оперативное решение проблем внутри проекта. Самая главная задача – сделать так, чтобы идея заказчика была реализована в пределах заданных сроков с учетом ограниченности ресурсов.
Конечно, данный список обязанностей выполнен широкими мазками. На самом деле PM-ы часто работают сверхурочно и их рабочее состояние можно описать как "белка в колесе". Но трудно что-то противопоставить послевкусию успешно выполненного проекта.
Нюанс этой профессии состоит в том, что должность PM-а предполагает значительную конкуренцию. Согласно данным, в сентябре 2022 года на сайте DOU на одну вакансию PM-а откликнулось более 34 кандидатов (всего 184 вакансии). Большее количество отзывов только у FrontEnd, HR, QA и Legal (право). Поэтому, чтобы получить желаемый job-оффер, необходимо иметь не только опыт и знания, но и хорошие организаторские способности, а также другие важные для этой профессии личностные качества.
QA Engineer, тестировщик
Специалист по обеспечению качества, он же – тестировщик. И хотя QA и тестировщик – это немного не одно и то же, но мы приравняем их друг к другу, потому что это не играет значительной роли в данной статье.
Сфера ответственности тестировщика – выявление неисправностей, багов ПО, допущенных разработчиками. Востребованность этих специалистов трудно обжаловать, ведь каждый программный продукт перед появлением может пройти не одну итерацию тестирования, где выявляется большое количество багов. Выходит, без QA мы имели бы очень недоработанное ПО, а производитель — провал продукта на рынке, падение репутации и, возможно, даже банкротство.
Тестировщиков делят на два вида – Manual QA Engineer и Automation QA Engineer. Первые выполняют всю работу вручную, а вторые используют инструменты автоматизации, в том числе языки программирования (например, Java, Python), что повышает ценность такого сотрудника, и, соответственно, его зарплату. Конкуренция за место тестировщика в украинских реалиях чрезвычайно высока, поэтому для получения первого job-оффера нужно будет приложить много усилий.
Data Scientist
Ученый-эксперт, главными задачами которого является извлечение из большого массива данных полезной информации, которая затем может использоваться в различных областях; в основном, это бизнес и наука.
Данный специалист должен иметь отличное аналитическое мышление, владеть математическим аппаратом (включая мат. статистику и мат. моделирование), знать программирование (Python, R) и базы данных (как реляционные, так и нереляционные). С начала 2010-х годов профессия Data Scientist считается одной из самых привлекательных, высокооплачиваемых и перспективных в IT.
Data Analyst
Если Data Scientist ориентируется на предиктивную аналитику, то Data Analyst работает с информацией постфактум. У этого специалиста менее техническая роль — он работает с уже готовыми данными: проводит дескриптивный анализ, интерпретирует и визуализирует результаты, а также презентует отчет своим заказчикам.
При этом с БД, языками Python и SQL и другими инструментами сбора и обработки информации аналитик должен быть хорошо знаком, чтобы эффективно выполнять возложенные на него задачи.
Кому нужно хорошее владение английским языком?
Согласно уже упомянутому портрету IT-специалиста, высокий уровень английского у тех, кто общается с иностранными заказчиками и клиентами или занимается продвижением продуктов: Customer Success Manager, Project Manager, высшее звено руководства, специалисты по продажам, архитекторы, техлиды.
Также английский на уровне Upper Intermediate+ у технических писателей и специалистов по работе с данными (Data Scientists, аналитики).
Разработчикам будет достаточно уровня Intermediate, чтобы читать техническую документацию без лишних проблем. Однако желательно иметь Upper Intermediate и выше, поскольку это не только способствует более комфортному взаимодействию с англоязычными ресурсами и иностранными коллегами, но и подталкивает вас вверх по карьерной лестнице, а также положительно влияет на ЗП (согласно зарплатному опросу от DOU за лето 2022).
Выводы
В этой статье мы постарались дать исчерпывающий ответ на вопрос: "Какую IT-специальность следует выбрать в 2023 году?" В наших суждениях и выводах мы опирались на такие авторитетные ресурсы (международные и украинские), как Stack Overflow, Djinni, DOU, индексы TIOBE и PYPL. Также была проведена корреляция с прошлым годом, чтобы продемонстрировать стабильность рынка IT-профессий и показать, что вложенные вами силы и время в обучение не будут напрасными, а выбранное вами направление никуда не исчезнет.
На лидерских позициях, как и в прошлые годы, остаются Web, Enterprise и Mobile разработка. Тестировщики также востребованы, хотя и имеют чрезвычайно большую конкуренцию среди начинающих, поскольку это один из самых легких способов попасть в IT, а с началом полномасштабного вторжения интерес к IT возрос так же стремительно, как и во время ковида.
Высокая востребованность также и у DevOps инженеров при относительно невысокой конкуренции – 3.7 отзыва на одну вакансию в сентябре 2022 года (всего вакансий – 243, источник).
Безусловно, полномасштабная война наложила свой отпечаток на IT в виде миграции бизнесов и айтишников на запад Украины, резкого притока новичков, увеличения "дистанционных" вакансий и проблем с электроэнергией из-за обстрелов россиянами нашей энергетической инфраструктуры, но зарплаты остались высокими – где-то даже повысились, – да и в целом IT стоит и обеспечивает как айтишников, так и нашу армию.
Так зачем же ждать подходящего момента? Берите момент и делайте его подходящим! ITVDN – это образовательная платформа для онлайн обучения программированию и информационным технологиям.
Наш портал насчитывает более 230 видео курсов и имеет собственные программы обучения по 15 популярнейшим IT-профессиям, среди которых:
Верстальщик сайтов
FrontEnd Developer
Java Developer
Python Developer
C# / .NET Developer
Android Developer
Unity / Game Developer
PHP Developer
и другие.
Формат обучения – записанные видео курсы, по которым можно учиться в любое удобное время. Таким образом, вы сможете овладеть IT-профессией не выходя из дома. Со всеми специальностями можно подробно ознакомиться, перейдя на страницу специальностей ITVDN.
Кроме записанных видео курсов наша образовательная платформа предоставляет обучение в новом формате – Live Online. Он предусматривает регулярные онлайн занятия с ментором в небольших группах из 6-25 человек, на которых объясняется новый материал, обсуждаются нюансы выполнения практических задач, есть проверка ДЗ и чат для общения с одногруппниками, а также доступ к видео курсам ITVDN. В процессе обучения учащиеся также разрабатывают собственный курсовой проект, который в конце защищают и добавляют в своё портфолио.
На данный момент Live Online обучение проводится по четырем самым популярным IT-специальностям:
C#/.NET Developer
Frontend Developer
Java Developer
Python Developer
Если вас заинтересовал формат Live Online, переходите по ссылкам и ознакомьтесь с подробностями предложений по каждой из четырех специальностей.
Также предлагаем вашему вниманию подборку вебинаров, которые помогут вам разобраться в главных моментах того или иного языка программирования или специальности:
Стоит ли учить Ruby в 2023 году?
Как стать Java разработчиком в 2023 году?
Какой язык программирования учить в 2023 году?
Обзор полезных ресурсов для изучения C# и .NET с нуля
Как быстро выучить Python. Пошаговый план с нуля
Как стать PHP разработчиком и получить оффер от IT-компании
Старт карьеры в Java разработке. Личный опыт, актуальные тренды и подводные камни
Что такое DevOps
и другие полезные вебинары – в нашем каталоге.
Надеемся, что наша статья была полезна для вас. С радостью примем любые пожелания и с пониманием и уважением – любые замечания. Выбирайте IT-профессию вашей мечты и пусть ничто не останавливает вас на пути к ней!
Изучайте IT-специальности на ITVDN!
Введение в разработку приложений под iOS. Часть 2.
Автор: Volodymyr Bozhek
Здравствуйте дорогие читатели.
В этом уроке мы добавим форму списка товаров на складе. Разберем класс “UITableViewController” и как с ним работать.
Откройте проект Warehouse из предыдущего урока. Необходимо добавить в наш проект две View. На одной будут содержаться все товары, которые есть на складе. На второй форма редактирования товара.
Для реализации View со списком всех товаров мы будем использовать готовый табличный класс контроллера “UITableViewController”. Данный класс уже реализовал все необходимые протоколы внутри себя для уверенной работы табличного контроллера.
Есть и другой вариант, который мы не будем рассматривать в этом уроке, это сделать свой класс “UITableViewController”, унаследовшись от базового класса “UIViewController” и реализовав протоколы “UITableViewDelegate” и “UITableViewDatasource”.
В панели навигатора откройте модуль “Main.storyboard”.
Найдите в библиотеке компонентов, компонент “Table View Controller” и перетяните в пустую область дизайнера рядом с View входа в систему.
В панели навигатора, нажмите правой кнопкой мыши на папке “Warehouse” и в контекстном меню выберите пункт “New File...”. Откроется диалоговое окно добавления новых модулей в проект. Найдите в нем модуль “Swift File”, выделите его и нажмите кнопку “Next”.
Появится диалоговое окно задания названия добавляемого модуля. В поле “Save As” введите “SuppliesViewController.swift”, нажмите кнопку “Create”.
Откройте модуль “SuppliesViewController.swift”, вы увидите в нем только “import Foundation”, это добавление пространства имен на базовую библиотеку классов Swift (аналог в C#, пространство имен “System”).
Удалите эту строку. Добавьте в этот модуль следующий код:
Разберем это код построчно.
На 9 строке, мы подключили пространство имен “UIKit” в нем содержатся классы для взаимодействия с компонентами пользовательского интерфейса в iOS.
На 11 строке, мы объявили класс с именем “SuppliesViewController”, который наследуется от класса “UITableViewController”.
На 12 строке, мы объявили строковый массив с именем “supplies”, в этом массиве содержится статический список товаров (чуть позже мы заменим его на модель).
На 17 строке, мы переопределили метод “viewDidLoad” класса “UITableViewController”, данный метод вызывается когда View начинает загрузку. В этом методе необходимо делать предварительную инициализацию компонентов, какими либо данными.
На 18 строке, мы вызываем базовый метод “viewDidLoad” класса “UITableViewController”, с помощью ключего слова “super” (аналог в C#, ключевое слово “base”).
Начиная с 21 строки и по 33 строку, мы переопределяем поведение базового контроллера “UITableViewController”, для отображения данных в нем. Более конкретно, мы переопределяем реализацию протокола “UITableViewDataSource”.
На 21 строке переопределенный метод “numberOfSections”, возвращает количество секций в нашем табличном представлении. Секции это разделители между сгруппированными наборами ячеек в табличном представлении. У нас будет одна секция.
На 25 строке переопределенный метод “numberOfRowsInSection”, возвращает количество ячеек в секции. Секция у нас одна, поэтому возвращаем количество товаров, которые будут в этой секции.
На 29 строке переопределенный метод “cellForRowAt indexPath”, возвращает представление ячейки таблицы.
На 30 строке мы создаем экземпляр типа “UITableViewCell” с повторно используемым идентификатором “сell”, первый параметр в инициализаторе это стиль ячейки, второй параметр это идентификатор этой ячейки в табличном представлении. Данный метод вызывается столько раз, сколько ячеек мы добавляем в нашу таблицу. Каждый вызов данного метода содержит в аргументе “indexPath” текущую позицию ячейки относительно таблицы.
На 31 строке мы обращаемся к компоненту “Label”, расположенному внутри ячейки, чтобы задать текст, для этого используем свойство “textLabel”, затем от этого свойства уже обращаемся к свойству “text”, чтобы задать текст компонента “Label”. Текст мы извлекаем из массива товаров “supplies” через subscript (по индексу). Чтобы получить текущий номер строки, необходимо обратиться к аргументу “indexPath” и обратиться к свойству “row”.
На 32 строке мы возвращаем созданную ячейку. Эта ячейка затем внутренними механизмами будет добавлена в табличное представление.
Откройте модуль “Main.storyboard”, выделите добавленный ранее “Table View Controller”.
В панели свойств, откройте вкладку “Show the identity inspector”, найдите поле “Class”, введите значение “SuppliesViewController”. Через это свойство мы подвязываем класс контроллера “SuppliesViewController” к нашему табличному представлению в дизайнере.
Найдите свойство “Storyboard ID”, задайте значение в нем “SuppliesViewController”. Данное свойство содержит уникальный идентификатор представления, этот идентификатор будет позднее использоваться нами при поиске табличного представления программно в экземпляре “Storyboard”.
Теперь нам необходимо добавить в обработчик события на нажатие кнопки “Вход”, переход на табличное представление.
Откройте модуль “ViewController”. Добавьте код в метод “loginButtonTapped”, как показано ниже (смотреть выделенный код):
Разберем добавленный код:
На 23 строке, правым операндом мы обращаемся к свойству “storyboard” контроллера “ViewController”, в этом свойстве содержится экземпляр модуля “Main.storyboard”. Вызов метода “instantiateViewController” производит поиск представления по идентификатору “Storyboard ID”, которое мы задавали ранее, в модуле “Main.Storyboard” и возвращает базовый класс контроллера “UIViewController”.
Класс “UITableViewController” наследуется от класса “UIViewController”, соответственно допустимо приведение данного экземпляра к классу “UITableViewController”.
Класс “SuppliesViewController“ наследуется от класса “UITableViewController”. Соответственно мы приводим полученный экземпляр в правом операнде к типу “SuppliesViewController” и присваиваем его левому операнду c именем “controller”.
Левый операнд объявлен константой, поскольку он не будет в дальнейшем проходить переинициализацию.
На 24 строке, мы обращаемся к свойству “navigationController”, в данном свойстве содержится экземпляр класса “UINavigationController” (сейчас он не инициализирован и содержит значение “nil”). Затем от экземпляра этого свойства мы вызываем метод “pushViewController”. Данный метод принимает два аргумента, экземпляр контроллера, который надо отобразить и флаг использовать анимацию при отображении контроллера или нет.
Если вы сейчас запустите приложение, заполните поля “Имя пользователя” и “Пароль пользователя” и нажмете кнопку “Вход”, вы получите ошибку, так как текущее представление не содержит экземпляра “UINavigationController”.
Давайте это исправим.
Откройте модуль “Main.storyboard”. Выделите в дизайнере представление “ViewController”, затем в меню Xcode выберите “Editor -> Embed In -> Navigation Controller”. После этого действия в дизайнер Storyboard добавится представление “Navigation Controller” привязанное к представлению “ViewController”.
Данное представление инициализирует свойство “navigationController” класса “ViewController”, данное свойство имеет тип доступа только для чтения и не подлежит переинициализации в коде контроллера.
Модуль “Main.storyboard” должен выглядеть так:
Теперь запустите приложение. Заполните поля “Имя пользователя” и “Пароль пользователя”, нажмите кнопку “Вход”. Откроется табличное представление:
Но в нем нас смущает “Top Bar”, который отображается сверху. Его не должно быть видно на странице входа в систему. Чтобы его убрать, откройте модуль “Main.storyboard”, выделите представление “ViewController”, в панели свойств перейдите на вкладку “Show the attributes inspector”.
На этой вкладке найдите свойство “Top Bar” и установите для него значение “None”, в дизайнере “Top Bar” пропал, но вот если вы запустите приложение снова, то он остался на прежнем месте. Чтобы его скрыть, перейдите в модуль “ViewController.swift”. После переопределенного метода “viewDidLoad” вам необходимо переопределить еще два метода класса “UIViewController” это методы “viewWillAppear” и “viewWillDisappear”. Исправьте код в соответствии с кодом ниже:
Разберем построчно внесенные изменения.
На 33 строке мы переопределили метод “viewWillAppear”. Данный метод вызывается когда наше представление уже появилось на экране.
На 34 строке мы вызываем метод “viewWillAppear” из базового класса “UIViewController”, чтобы сохранить его поведение.
На 35 строке мы обращаемся к свойству “navigationController” и вызываем от экземпляра этого свойства метод “setNavigationBarHidden”. Данный метод скрывает или отображает “Top Bar” и принимает два аргумента, первый аргумент указывает скрыть или отобразить “Top Bar”, второй указывает, сделать это с анимацией или без. В этом методе мы скрываем “Top Bar”.
На 38 строке мы переопределяем метод “viewWillDisappear”. Данный метод вызывается когда наше представление перекрывается другим представлением поверх него.
На 39 строке мы вызываем метод “viewWillDisappear” из базового класса “UIViewController”, чтобы сохранить его поведение.
На 40 строке мы обращаемся к свойству “navigationController” и вызываем от экземпляра этого свойства метод “setNavigationBarHidden”. В этом методе мы отображаем “Top Bar”.
Запустите приложение.
Теперь все отображается правильно.
С одной стороны да, с другой нет. После того как мы выполнили переход на табличное представление, в нем в левом верхнем углу отображается кнопка навигации “< Back”, но ведь наше приложение на русском.
Давайте изменим текст этой кнопки на “<- Назад”. Откройте модуль “SuppliesViewController.swift”. После метода “cellForRowAt indexPath”, добавьте следующий код:
Разберем этот код построчно.
На 36 строке мы объявили метод с именем “initNavigationButtons”, который ничего не возвращает и ничего не принимает.
На 37 строке мы вызываем обращаемся в левом операнде к свойству “navigationItem” в котором содержится экземпляр класса “UINavigationItem”. Данное свойство предоставляет доступ к системным кнопкам навигации. От экземпляра свойства “navigationItem” мы обращаемся к свойству “leftBarButtonItem” в котором содержится экземпляр класса “UIBarButtonItem” инициализированный по умолчанию текстом “< Back”.
В правом операнде мы создаем новый экземпляр класса “UIBarButtonItem” и вызываем его инициализатор, который принимает 4 аргумента.
Первый аргумент “title” задает текст кнопки навигации. Чтобы в текст вставить специальный символ Unicode, необходимо в меню среды разработки Xcode выбрать “Edit -> Emoji & Symbols”, затем выбрать подходящий символ и нажать на него.
Второй аргумент “style” принимает перечисление типа “UIBarButtonItemStyle”, в этом аргументе мы задаем значение по умолчанию.
Третий аргумент “target” имеет тип “AnyObject?”, в него мы передаем экземпляр нашего контроллера.
Четвертый аргумент “action” имеет тип “Selector?”, в него мы передаем метод обработчик нажатия на кнопку навигации. Обратите внимание на запись “#selector(SuppliesViewController.backToParent)”, в этой записи с помощью выражения “#selector” создается экземпляр типа “Selector”. В скобках мы указываем путь к методу обработчику события в формате “Класс контроллера . метод”.
На 40 строке мы объявляем метод обработчик события нажатия по кнопке навигации с именем “backToParent”, который не принимает аргументов и ничего не возвращает.
На 41 строке мы обращаемся в правом операнде к свойству “navigationController” и вызывает от экземпляра этого свойства метод “popViewController”. Данный метод скрывает текущее представление и переход на предыдущее представление в иерархии вызова представлений. Принимает один аргумент, который задает стиль открытия предыдущего представления с анимацией или без.
Добавьте в метод “viewDidLoad”, вызов метода “initNavigationButtons” (19 строка).
Запустите приложение. Вы увидите такой результат:
На этом урок подошел к концу.
На следующем уроке, мы создадим модель товара. Добавим кнопку добавления нового товара, добавим форму редактирования товара и зададим поведение в табличном представлении на редактирование/удаление товара. После того, как редактирование товаров будет завершено, можно будет приступать к уроку в котором будут разбираться иконка приложения и папка Assets.
Введение в разработку приложений под iOS. Часть 1.
Автор: Volodymyr Bozhek
Здравствуйте, дорогие читатели.
Данный блок будет продолжением темы “Введение в разработку под iOS", которую мы затронули ранее.
В этом уроке мы:
рассмотрим пользовательский интерфейс среды разработки;
сделаем форму авторизации для нашего приложения Warehouse;
научимся добавлять обработчиков событий на элементы управления.
Работу продолжим на примере приложения Warehouse, который мы создавали в первом уроке.
В среде разработки Xcode можем видеть две панели. Левая из них - это панель навигации по составляющим проекта:
Правая делится на панель свойств и панель библиотеки компонентов.
Панель свойств:
Библиотека компонентов:
Также вы можете использовать набор функций в панели инструментов, который находится сверху:
Обратите внимание на кнопки этой панели справа:
Нажимая на них, вы будете скрывать или отображать левую, правую, нижнюю панель в среде разработки.
Левее находится блок функциональных кнопок для отображения данных выбранного модуля:
Кнопка отображения текущего представления модуля.
Кнопка отображения связанного модуля с текущим модулем. Применяется для того, чтобы видеть на одной половине экрана код контроллера, а на другой - дизайнер представления.
Кнопка отображения изменений с момента последней заливки данных в репозиторий. Используется, если ваш проект находится под управлением GIT
Панель снизу - это панель отладки и логирования:
В панели навигации откройте модуль “Main.storyboard”. Обратите внимание на стрелку слева, которая указывает на View. Эту стрелку можно перемещать, зажав ее левой кнопкой мыши.
Отмечу, что при включении в настройках вашей OS X эмуляции двухкнопочной мыши важно понимать, что на тачпаде нет понятия нажатия левой или правой кнопки мыши, есть просто нажатие.
Данная стрелка означает точку входа в наше приложение. Точка входа привязывается только к одной View, и эта View будет отображаться первой при старте нашего приложения. Исключением может быть только модуль конфигурации предварительной заставки “LaunchScreen.storyboard”, тогда сначала будет появляться заставка с презентацией функций приложения, а затем наша View, на которую была привязана точка входа.
Нажмите на View, на панели свойств откройте вкладку “Show the identity inspector”.
В поле “Class” содержится класс контроллера, который привязан к нашему представлению (View).
Рядом с названием класса “ViewController” есть серая иконка со стрелкой вправо, если вы нажмете на нее, то попадете в модуль контроллера “ViewController”.
Вернитесь в модуль “Main.storyboard”.
В свойствах дизайнера внизу выберите устройство “iPhone 6s”:
Перенесите из библиотеки компонентов два элемента управления “Text Field” и один элемент управления “Button” на View. Выделите элемент управления “Text Field” справа и слева от него будут видны квадратики, потяните за правый квадратик и растяните поле на всю ширину экрана. То же самое проделайте со вторым элементом управления “Text Field” и элементом управления “Button”.
У вас должно получится так, как на картинке ниже:
Обратите внимание на кнопки внизу дизайнера:
Это кнопки для отображения панелей свойств элементов управления. На этих панелях задаются выравнивания элементов управления либо относительно View, на котором они расположены, либо относительно других элементов управления, находящихся с ними по соседству. В терминологии Apple они называются ограничениями (Constraints).
Это отдельная и довольно объемная тема для понимания, поэтому пока мы будем пользоваться только одной панелью задания ограничений, более простой для понимания.
Выделите первый элемент управления “Text Field”, затем нажмите на кнопку “Pin” в дизайнере:
Появится диалог ограничений для данного элемента управления:
Выпадающие списки сверху, снизу, слева и справа - это допустимое расстояние элемента управления относительно стен View соответственно.
Нам необходимо задать ограничение, чтобы наш элемент управления остался на том же месте, где он сейчас расположен на View , но при этом, в зависимости от ширины экрана устройства, подстраивался под эту ширину. Чтобы этого добиться, снимите галочку с “Constrain to margin”, отметьте галочкой поле “Height”, чтобы высота элемента управления не менялась. Отметьте линии верхняя, левая и правая. У вас должно получиться вот так:
Заметьте, кнопка “Add 4 Constraints” стала активной. Нажмите на нее.
Теперь проделайте ту же самую операцию для второго элемента управления “Text Field” и элемента управления “Button”. Значения в выпадающих списках не меняйте.
Можно запустить приложение и посмотреть, что получилось.
Остановите приложение.
Откройте модуль “Main.storyboard”. Теперь нам необходимо привести в порядок пользовательский интерфейс и сделать его понятным для пользователя.
Выделите первый элемент управления “Text Field”. В панели свойств откройте вкладку “Show the attributes inspector”, на этой вкладке найдите поле “Placeholder”, введите в это поле текст “Введите имя пользователя”. Свойство Placeholder задает текст, который отображается в поле ввода, когда это поле не заполнено.
Выделите второй элемент управления “Text Field”, в панели свойств, откройте вкладку “Show the attributes inspector”, на этой вкладке найдите поле “Placeholder”, введите в это поле текст “Введите пароль пользователя”. Затем найдите поле “Secure Text Entry” и отметьте его галочкой. Данное свойство будет отображать звездочки вместо текста, вводимого пользователем, используется для полей ввода паролей.
Выделите кнопку “Button”, в панели свойств, откройте вкладку “Show the attributes inspector”, найдите поле без названия с текстом “Button”, удалите этот текст и добавьте текст “Вход”.
Найдите поле “Text Color”, установите цвет текста “White Color”.
Найдите поле “Background”, установите фон кнопки цветом “Blue Color”.
Перетащите из библиотеки компонентов на View под кнопку “Вход” элемент управления “Label”. Растяните его по ширине экрана. Задайте ему такие же ограничения, как мы задавали выше для прошлых элементов управления.
Выделите элемент управления “Label”, в панели свойств, откройте вкладку “Show the attributes inspector”. На этой вкладке найдите поле без названия с текстом “Label”. Удалите из него текст, введите текст “Нет ошибок”.
Найдите поле “Alignment”, задайте выравнивание текста по центру.
Выделите View, в панели свойств, откройте вкладку “Show the attributes inspector”, найдите поле “Background”, установите фон View “Light Green”.
У вас должно получиться следующее:
Теперь необходимо добавить действие на нажатие кнопки “Вход” и объявить переменные для полей ввода и элемента управления “Label”. Для этого в панели инструментов нажмите кнопку “Show the assistant editor”, экран разделится пополам. Если экран вашего компьютера не позволяет нормально видеть дизайнер и модуль контроллера, скройте панель навигатора и панель свойств.
Выделите первый элемент управления “Text Field” в дизайнере, не отводя курсор мыши с этого элемента управления, зажмите кнопку “Ctrl”, нажмите и удерживайте левую кнопку мыши, затем начинайте вести курсор на окно с модулем контроллера, когда курсор окажется между фигурными скобками класса контроллера, отпустите левую кнопку мыши, появится диалоговое окно параметров элемента управления:
В данном окне есть несколько полей.
Давайте их рассмотрим подробнее.
Поле “Connection”, может принимать несколько вариантов значений, в данном уроке нас будут интересовать всего два значения “Outlet” (используется для создания переменной, связанной с элементом управления) и “Action” (используйте для задания обработчика события на какое либо действие элемента управления).
Поле “Name”, сюда вы вводите название вашей переменной, которая будет связана с элементом управления.
Поле “Type”, содержит тип элемента управления (название класса элемента управления), можно ввести другой класс, если вы знаете иерархию наследования элемента управления UITextField.
Поле “Storage”, содержит вид размещения созданной переменной в памяти операционной системы. Может принимать значения “Weak” или “Strong”.
В поле “Name” введите название переменной “userNameTxt” и нажмите кнопку “Connect” или кнопку “Enter” на клавиатуре. В модуле контроллера добавится строчка с названием переменной, которую вы задали.
Обратите внимание на черный шарик, находящийся на одном уровне с этой переменной слева в области нумерации строк. Нажмите на него, и в дизайнере выделится элемент управления, к которому привязана данная переменная.
Вот пример:
Повторите данное действие для остальных элементов управления.
Для второго текстового поля укажите название переменной “passwordTxt”.
Для элемента управления “Label” укажите название переменной “validationLabel”.
Для кнопки выберите в поле “Connection” значение “Action”, у вас добавится еще одно поле “Event”. В данном поле задается событие, на которые вы хотите назначить обработчик в коде контроллера. По умолчанию установлено событие “Touch Up Inside”, оставьте его как есть.
В поле “Type” установлено значение “AnyObject” (Это класс, который может содержать любые типы данных, аналог подобного класса в других языка программирования, например, C# - это класс Object). Измените это значение на тип элемента управления UIButton, поскольку данный объект будет передан в аргументы метода обработчика назначенного события и намного удобнее будет обращаться явно к экземпляру кнопки, чем распаковывать этот экземпляр путем приведения к типу “UIButton” из типа “AnyObject”.
В поле “Name” введите “loginButtonTapped”. У вас должно получиться вот так:
Нажмите кнопку “Connect”. Код контроллера должен выглядеть вот так:
Теперь давайте проверим, работает ли событие нажатия по кнопке “Вход”. Добавьте в метод “loginButtonTapped” следующий код:
Давайте разберем этот код.
На 16 строке идет проверка наличия текста в поле ввода “Имя пользователя”. Ключевое слово “self” означает ссылка на самого себя, в других языках программирования аналог, например, в C# - это ключевое слово “this”.
Из переменной “userNameTxt” мы обращаемся к свойству “text”, данное свойство возвращает текст, который вы ввели в данный элемент управления. Знак вопроса в конце этого свойства ставится, так как это свойство имеет тип String? и может содержать значение “nil” (аналог “null” в C#).
Далее мы обращаемся к свойству “characters” , которое содержит массив символов и от этого массива вызываем свойство “count”, чтобы получить количество символов в строке. Такая запись введена, начиная со Swift 3, доступного с обновлением среды разработки до Xcode 8 версии.
В ранних версиях Swift, например, версии 2.1-2.3 можно было получить длину строки намного короче “self.userNameTxt.text?.length”.
Если поле ввода “Имя пользователя” не заполнено, мы отображаем сообщение валидации “Имя пользователя не задано”.
На 18 строке мы делаем аналогичную проверку для поля “Пароль пользователя”.
На 20 строке мы проверяем, если заполнены оба поля ввода, тогда все хорошо и мы выводим сообщение “Нет ошибок”.
Обратите внимание на запись “(self.userNameTxt.text?.characters.count)!”, скобки и знак восклицания в конце, на самом деле, применяются к свойству “text”, так как оно имеется Nullable тип. Этой записью мы гарантируем компилятору, что в данном свойстве не будет содержаться значение “nil” и данное свойство будет инициализировано.
Теперь запустите приложение и проверьте его работу.
На этом урок подошел к концу.
В следующем уроке мы рассмотрим работу с классами UITableViewController, навигацию между представлениями, понятие делегата, разберем формат и размеры иконки приложения, научимся использовать Assets.
150+ вопросов по .NET для Junior, Middle и Senior
Автор: Редакция ITVDN
Дорогие друзья! Предлагаем вашему вниманию перевод статьи, опубликованной на DOU.ua 10 ноября 2020 года. Оригинальная версия на украинском языке доступна по ссылке.
На DOU размещено более 450 вакансий для .NET-разработчиков, что свидетельствует о популярности этой технологии. Редакция DOU собрала вопросы, которые .NET-разработчики задают своим коллегам на технических собеседованиях. Готовьтесь на здоровье :)
Вопросы для Junior
Общее
1. Назовите основные принципы ООП.
2. Что такое наследование, инкапсуляция, абстракция, полиморфизм: приведите примеры (желательно из собственного опыта). От какого класса неявно наследуются все классы в .NET? Разрешено ли множественное наследование в C#?
3. Что такое рекурсия?
4. Что такое лямбда-выражение?
5. Что такое параллельное программирование (многопоточность) и его назначение? Какие классы используются?
6. Что такое JSON?
7. Как вы понимаете REST?
8. Расскажите о SPA concept.
9. Какие GoF-паттерны использовали?
10. Какая разница между GET и POST HTTP методами?
11. Какую проблему решает Docker? Каковы его плюсы и минусы?
12. Чем принципиально отличаются unit-тесты от интеграционных тестов?
Обработка исключений
13. Что такое Exception?
14. Для чего служат try, catch, finally? В каком случае может не выполниться блок finally?
15. Что такое call stack? Какие ключевые слова вы знаете?
Платформа .NET
16. Что такое ASP.NET?
17. Какие существуют типы Action filters?
18. Что такое Web Service?
19. Что такое CLR?
20. Что такое сборщик мусора (Garbage Collector) на базовом уровне?
21. Что такое делегат?
22. Отличается ли Delegate от Action?
23. Что такое LINQ и для чего используется? Приведите несколько примеров применения LINQ.
24. Что такое пространство имен (namespace) и зачем это нужно?
Типы данных, коллекции и структуры данных
25. Какие типы данных вы знаете?
26. Какие примитивные типы знаете?
27. Что такое Nullable-тип?
28. Что такое тип значения, а что такое тип ссылки? Что из этого class, а что struct? В каком участке памяти они хранятся?
29. Чем отличаются value от reference type? String - это reference или value?
30.В чем отличие между string builder и string?
31. Что такое дженерики? Какие проблемы они решают?
32. Что такое boxing / unboxing?
33. Что такое Array, List, HashSet, Dictionary? Приведите примеры использования этих структур данных. Какая сложность операций с ними (поиск, вставка, удаление)?
34. Какие знаете коллекции?
35. Что делает оператор yield?
Классы, структуры и интерфейсы
36. Что такое класс?
37. Чем отличается класс от абстрактного класса?
38. Чем отличается абстрактный класс от интерфейса? Для чего нужны интерфейсы и какие задачи они выполняют?
39. Какие вы знаете модификаторы доступа?
40. В чем разница между обычным классом и статическим?
41. В чем разница переопределения метода между ключевыми словами new и override?
42. Какое различие между const и read only?
43. Разница между структурой и классом. Приведите примеры структур.
44. Может ли экземпляр структуры храниться в куче (heap)? Как это сделать?
Асинхронность
45. Что такое асинхронность и чем она отличается от многопоточности?
46. Какие есть ключевые слова для использования асинхронности в коде?
47. Что означают ключевые слова async / await?
Базы данных
48. Разница между реляционными и нереляционными базами, плюсы и минусы использования обоих вариантов.
49. Что такое индексы в RDBMS?
50. Какие типы JOIN существуют в SQL?
Тестирование
51. Для чего нужны unit-тесты?
52. Какие преимущества и недостатки использования unit-тестов?
53. Из каких трех логических блоков состоит unit-тест?
Вопросы для Middle
Общее
54. Вы набираете google.com в браузере. Расскажите как можно подробнее, что происходит в это время на HTTP-уровне?
55. Как работает HTTPS?
56. Как вы понимаете SOLID?
57. Какие протоколы сериализации вы знаете и где они применяются?
58. Что такое в вашем понимании чистая функция? Какие у нее преимущества?
59. Что такое dependency injection и зачем оно нужно?
60. Что такое cohesion и coupling (связанность и связность)?
61. Что такое IaaS, PaaS, SaaS и каковы различия между ними?
62. Какие способы отладки программы вы используете?
63. Какие знаете паттерны? Объясните суть перечисленных.
64. В чем суть паттерна Singleton? Почему его еще называют антипаттерном?
65. Для чего нужен паттерн Strategy?
66. Какие ключевые различия между распределенными системами и монолитными?
67. Какие паттерны проектирования распределенных систем вы знаете?
68. Какие есть принципы работы Message bus? Почему могут возникать дубликаты в очередях?
69. Какие принципы построения идемпотентных сервисов знаете?
70. Расскажите, как работают асинхронные методы? Чем асинхронность отличается от параллелизма?
Платформа .NET
71. Какие исключения нельзя остановить в блоке catch?
72. Какая разница между .NET Standard Class Library и .NET Core Class Library?
73. Объясните разницу между отложенным и немедленным исполнением в LINQ. Приведите примеры.
74. Для чего нужен метод ConfigureServices в Startup.cs?
75. Какая разница между services.AddTransient и services.AddScope в ASP.NET Core?
76. Что такое Kestrel?
77. Опишите ASP.NET MVC request pipeline.
78. Как в ASP.NET WebAPI настроить кэширование ответов на HTTP-запросы?
Управление памятью
79. Что такое куча и стек? Различия, принцип работы.
80. Как работает сборщик мусора?
81. Зачем нам зарезервированное слово using в C#, если в .NET есть автоматическое управление памятью? Как с этим связан disposable-паттерн и зачем такой сложный паттерн для managed и unmanaged ресурсов?
82. Какие особенности работы с Large Object Heap?
Типы данных, коллекции и структуры данных
83. Когда генерируется дженерик-класс конкретного типа - при выполнении программы или во время компиляции?
84. Что такое рефлексия?
85. Расскажите о коллекции LinkedList <T>. Чем она отличается от других коллекций?
86. Что такое индексатор?
87. Что такое immutable object? Какие преимущества дает использование immutable object? Предложите способ реализации его в .NET.
88. Когда использовать StringBuilder, а когда string? Как работает StringBuilder?
89. Что такое балансирование деревьев?
90. Что такое Key-value структуры?
100. Что такое хэш-функция и зачем нужны хэш-таблицы?
101. Какими свойствами должна обладать идеальная хеш-функция?
102. Что такое коллизии и как с ними бороться?
103. В чем заключается сложность CRUD-операций в Dictionary <K, V> в .NET?
104. Где хранятся массивы? Массивы примитивных типов?
105. В чем отличие между массивом (T [ ]) и списком (List <T>)?
106. В чем разница между IList <T> и IEnumerable <T>?
107. Зачем нужны Enumerable, Observable, AsyncEnumerable и какие модели получения данных они реализуют?
108. В чем разница между IEnumerable и IQueryable?
109. Что такое enum flags?
Базы данных
110. Расскажите о нормальных формах в СУБД.
111. Что такое индекс в БД?
112. Когда следует использовать индексы? Преимущества и недостатки.
113. Какие типы индексов существуют? Чем они отличаются?
114. Что такое ACID?
115. Какие вы знаете уровни изоляции транзакций?
116. Что такое план выполнения запроса (execution plan) в MS SQL?
117. Проблема: запрос долго выполняется. Какие есть методы ее диагностики и решения?
118. Как ORM (Entity Framework или Entity Framework Core) транслируют C# код в язык запросов базы данных? Что для этого используется?
Параллелизм
119. Для чего использовать Task.ConfigureAwait?
120. Например, есть веб-сервер, который по HTTP-запросу делает выборку из базы данных. Всего на сервере 16 тредов (threads). Каждый HTTP-request выполняет запрос в базу и ожидает результатов, в этом случае тред блокируется. Можно ли оптимизировать эту работу средствами .NET?
121. Зачем нужен ThreadPool? Опишите механику работы: как поток выделяется и возвращается обратно в ThreadPool.
Вопросы для Senior
Общее
122. Какие ещё практики, кроме ООП, использовали (AOP, FP и т. д.)?
123. Назовите три самые сложные проблемы, которые вам приходилось решать. Как вы это сделали, как пришли к этому решению?
124. Что такое слабосвязанный код? Чем он лучше сильносвязанного кода? Как бы вы достигали более слабой связности кода?
125. Использование статических классов повышает или понижает связность кода?
126. Как можно измерить performance кода? Влияет ли факт замеров на производительность?
127. Для чего используются и как работают multi-stage билды в Docker?
128. Как понять, что какая-то часть кода утилизирует много памяти или долго выполняется? Что может быть ботлнеком в разных случаях? Какие есть способы уменьшения памяти и трафика памяти?
129. Как бы вы реализовали cross-cutting concern (например, логирование, валидация, транзакции)?
130. Расскажите о Rest Maturity Model.
131. Что такое CPU и IO-bound задачи?
132. Что такое маршалинг?
133. Как работает async / await (подробно)? Почему нельзя использовать async void методы?
Платформа .NET
134. Как работает lock? Можно ли использовать структуры внутри выражения lock?
135. Что такое Expression Tree?
136. Как работает сборщик мусора (подробно)? Почему в GC три поколения, а не, скажем, пять, десять или два?
137. Как бы вы организовали трассировки Web API сервисов?
138. Как в .NET Core можно настроить хранение секретов на компьютерах разработчиков и на рабочих средах?
139. Как бы вы организовали процесс CI/CD .NET Core сервисов для их деплоймента в облачную инфраструктуру?
140. Как включить CORS в AspNetCore?
Типы данных, коллекции и структуры данных
141. Как реализованы дженерики?
142. Как создать собственный immutable-тип?
143. Как работает IEnumerable <T> (подробно)?
144. Какой алгоритм использует коллекция STACK?
145. Какие структуры данных вы реализовывали сами для платформы .NET? Расскажите, чем они отличались от стандартных реализаций.
146. Чем отличается интерфейс от абстрактного класса? В каких случаях вы использовали бы и то, и другое?
147. Почему в структуре нет конструктора по умолчанию?
Базы данных
148. Как БД сохраняет данные?
149. Какие типы БД вы знаете?
150. Как и когда БД лучше использовать?
151. Что такое денормализации?
152. Когда и какие уровни изоляции транзакций можно использовать?
153. Как в популярных СУБД реализованы принципы ACID (SQL Server, PostgreSQL и т. д.)?
154. Приходилось ли вам оптимизировать запрос в БД? Если да, то как?
155. Опишите, какие вы знаете потенциальные проблемы, связанные с параллельными запросами к БД.
156. Какую базу данных вы бы использовали для реализации distributed lock механизма? Расскажите детали реализации.
Микросервисы
157. Какую проблему решают микросервисы?
158. Какие есть способы коммуникации микросервисов?
159. Расскажите варианты реализации распределенных транзакций в микросервисах.
160. Что такое circuit breaker?
161. Каким образом вы будете налаживать систему, состоящую из множества микросервисов, если нужно отследить полный путь обработки запроса?
162. Что такое брокеры сообщений? Что такое at-least-once, at-most-once семантика? Есть ли какие-то брокеры, которые гарантируют exactly-once семантику?
163. Как должен работать код клиента брокера в зависимости от выбранной семантики?
164. Какие инструменты для работы с очередями вам известны (как в .NET, так и отдельные продукты), какой инструмент/продукт вы бы выбрали и почему?
MS Azure
165. Какие виды сервисов бывают в Service Fabric?
166. Какие особенности и ограничения Azure Table Storage?
167. Как бороться с проблемой холодного старта в Azure Functions?
168. В чем отличие очередей и топиков в Azure Service Bus?
Практические задания
Junior only
Опишите, как бы вы реализовали калькулятор. Если понадобится добавить поддержку для римской системы счисления, что будете делать?
Напишите программу, чтобы проверить, является ли число простым или нет.
Найдите наименьший элемент в массиве.
Упорядочите структуры папок в файловой системе.
Напишите программу, которая симулирует fizz-buzz.
Расскажите, что делает этот код, и предложите, как его улучшить.
а)
public bool IsArrayEmpty(string[] array)
{
if (array.Length > 0)
return false;
else
return true;
}
б)
protected string GetClass(object url)
{
string result = string.Empty;
if (SiteMap.CurrentNode != null && SiteMap.CurrentNode.Url == url.ToString())
result = "class=\"active\"";
return result;
}
Middle
Напишите программу для тиражирования последовательности Фибоначчи для заданного числа.
Спроектируйте базу данных врачей и пациентов в SQL. Создайте stored procedure или запрос в SQL, который вернет врачей, имеющих больше, чем N пациентов.
Проверьте коллекцию на наличие дубликатов.
Спроектируйте thread-safe класс Singleton в C#.
Надо записать некую сущность в базу данных и отправить событие в брокер сообщений. Как это сделать с минимальным риском потери данных?
Имеются три сервиса. Выполняется HTTP-запрос на первый. Первый должен записать данные во второй, а второй - в третий. Как гарантировать, что данные при такой сложной коммуникации не потеряются? Как предотвратить записи дубликатов данных?
Будет ли работать этот код и почему?
a)
SomeClass myClass = null;
myClass.SomeMethod();
б)
var table = GetTable();
table.Draw();
…
private SomeClass GetTable()
{
using(var table = new SomeClass())
{
table.ID = "www";
table.Width = "95%";
table.Controls.Add(tr);
return table;
}
}
Расскажите, что делает этот код, и предложите, как его улучшить:
а)
Shape shape = GetNextShape();
if(shape is Circle)
Console.WriteLine(((Circle)shape).Radius);
б)
public int Quantity
{
get
{
try
{
return int.Parse(TxtQuantity.Text);
}
catch (Exception)
{
return 0;
}
}
}
Что не так с кодом?
try
{
SomeMethod();
}
catch(Exception e)
{
Log(e.Message);
throw e;
}
Senior
Как бы вы спроектировали FTP-сервер? Web-сервер? Хостинг картинок с разделением прав доступа? Систему, состоящую из front- и back-офисов? Создайте клон любой популярной социальной сети (Instagram, Facebook и т.д.)
Допустим, есть сущность сделки (Bid). И в сделке есть список партнеров, с которыми эта сделка заключается. Сами сделки хранятся в сервисе сделок (bidding service), а партнеры - в своем сервисе (partners service). И когда показывается список сделок, на начальном скрине нужно отразить количество партнеров. Как бы вы спроектировали хранение и изображение этого счетчика?
Задача на знание LINQ: с исходной коллекции данных необходимо получить новую коллекцию по определенным требованиям (например, отсортированную, без дубликатов и т. д.).
Напишите программу, которая проверяет, является ли поле судоку 9×9 правильно заполненным.
Реализуйте свой Select, Where, SelectMany со всеми характеристиками LINQ (отложенное исполнение, одномоментная (eager) проверка входных данных).
С помощью LINQ напишите метод, который вернет такие элементы коллекции, которые делятся на N без остатка, отсортированные от наибольшего значения к наименьшему. Сигнатура метода: List <int> Filter (IEnumerable <int> collection, int n) ;.
Напишите функцию, которая вернет сумму всех четных элементов массива, который передается в функцию (JavaScript).
Выражаем благодарность за подготовку статьи Алексею Краевому, Максиму Шнуренку, Андрею Ткаченку, Владу Медведовскому, Сергею Селецкому, Андрею Губскому, Сергею Мащуренку, Александру Скриннику, Андрею Соболю, Богдану Нановскому, Святославу Аксёнчикову, Ивану Корнелюку, Михаилу Пивоварову, Алексею Дерке, Евгению Гуреву, Михаилу Меркулову, Юрию Воронину.
Что нового в Angular 5
Автор: Дмитрий Охрименко
Переход от AngularJS к Angular 2 был огромным шагом вперед. При этом изменилось абсолютно все, без обратной совместимости. В то же время, Angular 4 добавила новые возможности, но при этом была обратно совместимой с Angular 2 (Версия Angular 3 была пропущена из-за @angular/router, который на момент релиза был 3.x, в то время как остальные пакеты 2.x. Для того, чтобы избежать путаницы и перевести все пакеты к одной версии, третья версия была пропущена). Angular 5 - это следующее обновление, в котором изменения затронули механизмы, работающие «под капотом».
Многие пользователи ITVDN задают вопрос об актуальности учебных программ видеокурса Angular Essential, который записан с использованием версии 2 и видеокурса Angular Advanced (версия 4). Angular 5 не является чем-то абсолютно новым, это улучшение существующего Фреймворка. Чтобы понять и начать использовать возможности, которые появились в пятой версии, необходимо знать основы, которые не изменились, начиная со второй версии.
Что нового в Angular 5?
Улучшенный компилятор. В Angular 4 компилятор перекомпилировал все файлы при каждом изменении. В Angular 5 компилятор работает только с теми файлами, в которых есть изменения, а это значит, что время на компиляцию проекта в целом значительно снизилось.
Оптимизированная сборка. В Angular CLI при использовании production build совместно с версией Angular 5 по умолчанию будет применяться build optimizer, который с помощью семантического анализа кода приложения сможет значительно уменьшить его размер.
Акцент на упрощение разработки PWA (Progressive Web Apps). PWA - это приложения, которые объединяют в себе лучшее, что есть в веб-приложениях и лучшее, что есть в мобильных приложениях.
PWA работают независимо от выбранного браузера;
адаптируются под устройство - десктоп, планшет, телефон;
могут работать без подключения к Интернет или при перебоях со связью;
выглядят как приложение, установленное на устройство;
благодаря Service Worker содержат актуальную обновленную информацию;
являются безопасными, так как работают через HTTPS;
используют возможности, подобные push уведомлениям;
Installable – позволяют пользователю добавить приложение на домашний экран устройства.
Поддержка TypeScript 2.4. Angular 5 поддерживает версию TypeScript 2.4, что дает возможность использовать новые возможности TS: перечисления, основанные на строках, улучшения проверки типов при работе с generic-типами, week-type-detection и прочее https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-4.html
Pipes, адаптированные под локализацию. Обновленные Pipes для Date, Currency, Number и Percent, нет необходимости использовать i18n. https://github.com/angular/angular/blob/master/CHANGELOG.md#i18n-pipes
Новые события Router. Используя события ActivationStart и ActivationEnd или ChildActivationStart и ChildActivationEnd, можно организовать отображения индикаторов загрузки при смене маршрута.
HttpClient. Новый HttpClient был добавлен в версии 4.3, старый http клиент помечен как depreceted в новой версии. В Angular 6 старый клиент будет удален. Из преимуществ нового клиента можно выделить самостоятельное извлечение JSON без необходимости явного применения метода map и возможность применять interceptors. https://angular.io/guide/http
Валидация форм. Теперь при работе с формами, c помощью свойства updateOn, можно определить, в какой момент будет происходить проверка – на событие blur или submit (вместо проверки на каждое событие input).
Замена ReflectiveInjector на StaticInjector. Изменен механизм для внедрения зависимостей. Для нового StaticInjector не нужен полифил Reflect (но при использовании JIT данные полифил все равно нужно будет использовать), что может уменьшить размер приложения.
Angular CLI 1.5 использует Angular версии 5.
Улучшение NgZone. NgZone стала еще быстрее, также библиотеку можно отключить для применения другой библиотеки для улучшения производительности.
Улучшенный RxJS. Поддержка обновлена до версии 5.5.2 и выше. Поддержка новых pipable operators https://github.com/ReactiveX/rxjs/blob/master/doc/pipeable-operators.md
Angular 5 получился компактней и быстрее, чем его предшественники, и не обошелся без новых возможностей. Запуск следующей версии Angular планируется на 28 марта 2018 года. Будем ждать улучшений и новых возможностей от команды Angular.