Результати пошуку
ITVDN: курси програмування
Відеокурси з
програмування
Підписка

300+ курсів за популярними IT-напрямками

Вибери свою IT спеціальність

Підписка
Підписка

300+ курсів за популярними IT-напрямками

Результати пошуку за запитом: курс - практикум по frontend разработке*
Як стати розробником ігор?

Автор: Влад Сверчков

Компьютерные игры - это, наверное, одна из самых крутых вещей, которую только придумало человечество. Где еще вы сможете выполнить ведьмачий заказ на грифона, расколдовать вихта либо посостязаться с Бестией из Боклера? А сделать тюнинг своей Dodge Viper SRT 10 и обогнать всех соперников в Need For Speed: Most Wanted? Отыграть роль неуловимого Агента 47, либо же от имени Брюса Уэйна бороться с преступностью на улицах Готэма? Все это возможно благодаря видеоиграм, которые затягивают и заставляют пропадать в них часами, неделями, а то и месяцами. Должно быть, многие игроки мечтали стать частью геймдев-индустрии и применять всю глубину своей фантазии в разработке собственных игр. Пришло время узнать о специфике работы гейм девелоперов, о тех технологиях, которыми они должны владеть, а также получить ответ на вопрос - как стать разработчиком игр. Разработчик игр - кто это?   На самом деле разработка видеоигр являет собой комплексный процесс, в котором зачастую задействована целая команда специалистов. Таким образом, над созданием крупного гейм-продукта может работать порядка двух сотен человек, а именно: аниматоры движений аниматоры лицевые художники геймдизайнеры игровых уровней, персонажей, диалогов и т. д. UI/UX разработчики скриптеры моделлеры программисты актёры озвучки локализаторы сценаристы тестировщики композиторы звукорежиссеры HR-ы менеджеры проектов и другие специалисты Естественно, для создания игры не обязательно иметь целую армию сотрудников. Их можно разрабатывать небольшой командой, ограничиваясь гейм-дизайнерами и программистами, или даже в одиночку, совмещая в себе несколько профессий сразу. В данной статье нас интересуют именно игровые программисты - участники процесса создания игры, на плечи которых возлагается реализация игровых идей и концепций в виде программного кода. Давайте приступим к рассмотрению их разновидностей и применяемому инструментарию каждого из них. Однако, прежде мы узнаем, какими знаниями и навыками должен обладать любой разработчик компьютерных игр. Математика и физика Именно математика заставляет игры работать. Доправление вашего снаряда к месту пребывания вражеского танка, расчет траектории полета брошенной гранаты, реализация прыжка с возвращением обратно на землю, реалистичное восхождение персонажа по ступенькам - все это невозможно без математики, как, впрочем, и любое другое действие. В разработанных игровых движках уже есть определенные шаблоны, согласно которым функционирует игровая механика. Однако, это лишь базовые законы взаимодействия внутриигрового мира. Если хотите внести что-то свое - программируйте. В создании игр используются такие области математики, как: линейная алгебра, аналитическая геометрия, дискретная математика, тригонометрия, мат. анализ. Проще говоря, вам следует хорошо владеть математикой уровня первого курса технического ВУЗа. Знание физики также важно. Если математика предоставляет инструментарий для программирования игры, то физика его реализует. Необходима для того, чтобы создавать законы вашей игровой вселенной: полет пуль, разрушение, падение предметов, передвижение машин и прочее. Здесь пригодятся знания в области классической механики, механики жидкостей, оптики. Конечно, в каждом ответвлении разработки игр математика и физика вам по-разному пригодятся, однако, если вы собираетесь взяться за игростроение на серьезной основе, то этими предметами необходимо хорошо владеть. Алгоритмы и структуры данных Не менее важным для разработчика игр будет знание и понимание алгоритмов, ведь все в игровом мире происходит исходя из четко заданного последствия операций.  Знание структур данных позволит вам понять способы организации данных, их свойства и принципы работы с информацией. Разработка игр связана с огромным количеством данных (отрисовка объектов, подгрузка локаций и т. д.), поэтому умение правильно работать с ними обязательно.   Английский язык Знание английского на уровне чтения технической документации - это минимальное требование для комфортной работы с англоязычными форумами, текстами, и технологиями, с которыми вы обязательно столкнетесь в ходе создания игр. Более того, изучение иностранных языков не только помогает в профессии, но также развивает наше мышление и улучшает память. Сколько языков ты знаешь, столько раз ты человек, верно?     Git & GitHub Git - наиболее популярная система контроля версий, которая позволяет вести историю разработки проекта с возможностью доступа к каждой сохраненной версии. GitHub - сервис онлайн-хостинга проектов, где храняться сами проекты. Помимо своего очевидного предназначения, данные инструменты позволяют изучать проекты с открытым исходным кодом, которые были сделаны и опубликованы другими программистами, а также делиться с сообществом разработчиков своими собственными, получая обратную связь, которая поможет вам развиваться в правильном направлении и поддерживать мотивацию. Огромный энтузиазм, сильнейшая мотивация и любовь к играм Область игростроения - это та сфера деятельности, в которой главной движущей силой является ваша мотивация и заинтересованность в работе, которую вы выполняете. Разработчики игр, создавая различные видеоигры, многие годы могут не получать желаемого результата и признания - зачастую так и происходит. В такой ситуации очень важно не сбавлять обороты и только наращивать производственные мощности. Другими словами - чтобы создавать игры, вы должны быть в них влюблены по уши, ведь это - творчество, и оно требует бóльшего вложения, нежели просто знания математики и умения хорошо программировать.    Разработчик ресурсоемких игр Язык программирования С++ Серьезные игры требуют задействования большого количества вычислительных ресурсов компьютера, которые, как известно, ограничены. Также, для получения бóльшей прибыли конечный продукт необходимо распространить среди максимального числа игроков. Это достигается не только удачными PR-кампаниями, но и путем портирования игры на разные геймерские платформы (Xbox, PlayStation и другие). Возникает необходимость в применении мультипарадигмального, кроссплатформенного, высокопроизводительного языка программирования, с помощью которого можно управлять памятью и не создавать лишнюю загруженность системы. Таким критериям отвечает язык С++. Без него не обходится ни одна разработка серьезного гейм-продукта. Благодаря С++ создается механика игры - взаимодействие игрока с миром и мира с игроком. Когда говорят о профессиональных программистах игр, обычно имеют ввиду именно программистов С++. За возможность создавать оптимизированные крупномасштабные игры уровня ААА придется заплатить немалым количеством сил и времени, ведь данный язык программирования считается одним из самых сложных в изучении. Этот путь разработки зачастую выбирают самые хардкорные ребята, готовые к вызовам и испытаниям, которые очень увлечены гейм индустрией и желают стать ее неотъемлемой частью.  Игровой движок Это ядро, которое помогает программистам создавать игры, беря за основу уже имеющееся программное обеспечение, тем самым автоматизируя некоторые рутинные процессы. Зачастую движок включает в себя игровую логику, поведение объектов, визуальный редактор сцен, утилиту для анимаций, инструменты дизайна игрового окружения и прочие элементы. Таким образом, приступая к созданию игры, программисту не нужно с нуля прописывать физику воды, объектов и выполнять другие капитальные работы - достаточно взять уже готовое и из него творить что-то свое. Ниже мы расскажем о некоторых широко известных средах разработки видеоигр. Unreal Engine - это очень популярный игровой движок. Среди его преимуществ выделяют: гибкость, мультиплатформенность, высокие показатели графической составляющей, качественное освещение, возможность создавать игры под VR, общая дружелюбность к разработчику и богатый встроенный инструментарий разработки. Самые известные игры, созданные при помощи Unreal Engine: Mass Effect, Bioshock Infinite, Mortal Combat 11, Fortnite, Borderlands, Batman: Arkham Asylum. Разработка на этом движке ведется на языке С++, однако, возможно использование специального скриптового языка Blueprint, который в определенной степени может упростить создание игр. CryEngine - мощный движок от немецкой компании Crytek, детищем которого стали такие игры, как: Crysis, Far Cry, Ryse: Son of Rome, Sniper II: Ghost Warrior и другие. Обладает кроссплатформенностью, продвинутой системой анимаций, впечатляющим уровнем графики, реалистичной физикой, собственной технологией трассировки лучей и многими другими достоинствами. Стоит отметить, что в разработка на CryEngine вызывает больше трудностей, чем на Unreal Engine. Если провести анализ данных движков, то Unreal Engine подойдет для разработки ААА игр, особенно шутеров и приключенческих экшенов. Также, это неплохой выбор для инди-разработчиков из-за своей выгодной политики лицензирования. CryEngine же больше подойдет опытным командам, которые обладают большим количеством времени и средств для создания дорогих и крупномасштабных игр. Существует множество других движков: Chrome Engine, C-Engine, Frostbite, Source, Id Tech, Creation Engine и т. д. Изучайте информацию о них и выбирайте тот, который лучше всего подойдет под ваши нужды. Разработчик игр на Unity Мы решили отдельно выделить данную специальность, поскольку Unity являет собой достаточно дружелюбный по отношению к новичкам движок, который использует язык программирования C#. Более того, на соответствующих сайтах поиска работы работодатели часто сами выделяют эту профессию, указывая вместо привычного “Разработчик игр” должность “Unity разработчик”. Перейдем к рассмотрению технологий, которые должен знать потенциальный кандидат. Язык программирования C# Популярный объектно-ориентированный язык программирования, который имеет множество сфер применения: настольные, мобильные и веб-приложения, а также игры для различных платформ. C# не является настолько высокопроизводительным, как С++ и, соответственно, на нем нельзя разрабатывать столь качественные и хорошо оптимизированные игры. Однако, С# имеет очень важное преимущество - он достаточно легкий в изучении (по сравнению с теми же “плюсами”) и подойдет новичкам, которые только открывают для себя мир геймдева. Unity Игровой движок, разработанный специально для создания игр на языке C#. Главные особенности Unity: наличие удобной визуальной среды разработки и большой библиотеки различных ассетов и плагинов, возможность легкого портирования игр на разные платформы, возможность интеграции со многими графическими или анимационными приложениями, наличие большого сообщества, низкий порог вхождения. Unity используется в создании одиночных и сетевых игр для настольных компьютеров и устройств виртуальной реальности. Самые громкие творения этого движка: Cuphead, Hearthstone, Cities: Skylines, Rust, 7 Days To Die, Hitman: Sniper, The Forest и множество других видеоигр. Также, при помощи Unity можно создавать анимированные видео, игровые трейлеры, кат-сцены и другие подобные продукты, которые находят широкое применение в рекламных кампаниях.  Unity - это прекрасный выбор для новичков. Вы можете разработать игру даже не имея при этом навыков программирования - продуманный визуальный редактор скриптов возьмет на себя всю работу. Однако, для создания чего-то стоящего на Unity вам придется таки изучить С#. Также, благодаря своим широким возможностям и богатому инструментарию, этот движок очень активно используется в мобильном игростроении для разработки 2D и 3D игр. Разработчик мобильных игр Мобильные операционные системы предоставляют большое пространство для реализации амбиций гейм девелоперов. Игры для смартфонов требуют меньше усилий при разработке и имеют более высокий шанс быть замеченными пользователями. Данный сегмент создания игр имеет немалое количество применяемых языков. Традиционно, рассмотрим наиболее популярные из них. Java - один из самых популярных языков разработки мобильных приложений под ОС Android. Это надежный объектно-ориентированный кроссплатформенный язык, который хорошо зарекомендовал себя и в создании мобильных игр. В Java гейм девелопменте вам пригодиться среда разработки Android Studio либо jMonkeyEngine. С++ - данный язык, как говорилось в одном из разделов выше, может применяться практически везде. В мобильных играх его также применяют - там, где необходимо бережно обходиться с памятью девайса и поддерживать высокую производительность игры. Разработку можно вести на все том же Unreal Engine, либо используя любые другие подходящие движки и среды разработки.    C# (Unity) - благодаря своей кроссплатформенности и универсальности в целом, среда разработки Unity также позволяет разрабатывать 2D и 3D игры как для Android, так и для платформы iOS, что открывает большие возможности перед программистами на “шарпе”. Более того, можно создавать мобильные игры и на JavaScript, который также доступен в Unity. Objective-C / Swift - языки программирования, которые используются в разработке ПО для iOS и macOS. Objective-C, будучи предшественником Swift, потихоньку отходит на второй план и уступает место этому молодому, открытому, быстрому, мультипарадигмальному языку. Мы предлагаем смотреть в будущее и выбирать именно Swift, несмотря на его небольшую сыроватость - это нормально для языков, которые переживают период развития. Также выбирайте движок SpriteKit, который в полной мере раскрывает Swift как инструмент разработки мобильных игр.  Вообще, эти два языка подходят для разработки любого вида ПО для платформ компании Apple. Так что, если вас привлекает создание продукции под “яблоко”, смело выбирайте Swift и/или Objective-C. Разработчик браузерных игр Об онлайновых браузерных играх жители СНГ узнали, когда началось широкое распространение Интернета. Сегодня эта игровая отрасль продолжает жить и успешно развиваться. Единственные глобальные изменения касаются компании Adobe - флагмана разработки браузерных игр, которая объявила о прекращении поддержки Flash до конца 2020 года. Это популярная мультимедийная и программная платформа, благодаря которой разрабатываются веб-приложения, а в частности - браузерные игры. Таким образом. основной фокус будет окончательно смещен в сторону HTML5, JavaScript и вспомогательных графических технологий - WebGL, Canvas и т. д. HTML5 (язык верстки веб-страниц) прекрасно взаимодействует с JavaScript (мультипарадигменный язык программирования) посредством элемента Canvas, который делает возможным добавление растровой 2D графики на веб-сайт. WebGL - кроссплатформенный графический API - главный инструмент создания 3D графики в браузере. Очень часто эти технологии используются не только для создания игр, но и для добавления крутой интерактивности сайтам, что справляет приятное впечатление на пользователей. Для разработки серверной стороны браузерных игр необходимо знать РНР/Python либо любой другой язык, который хорошо подойдет под организацию закулисных взаимодействий - регистрация и авторизация пользователей, обработка пользовательских данных, ведение игровой статистики, хранение информации в базе данных, реализация многопользовательского режима и прочее.    Как начать свой путь? Для получения первого опыта в гейм разработке на ПК, можно заняться созданием модов для ваших любимых игр. Это модификации, дополнения, которые, как правило, сделаны не самими разработчиками, а при помощи фанатов либо других команд разработчиков. Они могут улучшать визуальную составляющую видеоигры, менять геймплей, добавлять новые игровые элементы (персонажей, музыку, предметы, спецэффекты и т. д.) либо и вовсе кардинально менять всю игру, создавая практически новую. Такие дополнения зачастую делают при помощи набора средств разработки - SDK, которые прилагаются к играм, либо разрабатываются отдельно.  Модостроение - неплохое начало гейм девелоперского пути. Оно позволит лучше понять внутреннюю логику игр и даст определенный опыт в разработке. В процессе создания мода вы можете познакомиться с другими модостроителями на различных фанатских форумах и перенять у них определенные знания, которые помогут в вашем развитии в сфере геймдева. Вот вам интересный пример успешного пути юного модмейкера, которого зовут Alexander J. Velicky. 19-летний поклонник игры The Elder Scrolls V: Skyrim настолько сильно хотел работать в студии разработчиков Bethesda, что создал дополнение к игре под названием Falskaar, которое добавляет к оригиналу 25 часов игрового контента, большое количество новых локаций, персонажей с новой, полноценной озвучкой, а также массу квестов. На создание мода было затрачено около 2000 часов. К сожалению, Bethesda не предложила парню работу, однако его взяла к себе компания Bungie, где он смог раскрыть свой потенциал на полную. За успехами Александра можете следить на его странице в LinkedIn.   В мобильной разработке создание модов не практикуется, поэтому тут лучшим выходом будет брать простые игры и пытаться их запрограммировать самостоятельно. Это даст понимание основных концепций разработки под мобильные девайсы и принесет полезный опыт.  Проводите много времени на англоязычных ресурсах. Обычно, именно там находится самая ценная и актуальная информация, которая может вам помочь во многих начинаниях. Где учиться и как искать первую работу? На самом деле, в мире существует не так много высших учебных заведений, в которых можно получить знания и навыки разработки игр. В большинстве случаев это дорогостоящие зарубежные ВУЗы. Если вы хотите обучаться программированию игр на территории СНГ, ищите в Интернете соответствующие курсы либо попробуйте заняться самообучением при помощи специализированных ресурсов по тем или иным языкам и технологиям. К примеру, если вас интересует создание игр с применением возможностей Unity и вы хотите узнать больше об этом движке, можете ознакомиться со специальностью “Unity/Game Developer” на нашем сайте. Первую работу стоит искать, следуя отработанной тактике: Изучаете необходимые языки и технологии, параллельно уделяя много времени практике. Составляете достойное портфолио, в котором буду несколько ваших удачных работ. Отправляетесь на сайты поиска работы и рассылаете свое резюме, указывая ссылку на ваши работы, которые вы заранее выложили в GitHub.  Вопрос первого трудоустройства был более подробно рассмотрен в нашей статье “FAQ начинающего программиста”. Заключение Таким образом, мы рассмотрели самые популярные направления в современном игростроении. Если желаете серьезно заниматься созданием игр - выбирайте язык С++ и соответствующий вашим потребностям движок. Если вы не гонитесь за высокой оптимизацией, лучшим выбором будет движок Unity и язык C#. Для iOS и macOS выбирайте Objective-C и/или Swift. Мобильная разработка имеет достаточно места для реализации амбиций при помощи Java, C++, C#, Swift и других языков. Ну а веб-пространство будет прекрасным плацдармом для HTML, JavaScript и ряда вспомогательных технологий. Вообще, умелые программисты могут создавать игры на каких угодно языках. Так что самое главное - изучить необходимые технологии, научиться хорошо писать код, и, конечно, быть влюбленным в геймдев. Тогда у вас все обязательно получиться!   Если вам понравилась эта статья, поделитесь информацией с теми, кому она может быть интересна. Пишите в комментариях, на какие еще вопросы, связанные с выбором специальности и планированием обучения вы хотите получить ответы. Мы постараемся ответить на них в наших новых обзорах!  
Ігри для тренування навичок програмування

Автор: Армен Маїлян

Code Wars CodinGame Cyber Dojo CodeCombat CodeMonkey CSS Diner Flexbox Froggy Flexbox Defense Ruby Warrior Untrusted Robocode CheckIO Elevator Saga Вывод Когда начинали писать код многие из современных гуру программирования, их возможности в обучении были ограничены – книги, справочники, наборы технической документации и спецификаций. Со временем ситуация улучшилась. Начали появляться  различные онлайн ресурсы.  Появилось множество видеоуроков. Родилось и набрало силы новое направление в обучении – онлайн обучение. Онлайн обучение прошло долгий путь в последние несколько лет. Появились интерактивные курсы, в сети Интернет выложено множество видеоуроков, различные онлайн-уроки проводятся с квалифицированными тренерами по множеству направлений. Одним из новых и очень увлекательных способов интерактивного онлайн обучения программированию стали игры, в которых нужно выполнять задания с использованием различных языков программирования. Конечно, одно только написание кода в играх не сделают из вас профессионального разработчика, однако такие игры могут стать действительно полезным способом отработать навыки  и поддержать интерес к обучению. Игры увлекают. Вы внезапно обнаружите, что потратили несколько часов на закрепление своих навыков программирования, даже не осознавая этого. 1. Code Wars Code Wars поможет вам улучшить ваши навыки написания кода, соревнуясь с другими разработчиками. Игра предлагает большое разнообразие языков, включая JavaScript, Swift, PHP, Python, Ruby и Haskell. Сначала вам нужно будет подтвердить ваши навыки, пройдя базовый тест на понимание языка, который вы хотите практиковать. Особенности игры: браузерная игра, бесплатная игра. Доступные языки интерфейса: Английский. Доступные языки программирования: Clojure, C, C++, C#, Crystal, Dart, Elixir, F#, Go, Haskell, Java, JavaScript, PHP, Python, Ruby, Rust, Shell, SQL, Swift, TypeScript.   2. CodinGame CodinGame предлагает набор бесплатных игр, которые помогут вам в освоении более 25 различных языков программирования, включая C#, Java, Python, JavaScript, Ruby и PHP. Вы можете выполнять игровые практические задания для проверки навыков или посмотреть примеры, объясняющие различные конструкции языка. Одна из особенностей CodinGame заключается в том, что вы можете играть с друзьями или коллегами, а также участвовать в международных соревнованиях по программированию. Материалы игр доступны на английском и французском языках. Особенности игры: браузерная игра, бесплатная игра. Доступные языки интерфейса: Английский, Французский. Доступные языки программирования:  Bash, C, C++, C#, Clojure, Dart, F#, Java, JavaScript, Go, Groovy, Haskell, Kotlin, Lua, Objective‑C, OCaml, Pascal, Perl, PHP, Python2, Python3, Ruby, Rust, Scala, Swift, VB.NET. 3. Cyber Dojo В Cyber Dojo есть практические упражнения и задачи для десятков языков программирования, включая C#, Java, C++, Ruby, JavaScript, PHP, Python и другие. Каждое упражнение предполагает определенную задачу, чтобы дополнить имеющийся код, выполняющий определенную задачу. Несмотря на то, что это не совсем игра, а скорее большой набор интересных задач, это все же отличный способ попрактиковать свои навыки в коде. Особенности игры: браузерная игра, бесплатная игра. Доступные языки интерфейса: Английский. Доступные языки программирования: Assembler, BCPL, Bash, C, C#, C++, Chapel, Clojure, CoffeeScript, D, Elixir, F#, Fortran, Go, Groovy, Haskell, Java, JavaScript, Kotlin, PHP, Pascal, Perl, Python, R, Ruby, Swift, VHDL, assert, VisualBasic, NUnit. 4. CodeCombat CodeCombat ориентирован на учителей и учеников, но играть может каждый. Эта достаточно яркая и увлекательная платформа подойдет для практики в таких языках как Python, JavaScript, CoffeeScript, HTML и CSS. На начальном уровне подземелий вы будете перемещать своего персонажа по различным уровням игры, используя базовые команды. Далее команды усложняются. Можно играть самому, участвовать в соревнованиях и многопользовательских вариантах игр – все это поможет вам не заскучать во время отработки в этой игре полученных ранее навыков программирования. Имеется возможность играть бесплатно, но получить доступ ко всему контенту можно только по платной подписке. Особенности игры: браузерная игра, есть платный контент. Доступные языки интерфейса: Английский, Русский, Украинский и еще 57 языков. Доступные языки программирования: Python, JavaScript, CoffeeScript, HTML и CSS. 5. CodeMonkey CodeMonkey это онлайн игра, которая обучает программированию с использованием CoffeeScript. CoffeeScript – это современный открытый язык программирования, который по своей сути является  просто надстройкой и синтаксическим сахаром для JavaScript. В основном CoffeeScript используется для веб-приложений. В игре пользователи с помощью кода контролируют поведение обезьяны и помогают ей собирать бананы. CodeMonkey предназначен скорее для обучения детей. Однако данная игра подойдет и взрослым, желающим в простой игровой манере закрепить знания языка. Несмотря на относительно детский интерфейс игры, задачи в CodeMonkey затрагивают такие темы языка программирования, как: объекты, вызовы функций, аргументы, циклы, переменные, массивы, цикл for, определение функций, булевые условия, цикл until, if и if-else условия, булевые операторы, события клавиатуры и мыши.   Имеется бесплатная триальная версия и ряд премиум подписок, позволяющих, в частности, учителям подключать учеников для обучения и контроля выполнения заданий. Особенности игры: браузерная игра, триальная версия на 14 дней и платная подписка. Доступные языки интерфейса: Английский, Русский, и еще 16 языков. Доступные языки программирования:  CoffeeScript (JavaScript). 6. CSS Diner CSS Diner - простой, но достаточно увлекательный способ изучения языка CSS. Последовательно проходя 32 уровня, вы в игровой манере сможете познакомиться с основами работы CSS-селекторов. Начиная с простых селекторов по классам  и тэгам  уровни этой бесплатной игры постепенно усложняется, основываясь на том, что вы запомнили на предыдущих уровнях. Под конец вы будете использовать сложные структурные селекторы наподобие и их комбинации. Эта игра будет полезна тем, кто ищет удобный и нескучный инструмент, чтобы попрактиковаться в верстке. Особенности игры: браузерная игра, бесплатная игра. Доступные языки интерфейса: Английский. Доступные языки программирования: CSS. 7. Flexbox Froggy Flexbox Froggy это удобный инструмент для тех, кто уже имеет определенные навыки работы с CSS и хочет на практике, и в интересной манере, изучить основы такой технологии, как CSS Flexible Box Layout Module (или CSS Flexbox).  У Flexbox Froggy достаточно простой интерфейс, с помощью которого вы научитесь основам выравнивания во Flexbox, пока вы помогаете лягушонку Фрогги и его друзьям в их приключениях. Особенности игры: браузерная игра, бесплатная игра. Доступные языки интерфейса: Английский, Русский, Украинский и еще 28 языков. Доступные языки программирования: CSS. 8. Flexbox Defense Flexbox Defense - еще один интересный способ попрактиковаться в навыках работы с Flexbox. Это игра по принципу Tower Defense. В этой игре вы будете с помощью CSS свойств размещать пушки в нужные места вдоль пути, чтобы победить встречные волны врагов. Вы получите нужную практику в интересной интерактивной манере, используя те же команды, что и в Flexbox Froggy. Особенности игры: браузерная игра. Доступные языки интерфейса: Английский. Доступные языки программирования: CSS. 9. Ruby Warrior Если вы хотите изучать язык Ruby, тогда Ruby Warrior - это игра для вас. Управляя персонажем рыцаря с помощью кода на Ruby, вы будете выполнять игровые задачи, сражаться с монстрами и проходить подземелья. В игре есть простые и сложные задания, подходящие вашему уровню владения языком Ruby. Играя в Ruby Warrior вы улучшите ваши знания циклических и условных конструкций, создания и вызова методов. Авторизация в игре происходит через аккаунт Facebook. Особенности игры: браузерная игра, бесплатная игра. Доступные языки интерфейса: Английский. Доступные языки программирования: Ruby. 10. Untrusted Untrusted - это приключенческая игра, которая поможет вам проверить и закрепить ваши знания и навыки JavaScript для решения различных проблем. Вы будете использовать код на JavaScript, чтобы провести доктора Эвала по разным локациям электронной вселенной. Это увлекательная бесплатная игра поможет отработать достаточно сложные навыки применения JavaScript. Особенности игры: браузерная игра, бесплатная игра. Доступные языки интерфейса: Английский. Языки: JavaScript 11. Robocode Robocode  подойдет вам, если вы когда-нибудь интересовались играми с противостоянием различных роботов. Играя в Robocode, вы приобретете и укрепите навыки программирования, создавая виртуальные боевые роботы-танки. Логику поведения этих роботов вы будете прописывать, используя языки Java или C# с помощью вашей IDE. Битвы с такими роботами затем разыгрываются в браузере на экране в режиме реального времени. Особенности игры: бесплатная игра; онлайн игра, но требует установки определенных модулей на ваш ПК. Доступные языки интерфейса: Английский. Языки: Java или C#. 12. CheckIO CheckIO  - это стратегическая игра, которая будет интересна как начинающим, так и уже продвинутым программистам. Вы будете выполнять  задания, которые помогут лучше изучить особенности выбранного языка программирования. Данная игра поможет вам вписать код лучше. Набирая балы за выполнение задания, вы можете также сравнивать свои ответы с ответами других игроков CheckIO. Особенности игры: браузерная игра, бесплатная игра. Доступные языки интерфейса: Английский. Доступные языки программирования: Python, JavaScript. 13. Elevator Saga Elevator Saga поможет вам протестировать ваши знания JavaScript во время решения  проблем, связанных с перемещением лифта и транспортировкой людей наиболее эффективным способом. Начинается задача с перемещения 15 человек, затем задачи становятся сложнее. Особенности игры: браузерная игра, бесплатная игра. Доступные языки интерфейса: Английский. Доступные языки программирования: JavaScript. Для удобства подбора подходящей игры мы собрали их в таблицу: Не всегда только суровая зубрежка и толстые учебники способствуют получению знаний. Обучение в игровой форме – это также один из лучших способов запомнить что-то новое или закрепить уже существующий навык. Вывод Многие из представленных в этом обзоре игр смогут реально помочь Вам улучшить понимание основного инструмента разработчика – языка программирования. Мы включили в этот обзор как игры, полезные при изучении языков программирования, так и те из них, что помогут лучше запомнить конструкции CSS, HTML, SQL. В некоторых играх вы будете выполнять готовые задачи, зарабатывая баллы и играя «против компьютера», некоторые игры позволят вам соревноваться с другими разработчиками в поиске решений чужих задач и предложении встречных задач. Учитесь, играючи и обучайтесь во время игры! Мы надеемся, что наша подборка игр поможет вам в этом. Также всем, кто изучает программирование, мы рекомендуем использовать интерактивный тренажер навыков ITVDN. В тренажере вас ждут задания, которые нужно выполнять, используя навыки программирования. За правильные решения вы будете получать баллы. В случае ошибки, вы сможете воспользоваться подсказками, но за использование подсказок будут сниматься баллы. Итак, ваша задача – выполнить все задания на тренажере, набрав максимальное количество баллов! На ITVDN доступны интерактивные тренажеры по таким языкам программирования и технологиям: HTML5&CSS3 (уровень Starter и Essential) JavaScript (уровень Essential и Advanced) Python (уровень Starter и Essential) Java Starter C# (уровень Starter и Essential) SQL Essential C++ (уровень Starter и Essential) Перейти в Тренажер ITVDN  
Популярні мови програмування на 2019 рік

Автор: Армен Маїлян

Планируя новые вехи для своего образования, полезно оценить их полезность относительно запросов общества в целом и вашей сферы деятельности – в частности. Для разработчиков программного обеспечения, как начинающих - выбирающих для себя первый язык программирования, так и опытных – выбирающих второй, третий (и тд.) язык для изучения, важно понимать востребованность этого языка на рынке. Владеть современным языком, поддерживающим большинство актуальных парадигм и технологий очень важно. Но важно и чтобы такой язык предоставлял достаточный выбор вакансий при поиске работы. Рассмотрим несколько авторитетных рейтингов, составленных для языков программирования по результатам 2018 года.   1) Популярные языки программирования на 2019 по рейтингу TIOBE   Индекс TIOBE (TIOBE programming community index) - это один из известных индексов, показывающий степень востребованности языка программирования, анализируя данные запросов в поисковых системах. Обновляется данный индекс каждый в месяц. Рейтинг учитывает как количество квалифицированных инженеров во всем мире, так и количество образовательных курсов по различным языкам. Для расчета индекса TIOBE используются данные результатов поиска в популярных поисковых системах, полученных в Google, YouTube, Wikipedia, Bing, Yahoo !, Baidu, и Amazon. Важно отметить, что индекс TIOBE не называет победителя рейтинга - лучшим языком программирования или языком, на котором написано большинство строк кода. Детальнее с методикой получения этого индекса можно ознакомиться тут.   На первом месте продолжает оставаться Java. Однако, несмотря на то, что в сравнении с декабрем 2017 его позиции поднялся на 2.66, из графика, представленного ниже, видно – показатели этого языка падают после пика популярности в октябре 2018. Второе место занимает язык C, имея 14.282% в рейтинге. Третье место получил Python с 8.376%, сместив в этом рейтинге популярности С++. Позиция Python выросла по сравнению с декабрем 2017 и продолжает расти. Язык С++, в свою очередь, уступив третье место, занимает сейчас четвертое. Его популярность, как видно из графика, колеблется относительно 8%, имея на декабрь 2018 - 7.56%. Интересной особенностью этого индекса оказывается то, что Visual Basic .NET в настоящее время находится на пятой позиции с рекордно высоким для данного языка уровнем. Это очень неожиданно, ведь профессиональные разработчики программного обеспечения крайне мало используют Visual Basic. Стоит отметить, что язык SQL снова добавлен в индекс TIOBE с февраля 2018 года. Вследствие этого, для языка SQL нет недавней истории, и может показаться, что значимость SQL растет очень быстро.   2) Статистика GitHub по языкам программирования за 2018 год     Статистика использования языков программирования на площадке GitHub показывает, что лидером по применению продолжает быть язык JavaScript. Он остается бессменным лидером и в частных репозиториях, и в публичных, а также лидирует в репозиториях организаций всех размеров вне зависимости от региона расположения во всем мире. На втором месте, также без изменений значимости, находится Java. Третье место занимает Python, чья популярность, благодаря применению его в системах машинного обучения, выросла в 1.5 раза. Четвертое и пятое место соответственно занимают, PHP и C++. По сравнению с предыдущим годом можно отметить стремительный рост применения языка TypeScript – благодаря частоте его применения, в рейтинге он поднялся с 10 места на 7. Заметным оказалось падение популярности языка С. В этом году он «провалился» сразу на два пункта, занимая сейчас 9 место. Популярность Ruby падает. Начиная с 2015 года этот язык на GitHub последовательно «сползает» с 5 места на 10 в 2018 году. Стоит также отметить существенный рост частоты применения языка Kotlin. Несмотря на то, что он пока не входит в десятку - за 2018 год частота его использования в проектах выросла в 2.6 раза.   3) Рейтинг языков программирования на Stackoverflow по результатам 2018 года   Согласно данным опроса Stack Overflow’s 2018 Developer Survey, проводимого уже восьмой год среди более чем 100 000 разработчиков, есть несколько тенденций, которые отмечают редакторы самого StackOverflow: DevOps и машинное обучение являются сегодня важными тенденциями индустрии программного обеспечения. Языки и структуры, связанные с этими видами работ, находятся на подъеме, и разработчики, работающие в этих областях, получают самые высокие зарплаты. Python поднялся в рейтинге языков программирования, превзойдя C# по популярности в этом году, так же как он превзошел PHP в прошлом году. JavaScript, согласно данным StackOverflow, остается лидирующим языком среди использованых разработчиками. Следующим после JavaScript является SQL, занимающий второе место. Затем идут Java, Bash, Python, занимающие соответственно третье, четверное и пятое места. Кроме этих, озвученных результатов опроса, мы можем увидеть и другие тенденции среди языков из первой десятки. Из графика количества вопросов на StackOverflow по различным языкам программирования видно, что уровень интереса к Python не перестает расти, как это уже было сказано выше. Это происходит на фоне некоторого снижения количества вопросов по таким языкам как PHP, C++, Java, C#. Имеет смысл рассмотреть также позиции языков Objective-C и Swift в контексте разработки под iOs. Заметно, что популярность Objective-C стабильно падает. Swift уже сейчас занимает 12 место среди языков, получив 8.1% в рейтинге. В то же время Objective-C находится на 15 месте, имея 7.0%. Полезной для понимания рынка разработки будет и статистика зарплат специалистов, применяющих в разработке те или иные языки программирования:  Как мы видим, среди языков первой десятки снова выделяется Python - предоставляющий возможность получать высокую зарплату относительно молодым специалистам. Так разработчики Java, со сходным опытом, получают в среднем на 15% меньше, чем разработчики на Python, а разработчики на PHP – почти на 30% меньше. Среди же наиболее оплачиваемых знаний языков мы можем наблюдать навыки вланения Clojure, F#, Go, Skala и ряда других языков программирования не входящий в первую десятку.   4) Рейтинг языков программирования IEEE Spectrum за 2018   Следующий рейтинг представлен IEEE Spectrum — ежемесячным периодическим изданием, представляющим Институт инженеров электротехники и электроники. Данный институт является международной некоммерческой организацией, объединяющей сотни тысяч технических специалистов со всего мира. Результаты этого анализа остаются актуальными, хотя они и были представлены в июле 2018. Согласно этому рейтингу Python занимает первое место уже второй год подряд. Такую высокую популярность языка составители объясняют несколькими причинами: Во-первых, Python стал все чаще применяться как язык embedded разработки. Все больше современных микроконтроллеров получают достаточно мощности и памяти для размещения интерпретатора Python. Следующей причиной роста популярности Python составители рейтинга видят падение популярности языка R, применяемого в основном для обработки статистических данных. Данный язык последовательно терял очки популярности и опускался с 5 места в 2016 году до 6 места в 2017 году, и 7 места в 2018 году. Соответственно Python все чаще используется для обработки больших наборов данных в статистических исследованиях и задачах машинного обучения. Заметен в рейтинге IEEE Spectrum рост востребованности PHP - он поднимается с 8-го на 6-е место. Также, согласно данным этого рейтинга, несколько снизилась доля применения JavaScript   5) Статистика W3Techs для языков WEB-разработки на 2019 году   Для понимания изменения трендов WEB-разработки полезным будет рассмотреть статистику, предоставляемую w3techs.com. Данная статистика показывает количество сайтов, применяющих для своей работы те или иные языки и платформы. В WEB проектах, среди языков фронтенда, первое место по значимости стабильно удерживается JavaScript. Рассмотрим языки бэкенда: Тренды применения языков программирования в серверной части на 08.01.2019. Для бэкенда все еще востребованным остается PHP. Несмотря на незначительные потери позиций, на фоне роста популярности других языков программирования - много кода уже написано на PHP. Около 80% всех сайтов Интернета написаны с применением PHP в серверной части. При выборе языка для изучения стоит учитывать, что на сегодняшний день PHP применяется такими популярными сайтами: Facebook.com Wikipedia.org Vk.com Sina.com.cn 360.cn Aliexpress.com Wordpress.com Pinterest.com Cobalten.com Detik.com Также мы видим, что несколько упала популярность платформы ASP.NET, хотя она и не утратила второе место по частоте использования. Растет частота применения Java, Ruby, Scala и JavaScript (благодаря активному применению платформы Node.js). Отмечается уменьшение на общем числе сайтов процента применения Python.   6) Статистика вакансий ITJobsWatch   Статистика ITJobsWatch для вакансий постоянных сотрудников в Великобритании, отсортированная именно по языкам программирования, позволяет рассмотреть языки с точки зрения количества вакансий по ним за период в 6 последних месяцев.    Данный рейтинг начинается со значения 4, поскольку 1, 2 и 3 места занимают вакансии Agile Software Development, Developer и Finance. Из представленной таблицы можно увидеть, что среди общего количества вакансий лидирует SQL, затем идут JavaScript, C# и Java. Количество вакансий со знанием указанных языков относительно прошлого полугодия практически не изменилось. С другой стороны, их догоняют Python – уже находящийся на 5 месте и C++ - на 6 месте среди языков программирования в вакансиях разработчиков. На фоне общего количества вакансий падает доля запросов на разработчиков, владеющих PHP – на 17 пунктов и владеющих T-SQL – на 7 пунктов. Наибольшая медианная зарплата соответствует Python – 60 000 £ . 7) Данные для размышления   По данным крупнейшей социальной сети для профессионалов и поиска работы - LinkedIn, за 2018 год в ТОП 5 наиболее растущих по количеству вакансий входят: блокчейн-разработчик, инженер сферы машинного обучения, специалист по машинному обучению. Стоит отметить, что, согласно данным LinkedIn, в ТОП 20 навыков, которыми должен владеть соискатель работы в Индии входят среди прочих, в порядке убывания важности: Java, SQL, HTML, JavaScript, C++. Также, в ТОП 10 навыков, наиболее часто отмечаемых у себя среди представителей молодежи Индии, Бразилии, Индонезии и Южной Африки входят: C/C++, WEB-разработка и Java-разработка.   Выводы Легко заметить, что одни данные мировых рейтингов языков программирования несколько противоречат данным других рейтингов о тенденциях изменения популярности языков. Однако есть ряд трендов, которые можно четко выделить из всех предоставленных данных: Все они отмечают заметный рост запросов на разработчиков, применяющих Python – как в уже относительно устоявшихся сферах статистической обработки, BigData и машинного обучения, так и в WEB, и в embedded разработке. Python – однозначно стоит рассмотреть в качестве языка для изучения на 2019 год. JavaScript остается бессменным лидером фронтенда и постепенно набирает очки в бэкенде и мобильной разработке под Android и iOs. Java продолжает лидировать как в разработке под Android, так и в сфере Enterprise разработки. Постепенно проникает Java и в WEB-backend. C# несколько растерял свои позиции, однако он однозначно будет находиться среди первых мест, оставаясь главным языком экосистемы Microsoft с широчайшей поддержкой этой корпорации. Также не стоит забывать достаточно глубокое проникновение С# в WEB, относительную простоту изучения, а также активное применение этого языка в разработке игр (Unity, XBOX 360) и мобильных приложений (Xamarin). Неоднозначна позиция у C++. Несмотря на то, что этот язык все еще полноценно присутствует в ТОП 10 языков и активно применяется для разработки игр, приложений для мобильных платформ, десктопных приложений и в embedded разработке – все больше заметно вытеснение его с занимаемых позиций другими языками. Кроме того, стоит учитывать, что большинство разработчиков не рекомендуют его как первый язык для изучения, из-за его сложности. В разработке под iOs Swift уже обогнал Objective-C и разрыв все еще увеличивается. Значительная часть разработчиков не считает PHP – языком «будущих разработок», при этом признавая его однозначным лидером «сегодняшних разработок» в сфере бэкенда. Падение же популярности его будет явно достаточно длительным. Ряд языков, такие как Go, Kotlin, Ruby и др. имеет смысл рассмотреть в качестве второго или третьего языка для развития себя как разработчика программного обеспечения.   Возможно на основе представленных данных Вы придете к несколько иным для себя выводам. Со своей же стороны в новом 2019 году мы желаем, чтобы и наши, и Ваши выводы помогли Вам достигнуть успеха в изучении новых языков, и технологий.
Як правильно працювати з REST API

Автор: Zell Liew

Коротко про мене Мене звати Зел, я розробник-фрілансер із Сінгапуру. У вільний від роботи час я люблю розбиратися в коді і принагідно публікувати у своєму блозі ті цікавості, які я виявив чи вивчив. Вступ Швидше за все вам уже доводилося чути про такий термін, як REST API, особливо якщо ви стикалися з необхідністю отримання даних з іншого джерела (такого як Twitter або GitHub). Але що ж все-таки це таке? Що ми можемо робити з цим і як ми можемо це використовувати? У цій статті ви дізнаєтеся все про REST API для того, щоб працювати з ними та читати пов'язану з ними документацію. Що ж таке REST API? Давайте уявимо, що ви намагаєтеся знайти фільми про Бетмена на YouTube. Ви відкриваєте сайт, вбиваєте у форму пошуку слово «Бетмен», тиснете «Окей» і бачите список фільмів про супергероя. Так само працює і WEB API. Ви шукаєте щось і отримуєте список результатів від ресурсу, до якого здійснюєте запит. Дослівно API розшифровується як Application Programming Interface. Це набір правил, що дозволяє програмам спілкуватися одна з одною. Розробник створює API на сервері та дозволяє клієнтам звертатися до нього. REST – це архітектурний підхід, що визначає, як API мають виглядати. Читається як "Representational State Transfer". Цьому набору правил і слідує розробник під час створення свого застосунку. Одне з цих правил каже, що при зверненні до певної адреси ви повинні отримувати певний набір даних (ресурс). Кожна адреса - маршрут, пакет даних - запит, у той час як результуючий ресурс – відповідь. Анатомія запиту Важливо розуміти структуру запиту: Маршрут відправки. Тип методу. Заголовки. Тіло (або дані). Маршрут – це адреса, за якою надсилається ваш запит. Його структура приблизно така: Root-endpoint - це точка прийому запиту на стороні сервера (API). Наприклад, кінцева точка GitHub - https://api.github.com. Шлях визначає ресурс, до якого здійснюється запит. Це щось на кшталт автовідповідача, який просить вас натиснути 1 для одного сервісу, 2 для іншого і так далі. Для розуміння того, які саме шляхи вам доступні, вам слід переглянути документацію. Наприклад, припустимо, ви хочете отримати список репозиторіїв для конкретного користувача на Git. Згідно з документацією, ви можете використати наступний шлях для цього: Вам слід підставити під пропуск ім'я користувача. Наприклад, щоб знайти список моїх репозиторіїв, ви можете використати маршрут: Остання частина маршруту – це параметри запиту. Технічно запити не є частиною REST-архітектури, але на практиці зараз все ґрунтується на них. Тож давайте поговоримо про них детальніше. Параметри запиту дозволяють використовувати у запиті набори пар «ключ-значення». Вони завжди починаються знаком питання. Кожна пара параметрів після чого розділяється амперсандом (щось подібне до цього): Як тільки ви намагаєтеся отримати список репозиторіїв для користувача, ви додаєте ці три опціональні параметри і після чого отримуєте наступний результат: Якщо ж ви бажаєте отримати список моїх недавно запушених репозиторіїв, вам слід ввести наступне: Отже, як же зрозуміти, що маршрути робочі? Що ж, настав час перевірити їх на практиці! Тестування за допомогою Curl Ви можете надіслати запит за допомогою будь-якої мови програмування. JavaScript може використовувати методи на кшталт Fetch API або JQuery`s Ajax Method. Рубі використовує інше. І так далі. У цій статті я використовуватиму таку утилітку, як Curl. Справа в тому, що вона вказана в офіційній документації для веб-сервісів. Якщо ви зрозумієте, як використовувати цю утиліту, ви зрозумієте, як працювати з API. Після чого ви можете робити запити будь-якою зручною для вас мовою. Перед тим, як продовжити, слід переконатися, що Curl встановлений на вашій машині. Якщо ж він не встановлений, саме час встановити. У такому разі ви отримаєте помилку "command not found". Для того щоб використовувати утиліту, необхідно ввести наступне (за прикладом): І як тільки ви підтверджуєте введення, ви отримуєте відповідь (на зразок цього): Щоб отримати список користувацьких репозиторіїв, вам слід змінити запит за тим же принципом, який був обговорений раніше. Наприклад, щоб отримати список моїх репозиторіїв, вам слід ввести наступне: Якщо ж ви бажаєте включити параметри запитів, переконайтеся, що ви їх екрануєте. Справа в тому, що без екранування знаки питання і рівності розцінюються системою як спецсимволи і виконання команди відбудеться з помилкою. Також спробуйте інші команди та зробіть запити! В результаті ви отримуєте схожі відповіді. JSON JSON – JavaScript Object Notation – загальний формат для надсилання та прийому даних за допомогою REST API. Відповідь, що відправляється Github, також міститься у форматі JSON. Зміст об'єкту цього формату приблизно наступний: Повертаємось до анатомії запиту. Ви вивчили, що запит складається із чотирьох частин: Маршрут відправки. Тип методу. Заголовки. Тіло (або дані). Тепер давайте спробуємо розібратися з рештою. Тип методу Метод позначає тип запиту, який здійснюється; де-факто він є специфікацією операції, яку повинен здійснити сервер. Усього існує п'ять типів запитів: GET POST PUT PATCH DELETE GET – використовується для отримання з боку серверу певного ресурсу. Якщо ви здійснюєте цей запит, сервер шукає інформацію та відправляє її вам назад. По суті, він здійснює операцію читання на сервері. Дефолтний тип запитів. POST – необхідний для створення певного ресурсу на сервері. Сервер створює в базі даних нову сутність та сповіщує вас, чи був процес створення успішним. По суті, це операція створення. PUT та PATCH – використовуються для оновлення певної інформації на сервері. У такому разі сервер просто змінює інформацію існуючих сутностей у базі даних та повідомляє про успіх виконання операції. DELETE – як і випливає з назви, видаляє вказану сутність із бази чи сигналізує про помилку, якщо такої сутності в базі не було. Сам же API дозволяє вказати, який метод має бути використаний у певних контекстних ситуаціях. GET запит у цьому випадку необхідний, щоб одержати список всіх репозиторіїв зазначеного користувача. Також можна використовувати curl: Спробуйте надіслати цей запит. Як відповідь ви отримаєте вимогу про аутентифікацію. Заголовки Заголовки використовуються для надання інформації як клієнту, так і серверу. Взагалі, їх можна використовувати для багато чого; наприклад, та сама автентифікація та авторизація. На офіційній сторінці MDN можна знайти список доступних заголовків. Заголовки являють собою пари ключів-значень. Приклад: Також приклад із використанням curl: (Примітка: заголовок Content-Type у випадку Github для роботи не є обов'язковим. Це всього лише приклад використання заголовка в запиті, нічого більше). Для перегляду надісланих заголовком даних можна використовувати наступне: Тут зірочка відноситься до додаткової інформації, наданої за допомогою curl. > відноситься до заголовків запиту, а <, відповідно, - до заголовків відповіді. Щоб надіслати інформацію з curl, використовуйте наступне: Для відправки множинних полів ми можемо використати декілька подібних конструкцій: Також, якщо необхідно, ви можете розбити ваш запит на декілька ліній для забезпечення більшої читабельності: Якщо ви знаєте, як розгорнути сервер, ви можете створити власний API та протестувати свої запити. Якщо ж ні, обов'язково спробуйте. Існує безліч інформації, присвяченої цьому. Якщо ж бажання розгортати свій сервер немає, спробуйте безкоштовну опцію Request bin. Після чого ви отримаєте адресу, яку спокійно зможете тестувати. Переконайтеся, що ви створюєте власний request bin, якщо ви хочете протестувати саме ваш запит. Зважайте на те, що дефолтний час існування request bin – 48 годин. Тому ті приклади адрес, які я тут наводжу, на момент прочитання статті давно застаріли. Тепер спробуйте надіслати деяку інформацію, після чого оновіть свою сторінку. Якщо все пройде успішно, ви побачите наступне: За замовчуванням curl відправляє дані так, ніби вони були відправлені за допомогою полів форм. Якщо ви бажаєте надіслати дані через JSON, ваш Content-Type повинен дорівнювати application\json, внаслідок чого вам необхідно відформатувати дані у вигляді JSON-об'єкту. По суті, це все, що вам необхідно знати про структуру запиту. Тепер давайте згадаємо про аутентифікацію. Що ж це таке і навіщо вона потрібна? Аутентифікація Ви б не дозволили нікому чужому отримати доступ до вашого банківського рахунку без спеціального дозволу, чи не так? За таким же принципом розробники не дозволяють неавторизованим користувачам робити на сервері все, що їм заманеться. Оскільки POST, PUT, PATCH, DELETE запити змінюють базу даних, розробники повинні завжди бути на варті неавторизованого доступу до них. Проте іноді GET запити також вимагають аутентифікації (наприклад, коли ви хочете переглянути стан вашого банківського рахунку). У випадку з вебом існує два способи представитися системі: Через нік і пароль (базова автентифікація) Через секретний токен Секретний токен дозволяє представити вас системі через соцмережі на кшталт Github, Google, Twitter і так далі. Тут же я розгляну лише базову автентифікацію. Для виконання базової аутентифікації ви можете використовувати наступне: Спробуйте залогінитися під свій профіль за запитом, вказаним вище. Як тільки ви успішно увійдете у свій профіль, ви побачите відповідь "problems parsing JSON". Чому? Все просто: системі ви представилися, але - от біда - нічого корисного їй не надали. Усі типи запитів потребують певної інформації. Тепер же давайте поговоримо про статус-коди та можливі помилки. Статус-коди та можливі помилки Деякі з повідомлень, наведених вище, якраз і належать до кодів помилок. Логічно, що вони з'являються лише тоді, коли щось іде не зовсім так, як було заплановано. Що ж до статусу кодів, вони дозволяють вам пізнати успіх (або невдачу) під час виконання певного запиту. Бувають статус-коди від 100 до 500+. Загалом їх можна поділити на такі групи: 200+: запит успішний 300+: запит перенаправлений на інший маршрут 400+: помилка на стороні клієнта 500+: помилка на стороні сервера Ви можете відлагодити статус відповіді за допомогою –v або –verbose. Наприклад, я спробував отримати доступ до певного ресурсу без авторизації. Відповідно, я спіймав помилку: У випадку ж, коли запит невірний через помилку в самій інформації, що передається, ви отримуєте статус-код 400: Версії API Час від часу розробники оновлюють свої API. Іноді оновлення можуть бути такими сильними, що розробник бажає здійснити реліз нової версії. У такому випадку, якщо ваш застосунок ламається, це відбувається через те, що ви писали код з урахуванням старого компонента, тоді як новий дещо відрізняється в плані реалізації. Запросити поточну версію API можна двома шляхами. Через маршурт Через заголовок Наприклад Твіттер використовує перший спосіб. На момент написання версія Twitter API була 1.1. Водночас GitHub використовує інший спосіб: На закінчення У цій статті ми розглянули, що таке REST API і як його можна використовувати спільно з curl. Крім того, ви також вивчили, як залогінитись за допомогою запиту і що таке статус-код. Я щиро сподіваюся, що ця стаття дозволила вам підвищити свій рівень загальних і не дуже знань щодо такого важливого аспекту веб-розробки. Буду радий будь-яким вашим коментарям тут. Автор перекладу: Євген Лукашук Джерело Ще більше матеріалів на цю тему: ASP.NET Core Web API. Практичний курс ASP.NET WEB API 2 REST API в Node.js  JAX-RS Client API. Asynchronous REST Створення API на PHP та JavaScirpt
10 заповідей Node.js розробника

Автор: Редакція ITVDN

10 отменных советов как стать лучшим Node.JS разработчиком 2018 года от автора Азата Мардана. Эта статья содержит в себе собранный и тщательно отфильтрованный опыт писателей и спикеров технологии всего Веб-сообщества. Заметка: первоначально заголовком статьи должно было быть «Лучшие практики Node.JS от Гуру Технологии». Эта статья охватывает не «новые» и «лучшие» практики 2017-2018 года, а тщательно выверенные и проверенные временем и практикой паттерны, которые стопроцентно приведут к успеху. И хотя многие из проверенных практик Вам определенно пригодятся в 2018, 2019 и даже более поздних годах, статья не включает в себя такие новшества, как async/await и прочее. Почему? Потому что эти фичи не включены в состав, собственно говоря, кода Node.JS-ядра или кода таких популярных проектов как npm, Express и прочие. Полноценно заниматься разработкой на Node.JS я начал в 2012 году, когда присоединился к Storify. С тех пор я никогда не жалел о принятом решении и не ощущал, как будто я многое потерял, закинув Python, Ruby, Java или PHP – языки, с которыми я работал на протяжении предыдущего десятилетия. Работа в компании Storify для мня оказалась достаточно интенсивной. В отличии от большинства компаний, все приложения Storify работают исключительно на JavaScript. Как вы понимаете, большинство компаний, особенно такие крупные как PayPal, Walmart или Capital One, используют Node.JS только для конкретных определенных задач. Как правило, это gateway API. Однако, с точки зрения программиста, ничего не может быть лучше, чем работа и погружение с головой в одну определенную технологию. Краткая сводка: Избегайте нагромождения – пытайтесь разбивать свой код на столько мелких составных частей, насколько это вообще возможно. И даже больше. Используйте асинхронный подход – избегайте синхронное программирование словно чумы. Избегайте блокировки потоков – помещайте ВСЕ требуемые утверждения в начало файла, ибо они синхронные и, следовательно, будут блокировать программу. Require должен быть закеширован – считайте, это такая фича в Вашем коде. Или баг. Как Вам угодно. Всегда проверяйте свой код – ошибки – это не вышивание, которое можно выбросить в любом момент. Никогда не упускайте обнаруженные ошибки! Используйте try…catch только в синхронном потоке – try…catch бесполезен в асинхронном коде. Кроме того, v8 никогда не оптимизирует try…catch-код. Возвращайте значения или используйте if…else – просто на всякий случай: возвращайте значения что бы остановить выполнение участка кода. Обращайте внимание на события ошибок – почти все Node.JS-классы или объекты реализуют паттерн-наблюдатель и производят события-ошибки. Не стоит пропускать их. Познайте свой npm – устанавливайте модули с ключами –S или –D вместо –save или –save-dev. Используйте текущие версии в package.json – при работе с npm он по-тупому просто добавляет верхнюю скобочку по умолчанию при использовании вместе с ключом –S. Дабы избежать этого, просто вручную блокируйте версии. Никогда не доверяйте semver в своих приложениях, но доверьтесь ему в модулях с открытым исходным кодом. Бонус – используйте разные зависимости. Помещайте то, что требует проект только в процессе разработки в devDependencies. После этого используйте npm i –production. Чем больше ненужных зависимостей используется, тем больше риск возникновения уязвимостей.   Давайте разберем некоторые из этих пунктов поподробнее: Избегайте нагромождения Взгляните на некоторые модули, написанные Исааком З. Шлейтером, создателем npm. К примеру, use-strict включает «строгий» режим написания JavaScript-модульного кода. Включается эта опция всего лишь в три строчки: Но почему-же все-таки стоит избегать нагромождения кода? Одна известная фраза американского воздушного флота гласит: «все должно быть просто до идиотизма». И на это существуют свои причины. Человеческий разум не может держать в памяти больше чем от 5 до 7 вещей одновременно. Это просто как факт. Разбивая код на небольшие составные части, Вы и другие разработчики легко сможете разобраться в нем и понять, для чего он предназначен. Так же упрощается процесс тестирования. Вот пример:   Или еще: Уверен, большинство из Вас отдадут предпочтение второму примеру, когда имена переменных сразу же делают понятной их суть. Конечно, в процессе написания кода Вы можете думать, что Вы понимаете, как он работает и так. Возможно, Вам даже захочется продемонстрировать свою смекалку и сообразительность, объединив несколько методов вместе в одну строку. Пожалуйста, пишите так, как если бы Вы были более неопытны. Как если бы Вы не смотрели в код на протяжении 6 месяцев, или очень устали и, кроме того, еще и выпили. Если Вы пишете код на пике своей ментальной активности, Вам будет труднее понимать его позже, не говоря уже о Ваших коллегах, которые даже не знакомы с ходом Ваших мыслей. Держать все в относительной простоте единственно верный метод – особенно в рамках Node.JS-технологии, где используется асинхронный подход. Другими словами, преимущества от использования подхода малых частей значительно более перевешивают недостатки. Помимо прочего, они позволяют значительно быстрее исправить различные ошибки, которые могут возникнуть по разным причинам в процессе работы с Node.JS-приложением.   Используйте асинхронный подход Синхронный код мало где используется в нынешнем Node.JS. Как правило, он находит свое применение в написании CLI-команд или скриптов, не связанных с веб-приложениями. Что же касательно веб-разработки, Node.JS программисты предпочитают использовать асинхронный подход, так как это позволяет избежать блокировки потоков. К примеру, синхронный код будет приемлем, если мы строит скрипт для работы с базой данных, не системы для обработки параллельных/конкурентных задач: Но, в случае веб-приложения, лучше использовать следующее: Отличительная особенность состоит в том, пишите ли вы долго исполняемый конкурентный код или небольшой скрипт с малым временем жизни. А вообще, лучше запомните одно хорошее правило: всегда пишите асинхронный код в Node.JS.   Избегайте блокировки require S обладает простой системой загрузки модулей, которая использует общий формат CommonJS. Самый простой способ подключить модули, разбросанные по отдельным файлам – использовать встроенную функцию require. В отличии о AMD/requirejs, Node/CommonJS синхронна. По сути, функция работает согласно следующему принципу: Вы импортируете то, что было экспортировано в виде модуля или файла. О чем большинство разработчиков даже не догадывается, так это о том, что require кэшируемая. Потому, до тех пор, пока нет заметных изменений зарезервированного имени файла (и, в случае использования npm-модулей, их нет), код модуля будет выполнен и подгружен в переменную только единожды (для обработки). Подобная методика позитивно сказывается на оптимизации. Однако, даже с кэширование, лучше сначала попробуйте обойтись без require. Попробуйте использовать axios-модули. Путь /connect в свою очередь будет медленнее чем требуется, ибо импорт модулей происходит после генерации запроса: Гораздо лучше будет загрузить модули тогда, когда сервер еще даже не определен, не в маршруте: Require должен быть закэширован Хотя я и упоминал о том, что require может быть закэширован, но что так же интересно, так это то, что мы можем поместить код вне module.exports. К примеру: Зная, что некоторые участки кода могут быть запущены только один раз, подобная реализация окажется более чем полезной.   Всегда проверяйте свой код Node.JS – это Вам не Java. В Java Вы выкидываете исключения потому как в большинстве случаев Ваше Java-приложение не должно продолжать работать в случае ошибки. В Java для этого Вы просто используете try…catch. В случае Node.JS история обстоит несколько по-иному. Так как технология выполняется в асинхронном режиме, контекст ошибки всегда будет отделен от любого перехватчика (такого как try…catch) в случае возникновения самой ошибки. Этот код в Node.JS будет просто-напросто бесполезен: Но! Привычный try…catch все еще может быть использован в синхронном режиме. Вот более действенный рефакторинг предыдущего участка кода: Если мы не можем обернуть request-вызов в блок try…catch, ошибка будет не перехвачена. Однако, это легко решается при помощи callback-аргумента error. Кроме того, Вам нужно всегда вручную отлавливать error в каждом и каждом callback`е. Проверяйте наличие ошибки (и убедитесь, что она не равна null) и затем, или демонстрируйте содержание ошибки пользователю или клиенту и потому логируйте ее, или отправляйте ее обратно в место вызова при помощи error-callback`а. В качестве небольшого фокуса Вы можете использовать библиотеку okay. Применяйте ее как наведено ниже что бы обойти ручной проверки на ошибки: Возвращайте значения или используйте if…else .JS – параллельный. Эта особенность может привести к багам, если не отнестись к ней с должной осторожностью. Что бы обезопасить себя, останавливайте выполнение участка кода при помощи ключевого слова return: Избегайте бессмысленной работы (и ошибок) из-за неостановленного вовремя исполнения: Просто убедитесь, что return всегда будет стоять на страже целесообразности работы Вашего кода.   Обращайте внимание на события ошибок Почти все классы/объекты Node.JS реализую паттерн-наблюдатель, который порождает событие-ошибку. Это прекрасная возможность для разработчика отловить особо подлые ошибки и придушить их до того, как они устроят хаос. В качестве полезной привычки было бы неплохо создавать программы-прослушиватели событий-ошибок при помощи использования .on(): Познайте свой npm Многие Node.JS и front-end событийные разработчики знают, что –save (для npm install) не только установит модуль, но так же и создаст запись в package.json с упоминанием текущей версии модуля. Для аналогичных целей существует и –save-dev, опция для модулей, которые нужны только во время разработки. Но знаете ли Вы, что вместо этого можно спокойно использовать –S и –D? Теперь да. И пока Вы в режиме установки модулей, удаляйте символ ^, который будут порождать команды –S и –D. Эти значки могут быть особенно опасными, так как они позволят npm автоматически обновить модуль к последней незначительной версии (вторая цифра в семантике версирования). К примеру, с версии 6.1.0 до версии 6.2.0. Команда NPM полагается на semver, но Вы не должны. Я хочу сказать, что они используют авто обновления к промежуточным версиям модулей с открытым исходным кодом, так как они полагают, что никаких радикальных изменений в этих самых промежуточных версиях не будет. Мой вам совет: не стоит слишком в это верить. Более того, используйте npm shrinkwrap. Команда создаст новый файл с текущими версиями зависимостей зависимостей. И в заключение В этом посте мы охватили много всего: от работы с callback'ами до работы с асинхронными потоками, проверки на ошибки и снятия блокировки зависимостей. Надеюсь, Вы нашли для себя что-то новое и познавательное здесь. Немного об авторе Азат является техническим консультантом и менеджером в Capital One. JavaScript/Node.js-эксперт, автор различных онлайн-курсов. Издатель более чем 12 книг, посвященных теме, включающие такие хиты продаж как Full Stack JavaScript, React Quickly, Practical Node.JS и Pro Express.js и другие. В свое свободное время Азат читает о технике на Webapplog.com, проводит конференции и работает над продуктами с открытым исходным кодом. До того, как стать экспертом Node.JS, работал в федеральных правительственных агентствах США, принимал участие в небольших старт-апах и больших корпорациях, имея дело с такими технологиями, как Java, SQL, PHP, Ruby и прочие. Азат обожает все, что связано с технологиями и финансами, так же увлекается инновационными способами обучения и просвещения людей. Автор перевода: Евгений Лукашук Источник
Основи тестування. Як правильно скласти баг-репорт

Автор: Армен Маїлян

Навіщо потрібний гарний баг-репорт? Які якості гарного баг-репорту у розробці програмного забезпечення? Характеристики та методи для повідомлення про баг Ефективний баг-репортинг Простий шаблон баг-репорту Важливі фічі у вашому звіті про помилки Номер помилки/ідентифікатор Найменування помилки Пріоритет Платформа/Середовище Опис Кроки для відтворення помилки Очікуваний та фактичний результат Скріншот Додаткові поради для написання гарного баг-репорту Висновок Навіщо потрібний гарний баг-репорт? Баг репорт це звіт про помилки. І якщо його складено правильно, то шанси на швидке виправлення цих багів вищі. Таким чином, виправлення помилки залежить від того, наскільки якісно ви про неї повідомите. Складання звітів про помилки - не що інше, як навичка, і зараз ми розглянемо, як її сформувати. "Сенс написання звіту про проблеми (баг-репорту) полягає в тому, щоб виправити ці проблеми" - Cem Kaner. Якщо тестувальник не повідомляє про помилку правильно, програміст, швидше за все, відхиляє цю помилку, заявивши, що вона невідтворювана. Це може нашкодити робочому настрою тестувальників, зачепити їх професійну гордість, їх его. Які якості гарного баг-репорту у розробці програмного забезпечення? Будь-хто може скласти приклад баг репорту. Але не кожен може написати ефективний баг-репорт. Ви повинні вміти добре розрізняти баг-репорт середньої якості та гарний баг-репорт. Як відрізнити гарний та поганий баг-репорти? Це дуже просто – застосуйте наступні характеристики та методи, щоб якісно повідомити про помилку. Характеристики та методи включають в себе: 1) Наявність чітко визначеного номера помилки: Завжди надавайте унікальний номер кожному повідомленню про помилку. Це, у свою чергу, допоможе вам чітко ідентифікувати запис про помилку. Якщо ви використовуєте будь-який інструмент автоматичного формування баг-репортів, цей унікальний номер буде генеруватися автоматично кожного разу, коли ви робите звіт. Запишіть номер та короткий опис кожної помилки, про яку ви повідомили. 2) Відтворюваність: Якщо знайдена вами помилка невідтворювана, вона ніколи не буде виправлена. Ви повинні чітко вказати кроки для відтворення помилки. Не приймайте та не пропускайте жодного кроку відтворення. Помилку, яка описана крок за кроком, легко відтворити та виправити. 3) Будьте конкретні: Не пишіть нарис про проблему. Пишіть конкретно і по суті. Спробуйте описати виявлену проблему мінімальною кількістю слів та максимально ефективним способом. Не поєднуйте описи кількох багів в одному звіті, навіть якщо вони здаються схожими. Напишіть різні звіти для кожної проблеми. Ефективний баг-репортинг Звіти про помилки є важливим аспектом тестування програмного забезпечення. Ефективний баг-репорт добре розуміється командою розробників і дозволяє уникнути плутанини чи непорозуміння. Гарний звіт про помилку має бути чітким і коротким, без будь-яких пропущених ключових моментів. Будь-яка відсутність ясності веде до непорозуміння та уповільнює процес розробки. Опис дефектів та складання звітів – одна з найважливіших, але часто ігнорованих областей у життєвому циклі тестування. Правильно складений текст звіту про знайдений баг є дуже важливим для реєстрації помилки. Один із важливих моментів, які повинен мати на увазі тестер, - це не використовувати командний тон у звіті. Такий тон порушує моральний стан колективу та створює нездорові робочі відносини. Використовуйте нейтральний тон. Не думайте, що якщо розробник припустився помилки, то ви можете використовувати грубі слова. Перш ніж повідомляти, не менш важливо перевірити, чи був баг-репорт за цією помилкою раніше, чи ні. Дублікати помилок – це постійна проблема у циклі тестування. Перевіряйте весь список виявлених багів. Іноді розробники можуть знати про проблему і ігнорувати її в майбутньому випуску. Використовуйте спеціальні інструменти, такі як Bugzilla, який автоматично шукає дублікати помилок. Тим не менш, найкраще додатково вручну шукати дублікати помилок. Чітко вказуйте інформацію про помилку: «Як?» і «Де?". Звіт повинен ясно показувати, як було виконано тест і де саме стався дефект. Читач звіту повинен легко відтворити помилку та знайти її. Майте на увазі, що мета написання баг-репорту – дати розробнику можливість візуалізувати проблему. Він повинен чітко розуміти суть дефекту, прочитавши звіт про помилку. Не забудьте надати всю необхідну інформацію, яку розробник шукає. Крім того, майте на увазі, що звіт про помилки буде збережено для майбутнього використання і він повинен бути гарно написаний та містити необхідну інформацію. Використовуйте змістовні речення та прості слова, щоб описати знайдені помилки. Не використовуйте заплутані твердження, які витрачають час читача. Повідомляйте про кожну помилку як про окрему проблему. У разі опису кількох багів в одному звіті, ви не зможете закрити його, доки всі проблеми не будуть вирішені. Таким чином, краще за все розбити великі проблеми на окремі баги. Це гарантує, що кожна помилка може бути оброблена окремо. Добре написаний баг-репорт допомагає розробнику відтворити помилку у своєму терміналі. Це також допомагає їм правильно діагностувати проблему. Простий баг репорт шаблон Це проста форма баг-репорту. Його зміст може змінюватись в залежності від використовуваного вами інструменту для створення звітів про помилки. Якщо ви пишете баг-репорт вручну, необхідно згадати деякі поля, наприклад номер помилки, який повинен бути призначений вручну. Укладач звіту: Ваше ім'я та адреса електронної пошти. Продукт: У якому продукті ви знайшли цю помилку. Версія: Версія продукту з помилкою, якщо така є. Компонент: Основні підмодулі продукту. Платформа: Вкажіть апаратну платформу, де ви виявили цю помилку. Різні платформи, такі як "ПК", "MAC", "HP", "Sun" і т. д. Операційна система: Вкажіть усі операційні системи, у яких ви виявили помилку. Операційні системи, як-от Windows, Linux, Unix, SunOS, Mac OS. Згадайте різні версії ОС, такі як Windows NT, Windows 2000, Windows XP і т. д., якщо це можна застосувати. Пріоритет: Коли потрібно виправляти помилку? Пріоритет зазвичай встановлюється від P1 до P5. P1 слід розуміти як "виправити помилку з найвищим пріоритетом" і P5 - "виправити, якщо дозволяє час". Серйозність помилки: Визначає вплив помилки. Типи Серйозності помилки: Блокувальник (Blocker): подальша робота з тестування неможлива. Критична (Critical): збій застосунку, втрата даних. Major: серйозна втрата функціональності. Minor: незначна втрата функціональності. Незначна (Trivial): деякі поліпшення інтерфейсу користувача. Поліпшення (Enhancement): запит нової функції або деякого покращення існуючої. Статус помилки: Коли ви реєструєте помилку в будь-якій системі відстеження помилок, за замовчуванням статус помилки буде «Новий». Пізніше помилка проходить через різні етапи, такі як "Виправлено", "Перевірено", "Повторно відкрито", "Не виправлено" тощо. Призначити розробнику: Якщо ви знаєте, який розробник відповідає за той конкретний модуль, в якому виникла помилка, ви можете вказати адресу електронної пошти цього розробника. В іншому випадку залиште це поле порожнім, оскільки це надасть полю авторства помилки значення власника модуля, якщо менеджер не призначить помилку розробнику. URL: URL-адреса сторінки, на якій сталася помилка. Коротке резюме: Додайте короткий опис помилки. Орієнтуйтесь на 60 слів або менше. Переконайтеся, що складене резюме відображає проблему та місце, де вона знаходиться. Опис: Детальний опис помилки. Використовуйте такі поля для поля опису: Відтворювані кроки: чітко згадайте кроки для відтворення помилки. Очікуваний результат: як додаток має поводитися на вказаних вище етапах. Фактичний результат: який фактичний результат виконання вищезгаданих кроків, тобто поведінка помилки. Це важливі кроки у звіті про помилки. Ви також можете додати "Тип звіту" як ще одне поле, яке описуватиме тип помилки. Типи звітів включають в себе: Помилка в коді Помилка проєктування Нова пропозиція Проблема із документацією Апаратна проблема Важливі фічі у вашому звіті про помилки Розглянемо кілька складових звіту про знайдений баг. Нижче наведено важливі елементи баг-репорту: 1) Номер помилки/ідентифікатор: Номер помилки або ідентифікаційний номер (наприклад, xyz007) значно спрощує складання баг-репорту та пошук місця помилки. Розробник може легко перевірити, чи виправлено конкретну помилку, чи ні. Це робить весь процес тестування та повторного тестування більш плавним та легким. 2) Найменування помилки: Заголовок помилки читається частіше, ніж будь-яка інша частина баг-репорту. Варто вказати в ньому все про те, що входить в баг. Назва помилки має бути досить осмисленою, щоб читач міг її зрозуміти. Чіткий заголовок помилки полегшує розуміння, і читач легко зможе перевірити, чи було повідомлення про помилку раніше і чи було її виправлено. 3) Пріоритет:  В залежності від серйозності помилки для неї може бути встановлений пріоритет. Помилка може бути Blocker, Critical, Major, Minor, Trivial або пропозицією щодо покращення функціоналу. Пріоритет помилки від P1 до P5 може бути заданий так, щоб найважливіші з них переглядалися першими. 4) Платформа/Середовище:  Вказівка ​​конфігурації ОС та браузера потрібна для більшої точності в баг-репорті. Це найкращий спосіб повідомити, як можна відтворити помилку. Без точної платформи або середовища програма може поводитися по-іншому, і помилка на стороні тестувальника може не повторюватися на стороні розробника. Тому краще чітко вказати середовище, в якому було виявлено помилку. 5) Опис:  Правильний опис помилки допомагає розробнику зрозуміти помилку. Він описує проблему, що виникла. Поганий опис створить плутанину та витратить час розробників і тестерів. Необхідно чітко повідомити про ефект в описі. Завжди корисно використовувати повні речення. Рекомендується описувати кожну проблему окремо. Не використовуйте такі терміни, як «я думаю» чи «я вважаю». 6) Кроки для відтворення помилки:  Гарний звіт про помилку має чітко вказувати кроки для відтворення. Кроки повинні включати дії, які спричиняють помилку. Не робіть загальних заяв. Будьте конкретні у наступних кроках. Гарний приклад правильно написаної покрокової процедури наведено нижче: Послідовність кроків: Виберіть продукт wer05. Натисніть на «Додати до кошика». Натисніть «Видалити», щоб видалити продукт із кошика. 7) Очікуваний та фактичний результат:  Опис помилки буде неповним без зазначення очікуваних та фактичних результатів. Необхідно описати в загальних рисах, який результат тесту і що очікував користувач у разі коректної роботи програми. Читач звіту повинен знати, який результат тесту буде коректним. Чітко згадайте, що сталося під час тесту і який був результат. 8) Скріншот: Одна картинка коштує тисячі слів. Зробіть скріншот із прикладом збою з відповідними виділеннями, щоб вказати дефект. Виділіть несподівані повідомлення про помилки світло-червоним кольором. Це привертає увагу до необхідної області. Деякі додаткові поради для написання гарного баг-репорту Нижче наведено деякі додаткові поради, щоб написати гарний звіт про помилку: 1) Негайно повідомте про проблему: Якщо ви виявите будь-яку помилку під час тестування, не потрібно чекати, щоб написати докладний звіт про помилку пізніше. Натомість напишіть звіт про помилку негайно. Це забезпечить гарну якість звіту та відтворюваність кроків отримання помилок. Якщо ви вирішите написати звіт про помилку пізніше, то є великі шанси пропустити важливі деталі в баг-репорті. 2) Відтворіть помилку тричі перед написанням баг-репорту: Ваш баг має бути відтворюваним. Переконайтеся, що ваші кроки досить чіткі, щоб відтворити помилку без будь-якої двозначності. Якщо ваша помилка не відтворюється щоразу, ви все одно можете помилитися, вказавши періодичну природу багу. 3) Протестуйте цю ж помилку на інших схожих модулях:  Іноді розробник використовує один і той самий код для різних схожих модулів. Таким чином, ймовірність того, що помилка в одному модулі виникне і в інших подібних модулях, вища. Ви навіть можете спробувати знайти серйознішу версію знайденої помилки. 4) Складіть гарне резюме помилки: Короткий опис помилки допоможе розробникам швидко проаналізувати природу помилки. Низька якість звіту надмірно збільшить час розробки та тестування. Правильно взаємодійте з вашим баг-репортом. Майте на увазі, що зведення про помилки використовується як довідкова інформація для пошуку помилки в інвентарі помилок. 5) Прочитайте декілька разів звіт про помилку, перш ніж натиснути кнопку «Надіслати»:  Прочитайте всі речення, формулювання та кроки, які використовуються у баг-репорті. Подивіться, чи не створює якесь речення двозначність, яка може призвести до неправильної інтерпретації. Слід уникати слів або речень, що вводять в оману, щоб скласти чітке повідомлення про помилку. 6) Не використовуйте образливих виразів:  Приємно, що ви зробили хорошу роботу і виявили помилку, але не використовуєте це для критики розробника чи нападок на будь-яку людину. Висновок Що таке баги? Це недосконалості ПЗ, з якими необхідно боротися, і один із головних помічників у цьому – репорти про помилки. Ми розглянули деякі особливості складання звіту про знайдений баг. Немає сумнівів, що ваш баг-репорт повинен бути якісним документом. Зосередьтеся на написанні гарних звітів про помилки і витратьте деякий час на виконання цього завдання, оскільки саме якісний баг-репорт є основною точкою зв'язку між тестером, розробником та менеджером. Менеджери зі свого боку повинні пояснити своїй команді, що складання гарного звіту про помилки є основним обов'язком будь-якого тестувальника. Ваші зусилля щодо написання гарного звіту про помилки не тільки збережуть ресурси компанії, але й створять гарні стосунки між вами та розробниками. Для кращої продуктивності команди намагайтеся написати якомога гарний звіт про помилки. З нашого боку для якісної підготовки тестувальників пропонуємо вам ознайомитися з курсом підготовки спеціаліста-тестувальника на ITVDN - Quality Assurance. За матеріалами статті.
Junior Java Developer – питання на співбесіді

Автор: Армен Маїлян

В этой статье мы рассмотрим 25 наиболее часто встречающихся вопросов на интервью для новичков в программировании на Java. Все это реальные вопросы на собеседовании Java Junior Developer.   Можно ли в Java переопределить статический метод? Нет, статический метод в Java мы не можем переопределить. Мы можем только скрыть его. В Java статические методы - это те методы, которые можно вызывать без создания экземпляра класса. С другой стороны, если подкласс имеет ту же сигнатуру метода, что и базовый класс - это будет переопределением метода. Статический метод в Java не может быть переопределен по таким причинам: Статические методы - это те, которые принадлежат непосредственно классу. Они не принадлежат объекту, и при переопределении объект решает, какой метод должен быть вызван. Переопределение метода происходит динамически (во время выполнения), это означает, что определение того, какая версия метода будет использоваться происходит во время выполнения в соответствии с объектом, используемым для вызова, в то время как статические методы ищутся статически (во время компиляции). Когда вы запустите программу выше, вы получите следующий результат: Hello...Good morning Hello...Good morning Hello...everyone Согласно правилам переопределения методов, вызов метода разрешается во время выполнения по типу object. Таким образом, в нашем примере выше d.hello (), во втором вызове, должен вызывать метод hello () класса DisplayMessage, поскольку ссылочная переменная класса Display ссылается на объект DisplayMessage, но вызывает hello () самого класса Display. Это происходит потому, что выполнение статического метода разрешается во время компиляции. Таким образом, если статический метод у производного класса имеет ту же сигнатуру, что и статический метод базового класса, это будет называться сокрытием метода, а не переопределением метода. Можно ли выполнить перегрузку метода main() в Java? Достаточно распространенный по языку Java вопрос на интервью. Да, вы можете перегрузить метод main() в Java. В Java можно выполнить перегрузку метода main(), но когда мы запустим нашу программу, JVM будет искать общедоступный статический void main (String [] args) и выполнит этот метод. Перегрузка метода main() в Java: Когда вы запустите программу выше, вы получите такой результат: Inside main(String[] args) Видно, что метод main() у нас перегружен, но все же JVM вызывает метод с подписью public static void main (String [] args). Обратите внимание, что JVM считает var args public static void main (String... args) таким же, как public static void main (String [] args). Если мы хотим вызвать именно перегруженный метод, то вам нужно вызвать его из метода main с сигнатурой public static void main (String [] args). Например: Когда вы запустите программу выше, вы получите такой результат: Inside main(String[] args) Inside main(Integer args) Inside main(Integer arr) Как видите, мы вызвали перегруженные методы из main() с помощью аргумента String []. Можем ли мы в Java переопределить приватные методы? В Java мы не можем переопределить private методы, так как они видны только классу-владельцу. Каков базовый класс для всех классов в Java? java.lang.Object - это базовый класс для всех объектов. Можете ли вы перечислить некоторые важные методы из класса object? Среди важных методов класса object выделяют: hashcode - в качестве возвращаемого значения имеет хеш-значение объекта; equals - сравнивает ссылки на объекты; wait -  текущий поток ожидает, пока не будет вызвано notify или notifyAll; notify - пробуждает один поток, который ожидает блокировки; notifyAll - пробуждает все потоки, ожидающие блокировки; toString - обеспечивает представление объекта в виде строкового значения; clone - этот метод применяется для клонирования объекта; finalize - этот метод вызывается, когда объект подвергается обработке сборщиком мусора. Какие два метода вам нужно переопределить при помещении пользовательского объекта в качестве ключа для HashMap? Вам нужно будет переопределить методы hashcode() и equals() в пользовательском классе, помещая объекты пользовательского класса в HashMap.   В чем отличия в Java между HashMap и HashSet? HashMap В HashMap реализован интерфейс Map, который выполняет сопоставление некого ключа со значением. Он не синхронизирован и не является потокобезопасным. Не допускаются дублирующиеся ключи, а также null ключи и null значения. HashSet В HashSet реализован интерфейс Set, не допускающий дублирования значений. Он не синхронизирован и не является потокобезопасным. Выше employeeSet будет иметь 2 элемента, так как Set не допускает повторяющихся значений. Метод add применяется для добавления элементов в HashSet. Если этот метод возвращает true, тогда элемент добавляется успешно, но, если возвращается false – это значит, что вы пытаетесь вставить дублирующее значение. public boolean add(Object o) Одна из главных особенностей HashSet - объекты, которые мы собираемся добавить в HashSet, должны реализовывать методы Hashcode() и equals(), чтобы мы могли проверять наличие дублирующихся значений. Если мы добавляем пользовательские объекты в HashSet, то мы должны переопределить методы Hashcode() и equals() в соответствии с нашими потребностями. Если HashMap и HashSet не будут переопределены, объект будет принимать реализацию по умолчанию, что может быть нежелательно. HashMap vs HashSet:   Можем ли мы иметь абстрактный класс без какого-либо абстрактного метода в нем? Да, вы можете иметь абстрактный класс без создания какого-либо абстрактного метода.   Что вы знаете о переменной с модификатором transient? Когда вы будете ее использовать? Переменные с модификатором transient (нерезидент) применяются при сериализации. Если вы не хотите делать сериализуемую переменную, вы можете сделать ее переменной с модификатором transient. Transient переменная - это переменная, значение которой не будет сериализоваться во время сериализации объекта. А при десериализации - вы получите значение по умолчанию для этих переменных. Допустим, у вас есть класс Country, и вы не хотите сериализовать атрибут населения, поскольку он будет меняться со временем, поэтому вы можете объявить атрибут населения как transient, и он больше не будет сериализован.   Можете ли вы вызвать метод start() дважды в Java? Нет, вы не можете вызвать метод start() дважды. Это вызовет llegalStateException. После того как поток был запущен, он не может быть запущен снова. Если вы попытаетесь снова запустить поток, он выдаст исключение IllegalThreadStateException Давайте разберемся с помощью примера: Когда вы запустите программу выше, вы получите такой результат: Thread is runningException in thread "main" java.lang.IllegalThreadStateException at java.lang.Thread.start(Thread.java:705) at org.arpit.java2blog.StartThreadAgainMain.main(StartThreadAgainMain.java:16) Как вы можете видеть, когда мы пытались запустить поток во второй раз, он вызывал исключение IllegalThreadStateException. Если вы попытаетесь снова запустить поток, он выдаст исключение IllegalThreadStateException   Почему String неизменяемый (immutable) в Java? В Java класс String неизменяемый. Если вы возьмете словарное значение слова «immutable», это означает, что он не может быть изменен с течением времени, соответственно строка не может быть изменена в Java. Давайте разберемся с примером. Как видите, значение str1 не изменилось. Она создала другой объект String со значением «Hellojava2blog», но не изменил String str1. Это объясняет, что String является неизменяемым по своей природе. Теперь давайте разберемся, каковы потенциальные причины сделать String неизменной в Java. Пул строк: Если вы просто присваиваете значение String, используя двойные кавычки, это значение сохраняется в области, называемой строковым пулом, и на одну строку могут ссылаться многие ссылочные переменные. Если бы String оказался изменяемым, то это повлияло бы на все ссылающиеся на нее переменные. Потокобезопасность: Неизменяемые объекты по умолчанию являются потокобезопасными, поэтому вам не нужно устанавливать для них синхронизацию, и экземпляр String можно безопасно разделить между несколькими потоками. Безопасность: Если бы String был изменяемым, это могло бы привести к множественным проблемам безопасности. Например, при подключении к базе данных вы предоставляете имя пользователя, пароль, порт и имя хоста и т. д. в виде строки. Если бы строка - была изменяемая, то любой хакер мог бы изменить ссылочное значение, что было бы угрозой безопасности для приложения. Хэш-значение кэша: Когда вы используете String в качестве ключа в HashMap или HashSet или любой другой коллекции, вы можете кэшировать ее хеш-значение. Поскольку String является неизменяемым по своей природе, вам не нужно пересчитывать хэш каждый раз, поскольку он будет постоянным. Это значительно повышает производительность для этой коллекции на основе хеша. Загрузка классов: Строка используется в механизме загрузки классов. Она передается в качестве параметра. Если бы строка оказалась изменяемой, это вызвало бы прямую угрозу безопасности, поскольку любой хакер мог бы ее изменить.   Знаете ли вы, как сделать класс неизменным (immutable)? Можете ли вы предоставить шаги для этого? Неизменяемый класс - это класс, состояние которого нельзя изменить после создания. Пример: String - лучший пример неизменяемого класса. Создав строку, вы не сможете ее изменить. Неизменяемый класс очень прост для понимания, он имеет только одно состояние. Неизменяемые классы являются потокобезопасными. Это самое большое преимущество неизменяемого класса, потому что, - вам не нужно применять синхронизацию для неизменяемых объектов. Также, неизменяемый класс может быть полезен при помещении объекта неизменяемого класса в HashMap или может использоваться для целей кэширования, поскольку его значение не изменится. Неизменяемые объекты по умолчанию являются потокобезопасными. Шаги для создания неизменяемого класса: Финализируйте свой класс: Если вы финализируете свой класс - ни один класс не сможет его расширить, следовательно, не сможет переопределить методы этого класса. Пометьте все переменные класса модификаторами доступа private и final: Если вы сделаете переменную экземпляра private - ни один внешний класс не сможет получить доступ к переменным экземпляра, и, если вы сделаете их final - вы не сможете их изменить. Скажите «нет» методам-мутаторам: Не создавайте метод set для некоторых переменных класса, тогда не будет возможности явно изменить состояние переменных экземпляра. Выполните клонирование изменяемых объектов при возврате из метода получения: Если вы вернете клон объекта из метода get, то вернется объект. При этом, ваш оригинальный объект останется без изменений.   Можем ли мы иметь статический метод в интерфейсе? Да, у нас может быть статический метод в интерфейсе из Java 8.   Можете ли вы объявить конструктор финальным (final)? Нет, вы не можете объявить конструктор финальным.     В чем разница между StringBuffer и StringBuilder? Что такое Java ClassPath? ClassPath - это переменная окружения, которую виртуальная машина Java (JVM) использует для определения местоположения всех классов, используемых программой. Например: jre / lib / rt.jar имеет все классы Java, и вам также необходимо включить файлы jar или файл классов, которые используются программой.   У вас есть список пользовательских объектов? Как вы можете их отсортировать? Вам необходимо использовать интерфейс Comparable или Comparator для сортировки списка пользовательских объектов.   Что такое модификатор volatile в Java? Если вы пометите любую переменную как volatile, эта переменная будет считываться из основной памяти, а не из кэша  центрального процессора, поэтому каждый поток будет иметь обновленное значение в переменной.   Назовите два разных способа вызвать сборщик мусора? System.gc() или Runtime.getRuntime().gc().   Что такое маркерный интерфейс в Java? Можете ли вы привести несколько примеров маркерного интерфейса? Маркерные интерфейсы - это те интерфейсы, которые не содержат в себе никаких методов и полей. Примерами интерфейсов маркеров являются: Serializable, Cloneable, Remote.   Сколько объектов будет создано ниже: String str1= new String("John"); String str2= new String("John");   Здесь будут созданы три объекта, два в динамической памяти и один в постоянном пуле String.   Можете ли вы провести различие между проверяемым исключением (Checked Exception) и непроверяемым исключением (Unchecked Exceptions)? Что такое исключение? Исключением является нежелательная ситуация или условие при выполнении программы. И если вы неправильно обрабатываете исключение, то это может привести к аварийному завершению программы. Что такое проверяемое исключение? Проверяемые исключения - это те исключения, которые проверяются при компиляции. Если вы не обработаете их, вы получите ошибку компиляции. Используя блок try и catch вы можете поместить код ошибки в блок try и перехватить исключение в блоке catch. Что такое непроверяемое исключение? Непроверяемые исключения - это те исключения, которые не проверяются во время компиляции. Java VM не будет «ругаться», если вы не обработаете такие исключения. Если вы выполните код выше вы получите: Exception in thread "main" java.lang.NullPointerException at org.arpit.java2blog.NullPointerExceptionExample.main(NullPointerExceptionExample.java:7)   В чем разница между ArrayList и LinkedList? Как вы решите, какой из них вам нужно использовать? Один из распространенных вопросов интервью: «В чем разница между ArrayList и LinkedList». Прежде чем мы действительно увидим различия, давайте кратко рассмотрим оба. ArrayList: ArrayList – является реализацией интерфейса List. ArrayList не синхронизирован (поэтому не является потокобезопасным). ArrayList реализован с использованием массива в качестве внутренней структуры данных. Его можно динамически изменять. LinkedList: LinkedList является реализацией интерфейса List и интерфейса Deque. LinkedList не синхронизируется. LinkedList реализован с использованием двусвязного списка в качестве внутренней структуры данных.   Свойство ArrayList LinkedList Внутренняя структура данных Использует динамический массив для хранения элементов внутри. Он использует дважды связанный список для внутреннего хранения элементов. Скорость выполнения Если нам нужно вставить или удалить элемент в ArrayList, это может занять O(n), так как он использует массив, и нам может потребоваться сместить элементы в случае вставки или удаления. Если нам нужно вставить или удалить элемент в связанном списке, это займет O(1), так как он внутренне использует двусвязный список. Поиск В ArrayList поиск выполняется быстрее, т.к. он использует массив, основанный на индексах. Сложность - O(1). Поиск в LinkedList идет медленнее, т.к. он использует двусвязанный список. Сложность равна O(n). Интерфейсы ArrayList реализует только интерфейс List, поэтому его можно использовать только как List. LinkedList реализует интерфейсы List, Deque, поэтому его можно использовать как List, Stack или Queue. Когда использовать ArrayList и LinkedList? Это на самом деле зависит от нашей потребности. Если нам требуется произвести большое количество вставок или удалений, то нам следует использовать LinkedList. Если у нас имеется мало вставок или удалений, но выполняется много поисковых операций, то тогда нам следует использовать ArrayList.   В чем разница между wait и sleep в Java? Один из распространенных вопросов на интервью Java разработчика: «В чем разница между wait и sleep в Java?». Прежде чем мы действительно увидим различия, кратко ознакомимся с обоими.     sleep vs wait:   Вы запустили три потока из основного потока. Вы должны убедиться, что основной поток завершился последним. Как вы это сделаете? Вы можете использовать Java Thread Join() для достижения этого сценария. Без использования метода Join:     Когда вы запускаете программу выше, вы получите следующий результат: Main thread ends here T2 in run method T1 in run method T3 in run method С помощью метода Join: Когда вы запустите программу выше, вы получите следующий результат: T2 in run method T3 in run method T1 in run method Main thread ends here Как видите, основной поток завершается последним в этом сценарии.     Итоги Мы с вами рассмотрели 25 распространенных вопросов на собеседовании на должность Junior Java Developer.  Конечно же, полноценная подготовка к собеседованию Java разработчика должна включать и практическую и теоретическую подготовку. Готовясь к собеседованию, имеет смысл с одной стороны подготовиться, используя различные наборы вопросов и ответов Java собеседований, а с другой стороны  - быть готовым к решению задач на собеседованиях Java. С нашей стороны, ITVDN.com предлагает комплексную программу подготовки Java разработчика, включающую в себя видео курсы по Java и сопутствующим технологиям.  Рекомендуем вам также ознакомиться с серией видео «Подготовка к собеседованию в IT компании. Вопросы и ответы. Хитрости. Трюки.»   По материалам статьи.
ТОП-7 популярних IDE для програмування на С++

Автор: Армен Маїлян

Visual Studio Qt Creator CLion Eclipse Xcode Code::Blocks NetBeans   Відмінності між IDE та текстовим редактором Рейтинг IDE для С++ за даними Standard C++ Foundation Рейтинг IDE серед користувачів Reddit Рейтинг IDE для C++ від компанії JetBrains Рейтинг найкращих середовищ розробки для C/C++ IDE від G2 Crowd Висновок У роботі будь-якого сучасного розробника програмного забезпечення є інструменти, які стали практично обов'язковими для щоденного застосування. Якщо говорити про програмування мовою C++, таким інструментом, насамперед, буде звичайно інтегроване середовище розробки або IDE (Integrated Development Environment). Звичайно, досвідчений програміст може обійтися і без використання IDE, але це істотно позначиться на таких моментах, як швидкість розробки, якість коду і, звичайно ж, зручність самого процесу написання цього коду. Сьогодні ми розглянемо ТОП-7 найкращих середовищ програмування на C++. Це найчастіше використовувані інструменти від різних компаній та спільнот.   Відмінності між IDE та текстовим редактором Для початку нагадаємо різницю між текстовим редактором, який використовується для написання програм, і повноцінною IDE. Якщо спростити, текстовий редактор – це програма, за допомогою якої розробник взаємодіє безпосередньо з кодом як з текстом. Використовуючи клавіатуру, за допомогою текстового редактора розробник вводить символи та ключові слова мови програмування, описуючи цими словами якийсь алгоритм, зрозумілий надалі комп'ютеру. Код, написаний на C++ за допомогою текстового редактора коду, потрібно буде відправити на компілювання в іншу програму – компілятор, який не входить до складу текстового редактора. Інтегроване середовище розробки, у свою чергу, є комплексом окремих інструментів розробника, який дозволяє не тільки написати код програми, але й скомпілювати цей код у готовий додаток, провести тестування цієї програми, пошук помилок, рефакторинг та інші дії. До складу сучасних IDE як окремі елементи вже входять: текстовий редактор; компілятор (або інтерпретатор – для інтерпретованих мов програмування); відлагоджувач; система управління версіями; інші інструменти. Сучасні IDE можуть суттєво розширювати свій функціонал завдяки різним плагінам. Варто зазначити, що деякі текстові редактори (наприклад Vim, Visual Studio Code, Emacs), завдяки доступним плагінам, також розширюють свій функціонал, доводячи його до практично IDEшних можливостей. Однак це все ж таки два різних інструменти розробника. Текстовий редактор призначений скоріше для внесення дрібних змін до коду окремих файлів майбутньої програми. IDE, у свою чергу, працює з програмою комплексно, розглядаючи її в цілому як проект або набір проектів, а не як окремі текстові файли з кодом. Звідси й різниця у доступних можливостях цих інструментів.   Рейтинг IDE для С++ за даними Standard C++ Foundation Ознайомимося з даними опитування, проведеного серед 3240 розробників у лютому 2018 року організацією Standard C++ Foundation (Некомерційна організація з Бйорном Страуструпом у якості одного з керівників. Метою організації є підтримка спільноти розробників програмного забезпечення C++). За даними цього опитування, розробники на C++ виділили такі засоби розробки, як найчастіше використовувані: Перше місце серед IDE у Visual Studio з 55.28% розробників, що використовують його, друге у Qt Creator – 24.41% розробників, третє місце у CLion – 14.66%, четверте місце займає Eclipse – 12.78% розробників, п'яте місце у XCode – 12.22% розробників, шосте місце у Android Studio – 5.15%, сьоме у Code::Blocks – 4.85%. Як ми бачимо, багато розробників для роботи використовують текстові редактори з різними розширеннями функцій або без них. До таких входять: Vim – 37.93% розробників, Visual Studio Code – 25.77% розробників, Emacs (технічно, це текстовий редактор з розширеннями функціоналу до IDE) – 13.55%, Sublime – 12.78%.   Рейтинг IDE серед користувачів Reddit За результатами опитування, проведеного серед 1860 учасників наприкінці лютого 2018 року у співтоваристві r/cpp на порталі reddit.com, перше місце також займає Visual Studio – 28.43%:   Серед представників IDE до числа найчастіше використовуваних також увійшли: Qt Creator – 11.64%, CLion – 8.91%, Xcode – 4.05%, Eclipse – 3.98%, Code::Blocks – 2.43%.   Рейтинг IDE для C++ від компанії JetBrains Компанія JetBrains, одна з провідних компаній-творців інструментів для розробників (зокрема творець і власник одного з провідних IDE для C++ – CLion), представила в 2018 році свою статистику інтегрованих середовищ програмування С++, які найчастіше використовуються. За даними цієї статистики, перше місце серед різних середовищ розробки для C++ також отримує Visual Studio, що використовується 32% програмістів. Наступні місця в цьому рейтингу інтегрованих середовищ розробки розподілилися таким чином: друге місце у CLion – 11%, третє місце у Xcode – 5%, четверте місце у Eclipse – 5%, п'яте у QtCreator – 4%, шосте місце у Atom – 3 %, сьоме у NetBeans – 3%. Також корисною буде статистика від тієї ж компанії JetBrains, що показує компілятори, котрі найбільш часто застосовуються в розробці:   Рейтинг найкращих середовищ розробки для C / C++ IDE від G2 Crowd Цікаві дані надає аналітична платформа G2 Crowd. Проаналізувавши частоту використання розробниками різних середовищ розробки на C/C++ та ступінь задоволеності цими інструментами, компанія представила таку інфографіку: З цієї схеми ми все ще спостерігаємо лідирування Visual Studio серед інших середовищ розробки C++. Досить нішевими продуктами виявляються CodeLite та Code::Blocks. Ми розглянули кілька відкритих рейтингів найкращих середовищ програмування C++. Використовуючи вказані дані, ми зробили свій рейтинг найкращих середовищ розробки.   1) Visual Studio Visual Studio посідає перше місце у нашому рейтингу. Це широко відоме повнофункціональне середовище розробки від компанії Microsoft, яке дозволяє працювати з такими платформами, як Windows, Інтернет, хмара та Android. Можливості IDE Visual Studio дозволяють правильно та ефективно писати код, реорганізовувати, аналізувати та виправляти проблеми з кодом. Система IntelliSense передбачає API-інтерфейси в міру їх написання і виконує автоматичне завершення для підвищення швидкості та ефективності розробки. Саме ця IDE дозволяє новачкові найлегше увійти в процес розробки. Офіційний сайт – https://visualstudio.microsoft.com/ru/ Особливості Visual Studio: Свій компілятор – MSVC. Існують версії, що працюють на macOS та Windows. Підтримує такі мови: ASP.NET, Ajax, DHTML, Visual C++, JavaScript, JScript, Visual Basic, Visual C#, Visual F#, XAML та ін. Плюси IDE Visual Studio: Безкоштовно поширюється Visual Studio Community з достатнім набором можливостей. Платні версії можуть надаватися навчальним закладам та студентам безкоштовно. Зручна система розумного автодоповнення. Велика кількість налаштувань середовища розробки під «себе» завдяки вбудованим механізмам і доступним доповненням. Мінуси IDE Visual Studio: Версії Visual Studio Professional та Visual Studio Enterprise є платними. Масштабна IDE, досить вимоглива до заліза. Ряд розробників вважають її надмірною для створення дрібних проектів. Досить невелика швидкість запуску проектів та додатків. Не працює на Linux. Платні версії з розширеним функціоналом розповсюджуються за підпискою: Professional - від 45 $ на місяць, Enterprise - від 250 $ на місяць.   2) Qt Creator Qt Creator – ще одне досить зручне і швидке інтегроване середовище розробки C++, що пропонує цікаві можливості для розробника. Ця кросплатформна IDE має сучасний редактор коду C++, вбудований зручний графічний інтерфейс, дизайнер форм, інструменти навігації та багато іншого. Серед розробників багато хто обирає його за його API та бібліотеки, оскільки вони послідовні, деталізовані, зручні та гарно документовані. Qt Creator поставляється з повним набором інструментів розробника, які призначені для одночасного створення додатків і користувацьких інтерфейсів, а потім для подальшого їх розгортання в різних мобільних ОС і настільних ПК. Часто відзначають простоту та чуйність інтерфейсу. Він включає в себе зручний редактор коду з можливістю підсвічування синтаксису і автозаповненням, можливість створення інтерфейсу користувача використовуючи перетягування, інструмент візуального відлагодження та ін. Офіційний сайт: https://www.qt.io Особливості IDE Qt Creator: Доступні версії під Linux, macOS, Windows. Підтримувані компілятори: GCC / G++; MinGW; Linux ICC; Clang; Nim; QCC; MSVC. Доступні розширення, що дозволяють працювати з такими мовами, як Python, Ruby, Java, PHP та іншими. Плюси IDE Qt Creator: Наявність безкоштовної версії. Інтелектуальна система підказок. Можливість компіляції проектів для різних систем. Мінуси IDE Qt Creator: Платна версія від 459 $ на місяць. Безкоштовна версія має низку обмежень.   3) CLion Clion – це потужне і кросплатформне IDE для C і C++ від компанії JetBrains, яке включає сучасні стандарти C++, libc++ і Boost. Це IDE добре знає коди та спрощує рутину, дозволяючи зосереджуватися на основних речах розробки. Однією з його основних можливостей є рефакторинг, який дозволяє вам перейменовувати символи, зрушувати елементи вгору або вниз за ранжуванням, змінювати сигнатуру функції, а також гарантувати, що її автоматичний рефакторинг правильно генеруватиме необхідні зміни в коді. Інтегрований відлагоджувач аналізує та вирішує проблеми за допомогою дружнього користувацького інтерфейсу IDE з GDB / LLDB в якості бекенду. Більше того, він також віддалено зв'язується з нативними процесами чи відлагодженнями. Офіційний сайт IDE Clion - https://www.jetbrains.com/clion/ Особливості IDE Clion: Лише платні версії IDE. Підтримувані мови C і C++. Доступні версії під Linux, Windows, macOS. Підтримує такі компілятори: GCC / G++; MinGW; MSVC. Плюси IDE Clion: Зручні інструменти для розробки візуальних інтерфейсів. Зручні механізми відлагодження додатків. Можливості розширення функціоналу плагінами. Інструменти пошуку помилок у коді в потоковому режимі. Мінуси IDE Clion: Відсутня безкоштовна версія цього IDE. Річна підписка від 199 $.   4) Eclipse IDE Eclipse, заснована на платформі Eclipse, є однією з провідних IDE для розробників на C++ та C. Eclipse пропонує підтримку розробки проектів та кероване середовище розробки з різними наборами інструментів. Він також підтримує різні інструменти, сортування, навігацію за гіперпосиланнями, редактор коду з функцією підсвічування синтаксису, інструменти візуального відлагодження та багато іншого. Це безкоштовне ПЗ з відкритим вихідним кодом, що працює з усіма основними ОС, включаючи Windows, Mac OS X і Linux. Eclipse може похвалитися зручним інтерфейсом. Особливості IDE Eclipse: Працює на таких ОС: Windows, macOS, Linux. Працює з такими мовами: C, C++, Java, Perl, PHP, Python, Ruby та інші. Працює з такими компіляторами: GCC / G++; MinGW; Cygwin. Плюси IDE Eclipse: Простота як установки, так і застосування. Зручний механізм розроблення графічних інтерфейсів. Інструмент із відкритим вихідним кодом. Розповсюджується безкоштовно. Кросплатформність. Велика кількість доступних модулів розширення – багато розробників відзначають, що можливості модулів цієї IDE значно випереджають такі в інших середовищах розробки. Мінуси IDE Eclipse: Ряд розробників відзначають незручність використання механізмів автодоповнення під час написання коду.   5) Xcode Xcode – це повноцінна IDE, що включає набір інструментів для розробки, створена компанією Apple для написання ПЗ під macOS, iOS, WatchOS і tvOS. Xcode вважається найкращою IDE для Mac, будучи створеною розробниками самої операційної системи. Офіційний сайт IDE Xcode - https://developer.apple.com/xcode/ Особливості IDE Xcode: Працює з такими мовами, як AppleScript, C, C++, Java, Objective-C. Працює лише на macOS. Використовує Apple LLVM та GCC компілятори. Плюси IDE Xcode: Зручні інструменти для створення програмного забезпечення під комплекс платформ Apple. Механізми автодоповнення коду. Зручні інструменти для роботи із графічними інтерфейсами. Мінуси IDE Xcode: На ОС Windows та Linux ця IDE не працює.   6) Code::Blocks Code::Blocks або CodeBlocks – це IDE з відкритим вихідним кодом, що розповсюджується безкоштовно. Code::Blocks написана на C++ з використанням wxWidgets в якості інструментарію GUI. Code::Blocks – це IDE, що розширюється і налаштовується, яка працює на таких платформах, як Windows, Linux і macOS. Різний функціонал може бути доданий до цієї IDE шляхом встановлення або написання плагіну. Наприклад, завдяки таким плагінам доступні функції компіляції та відлагодження. Code::Blocks підтримує додавання різних, як готових, так і користувацьких плагінів. Розробники можуть легко налаштувати цю IDE під свої потреби, і навіть легко переміщатися інтерфейсом вкладок. Спочатку IDE Code::Blocks був створений для роботи з C++, але тепер ви також можете запускати програми на C та Fortran. Офіційний сайт IDE Code::Blocks - http://www.codeblocks.org/ Особливості Code::Blocks: Підтримує роботу з такими компіляторами: MingW / GNU GCC; MSVC++; Clang; Digital Mars; Borland C 5.5; Open Watcom. Повністю написаний C++; Працює на Linux, Mac та Windows; Підтримує такі мови: C, C++, Fortran; Плюси Code::Blocks: Вбудований відлагоджувач. Кросплатформний. Підтримка паралельного збирання. Є відкритим програмним забезпеченням. Повна підтримка точок зупинки. Інтегроване інтелектуальне підсвічування синтаксису. Досить чуйна спільнота. Можливість налаштування IDE розробниками під «себе». Мінуси Code::Blocks: Ця IDE погано підходить для розробки великих проектів.   7) NetBeans NetBeans – це одне з часто використовуваних розробниками інтегроване середовище програмування C++. Спонсорований компанією Oracle, проект IDE NetBeans був переданий у 2016 році до рук фонду Apache. На сьогоднішній день NetBeans поставляється з відкритим вихідним кодом. Написане на Java, це IDE має можливість працювати на всіх системах, які підтримують Java – Windows, Linux, macOS та Solaris. NetBeans IDE виглядає як інтерфейс із функцією перетягування, спільно зі списком шаблонів проектів. Використовувати NetBeans зручно для створення додатків C/C++ як з динамічними, так і зі статичними бібліотеками. Крім того, воно надає великий набір інструментів для програмістів на C/C++. NetBeans має багато плагінів, які можуть розширити можливості програмного забезпечення. Офіційний сайт NetBeans - https://netbeans.apache.org Особливості IDE NetBeans: Знаходиться під управлінням Apache Software Foundation. Підтримує такі мови: Java, HTML, HTML 5, C, C++ та інші. Працює на Windows, Linux, macOS і Solaris. Підтримується робота з такими компіляторами: Oracle Solaris Studio; GCC/G++; CLang / LLVM; Cygwin; MinGW. Плюси IDE NetBeans: Безкоштовне розповсюдження під ліцензією вільного програмного забезпечення. Зручний інтуїтивний інструмент створення графічного інтерфейсу GUI Builder. Велика кількість розширень. Кросплатформність. Інтелектуальне автозавершення коду. Велика спільнота. Мінуси IDE NetBeans: Користувачі відзначають тривалий запуск додатку. Ряд користувачів відзначають незручність роботи з дебагером.   Висновок Існує досить багато інтегрованих середовищ розробки на C++. Для вибору IDE під розробку на C++, як і будь-якого іншого інструмента розробника, справедливий індивідуальний підхід. Відштовхуючись від поточних завдань, базової ОС, мов, необхідних плагінів, вимог команди та інших, суто індивідуальних факторів розробки, вибір вами кращого середовища програмування C++ буде різним. Ми рекомендуємо обирати середовище розробки з нашого ТОП 7. Якщо ж ви хочете конкретну пораду для початківця – під Windows спробуйте почати розробляти із Visual Studio у безкоштовній версії Community. У якості безкоштовного середовища розробки C++ під Linux спробуйте Code::Blocks і NetBeans. Згадуючи вибір найкращого платного середовища розробки C++ для Linux і macOS, ми рекомендуємо спробувати тріальну версію платної IDE – CLion. У будь-якому випадку, якщо ви плануєте розробляти на C++ протягом тривалого часу, вибір головного інструменту навряд чи буде для вас остаточним. Пробуйте різні варіанти та стежте за нововведеннями і змінами. Розробникам-початківцям на C++ ми рекомендуємо ознайомитися з відео курсами ITVDN: C++ для початківців. C++ Essential. C++ Advanced.
Тренди веб-розробки на 2019 рік

Автор: Софія Меренич

Готовы ли вы к внедрению инноваций в ваши веб-приложения в 2019 году? Представляем вам последние тренды веб-разработки, которым, безусловно, стоит следовать! Стандарты веб-разработки часто меняются быстрее, чем их успевают внедрять. Чтобы всегда быть на шаг впереди, важно сосредоточиться на тенденциях, методах и подходах, которые только набирают популярность. Мы проанализировали тренды в разных отраслях, чтобы сформировать этот окончательный список тенденций в веб-разработке на 2019 год. В качестве бонуса, вам также представлен топ лучших стеков веб-технологий, достойных вашего внимания в следующем году. Не будем тратить время на долгие вступления. Все тренды здесь:   Голосовой поиск В настоящее время мы наблюдаем начало эры голосового поиска. Каждый смартфон уже оснащен цифровым голосовым помощником (Siri для iPhone, Google Assistant для телефонов на базе Android). Более того, набирают популярность умные колонки с искусственным интеллектом. В чем причина такого внимания к голосовым интерфейсам? Простота использования. Голосовое общение - это то, что нам не нужно изучать. Таким образом, дети и пожилые могут взаимодействовать с голосовыми интерфейсами без каких-либо сложностей в  обучении. Доступность. Цифровые голосовые помощники уже стали привычной функцией смартфона. Интеллектуальные колонки пока не так распространены, но цена от 50 долларов - отличная предпосылка для экспансии. К 2020 году ожидается, что 50% всех поисковых запросов будут осуществляться посредством голоса. Внедрение голосового поиска сейчас является одной из основных тенденций в e-commerce. Тем не менее, это также применимо к любому другому бизнесу в Интернете. Если вы хотите, чтобы ваше веб-приложение было найдено, оптимизируйте его для работы с голосовым поиском как можно скорее. Также мы рекомендуем рассмотреть возможность разработки собственного приложения для умных колонок. Это даст вам еще один канал для формирования лояльной аудитории и увеличения продаж.   WebAssembly   При создании веб-приложения производительность приложения обычно является компромиссом с кроссплатформенностью. Ограничения JavaScript делают тяжелые вычисления медленными, и это существенно влияет на производительность для пользователя. Именно поэтому большинство популярных игр и мощных приложений доступны только в качестве десктопного приложения. Формат WebAssembly может быть применен, чтобы изменить эту ситуацию. Этот новый формат ориентирован на нативную производительность среди веб-приложений. С помощью WebAssembly, код на любом языке программирования может быть скомпилирован в байт-код, который запускается в браузере. Код WebAssembly выполняется быстрее, чем код на JavaScript. В результате использования WebAssembly, вы сможете писать критически важные для приложения части на наиболее подходящем языке (C / C ++ / C # / Rust / Kotlin и т. Д.). WebAssembly сам позаботится о выполнении кода в браузере. Нативные приложения теперь можно запускать сразу в браузере. Это означает доступ к большему количеству пользователей, благодаря предложенной им сопоставимой с десктопной производительностью в сети без дополнительных затрат на разработку! Основная проблема с WebAssembly заключается в том, что еще не все браузеры поддерживают его. Однако скоро это изменится. Веб-приложения становятся более мощными с WebAssembly. Эту технологию определенно стоит попробовать. Машинное обучение в веб-разработке Технологии искусственного интеллекта, включая машинное обучение, уже давно влияют на наше поведение в Интернете, хотя, зачастую, это происходит незаметно для нас. Это основной момент применения машинного обучения – улучшение взаимодействия пользователя с приложением. Машинное обучение - это способность программного обеспечения повышать производительность без непосредственного участия разработчиков. По сути, программное обеспечение анализирует входящие данные, выявляет закономерности, принимает решения и улучшает свою работу. К примеру, компания Airbnb применила машинное обучение для настройки результатов поиска потенциальными гостями мест поселения. С помощью специфического алгоритма, компания хотела повысить вероятность того, что владелец жилья примет запрос от потенциального гостя. Алгоритмы машинного обучения должны были анализировать решения о принятии запросов каждого владельца. Пользуясь итогами такого анализа, компания смогла предоставить клиентам результаты поиска, которые стали полезными им с большей вероятностью. A / B-тестирование показало увеличение конверсии на 3,75%. В результате все запросы от пользователей Airbnb теперь обрабатываются в соответствии с этим алгоритмом, который повышает удовлетворенность клиентов и увеличивает доход. Отличный пример внедрения, не правда ли? Но это еще не всё! Применение естественного языка и распознавания изображений могут улучшить общие впечатления пользователя от использования сервиса. Машинное обучение позволяет компьютеру правильно интерпретировать данные и принимать обоснованные решения. Машинное обучение уже используется в веб-приложениях в различных отраслях, таких как здравоохранение, финансы, образование, сельское хозяйство и т. д. Эта технология предлагает существенные усовершенствования, которые было бы трудно достичь без технологий ИИ. Машинное обучение становится важной частью любого веб-сервиса. Важно, чтобы и вы попробовали найти применение для этой технологии в своих сервисах! Анализируйте поведение посетителей вашего веб-сайта и настраивайте под них отображаемый контент. Они никогда не узнают, что вы применяете к ним некий алгоритм, но их возросшая удовлетворенность контентом приведет к увеличению их вовлеченности и к увеличению конверсии! Машинное обучение может стать вашим секретным оружием, чтобы переиграть ваших конкурентов!   Безопасность данных Чем больше данных обрабатывает ваше веб-приложение, тем больше оно привлекает внимание киберпреступников. Они стремятся нарушить работу ваших сервисов и украсть данные ваших пользователей или внутреннюю информацию компании. Это может дорого обойтись и вам, и вашей репутации. Безопасность вашего веб-сервиса должна стать вашим главным приоритетом. Итак, чтобы сохранить пользовательские данные в 2019 году, следуйте этим советам: Никогда не пренебрегайте тестированием безопасности. Тестирование безопасности должно проводиться уже на этапе разработки, благодаря чему оно может предотвратить утечку данных. Каждое изменение в вашем веб-приложении должно быть явно протестировано. Используйте инструменты мониторинга сайта. Алгоритмы анализа поведенческих факторов помогут вам постоянно отслеживать все запросы, а также выявлять и квалифицировать подозрительные действия. Своевременное выявление угрозы позволит вашей команде вовремя среагировать и защитить веб-приложение от преступников. Тщательно выбирайте сторонние сервисы. Программное обеспечение SaaS (англ. software as a service — программное обеспечение как услуга, прим. переводчика) становится все более популярным, поскольку делает разработку приложений проще и быстрее. Однако вы должны убедиться, что поставщик услуг, с которым вы работаете, заслуживает доверия. Шифрование конфиденциальных данных. Даже если преступник сможет получить доступ к вашей базе данных, он не сможет извлечь какую-либо пользу из конфиденциальных данных, хранящихся там в зашифрованном виде.     Блокчейн в веб-разработке Несмотря на то, что блокчейн утратил часть доверия к себе из-за нестабильности обменных курсов криптовалют, мы должны признать - эта технология уже бесповоротно вошла в нашу жизнь. И хотя эта технология впервые была применена в сфере настольных компьютеров - блокчейн уже уверенно проникает и в WEB. Blockchain кошельки переместились с нативных настольных приложений в веб-приложения. Они идеально подходят для хранения небольших сумм криптовалют и предлагают улучшение удобства использования. Поскольку популярность веб-кошельков продолжает расти, вам следует рассмотреть и применение этой сферы технологий. Другая реализация технологии блокчейна называется dapps или децентрализованные приложения. Уникальная особенность таких приложений - хранение логики сервера и базы данных в блокчейне. В результате ни одна организация не может контролировать приложение (например, Facebook, Google и т. д.). Dapps изначально работали как настольные приложения. Но в настоящее время они тоже переходят в WEB. Во всем мире сеть стремится к децентрализации, поэтому популярность dapps, скорее всего, возрастет. Ethereum, самая популярная платформа с открытым исходным кодом для блокчейн-проектов, выпустила библиотеку JavaScript web3.js. Эта библиотека позволяет легко разрабатывать клиентов, которые взаимодействуют с блокчейном Ethereum различными способами, такими как: создание интеллектуальных контрактов, запись и чтение данных из смарт-контрактов, передача криптовалюты между двумя учетными записями и многое другое. Библиотека Web3 также доступна для других языков программирования, включая Python, Java, PHP, Swift, Scala и т. д. Таки образом создание децентрализованных приложений с удобными веб-интерфейсами становится проще. Очевидно, что пик ажиотажа вокруг технологии блокчейна уже прошел. Но это значит только, что пришло время приступить к серьезной разработке мощных решений, которые смогут использовать большинство преимуществ этой технологии. Может быть, именно ваш проект станет следующим ньюсмейкером?     Прогрессивные веб-приложения (PWA) и ускоренные мобильные страницы (AMP) Google отдает приоритет тем веб-приложениям, которые быстро загружаются на мобильных устройствах. Именно поэтому вам следует рассмотреть возможность внедрения PWA или AMP, которые являются уникальными технологиями, сокращающими время загрузки веб-страницы. Прогрессивное веб-приложение (PWA) - это веб-страница, которая воспроизводит привычный мобильный интерфейс. Это технология работает быстро, может работать как постоянно онлайн, так и с плохим подключением к интернету, и является относительно дешевой. PWA поддерживает взаимодействие, позволяя пользователям наслаждаться высококачественными возможностями приложений, даже не осознавая, что они используют их через браузер. Приложения E-commerce являются частым примером использования этой технологии. Ускоренная мобильная страница (AMP) работает только для статического контента, но загружается быстрее, чем обычный HTML. AMP пропускает все модные элементы и отображает только важную информацию - текст, изображения и т. д. Этот подход отлично подходит для блогов и новостных изданий. Нужно ли вам применять PWA или AMP, зависит от вашего конкретного случая. Тем не менее, вам следует начать рассматривать эти технологии прямо сейчас. Наряду с улучшением качества предоставляемой услуги, у вас есть шанс значительно поднять свой рейтинг в результатах поиска.     Интернет вещей Какие устройства вы в основном используете для доступа в интернет? Скорее всего, это ноутбук и смартфон. Тем не менее, сегодня подключаться к Интернету может гораздо большее количество устройств. Да, мы имеем в виду Интернет вещей или IoT, для краткости. В настоящее время многие устройства оснащаются экраном. Благодаря такой тенденции, веб-приложения, оптимизированные для отображения данных на смарт-часах, холодильниках, интеллектуальных колонках и т. д., станут более востребованными. Адаптированность к мобильным интерфейсам больше не является трендом, уже являясь обязательным элементом работы приложения. Тенденция 2019 года - адаптация веб-приложений для маленьких экранов. Motion UI Motion Design - один из главных трендов веб-дизайна будущего года. Минималистичный дизайн, в сочетании со сложными взаимодействиями, выглядит стильно и привлекает внимание пользователя. Переходы в хедере страницы, удобные подсказки, анимированные диаграммы, фоновая анимация и модульная прокрутка. Эти, и многие другие элементы, помогут вам отобразить свой уникальный стиль и завлечь пользователя, улучшая поведенческие факторы и помогая вашему веб-приложению занять более высокое место в результатах поиска.     Стэк технологий для разработки веб-приложений   Крайне важно работать с последними проверенными технологиями. Таким способом вы сможете гарантировать, что разработанное программное обеспечение соответствует требованиям рынка и остается актуальным в течение нескольких лет. А вот и самые популярные технологии 2019 года:   Технологии front-end   Ангуляр Впервые мы услышали об AngularJS в 2010 году. Уже через 6 лет, в 2016 году, фреймворк был полностью переписан и вышел под названием Angular 2. На конец 2018 года последней стабильной версией является Angular 7. Angular - это фреймворк Model-View-Controller (MVC). Три отдельных компонента позволяют писать хорошо структурированный и простой в поддержке код. Двунаправленная привязка данных удобна для простых приложений - любые изменения в модели будут немедленно внедрены в представление и наоборот. Однако если вы работаете над сложным проектом, однонаправленная привязка данных сэкономит ваше время и ресурсы. Чтобы использовать Angular максимально эффективно, вам придется использовать Typescript. Вам также следует помнить, что фреймворк работает только с обычным DOM, что создает некоторые ограничения. Стек MEAN – является одним из самых популярных. Он включает в себя: MongoDB - база данных; Express.js - веб-фреймворк; Angular – фронтэнд фреймворк; Node.js – бэкенд. Очевидным преимуществом этого стека является то, что все его компоненты используют JavaScript. В результате собрать команду разработчиков (или нанять одного разработчика full-stack JavaScript) не будет проблемой.   React.js В описанном стеке Angular часто заменяется на React - библиотеку Javascript. Стек MERN является относительно молодым, но растущая популярность React поспособствовала быстрому росту его популярности. React превосходит по своим возможностям Angular благодаря виртуальному DOM, который позволяет быстрее и проще вносить изменения. Однако, поскольку React является библиотекой, а не фреймворком, что ограничивает основные функциональные возможности, разработчикам приходится работать со сторонними сервисами. Также стоит упомянуть, что React использует JSX - модификацию JavaScript, которая обеспечивает бесшовную совместимость компонентов. Таким образом, знание JSX является предпочтительным, если вы хотите максимально использовать стек MERN и особенно React.   Vue.js Vue.js является более молодым JS фреймворком, но за последние несколько лет он продемонстрировал невероятный рост популярности. Частично это связано с тем, что это облегченное решение. По сравнению с монолитом, подобным Angular, он предлагает только базовую функциональность «из коробки». Используя сторонние сервисы, эта функциональность расширяется. В результате нет необходимости обрабатывать избыточный код, как в случае с Angular. Как вы, вероятно, догадались, Vue.js также используется вместе с MongoDB, Express.js и Node.js как часть стека MEVN.     Технологии Back-end: Как правило, сложно выбрать между пользовательской конфигурацией бэкенд разработки и backend-as-a-service. Оба варианта имеют свои плюсы и минусы, и выбор зависит от деталей проекта. Мы не будем сейчас вдаваться в подробности, так как существуют отдельные статьи, сравнивающие mBaaS и пользовательский бэкенд - ознакомьтесь с ними, чтобы узнать больше по этой теме. Здесь мы рассмотрим самые популярные решения для пользовательского бэкенда.   Node.js Node.js является важным компонентом всех вышеописанных стеков веб-разработки. Это среда выполнения приложений, которая используется для создания приложений на стороне сервера. Работа с Node.js требует знания JavaScript. По этой причине он часто используется в стеках вместе с инфраструктурой внешнего интерфейса JS.   Django Django - это веб-фреймворк Python. Он может использоваться в основном с любым фронтенд фреймворком (включая описанные выше). Он также является хорошим решением для любых типов веб-сайтов из-за множества доступных сторонних пакетов. С ростом популярности Python стоит рассмотреть Django для серверной части вашего веб-приложения.   Laravel PHP -  широко используемый язык программирования бэкенда, а Laravel - один из самых популярных PHP фреймворков. Laravel отлично работает с Vue.js. Тем не менее, Angular и React также хорошо подходят для разработки веб-приложений с Laravel.   Заключение Попытки угнаться за последними трендами могут показаться излишне сложными, так как тренды меняются очень быстро. Но почему бы не попробовать? Следуя последним тенденциям в веб-разработке, вы сможете порадовать своих пользователей контентом мирового уровня, повысить рейтинг ваших веб-приложений и открыть для своих услуг новые рынки! В течение следующих нескольких лет голосовой поиск укрепит свои позиции и заставит поставщиков услуг адаптироваться к новой реальности. Подходя к этому с умом, вы можете оказаться в числе первых компаний, которые обращаются к вашим клиентам с помощью голосового поиска. Звучит заманчиво, не правда ли? Безопасность пользовательских данных уже давно вызывает сомнения. Это проблема, которой нельзя пренебрегать, если вы хотите быть лидером рынка. Блокчейн - это технология со многими приложениями в веб-разработке, так почему бы не исследовать ее возможности на ранней стадии ее появления? Говоря в общем, каждый тренд 2019 года заслуживает вашего внимания. Некоторые из них будут актуальными в течение нескольких лет, а некоторые станут обыденностью уже через несколько месяцев. Так что не стесняйтесь начинать реализовывать их как можно скорее. Автор: София Меренич, технический и бизнес писатель. Источник
Асинхронне програмування на JavaScript

Автор: Дмитро Охріменко

План: 1. Різниця між синхронним та асинхронним кодом 2. Багатозадачність процеси й потоки, у чому різниця 3. Особливості багатозадачності в JavaScript 4. Асинхронні операції на практиці HTTP-запит як найпоширеніший кейс 5. Підходи до написання асинхронного коду: Promise    Async/Await Observable 6. Практичні поради Різниця між синхронним та асинхронним кодом Для початку давайте визначимо ці два терміни: Синхронний код - це код, який виконується послідовно, функція за функцією. Асинхронний код - код, який може виконуватися паралельно: наступна функція запускається, не чекаючи завершення попередньої. Щоб провести аналогію з реального життя, уявімо кухаря. Якщо кухар працює синхронно, то поки він не завершить приготування однієї страви, не переходить до наступної. Але це неефективно й призводить до втрати часу. Якщо ж кухар діє асинхронно, то поки м’ясо запікається в духовці, а на плиті закипає вода, він нарізає овочі. Тобто він один, але не стоїть без діла - виконує інші задачі, поки щось готується саме. Уявімо, що кухар - це процесор. А запікання м’яса в духовці - це завантаження файлу з мережі. Кухар може просто стояти й дивитись, як м’ясо готується. А може нарізати овочі, перевіряти, чи не з’явились нові замовлення, або скролити стрічку в соцмережі. Так само і з програмами: поки мережева карта завантажує файл, процесор не мусить чекати - він може малювати інтерфейс, оновлювати прогрес-бар чи виконувати обчислення у фоні. Але для цього потрібно правильно написати код - так, щоб він міг працювати асинхронно. Код який виконується синхронно ```js console.log("Початок"); console.log("Дія"); сonsole.log("Кінець"); ``` Результат: Початок Дія Кінець   Код який виконується асинхронно. і ``js console.log("Початок"); setTimeout(() => { // за допомогою setTimeout ми відкладаємо запуск коду на певний час   console.log("Дія через 2 секунди"); }, 2000); сonsole.log("Кінець"); ``` Результат: Початок Кінець Дія через 2 секунди Це не та багатозадачність, як у деяких інших мовах програмування. Тут не використовуються додаткові потоки, а все працює завдяки механізму подій. Але про це детальніше дал Багатозадачність: процеси й потоки, у чому різниця Багатозадачність в операційній системі - це можливість запускати та керувати кількома задачами одночасно. Наприклад, працювати в браузері, слухати музику, завантажувати файл і паралельно редагувати код у Visual Studio. На практиці процесор дуже швидко перемикається між усіма цими задачами, створюючи ілюзію одночасного виконання. Якщо процесор багатоядерний - деякі задачі справді можуть виконуватись паралельно. Багатозадачність тісно пов'язана з двома важливими поняттями - процесами та потоками. Процес (process) - це окремий екземпляр програми у пам'яті, який має власні ресурси: виділену область оперативної пам'яті, дескриптори файлів, змінні оточення тощо.  Потік (thread) - це одиниця виконання всередині процесу. Потоки одного процесу працюють незалежно, але мають спільний доступ до пам'яті та ресурсів процесу. Процеси дозволяють запускати різні програми одночасно - наприклад, Google Chrome, Visual Studio Code і т.д.  Потоки дають змогу виконувати кілька задач усередині однієї програми. Наприклад, у Visual Studio Code один потік відповідає за оновлення інтерфейсу, інший перевіряє помилки в коді, ще один формує підказки під час написання. Це, звісно, спрощений приклад - у реальності VS Code використовує ще й окремі процеси для розширень і мовних серверів. Операційна система керує як процесами, так і потоками. Вона розподіляє процесорний час між ними, ставить у чергу, може призупиняти виконання або відновлювати його за потреби. Давайте трохи адаптуємо наш приклад з кухарем із попереднього посту. Уявімо, що процес - це ресторан, а потік - це кухар. Ресторан має все необхідне для приготування їжі: кухонне приладдя, продукти, рецепти (це можна розглядати як пам’ять і доступ до інших ресурсів). Кухар читає рецепт і, використовуючи ресурси ресторану, готує страву - так само, як потік виконує інструкції нашої програми, використовуючи ресурси процесу. Якщо ресторан хоче готувати кілька страв одночасно, йому потрібно більше кухарів, які працюють паралельно на одній кухні. Аналогічно, якщо програма повинна виконувати кілька задач одночасно - завантажувати файли, обробляти введення, оновлювати інтерфейс - вона може використовувати кілька потоків. Коли ми створюємо програму і хочемо зробити її зручною для користувача, а також ефективною з точки зору використання ресурсів, які виділяє операційна система на процес, ми іноді починаємо використовувати потоки та прийоми багатопотокового програмування. Це велика окрема тема, і ми її зараз чіпати не будемо. Одна з причин - у JavaScript немає прямого доступу до потоків. Уточнення. Якщо ви хочете використовувати JavaScript і все ж таки працювати з потоками - у вас є Web Workers:  https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers  А якщо JavaScript виконується не в браузері (наприклад, у Node.js), тоді можна використовувати модуль `worker_threads`. Але варто розуміти, що це не частина стандарту мови, а можливість середовища виконання. Додаткові корисні ресурси по цій темі: https://www.youtube.com/@CoreDumpped - канал з короткими відео про те як працює комп'ютер. Modern Operating System by Andrew Tanenbaum - принцип побудови та роботи операційних систем (може бути викликом для новачка, але нормально як для технічної книжки) Особливості багатозадачності в JavaScript JavaScript працює в одному потоці - це означає, що в будь-який момент часу виконується лише один фрагмент коду. Увесь код, який ми пишемо, виконується у call stack: це структура, в яку потрапляють усі функції, що викликаються. Якщо одна з функцій виконується довго (наприклад, важке обчислення), усі інші задачі - включно з обробкою кліків, рендерингом чи відповідями від сервера - будуть чекати, поки call stack не звільниться. Щоб не блокувати цей єдиний потік, браузер надає асинхронні API (setTimeout, fetch, Web API). Коли ми викликаємо, скажімо, fetch(), у стек додається лише короткий виклик цієї функції. Власне мережевий запит виконується в окремому потоці, який створює браузер. Тобто, один потік виконує задачі які є у call stack, а інший потік чекає поки відповідь поверне сервер. Але асинхронна операція колись завершиться і треба механізм який віддасть нашому головному потоку результат роботи іншого потоку. Коли це стається колбек або проміс‑резолвер не додається одразу у call stack. Спершу він потрапляє до черги подій (task queue). За роботою черги стежить event loop. Його правило просте - поки стек порожній дістати першу задачу із черги і покласти у стек. Так ми досягаємо псевдобагатозадачності: основний потік виконує короткі шматки коду послідовно, а довгі операції «живуть» поза стеком. Коли довгі операції завершуються вони формують чергу задач, які треба виконати а event loop ці задачі закидає до стеку, коли call stack стає порожнім. Це максимально спрощене пояснення, і без візуалізації може здатися складним. Якщо хочете краще зрозуміти, дуже раджу подивитись відео Jake Archibald — "In The Loop" на YouTube (англійською).  https://www.youtube.com/watch?v=8aGhZQkoFbQ Або приходьте на мій курс JavaScript Поглиблений, де ми розбираємо це на практиці.  Також корисна стаття на MDN, де ці процеси описані докладніше. Асинхронні операції на практиці: HTTP-запит як найпоширеніший кейс Один з прикладів асинхронної операції - це запит на сервер через HTTP-протокол. Якщо організовувати запит через JavaScript у браузері без використання React, Angular або Vue.js, то це можна зробити за допомогою: fetch XMLHttpRequest Спеціалізована бібліотека, наприклад, Axios Ось так буде виглядати простий код написаний на fetch ```js fetch('https://jsonplaceholder.typicode.com/users')   .then(res => res.json())   .then(data => console.log(data)); ``` А так на axios (axios одразу повертає розпарсений JSON як response.data, на відміну від fetch, де потрібно викликати .json() вручну) ```js axios.get('https://jsonplaceholder.typicode.com/users')   .then(response => console.log(response.data)); ``` Якщо розглянути саме fetch то ось що відбулося під капотом: fetch створює HTTP запит вказавши HTTP метод, заголовки, тіло тощо Цей запит передається у вбудовану систему Web API - окрему від JavaScript середу, яка працює в іншому потоці. JavaScript не чекає відповіді - основний потік продовжує виконувати інший код fetch повертає Promise - об'єкт, що представляє асинхронну операцію, результат якої з’явиться пізніше Коли відповідь від сервера приходить, Web API кладе callback в чергу. Event Loop перевіряє, чи call stack порожній, і виконує цю мікрозадачу. Така поведінка дозволяє браузеру одночасно виконувати інші задачі, не чекаючи завершення запиту. Про використання асинхронного коду в JavaScript є [безкоштовний урок на YouTube](https://www.youtube.com/watch?v=cvR1EQ1R0EQ) Також більше про синтаксис Promise можна дізнатися в уроці [Асинхронний код. Promise](https://itvdn.com/ua/video/javascript-essential-ua/js-promise-ua) на ITVDN, а детальніше про варіанти організації такого коду буде написано далі. Підходи до написання асинхронного коду Складність роботи з асинхронним кодом полягає в тому, що обробка результату операції відбувається не відразу, а через певний час після її запуску. Ми ініціюємо асинхронну операцію й можемо виконувати інші завдання, але все одно маємо якось дізнатися про її завершення та обробити результат. Проблема в тому, що в цей момент програма вже виконує інші дії. Тому для обробки асинхронних операцій використовується push-модель взаємодії: отримувача даних (наш код) викликає провайдер даних - окремий механізм, який керує асинхронною операцією. По суті, розробнику потрібно відреагувати на подію завершення асинхронної операції. Для цього існує кілька підходів: callback-функція Promise async/await (синтаксичний цукор над Promise) Observables Використання функцій зворотнього виклику (callback) Почнемо з callback-функцій. Це найпростіший підхід, але він може призвести до заплутаного коду, особливо коли одна асинхронна операція запускає іншу, і так утворюється ланцюг. Уявімо, що маємо функцію downloadImage(url, callback), яка завантажує зображення асинхронно, не блокуючи основний потік. Перший параметр - це адреса зображення, яке потрібно завантажити, а другий - функція, яку буде викликано після завершення завантаження. При цьому саме зображення буде передане як параметр у callback. Приклад використання: ```js downloadImage(url1, image => document.body.append(image)) ``` На перший погляд усе просто. Але якщо потрібно завантажити кілька зображень послідовно, код стає менш зрозумілим: ```js downloadImage(url1, image => {             document.body.append(image);             downloadImage(url2, image => {                         document.body.append(image);                         downloadImage(url3, image => {                                     document.body.append(image);                         })             }) }); ``` Така вкладена структура швидко ускладнюється, особливо якщо замість одного рядка з DOM-змінами з’являється додаткова логіка. Подібний стиль називають "Pyramid of Doom", і його краще уникати. Один зі способів спростити обробку асинхронних викликів - це використання Promise. Використання Promise Promise - це об’єкт, який представляє асинхронну операцію. У перекладі з англійської promise означає «обіцянка». Можна уявити, що це обіцянка від браузера надати в майбутньому або результат операції, або помилку, пов’язану з її виконанням. Приклад використання: перепишемо попередню функцію downloadImage, щоб вона повертала Promise. ```js let promise = downloadImage(url1); promise.then(image => document.body.append(image)); ``` Тут ми все одно використовуємо callback-функцію, але передаємо її вже в метод .then() об’єкта promise. Це важливий момент: тепер асинхронна операція має об’єктне представлення, яке можна передавати як параметр у різні частини коду; можна будувати ланцюжки промісів, позбуваючись вкладеності, яка виникала з callback. Приклад: ```js downloadImage(url1)                          // отримуємо проміс .then(image => {                             // вказуємо що робити коли promise перейде в стан resolved             document.body.append(image);             return downloadImage(url2);                // виконуємо метод, який повертає promise }) .then(image => {                             // результат роботи попереднього промісу передається як значення             document.body.append(image);             return downloadImage(url3); }) .then(image => {             document.body.append(image); }); ``` Тепер код виглядає лінійним і набагато зручнішим для супроводу. У прикладах вище ми не розглядали, як саме створюється Promise, адже важливо зрозуміти мотивацію використання цих об’єктів. Тим більше, що більшість API браузера вже повертають готові проміси. Наприклад: ```js fetch('<https://jsonplaceholder.typicode.com/users>')   .then(res => res.json()); ``` Якщо хочете детальніше розібратися зі створенням Promise вручну - перегляньте документацію на MDN або мій відео урок на ITVDN. Async/await Супроводжувати синхронний код завжди простіше, ніж асинхронний. У 2012 році в мові C# з’явився синтаксичний цукор, який значно спростив роботу з асинхронними операціями: замість вкладених callback можна було використовувати послідовний синтаксис з новими ключовими словами async та await. Згодом цю концепцію перейняли й інші мови програмування, зокрема Python та JavaScript. В JavaScript підтримку async/await додали у 2017 році. Призначення ключових слів async - додається до функції та вказує, що вона завжди повертає Promise. await - використовується перед об’єктом-промісом, щоб "дочекатися" результату перед виконанням наступних рядків коду. Перепишемо попередній приклад із завантаженням зображень, використовуючи async/await: ```js let image = null;   image = await downloadImage(url1); document.body.append(image);   image = await downloadImage(url2); document.body.append(image);   image = await downloadImage(url3); document.body.append(image); ``` Тепер код виглядає як звичайний синхронний: немає вкладених callback, усе читається рядок за рядком. Можна подумати, що await "зупиняє" виконання, очікуючи на результат промісу. Насправді ж код не блокує основний потік - під капотом він перетворюється на машину станів, де кожен стан описує дію до або після await. Ще одна перевага async/await - знайомий синтаксис для обробки помилок: ```js try {             let image = null;               image = await downloadImage(url1);             document.body.append(image);               image = await downloadImage(url2);             document.body.append(image);               image = await downloadImage(url3);             document.body.append(image); } catch (ex) { // обробка помилки } ``` У результаті асинхронний код виглядає так само зрозуміло, як і синхронний, що значно спрощує його супровід. Observable Observable - це ще один підхід до організації асинхронного коду. Назва походить від однойменного патерна проєктування (Observer pattern), який описує створення об’єктів, за якими можна «спостерігати», отримуючи від них сповіщення. Тобто це реалізація подієвої моделі за допомогою ООП. У сучасному JavaScript ця ідея пішла далі й стала основою реактивного програмування та бібліотеки RxJS. Якщо Promise представляє одне майбутнє значення (успішне або помилкове), то Observable - це потік значень, які можуть з’являтися з часом. Можна уявити: Promise - це одна посилка, яку ви отримаєте в майбутньому; Observable - це підписка на журнал, нові випуски якого надходитимуть регулярно. Щоб створити Observable, використовують конструктор або готові оператори RxJS. Наприклад, функція downloadImages(urls) може завантажувати кілька картинок і відправляти їх «у потік» по мірі завантаження: ```js import { Observable } from 'rxjs';   function downloadImages(urls) {   return new Observable(subscriber => {     urls.forEach(url => {       downloadImage(url, image => {         subscriber.next(image); // надсилаємо картинку у потік       });     });     subscriber.complete(); // повідомляємо, що потік завершено   }); } ``` Щоб використати Observable, на нього треба підписатися за допомогою subscribe: ```js downloadImages([url1, url2, url3])   .subscribe({     next: image => document.body.append(image), // що робити з новим значенням     error: err => console.error(err),           // обробка помилок   }); ``` Переваги Observable працюють із потоком даних, а не з одним результатом; підтримують підключення операторів трансформації (фільтрація, мапінг, комбінування потоків); можна легко скасувати виконання (відписатися від потоку). Нижче приклад обробки даних через оператори. В RxJS оператори підключаються через метод pipe: ```js import { filter, map } from 'rxjs/operators'; downloadImages([url1, url2, url3])   .pipe(     filter(image => image.width > 100), // пропускаємо лише великі картинки     map(image => {       image.classList.add('highlight');       return image;     })   )   .subscribe({     next: image => document.body.append(image),     error: err => console.error(err),     complete: () => console.log('Готово')   }); ``` Таким чином, як і у випадку з Promise, можна будувати ланцюжки обробки. Але Observable значно гнучкіші: вони дозволяють працювати не лише з одним значенням, а з динамічною послідовністю даних у часі. Для глибшого занурення рекомендую офіційний гайд Observable на RxJS.dev. та відео уроки Observables. Частина 1, та Observables. Частина 2[1]  Практичні поради по работі за асинхроним кодом Не змішуйте підходи без потреби Якщо почали писати з async/await, не вставляйте всередину .then() без особливої причини. Це ускладнює читання. Обробляйте помилки Використовуйте try/catch для async/await або .catch() для Promise. У випадку Observable завжди додавайте обробку error у subscribe(). Скасовуйте непотрібні операції Для Observable використовуйте unsubscribe(), коли потік більше не потрібен. Для fetch можна застосувати AbortController, щоб зменшити навантаження й уникнути витоків пам’яті. Уникайте "Pyramid of Doom" Замість вкладених callback застосовуйте Promise, async/await або Observable. Використовуйте паралельне виконання Якщо операції незалежні, запускайте їх одночасно через Promise.all(). Ізолюйте логіку обробки Розділяйте завантаження даних та маніпуляції з DOM. Це спростить тестування й повторне використання коду. Логуйте стан і помилки Під час розробки виводьте у консоль ключові події асинхронних операцій, щоб відстежувати їх послідовність. Пам’ятайте про event loop Розуміння різниці між мікрозадачами й макрозадачами допоможе прогнозувати порядок виконання коду. Перевіряйте сумісність середовища Деякі API можуть бути відсутні у певних середовищах (наприклад, fetch у Node.js доступний лише починаючи з версії 18).
Notification success