Результаты поиска по запросу: начальный курс c
Выбор IT-специальности. Подборка материалов ITVDN за 2020 год
Автор: Редакция ITVDN
Привет, друзья!
IT — одна из сфер деятельности, которая продолжает расти и развиваться, несмотря на кризис 2020.
Все больше людей хотят перейти в IT, но как это сделать, если ты до конца не понимаешь, в чем разница между специальностями, языками программирования, что перспективно, что тебе под силу, а что будет сложно?
Чтобы облегчить путь новичков в IT, команда ITVDN регулярно создает много видео уроков, вебинаров, статей, планов обучения, привлекая для этого экспертов с большим опытом в подготовке специалистов.
Огромной популярностью среди новичков пользуется рубрика Выбор IT специальности на YouTube канале ITVDN. Сегодня мы вам расскажем о том, какие наиболее интересные вебинары и статьи были в 2020 году. Смотрите, читайте и учитесь на ITVDN!
Вебинары ITVDN по выбору специальности
Вебинары по теме “Как стать ...” — это отличный источник важной информации из уст профессиональных разработчиков. В них вы найдете самые актуальные ведомости касательно желаемой IT-специальности: специфика профессии, какие технологии и языки стоит учить, эффективный подход к обучению, его длительность и т. д.
Вам могут быть полезны следующие вебинары за текущий год:
Кто есть кто в IT компании. Структуры и роли
Как стать C# разработчиком в 2021 году. .NET или .NET Core?
Как стать программистом? Frontend, Java, Python или .NET - что выбрать?
Как прокачать английский для собеседования в IT компанию
Как стать веб-дизайнером с нуля
Как стать Android разработчиком
Как стать FrontEnd разработчиком?
Как стать Java разработчиком?
Как стать Python разработчиком?
Как стать C# / .NET разработчиком?
Статьи ITVDN по выбору специальности
Приведенные ниже статьи позволят вам сформировать целостное понимание популярных на сегодняшний день специальностей, а также разобраться с языками программирования и технологиями, которые требуются для успешного старта в выбранном направлении.
Что должен знать C# / .NET разработчик?
С чего начинается создание сайтов? Специальность верстальщик
Кто такой Full Stack разработчик?
Какую IT-специальность выбрать в 2021 году?
Что должен знать FrontEnd разработчик в 2019 году?
Что должен знать Python разработчик в 2020 году?
Что должен знать Java разработчик в 2020 году?
Как стать разработчиком игр?
Как стать Android разработчиком?
Java vs Python. Что выбрать?
Также приведем статьи, которые подойдут любому начинающему разработчику. Они ориентированы на расширение вашего IT-кругозора, а также вы найдете в них множество полезных советов по обучению и развитию себя как профессионала.
FAQ начинающего программиста
Онлайн обучение программированию: подводные камни и советы
Идеальное резюме программиста: что писать в резюме?
Как не провалить своё IT-обучение?
Нужно ли программисту высшее образование?
C наилучшими пожеланиями, команда ITVDN
Оставайтесь с нами и приводите друзей!
Что должен знать FrontEnd разработчик в 2024 году
Автор: Влад Сверчков
Основные технологии.
Фреймворки и вспомогательные инструменты.
Необязательные технологии.
Зарплаты FrontEnd разработчиков.
DOU.
Djinni.
Stack Overflow Developer Survey 2023.
Почему так много технологий? Советы новичкам FrontEnd.
Итоги.
FrontEnd – один из самых легких направлений разработки в IT. Он выгодно отличается тем, что сочетает в себе программирование и творчество, поскольку девелопер работает над оживлением дизайнерского макета и созданием соответствующей пользовательской логики. Также преимуществом фронтенда является то, что увидеть результат работы можно почти сразу – в любом браузере.
Относительная легкость фронтенда порождает большую популярность среди желающих попасть в IT, а учитывая последствия открытой агрессии по отношению к Украине – особенно большую популярность, ведь это возможность работать удаленно (на IT-компанию или на фрилансе) и получать хорошую зарплату. Соответственно, конкуренция среди Trainee/Junior FrontEnd разработчиков весьма высока, поэтому работодатели вынуждены закручивать гайки и повышать требования к кандидатам, чтобы отобрать лучших.
Так как стать фронтенд разработчиком? Какими технологиями необходимо владеть, чтобы стать Intern/Junior FrontEnd разработчиком в 2023 году? Проанализировав вакансии на украинском рынке айти, мы составили список актуальных инструментов, которые обычно требуют работодатели от кандидатов. Их перечень – ниже в статье.
Frontend developer roadmap. Основные технологии
HTML5 & CSS3
HTML5 и CSS3 – это фундаментальные технологии, без знания которых не обойтись ни одному веб-разработчику. С помощью языка гипертекстовой разметки HTML создается разметка (каркас) каждой интернет-страницы. Затем язык стилей CSS преображает сайт и придает ему привлекательный и эффектный внешний вид. Помимо этого, необходимо владеть:
кроссбраузерной адаптивной версткой, чтобы уметь создавать сайты под мобильные устройства, планшеты и широкоформатные экраны и для различных браузеров;
семантической версткой для повышения качества разметки и улучшения поисковой индексации сайта;
валидной версткой, которая предполагает полное соответствие кода разработчика всем стандартам W3C – организации, которая создает и внедряет технологические стандарты для World Wide Web.
Уделите особое внимание вёрстке под мобильные устройства, так как современный веб-потребитель очень много времени проводит в смартфоне. Существует даже специальный подход, при котором сначала верстается веб-сайт под мобильные устройства, а только потом под десктопы – называется Mobile First.
Это общие требования по верстке. Теперь же рассмотрим более детально требования конкретно по языку стилей. Здесь вы должны знать основные свойства CSS3: фоны, градиенты, тени, анимации, трансформации, переходы, а также технологии Flex и Grid, о которых мы еще поговорим.
Хорошее владение HTML и CSS уже позволяет заниматься версткой сайтов и зарабатывать деньги. Именно с этих двух базовых технологий начинается путь к профессии FrontEnd разработчика.
Качественно изучить HTML и CSS вы сможете при помощи следующих наших курсов:
HTML5 & CSS3 Стартовый;
HTML5 & CSS3 Базовый;
HTML5 & CSS3 Углубленный.
Flex и Grid CSS
Технологии вёрстки надежных адаптивных веб-страниц, которые позволяют легче создавать динамические сайты и удобнее структурировать их содержимое. На нашем ресурсе есть курсы на украинском языке, которые хорошо объясняют темы Flex и Grid вёрстки: CSS Flexbox и Вёрстка на Grid.
CSS-препроцессоры
CSS-препроцессор — это программа, которая имеет свой собственный синтаксис, но может сгенерировать из него CSS-код. Чаще всего в вакансиях встречаются SASS, SCSS, Stylus, LESS. Препроцессоры предназначены для:
ускорения процесса написания кода;
упрощения чтения кода и дальнейшей его поддержки;
минимизации рутинной работы при написании кода.
Для повышения эффективности написания CSS-кода вполне достаточным будет изучение лишь одного препроцессора, но в вакансиях часто встречаются сразу несколько.
Git & GitHub
Git — наиболее популярная система контроля версий, которая позволяет вести историю разработки проекта с возможностью доступа к каждой сохраненной версии.
Помимо этого, стоит уметь работать с сервисом онлайн-хостинга проектов, использующих систему контроля версий. В данном случае это GitHub. В тандеме с Git он позволяет разработчикам сохранять свой код онлайн, а затем взаимодействовать с другими разработчиками в разных проектах.
Данные системы позволяют команде программистов работать над одним проектом одновременно, сохраняя внесенные изменения, а также отслеживать выполнение задач каждым членом группы.
Git & GitHub — очень важные инструменты для любого IT-разработчика, изучением которых следует заняться как можно раньше.
Мы рекомендуем изучать Git на ITVDN при помощи курса “Основы работы с Git”.
Знания о веб-технологиях и сети интернет
Чтобы качественно выполнять свою работу, фронтенд разработчик должен разбираться в вебе и понимать принципы его функционирования. Таким образом, необходимо знать:
как работает интернет;
протоколы HTTP/HTTPS, веб-сокеты;
как работают браузеры;
что такое DNS и как он работает;
что такое доменное имя;
что такое хостинг.
Также будет неплохо, если вы попробуете настроить сайт на каком-нибудь бесплатном хостинге, привяжете домен к этому хостингу.
JavaScript
Язык программирования, который используется как при разработке клиентской стороны веб-приложения, так и серверной. При помощи JavaScript (сокращенно — JS) можно писать даже настольные и мобильные приложения, используя определенные программные платформы и библиотеки. Этот язык позволяет:
динамически изменять разметку;
осуществлять интерактивное взаимодействие с пользователем;
анимировать изображения;
совершать валидацию форм;
управлять мультимедиа и т. д.
Другими словами, JavaScript “оживляет” страницу и добавляет ей функциональности. Хорошее владение данным языком программирования является обязательным для каждого FrontEnd разработчика.
JavaScript использует официальный стандарт ECMAScript (сокращенно - ES), который подразумевает определенное формальное описание синтаксиса, базовых объектов и алгоритмов. На данный момент существует множество различных версий ES. Работодатели чаще всего требуют знание ES6+.
Однако, вначале необходимо изучить чистый JavaScript (vanilla JavaScript) и лишь потом вникать в новые стандарты. Как ни крути, а классику надо знать. Благодаря хорошему владению JS можно быстро разобраться в любой версии ES и затем освоить любой фреймворк или библиотеку.
ITVDN предоставляет возможность изучить JavaScript с нуля до продвинутого уровня при помощи курсов:
JavaScript Стартовый;
JavaScript Базовый.
JavaScript Core (DOM, AJAX, JSON)
DOM (Document Object Model) - объектное представление исходного HTML-документа. Ключевым является понятие DOM-дерева, которое описывает структуру страницы. С помощью объектной модели JavaScript получает полную власть над HTML-документом: возможность редактировать, удалять и добавлять элементы и атрибуты HTML, менять CSS код и т. д.
AJAX (Asynchronous JavaScript And XML) - это синтез технологий JavaScript и XML, который фактически представляет собой комбинацию:
встроенного в браузер XMLHttpRequest-объекта (чтоб запрашивать данные с веб-сервера);
JavaScript и HTML DOM (чтобы отображать или использовать данные).
AJAX позволяет веб-страницам совершать асинхронное обновление, обмениваясь данными с веб-сервером. Благодаря этой технологии страница не нуждается в перезагрузке - обновляется лишь конкретная ее часть (вспомните ленту новостей в социальных сетях).
JSON (JavaScript Object Notation) - это общий формат обмена данными. Позволяет совершать обмен информацией между программными продуктами, написанными на разных языках. Таким образом, клиент, использующий JavaScript, может легко передавать данные на сервер, который реализован с помощью Ruby/Java/PHP.
Все три технологии являют особую ценность для каждого веб-разработчика и раскрывают организацию работы интернет-приложения.
REST API
API – Application Programming Interface – это набор правил, при соблюдении которых программы могут взаимодействовать между собой. Разработчик создает API на сервере и позволяет клиентам обращаться к нему.
Красноречивым примером будет API от Google Maps, позволяющий веб-разработчику указать на гугл карте расположение определенного здания (точку выдачи интернет-заказов, офис компании и т. д.) на своем сайте. Таким образом, программист лишает себя необходимости самому разрабатывать собственную карту и пользуется уже готовым решением от Google, используя набор правил от API.
REST – Representational State Transfer – это архитектурный подход, регламентирующий, как именно API должны выглядеть. Этому набору правил должен следовать девелопер при создании собственного приложения. Простыми словами, REST – это обычный запрос вида «клиент-сервер» с использованием HTTP-протокола.
Фронтенд разработчику необходимо разбираться в REST API, поскольку эта технология используется везде, где необходимо работать с данными от сервера.
Алгоритмы и структуры данных
Понимание алгоритмов и структур данных (ADS, от Algorithms and Data Structures) — обязанность любого грамотного программиста.
К структурам данных относятся: стеки, очереди, связанные списки, графы и т. д. Изучив их, вы сможете управлять сложностью своих программ, делая их более доступными для понимания, а также разрабатывать высокопроизводительные программы, которые будут эффективно работать с памятью.
Знание алгоритмов позволит вам создавать сложные конструкции для эффективного решения широкого спектра задач. Когда говорят об алгоритмах, обычно имеют ввиду алгоритмы сортировки и поиска: сортировки прямым включением, прямым выбором, слиянием, пирамидальная, прямой поиск, бинарный, индексно-последовательный и другие.
Важно разбираться и в нотации Big O, которая описывает сложность каждого алгоритма. Данный механизм помогает определить, при каких условиях выгоднее использовать тот или иной алгоритм.
Отметим, что как новичку вам не нужно нырять вглубь этих тем. Будет достаточно:
теоретического владения ADS;
понимание, где какую структуру данных следует использовать;
умение оценить сложность алгоритма (Time Complexity и Space Complexity);
умение написать несколько алгоритмов (самые популярные алгоритмы сортировки и поиска).
Владение ADS поможет вам создавать более качественный и оптимизированный код. Кроме того, это усилит ваши позиции среди других кандидатов.
Webpack
Мощный сборщик модулей (bundler), позволяющий скомпилировать в один файл несколько различных компонентов: от .js и .css файлов до картинок, шрифтов и т. д. Используется для работы над объемными проектами и часто встречается в вакансиях. Оно и не удивительно – это самый популярный сборщик, как-никак.
npm
Node Package Manager – пакетный менеджер, который является крупнейшим в мире реестром программного обеспечения (согласно выдержке из официального сайта). Использует платформу Node.js и позволяет разработчикам со всего мира использовать уже готовые программные решения и распространять собственные на основе Node.js.
npm используют для управления зависимостями, то есть для установки, обновления и удаления тех пакетов (библиотек и инструментов), которые используются в вашем проекте. Незаменимая вещь для FrontEnd разработчиков, которой вы будете обязательно пользоваться.
Основы Figma
Figma является популярным дизайнерским инструментом для создания интерактивных прототипов приложений или веб-сайтов. С его помощью дизайнер создает дизайн, который фронтенд разработчик затем верстает с помощью HTML/CSS и добавляет интерактивность при участии JavaScript.
Знание основ фигмы позволяет девелоперу удобно взаимодействовать с дизайнерским прототипом: быстро узнавать необходимые размеры тех или иных элементов, производить экспорт картинок и иконок и т. д. Дополнительный плюс – возможность использования браузерной версии Figma.
Английский язык
План обучения Front-end должен обязательно включать в себя подтягивание English. Знание английского является одним из основных требований к фронтенду-разработчику, поскольку большое количество полезной информации находится именно на англоязычных сайтах. Уровень чтения технической документации будет достаточным для комфортного использования иностранных ресурсов (Intermediate).
Однако чем выше уровень вашего английского, тем больше шансов получить job-оффер. Инглиш используется не только при работе с документацией, но и при коммуникации с командой и клиентами. Среди программистов бытует выражение: «Какой язык следует учить первым? Учи английский!». Поэтому не пожалейте ваше время и хорошенько подтяните английский – вполне вероятно, что именно хорошее владение им станет решающим при рассмотрении вашей кандидатуры.
Подтянуть English вы можете благодаря следующим бесплатным видео курсам на ютуб-канале CodeUA:
Business English – вы овладеете базовой деловой лексикой для активного участия в переговорах на английском, а также ведением ключевой документации на этом языке.
IT English – акцент на прокачке деловой лексики, грамматики, установившихся конструкций и выражений из IT-сферы.
Фреймворки и вспомогательные инструменты
Основные фреймворки JavaScript
Это инструменты, с помощью которых создаются динамические веб/мобильные/десктопные приложения на языке JavaScript. Они ускоряют разработку веб-приложений и предусматривают четко структурированную организацию кода, повышая его качество и чистоту.
Самыми популярными high-level инструментами для фронтенд разработки можно назвать фреймворки Vue.js, Angular и библиотеку React. Каждый из них предназначен для решения своего спектра задач и имеет различную степень сложности: Vue.js – самый легкий (но и с наименьшим сообществом), React – средней сложности, Angular – высокой сложности. Стоит сконцентрироваться на глубоком изучении одного фреймворка, но в то же время очень рекомендуется знать особенности и сферу применения всех вышеперечисленных технологий.
Какой фреймворк всё же выбрать? Мнения на этот счет расходятся. Инструментарий выбирается индивидуально под проект и трудно предугадать, какие задачи вам нужно будет решать. На данный момент наибольшей популярностью пользуется React, поскольку он сбалансирован как с точки зрения сложности, так и с точки зрения богатства функционала. К тому же, наибольшее количество вакансий припадает именно на эту библиотеку, а значит, что она интересна не только разработчикам, но и бизнесу.
Каждый из трёх этих инструментов доступен для изучения на платформе ITVDN. Украиноязычные курсы по направлению Angular:
Angular Базовый.
Тестирование Angular-приложений.
По направлению React:
React Базовый.
По направлению Vue.js:
Vue.js Стартовый.
Вспомогательные фреймворки JavaScript
Наряду с традиционной троицей – Vue.js, React и Angular – в вакансиях часто встречаются другие фреймворки, созданные на их базе, например Next.js и Nuxt.
Next.js базируется на популярном React и позволяет увеличить эффективность и масштабировать процесс создания реакт-приложений. Он добавляет слой абстракции над реактом, а одними из главных его новшеств являются рендеринг на серверной стороне и генерация статических веб-сайтов.
Очень много React-вакансий для джунов имеет среди требований и пожеланий Next.js – если вы ориентируетесь на данную библиотеку, рекомендуем ознакомиться с данным фреймворком.
Nuxt – высокоуровневый фреймворк на базе Vue.js для масштабируемого и интуитивно понятного создания FullStack веб-приложений и веб-сайтов. Встречается нечасто в требованиях, но его изучение может выгодно подсветить вашу кандидатуру.
Angular Material
Технология, на которую следует обратить внимание тем, кто планирует развиваться в направлении Angular. Это библиотека UI компонентов, которая дает доступ к готовым визуальным решениям, что позволяет ускорить процесс вёрстки на Ангуляре. Библиотека исповедует принципы Material Design, введенные компанией Google в 2014 году, которые предусматривают привлекательный и интуитивно понятный UI дизайн, одинаково красивый на различных устройствах.
Необязательная для изучения библиотека, но часто встречающаяся в вакансиях – её знание поможет вам как минимум выделиться среди других Angular-кандидатов.
TypeScript
Кроссплатформенный строго типизированный язык, который является расширением JavaScript. Строгая типизация позволяет уменьшить количество потенциальных ошибок в исходном коде, написанном на TypeScript. Также, этот язык реализует концепции, которые близки объектно-ориентированным языкам, таким как C#, Java и подобным. TypeScript повышает скорость и удобство написания сложных комплексных программ, вследствии чего их становится легче поддерживать, масштабировать и тестировать.
Согласно зарплатной аналитике от DOU (зима 2024), TypeScript обогнал JavaScript по популярности и занимает первое место среди украинских разработчиков в категории "Основной язык программирования".
В вакансиях этот язык встречается довольно часто вне зависимости от целевого фреймворка. При этом для Angular разработчиков знание TypeScript обязательно. Советуем выучить данный язык с помощью нашего украиноязычного курса "TypeScript".
Инструменты управления состоянием программы (State Management)
Большие веб-приложения постоянно растут в сложности, а потому хранить данные, которые могут использоваться в разных местах становится все сложнее. Для решения этой проблемы были придуманы отдельные библиотеки, идущие параллельно с фреймворками — они служат для управления глобальным хранилищем данных всего веб-приложения и называются менеджерами состояний. Их применение уже стало стандартом во FrontEnd разработке. Для девелоперов, которые используют Vue.js, это VueX, для React-разработчиков — Redux и MobX, для Angular-девов — RxJS, NgRx.
Необязательные технологии (но весьма полезные)
Паттерны проектирования JavaScript
Это лучшие практики, которые описывают типичные способы решения распространенных задач, возникающих в ходе проектирования программного обеспечения. Знание шаблонов проектирования позволяет писать более чистый, понятный и читаемый код, а также избегать “изобретения велосипеда”. Более того, владение паттернами показывает вашу грамотность, как разработчика, и повышает вашу ценность в глазах работодателя, что поможет выделиться на фоне конкурентов.
CSS-фреймворки
Иногда в вакансиях для начинающих FrontEnd разработчиков можно встретить требования к владению CSS-фреймворками. Самыми популярными являются Bootstrap и Tailwind. Они помогают значительно ускорить создание вёрстки за счет ряда встроенных возможностей.
Bootstrap – результат стараний команды из Twitter, который вышел в свет в далеком 2011 году. Полностью бесплатный, имеет открытый исходный код и позволяет создавать гибкие, адаптивные веб-интерфейсы под разные устройства, используя уже готовые шаблоны кнопок, форм, таблиц и т. д.
Tailwind более современный и трендовый – 2017 года выпуска, и при этом известен своей высокой степенью кастомизации (в отличие от Bootstrap). Он не дает набор готовых шаблонов (доступно только в платном Tailwind UI), однако позволяет быстро создавать собственные решения за счет особого синтаксиса.
В любом случае, рекомендуем попробовать оба инструмента, чтобы почувствовать их мощность, преимущества и недостатки.
GraphQL
GraphQL является моделью данных, которая часто используется для создания API для приложения. Главное преимущество перед REST API – наличие только одной точки входа, что позволяет более динамично и гибко определять взаимодействие с данными. Также у GraphQL есть такой синтаксис, который позволяет работать с любым языком программирования как на клиенте, так и на сервере – остается только подключить необходимую библиотеку к вашему проекту для интеграции GraphQL.
На момент написания статьи каждая шестая вакансия на Djinni в разделе “JavaScript/FrontEnd” с опытом от 0 до 1 года имела среди обязательных или желанных технологий GraphQL.
jQuery
Небольшая, быстрая и многофункциональная библиотека JavaScript, для работы с которой необходимо владеть HTML, CSS и JavaScript на базовом уровне. Она призвана упростить программирование на языке JS. Данная библиотека представляет объемные решения распространенных задач в виде методов, вызываемых одной строкой кода.
Несмотря на то, что jQuery уже давно покинула зенит популярности, уступая место фреймворкам JS, множество сайтов всё ещё использует эту библиотеку, а некоторые работодатели указывают её среди требований для Junior, особенно для джунов-верстальщиков.
Линтеры
Инструменты, позволяющие анализировать качество JavaScript-кода в соответствии со стандартом ES. Они встраиваются в среду разработки и указывают на наличие несоответствий стандарту кода, если таковые имеются. Данный механизм полезен как для единоличной разработки (для самоконтроля), так и для командной, когда каждый разработчик должен следовать тем же языковым конструкциям, чтобы на выходе получить единый, целостный проект. Один из самых известных линтеров – ESLint.
Это необязательный инструмент для работодателя, но он очень полезен для веб-разработчиков из-за его возможностей по контролю качества кода.
Тестирование
Jest и Cypress – главные инструменты модульного тестирования, которое возлагается на плечи разработчика. Но что это такое?
Unit тестирование (оно же — модульное тестирование) — процесс, который заключается в создании тестов для проверки работоспособности отдельных участков написанного программистом кода. Выполняется непосредственно автором кода.
Какую пользу приносит Unit тестирование:
существенное сокращение багов в коде;
упрощение рефакторинга кода;
обеспечение качественного отделения интерфейса от реализации;
лучшее понимание написанного кода;
возможность протестировать мельчайшие участки кода.
Все инструменты учить не надо — достаточно научиться управляться лишь с одним из них.
Gulp / Grunt
Системы сборки, автоматизирующие рутинные задачи разработчиков: минификацию кода, оптимизацию изображений, тестирование, анализ качества кода и прочее. Подходят для разработки небольших проектов.
SVG
Язык разметки масштабируемой векторной графики. Изображения на странице, сделанные с помощью SVG, корректно отображаются на экранах с разным разрешением, не теряя при этом своего качества, в отличие от традиционных растровых .jpeg, .png и других.
SOLID принципы
SOLID – это принципы, являющиеся своеобразным ремнем безопасности для тех, кто работает в соответствии с парадигмами объектно-ориентированного программирования. Они были созданы с целью обезопасить ООП-ориентированного разработчика от непонятного, запутанного спагетти-кода, который также очень трудно поддерживать.
SOLID – это акроним, состоящий из пяти букв, которые кодируют пять основных принципов:
S – Single Responsibility Principle (принцип единой ответственности)
O – Open-Closed Principle (принцип открытости-закрытости)
L – Liskov Substitution Principle (принцип подстановки Барбары Лисков)
I – Interface Segregation Principle (принцип разделения интерфейса)
D – Dependency Inversion Principle (принцип инверсии зависимостей)
Владение этими принципами позволяет грамотно проектировать и разрабатывать такие программные системы, которые с большой вероятностью смогут длительное время развиваться, расширяться и поддерживаться.
Хотя SOLID принципы написаны преимущественно для ООП, их идеи вполне применимы и к современной JavaScript-разработке, что поможет фронтенд разработчикам создавать более чистый и лаконичный код.
Зарплаты FrontEnd разработчиков
DOU
Обратимся к уже упомянутой зарплатной аналитике от украинского IT-сообщества DOU за зиму 2024 года. Медианная зарплата всех украинских разработчиков, принявших участие в опросе (а их 5959), следующая:
Intern Software Engineer – 350 USD;
Junior Software Engineer – 950 USD;
Middle Software Engineer – 2500 USD;
Senior Software Engineer – 4738 USD.
Теперь посмотрим на медианную ЗП FrontEnd разработчиков:
Junior – 900 USD;
Middle – 2400 USD;
Senior – 4600 USD.
На всех позициях уменьшение вознаграждения по сравнению с аналитикой полгода назад.
Выходит, медиана фронтендщиков почти на всех тайтлах немного меньше, чем общая медиана, однако разрыв достаточно небольшой.
Djinni
Теперь перейдем к зарплатной аналитике украинского сервиса Djinni и выберем раздел “JavaScript / FrontEnd” и рассмотрим спрос за последние 6 месяцев.
Есть 17818 кандидатов, зарплатные ожидания которых составляют от 600 USD до 3000 USD при зарплатных вилках вакансий 2000-3300 USD. На 1 вакансию в среднем приходится 114.4 отзыва, а количество предложений на кандидата – 0.2.
Stack Overflow Developer Survey 2023
Давайте посмотрим, сколько зарабатывает этот специалист за пределами Украины. В этом нам помогут результаты опроса Stack Overflow Developer Survey 2023 (свыше 90 000 респондентов из США, Индии, Германии, Канады, Великобритании и других стран). Эта цифра – 59 970 USD в год (примерно 5000 USD в месяц).
При этом важно сказать, что фронтендщики по данному опросу имеют в среднем 8 лет профессионального кодинга – и это один из самых низких показателей. Ниже располагаются только Data Scientist / ML Specialist – 7.9 лет опыта, а также студенты, которые имеют чуть более 2.8 лет опыта в профессиональном создании кода.
Почему так много технологий? Советы новичкам FrontEnd
Украинский рынок FrontEnd очень сильно перегрет кандидатами. Работодатели, естественно, пользуются этой ситуацией: выставляют больше требований к кандидатам и параллельно снижают уровень ЗП.
Таким образом они хотят отфильтровать слабых кандидатов и получить как можно более скилового специалиста по более низкой цене, поскольку в Junior-девелопера нужно вложить значительное количество времени и денег, пока он выйдет на такую производительность, которая приносит хоть какие-то доходы.
Наша статья учитывает эти нюансы, поэтому мы отразили максимальное количество технологий, которые вы с большой вероятностью встретите в большинстве вакансий. Не все инструменты нужно знать и учить, но чем богаче ваш инструментарий, тем больше шансов на трудоустройство.
Несколько советов для начинающих, решивших покорить FrontEnd:
Делайте пет-проекты и публикуйте их на GitHub. Создавайте приложения, которые будут решать ваши повседневные задачи, и старайтесь применить в них как можно больше изученных вами технологий. Это позволяет подтвердить ваши знания на практике и демонстрирует потенциальному работодателю навыки кодинга.
Используйте ИИ. Искусственный интеллект будет полезен в ряде задач:
ускорение разработки;
генерирование идей для пет-проектов;
объяснение сложных тем;
ассистенция при написании кода и т. п.
Развивайте собственный бренд. Чем больше ваша популярность в IT-сообществе, тем больше шансы приглашения на собеседование. Для этого лучше всего подходит LinkedIn – социальная сеть для установки рабочих контактов, но также можно подключить Instagram, YouTube и т. д. Публикуйте посты с полезной информацией, делитесь вашими достижениями, работающими советами и личными впечатлениями по изучению FrontEnd, и т. д. За вами станут наблюдать многие IT-специалисты, которые могут сами посетить вас с предложением работы или кому-то порекомендовать.
Не пренебрегайте изучением английского языка. English является супер важным в условиях перегретого рынка джунов – нужно обязательно иметь B1. Если есть несколько сильных кандидатов, примерно одинаковых по soft & hard скилам, работодатель выберет того, кто лучше знает английский. Также упомянутая аналитика DOU доказывает – чем лучше знаешь английский, тем на бóльшую ЗП можешь претендовать.
Менторинг. Максимально удачное решение – найти себе ментора. Он будет присматривать за вашей учебой и прогрессом, подбрасывать задачи/проекты, давать полезные советы, отвечать на вопросы и т. д. А в конце вашего обучения может предложить свободное место в компании или порекомендовать знакомым айтишникам.
Оттачивайте навыки программирования в Codewars или LeetCode. Это специальные сервисы для программирования, где вы выбираете себе задачу (разные уровни сложности) и выполняете её, развивая навыки кодинга на необходимых языках. Очень удобно и полезно, учитывая, что на собеседовании могут быть похожие live-coding задачи, а также, что LeetCode используют девелоперы, которые готовятся к интервью в топовых IT-компаниях (Facebook, Google, Amazon и т. д.). Также на ITVDN есть специальный интерактивный практикум, где вы можете "набить руку".
Коллаборация с начинающими разработчиками. Присоединяйтесь к командам единомышленников, где вы будете работать совместно над проектом, чтобы получить навыки работы в команде. Конечно, это не равно коммерческому опыту, который стремятся увидеть у вас работодатели, но позволяет поработать в условиях, максимально приближенных к реальным.
Посещайте тематические IT-события в офлайн формате. Там вы можете пообщаться с другими девелоперами, показать себя и расширить свою сеть полезных знакомств. Контактировать с IT-специалистами на таких ивентах обязательно! Иначе вы просто зря потратите время и деньги.
Пройдите пробное интервью за донат. Вы можете месяцами не получать приглашения на собеседование, из-за чего будет страдать ваша мотивация и уверенность. Чтобы не падать духом и дать себе объективную оценку, договоритесь об интервью с каким-либо FrontEnd специалистом, который проведет вам техническое собеседование за донат и даст советы по дальнейшему карьерному пути – сейчас это популярная тема.
Пробное интервью с рекрутером. Возможно, проблема отсутствия приглашений кроется в вашем CV или плохо оформленном LinkedIn-аккаунте? С этим поможет разобраться рекрутер или карьерный консультант, который предоставит свои услуги за деньги или соответствующий донат.
Относительно двух последних пунктов – на ITVDN все студенты, обучающиеся в формате онлайн занятий с тренером в группе (Live Online), бесплатно получают персональную помощь в дальнейшем трудоустройстве, а именно:
индивидуальную консультацию для определения персональных целей;
помощь в составлении CV (резюме) и Cover Letter (сопроводительного письма);
помощь с оформлением LinkedIn-аккаунта;
проведение тестового интервью с развернутым фидбеком;
формирование стратегии поиска работы;
предоставление дополнительных полезных материалов.
Итоги
FrontEnd разработчик – достаточно универсальный боец в мире веб-разработки. Он должен уметь и верстать, и создавать логику работы клиентской части, и понимать работу серверной части веб-приложения. Для овладения таким большим инструментарием стоит запастись временем, терпением и упорством. Указанные в статье средства разработки сайтов также имеют аналоги, поскольку для решения разных задач подходят разные веб-инструменты. Однако мы выбрали самые популярные и эффективные из них.
Если у вас есть желание овладеть этой профессией и вы хотите самостоятельно испробовать, чем занимается фронтенд разработчик, на ITVDN создана комплексная программа обучения в формате видео обучения, которая включает 51 видео курс.
Если вам больше нравится живое онлайн обучение с тренером и в группе с другими студентами, предлагаем формат Live Online для изучения специальности FrontEnd (Angular или React направления).
Желаем вам успехов в достижении ваших целей!
Оставайтесь с ITVDN!
Что должен знать Python разработчик в 2020 году
Автор: Влад Сверчков
Общие знания, которые нужны каждому Python разработчику
Что должен знать Python Developer, работающий в сфере Data Science
Python BackEnd Developer
Python Developer в сфере DevOps
Automation QA Engineer (Python)
Desktop, Mobile, Game Python Developer
Итоги
Добрый день, дорогие читатели блога ITVDN! Предлагаем вашему вниманию новую публикацию в рубрике “Что должен знать разработчик...”, в которой мы пишем о самых популярных IT-профессиях. Ранее уже были опубликованы обзоры по FrontEnd и .NET. В этот раз в центре внимания язык Python. В каких сферах он успешно применяется, а в каких буквально незаменим? Какими знаниями нужно обладать, чтобы стать, к примеру, Python BackEnd разработчиком? Все это вы узнаете в нашей статье. Приятного чтения!
В последние годы язык программирования Python стремительно набирает популярность. По данным Stack Overflow Developer Survey 2019, в котором приняли участие более 87 тысяч IT специалистов из разных стран, Python в 2019 году опередил даже таких постоянных и несомненных лидеров как Java, С# и С++. Сейчас он широко используется в Data Science (машинное обучение, анализ данных, визуализация), разработке встроенного программного обеспечения и в реализации серверной части веб-приложений. Также при помощи Python можно создавать игры, десктопные и мобильные приложения, писать тесты для ПО, а также упрощать администрирование ОС.
Как видите, сферы применения довольно обширны. Мы постараемся затронуть самые популярные, в которых Python используется в качестве основного средства программирования.
Начнем с технологий, которые должен знать любой Python-разработчик вне зависимости от специализации.
Python
Многие сходятся во мнении, что язык программирования Python - один из самых легких для изучения, его часто рекомендуют в качестве первого языка начинающим программистам. В то же время это высокоуровневый язык программирования общего назначения, с большим потенциалом повышения производительности программиста, скорости разработки и читаемости кода. Каждый Python-девелопер должен владеть таким набором знаний:
Синтаксис языка Python: типы данных, строки и символы, операции с целыми и вещественными числами, отступы, условные и циклические конструкции, функции, списки, словари, классы, файловый ввод-вывод, логические операции и операции сравнения.
Популярные библиотеки и фреймворки. Этот пункт зависит от выбранного IT-направления. К примеру, если вы планируете себя реализовать в веб-разработке, отличным выбором станет библиотека Requests, которая облегчит процессы составления HTTP-запросов, также будут полезны фреймворки Django и Flask. Если же вас увлекает машинное обучение, то Theano, TensorFlow, Keras и другие библиотеки помогут с построением и тренировкой нейронных сетей.
IDE и редактором кода. Проекты лучше создавать в интегрированной среде разработки (IDE) или в редакторе кода. Это позволяет сделать написание кода максимально удобным: подсветка синтаксиса, автодополнение, инструменты сборки, возможность отладки код и прочее. Самыми популярными платформами являются PyCharm, WingWare IDE, Komodo.
Открытым остается и вопрос, какую версию Python стоит изучать: 2.x либо 3.х? Согласно информации из официального источника разработчиков python.org, в 2020 году прекращается поддержка Python 2.7. Соответственно, стоит сконцентрировать усилия на изучении именно версии 3.х.
Разработчик должен иметь глубокие знания языка Python, понимать и уметь применять на практике принципы объектно-ориентированного программирования (ООП).
Английский язык
Знание английского языка - естественное требование для каждого разработчика в IT, поскольку большинство новых сведений о технологиях, курсы, учебные и справочные материалы появляются в первую очередь на английском. Для работы в команде разработчиков обычно знаний языка на уровне чтения технической документации и комментирования кода вполне достаточно, однако если вы планируете самостоятельно вести переговоры и переписку с иностранным заказчиком, ваш уровень должен быть выше.
Git & GitHub
Git - наиболее популярная система контроля версий, которая позволяет вести историю разработки проекта с возможностью доступа к каждой сохраненной версии.
Помимо этого, стоит уметь работать с сервисом онлайн-хостинга проектов, использующих систему контроля версий. В данном случае это GitHub. В тандеме с Git он позволяет разработчикам сохранять свой код онлайн, а затем взаимодействовать с другими разработчиками в разных проектах.
Данные системы позволяют команде программистов работать над одним проектом одновременно, сохраняя внесенные изменения, а также отслеживать выполнение задач каждым членом группы.
Алгоритмы и структуры данных
Понимание алгоритмов и структур данных является очень важным для любого программиста. Исключением могут быть разве что FrontEnd разработчики.
Данные используются во всех сферах нашей жизни: от банковских счетов и медицинских карт вплоть до списка оплаченных покупок в супермаркете. Знание структур данных поможет вам хранить информацию в упорядоченном виде, что упростит работу с ней. Также это повысит общую производительность ваших программ.
Знание алгоритмов позволит вам создавать сложные конструкции для эффективного решения широкого спектра задач.
Методологии разработки Agile/Scrum
Методологии разработки - это своеобразные путеводители по процессам эффективной разработки ПО. Их применение помогает организовать максимально продуктивную работу всех участников, которые напрямую или косвенно задействованы в разработке продукта в соответствии с выбранной стратегией.
Agile - семейство гибких методологий разработки программного обеспечения, которое позволяет выпускать продукт небольшими частями, постоянно его дополняя и совершенствуя. При таком подходе технические и бизнес-подразделения работают совместно, ПО постоянно обновляется, обеспечивается быстрое принятие решений и выявление неправильных подходов, приложение проще обслуживать, а качество кода готового продукта более высокое. Agile имеет собственный манифест, который подробно описывает основные принципы, на которых строится гибкая разработка.
Scrum является одной из реализаций agile-подхода. Его используют многие команды, поэтому знание особенностей работы со scrum-моделью для разработчика серверного ПО является востребованным и весьма полезным.
Итак, мы рассмотрели технологии, которыми должны владеть все Python разработчики, не зависимо от прикладной области, в которой они работают. Теперь давайте рассмотрим наиболее популярные специализации, в которых может себя реализовать Python разработчик, а это:
Data Scientist
BackEnd Developer
DevOps Engineer
Automation QA Engineer (Python)
Проанализируем каждое направление, затронув основные технологии. Также расскажем, каким образом Python используется в Desktop, Mobile и Game разработке.
Что должен знать Python Developer, работающий в сфере Data Science
Легкий и лаконичный Python нашел себе широкое применение в такой важной сфере разработки, как Data Science. Почему именно Python? Он прост в изучении и способен в несколько строк кода создать искусственный интеллект, который будет способен к самообучению, либо посчитать матрицу внушительных размеров.
Data Science подразумевает работу с большими объемами данных и включает в себя сбор, анализ, структурирование и дальнейшую визуализацию информации. Каждый специалист данной области занимается:
сбором большого количества неупорядоченных данных и преобразованием их в удобный формат;
решением бизнес-задач с использованием данных;
программированием на Python, R и других языках;
работой со статистикой;
использованием Machine Learning, Deep Learning и текстовой аналитике;
сотрудничеством с IT и бизнесом в равной мере;
изучением современных тенденций, которые могут помочь в разработке, которая ведется на данный момент в компании.
Итак, какими технологиями необходимо владеть, чтобы стать Data Scientist?
Линейная алгебра и математический анализ
Data Science - это как раз та область, в которой без знаний математики ну никак. Работа с колоссальным объемом данных предусматривает в обязательном порядке применение аппарата линейной алгебры. А это матрицы, векторы, линейные уравнения, различные алгоритмы классификации и кластеризации, которые широко используются (подробнее в следующих разделах). Также необходимо знать оптимизацию средствами матанализа.
Статистика
Наука, которая применяет совокупность методов и приемов по сбору, обработке, представлению и анализу числовых данных, чтобы впоследствии на их основании сделать те или иные выводы.
Статистика содержит такие важные разделы, как: выборка, распределение частот, среднее значение, взвешенное среднее значение, медиана, вероятность, распределения вероятностей, тестирование значимости, а также ряд других тем и понятий. В интернете есть множество хороших англоязычных курсов, которые помогут освоить разделы статистики, которые обязательны для специалиста Data Science.
Библиотеки и дополнительные инструменты Python
Для всевозможных математических вычислений используется Python, а точнее - его библиотеки. К примеру, Matplotlib и Seaborn используются при необходимости визуализации данных, NumPy для работы с уже упомянутой линейной алгеброй. Для научных вычислений прибегают к использованию SciPy. Pandas позволяет выполнять быстрый анализ, очистку и подготовку данных из разных источников - Excel, SQL, веб-страницы, файлы CSV. Таким образом, библиотеки Python предоставляют отличный набор для анализа данных и визуализации.
Среди дополнительных инструментов особого внимания заслуживает Jupyter Notebook, который позволяет создавать очень наглядные и информативные аналитические отчеты путем совместного хранения кода, иллюстраций, комментариев, формул и графиков.
Базы данных
Поскольку работа Data Scientist-а плотно связана с обработкой большого количества информации, очевидно, что без баз данных тут не обойтись. Необходимо знать, как извлекать и обрабатывать данные, уметь писать и выполнять сложные запросы.
Существуют реляционные базы данных (так называемые, SQL базы данных) которые используют структурированный язык запросов, и нереляционные (NoSQL), которые предлагают динамическую структуру для определения и обработки данных. К системам управления баз данных (СУБД) первого типа относят MySQL, PostgreSQL, Microsoft SQL Server, Oracle. Ко второму типу - MongoDB, Cassandra, BigTable, Redis, RavenDB и прочие.
Несмотря на широкое распространение NoSQL, специалисты Data Science все же используют SQL технологии, поскольку зачастую работают именно с упорядоченным множеством данных (медицинские карты пациентов, транзакции клиентов и т. д.). Здесь наилучшим выбором станет PostgreSQL/MySQL/SQL Server.
Машинное обучение
Это ответвление искусственного интеллекта, основная идея которого состоит в следующем: компьютер должен не просто использовать заранее написанный алгоритм, а самостоятельно обучаться решению поставленной задачи (например, задачи определения символов по отсканированному изображению текста, опознавания лиц и голосов, подборки видеороликов на YouTube с учетом просмотренных ранее).
Минимальный набор базовых алгоритмов машинного обучения, который необходимо знать: линейная регрессия, логистическая регрессия, SVM (метод опорных векторов), random forest (“случайный лес”), дерево принятия решений, Gradient Boosting, РСА (метод главных компонент), k-means (кластеризация методом k-средних), k-NN (классификация методом k-ближайших соседей), ARIMA (интегрированная модель авторегрессии скользящего среднего).
Говоря о библиотеках Python, которые применяются в машинном обучении, отметим scikit-learn (работа с классическими алгоритмами машинного обучения), TensorFlow и Keras (работа с глубоким обучением, которое направленное на работу с нейронными сетями).
Если подытожить вышеизложенное, вам необходимо знать основные алгоритмы кластеризации, классификации, уметь работать с нейронными сетями, умело использовать указанные библиотеки в ходе решения задач, а также понимать и применять на практике принципы машинного обучения. Затем можно будет переходить к подробному изучению глубокого обучения, искусственного интеллекта и разрабатывать проекты для портфолио.
Что должен знать Python BackEnd Developer
Веб-сервера (Nginx, Apache)
BackEnd разработчику необходимо знать общие принципы работы веб-серверов, а также понимать, как в целом работает интернет и каким образом ваш код взаимодействует с серверами, базами данных и вообще с “внешним миром”.
Веб-сервер - это программное обеспечение либо аппаратное средство, которое работает с целью приема HTTP-запросов, их обработки и последующей выдачи НТТР-ответов. На данный момент их существует множество, однако наибольшее распространение получили Nginx и Apache.
Этим двум веб-серверам посвящено несметное количество статей, которые рассматривают их плюсы и минусы и благодаря которым вы сможете определиться, какой из них лучше всего подходит под решение ваших задач.
Но также отметим, что сами по себе Nginx и Apache способны не только конкурировать, а и эффективно взаимодействовать между собой при правильной конфигурации, создавая мощную, гибкую и высокофункциональную систему с возможностью горизонтального масштабирования.
Базы данных (MySQL, MongoDB)
Серверная сторона программного обеспечения предусматривает активное использование серверов (от англ. “to serve” - служить). Это компьютеры, которые выполняют какую-либо сервисную задачу по приему, обработке и предоставлению информации пользователям.
Для BackEnd разработчика знание серверов и умение работать с ними является настолько же важным, насколько для FrontEnd разработчика - знание триады HTML, CSS и JavaScript.
Работаете со структурированными данными, а среди ваших приоритетов надежность, окупаемость и совместимость со всеми основными ОС? Выбирайте MySQL. Если же вы ориентируетесь на скорость, гибкость, масштабируемость, удобство в управлении СУБД, либо вы просто не можете определить схему для своей БД, вам стоит сфокусироваться на изучении систем управления нереляционными базами данных. Хорошим выбором станет MongoDB благодаря своей распространенности.
Фреймворки Flask/Django
Два данных фреймворка являются самыми популярными в веб-разработке на языке Python. Какому стоит отдать предпочтение?
Flask подойдет тем, кто заинтересован в тонкостях настройки проекта, и кто хочет иметь полноту власти над всеми его компонентами. Также данный фреймворк лучше подходит для создания REST API. Минимализм, максимальный контроль составляющих приложения, свобода в управлении каждым элементом - это визитные карточки Flask.
С другой стороны, если вы ищете набор готовых инструментов, стоит обратить внимание на Django. Он ориентирован больше на стек готовых решений и конечный продукт, нежели на подробную настройку всех компонентов проекта. Если вас интересует разработка и развертывание приложения в кратчайшие сроки, простота в его создании, масштабируемость, поддерживаемость и наличие очень хорошо структурированной и детальной документации по используемому фреймворку, смело выбирайте Django.
Паттерн MVC (Model-View-Controller)
Паттерн MVC достаточно востребован в наше время. Данный шаблон предусматривает разделение приложения на три компонента: Модель, Представление, Контроллер, благодаря чему реализуется концепция разделения и закрепления ответственности за каждым компонентом, что упрощает разработку веб-проектов.
Вспомогательные технологии (Celery, RabbitMQ)
Среди известных технологий, которые облегчают жизнь BackEnd разработчику можно отметить Celery. Это инструмент для управления очередями задач, который применяется для фоновой обработки долго выполняющихся задач, снижая нагрузку на процессор.
Упомянем также и RabbitMQ - менеджер сообщений, который предназначен для передачи данных (так называемых сообщений) между сервисами и упрощающий работу со сложными ресурсоемкими задачами при помощи очередей.
Что должен знать Python Developer для работы в сфере DevOps
Python особо популярен у DevOps специалистов. DevOps - это методология, которая совмещает в себе разработку (Development) и системное администрирование (Operations) с целью увеличения частоты выпуска релизов. Данные специалисты также должны обладать навыками использования облачных технологий и автоматизации инфраструктуры.
DevOps инженеры отдают свое предпочтение Python за его простоту, мощность, надежность, многозадачность, поддержку большого количества специальных пакетов, которые повышают эффективность данного языка программирования и за другие преимущества. Python используют, в основном, вместе с командной оболочкой Bash для упрощения процессов развертывания ПО и автоматизации различных задач системного администрирования (написание скриптов).
Что еще должен уметь DevOps инженер, помимо написания скриптов?
Понимать устройство ОС Linux/Windows.
Знать, как работают компьютерные сети (сетевая модель передачи данных TCP/IP и эталонная модель OSI), понимать инфраструктуру сетей.
Знать основные сетевые протоколы (HTTP, HTTPS, SSH, IP, TCP и другие).
Работать с популярной облачной инфраструктурой AWS.
Применять контейнеризацию (Docker), кластеризацию (Kubernetes), принципы CI/CD (Jenkins), инструменты мониторинга (Zabbix, Nagios), управлять ПО на удаленных серверах (Ansible).
Работать с веб-серверами (например, Nginx и Apache), уметь их настраивать.
Данный стек технологий вполне достаточный для уверенного старта в качестве DevOps инженера.
Что должен знать Automation QA Engineer (Python)
Python также имеет большую популярность в тестировании. Он применяется для написания скриптов, которые автоматизируют процессы проведения тестов. Помимо классических навыков и знаний тестирования необходимо владеть языком Python, разбираться в принципах ООП и также владеть тестовыми фреймворками (в данном случае - PyTest, Robot Framework, unittest и другие).
Desktop, Mobile, Game Python Developer
Менее популярные сферы использования Python. Для разработки настольных приложений можно использовать библиотеку Tkinter и фреймворк PyQt, который позволяет работать с графическим инструментарием, подобным тому, что использует Visual Studio для создания Windows Forms приложений.
Игры на Python также можно создавать - PyGame библиотека в помощь. Однако они будут далеко не уровня ААА. При этом Python успешно используется в таких тяжеловесах гейм-индустрии, как World Of Tanks, Battlefield 2 и EVE Online для запуска скриптовых сцен, реализации пользовательского интерфейса, обработки событий.
Если говорить о мобильных приложениях, то там Python применяется разве что для реализации серверной стороны приложения. К примеру, клиент Instagram для iOS написан на языке Objective-C, а сервер — на Python.
Итоги
Мы рассказали вам об IT-специальностях, в которых Python пользуется наибольшим спросом. Благодаря своей универсальности, кроссплатформенности, простому синтаксису, читабельности и значительному количеству разнообразных библиотек и фреймворков этот язык программирования значительно облегчает работу программистов и тестировщиков, позволяя существенно сократить время написания кода.
Сейчас Python просто незаменим в Data Science из-за своего богатейшего инструментария сбора, анализа, обработки и дальнейшей визуализации данных. DevOps инженеры в несколько строк кода могут с легкостью автоматизировать рутинные и/или масштабные процессы. BackEnd разработчики используют все возможности, которые им предоставляют веб-фреймворки для создания эффективных веб-приложений.
На ITVDN есть подборка видео курсов по языку программирования Python, а также по нескольким самым популярным технологиям, которые должен знать специалист. Комплексная программа обучения состоит из 12 курсов общей продолжительностью более 82 часов. Для формирования практических навыков написания кода мы рекомендуем использовать интерактивные тренажеры по Python.
Если вам понравилась эта статья, поделитесь информацией с теми, кому она может быть интересна. Пишите в комментариях, на какие еще вопросы, связанные с выбором специальности и планированием обучения вы хотите получить ответы. Мы постараемся ответить на них в наших новых обзорах.
Смотрите также:
Знакомство с Python
Как стать Python разработчиком?
ТОП 20 тестовых заданий на интервью для Java разработчика
Автор: Армен Маилян
Напишите программу на Java для переворачивания строки, изменив расположение символов в строке задом наперёд без использования встроенных в String функций
Напишите программу на Java для переворота последовательности символов в строке без использования встроенной в String функции reverse()
Напишите программу на Java для того, чтобы поменять местами значения, хранящиеся в двух переменных с помощью третьей переменной
Напишите программу на Java, чтобы поменять местами значения, хранящиеся в двух переменных, без использования третьей переменной
Напишите программу на Java для подсчета количества конкретных слов в строке, используя HashMap
Напишите Java-программу для итерации объекта типа HashMap с использованием цикла while и улучшенного цикла for
Напишите программу на Java, чтобы узнать, является ли число простым или нет
Напишите Java-программу, чтобы определить, является ли строка или число палиндромом, или нет
Написать программу на Java для вычисления серии чисел Фибоначчи
Напишите Java-программу для обхода ArrayList с использованием цикла for, while и улучшенного цикла for
Напишите программу на Java, чтобы продемонстрировать явную проверку условий ожидания
Напишите Java-программу для демонстрации прокрутки вверх / вниз
Напишите программу на Java, чтобы открыть все ссылки на gmail.com
Напишите код для Selenium, чтобы перейти на предыдущую вкладку
Напишите программу на Java, чтобы найти повторяющиеся символы в строке
Напишите Java-программу, чтобы найти второе по величине число в массиве
Напишите Java-программу для проверки является ли введенное число - числом Армстронга
Напишите Java-программу для удаления всех пробелов из строки с помощью replace()
Напишите Java-программу для удаления всех пробелов из строки без использования replace()
Напишите Java-программу для чтения данных из таблицы Excel
В этой статье мы приведем достаточно большое количество примеров программ из тех, что просят написать соискателей во время прохождения интервью на вакансию Java разработчика. Указанные тестовые задания мы приводим с реальными примерами кода, заданными в интервью как начинающих, так и достаточно опытных кандидатов.
На сегодня среди интервьюеров стало обычной практикой давать тестовые практические задания во время интервью, не фокусируясь только на теоретических вопросах. Такие задачи обычно задаются на техническом этапе интервью Java разработчика.
Для того, чтобы помочь соискателям подходящих вакансий пройти такие интервью, мы хотим перечислить несколько очень важных примеров программ на Java вместе с надлежащим описанием каждого.
Кроме того, мы также добавляем соответствующие пояснения кода. Эти пояснения дадут вам четкое представление о том, как работает каждая программа.
Самые популярные вопросы интервью Java-программирования.
Q # 1) Напишите программу на Java для переворачивания строки, изменив расположение символов в строке задом наперёд без использования встроенных в String функций.
Ответ:
Для начала инициализируем строковую переменную st и используем класс StringBuilder.
Объект класса StringBuilder strB будет в дальнейшем использоваться для добавления значения, хранящегося в строковой переменной st.
После этого мы используем встроенную в StringBuilder функцию reverse() и сохраняем новую - обращенную строку в stB.
Наконец, мы выводим на экран stB.
public class FirstTask{
public static void main(String[] args) {
// ITVDN.com 1 из ТОП 20 тестовых заданий на интервью для Java разработчика
String st = "Задача1";
StringBuilder stB = new StringBuilder();
stB.append(st);
stB = stB.reverse(); // используем StringBuilder для переворота строки
System.out.println(stB);
}
}
На экране получим:
1ачадаЗ
Q # 2) Напишите программу на Java для переворота последовательности символов в строке без использования встроенной в String функции reverse().
Ответ
Способ 1:
Есть несколько способов, с помощью которых вы можете перевернуть вашу строку, если вам разрешено использовать другие встроенные функции строки.
В этом способе мы инициализируем строковую переменную с именем st значением заданной строки. Затем мы конвертируем эту строку в массив символов с помощью функции toCharArray(). После этого мы используем цикл for чтобы взять все символы в обратном порядке и вывести их так на экран поочередно.
public class SecondTask {
public static void main(String[] args) {
//ITVDN.com 2 из ТОП 20 тестовых заданий на интервью для Java разработчика
String st = "Учимся программировать";
char symbols[] = st.toCharArray(); // конвертируем строку в массив символов, затем выводим символы на экран в обратном порядке
for(int x= symbols.length-1; x>=0; x--) {
System.out.print(symbols [x]);
}
}
}
На экране получим:
ьтавориммаргорп ясмичУ
Способ 2:
Это еще один способ выполнить задачу с переворотом последовательности символов в строке. В этом способе вы объявляете строковую переменную st, а затем используете класс Scanner, объявляя объект scannerQ для работы со стандартным потоком ввода данных.
В данном случае программа примет строковое значение через командную строку (при ее выполнении).
Далее мы использовали метод nextLine(), который прочитал нашу строку при вводе ее через консоль с пробелами между словами строки. После этого мы использовали метод split() для разделения строки на ее подстроки (здесь не указывается разделитель). Затем, мы выводим строку в обратном порядке, используя цикл for.
import java.util.Scanner;
public class SecondTask {
public static void main(String[] args) {
// ITVDN.com 2 из ТОП 20 тестовых заданий на интервью для Java разработчика
String st;
Scanner scannerQ = new Scanner(System.in);
System.out.println("Введите вашу строку:");
st = scannerQ.nextLine();
String[] temp = st.split(""); //используем метод split для вывода строки в обратном порядке
for(int x= temp.length-1; x>=0; x--)
{
System.out.print(temp [x] + "");
}
}
}
На экране получим:
Введите вашу строку:
asfasdf aasdfasdfadsf
fsdafdsafdsaa fdsafsa
Способ 3:
Это способ почти такой же, как способ 2, но здесь мы не используем метод split(). Мы используем класс Scanner и метод nextLine() для чтения входящей строки. Затем мы объявили целочисленную переменную stringLength, присваивая ей значение длины входящей строки.
После этого мы вывели строку в обратном порядке, используя цикл for. Однако мы использовали метод charAt(index), который будет возвращать символ по конкретному индексу. После каждой итерации символ будет добавлен в новую строку для получения перевернутого значения строковой переменной.
Затем, мы выводим переменную перевернутой строки.
import java.util.Scanner;
public class SecondTask {
public static void main(String[] args) {
// ITVDN.com 2 из ТОП 20 тестовых заданий на интервью для Java разработчика
String mainString, reverseString = "";
System.out.println("Введите нужную строку, чтобы получить перевернутую:");
Scanner scannerQ = new Scanner(System.in);
mainString = scannerQ.nextLine();
int stringLength = mainString.length();
for(int x= stringLength -1; x>=0; x--) {
reverseString = reverseString + mainString.charAt(x); //используем встроенный метод charAt() чтобы перевернуть строку
}
System.out.println(reverseString);
}
}
На экране получим:
Введите строку, чтобы получить перевернутую:
Введенная строка
акортс яаннедевВ
Q # 3) Напишите программу на Java для того, чтобы поменять местами значения, хранящиеся в двух переменных с помощью третьей переменной
Ответ:
В этом примере мы создаем объект класса Scanner для работы со стандартным потоком ввода данных System.in. Эта программа будет принимать значения a и b через командную строку.
Мы использовали nextInt(), который будет помещать введенные пользователем значения целочисленнох переменных в a и b. Также объявляем временную переменную.
Теперь логика программы выглядит следующим образом: мы создаем временную или третью переменную с именем temp, присваиваем ей значение, хранящееся в переменной a, а затем мы присваиваем a значение b, и снова присваиваем b значение temp. Таким образом, после выполнения всех операций temp будет хранить в себе значение a, a получит значение b, а b будет иметь значение temp (которое равно a).
import java.util.Scanner;
public class ThirdTask {
public static void main(String[] args) {
// ITVDN.com 3 из ТОП 20 тестовых заданий на интервью для Java разработчика
int a, b, temp;
System.out.println("Введите значения a и b");
Scanner scannerQ = new Scanner(System.in);
a = scannerQ.nextInt();
b = scannerQ.nextInt();
System.out.println("До обмена значениями " + a + b);
temp = a;
a = b;
b = temp;
System.out.println("После обмена значениями " + a + b);
}
}
На экране получим:
Введите значения a и b
23
45
До обмена значениями 2345
После обмена значениями 4523
Q # 4) Напишите программу на Java, чтобы поменять местами значения, хранящиеся в двух переменных, без использования третьей переменной.
Ответ:
В начале все будет так же, как и в приведенном выше примере. Только дальнейшая логика изменится. Здесь мы сначала присваиваем переменной a значение a + b, что означает, что a будет теперь иметь в себе значение как a, так и b.
Затем мы присваиваем переменной b значение a - b, что означает, что мы вычитаем значение b из суммы (a + b). До сих пор a все еще хранит в себе сумму изначальных a и b. Но b имеет теперь значение первоначального a.
Наконец, на третьем шаге мы присваиваем a значение a - b, что означает, что мы вычитаем значение переменной b (которая сейчас уже имеет в себе значение a) из суммы (a + b). В результате этих действий мы поменяли местами значения, хранящиеся в переменных.
import java.util.Scanner;
public class FourthTask
{
public static void main(String args[])
{
int a, b;
System.out.println("Введите нужные значения a и b");
Scanner scannerQ = new Scanner(System.in);
a = scannerQ.nextInt();
b = scannerQ.nextInt();
System.out.println("До обмена значениями\na = "+a+"\nb = "+b);
a = a + b;
b = a - b;
a = a - b;
System.out.println("После обмена значениями без промежуточной переменной\na = "+a+"\nb = "+b);
}
}
На экране получим:
Введите нужные значения a и b
23
45
До обмена значениями
a = 23
b = 45
После обмена значениями без промежуточной переменной
a = 45
b = 23
Q # 5) Напишите программу на Java для подсчета количества конкретных слов в строке, используя HashMap.
Ответ:
Это программа работает с классом-коллекцией, в которой мы использовали HashMap для хранения строки.
Прежде всего, мы объявили нашу строковую переменную с именем st. Затем мы использовали функцию split(), с одиночным пробелом, чтобы можно было разбить строку на массив из нескольких слов.
После этого мы создали экземпляр HashMap и цикл for. Внутри цикла for мы используем оператор if else. Мы заходим в каждый элемент массива split и добавляем элементы этого массива. Слова мы добавляем в качестве ключей экземпляра HashMap. В качестве значений HashMap мы будем добавлять то число, сколько раз при обходе массива слов нам данное слово встретилось. Если в наш экземпляр HashMap мы уже добавили данное слово – при обходе мы увеличим значение, записанное в HashMap в соответствии с данным словом-ключом.
Каждый раз, когда слово будет встречаться повторно (мы видим, что слово в экземпляр HashMap мы уже добавляли) – значение-счетчик увеличивается на 1. Если такое слово ранее не встречалось – значение-счетчик устанавливается на 1.
Наконец, мы выводим на экран HashMap.
Обратите внимание: ту же программу вы можете использовать и для подсчета количества символов в строке. Все, что вам нужно сделать, это удалить один пробел (удалить пробел, указанный в методе split) и прописать String [] words = st.split (“”);
import java.util.HashMap;
public class FifthTask{
public static void main(String[] args) {
// ITVDN.com 5 из ТОП 20 тестовых заданий на интервью для Java разработчика
String st = "Current task posted for Java developers developers";
String[] words = st.split(" ");
HashMap<String,Integer> keyValue = new HashMap<String,Integer>();
for (int i=0; i<= words.length-1; i++) {
if (keyValue.containsKey(words[i])) {
int counter = keyValue.get(words[i]);
keyValue.put(words[i], counter+1);
}
else {
keyValue.put(words[i], 1);
}
}
System.out.println(keyValue);
}
}
На экране получим:
{Java=1, task=1, developers=2, for=1, Current=1, posted=1}
В # 6) Напишите Java-программу для итерации объекта типа HashMap с использованием цикла while и улучшенного цикла for.
Ответ:
Здесь мы для начала вставили три элемента в переменную типа HashMap с именем keyValue, используя функцию put().
Размер переменной keyValue можно получить с помощью метода size(). После этого мы использовали цикл While для обхода keyValue, которая содержит по одной паре ключ-значение для каждого элемента. Ключи и значения могут быть получены с помощью методов getKey() и getValue().
Аналогично, мы используем расширенный цикл for, на элементах «qurentMe2» в HashMap.
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
public class SixthTask{
public static void main(String[] args) {
// ITVDN.com ТОП 20 тестовых заданий на интервью для Java разработчика
HashMap<Integer,String> keyValue = new HashMap<Integer,String>();
keyValue.put(1, "Hello");
keyValue.put(2, "World");
keyValue.put(3, "Have a nice day!");
System.out.println(keyValue.size());
System.out.println("Цикл While:");
Iterator iter = keyValue.entrySet().iterator();
while(iter.hasNext()) {
Map.Entry qurentMe = (Map.Entry) iter.next();
System.out.println("Ключ это " + qurentMe.getKey() + " Значение это " + qurentMe.getValue());
}
System.out.println("Цикл For:");
for(Map.Entry qurentMe2: keyValue.entrySet()) {
System.out.println("Ключ это: " + qurentMe2.getKey() + " Значение это: " + qurentMe2.getValue());
}
}
}
На экране получим:
3
Цикл While:
Ключ это 1 Значение это Hello
Ключ это 2 Значение это World
Ключ это 3 Значение это Have a nice day!
Цикл For:
Ключ это: 1 Значение это: Hello
Ключ это: 2 Значение это: World
Ключ это: 3 Значение это: Have a nice day!
Q # 7) Напишите программу на Java, чтобы узнать, является ли число простым или нет.
Ответ:
Мы объявили две целочисленных переменных temp и number и использовали класс Scanner с nextInt (поскольку у нас может быть на рассмотрении только целое число).
Объявляем логическую переменную numberIsPrime и устанавливаем ее значение - true. После этого мы используем цикл for со значением переменной итератора, начинающемся с 2. Количество итераций, нужное нам, будет равно половине введенного числа. Счетчик итераций увеличивается на 1 после каждой итерации. В переменную tempNumber мы будем помещать остаток от деления значения введенного числа на значение счетчика. Если остаток от деления в одной из итераций будет равен 0, тогда numberIsPrime будет установлен в false, введенное число не будет простым, и мы выходим из цикла. Если во всех итерациях мы будем получать в temp некие остатки от деления, отличные от нуля – число будет простым.
Основываясь на значении numberIsPrime, мы приходим к выводу, является ли наше число простым или нет.
import java.util.Scanner;
public class SeventhTask {
public static void main(String[] args) {
// ITVDN.com ТОП 20 тестовых заданий на интервью для Java разработчика
int temp, number;
boolean numberIsPrime = true;
Scanner scannerQ = new Scanner(System.in);
number = scannerQ.nextInt();
scannerQ.close();
for (int x = 2; x<= number /2; x++) {
tempNumber = number %x;
if (tempNumber == 0) {
numberIsPrime = false;
break;
}
}
if(numberIsPrime)
System.out.println(number + " число является простым");
else
System.out.println(number + " число не является простым");
}
}
На экране получим:
27
27 число не является простым
Q # 8) Напишите Java-программу, чтобы определить, является ли строка или число палиндромом, или нет.
Ответ:
Чтобы проверить, является ли число или строка палиндромом или нет, вы можете использовать любую переворачивающую строки программу, из описанных выше,.
Что вам нужно сделать, так это добавить один оператор if-else. Если исходная строка равна перевернутой строке, то число является палиндромом, в противном случае - нет.
import java.util.Scanner;
public class EighthTask{
public static void main (String[] args) {
// ITVDN.com ТОП 20 тестовых заданий на интервью для Java разработчика
String inputString, reversedString = "";
Scanner scannerQ = new Scanner(System.in);
int stringLength;
System.out.println("Введите число или строку");
inputString = scannerQ.nextLine();
stringLength = inputString.length();
for (int x = stringLength -1; x>=0; x--) {
reversedString = reversedString + inputString.charAt(x);
}
System.out.println("перевернутое значение: " + reversedString);
if(inputString.equals(reversedString))
System.out.println("Введенное значение является палиндромом");
else
System.out.println("Введенное значение не является палиндромом");
}
}
На экране получим:
Для строки-
Введите число или строку
dfggg
перевернутое значение: gggfd
Введенное значение не является палиндромом
Для числа-
Введите число или строку
777
перевернутое значение: 777
Введенное значение является палиндромом
Q # 9) Написать программу на Java для вычисления серии чисел Фибоначчи.
Ответ:
Ряд Фибоначчи — это такая серия чисел, где после первых двух чисел - каждое встречающееся число является суммой двух предыдущих чисел.
Пример: 0,1,1,2,3,5,8,13,21 ………
В этой программе мы снова использовали класс Scanner с nextInt (описывалось выше). Первоначально мы вводим (через командную строку) некое число, какое количество чисел Фибоначчи мы должны получить. Мы объявили целочисленные переменные number, x, y и z, инициализировали x и y нулем, а z - единицей. Затем мы использовали цикл for для итерации.
Процесс решения в цикле выглядит так – мы присваиваем x значение равное y (которое в первой итерации равно 0), затем y присваиваем значение переменной z (равное в первой итерации 1). Затем переменной z присваиваем значение равное сумме значений x и y.
import java.util.Scanner;
public class NinthTask{
public static void main(String[] args) {
// ITVDN.com 9 из ТОП 20 тестовых заданий на интервью для Java разработчика
int number, x = 0, y=0, z =1;
Scanner scannerQ = new Scanner(System.in);
System.out.println("Введите количество значений");
number = scannerQ.nextInt();
System.out.println("Серия чисел Фибоначчи: ");
for (int i=0; i<= number; i++) {
x = y;
y = z;
z = x+y;
System.out.println(x + ""); // если вы хотите вывести в текущей строке - используйте print()
}
}
}
На экране получим:
Введите количество значений
10
Серия чисел Фибоначчи:
0
1
1
2
3
5
8
13
21
34
55
Q # 10) Напишите Java-программу для обхода ArrayList с использованием цикла for, while и улучшенного цикла for.
Ответ:
В этой программе мы добавили три элемента в ArrayList и вывели его размер.
Затем мы используем цикл While с итератором. Всякий раз, когда итератор получает следующий элемент, он будет отображать этот элемент, пока мы не достигнем конца списка. В нашем случае это будет повторяться три раза.
Аналогично, мы сделали для улучшенного цикла for, где мы создали объект o для ArrayList с именем testList. Затем вывели на экран значение объекта.
После этого мы создали цикла for, где итератор i установлен сначала на индекс 0, а затем увеличивается на 1 при каждой итерации, пока не будет достигнут предел ArrayList. Наконец, мы выводим на экран каждый элемент, используя метод get(index) для каждой итерации цикла for.
import java.util.*;
public class arrayList {
public static void main(String[] args) {
// ITVDN.com 10 из ТОП 20 тестовых заданий на интервью для Java разработчика
ArrayList testList = new ArrayList();
testList.add("50");
testList.add("60");
testList.add("70");
System.out.println(testList.size());
System.out.println("Цикл While:");
Iterator iter = testList.iterator();
while(iter.hasNext()) {
System.out.println(iter.next());
}
System.out.println("Улучшенный цикл For:");
for(Object o : testList) {
System.out.println(o);
}
System.out.println("Цикл For:");
for(int i=0; i< testList.size(); i++) {
System.out.println(testList.get(i));
}
}
}
На экране получим:
3
Цикл While:
50
60
70
Улучшенный цикл For:
50
60
70
Цикл For:
50
60
70
Q # 11) Напишите программу на Java, чтобы продемонстрировать явную проверку условий ожидания.
Ответ:
В Selenium есть два основных типа ожидания – неявное(Implicit Wait) и явное (Explicit Wait). (Мы не рассматриваем явное (свободное) ожидание в этом примере).
Неявное ожидание - объявляется один раз в коде вне операции поиска и действует до изменения. Это ожидание выполняется независимо от какого-либо условия и применяется ко всем последующим операциям поиска неявно. В приведенной ниже программе вы можете видеть применение такого ожидания для Google Chrome. Мы использовали несколько встроенных методов для установки свойства, максимизации окна, навигации по URL и поиска веб-элементов.
WebDriverWait waitWD = new WebDriverWait(curentDriver, 20);
WebElement secondElement = waitWD.until(ExpectedConditions.visibilityOfElementLocated(By.partialLinkText("Тестирование программного обеспечения - Википедия")));
secondElement.click();
В приведенном выше фрагменте кода вы можете видеть, что мы создали объект waitWD для WebDriverWait, а затем мы выполнили поиск WebElement с именем secondElement.
Условие установлено таким образом, что веб-драйверу придется ждать, пока мы не увидим ссылку «Тестирование программного обеспечения - Википедия» на веб-странице. Команда не выполнится, если не найдет эту ссылку. Если ссылка будет найдена, то веб-драйвер выполнит щелчок мышью по этой ссылке.
package Codes;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
public class EleventhTask{
public static void main(String[] args) {
// ITVDN.com 10 из ТОП 20 тестовых заданий на интервью для Java разработчика
System.setProperty("webdriver.chrome.driver", "C:\\driver\\chromedriver.exe");
ChromeOptions cOptions = new ChromeOptions();
cOptions.addArguments("--disable-arguments");
WebDriver curentDriver = new ChromeDriver();
curentDriver.manage().window().maximize();
curentDriver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
curentDriver.navigate().to("https://www.google.com.ua");
WebElement curentElement = curentDriver.findElement(By.name("q"));
curentElement.sendKeys("Testing");
curentElement.submit();
WebDriverWait waitWD = new WebDriverWait(curentDriver, 20);
WebElement secondElement = waitWD.until(ExpectedConditions.visibilityOfElementLocated(By.partialLinkText("Тестирование программного обеспечения - Википедия")));
secondElement.click();
}
}
Q # 12) Напишите Java-программу для демонстрации прокрутки вверх / вниз.
Ответ:
Все строки кодов легко соотносятся с кодом из предыдущего примера.
В код этой программы мы включили JavascriptExecutor jscript, который будет выполнять прокрутку. На последней строке кода мы передаём window.scrollBy(argument1, argument2).
Если нам нужно выполнить прокрутку вверх, тогда передаем некоторое значение в argument1, если нам нужно прокрутить вниз - передаем некоторое значение в argument2.
package Codes;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebElement;
public class TwelfthTask{
public static void main(String[] args) {
// ITVDN.com 12 из ТОП 20 тестовых заданий на интервью для Java разработчика
System.setProperty("webdriver.chrome.driver", "C:\\driver\\chromedriver.exe");
WebDriver qurentDriver = new ChromeDriver();
JavascriptExecutor jscript = (JavascriptExecutor) qurentDriver;
qurentDriver.manage().window().maximize();
qurentDriver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
qurentDriver.get("https://www.google.com.ua");
WebElement qurentElement = qurentDriver.findElement(By.name("q"));
qurentElement.sendKeys("SoftwareTestingHelp");
qurentElement.sendKeys(Keys.ENTER);
jscript.executeScript("window.scrollBy(0,900)");
}
}
Q # 13) Напишите программу на Java, чтобы открыть все ссылки на gmail.com.
Ответ:
Это типичный пример применения улучшенного цикла for, который мы видели в наших предыдущих примерах.
После того, как вы открыли веб-сайт, такой как Gmail, используя get() или navigate().to(), вы можете использовать локатор tagName, чтобы получить все ссылки на веб-сайте, имеющие одинаковые теги.
У нас есть улучшенный цикл for, в котором мы обходим все найденные ссылки по нашему тегу. Для каждой ссылки типа WebElement в нашем листе ссылок, мы получаем сами ссылки через getAttribute(«href») и тексты через getText().
package Codes;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
public class ThirteenthTask{
public static void main(String[] args) {
// ITVDN.com 13 из ТОП 20 тестовых заданий на интервью для Java разработчика
System.setProperty("webdriver.chrome.drive", "C:\\driver\\chromedriver.exe");
WebDriver curentDriver = new ChromeDriver();
curentDriver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
curentDriver.manage().window().maximize();
curentDriver.get("https://www.gmail.com/");
java.util.List<WebElement> linkList = curentDriver.findElements(By.tagName("a"));
System.out.println(linkList.size());
for (WebElement thisLink: linkList) {
//выводим на экран ссылку http://google.com или https://www.gmail.com
System.out.println(qurentLink.getAttribute("href"));
//выводим на экран текст ссылки
System.out.println(qurentLink.getText());
}
}
}
На экране получим:
Starting ChromeDriver 2.38.551601 (edb21f07fc70e9027c746edd3201443e011a61ed) on port 16163
Only local connections are allowed.
3
https://support.google.com/accounts?hl=ru
Справка
https://policies.google.com/privacy?gl=IN&hl=ru
Политика конфиденциальности
https://policies.google.com/terms?gl=IN&hl=ru
Условия использования
Q # 14) Напишите код для Selenium, чтобы перейти на предыдущую вкладку.
Ответ: Мы используем класс Robot. Этот пример является достаточно важным, потому что, если вы знаете сочетания клавиш, вы можете использовать различную навигацию в браузере и его вкладках.
Например, если у вас в Chrome открыто три вкладки, и вы хотите перейти на среднюю вкладку, то вам нужно нажать + 2 на клавиатуре. То же самое можно достичь с помощью кода.
Применяйте следующий код (сразу после того, как мы увидим создание экземпляра класса Robot). Мы использовали объект qurentRobot класса Robot, с двумя встроенными методами keyPress(KeyEvenet.VK_ *) и keyRelease(KeyEvenet.VK_ *).
package Codes;
import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.KeyEvent;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
public class FourteenthTask{
public static void main(String[] args) throws AWTException {
// ITVDN.com 14 из ТОП 20 тестовых заданий на интервью для Java разработчика
System.setProperty("webdriver.chrome.driver", "C:\\driver\\chromedriver.exe");
WebDriver curentDriver = new ChromeDriver();
curentDriver.manage().window().maximize();
curentDriver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
curentDriver.get("https://www.google.com");
WebElement firstElement = curentDriver.findElement(By.name("q"));
firstElement.sendKeys("software testing help");
firstElement.sendKeys(Keys.ENTER);
String str = Keys.chord(Keys.CONTROL,Keys.RETURN);
curentDriver.findElement(By.partialLinkText("Software Testing Help - A Must Visit Software Testing Portal")).sendKeys(str);
Robot qurentRobot = new Robot(); // Инициализируем экземпляр класса Robot
qurentRobot.keyPress(KeyEvent.VK_CONTROL); // применяя класс Robot вы легко можете получить необходимый результат если вы знаете нужные комбинации кнопок
qurentRobot.keyPress(KeyEvent.VK_2); // тут мы нажимаем ctrl+2
qurentRobot.keyRelease(KeyEvent.VK_CONTROL); // как только мы нажмем и отпустим ctrl+2, мы перейдем на вторую вкладку.
qurentRobot.keyRelease(KeyEvent.VK_2); //если вы хотите снова вернуться к первой вкладке нажмите и отпустите vk_1
}
}
Q # 15) Напишите программу на Java, чтобы найти повторяющиеся символы в строке.
Ответ:
В этой программе мы создаем строковую переменную st и инициализируем целочисленный счетчик, начиная с нуля.
Затем мы создали массив символов для преобразования нашей строковой переменной в этот массив. С помощью двух циклов for мы проводим сравнение символов с разными индексами.
Если два символа последовательного индекса совпадают, то этот символ будет выведен на экран и счетчик количества совпадающих символов увеличится на 1.
public class FifteenTask{
public static void main(String[] args) {
// ITVDN.com 15 из ТОП 20 тестовых заданий на интервью для Java разработчика
String st = new String("Hello");
int counter = 0;
char[] charsArray = st.toCharArray();
System.out.println("Повторяющиеся символы тут:");
for (int i=0; i<st.length();i++) {
for(int j=i+1; j<st.length();j++) {
if (charsArray [i] == charsArray [j]) {
System.out.println(charsArray [j]);
counter ++;
break;
}
}
}
}
}
На экране получим:
Повторяющиеся символы тут:
l
Q # 16) Напишите Java-программу, чтобы найти второе по величине число в массиве.
Ответ:
В этой программе мы инициализировали массив с 10 случайными элементами, из которых мы собираемся найти второе по величине число. Далее мы создали две целочисленные переменные, которым будем присваивать значения двух целых чисел из массива - самого большого и второго по величине. Обе переменные изначально получают значения первого по индексу элемента массива. Затем мы выводим на экран все элементы, используя цикл for.
Дальнейшая логика работы программы в том, чтобы используя цикл for обойти массив.
При обходе, если элемент массива с текущим индексом больше, чем значение, хранящееся в переменной biggest, тогда переменной secondBiggest присваиваем значение, хранящееся в biggest, а переменной biggest – новое наибольшее значение в соответствии со значением текущего элемента массива. Опять же, если элемент по текущему индексу больше, чем secondBiggest, то присвойте secondBiggest значение этого элемента.
Это будет повторяться для каждой итерации и, в конечном итоге, после завершения обхода массива в цикле вы получите элементы наибольший и второй по величине элементы массива в переменных biggest и secondBiggest соответственно.
public class SixteenthTask {
public static void main(String[] args)
{
// ITVDN.com 16 из ТОП 20 тестовых заданий на интервью для Java разработчика
int numbersArray[] = { 10, 15, 32, 100, 16, 11, 98, 36, 95, 33 };
int biggest= numbersArray[0];
int secondBiggest = numbersArray[0];
System.out.println("Полученный массив: ");
for (int i = 0; i < numbersArray.length; i++)
{
System.out.print(numbersArray[i] + "\t");
}
for (int i = 0; i < numbersArray.length; i++)
{
if (numbersArray[i] > biggest)
{
secondBiggest = biggest;
biggest = numbersArray[i];
}
else if (numbersArray[i] > secondBiggest && numbersArray[i] != biggest)
{
secondBiggest = numbersArray[i];
}
}
System.out.println("\nВторое по величине число:" + secondBiggest);
}
}
На экране получим:
Полученный массив:
10 15 32 100 16 11 98 36 95 33
Второе по величине число: 98
Q # 17) Напишите Java-программу для проверки является ли введенное число - числом Армстронга.
Ответ:
Прежде всего, нам нужно понять, что такое число Армстронга. Число Армстронга это число, значение которого равно сумме цифр, из которых оно состоит, возведенных в степень, равную количеству цифр в этом числе. Как пример - число 371:
371 = 3*3*3 + 7*7*7 + 1*1*1 = 27 + 343 + 1 = 371
Если у вас число четырехзначное:
8208 = 8*8*8*8 + 2*2*2*2 + 0*0*0*0 + 8*8*8*8 = 4096 + 16 + 0 + 4096 = 8208
Выполняя решение, для начала мы объявляем целочисленные переменные tempNumber, x и y. Мы инициализировали переменную y значением 0. Затем мы создаем переменную qurentNumber и присваиваем ей целочисленное значение, которое мы собираемся проверить является ли оно числом Армстронга (в нашем случае это 371). Затем мы присвоили нашей переменной tempNumber то значение, которое хранится в проверяемой переменной qurentNumber.
Далее в цикле while мы переменной a присваиваем остаток от деления числа qurentNumber на 10 – и получим число единиц в изначальном числе qurentNumber. Затем мы заменяем значение переменной qurentNumber на результат деления введенного числа на 10. Нашей переменной y, значение которой изначально было установлено как 0, присваивается результат y + (x* x * x). Таким образом во время первой итерации в y попадет результат возведения в нужную степень значения числа единиц в изначальном числе, при следующей итерации в y к степени числа единиц добавится результат возведения в степень числа десятков, и так далее по всем разрядам до конца числа qurentNumber с права налево.
Наконец, мы используем оператор if-else для проверки, будет ли полученное значение переменной y равно значению переменной tempNumber (в которой хранится исходное число). Если y = tempNumber, то загаданное число является числом Армстронга, иначе - нет.
public class SeventeenthTask{
public static void main(String[] args) {
// ITVDN.com 17 из ТОП 20 тестовых заданий на интервью для Java разработчика
int y=0, x, tempNumber;
int qurentNumber=371; //Данное число мы будем проверять на то, является ли оно числом Армстронга
tempNumber = qurentNumber;
while(qurentNumber >0)
{
x= qurentNumber %10;
qurentNumber = qurentNumber /10;
y=y+(x*x*x);
}
if(tempNumber ==y)
System.out.println("Данное число является числом Армстронга");
else
System.out.println("Данное число не является числом Армстронга");
}
}
На экране получим:
Данное число является числом Армстронга
Q # 18) Напишите Java-программу для удаления всех пробелов из строки с помощью replace().
Ответ:
Это простая программа, в которой у нас есть строковая переменная st1.
Другая строковая переменная st2 инициализируется с помощью метода replaceAll, который является встроенным методом для удаления n числа пробелов. В итоге мы выводим на экран st2, которая уже не содержит пробелов.
public class EighteenthTask
{
public static void main(String[] args)
{
// ITVDN.com 17 из ТОП 20 тестовых заданий на интервью для Java разработчика
String st1 = "Мы готовимся к интервью на вакансию Java разработчика";
//Используем метод replaceAll()
String st2 = st1.replaceAll("\\s", "");
System.out.println(st2);
}
}
На экране получим:
МыготовимсякинтервьюнавакансиюJavaразработчика
Q # 19) Напишите Java-программу для удаления всех пробелов из строки без использования replace().
Ответ:
Это еще один подход к удалению всех пробелов. Опять же, для начала у нас есть одна строковая переменная st1 с некоторым значением. Мы преобразовываем эту строку в массив символов, используя toCharArray().
Затем у нас есть один объект StringBuffer strB, который будет использоваться для добавления значения, хранящегося по индексу chars [i] после того, как мы добавили цикл и одно условие if.
Условие установлено так, что элемент с индексом i массива символов не должен быть равен символу пробела или табуляции. Наконец, мы выводим на экран наш объект StringBuffer strB.
public class NineteenthTask
{
public static void main(String[] args)
{
// ITVDN.com 17 из ТОП 20 тестовых заданий на интервью для Java разработчика
String st1 = " Мы готовимся к интервью на вакансию Java разработчика";
char[] charsArray = st1.toCharArray();
StringBuffer strB = new StringBuffer();
for (int i = 0; i < charsArray.length; i++)
{
if( (charsArray[i] != ' ') && (charsArray [i] != '\t') )
{
strB.append(charsArray [i]);
}
}
System.out.println(strB);
}
}
На экране получим:
МыготовимсякинтервьюнавакансиюJavaразработчика
Q # 20) Напишите Java-программу для чтения данных из таблицы Excel.
Ответ:
Эти типы программ обычно используются в рамках Selenium framework. Мы добавили подробные комментарии для каждого шага, чтобы сделать программу более понятной.
Логика начинается с того момента, как мы загрузили лист, на котором хранятся данные. Мы пытаемся импортировать электронную почту и пароль. Для этого мы извлекаем ячейку с помощью методов getRow() и getCell(). Допустим, у нас есть электронная почта и пароли в 1-й и 2-й ячейке.
Далее мы устанавливаем тип ячейки - строковой. После этого мы выполняем обычную операцию локатора веб-элемента (By.id), куда мы передали уникальные значения локатора, такие как «email» и «пароль», которые будут идентифицировать эти элементы.
Наконец, мы отправляем ключи, используя element.sendKeys, где cell.getStringCellValue() - это ключ. Эта операция вернет вам значение, сохраненное в ячейках № 1 и 2 соответственно.
@Test
public void ReadData() throws IOException
{
// импортируйте лист Excel из директории web диска c.
//QurentSourceFile – это имя нужного файла excel
File sourceFile=new File("C:\\web\\QurentSourceFile.xls");
// На этом шаге мы загружаем файл. Мы используем FileInputStream для чтения из
// файла excel. В случае если вы хотите проводить запись в файл -
// вам следует использовать FileOutputStream. Путь к файлу передается в качестве
// аргумента FileInputStream
FileInputStream fileInput = new FileInputStream(sourceFile);
// На этом шаге мы загружаем рабочую книгу excel с помощью HSSFWorkbook,
// в который мы передаем fileInput в качестве аргумента
HSSFWorkbook book = new HSSFWorkbook(fileInput);
// На этом шаге мы загружаем конкретный лист excel, на котором хранятся данные.
qurentSheet= book.getSheetAt(0);
for(int i=1; i<= qurentSheet.getLastRowNum(); i++)
{
// Import data for Email.
qurentCell = qurentSheet.getRow(i).getCell(1);
qurentCell.setCellType(Cell.CELL_TYPE_STRING);
driver.findElement(By.id("email")).sendKeys(qurenrCell.getStringCellValue());
// Импортируем данные из ячеек с паролями.
qurentCell = qurentSheet.getRow(i).getCell(2);
qurentCell.setCellType(Cell.CELL_TYPE_STRING);
driver.findElement(By.id("password")).sendKeys(qurenrCell.getStringCellValue());
}
}
Резюме
В этой статье мы рассмотрели наиболее распространенные тестовые задания для Java разработчиков с примерами кода. Эти задачи применяются на большинстве технических интервью Java-разработчиков.
Мы рассмотрели такие приемы работы с данными с помощью Java, как базовые манипуляции со строками, целыми числами и символами, использование Selenium, чтение данных из файла. Теперь у вас есть достаточно информации о том, как проходить технический этап интервью на вакансию Java разработчика.
Конечно, вам нужны будут и другие навыки. Изучение наизусть решений 20 задач не может быть главным способом подготовиться к интервью. Вам следует иметь хороший набор теоретических знаний и практических навыков. С нашей стороны портал ITVDN.com готов предложить программу подготовки Java разработчика, включающую в себя видео курсы как по Java, так и по сопутствующим технологиям.
Также рекомендуем вам ознакомиться с серией видео «Подготовка к собеседованию в IT компании. Вопросы и ответы. Хитрости. Трюки.»
По материалам статьи.
Путеводитель ITVDN по верстке сайтов
Автор: Редакция ITVDN
Верстальщик сайтов – это специалист, который занимается созданием веб-страниц. Его работа заключается в том, чтобы при помощи различных элементов языка разметки веб-страницы перевести графические элементы дизайна (рисунки, шрифты, таблицы и т.д.) в понятный для браузера формат, то есть сверстать сайт.
Работа верстальщика не очень сложная, но требует определенного уровня подготовки и большого внимания к деталям. На хороших специалистов практически постоянно существует большой спрос.
На ITVDN все, кто заинтересован в изучении технологий для верстки веб-страницы, найдут необходимые видео уроки и материалы. А также курсы для «прокачки» практических навыков верстки сайта и Тренажер для навыков написания кода. Курсы записаны сертифицированными разработчикам и тренерами Microsoft.
ITVDN рекомендует проходить обучение в такой последовательности:
HTML & CSS, автор Александр Петрик
How to HTML & CSS, автор Сергей Раздобудько
Photoshop. Базовый курс для web-разработчика, автор Сергей Воропаев
JavaScript Essential, автор Дмитрий Охрименко
How to JavaScript, автор Валерия Прокопенко
Основы использования Git, автор Александр Пономаренко
Twitter Bootstrap 3, автор Сергей Швайцер
Создание адаптивного сайта с Bootstrap 3, автор Александр Пономаренко
WordPress Starter, автор Артем Кондранин
Практический курс по верстке лендинга, автор Сергей Рубец
HTML5 & CSS3, автор Дмитрий Охрименко
Также вас могут заинтересовать записи вебинаров ITVDN (все в свободном доступе):
Верстаем сайт правильно
Photoshop: зачем он нужен веб-разработчику?
WordPress: создаем блог за час
Скоростная верстка, или как упростить себе жизнь с Bootstrap 3
Интеграция верстки лендинга на CMS WordPress
Адаптивный веб-дизайн: типы адаптивных макетов
Семантика HTML5, создаем змейку, используя canvas
Что надо знать для веб разработки. (реальная разработка + обзор вакансий)
Создание веб-приложения с Angular 1.5, Firebase и Gulp
Как решить проблемы верстки с помощью HTML5 Web Components
Если вы планируете свое обучение с нуля, тогда наилучшим решением будет приобретение подписки ITVDN сроком от 3 месяцев. Это оптимальный срок, за который вы сможете научиться создавать красивые сайты, мастерски владея современным инструментарием верстальщика.
Что должен знать FrontEnd разработчик в 2019 году
Автор: Влад Сверчков
Верстка сайтов и веб-программирование привлекают большое количество новичков в мир IT. Это связано с достаточно низким порогом вхождения. Количество желающих стать фронтендщиком с каждым годом увеличивается, вследствии чего растут и требования к кандидатам.
Какие технологии необходимо изучить, чтобы стать FrontEnd разработчиком в 2019 году? Давайте разберемся.
HTML5 & CSS3
HTML5 и CSS3 - это фундаментальные технологии, без знания которых не обойтись любому веб-разработчику. С помощью языка гипертекстовой разметки HTML создается разметка (каркас) каждой интернет-страницы. Затем язык стилей CSS преображает сайт и придает ему привлекательный и эффектный внешний вид.
Также необходимо владеть:
кроссбраузерной адаптивной версткой, чтобы уметь создавать сайты под мобильные устройства, планшеты и широкоформатные экраны и для различных браузеров;
семантической версткой для повышения качества разметки и улучшения поисковой индексации сайта.
Хорошее владение HTML и CSS уже позволяет заниматься версткой сайтов и начать зарабатывать деньги. Именно с этих двух базовых технологий начинается путь к профессии FrontEnd разработчика.
Bootstrap 4
Популярная HTML/CSS платформа для разработки адаптивных веб-приложений, которую применяют при создании сайтов и интерфейсов администраторских панелей. Основные преимущества Bootstrap:
высокая скорость верстки;
кроссбраузерность и кроссплатформенность;
наличие хорошей документации, большого сообщества и огромного количества разнообразных обучающих материалов;
низкий порог вхождения (необходимо знать лишь основы HTML, CSS, JavaScript и jQuery).
JavaScript
Язык программирования, который используется как при разработке клиентской стороны веб-приложения, так и серверной. При помощи JavaScript (сокращенно - JS) можно писать даже десктопные (настольные) и мобильные приложения, используя определенные программные платформы и библиотеки. Этот язык позволяет:
динамически изменять разметку;
осуществлять интерактивное взаимодействие с пользователем;
анимировать изображения;
совершать валидацию форм;
управлять мультимедиа и т. д.
Другими словами, JavaScript “оживляет” страницу и добавляет ей функциональности. Хорошее владение данным языком программирования является обязательным для каждого FrontEnd разработчика.
Сергей Росоха, Software Architect с 11-летним опыта во FrontEnd/JS, отмечает важность изучения алгоритмов и структур данных на JavaScript:
“JavaScript давно уже используется не только для разработки динамических интерфейсов пользователя, но и для написания достаточно сложной бизнес-логики. Поэтому знание алгоритмов и структур данных становится критичным для JS-разработчиков. ” (источник)
JavaScript использует официальный стандарт ECMAScript (сокращенно - ES), который подразумевает определенное формальное описание синтаксиса, базовых объектов и алгоритмов. На данный момент существует множество различных версий ES. Работодатели чаще всего требуют знание ES6.
Однако, вначале необходимо изучить чистый JavaScript и лишь потом вникать в новые стандарты. Как ни крути, а классику надо знать. Благодаря хорошему владению JS можно быстро разобраться в любой версии ES и затем освоить любой фреймворк или библиотеку.
Фреймворки JavaScript
Это инструменты, с помощью которых создаются динамические веб/мобильные/десктопные приложения на языке JavaScript. Они ускоряют разработку веб-приложений и предусматривают четко структурированную организацию кода, повышая его качество и чистоту.
Самыми популярными фреймворками для фронтенд-разработки можно назвать Vue.js, React и Angular. Каждый из них предназначен для решения своего спектра задач и имеет различную степень сложности: Vue.js - самый легкий (но и с наименьшим сообществом), React - средней сложности, Angular - высокой сложности. Стоит сконцентрироваться на глубоком изучении одного фреймворка, но в то же время очень рекомендуется знать особенности и сферу применения всех вышеперечисленных технологий.
Какой фреймворк все же выбрать? Мнения на этот счет расходятся. Инструментарий выбирается индивидуально под проект и трудно предугадать, какие задачи вам нужно будет решать. Мы рекомендуем Angular.
CSS препроцессоры
CSS препроцессор - это программа, которая имеет свой собственный синтаксис, но может сгенерировать из него CSS код. Самыми популярными считаются SASS, Stylus, LESS и PostCSS, однако, наибольшее комьюнити имеет именно SASS. Препроцессоры предназначены для:
ускорения процесса написания кода;
упрощения чтения кода и дальнейшей его поддержки;
минимизации рутинной работы при написании кода.
Для повышения эффективности написания CSS кода вполне достаточным будет изучение лишь одного препроцессора.
Git
Самая популярная распределенная система управления версиями, которая позволяет вести историю разработки проекта с возможностью доступа к каждой сохраненной версии. Таким образом, если в процессе создания программный продукт стал неправильно функционировать, есть возможность вернуться к предыдущей рабочей версии вместо длительных поисков ошибок.
Также системы управления версиями являются неотъемлемым инструментом командной разработки, который дает возможность девелоперам работать над одним проектом одновременно, сохраняя внесенные изменения. Заодно удобно отслеживать выполнение задач каждым членом команды. Очень важный инструмент для любого IT-разработчика.
jQuery
Небольшая, быстрая и многофункциональная JavaScript-библиотека, для работы с которой необходимо владеть HTML, CSS и JavaScript на базовом уровне. Она призвана упростить программирование на JS. Данная библиотека представляет объемные решения распространенных задач в виде методов, которые вызываются одной строчкой кода.
Несмотря на то, что jQuery теряет популярность, уступая место фреймворкам JS, большое количество сайтов все еще используют эту библиотеку. FrontEnd разработчик, работающий в офисе, не всегда создает новые веб-сайты - необходимо поддерживать и обновлять уже существующие. Тут без знания jQuery никак не обойтись.
JavaScript Core (DOM, AJAX, JSON)
DOM (Document Object Model) - объектное представление исходного HTML-документа. Ключевым является понятие DOM-дерева, которое описывает структуру страницы. С помощью объектной модели JavaScript получает полную власть над HTML-документом: возможность редактировать, удалять и добавлять элементы и атрибуты HTML, менять CSS код и т. д.
AJAX (Asynchronous JavaScript And XML) - это синтез технологий JavaScript и XML, который фактически представляет собой комбинацию:
встроенного в браузер XMLHttpRequest-объекта (чтоб запрашивать данные с веб-сервера);
JavaScript и HTML DOM (чтобы отображать или использовать данные).
AJAX позволяет веб-страницам совершать асинхронное обновление, обмениваясь данными с веб-сервером. Благодаря этой технологии страница не нуждается в перезагрузке - обновляется лишь конкретная ее часть (вспомните ленту новостей в социальных сетях).
JSON (JavaScript Object Notation) - это общий формат обмена данными. Позволяет совершать обмен информацией между программными продуктами, написанными на разных языках. Таким образом, клиент, использующий JavaScript, может легко передавать данные на сервер, который реализован с помощью Ruby/Java/PHP.
Все три технологии являют особую ценность для каждого веб-разработчика и раскрывают организацию работы интернет-приложения.
БЭМ
“Блок, Элемент, Модификатор” - методология, предусматривающая компонентный подход к разработке веб-страниц, в основе которого лежит принцип разделения интерфейса на независимые блоки. Подход БЭМ позволяет повторно использовать существующий код в создании других страниц с сохранением всех его свойств (размеры, шрифт, цвет и т. д.).
Webpack
Мощный сборщик модулей, который позволяет скомпилировать в один файл несколько разных модулей. Используется во время работы над объемными проектами. Успешно применяется как во фронтенд-разработке, так и при создании бэкенд-приложений.
Flex и Grid CSS
Технологии верстки надежных адаптивных веб-страниц, которые позволяют легче создавать динамические сайты и удобнее структурировать их содержимое. Лучше всего Flex-верстку в действии показывает интерактивный сайт flexboxfroggy.com, а Grid-верстку - cssgridgarden.com.
Gulp / Grunt
Системы сборки, которые автоматизируют рутинные задачи разработчиков: минификацию кода, оптимизацию изображений, тестирование, анализ качества кода и прочее. Подходят при разработке небольших проектов.
TypeScript
Кроссплатформенный строго типизированный язык, который является расширением JavaScript. Строгая типизация позволяет уменьшить количество потенциальных ошибок в исходном коде, написанном на TypeScript. Также, этот язык реализует концепции, которые близки объектно-ориентированным языкам, таким как C#, Java и подобным. TypeScript повышает скорость и удобство написания сложных комплексных программ, вследствии чего их становится легче поддерживать, масштабировать и тестировать.
SVG
Язык разметки масштабируемой векторной графики. Изображения на странице, сделанные с помощью SVG, корректно отображаются на экранах с различным разрешением, не теряя при этом своего качества, в отличии от традиционных растровых .jpeg, .png и других.
Английский язык
Знание английского языка является одним из основных требований к фронтенд-разработчику, поскольку большое количество полезной информации находится именно на англоязычных сайтах. Уровень чтения технической документации будет достаточным для комфортного пользования иностранными ресурсами.
Итоги
FrontEnd разработчик - достаточно универсальный боец в мире веб-разработки. Он должен уметь и верстать, и создавать логику работы клиентской части, и понимать работу серверной части веб-приложения. Для освоения такого обширного инструментария стоит запастись временем, терпением и упорством. Перечисленные в статье средства разработки сайтов также имеют аналоги, поскольку для решения разных задач подходят разные веб-инструменты. Однако мы выбрали самые популярные и эффективные из них.
Если у вас остались вопросы о последовательности и необходимости изучения тех или иных технологий, ответы вы можете найти в видео Как стать FrontEnd разработчиком, в котором подробно рассматриваются основные технологии создания клиентских веб-приложений.
Для тех, кто хочет стать FrontEnd разработчиком, на ITVDN создана комплексная программа обучения, которая включает в себя 35 видео курсов.
Желаем вам успехов в достижении ваших целей!
Оставайтесь с ITVDN!
Популярные PHP MVC фреймворки
Автор: Редакция ITVDN
Автор статьи: Влад Кобылянский, архитектор программного обеспечения, разработчик и консультант по технологиям малого бизнеса (Майами, Флорида).
Вопрос: Что сегодня происходит с PHP фреймворками?
В феврале 2017 года я так ответил на этот вопрос:
«В основном все крутится вокруг двух PHP фреймворков - Laravel и Symfony. Особой нужны в использовании CakePHP, Zend, CodeIgniter, Yii и т. д. нет, если вы начинаете новый проект. Только если вы уже знаете эти фрэймворки или у вас в команде есть разработчики которые привыкли работать с ними, тогда причины их использования обоснованы.
Когда начинается реальная разработка, вы должны иметь возможность находить инструменты, плагины, ответы на общие проблемы. С сообществами Laravel и Symfony, с постоянным развитием новых «модулей» или функций, не будет ощущения, что вы остались «в стороне». Одни Laracast (даже если вы не работаете в Laravel) чего стоят! Они просто фантастичны.
Когда заходит речь об интеграции с iron.io или другими SaaS сервисами, поддержке широкого спектра источников данных или о среде разработки – Laravel и Symfony и их расширения намного более продвинуты.
Еще одним достоинством Lumen, является быстрая разработка и прототипирование API для Laravel. При этом это никак не ограниченно для построения больших приложений.Вообще говоря, сегодня мы определенно видим переход к контейнерной архитектуре, где MVC играет гораздо меньшую роль. Все это касается микросервисов, оркестровки и создания приложений как «функций» (AWS Lambda и подобных сервисов). Возможно, пришло время освежить наши навыки Node/JS и GoLang?»
Хотя я в целом доволен этим ответом, сейчас я думаю, что некоторые моменты пришло время пересмотреть.
Прежде чем перейти к таким странным темам, как GoLang, давайте взглянем на тенденции PHP MVC фреймворков.
Я бы сказал, что тенденции, которые мы наблюдали в прошлом, остаются. Laravel продвигается вперед, в то время как большинство остальных фреймворков отстает. В популярности Symfony наблюдается небольшой всплеск, вероятно, из-за долгожданного выпуска Symfony 3. Я попробовал более конкретные поиски для сравнения, такие как «CakePHP 3» или «ZF2», однако они не привели к статистически значимым тенденциям.
На этот раз я добавил CodeIgniter, потому что он оказалася очень популярным. Я получил ряд вопросов о CodeIgniter. Если коротко, CI сейчас не в конкуренции, потому что это не 100% фреймворк MVC. Иначе, чем организованной коллекцией POPO, я это не назову.
Для наглядности представляю вам цитату из руководства CodeIgniter:
«CodeIgniter имеет довольно свободный подход к MVC, поскольку не требуются Models. Если вам не нужно дополнительное разделение или вы обнаружите, что поддерживающие Models требуют большей сложности, чем вы хотите, вы можете их проигнорировать и создать свое приложение с помощью Controllers и Views.»
Когда дело доходит до построения структуры, я просто не согласен с таким подходом. Возможно, это достойный шаблон (отсюда и популярность CodeIgniter), однако должна быть какая-то дисциплина, навязанная фреймворком, иначе конечный продукт в итоге превращается в беспорядочный спагетти-код, завернутый в какой-то «шаблон».
Далее, Symfony 3 привнес некоторые достойные улучшения в разработку и целый ряд новых «фич». Как и многие аналоги PHP, теперь он предлагает микро-фреймворк. ZF3, к примеру, добавил ряд улучшений, таких как поддержка PHP7 (наконец!) и даже стал микро-фреймворком... но, в их руководстве так и говорится:
«Для пользователей Zend Framework 2 MVC, различия с ZF3 незначительны...»
Я действительно надеялся, что они скажут, что различия есть, что было замечательное архитектурное усовершенствование, замечательные новые модули, которые помогают вам разрабатывать все по-современному. Но, увы, по большей части ZF3 по-прежнему похож на ZF2.
Long Story Short
Вот как я вижу мир PHP фреймворков сегодня:
Symfony или Laravel (выбор зависит от того, какую задачу вам нужно решить)
Все остальное
Laravel на первом месте. Объем доступной информации, Laracasts, таланты разработчиков во всем мире, простые реализации шаблонов, интегрированные наборы инструментов тестирования, активная реализация записей в форме Eloquent, облегченная версия в Lumen, развитие Homestead (Vagrant) – все перечисленное способствует фреймворку действительно выделяться и для новых, и для опытных разработчиков.
Однако модели Eloquent могут стать непослушными и довольно большими по размеру, а сервисов Laravel (не путать с микросервисами) можно создать очень много, и вот тут люди начинают думать о реализации Repository, которому здесь не место. Так родился Monolith.
Если вам не нравится активный шаблон записи и вам нужна дополнительная гибкость в репозиториях, или, возможно, вы видите слишком много независимых анонимных функций, тогда используйте Symfony + Doctrine. Рассматриваю ли я Symfony как шлюз для монолитных приложений? В какой-то степени, да.
В целом, я бы не назвал это резким изменением с прошлого года. Тем не менее, нам нужно взглянуть на общую картину: правильно разработанное приложение выходит за рамки чистого MVC; речь идет об инфраструктуре, конвейере развертывания, разъединённой архитектуре. Все это может быть достигнуто в стеке MVC, но нужно быть внимательным, чтобы избежать Monolith.
Приход микросервисов
Раньше я упоминал о распространенности микросервисов и необходимости улучшать навыки GoLang или Node. А в статье о PHP MVC было бы глупо не упомянуть о явно растущем движении к микросервис-ориентированной архитектуре (MOA); и это движение набирает обороты, поверите вы или нет.
Хотя эти два понятия не являются взаимоисключающими, не нужно находить параллели между ними, ведь они действительно представляют собой разные философии. В качестве примера, размещение вашего приложения MVC в одном контейнере и MySQL в другом, а затем объединение их вместе, не обязательно представляет собой надлежащую MOA.
Это, безусловно, лучший подход, чем пытаться установить MAMP, XAMPP или что-либо еще, чтобы заставить ваш компьютер работать с приложением.
Кроме того, это может решить некоторые проблемы, такие как простота запуска локальной среды на разных платформах и, возможно, в некоторых случаях стратегии развертывания, но вы застрянете с монолитным MVC в вашем приложении/контейнере.
Уничтожение Monolith
Микросервисы – это как раз о «разрушении». В то время как MVC обращается к вашей структуре кода и организации, обеспечивая надежный подход к разделению проблем, эта концепция еще больше расширяется контейнерами/сервисами/MOA.
Вместо того, чтобы просто отделять виды (Views) от моделей (Models), вы теперь разделяете каждый «кусок» или логическую единицу вашего приложения на индивидуальную службу, предназначенную для правильной работы с собственными обязанностями.
Если у вашего MVC-приложения есть контроллер «Поиск», действия и соответствующие методы модели, то у нас уже есть пример монолитного приложения.
Напротив, используя подход MOA, у нас будет сервис для каждого из этих процессов. В качестве примера:
Router сервис
Request сервис
Query сервис
DataSource сервис
Response сервис
Но не все эти «сервисы» являются частью стека MVC? Конечно нет. Они являются строительными блоками нашего Monolith.
С MOA каждый сервис работает в рамках собственной среды, а мы, как архитекторы, можем разработать лучший подход к решению конкретного запроса.
В качестве примера, если я должен был бы написать службу обработки изображений в среде Laravel, я использовал бы что-то вроде расширения PHP-GD2, что может быть не самым эффективным способом обработки изображений. Служба C++, которая обрабатывает мои запросы в обработке изображений, может быть намного быстрее и определенно более надежной при масштабировании. И мы могли бы сделать вывод службы обработки изображений и отправить ее в службу DataStore, службу CloudStorage и службу Queue Email.
Решение этой же задачи с кучей скрытых заданий и, возможно, нескольких отдельных приложений MVC и пользовательских сценариев – это то, как разработчики делали это раньше (2 года назад). Время двигаться вперед.
Масштабируемость
Здесь возникают проблемы (или заканчиваются, в зависимости от того, куда вы держите курс). С одной стороны, очень сложно масштабировать Monolith: если вы создадите все больше и больше логики в одном и том же наборе MVC, вы застрянете с хорошо структурированным приложением ужасной сложности. С другой стороны, если вы построите тысячу микросервисов на разных языках, как вы будете управлять этим беспорядком?
Существуют различные инструменты компоновки контейнеров (например, Kubernetes, Swarm, Mesos), услуги по развертыванию контейнеров (GKE и AWS ECS), однако лишь немногие предприятия используют архитектуру Docker. Есть удачные истории в построении инфраструктуры с использованием Docker или других контейнерных технологий (т. е. GKE). Большинство из этих историй исходят от компаний, которые могут позволить себе тратить ресурсы на архитекторов, дефолтов, администраторов баз данных и инженеров. Тем не менее, сейчас идут бесчисленные дискуссии о том, как развернуть хорошо организованный и элегантный MOA.
В любом случае, вы не решите эту проблему самостоятельно, и пока вы не достигнете относительно большого масштаба, эта проблема действительно нуждается в решении. Может быть, сейчас не самое время усердствовать.
Золотая середина на сегодняшний день (даже для тех, кто занимается приложениями меньшей сложности или не такими требованиями к трафику) заключается в том, чтобы разгрузить многие типичные сервисы сторонним провайдерам. Почти все доступно сейчас как сервис. Фоновые задания, обработка изображений, аутентификация, аналитика данных, ведение журнала, отправка электронной почты, системы очереди не обязательно должны строиться в одном стеке MVC, а архитектор должен подумать о том, что может быть выгружено в систему SaaS за небольшую ежемесячную стоимость (т.е. поиск Algolia) или, возможно, специально созданную докерную службу, работающую в облачном пространстве, которая выполняет эту обработку изображений.
Я думаю, важно, чтобы вы не начали перепроектировать весь проект с начала, не сбрасывать все, что у вас уже есть, а выпускать докеры, где это можно сделать. Существуют способы постепенного развертывания вашего проекта/продукта путем разъединения, изучения узких мест в системе (и т.д.) и последующим применением разделения проблем в этих проблемных областях.
Вывод
2017 год принес нам много дискуссий и производственных развертываний, основанных на контейнерах и MOA. Мои размышления о Docker, используя GoLang или Node, не означают, что PHP «умирает» или что-то в этом роде ... Я считаю, что разработчикам нужно оставаться в тренде. Если микросервисы и дальше будут развиваться в том же русле, в котором это происходит сейчас, то почему бы не изучить GoLang? Он идеально подходит (из-за низкой занимаемой площади, скорости и параллельной обработки) для разработки небольших контейнерных приложений. Node и GoLang позволяют создавать небольшие сервисы, которые являются частью более крупного проекта, связывают созданные сервисы и выпускают их как контейнеры Docker, если это необходимо в вашей работе.
Тем не менее, все эти передовые решения и языки не уменьшают значимость и востребованность языка PHP. Разработчикам еще нужны будут стеки MVC и работа с API.
MOA пока не помогает решить архитектурные проблемы на стороне frontend, UI или Views, хотя при этом контейнеры помогают нам избежать работы с Monolith на backend. Мы можем создать чрезвычайно надежное backend-приложение, но оно среагирует на JSON, который каким-то образом должен быть представлен в клиентском приложении. Имеет ли значение, если результирующий объект ответа поступает из РНР кода, URL или от модулей принятия решений и обработки, разделенных интерфейсом обмена сообщениями? Это зависит от Ваших потребностей и требований к вашему приложению.
Мой совет: в этом году учите Laravel, следите за Docker, GoLang и фокусируйтесь на конвейере развертывания. Продвижение от локального небольшого проекта к продакшену должно быть достаточно плавным, особенно при создании приложений MVC.
Оригинал статьи
Как подготовиться к собеседованию в IT на английском
Автор: Влад Сверчков
Английский в IT. Для каких задач нужен?
English в школе. Опыт автора.
Какой английский необходим для разработчиков и тестировщиков?
Что не работает.
Что реально работает в изучении English.
Как это организовать.
Глоссарий.
Рекомендации по изучению английского + бонус!
Заключение.
Друзья, предлагаем вашему вниманию занимательную статью, написанную на основании интервью одного IT-специалиста из Кремниевой долины. В своё время ему потребовался английский для работы над крутыми международными проектами, однако камнем преткновения стал разговорный English. Это краткая и поучительная история о том, как наш герой перепробовал множество вариантов, но таки смог найти тот самый, который помог ему «заговорить» и добиться желаемого в IT. Приятного чтения!
Приветствую!
Сегодня мы поговорим о том, как быстро прокачать английский для собеседований в IT-компанию. Я буду рассказывать на примере своего опыта, когда решения на базе искусственного интеллекта ещё не были распространены.
Немного о себе. Меня зовут Александр, сейчас я работаю аналитиком в EPAM в Калифорнии, проект у нас в компании Google. В прошлом у меня уже был опыт управления проектами. Сам я из цеха программистов, но сейчас занимаюсь бизнес-анализом.
Эта статья будет полезна в первую очередь для тех, кто хочет подтянуть свой английский для работы в информационных технологиях. Данный способ подходит не только для IT, но и для любой другой сферы.
Когда говорим про обучение, нужно понимать, что есть множество способов и вариантов. Я помогу выбрать лучший способ именно в контексте работы в IT.
После прочтения статьи вы поймете, как сэкономить время на изучение английского языка. Время – это самый драгоценный ресурс, поэтому думаю, что вам будет полезно.
Английский в IT. Для каких задач нужен?
Пару слов об IT и какой английский нужен.
Приведу свой пример: когда я был разработчиком, English сводился к тому, что я читал мануалы на английском языке, первоисточники, использовал Stack Overflow, читал на форумах. В основном это была текстовая информация, то есть беглое чтение больших объемов информации. Если говорим про какую-то документацию, протоколы и т. д., я выделяю это как первичный уровень знания языка.
Также упомяну про английский для резюме. Сталкивался с тем, что у людей прекрасный инглиш, и у них в резюме указано, что уровень B2 или TOEFL. Но касаемо работы это не приносило бенефитов. Нужно четко разделить английский в плане работы, особенно в IT, на два уровня.
Английский для различных ролей в IT
Английский, который нужен тестировщикам и разработчикам, является первым входным порогом. Следующий порог – это там, где требуется коммуникация, например, для ролей бизнес-аналитика или проектного менеджера, которые общаются с англоговорящими заказчиками или стейкхолдерами.
Если говорить о разработчиках, тестировщиках, архитекторах, то один из важных аспектов – это техническое интервью. Оно может быть для собеседования в компанию или внутренним. В моем случае, чтобы подтвердить свою компетентность, я проходил assessment – экзамен, на котором присутствовало пять человек из разных стран с разным уровнем знания языка и акцентами. Нужно было отвечать на профессиональные вопросы и приводить примеры из прошлого опыта.
Говоря о техническом интервью, важно отметить, что английский язык необходим не только для понимания вопросов, но и для передачи своего опыта и знаний. Кроме того, есть понятие поведенческого интервью, где тоже важно владеть языком.
Английский в школе. Опыт автора
Расскажу про свой опыт изучения английского в школе. У нас English был со второго класса, это были базовые буквы и слова. В пятом классе начался обычный школьный английский: много грамматики, сложные слова, которые нужно было заучивать наизусть. Произношению уделялось меньше внимания, особенно если говорить не о гимназиях и школах с углубленным изучением языка.
Мы делились на группы по уровню знаний. В одной группе были ученики с более сильным английским, куда попал и я. В другой группе учительствовал профессиональный переводчик без преподавательского образования: ученики слушали песни, общались только на английском – обучение было больше в игровой форме без особого упора на грамматику. Баллы во второй группе, соответственно, были ниже.
В итоге, несмотря на хорошие оценки в школе и институте, в реальной жизни, при поездках в Европу, я убедился, что мой английский был недостаточно хорош для повседневного общения – я не понимал людей, равно как и они меня.
Чему не учат в школе:
Простоте и понятности. В школе не дают базовые потребительские фразы, которые можно заучить и использовать в повседневной жизни.
Беглости и плавности. Школьная программа не учит беглому чтению и пониманию общего смысла текста или речи без детального перевода каждого слова. Также не учат говорить плавно и непринужденно, как и пониманию живой речи собеседника.
Практическим навыкам. Научиться говорить естественно и понимать собеседника в реальном времени – это то, что приходит с практикой и чего в школе не преподают.
Английский, необходимый для разработчиков и тестировщиков
Первый и важнейший ресурс – это время. Все хотят быстро выучить язык, но в реальности это требует времени и усилий. Для того чтобы подтянуть английский, нужно им регулярно заниматься, а также использовать на практике.
Второй ресурс – деньги. В идеале, чтобы всё было бесплатно. Однако даже если у вас есть средства, нужно понимать, сколько вы отдадите и какое качество получите взамен.
Порог входа
Для тестировщиков и разработчиков начальным порогом является базовое владение английским, чтобы понимать и использовать техническую документацию, писать простые отчеты о багах, взаимодействовать с другими членами команды. Однако, если вы претендуете на роль бизнес-аналитика или проектного менеджера, где требуется постоянное взаимодействие с англоязычными заказчиками и стейкхолдерами, уровень английского должен быть значительно выше.
Технические и внутренние интервью
Как я уже упоминал выше, английский пригодится для собеседований на работу в иностранную команду / работу с иностранным заказчиком, а также могут быть внутренние технические интервью (для подтверждения квалификации, например). Важно уметь отвечать на профессиональные вопросы и приводить примеры из своего опыта.
Что не работает
Учитель-академик. Академический подход с упором на грамматику и теорию мало помогает в развитии навыков свободного общения.
Письма, чаты и статьи. Письменная практика не дает значительных результатов в развитии разговорных навыков.
Голосовые сообщения. Запись голосовых сообщений создает иллюзию обучения, но не развивает навык быстрой реакции, схватывания на лету и понимания в реальном времени.
Зазубривание теории и слов. Заучивание теоретических вопросов и слов не помогает в реальном разговоре, так как любое отклонение от заученного сценария вызывает замешательство.
Просмотр фильмов и сериалов. Хотя это полезно для общего понимания языка, данный метод не способствует развитию активных навыков спикинга и понимания на высоком уровне.
Что действительно работает при изучении английского
Очень эффективным является ежедневное общение на английском языке по 45 минут либо по часу в день. Это может быть разговор с носителем языка или человеком с уровнем выше вашего. Важно, чтобы это была активная разговорная практика, а не пассивное восприятие информации. Практика в экстремальных условиях, когда нужно быстро реагировать и формулировать мысли, значительно улучшает спикинг-навыки.
Как это организовать
Найдите собеседников внутри компании. Отправьте письмо коллегам с предложением готовиться вместе к профессиональному интервью / экзамену либо чему-то в этом роде. Укажите список вопросов и предложите созваниваться раз в неделю. Таким образом, у вас будет постоянная практика.
Используйте сервисы для общения. Как пример – сервисы вроде Conversation Exchange или Italki. Они помогут найти людей для практики, с которыми можно регулярно созваниваться и общаться на английском – как профессиональных преподавателей, так и простых энтузиастов, готовых заниматься за небольшую плату. Именно так я заполнял свой ежедневный часовой спринт.
Платные преподаватели. В случае если коллег недостаточно или вы хотите повысить интенсивность занятий, можно обратиться к платным преподавателям на том же Italki.
Глоссарий
В моей практике словарный запас оказался особенно важен, поскольку необходимо было уверенно использовать профессиональные термины, специфичные для разработки, тестирования, архитектуры и бизнес-анализа. И чтобы свободно общаться я создал свой глоссарий.
Как я создал свой глоссарий:
Взял книги, которые считаются "библиями" в области управления проектами и бизнес-анализа:
PMBOK (Project Management Body of Knowledge) для менеджеров проектов.
BABOK (Business Analysis Body of Knowledge) для бизнес-аналитиков.
Скачал эти книги в формате PDF, затем скопировал их содержимое в текстовый файл.
Заменил все пробелы на переносы строки, чтобы сформировать одну колонку текста.
Для анализа текста и выделения наиболее часто используемых слов – Excel. В Excel я создал сводную таблицу (pivot table), чтобы определить частоту встречаемости слов.
Из тысячи слов я выбрал 40 самых употребляемых и заучил их. Это позволило мне быстро расширить свой профессиональный словарный запас и начать активно использовать эти термины в своей речи.
При построении глоссария важно использовать проверенные и авторитетные источники. Книги, такие как PMBOK и BABOK, предоставляют стандартизированные термины, которые часто употребляются в профессиональных кругах. Это гарантирует, что глоссарий будет достоверным и актуальным.
Можете выбрать другие авторитетные книги. Главное — следовать методике: создайте колонку с текстом, проанализируйте частотность слов и выберите наиболее часто встречающиеся термины для заучивания.
Рекомендации по изучению английского
Ежедневная практика. Первая и самая важная рекомендация — ежедневно уделять не менее одного часа на общение на английском языке. Хотите хорошо говорить и проходить собеседования на английском? Просто говорите и слушайте. Уже через месяц-два регулярной практики вы увидите результаты.
Определение канала восприятия. Важно определить, как вы лучше всего воспринимаете информацию: через аудио, текст или визуальные материалы.
Экспериментирование. Пробуйте разные методы изучение языка и найдите то, что работает именно для вас. Не бойтесь делать ошибок!
Поддержание языковой среды. Окружите себя источниками английского языка для улучшения восприятия и запоминания:
текстовый формат: книги, статьи и новости на английском языке;
аудио: подкасты, аудиокниги;
используйте стикеры с новыми словами и расклейте их на видных местах, чтобы легче запоминать;
переведите интерфейсы телефонов и компьютеров на английский язык.
Бонус: бесплатный сервис для практики английского языка
А теперь я хочу поделиться с вами действительно полезным бонусом — это бесплатный сервис под названием Pramp. Он позволяет вам находить собеседников со всего мира, имеющих разный уровень подготовки. Вы можете выбрать тему для интервью, будь то техническое или поведенческое собеседование.
Алгоритм использования Pramp прост:
Найдите человека для общения: на выбор множество стран, собеседники с разным уровнем английского.
Выберите тему для интервью: FrontEnd, системный дизайн, поведенческое интервью и т. д.
Организация созвона, который длится около 30 минут. У вас есть заранее подготовленный набор вопросов.
Задаете вопросы своему собеседнику, делаете заметки о том, что понравилось и что можно улучшить.
Меняетесь ролями: ваш собеседник задает вам вопросы.
В сервисе есть множество готовых наборов вопросов для каждой тематики. Вы можете следовать им или использовать свой собственный список. Так же может поступить и собеседник.
Повторюсь: сервис бесплатный. Вы сможете общаться с людьми из разных стран и с различным профессиональным опытом; вопросы и темы максимально приближены к реальным собеседованиям. Вы не только улучшите свои языковые навыки, но и получите ценные советы по прохождению интервью.
Я использовал этот сервис для подготовки и могу сказать, что это великолепная возможность. Общался с менеджерами проектов, инженерами из Америки, Азии и Индии. Pramp идеально сочетает в себе все необходимые элементы для успешной подготовки к прохождению собеседований.
Заключение
Самое главное в изучении английского – это регулярность и интенсивность практики. Ежедневные занятия по часу в стрессовых условиях с различными собеседниками помогут быстро повысить уровень английского языка, улучшить беглость и плавность речи, а также развить навыки понимания собеседника. В своё время мне очень помогли Conversation Exchange, Italki, Pramp.
В моём случае я перепробовал много различных вариантов: тексты, статьи, аудиокниги, сериалы, подкасты, преподаватели английского. Наблюдал увеличение словарного запаса, совершенствование грамматики, но «заговорить» так и не мог.
В итоге, именно регулярный живой разговорный формат и помог мне достичь успеха на англоязычном собеседовании и осуществить свои карьерные амбиции. Уверен, что мой опыт окажется ценным для многих из вас. Успехов в изучении английского!
Как правильно заключить договор на разработку сайта: советы для фрилансеров
Автор: Богдана Гайворонская
Фрилансеры не всегда заключают договор на разработку сайта с заказчиками, полагаясь на договоренности, озвученные устно или сформулированные в переписке. Ведь сам процесс согласования и подписания документов занимает определенное время и требует усилий. Впрочем, сотрудничество на доверии достаточно рискованно для обеих сторон. Кроме того, что один из участников может безнаказанно отказаться от выполнения своих обязанностей, есть немало нюансов, которые затрудняют сотрудничество в случае отсутствия документально заверенных алгоритмов работы. Даже когда обе стороны намерены добросовестно выполнить все договоренности, их может подвести банальное недоразумение.
Договор не только гарантирует защиту как исполнителя, так и заказчика. Он представляет собой определенную дорожную карту, которая описывает каждый этап работ, каждую возможную ситуацию, действия партнеров в случае форсмажоров и алгоритм урегулирования спорных вопросов.
Даже подписание типового договора частично уменьшает риски, но мы все же рекомендуем создавать отдельный контракт для каждого заказчика.
Хостинг-провайдер и регистратор доменных имен Cityhost.ua предлагает читателям нашего блога материал, созданный совместно с IT-юристами, чтобы разобраться во всех аспектах создания договора на разработку сайта.
Этапы согласования и заключения договора
Заключение договора начинается в момент, когда заказчик и исполнитель обсуждают и согласовывают все детали проекта. Поэтому этот этап также должен быть задокументирован в виде брифа. Кроме того, нужно составить детальное ТЗ и сформировать сам договор. Давайте рассмотрим каждый шаг по этому пути.
Заполнение брифа
Заказчики очень не любят заполнять бриф и пытаются пропустить этот этап, обсудив все детали по телефону или в чате. Часто случаются ситуации, когда заказчик говорит: «Вы профессионал, посмотрите сами, что там нужно сделать и изложите свои предложения». Такая позиция нередко выливается в результат: «Нет, это не то, что нужно, предложите что-нибудь другое».
На самом же деле бриф необходим для сотрудничества, потому что в нем содержатся ответы на важные для исполнителя вопросы. Каждый разработчик заключает свой бриф, который может выглядеть подобным образом:
Название и отрасль работы компании.
Целевая аудитория.
Локация (местная, всеукраинская, международная).
Ценности, миссия.
Корпоративный стиль — слоган, корпоративные цвета, стиль промо-материалов (желательно отправить эти материалы на почту).
Тип сайта, который хотите заказать (визитка, интернет-магазин, корпоративный сайт, наличие/отсутствие блога и т.п.).
Ориентировочная структура сайта, названия разделов.
Пожелания по оформлению сайта.
Примеры сайтов, на которые вы хотели бы ориентироваться.
Можно создать типичный бриф, но все же стоит вносить в него дополнительные вопросы, предназначенные для конкретного заказчика.
Составление технического задания
После заполнения брифа заказчик уточняет вопросы и вносит предложения, каким он видит будущий сайт — основную концепцию, количество разделов, визуальный стиль. На основе этих переговоров составляется техническое задание и одновременно начинается разработка договора.
В техзадании прописывается конкретный результат и все услуги, предоставляемые разработчиком. Это очень важно, поскольку «сделать сайт» довольно размытое понятие. Может случиться, что владельцы фирмы обратились к фрилансеру, который только пишет код, и не занимается дизайном и контентом. Он будет ждать от заказчика макет, тексты и фото. Другие фрилансеры могут сделать сайт «под ключ» и имеют разветвленную сеть субподрядчиков — дизайнеров, копирайтеров, фотографов и т.д.
Техзадание прописывается максимально подробно и включает в себя измеряемые параметры, например: «Сайт должен состоять из 5 разделов: главная страница, страница «О нас», страница контактов, страница для представления товара, раздел для блога».
Если у сайта есть блог или раздел новостей, в ТЗ также пишется, должен ли исполнитель заполнить этот раздел 2-3 новостями или делает только структуру блога.
Чем подробнее будет описан каждый аспект разработки сайта, тем меньше остается места для недоразумений.
Обсуждение и согласование текста договора
Для начала нужно определиться с типом договора. Есть два типа — договор на оказание услуги и договор подряда. Они отличаются тем, что в первом случае ключевым является сам процесс работы, а во втором — результат. К примеру, SEO-продвижение не имеет конечного результата и продолжается всегда, пока существует сайт — тогда заключается договор на сотрудничество. Для разработки сайта больше подходит договор подряда, поскольку заказчику нужен сайт, его интересует завершенная работа и его плоды.
Далее нужно поочередно прописать все главные этапы сотрудничества:
Предоставление заказчиком материалов разработчику. Это могут быть тексты, фото, видео, логотип и т.д.
Создание и утверждение макета.
Создание сайта.
Внесение поправок.
Проверка и приём работы.
Подписание актов о выполнении работ.
Оплата проделанной работы.
Это ориентировочный список, потому что у каждого сайта могут быть свои этапы. Например, исполнитель не только разрабатывает сайт, но и проводит маркетинговые исследования, анализирует конкурентов и на основе полученной информации дает рекомендации заказчику насчет концепции сайта — это отдельный этап, который также требует усилий и влияет на формирование стоимости заказа.
Основные правила составления договора
Есть элементы договора, без которых он не сможет стать четким документом, дисциплинирующим стороны в процессе работы.
Сроки
Обязательно нужно прописать сроки выполнения каждого этапа. Если внимательно присмотреться к порядку действий, вы увидите, что часть работы зависит от исполнителя (создание сайта, внесение правок), а вторая часть — от заказчика (предоставление материалов, проверка, прием работы). Если в договоре прописана только финальная дата, когда разработчик должен сдать сайт, он может попасть во временную ловушку — сроки затянуты, но не по его вине.
Также следует прописать действия сторон в случае, если кто-то из партнеров выполняет свои обязанности ненадлежащим образом. К примеру, если заказчик не осуществил прием работы в течение семи дней, она автоматически считается принятой.
Прописывайте не конкретные даты, а время между этапами, например: «Разработчик обязуется предоставить начальный макет сайта в течение 4 дней с момента получения материалов».
Измеримость
Все пункты в договоре должны быть описаны таким образом, чтобы их можно было измерить каким-либо конкретным параметром — временем, действием, результатом. Например, обсуждение и внесение правок происходит в течение недели после того, как разработчик пришлет по электронной почте ссылку на готовый сайт на такой-то адрес (конкретный). Таким образом снижается вероятность путаницы, когда одна сторона ждет результата в Вайбере, другая пишет сообщение в Фейсбуке, а время истекает.
Конкретика
Очень важно прописывать четкие формулировки. К примеру, «предоставить макет сайта» — это нечеткая формулировка. А вот «предоставить макет сайта в виде проекта в Figma с доступом редактора» — это уже нечто конкретное. Также нужно прописывать, какие материалы ожидает разработчик — фотографии в формате .png с разрешением не менее 600 пикселей по ширине, тексты в формате Google Docs с открытым комментированием.
Далеко не все заказчики ориентируются в компьютерных технологиях. Если ваш клиент — небольшое строительное предприятие или ФЛП, ремонтирующий велосипеды, для него не существует никаких опций по умолчанию. Поэтому конкретное и детальное описание всех требований и этапов — это скорее необходимость, иначе клиента и разработчика может ожидать много сюрпризов.
Сбалансированность
В договоре должны быть равномерно соблюдены права и обязанности обеих сторон. Не должно быть такого, что во всем виноват заказчик или вся ответственность лежит на исполнителе. Если какой-то этап работы зависит от действий определенной стороны — она несет ответственность за его реализацию или уплачивает неустойку (или подпадает под другие санкции) в случае невыполнения обязанностей по собственной вине.
Пункты договора, требующие внимания
В этот раздел вынесем те аспекты сотрудничества, о которых начинающие фрилансеры могут не знать или не уметь правильно их урегулировать.
1) Количество и порядок поправок, внесение изменений в ТЗ
Важен вопрос количества возможных правок и внесения изменений в техническое задание.
Лучший и проверенный метод — когда заказчик отправляет все правки в одном документе, а исполнитель вносит их сразу. Оптимально делать три круга правок; если у клиента появляются дополнительные правки, это должно оплачиваться. Такая политика в первую очередь защищает исполнителя от десятков переделок и дисциплинирует заказчика, который более продуманно решает, нужна ли эта правка.
Правки должны быть конкретными и аргументированными, без формулировок наподобие «сделайте как-то иначе, но не так, как есть».
Насчет ТЗ — все изменения, которые заказчик хочет внести в него уже во время работы, должны также дополнительно оплачиваться. В случае необходимости можно прописать, какие изменения и какого масштаба можно вносить, сколько стоит каждое из них. Одно дело поменять фотографию, и совсем другое, когда заказчик на финальной стадии решает заменить CMS (по факту это значит делать все заново).
2) Авторские и имущественные права
Вопрос авторских прав касается как материалов, используемых на сайте при разработке, так и использования материалов сайта после завершения работ.
Важно отслеживать, уникален ли контент, который предоставляет заказчик или предлагает исполнитель. Для обеспечения обеих сторон нужно прописать порядок действий по предотвращению ситуаций, когда могут быть нарушены авторские права третьих лиц или одного из участников проекта. К примеру, сторона, предоставляющая материалы, должна приобщить документы, подтверждающие право собственности на них — квитанции на приобретение фото- и видеоматериалов или другой контент. Или для упрощения процедуры можно просто отметить, что ответственность за нарушение авторского права несет сторона, предоставившая материалы.
К объектам авторского права относятся название сайта, тексты, фото, видео, дизайн и код. В договоре должно быть указано, кому принадлежат имущественные и авторские права на все элементы проекта после его завершения и может ли разработчик использовать какие-либо материалы для дальнейшей работы.
Для ориентира используйте Закон об авторском праве и смежных правах.
3) Сотрудничество с другими подрядчиками
Сайт состоит из многих компонентов, и не все работы подрядчик может выполнить самостоятельно. Если он обращается к субподрядчикам для создания дизайна или текстов, это также должно быть зафиксировано в договоре. Но в любом случае за качество конечного результата отвечает исполнитель.
4) Ответственные лица за коммуникацию с исполнителем
Этот момент особенно стоит внимания, если компания-заказчик большая, в ней есть много разных отделов и работников. Скорее всего, исполнитель не будет работать напрямую с директором, а будет общаться с кем-то из менеджеров. В таком случае договор должен содержать ФИО, должность и контакты лица, ответственного за коммуникацию. Не мешает указать, какие каналы общения считаются официальными — ими могут быть не только почта, но и аккаунт в Телеграме или страница в Facebook.
В случае, если разные аспекты будут согласовываться с разными людьми, это также должно быть указано. Например, за финансовые вопросы отвечает бухгалтер, за согласование макета — дизайнер компании, все остальные вопросы — к менеджеру. Но все же лучше, когда проект курирует один конкретный человек и несет ответственность за своевременную и эффективную коммуникацию.
5) Форсмажерные обстоятельства
Бывают ситуации, когда кто-то не может выполнить свои обязанности по не зависящим от него причинам. На этот случай следует вынести отдельным пунктом преодоления форсмажорных обстоятельств: что можно считать такими обстоятельствами и порядок действий в случае их возникновения (например, отсрочка для исполнителя для завершения работ или отсрочка оплаты для заказчика). Обычно в этот список входят пожары, стихийные бедствия, боевые действия, забастовки, введение карантина и другие обстоятельства, которые нельзя предусмотреть и подготовиться к ним.
6) Финансовые вопросы
В эту категорию входит не только порядок оплаты за проделанную работу (аванс, гонорар), но и сопутствующие расходы. Сюда можно отнести оплату домена и хостинга, заказы текстов, дизайна, фотосъемки и т.д. Исполнитель может эти расходы включить в сумму гонорара, но можно положить их и на заказчика. Это все обсуждается и прописывается. Также в договоре должны быть зафиксированы такие моменты, как порядок налогообложения, расчетная валюта, счета для получения средств, порядок перечисления и способ подтверждения получения средств исполнителем.
7) Прием работы или отказ от него
На проверку и прием работы выделяется определенный срок, в течение которого заказчик может выдвинуть обоснованные замечания и требования по доработке сайта или отказаться принять работу, предоставив четкие аргументы. Отказаться от приема работы можно только в случае, если сайт не отвечает технической задаче, выполнен с нарушением законов или имеет другие объективные недостатки, которые делают невозможным его использование и которые можно доказать. Не могут быть учтены субъективные аргументы, когда сайт исполнен по всем договоренностям, но разработчик представлял себе его как-то иначе. Если разработчик выполнил все пункты ТЗ и договор, клиент не может отказаться от подписания акта.
В случае, если речь идет о масштабных проектах с большой суммой оплаты, советуем обратиться за консультацией к юристу, который поможет прописать договор максимально четко и избежать «лазеек» для двойной трактовки.
React vs Angular: две стороны JS
Автор: Редакция ITVDN
В мире дедлайнов правильный выбор технологии играет ключевую роль. Имея многолетний опыт за спиной, мы были вовлечены в разработку на десятках языков, с использованием фреймворков и библиотек. Собрав вместе наши знания, мы решили пролить свет на вопрос: React или Angular? и поделиться своими мыслями с вами.
Так что в этой статье мы собираемся преобразовать наш опыт frontend разработки в информацию, которая поможет определить лучшую для вас технологию.
Почему Angular 2?
Angular JS – это open-source библиотека, предоставляющая всё необходимое для создания клиентской части сайта.
Используя Angular 2, вы можете заметить, что вторая версия избавлена от ненужной сложности, которая присутствовала в предыдущей версии. Команда, работавшая над Angular 2, устранила или заменила почти все концепции первой версии. Я говорю о модулях, контроллерах, областях видимости, директивах и так далее.
Однако они не остановились только на упрощении фреймворка. Они также добавили новые примечательные фичи и некоторые улучшения. Среди фич мы хотели бы выделить встроенную поддержку приложений и server-side рендеринг. Говоря об улучшениях, мы не можем упустить тот факт, что производительность Angular 2 резко возросла.
Как Angular стал популярным?
Тот факт, что Angular – создание Google, внушает доверие сам по себе.
Фреймворк разработан таким образом, что не травмирует психику разработчиков, которые ранее учили другие технологии и языки.
Многие разработчики утверждают, что если код на Angular кажется сложным – тогда ты делаешь что-то не так.
Сайты, созданные на Angular JS: YouTube (for PS3), GoodFilms, Freelancer, Upwork.
Итак, почему Angular 2 может быть полезным? Давайте рассмотрим его основные плюсы и минусы.
Angular pros and cons by Cleveroad
Почему ReactJS?
В отличие от Angular, ReactJS – это JavaScript-based библиотека с открытым исходным кодом и JSX компилятором. Он в основном сосредоточен на пользовательском интерфейсе и разрешает создавать многоразовые UI рассматриваемые компоненты.
Используя React, вы всегда должны помнить, что это не MVC фреймворк, а только библиотека для рендеринга вашего View (V из MVC). Таким образом, React – это интерфейс-ориентированное решение, когда ваши пользователи получают весьма отзывчивый интерфейс с плавной загрузкой.
Как React стал популярным?
За этим проектом стоит Facebook.
ReactJS-решения дружественны с SEO.
Производительность и гибкость ReactJS очень высоки.
Известные сайты, сделанные с помощью ReactJS: Netflix, Feedly, Airbnb, Walmart
Сейчас давайте рассмотрим, почему ReactJS может быть полезным.
React pros and cons by Cleveroad
Как сделать выбор?
Сейчас мы глубже рассмотрим детали и нюансы, которые могут быть достаточно важными при выборе технологии.
Лицензия
Вы должны быть ознакомлены с видами лицензий фреймворка. Большинство лицензий довольно гибкие в работе, и вы можете использовать их для создания коммерческих приложений без каких-либо проблем. Однако существует целый ряд лицензий, которые не дают вам такой свободы действий.
Лучше просто поискать информацию, нежели потом узнать, что вы не имеете права на коммерческое распространение своего продукта, не так ли?
Примечание: Одним из преимуществ Angular JS и ReactJS является то, что это open-source фреймворки без каких-либо ограничений в использовании. Стоит отметить, что Angular использует MIT лицензию вместо 3-clause BSD лицензии, которая используется в React. Однако BSD отличается от MIT только присутствием запрета на использование имени владельца прав в рекламных целях.
Паттерн MVC
Паттерн Model-View-Controller разрешает разделять проекты на три компонента: модель, вид и контроллер. Таким образом, модификацию каждого компонента можно проводить независимо друг от друга, что способствует сжатию кода и повышению качества конечного результата.
Помимо шаблонов MVC существуют также Model-View-Presenter (MVP) и Model-View-View-Model (MVVM).
Примечание: Среди всех особенностей Angular 2 наличие out-of-the-box MVC паттерна является значительным преимуществом перед React. Из трёх букв акроним MVC имеет только букву «V» – View (в переводе «вид»). Так что если вам нужны буквы «М» и «С», то придётся искать их в другом месте.
Размещение шаблонов
Говоря о преимуществах Angular 2, стоит упомянуть о простоте написания шаблонов отображения. Имея действительно простой интерфейс, Angular позволяет получить конечный результат с более интуитивным подходом к пользовательскому интерфейсу, который требует меньше кода и кажется «очевидным».
React же требует специальные функции для управления отображением данных. В основном это значит, что вам следует определить способ представления данных перед тем, как они будут внесены в DOM. Это может привести к отключению во время попыток определить, как будет отображаться определённый элемент.
Примечание: До 80% того, что вы делаете при создании онлайн-сервиса, основывается на написании пользовательского интерфейса. Так что, лучше взвешивайте подходы этих технологий к шаблонизации, чтобы понять, какой из фреймворков соответствует вашим предпочтениям в написании кода.
Привязка данных
Angular использует двухстороннюю привязку данных. С её помощью фреймворк может присоединить DOM к данным Model через контроллер. В двух словах: когда пользователь взаимодействует с входными данными и задаёт новое значение вашему приложению, то не только View может быть обновлен, а и Model тоже. Соответственно, вам не нужно писать какой-либо метод отслеживания этих изменений в приложении.
Примечание: Подход Angular влияет на производительность из-за того, что создается вотчер (watcher) при каждой привязке данных.
React использует одностороннюю привязку, где поток данных направлен только в одном направлении. Благодаря этому, вы всегда будете знать, в каком месте ваши данные меняются.
Примечание: Подход React гораздо проще отлаживать, когда речь идёт о больших приложениях.
Стоит сказать пару слов о клиентском и серверном рендеринге. Фактически server-side рендеринг использовался в первых версиях Angular и создавал трудности для маркетинга. Поскольку браузер воспринимает рендеринг клиентской стороны, то JavaScript дает отличные возможности для SEO оптимизации. Это является существенным недостатком, ведь большинство цифровых продуктов нуждаются в маркетинговой поддержке, дабы остаться в живых. Кроме того, client-side рендеринг может сильно повлиять на загрузку страниц. Однако начиная со второй версии, разработчики Angular исправили эту проблему, перенеся модель рендеринга на сторону сервера.
Производительность
Как вы знаете, Angular создает наблюдатель (watcher) для каждой привязки данных, чтобы отслеживать все изменения в DOM. Как только View получает некоторые обновления, Angular начинает сравнивать полученные значения с начальными. Дело в том, что данная технология проверяет не только те значения, которые изменились, но и все остальные тоже.
Примечание: Производительность Angular 2 может стать причиной проблем для массивных приложений.
Разработчики ReactJS ввели концепцию виртуального DOM, которая позволяет создавать легкое дерево DOM, сохраняя его на сервере. Каждый раз, когда пользователь взаимодействует с сайтом, например, заполняет форму, React создает новый виртуальный DOM для сравнения с предыдущим. После того, как библиотека обнаружит все различия между этими двумя моделями – виртуальный DOM будет перестроен. Весь процесс на сервере выполняется, таким образом снижая нагрузку на браузер.
Примечание: Производительность ReactJS возрастает, когда дело доходит до больших объемов данных, поскольку в этом фреймворке нет вотчеров.
Взгляните на график, показывающий оценку React и Angular по некоторым критериям. Эти оценки основаны на нашем личном опыте.
Cleveroad evaluation of technologies
У нас было небольшое собрание, посвященное вопросу «React или Angular?», в ходе которого наши frontend разработчики имели возможность обсудить все плюсы и минусы этих технологий.
Они пришли к выводу, что Angular лучше подходит для их предпочтений в написании кода, а также для рабочих задач, с которыми они сталкиваются ежедневно.
Для подведения итога всему сказанному выше мы подготовили для вас график. В нём сравниваются Angular 1.X, Angular 2 и React.
React vs Angular versions
Опыт Cleveroad
Из этих двух технологий наши разработчики предпочитают Angular. Имея много наработок, связанных с этим фреймворком, мы способны работать более эффективно, сокращая время, необходимое для реализации проекта. Таким образом наши клиенты экономят на стоимости проекта из-за сокращения часов разработки.
Все наши проекты, основанные на этой технологии, имели большое количество frontend-логики в своей структуре, которая часто изменяется. Кроме того, в проектах предусматривался ряд изменений в дизайне. Использование библиотеки React может увеличить время разработки и повысить общую стоимость конечного продукта.
Вот некоторые из наших проектов: Age In Days, Count, Lifetile. Все эти веб-сайты основаны на AngularJS в нашей компании.
Вы также можете посмотреть наш tech stack, который мы обычно применяем вместе с разработкой на Angular 2.
Серверные решения: AWS, DigitalOcean, Hetzner, Microsoft Azure
Back-end технологии: Node.js + Typescript 2, Angular 2
Базы данных: MySQL, MongoDB, Redis, PostgreSQL
Облачные хранилища: WS S3, Azure storage
Платёжные системы: Stripe, Braintree
Инфраструктура и управление проектами: Webpack 2, Docker и CI, Jira, Bitbucket / Git
Подводя итог
Вероятно, проблема выбора между Angular и React в мире frontend может быть сопоставима с выбором между iOS и Android. Обе технологии имеют свои преимущества и недостатки, своих поклонников и ненавистников. Таким образом, у каждого разработчика есть определенные причины использовать ReactJS или другую технологию.
В 2017 году все больше веб-проектов будет основано на Angular 2 благодаря фичам, позволяющим упростить жизнь разработчиков. Например, хорошая отладка, шаблон MVC, рендеринг на стороне сервера и т. д.
В результате это сократит количество часов, необходимых для разработки, и, соответственно, снизит цены на разработку и обслуживание.
Оригинал- https://www.cleveroad.com/blog/react-vs-angular-ultimate-performance-research-2017#.WKMPN5BkZMM.twitter