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

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

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

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

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

Результати пошуку за запитом: курс - практикум по frontend разработке*
Страх профнепридатності та професійного вигоряння

Автор: Дмитро Хорошилов

Введение  Абсолютно все чего-нибудь боятся, это заложено в наших генах и от этого никуда не уйдешь. У каждого из нас есть свои страхи, кто-то открыто их признает и борется с ними, у кого-то они живут в тайных уголках души. Но порой бывают ситуации, когда они выбираются наружу и одолевают нас, вот тогда мы и пытаемся найти пути избавления от них. Казалось бы, разработчиков это должно касаться в меньшей степени, при возникновении бага в приложении еще никто не умирал. Но и при такой непыльной работе в умах начинающих и неопытных девелоперов рождаются страхи – как мнимые, так и вполне реальные, с которыми стоит бороться. Одним из самых распространенных страхов  является страх профнепригодности и профессионального выгорания. Далее в этой статье мы разберем по полочкам основные причины его возникновения и способы борьбы с ними. На сегодняшний день IT-сфера является самой динамичной и постоянно развивающейся, и во избежание профнепригодности вам нужно развиваться вместе с ней. С проблемой профнепригодности мы сталкиваемся еще со студенческой скамьи. Не успел закончить университет и получить диплом, как твоя специальность утратила популярность и ты остался на обочине индустрии с дипломом о высшем образовании в сфере, не имеющей дальнейших перспектив в развитии. Если ты начинающий разработчик, самостоятельно выучивший пару-тройку технологий или прошедший специализированные курсы, который не применял полученные навыки и знания в реалиях суровых будней, то, скорее всего, в первое время, при приеме на работу ты впадаешь в ступор. Ты еще не успел понять архитектуру проекта, все используемые технологии, шаблоны и их связки, и ты просишь немного времени на так называемую адаптацию, но после нее ясность не приходит. У тебя начинает накатываться снежный ком, и ты опять в яме, оставшись один на один со своими вопросами. Когда же ты уже опытный разработчик, тебе может показаться, что достаточно того, что тебе необходимо попросту справляться со своими должностными обязанностями, коммитить код и закрывать таски в назначенные сроки. Но ты как никто другой должен понимать, что, не прочитав о той или иной новой технологии, не использовав новую программу или технологию, ты как разработчик теряешь стоимость на рынке. Так как молодые и зубастые девелоперы через месяц, могут занять твое место, показав себя более ценными сотрудниками. Касательно профессионального выгорания все довольно-таки просто. Ему подвержен каждый и основная причина такой беды – застой и рутина на работе, отсутствие новых интересных тасков, однотипность поставленных задач. Начинающие IT-специалисты понимают это лучше других, поскольку попав на работу на позицию Trainee или Junior Developer на них сбрасывается масса тасков, накопившихся в компании, которые более или менее опытные разработчики не хотят или попросту ленятся делать. А молодежь, наслышанная о невероятных возможностях IT сферы, остается разочарованной данным положением вещей и через небольшой промежуток времени ищет другие варианты реализации себя, как специалиста. Довольно часто выгоранию подвержены фрилансеры, уставшие от однообразности задач, предлагаемых заказчиками. Потребности рынка в новых уникальных программах и сайтах очень малы, поэтому основное количество работы не предполагает особого творчества. Тебя затягивает рутина и интерес пропадает. Распространенной причиной профессионального выгорания является осознание бесцельности и ненужности своей работы. После нескольких месяцев упорной работы над проектом, перелопатив тонны кода и исправив не меньше багов, твое приложение все-таки заработало, вдруг оказывается, что надобности в нем уже нет и этот проект откладывается в длинный черный ящик на неопределенный срок. Мотивация работы падает и, наконец, исчезает совсем. Одним из признаков профессионально выгорания считается появление мыслей: «Я устал», «Я мог бы работать эффективней и быстрее», «Мне скучно». Также, по истечению времени ты вдруг осознаешь, что IT – это сложно, хотя по работе ты все успеваешь делать и укладываешься в дедлайны. Чтобы бороться и с одним, и с другим, нужно постоянно находиться в движении, постоянно заставлять свой мозг решать новые задачи, изучать новые библиотеки и frameworks. У большинства на такой стиль жизни может не хватить силы воли, поэтому обзаведитесь планировщиком задач, попросите отдельного внимания у тимлида, запишитесь на курсы повышения квалификации. Это все поможет вам переместиться в новую обстановку и даст новые возможности для проявления главной способности вашего мозга и всей нервной системы – получать новые раздражители от окружающей среды. Иногда новые таски, обстановка и остальное не решают этой проблемы. Тогда стоит задуматься о своем проекте. Поможет или нет, это уже личное дело каждого.
Мови програмування 2026: зростання TypeScript і Rust та нові тренди ринку

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

Світ розробки програмного забезпечення змінюється швидше, ніж будь-коли. Якщо ще кілька років тому вибір технологій був переважно питанням особистих уподобань або корпоративних стандартів, то у 2026 році він дедалі більше визначається вимогами до безпеки, масштабованості та швидкості доставки продукту. На передній план виходять дві технології з різною філософією — TypeScript і Rust. Паралельно з ними активно зростають Go, Kotlin, Swift та кілька молодших, але перспективних гравців. Розглянемо, що відбувається з мовами програмування у 2026 році — і як ці зміни впливають на розробників, тестувальників та IT-команди. Глобальна аналітика: що кажуть звіти та індекси Щороку кілька великих індустріальних досліджень формують уявлення про реальну картину ринку. Серед них особливо виділяються опитування Stack Overflow, звіти GitHub Octoverse та індекс популярності мов від TIOBE. Узагальнена картина виглядає так: TypeScript демонструє стрімке зростання й уже випереджає JavaScript за кількістю активних комерційних проєктів. Rust кілька років поспіль утримує статус “найулюбленішої технології” серед розробників. Python залишається універсальним лідером за загальною кількістю користувачів, але саме TypeScript і Rust показують найцікавішу динаміку в професійному середовищі. Це важливий сигнал: ринок рухається від простої популярності до якості інструментів і довіри до технологій. TypeScript: професійна надбудова над JavaScript Технічно TypeScript не є окремою мовою програмування — це надмножина над JavaScript, яка додає статичну типізацію, інтерфейси та розширені можливості для побудови великих застосунків. Проте в професійній спільноті його дедалі частіше називають мовою програмування — через власну екосистему, синтаксичні можливості та незалежну роль у сучасних проєктах. Чому TypeScript так швидко став стандартом? статична типізація дозволяє знаходити помилки ще під час розробки великі команди легше підтримують складні кодові бази більшість сучасних фреймворків орієнтовані саме на TypeScript типізований код краще аналізується AI-інструментами У результаті TypeScript став ключовим інструментом для frontend-, full-stack-розробників і QA-інженерів, що працюють з автоматизацією веб-застосунків. Rust: безпека і продуктивність без компромісів Rust представляє інший підхід — системне програмування з акцентом на безпеку памʼяті без використання garbage collector. Серед ключових переваг: захист від memory-вразливостей на рівні компілятора продуктивність, порівнювана з C/C++ сучасний інструментарій і продумана екосистема Rust активно використовують у cloud-native сервісах, WebAssembly, blockchain-проєктах та високонавантажених backend-системах. Попри складніший поріг входу, більшість розробників, які освоїли Rust, не хочуть повертатися до альтернатив. Інші мови, що набирають обертів Окрім TypeScript і Rust, у 2026 році помітно зростають: Go — фаворит DevOps та хмарної інфраструктури. Kotlin — поступово витісняє Java в Android і заходить у backend. Swift — стабільна основа iOS-екосистеми. Julia, Zig, Elixir — нішеві рішення для науки про дані, low-level систем і розподілених застосунків. Про зрілі мови: C#, Java та Python нікуди не зникли Важливо не створювати хибного враження, що поява TypeScript і Rust означає занепад класичних мов. Насправді C#, Java та Python залишаються основою величезної частини світової розробки. Їхній розвиток перейшов у фазу зрілості: темпи зростання сповільнилися але обсяг існуючих систем — колосальний мільйони продакшн-проєктів продовжують підтримуватися саме на цих мовах Python домінує у data science, machine learning та автоматизації. Java і C# залишаються ключовими мовами enterprise-сектору, банківських систем і корпоративних платформ. Сумарно ці мови становлять левову частку всієї комерційної розробки у світі. Зростання TypeScript і Rust не означає витіснення C#, Java чи Python — це радше диверсифікація стеків: сучасні команди дедалі частіше комбінують зрілі мови з новішими інструментами залежно від задач. Чому рейтинги різні? Аналітичні платформи вимірюють різні речі: пошуковий інтерес, активність у репозиторіях або субʼєктивні оцінки розробників. Саме тому позиції мов відрізняються між рейтингами. Проте перетин усіх джерел показує чітку тенденцію: TypeScript і Rust стабільно входять до числа технологій, які активно обирають професійні команди. Практичні рекомендації для IT-фахівців Для розробників веб і full-stack: JavaScript + TypeScript backend і системні рішення: Rust або Go Для QA-інженерів TypeScript корисний для автоматизації тестування та інтеграційних сценаріїв у веб-проєктах. Для DevOps Go та Rust дедалі частіше стають основою для створення інструментів і мікросервісів. Для початківців Якщо ви тільки входите у веб-розробку, починати варто саме з JavaScript. Оптимальний шлях: спочатку JavaScript (синтаксис, async, DOM, базові концепції) потім TypeScript як інструмент професійного рівня для великих проєктів Висновок JavaScript залишається фундаментом сучасного вебу, а TypeScript став його професійним надбудовним стандартом. Rust формує нове покоління безпечного та продуктивного системного програмування. Водночас C#, Java та Python продовжують утримувати левову частку реального production-коду у світі. 2026 рік чітко показує: нові технології не замінюють старі — вони доповнюють їх. Для IT-фахівців це означає одне: сучасний стек — це комбінація перевірених мов і нових інструментів. А інвестуючи час у TypeScript, Rust та фундаментальні технології сьогодні, ви суттєво підвищуєте свою цінність на ринку завтра.
Вебінари Артема Мураховського з програмування на Python

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

Коли людина робить те, що вона любить, що вона сама обрала як свою справу, вона надихає інших жити і творити. Таким був Артем Мураховський. Він працював Python розробником, у вечірній час проводив курси по пайтон у CyberBionic Systematics і провів декілька класних вебінарів на ITVDN. На жаль, Артем загинув у березні цього року в боях під Авдіівкою, захищаючи Україну. На згадку про нього ми підготували добірку його вебінарів. Дивіться. Тут він живий. Слава герою!   Чи варто вчити Python? Python – вельми популярна мова програмування, яка широко використовується у різних напрямках ІТ-розробки: серверна веб-розробка, десктопні та мобільні додатки, ігри, Data Science, ML, тестування ПЗ, спрощення адміністрування ОС тощо. На вебінарі ви дізнаєтеся, хто такий Python розробник і що він робить, які знання, вміння та навички йому потрібні, з чого розпочати та як спланувати своє навчання за даним фахом, а також отримаєте корисні поради і підбірку літератури. Прогноз погоди мовою Python Інтенсивний тренінг зі створення Telegram-бота, який сповіщує вас про актуальну погоду. Мінімум теорії, максимум практики – підійде як новачкам, які не знайомі з програмуванням, так і розробникам-початківцям, що прагнуть випробувати себе. Ви познайомитеся з базовим синтаксисом Python, навчитеся працювати із запитами, дізнаєтесь, що таке API і скористаєтесь Telegram API, створите бота для Telegram і навчитеся використовувати існуючі сервіси для прив'язки до вашого додатку. BlackJack мовою Python Інтенсивний тренінг зі створення карткової гри BlackJack для новачків та розробників-початківців. Ви навчитеся: Писати просту програму на Python, повторюючи діі тренера. Розбивати задачі на дрібні підзадачі і успішно їх вирішувати. Проектувати архітектуру програми. Писати програми на рівні класів. Вирішувати алгоритмічні задачі. Розуміти призначення патернів проектування. Автоматизація парсингу сайтів Інформація – це нафта 21-го століття. На вебінарі ми розглянемо один із найпоширеніших підходів збору та обробки інформації – парсинг сайтів (мовою Python). Ми візьмемо один із популярних сайтів із робочими вакансіями і на його прикладі розберемо бібліотеки для парсингу веб-сайтів, бібліотеки для роботи із запитами. Розберемо види популярних баз даних і зрозуміємо, де і яку потрібно використовувати.
Швидко вчимося рахувати у двійковій та шістнадцятковій системі

Автор: Костянтин Чорний

Вступ Іноді виникає потреба швидко прочитати чи записати числа у двійковій чи шістнадцятковій системі числення, наприклад, працюючи з різними байтовими редакторами, під час розрахунків формул з побітовими операціями чи роботі з кольором. Часто в таких ситуаціях немає можливості довго переводити числа за допомогою формул або калькулятора. Про швидкі способи переходу між системами числення йтиметься у цій статті. Перехід від десяткової системи до двійкової Перший випадок – рахуємо від десяткової системи до двійкової. Основне, що потрібно пам'ятати в даному випадку – це ряд ступенів двійки (1, 2, 4, 8, 16, 32, 64, 128 і т. д.). Навіть якщо його ви не знаєте, то можна просто кожне наступне число множити на двійку. Оскільки молодші розряди йдуть праворуч, а старші – ліворуч, то їх записуватимемо у зворотному порядку справа наліво. Для прикладу будемо переводити число 115. Далі дивимося, якщо значення розряду вміщується в число, то віднімаємо від нього це значення і ставимо в цьому розряді 1, інакше ставимо 0. Зворотний переклад ще простіше – треба підсумувати всі значення розрядів, які відзначені одиничками: 64+32+16+2+1=115. Перехід до шістнадцяткової системи Тепер давайте розберемося із шістнадцятковою системою. Маючи на увазі те, що кількість чисел, які кодуються тетрадою (4 біти) і одним шістнадцятковим символом співпадають, відповідно кожен символ кодує одну двійкову тетраду. В результаті одержали число 0х73. Головне пам'ятати, що А=10, B=11, C=12, D=13, E=14, F=15. Якщо є потреба перевести десяткове число в шістнадцяткове або навпаки, то тут найпростіше спочатку буде перевести число в двійкове уявлення, а потім тільки в шістнадцяткове або десяткове відповідно. У результаті ми навчилися швидко переводити числа з однієї системи числення до іншої. Головне, що потрібно пам'ятати – ступені двійки і вміти гарно додавати та віднімати. Детальніше про машинну математику ви можете дізнатись у другому уроці курсу C# Стартовий. Попрактикуйтеся самостійно і переведіть кілька чисел з однієї системи до іншої, звіряючись з калькулятором. Трохи практики – і ви всьому навчитеся.
100+ питань з Python для Junior, Middle та Senior

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

Дорогие друзья! Предлагаем вашему вниманию перевод статьи, опубликованной на DOU.ua 30 сентября 2020 года. Оригинальная версия на украинском языке доступна по ссылке. Редакция DOU пообщалась с разработчиками, которые проводят технические собеседования Python-специалистов для различных уровней, и собрала примерный список вопросов к кандидатам. Конечно, он не является исчерпывающим, однако содержит типичные вопросы.   Вопросы для Junior   От джуниоров требуют знать и уметь применять базовые структуры данных и модули, простейшие запросы к базам данных, знать простейшие команды системы контроля версий и тому подобное. Общее по Computer Science и Web Development: 1. Что такое инженерия и процесс разработки в целом? 2. Какие знаете принципы программирования? 3. Чем отличаются процедурная и объектов-ориентированная парадигмы программирования? 4. Какие основные принципы ООП (наследование, инкапсуляция, полиморфизм)? 5. Что такое множественное наследование? 6. Какие есть шесть этапов разработки продукта в Software Development lifecycle и какая разница между Agile и Kanban? 7. Какие есть методы HTTP-запросов и какая между ними разница? 8. Как выглядят HTTP-request / response? 9. Что такое авторизация и как она работает? 10. Что такое cookies? 11. Что такое веб уязвимость? 12. Какие знаете классические базы данных? 13. Как читать спецификацию в конкретном языке (например, PEP8 в Python)? 14. Как происходит взаимодействие клиента и сервера? 15. Какие есть подходы к проектированию API? 16. Как использовать паттерны программирования? 17. Что такое Acceptance Testing и зачем его используют? 18. Что такое модульные и интеграционные тесты, API-тесты? 19. Как писать unit-тесты? 20. Какие есть best practices в написании автотестов? 21. Какие базовые команды системы контроля версий? 22. Как использовать Git? 23. В чем разница между хешированием и шифрованием? Ответы на некоторые из этих вопросов вы можете найти в видео курсах Python Базовый, Python Углублённый, Основы работы с Git.   Python: 24. Python - интерпретируемый язык или компилируемый? 25. Какие есть меняющиеся и постоянные типы данных? 26. Что такое область видимости переменных? 27. Что такое introspection? 28. Разница между is и ==? 29. Разница между __init __ () и __new __ ()? 30. В чем разница между потоками и процессами? 31. Какие есть виды импорта? 32. Что такое класс, итератор, генератор? 33. Что такое метакласс, переменная цикла? 34. В чем разница между итераторами и генераторами? 35. В чем разница между staticmethod и classmethod? 36. Как работают декораторы, контекстные менеджеры? 37. Как работают dict comprehension, list comprehension и set comprehension? 38. Можно ли использовать несколько декораторов для одной функции? 39. Можно ли создать декоратор из класса? 40. Какие есть основные популярные пакеты (requests, pytest, etc)? 41. Что такое lambda-функции? 42. Что означает *args, **kwargs и как они используются? 43. Что такое exceptions, <try-except>? 44. Что такое PEP (Python Enhancement Proposal), какие из них знаете (PEP 8, PEP 484)? 45. Напишите hello-world сервис, используя один из фреймворков. 46. Какие есть типы данных и какая разница между list и tuple, зачем они? 47. Как использовать встроенные коллекции (list, set, dictionary)? 48. В чем заключается сложность доступа к элементам dict? 49. Как создается объект в Python, для чего __new__, зачем __init__? 50. Что знаете из модуля collections, какими еще built-in модулями пользовались? 51. Что такое шаблонизатор и как в нем выполнять базовые операции (объединять участки шаблона, выводить дату, выводить данные с серверной стороны)? 52. Как Python работает с HTTP-сервером? 53. Что происходит, когда создается виртуальная среда? Ответы на некоторые из этих вопросов вы можете найти в видео курсах Python Стартовый (урок 2, урок 4-8), Python Базовый (урок 1, урок 6, урок 7, урок 9), Python Углублённый (урок 1, урок 4).   Базы данных: 54. Какие есть базовые методы работы с SQL- базой данных в Python? 55. Что такое SQL-транзакция? 56. Как сделать выборку из SQL-базы с простой агрегацией? 57. Как выглядит запрос, который выполняет JOIN между таблицами и к самим себе? 58. Как отправлять запросы в SQL-базу данных без ORM? Ответы на некоторые из этих вопросов вы можете найти в видео курсе SQL Базовый.   Алгоритмы: 59. Что такое алгоритмы (например, Big-O notation)? 60. Какие есть базовые алгоритмы сортировки? 61. Что такое Bubble Sort и как это работает? 62. Что такое линейная сложность сортировки?   Вопросы для Middle   Если джуниору все надо подсказывать и помогать, то мидл может самостоятельно взять что-то новое и быстро его изучить и понять. У него накоплено достаточно знаний и опыта, чтобы быстро овладевать новым. Он может прийти и обсудить с опытным разработчиком, проконсультироваться, но окончательных решений не принимает. Обычно у мидлов спрашивают: 63. Ориентируетесь ли в *nix, можете ли написать скрипты/автоматизацию для себя и коллег? 64. Что такое многопоточность? 65. Что такое архитектура веб сервисов? 66. Как работает современное нагруженное веб приложение (нарисовать и обсудить примерную архитектуру, например, Twitter или Instagram)? 67. Что нужно для сайта / сервиса среднего размера (redis \ celery \ кэш \ логирование \ метрики)? 68. Как написать, задеплоить и поддерживать (микро) сервис? 69. Как масштабировать API? 70. Як проводить Code review? 71. Что такое абстрактная фабрика, как ее реализовать и зачем ее применяют? 72. Что такое цикломатическая сложность?   Python: 73. Async Python: как работает, зачем, что под капотом? 74. Сравнить асинхронные web-фреймворки. 75. Что такое модель памяти Python? 76. Что такое SQLAlchemy (Core и ORM частей) и какие есть альтернативы? 77. Принципы работы и механизм Garbage collection, reference counting? 78. Как работает thread locals? 79. Что такое _slots_? 80. Как передаются аргументы функций в Python (by value or reference)? 81. Что такое type annotation? 82. Для чего используют нижние подчеркивания в именах классов? 83. Статические анализаторы: Flake8, Pylint, Radon. Ответы на некоторые из этих вопросов вы можете найти в видео курсе Python Углублённый (урок 3).   Базы данных: 84. Разница между SQL и NoSQL? 85. Как оптимизировать SQL-запросы? 86. Какие есть уровни изоляции транзакций? 87. Какие есть виды индексов? 88. Точечные вопросы по выбору БД, движков БД? 89. Front-end: есть ли опыт работы с «современным» JS (Babel, Webpack, TS, ES)? 90. DevOps: работали ли с Docker-контейнерами, объяснить основные термины K8s (кластер, pod, node, deployment, service), что такое Kibana? 91. Алгоритмы: что такое временная сложность алгоритма (time complexity)? 92. Углубленные знания Linux: как зайти на внешний сервер, работать с пакетами, настроить среду и выполнять операции? 93. Специфично для Data Science: как работать с пакетами для обработки и визуализации данных (NumPy, Pandas и другие)? Ответы на некоторые из этих вопросов вы можете найти в видео курсе SQL Базовый.   Вопросы для Senior   На собеседованиях с Senior`ами обычно мало говорят о теоретической стороне технологии, больше обсуждают конкретный опыт разработчика. Поэтому формализованных вопросов здесь нет. Однако, примером могут быть: 94. Что такое @property? 95. Каким образом можно запустить код на Python параллельно? 96. Как работать с stdlib? 97. Какие задачи решали с помощью метаклассов? 98. Что такое дескрипторы? 99. Знания других языков, кроме Python (опыт). 100. Какие технологические особенности реализации распределенных систем? 101. Какие есть низкоуровневые особенности языков и фреймворков? 102. Способы и методы управления памятью.   Бонус. Практические задания   1. Спроектировать клон Instagram. Это сервис, который понятен практически любому кандидату, даже если у него нет аккаунта. На высоком уровне он очень прост: картинки, описания, комментарии. Поэтому что-то минимальное сможет описать и джуниор. Если кандидат претендует на высшие позиции, можно бесконечно копать вглубь, касаясь API, тротлинга запросов, защиты от фрода, построения фидов пользователя и тому подобное. 2. Дано рекурсивное определение чисел Фибоначчи, надо написать функцию, которая реализует это определение. 3. Есть база данных из трех таблиц — стандартная many-to-many схема. Нужно написать запрос, который объединяет три таблицы и возвращает определенный результат. 4. Даем ТЗ какого-то полезного микросервиса (сокращалка url-ов, поиск дубликатов картинок, поиск тегов в текстах) или функции (rate limiter). Просим кандидата рассказать, как бы он его реализовал. Это дает возможность узнать, что привык использовать специалист, насколько глубоко он знает и понимает различные технологии. 5. Написать какой-то несложный декоратор (выводит аргументы функции на экран или, например, измеряет сколько времени выполнялась функция). 6. Junior`у можно предложить реализовать задачу FizzBuzz test. 7. Для Middle+ я люблю давать несложные задачки на рекурсию. Например, есть вложенный список чисел и нужно что-то на нем посчитать (скажем, найти максимум). Также, можно предложить написать аналог deepcopy для конкретной структуры данных (tree, graph). 8. Для Senior - игра «спроектировать за 5 минут...». Это может быть Google, FB, Twitter, высоконагруженный интернет-магазин, сервис поиска, продажи и бронирования билетов, сайт новостей и тому подобное. Такая задача помогает понять, как кандидат решает проблемы, ход его мыслей, умеет ли он отделять главное от второстепенного, понять, какого он типа ( «в глубину» или «в ширину»). 9. Игра «у юзера что-то не работает». На примере спроектированной системы собеседователь придумывает ошибку с «дикими симптомами», которую очень сложно понять, воспроизвести. Но нужно быстро решить проблему. 10. Задание, которое демонстрирует знание и понимание list и dict comprehensions. Looking at the below code, write down the final values of A0, A1, ...An.             A0 = dict(zip(('a','b','c','d','e'),(1,2,3,4,5)))             A1 = range(10)             A2 = sorted([i for i in A1 if i in A0])             A3 = sorted([A0[s] for s in A0])             A4 = [i for i in A1 if i in A3]             A5 = {i:i*i for i in A1}             A6 = [[i,i*i] for i in A1]             A7 = [i if i%2 else 0 for i in A1 if 2 < i < 8]             ','.join(str(j**2) for j in range(10)) – what is this object ?   11. Задача, в которой есть три функции, в них выполняются базовые операции (сортировка, фильтрация, поднесение массива к квадрату). Нужно упорядочить эти три функции в порядке возрастания времени, которое уходит на их выполнение. Place the following functions below in order of their efficiency. They all take in a list of numbers between 0 and 1. The list can be quite long. An example input list would be [random.random () for i in range (100000)]. How would you prove that your answer is correct? - profiling? def f1 (lIn):             l1 = sorted (lIn)             l2 = [i for i in l1 if i <0.5]             return [i * i for i in l2] def f2 (lIn):             l1 = [i for i in lIn if i <0.5]             l2 = sorted (l1)             return [i * i for i in l2] def f3 (lIn):             l1 = [i * i for i in lIn]             l2 = sorted (l1)             return [i for i in l1 if i <(0.5 * 0.5)]   То есть, на входе все функции имеют одинаковые данные, на выходе выдают одинаковый результат. Но из-за того, что внутри операции выполняются в разном порядке, время выполнения будет отличаться. Здесь нужно разбираться в алгоритмах и понимать, что происходит с твоими данными в процессе. Эту задачу может решить Junior, а может не решить и Middle. Казалось бы, такая мелочь, но когда мы работаем с большим количеством данных, важно, чтобы код был оптимизирован и программа выполнялась максимально быстро.   12. Простые задачи на статистику или логику. Например, определить угол между стрелками часов, которые показывают 8:40. За подготовку материала редакция DOU выражает благодарность Михаилу Кашкину (Founder в Okumy и курсов по Python), Руслану Скире (Python Developer в CodeIT LLC), Бориславу Ларину (Python Developer в Prom.ua), Владимиру Обризану (Director в Design and Test Lab), Виктору Свирскому (Senior Developer в DataArt), Николаю Зорину (CTO в Jiji, проект Genesis), Владимиру Селюху (Team Lead в Prom.ua), Сергею Галабурде (Software Engineer в N-iX), Алексею Чуприкову (Lead Python Engineer в EPAM), Ивану Лучку (TL Data Science Specialist в Boosta), Олегу Новикову, Владимиру Щербинину, Роману Могилатову (Technical Leader в SoftServe), Вадиму Рудю, Натальи Кушнир, Андрею Лейцюсю, Роману Луцю и другим. Перевел на русский язык Владислав Сверчков
300+ запитань щодо JavaScript на співбесіді

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

Дорогие друзья! Предлагаем вашему вниманию перевод статьи, опубликованной на DOU.ua 21 декабря 2020 года. Оригинальная версия на украинском языке доступна по ссылке. На этот раз предлагаем ознакомиться с актуальными вопросами, которые задают на технических интервью по JavaScript. Естественно, мы говорим о широком спектре специализаций, поэтому выбирайте свое направление и готовьтесь.   Junior Общие: 1. Какие методы HTTP-запросов вы знаете? 2. Какие версии HTTP-протокола вам известны? 3. Какие знаете коды ответа (состояния) HTTP? 4. Что такое Cross-Origin Resource Sharing? Как устранить проблемы с CORS? 5. Что такое cookie? 6. Какой максимальный размер cookie? 7. Что означает директива use strict? 8. Чем JS отличается при работе на front-end и back-end? 9. Что такое статическая и динамическая типизации? 10. Как клиент взаимодействует с сервером? 11. Что такое REST? 12. Объяснить понятие мутабельность/иммутабельность? Какие типы являются мутабельными и наоборот? 13. Как искать ошибки в коде? Используете ли вы дебаггер? 14. Каких известных людей из мира JS знаете?   JS Core 15. Какие существуют типы данных в JS? 16. Как проверить, является ли объект массивом? 17. Как проверить, является ли число конечным? 18. Как проверить, что переменная равна NaN? 19. Чем отличается поведение isNaN() и Number.isNaN()? 20. Сравните ключевые слова var, let, const. 21. Что такое область видимости? 22. Что такое деструктуризация? 23. Для чего предназначены методы setTimeout и setInterval? 24. Сравните подходы работы с асинхронным кодом: сallbacks vs promises vs async / await. 25. Можно ли записывать новые свойства / функции в прототипы стандартных классов (Array, Object и т. д.)? Почему нет? В каких случаях это делать можно? Как обезопасить себя, если нужно расширить прототип? 26. Назовите методы массивов, какие помните, и скажите, для чего они нужны. 27. Какие методы перебора массива знаете? В чем их отличие? 28. Как работают операторы присваивания / сравнения / строчные / арифметические / битовые и т. д.? 29. Опишите назначение и принципы работы с коллекциями Map и Set. 30. Что означает глубокая (deep) и поверхностная (shallow) копия объекта? Как сделать каждую из них? Ответы на некоторые из этих вопросов вы можете найти в видео курсе JavaScript Стартовый (урок 3, урок 5, урок 10), JavaScript Базовый (урок 3, урок 13, урок 19), ECMAScript 6 (урок 6).   Функции: 31. Какая разница между декларацией функции (function declaration) и функциональным выражением (function expression)? 32. Что такое анонимная функция? 33. Расскажите о стрелочных функциях (arrow function). В чем заключаются отличия стрелочных функций от обычных? 34. Что такое и для чего используют IIFE (Immediately Invoked Function Expression)? 35. Что такое hoisting, как он работает для переменных и функций? 36. Что такое замыкание (closure) и какие сценарии его использования? 37. Как вы понимаете замыкания? Что будет выведено в консоли в этом случае? var f = function() {   console.log(1); } var execute = function(f) {   setTimeout(f, 1000); } execute(f); // что выведет в консоль и почему f = function() {   console.log(2); } 38. Что такое рекурсия? 39. Что означает ключевое слово this? 40. Что такое потеря контекста, когда происходит и как ее предотвратить? 41. Методы функций bind / call / apply - зачем и в чем разница? Ответы на некоторые из этих вопросов вы можете найти в видео курсе JavaScript Стартовый (урок 11, урок 12) и JavaScript Базовый (урок 13, урок 14).   Front-end 42. Что такое DOM? 43. Сравните атрибуты подключения скрипта async и defer в HTML-документе. 44. Какая разница между свойствами HTML-элементов innerHTML и innerText? 45. Опишите процесс всплытия (bubbling) событий в DOM. 46. Как остановить всплытие (bubbling) события? 47. Как остановить дефолтную обработку события? 48. Чему равен this в обработчике событий (event handler)? 49. Что такое LocalStorage и SessionStorage? Какой максимальный размер LocalStorage? 50. Как получить высоту блока? Его положение относительно границ документа? 51. Что такое webpack? 52. Чем отличается dev-сборник от prod? Ответы на некоторые из этих вопросов вы можете найти в видео курсе JavaScript Базовый (урок 1, урок 6, урок 7, урок 8, урок 17) и ECMAScript 6 (урок 1).   Верстка 53. Что такое блочная модель CSS? 54. Какие способы центрирования блочного контента по горизонтали и вертикали знаете? 55. Какие подходы в верстке вам известны (float, flex, grid, etc.)? 56. Как сделать приложение responsive? 57. Какие есть принципы семантической верстки? 58. Зачем нужны префиксы для некоторых CSS-свойств (-webkit-, -moz- и т. д.)? 59. Как упростить написание кросс-браузерных стилей? 60. Практические задачи: прокомментировать и исправить пример плохого CSS или HTML. 61. Что такое CSS-препроцессоры? С какими работали? Что нового они приносят в стандартный CSS? Ответы на некоторые из этих вопросов вы можете найти в видео курсе HTML5 & CSS3 Стартовый (урок 5, урок 6), HTML5 & CSS3 Углубленный (урок 4). Курсы Верстка сайта на CSS Grid и Верстка сайта на FlexBox CSS дадут комплексные знания и практические навыки применения технологий FlexBox и Grid.   Angular 62. Перечислите основные компоненты фреймворка (модуль, роут, директива и т .п.). 63. В чем разница между компонентом и директивой? 64. Расскажите о жизненном цикле компонента. 65. Перечислите часто используемые хуки жизненного цикла компонента и расскажите, для чего они нужны? 66. В чем разница между конструктором и ngOnInit-хуком? 67. Как защитить роут от несанкционированного доступа? Какие механизмы предоставляет для этого фреймворк? 68. Что такое Lazy loading, как и для чего используется? 69. Какое назначение RouterOutlet? 70. Как компоненты могут взаимодействовать друг с другом? 71. Как создать two-way binding свойство для компонента? 72. Какие типы форм у фреймворка? В каких случаях и что лучше использовать? 73. Какие состояния у формы и как это можно применить? 74. Зачем нужны сервисы? Как с ними работать? 75. Что такое singleton-сервисы? Каково их назначение? Способ создания? 76. Какие есть способы объявления сервисов? 77. Для чего нужны модули? Сколько их должно быть в проекте? 78. Зачем нужны общие модули (shared)? 79. Какие преимущества типизации в TypeScript? 80. Какие возможности TypeScript можно использовать для типизации (здесь имеются в виду интерфейсы, типы, enum и т. д.)? 81. Какая разница между интерфейсом и классом? 82. В чем разница между интерфейсом и абстрактным классом? 83. Какая разница между интерфейсом и типом? 84. Что такое RxJS? Как он используется во фреймворке? Какие компоненты фреймворка тесно связаны с ним? 85. Чем отличаются Observable и Promise? 86. Для чего нужны Subjects? Какие типы Subjects существуют? 87. Как сделать несколько последовательных запросов к API с помощью HTTP-сервиса и RxJS? 88. Какая разница между switchMap, concatMap, mergeMap? 89. Как можно конфигурировать Angular-приложение? 90. Зачем нужны environment-файлы? Когда их лучше не использовать? 91. В чем разница между «умным» (smart) и «глупым» (dumb) компонентами? В каких случаях применяется каждый из них? 92. В чем разница между NgForm, FormGroup и FormControl и как их применяют для построения форм? 93. Зачем нужен и как работает async pipe? 94. Как следить за развитием фреймворка? Каких известных людей, связанных с Angular, знаете / читаете? Ответы на некоторые из этих вопросов вы можете найти в видео курсах Angular Базовый и Angular Углублённый.   React 95. Работали ли вы с классовыми компонентами? В чем их особенность? 96. Какие данные лучше хранить в состоянии компонента, а какие передавать через пропсы? Приведите пример. 97. Ознакомлены ли вы с хуками? В чем их преимущества? Приходилось ли делать свои и с какой целью? 98. Знакомы ли вы с фрагментами и порталами? Зачем они нужны? 99. Когда и для чего используют рефы? 100. Какие вы знаете методы жизненного цикла компонента? 101. В каком методе жизненного цикла компонента лучше делать запросы на сервер? Почему? 102. В каком методе жизненного цикла компонента лучше делать подписку и отписку от листенера? Почему? Зачем отписываться? 103. Был ли опыт работы с контекстом? Когда его стоит использовать? 104. В чем особенность PureComponent? 105. Работали ли вы с мемоизоваными селекторами (memoized selectors)? Для чего их используют и какой принцип работы? 106. В чем видите преимущества библиотеки React? 107. Почему библиотека React быстрая? Что такое Virtual DOM и Shadow DOM? 108. Зачем в списках ключи? Можно ли делать ключами индексы элементов массива? Когда это оправдано? 109. В чем основная идея Redux? 110. Работа со стилями в React. 111. React - это библиотека или фреймворк? Какая разница между этими двумя понятиями. 112. Можно ли использовать jQuery вместе с React? Почему да / нет? 113. Что такое codemod? 114. Приходилось ли вам настраивать проект React с нуля? С помощью каких инструментов вы это делали? 115. Перечислите все библиотеки, которые использовали в связке с React. 116. Что самое сложное вам приходилось реализовывать с помощью React? Ответы на некоторые из этих вопросов вы можете найти в видео курсах React Базовый и React Углублённый.   Back-end 117. Что такое REPL? 118. Что такое streams в Node.js? 119. Что такое middleware? 120. Для чего используют функцию setImmediate? 121. Зачем нужен app.param() в express? 122. Что такое token based authentication?   Базы данных 123. Напишите простой запрос для вычисления трех авторов, у которых больше всего книг. 124. Напишите запрос, который выбирает последние три комментарии для конкретного пользователя для двух таблиц: комментарии и пользователи. 125. Спроектируйте простую схему базы данных для библиотеки. 126. Для чего используют SQL-оператор HAVING? 127. Зачем используют SQL-оператор LEFT JOIN? 128. Чем отличается embed- от reference-связи в MongoDB? 129. В одном проекте программисты сохраняют данные в MongoDB-коллекции комментариев, используя такие типы данных (смотрите ниже). Что плохого в этом решении? id: ObjectID text: string author_id: string created_at: Date 130. В проекте понадобилось внести изменения в структуру таблиц, добавить несколько полей и индексы. Как программисты будут делать это на продакшене? Ответы на некоторые из этих вопросов вы можете найти в видео курсе SQL Базовый.   Инструменты 131. Каждый раз, когда вы делаете pull, почему-то случается конфликт в последней строке во всех файлах, которые вы редактировали. Что происходит? 132. Что делает команда git fetch? 133. Какой git hygiene подходы вы знаете? 134. Что такое CI / CD? Для чего это нужно?   Практические задания 135. Расскажите, какие есть способы копирования простого объекта типа obj = {a 1, b 2, c 3} 136. Напишите deep clone для объекта. 137. Назовите различные способы, как поменять местами значения двух переменных. 138. Менеджер попросил в задаче поменять статусы из «active, inactive» на «active, removed», но в коде фигурируют только цифры и непонятно, какой статус соответствует какой цифре. Как помочь будущим программистам не лезть в документацию по коду? Вопрос ставят на конкретном примере с кодом. 139. Необходимо сделать мини проект - список пользователей с формой создания / редактирования пользователя: Для хранения пользователей используйте Firebase (это бесплатно). Для стилизации используйте Bootstrap. Минимальный набор полей пользователя: имя; фамилия; электронная почта; телефон (в формате +380 (XX) XXX-XX-XX) дата рождения; будет плюсом - добавление аватара и возможность crop-картинки. Пользователи должны иметь возможность фильтрации и пагинацию. Проект должен содержать README-файл с шагами для запуска.   Middle Общие 1. Расскажите о пирамиде тестирования. 2. Какие типы автоматизированных тестов выпадала возможность писать? Какие библиотеки при этом использовали? Каким инструментам отдаете предпочтение и почему? 3. Что такое unit-тесты? Какое место в пирамиде тестирования занимают unit-тесты? 4. Что такое code coverage? Обязательно 100% покрытие тестами кода? 5. Как запретить браузеру отдавать кэш на HTTP-запрос? 6. Что такое XSS (Cross-Site Scripting)? 7. Расскажите о паттернах Observer, Pub / Sub. Какая между ними разница? Приведите примеры реализации этих паттернов в известных фреймворках / библиотеках / браузерных API. 8. С какой целью может быть использован event listener события fetch self.addEventListener ( 'fetch', event => {})? 9. Что такое Event loop и как он работает? Расскажите о микрозадачах и макрозадачах.   JS Core 10. Какие типы данных бывают в JavaScript? Какой будет результат выполнения кода? let firstObj = { name: 'Hello' }; let secondObj = firstObj; firstObj = { name: 'Bye' }; console.log(secondObj.name); 11. Что такое temporal dead zone? 12. Как работает boxing / unboxing в JavaScript? 13. В чем разница между оператором in и методом hasOwnProperty? 14. Опишите, с помощью чего в JS реализуются такие ООП-парадигмы, как инкапсуляция, полиморфизм, абстракция? 15. Что такое прототип? Как работает прототипное наследование в JS? Объясните работу кода. function Main () {} Main.prototype = { protected: true }; const obj = new Main(); Main.prototype = { protected: false }; console.log('Object protection: ', obj.protected); 16. Какая разница между композицией и наследованием? 17. Почему не стоит использовать конструкторы типа new String? 18. Расскажите о базовом устройстве и механизме работы Event loop. 19. Что такое записи (records) и кортежи (tuples)? Чем они отличаются от обычных объектов? 20. Какие различия в поведении ES5 функции-конструктора и ES2015 класса? 21. Как реализовать паттерн «Модуль»? 22. Почему typeof null возвращает object? 23. Что такое приведение (преобразование) типов в JS? 24. Что такое явное и неявное приведение (преобразование) типов данных в JS? Как происходит преобразование типов в следующих примерах: {}+[]+{}+[1] !!"false" == !!"true" ['x'] == 'x' 25. Что такое Garbage Collector? 26. Опишите основные принципы работы «сборщика мусора» в JS-движках (engines). 27. Опишите назначение и принципы работы с коллекциями WeakMap и WeakSet? Чем они отличаются от коллекций Map и Set соответственно? 28. Чем отличается Observable от Promise? 29. Что такое Promise? Назовите порядок выполнения then и catch в цепочке. Promise.resolve(10)   .then(e => console.log(e)) // ??   .then(e => Promise.resolve(e))   .then(console.log) // ??   .then(e => {     if (!e) {       throw 'Error caught';     }   })   .catch(e => {     console.log(e); // ??     return new Error('New error');   })   .then(e => {     console.log(e.message); // ??   })   .catch(e => {     console.log(e.message); // ??   }); 30. Расскажите о последовательном и параллельном выполнении асинхронных функций. В чем разница между Promise.all() и Promise.allSettled()? 31. Что такое дескрипторы свойств объектов? Расскажите об их практическом применение. 32. Назовите несколько способов создания постоянного (неизменного) объекта в JavaScript. 33. Как создать свойство у объекта, которое нельзя будет изменить? 34. Зачем нужен конструктор Proxy? Приведите пример использования. 35. Что такое ArrayBuffer? В чем разница между Uint32Array и Float32Array? Каков результат выполнения кода? const uint32Array = new Uint32Array(); Array.isArray(uint32Array); 36. Каким будет результат сравнения? const url = “HTTPs://xyz.com/path<to>page.html”; encodeURI(url) == encodeURIComponent(url); 37. Расскажите о генераторах и итераторах. 38. Объясните, что делает приведенный ниже код: function * fn(num) {   for (let i = 0; i < num; i += 1) {     yield console.log(i);   } } const loop = fn(5); loop.next(); loop.next(); 39. Расскажите о типе данных Symbol и его практическом применении. Как перевести число с 10-разрядной системы в 16 (2,8) разрядную систему счисления? Ответы на некоторые из этих вопросов вы можете найти в видео курсе JavaScript Стартовый (урок 3, урок 4, урок 13, урок 14) и JavaScript Базовый (урок 18, урок 19),  ECMAScript 6 (урок 6).   Функции 40. Объясните, что означает currying. Приведите пример использования на практике. 41. Приведите пример функции с мемоизацией. Когда следует применять эту технику? 42. Что такое чейнинг функций? Напишите пример с использованием этого подхода. 43. В чем разница между function и arrow function? Каким будет результат выполнения кода? const pluckDeep = key => obj => key.split('.').reduce((accum, key) => accum[key], obj) const compose = (...fns) => res => fns.reduce((accum, next) => next(accum), res) const unfold = (f, seed) => {   const go = (f, seed, acc) => {     const res = f(seed)     return res ? go(f, res[1], acc.concat([res[0]])) : acc   }   return go(f, seed, []) }   Front-end 44. В чем принципиальная разница между событиями mouseleave и mouseout? 45. В каком порядке обрабатываются пользовательские события в DOM (click, mouseover и т .д.)? FIFO или LIFO? 46. Что такое Event bubbling и Event capturing? 47. Сравните методы объекта event stopPropagation и stopImmediateProparation. 48. Какие есть подходы оптимизации производительности веб-страницы? 49. Как реализован механизм same-origin policy в браузере? На какие браузерные API он распространяется? 50. Назовите способы хранения данных в браузере. Сравните их. 51. Web worker`ы. Опишите особенности передачи данных между worker`амы и основным потоком, между разделенными worker`амы. 51. Что такое Transferable-объекты? 52. Расскажите о способах оптимизации выполнения ресурсоемких операций JS для улучшения производительности рендеринга контента на странице. 53. Почему ResizeObserver вызывает события изменения размера до воспроизведения элемента, а не после? 54. Расскажите, как вы понимаете Web Accessibility? 55. Опишите алгоритм создания функционала, который обеспечивает чтение содержимого .txt файла при перетаскивании его из файловой системы в окно браузера. 56. Что такое Virtual DOM? Ответы на некоторые из этих вопросов вы можете найти в видео курсе HTML5 & CSS3 Углубленный (урок 3), JavaScript Базовый (урок 1, урок 2, урок 3).   Верстка 57. Объясните разницу между единицами измерения px, em, rem. 58. Для чего нужны CSS-переменные? Приведите несколько примеров использования. 59. Что произойдет при добавлении следующего селектора? * {Box-sizing: border-box; } 60. Как адаптировать страницу для печати? 61. Опишите особенности кастомизации стилей стандартных элементов форм. 62. Что такое progressive рендеринг? Какие подходы используются? 63. Назовите несколько способов реализации lazy-loading медиаресурсов на странице. 64. Назовите популярные шаблонизаторы для фронтенд-разработки. Опишите особенности их использования. 65. Назовите популярные CSS-методологии и их различия. 66. Как работает CSS Grid? 67. Какие форматы изображений поддерживают анимацию? 68. Как отследить прогресс / окончание CSS @keyframes анимаций или плавных переходов, реализованных с помощью transition, в JS? 69. Какие CSS-свойства могут быть обработаны непосредственно через GPU? Что такое композитные слои и почему большое их количество может привести к аварийному завершению работы браузера на мобильных устройствах? 70. Как переиспользовать Инлайн SVG-элементы на странице? 71. Опишите способы оптимизации SVG-файлов. 72. Как реализовать иконочный шрифт из определенного набора SVG-файлов? 73. Что такое ложное жирное или ложное курсивное (Faux) начертание шрифтов? 74. Что такое #shadow-root в инспекторе HTML-страницы? 75. Зачем нужны Custom Elements? 76. Почему удаление лишних символов пробелов / символов переноса в HTML не отражается на конечной производительности загрузки страницы? 77. Что такое контекст отображения canvas? Какие существуют типы контекста для рендеринга двумерной и трехмерной графики? Ответы на некоторые из этих вопросов вы можете найти в видео курсе HTML5 & CSS3 Углубленный.   Angular 78. Как работает Dependency injection? Зачем это нужно? Расскажите об использовании кастомных инжекторов. 79. Что такое zone.js? Для чего Angular использует зоны? С какой целью можно использовать NgZone-сервис? 80. Как работает Change detection? Как можно оптимизировать компонент с помощью схем Change detection? Какие еще есть приемы для оптимизации рендеринга (связанные с Change detection)? 81. Как выполнить конфигурацию HTTP-сервиса? Зачем она нужна? Обработка HTTP-ошибок? 82. Какие есть подходы к организации работы с данными? 83. Как подготовить сборник к деплою? 84. Что такое NgRx? Когда стоит использовать? 85. В каких случаях лучше использовать Renderer-сервис вместо нативных методов? И наоборот? 86. Как работают и для чего нужны резолверы? Как получить данные, загруженные резолверами? 87. Как работают и зачем нужны динамические компоненты? Приведите примеры их целесообразного использования. 88. Какая разница между @ViewChild и @ContentChild? 89. Что делает код и как иначе можно связать класс компонента с переменной? @HostBinding ( 'class.valid') isValid; 90. Как можно кэшировать данные, используя сервисы или RxJS? 91. Что такое асинхронная валидация форм? Когда применяется и как реализуется? 92. Зачем нужна forRoot-функция модуля? 93. Какая разница между декларированием и экспортом компонента из модуля? 94. Почему плохо «провайдить» сервис с shared-модуля в lazy-loaded модуль? (Вопрос о scope модулей.) 95. Что такое :: ng-deep и для чего используется? 96. Какие тесты можно запустить для Angular-программы? Какие инструменты используют для тестирования Angular-программы? 97. Как протестировать API-сервис? Ответы на некоторые из этих вопросов вы можете найти в видео курсах Angular Базовый и Angular Углублённый.   React 98. Что такое JSX? Что лежит в его основе? 99. Как работает алгоритм Virtual DOM? 100. Для чего нужно свойство key во время рендеринга списков? 101. В чем разница между функциональными и классовыми компонентами? 102. Зачем и когда нужно передавать props в super() при использовании классовых компонентов? 103. Почему нужно использовать setState() для обновления внутреннего состояния компонента? 104. В чем заключается принцип «подъема состояния»? 105. Какие библиотеки менеджмента состояния React-приложения вы знаете? Зачем они нужны? 106. Когда следует использовать Redux? Какие есть альтернативы? 107. Redux vs Mobx? 108. Расскажите о базовом принципе работы React Hooks. 109. В чем разница между createRef и useRef? 110. Когда следует использовать React refs? Когда не стоит? 111. Какие недостатки библиотеки React видите? 112. Какие паттерны используете вместе с React? 113. Как относитесь к типизации вместе с React? 114. Как построить хорошую архитектуру React-проекта? 115. Оптимизация React-приложений? Как измерить производительность программы? 116. Можно ли приложение на React встроить в другое приложение на React? Ответы на некоторые из этих вопросов вы можете найти в видео курсах React Базовый и React Углублённый.   Back-end 117. Почему Node.js однопоточный, а не многопоточный? 118. Что такое event driven development? 119. Сравните fork() и spawn() методы. 120. Расскажите о Node.js фреймворках, которые использовали. Какая между ними разница? 121. Опишите словам код ендпоинта, который должен сохранить с клиента файл размером 4 гигабайта и положить его на S3 или другой CDN. 122. Что такое микросервисы, зачем их используют? 123. В каких случаях вы бы выбрали монолит, а в каких - микросервисы? 124. Как понять, что приложение в определенный момент работает исправно? 125. Как понять, что приложение за последние три дня работал исправно? 126. Как происходит проверка правильности пароля при использовании bcrypt? 127. Что такое JWT? 128. Джуниор прислал код на ревью. Что здесь не так? Как исправить? router.post ( '/ users', async (req, res, next) => {   const user = await db.createUser (req);   if (user) {     return res.json (users);   }   res.json ({error: "can not create user"}) })   Базы данных 129. Что такое Redis и для чего его используют? 130. Какие базы данных использовали? Какая разница между SQL и NoSQL? 131. Для двух таблиц - комментарии и пользователи - напишите запрос, который выбирает последние три комментария для каждого пользователя. 132. Я как заказчик прошу выбрать вас базу данных для нового проекта. Ваши действия?   Инструменты и другое 133. Для чего нужен package-lock.json? 134. В чем разница между npm install и npm ci? 135. Для чего нужны бандлеры? 136. Расскажите о модульном подключении скриптов. Приведите пример использования загрузчиков / бандлеров модулей. 137. Чем различаются git merge и git rebase? 138. Что такое staging area в git? 139. Опишите процесс code review. Назовите основные правила, способы разрешения конфликтов и споров во время его проведения.   Практические задания 140. Напишите функцию Sleep (ms), которая останавливает выполнение async-функции на заданный промежуток времени. 141. Реализуйте один из методов массива (например, splice). 142. Напишите функцию с RegExp для нахождения всех HTML-ссылок в строке. 143. Реализуйте функцию, которая исполнит callback для всех элементов определенной ветви DOM-дерева. 144. Реализуйте таблицу с виртуальным скролом. 145. Реализуйте функцию преобразования URL query строки в JSON.   const inData = "user.name.firstname=Bob&user.name.lastname=Smith&user.favoritecolor=Light%20Blue"; function queryObjectify(arg) { // ?? } queryObjectify(inData) /* Результатом виконання для вхідного рядка, повинен бути наступний об’єкт {   'user': {     'name': {       'firstname': 'Bob',       'lastname': 'Smith'     },     'favoritecolor': 'Light Blue'   } }; */ 146. Реализуйте функцию нахождения пересечения двух массивов. const first = [1, 2, 3, 4]; const second = [3, 4, 5, 6]; function intersection (a, b) { // ?? } intersection(first, second) // -> [3, 4] 147. Реализуйте функцию / класс для генерации HTML. const HTMLConstruct = {}; HTMLConstruct.span('foo'); // -> <span>foo</span> HTMLConstruct.div.span('bar'); // -> <div><span>bar</span></div> HTMLConstruct.div.p( HTMLConstruct.span('bar'), HTMLConstruct.div.span('baz') ); // -> <div><p><span>bar</span><span>baz</span></p></div> 148. Если есть проект с ограниченными сроками и некритичной производительностью, чем будете руководствоваться при выборе библиотек, подходов? Или все же будете обращать внимание на производительность? Или наоборот: сроки нелимитированные, производительность важна. Ваши действия?   Senior Общие 1. Расскажите о функциональном программировании. 2. Что такое TDD (Test Driven Development) / BDD (Behaver Driven Development)? 3. Расскажите подробно о работе HTTPS. 4. Какой стек технологий можно выбрать для реализации клона какого-нибудь известного проекту и почему? 5. Имеется проект на старых технологиях, необходимо в него вносить изменения. Как это сделать лучше всего? 6. Если у кандидата есть опыт работы с несколькими фреймворками: какой будете использовать для следующего проекта? Какие факторы будут влиять на выбор? 7. Что такое V8 Engine?   JS Core 8. Реализация паттерна Class Free OOP (HTTPs://observablehq.com/@bratter/class-free-oop). 9. Патерн async disposer (HTTPs://advancedweb.hu/what-is-the-async-disposer-pattern-in-javascript). 10. использование регулярных выражений. Когда приемлемо / неприемлемо? Как они работают? Как можно сделать читабельный код?   Front-end 11. Как браузер определяет, можем ли мы общаться между вкладками? 12. Что такое Content Security Policy? 13. Как избежать загрузки кэшированных файлов скриптов и стилей? 14. Что такое requestAnimationFrame? 15. Расскажите о микросервисной архитектуре Front-end App. 16. Что такое Shadow DOM? 17. Сравните nextElementSibling и nextSibling. 18. Какие знаете метрики веб-сайта?   Angular 19. Как проводится конфигурация NgZone-модуля? Когда это необходимо? 20. Что раздражает в фреймворке? Что бы вы изменили? 21. Если бы вы решали, что добавить в следующем релизе фреймворка, какая фича это была бы? 22. Писали ли вы кастомные декораторы? Если да, то зачем? 23. Сделать ревью кода и дать замечания по архитектуре. 24. Расскажите, как бы вы делали такие фичи. Опишите архитектуру фичи в приложении.   Back-end 25. Сравните Common.js с AMD Modules и ES6 Imports. 26. Какой фреймворк выбрали бы для бэкенда, почему? 27. Опишите своими словами, как работает OAuth v2. 28. Есть проект с источниками памяти, как их обнаружить, устранить и предотвратить это в будущем? 29. Есть проект с performance issues, как их обнаружить, устранить и предотвратить в будущем?   Базы данных 30. Какие альтернативные виды баз данных используете? 31. Что такое RDS и почему он иногда не подходит? 32. Что такое SQL Injections и как их избежать? 33. Почему для запросов в БД надо использовать плейсхолдеры? 34. Как спроектировать кластер на MongoDB? 35. Для чего используют MongoDB Aggregation framework? 36. Расскажите о GraphQL.   Инструменты 37. Можете ли вы описать суть методологии git flow в двух словах? 38. Что означает требование делать squash commits во время rebase? 39. Каково ваше мнение об альтернативных системы контроля версий (Version Control System)? 40. Какие конвенции знаете и используете для git? 41. Расскажите о своем опыте использования / внедрения CI / CD. 42. Необходимо настроить деплой проекту на несколько сред. Расскажите, как бы вы построили процесс? Какие инструменты использовали бы?   Практические задания 43. Реализуйте асинхронный метод filter для Array (должны работать await). 44. Реализуйте функцию reduce при помощи рекурсии. 45. Как можно было бы сделать toggle-компонент, как в iPhone, без использования JS?   Благодарим за помощь в подготовке статьи Вячеславу Колдовскому, Ивану Рыженку, Николаю Галкину, Александру Бурмистрову, Владу Балабашу, Андрею Шумаде, Ивану Кувацкому, Андрею Кладочному.
Як підготуватися до співбесіди англійською мовою в IT

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

Англійська в IT. Для яких задач потрібна? English у школі. Досвід автора. Яка англійська необхідна для розробників і тестувальників? Що не працює. Що реально працює у вивченні English. Як це організувати. Глосарій. Рекомендації з вивчення англійської + бонус! Висновок.    Друзі, пропонуємо до вашої уваги цікаву статтю, написану на основі інтерв’ю одного IT-спеціаліста з Кремнієвої долини. Свого часу йому потрібна була англійська для роботи над крутими міжнародними проєктами, однак на заваді став розмовний English. Це коротка та повчальна історія про те, як наш герой перепробував безліч варіантів, але таки зміг знайти той самий, що допоміг йому "заговорити" та досягти бажаного в IT. Приємного читання!     Вітаю! Сьогодні ми поговоримо про те, як швидко прокачати англійську для співбесід в IT-компанію. Я розповідатиму на прикладі свого досвіду, коли рішення на базі штучного інтелекту ще не були поширені. Трохи про себе. Мене звуть Олександр, зараз я працюю аналітиком в EPAM у Каліфорнії, проєкт у нас у компанії Google. В минулому в мене вже був досвід управління проєктами. Сам я з цеху програмістів, але зараз займаюся бізнес-аналізом. Ця стаття буде корисна насамперед для тих, хто хоче підтягнути свою англійську для роботи в інформаційних технологіях. Даний спосіб підходить не тільки для IT, а й для будь-якої іншої сфери. Коли говоримо про навчання, потрібно розуміти, що є безліч способів і варіантів. Я допоможу обрати найкращий спосіб саме в контексті роботи в IT. Після прочитання статті ви зрозумієте, як заощадити час на вивчення англійської мови. Час – це найдорогоцінніший ресурс, тому думаю, що вам буде корисно. Англійська в IT. Для яких завдань потрібна? Декілька слів про IT і яка англійська потрібна. Наведу свій приклад: коли я був розробником, English зводився до того, що я читав мануали англійською мовою, першоджерела, використовував Stack Overflow, читав на форумах. Здебільшого це була текстова інформація, тобто побіжне читання великих обсягів інформації. Якщо говоримо про якусь документацію, протоколи тощо, я виділяю це як первинний рівень знання мови. Також згадаю про англійську для резюме. Стикався з тим, що в людей чудовий інгліш, і в них у резюме зазначено, що рівень B2 або TOEFL. Але стосовно роботи це не приносило бенефітів. Потрібно чітко розділити англійську в плані роботи, особливо в IT, на два рівні. Англійська для різних ролей в IT Англійська, яка потрібна тестувальникам і розробникам, є першим вхідним порогом. Наступний поріг - це там, де потрібна комунікація, наприклад, для ролей бізнес-аналітика або проєктного менеджера, які спілкуються з англомовними замовниками або стейкхолдерами. Якщо говорити про розробників, тестувальників, архітекторів, то один із важливих аспектів - це технічне інтерв'ю. Воно може бути для співбесіди в компанію або внутрішнім. У моєму випадку, щоб підтвердити свою компетентність, я проходив assessment – іспит, на якому були присутні п'ятеро людей з різних країн із різним рівнем знання мови та акцентами. Потрібно було відповідати на фахові запитання й наводити приклади з минулого досвіду. Говорячи про технічне інтерв'ю, важливо зазначити, що англійська мова необхідна не тільки для розуміння запитань, а й для передання свого досвіду і знань. Крім того, є поняття поведінкового інтерв'ю, де теж важливо володіти мовою. Англійська в школі. Досвід автора Розповім про свій досвід вивчення англійської в школі. У нас English був із другого класу, це були базові букви та слова. У п'ятому класі почалася звичайна шкільна англійська: багато граматики, складні слова, які потрібно було заучувати напам'ять. Вимові приділялося менше уваги, особливо якщо говорити не про гімназії та школи з поглибленим вивченням мови. Ми ділилися на групи за рівнем знань. В одній групі були учні з сильнішою англійською, куди потрапив і я. В іншій групі вчителював професійний перекладач без викладацької освіти: учні слухали пісні, спілкувалися тільки англійською – навчання було більше в ігровій формі без особливого акценту на граматику. Бали в другій групі, відповідно, були нижчими. У підсумку, незважаючи на хороші оцінки в школі та інституті, в реальному житті – під час поїздок до Європи – я переконався, що моя англійська була недостатньо хорошою для повсякденного спілкування. Я не розумів людей, так само і вони мене. Чого не вчать у школі: Простоті та зрозумілості. У школі не дають базових ужиткових фраз, які можна завчити і використовувати в повсякденному житті. Швидкості й плавності. Шкільна програма не вчить швидкому читанню і розумінню загального сенсу тексту або мови без детального перекладу кожного слова. Також не вчать говорити плавно і невимушено, як і розумінню живої мови співрозмовника. Практичним навичкам. Навчитися говорити природно і розуміти співрозмовника в реальному часі – це те, що приходить із практикою і що в школі не викладають. Англійська, необхідна для розробників і тестувальників Перший і найважливіший ресурс - це час. Усі хочуть швидко вивчити мову, але в реальності це вимагає часу та зусиль. Для того щоб підтягнути англійську, потрібно нею регулярно займатися, а також використовувати на практиці. Другий ресурс - гроші. В ідеалі, щоб усе було безкоштовно. Однак навіть якщо у вас є кошти, потрібно розуміти, скільки ви віддасте і яку якість отримаєте натомість. Поріг входу Для тестувальників і розробників початковим порогом є базове володіння англійською, щоб розуміти й використовувати технічну документацію, писати прості звіти про баги, взаємодіяти з іншими членами команди. Однак, якщо ви претендуєте на роль бізнес-аналітика або проєктного менеджера, де потрібна постійна взаємодія з англомовними замовниками та стейкхолдерами, рівень англійської має бути значно вищим. Технічні та внутрішні інтерв'ю Як я вже згадував вище, англійська стане в пригоді для співбесід на роботу в іноземну команду / роботу з іноземним замовником, а також можуть бути внутрішні технічні інтерв'ю (для підтвердження кваліфікації, наприклад). Важливо вміти відповідати на фахові запитання та наводити приклади зі свого досвіду. Що не працює Вчитель-академік. Академічний підхід з акцентом на граматику і теорію мало допомагає в розвитку навичок вільного спілкування. Листи, чати та статті. Письмова практика не дає значних результатів у розвитку розмовних навичок. Голосові повідомлення. Запис голосових повідомлень створює ілюзію навчання, але не розвиває навички швидкої реакції, схоплювання на льоту та розуміння в реальному часі. Зазубрювання теорії та слів. Заучування теоретичних запитань і слів не допомагає в реальній розмові, оскільки будь-яке відхилення від завченого сценарію збиває з пантелику. Перегляд фільмів і серіалів. Хоча це корисно для загального розуміння мови, цей метод не сприяє розвитку активних навичок спікінгу та розуміння на високому рівні. Що дійсно працює під час вивчення англійської Дуже ефективним є щоденне спілкування англійською мовою по 45 хвилин або по годині на день. Це може бути розмова з носієм мови або людиною з рівнем, вищим за ваш. Важливо, щоб це була активна розмовна практика, а не пасивне сприйняття інформації. Практика в екстремальних умовах, коли потрібно швидко реагувати та формулювати думки, значно покращує спікінг-навички. Як це організувати Знайдіть співрозмовників усередині компанії. Надішліть листа колегам із пропозицією готуватися разом до професійного інтерв'ю / іспиту або чогось такого.            Вкажіть список запитань і запропонуйте зідзвонюватися раз на тиждень. Таким чином, у вас буде постійна практика. Використовуйте сервіси для спілкування.                Як приклад - сервіси на кшталт Conversation Exchange або Italki. Вони допоможуть знайти людей для практики, з якими можна регулярно зідзвонюватися і спілкуватися англійською - як професійних викладачів, так і простих ентузіастів, готових займатися за невелику платню. Саме так я заповнював свій щоденний годинний спринт. Платні викладачі. У разі якщо колег недостатньо або ви хочете підвищити інтенсивність занять, можна звернутися до платних викладачів на тому ж Italki. Глосарій У моїй практиці словниковий запас виявився особливо важливим, оскільки необхідно було впевнено використовувати професійні терміни, специфічні для розробки, тестування, архітектури та бізнес-аналізу. І щоб вільно спілкуватися, я створив свій глосарій. Як я створив свій глосарій: Взяв книжки, які вважаються "бібліями" в галузі управління проєктами та бізнес-аналізу: PMBOK (Project Management Body of Knowledge) для менеджерів проєктів. BABOK (Business Analysis Body of Knowledge) для бізнес-аналітиків. Завантажив ці книги у форматі PDF, потім скопіював їхній вміст у текстовий файл. Замінив усі пробіли на переноси рядка, щоб сформувати одну колонку тексту. Для аналізу тексту і виділення найбільш часто використовуваних слів - Excel. В Excel я створив зведену таблицю (pivot table), щоб визначити частоту слів. З тисячі слів я вибрав 40 найуживаніших і завчив їх. Це дало мені змогу швидко розширити свій професійний словниковий запас і почати активно використовувати ці терміни у своїй мові. Під час побудови глосарію важливо використовувати перевірені та авторитетні джерела. Книжки, як-от PMBOK і BABOK, надають стандартизовані терміни, які часто вживаються в професійних колах. Це гарантує, що глосарій буде достовірним і актуальним. Можете обрати інші авторитетні книжки. Головне - слідувати методиці: створіть колонку з текстом, проаналізуйте частотність слів і виберіть терміни, які найчастіше зустрічаються, для заучування. Рекомендації з вивчення англійської Щоденна практика. Перша і найважливіша рекомендація - щодня приділяти не менше однієї години на спілкування англійською мовою. Хочете добре говорити та проходити співбесіди англійською? Просто говоріть і слухайте. Уже через місяць-два регулярної практики ви побачите результати. Визначення каналу сприйняття. Важливо визначити, як ви найкраще сприймаєте інформацію: через аудіо, текст або візуальні матеріали. Експериментування. Пробуйте різні методи вивчення мови та знайдіть те, що працює саме для вас. Не бійтеся робити помилок! Підтримка мовного середовища. Оточіть себе джерелами англійської мови для поліпшення сприйняття і запам'ятовування: текстовий формат: книги, статті та новини англійською мовою; аудіо: подкасти, аудіокниги; використовуйте стікери з новими словами і розклеюйте їх на видних місцях, щоб легше запам'ятовувати; переведіть інтерфейси телефонів і комп'ютерів на англійську мову. Бонус: безкоштовний сервіс для практики англійської мови А тепер я хочу поділитися з вами справді корисним бонусом - це безкоштовний сервіс під назвою Pramp. Він дає вам змогу знаходити співрозмовників з усього світу, які мають різний рівень підготовки. Ви можете обрати тему для інтерв'ю, чи то технічну, чи то поведінкову співбесіду. Алгоритм використання Pramp простий: Знайдіть людину для спілкування: на вибір безліч країн, співрозмовники з різним рівнем англійської. Виберіть тему для інтерв'ю: FrontEnd, системний дизайн, поведінкове інтерв'ю тощо. Організація зідзвону, який триває близько 30 хвилин. У вас є заздалегідь підготовлений набір запитань. Ставите запитання своєму співрозмовнику, робите нотатки про те, що сподобалося і що можна поліпшити. Обмін ролями: ваш співрозмовник ставить вам запитання. У сервісі є безліч готових наборів запитань для кожної тематики. Ви можете слідувати їм або використовувати свій власний список. Так само може вчинити і співрозмовник. Повторюся: сервіс безкоштовний. Ви зможете спілкуватися з людьми з різних країн і з різним професійним досвідом; питання і теми максимально наближені до реальних співбесід. Ви не лише покращите свої мовні навички, а й отримаєте цінні поради щодо проходження інтерв'ю. Я використовував цей сервіс для підготовки і можу сказати, що це чудова можливість. Спілкувався з менеджерами проєктів, інженерами з Америки, Азії та Індії. Pramp ідеально поєднує в собі всі необхідні елементи для успішної підготовки до проходження співбесід. Висновок Найголовніше у вивченні англійської - це регулярність та інтенсивність практики. Щоденні заняття по годині в стресових умовах із різними співрозмовниками допоможуть швидко підвищити рівень англійської мови, поліпшити швидкість і плавність мовлення, а також розвинути навички розуміння співрозмовника. Свого часу мені дуже допомогли Conversation Exchange, Italki, Pramp. У моєму випадку я перепробував багато різних варіантів: тексти, статті, аудіокниги, серіали, подкасти, викладачі англійської. Спостерігав збільшення словникового запасу, вдосконалення граматики, але "заговорити" так і не міг. Зрештою, саме регулярний живий розмовний формат і допоміг мені досягти успіху на англомовній співбесіді та здійснити мої кар'єрні амбіції. Впевнений, що мій досвід виявиться цінним для багатьох із вас. Успіхів у вивченні англійської! 
Створюємо Telegram бота на Python частина-1

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

Существует множество различных статей и учебных пособий по созданию ботов для телеграмм, некоторые из них достаточно сложны, часть требует знания отдельных технологий и фреймворков. В данной статье мы рассмотрим создание чат бота в мессенджере Telegram с нуля. От нас не будет требоваться каких-то специальных знаний. Для начала достаточно будет начальных знаний языка Python в качестве языка программирования.   Часть 1: Регистрация нового Telegram Bot-а Для начала вы должны быть зарегистрированы в Telegram- мессенджере. Далее, вы в мобильной, десктопной или web-версии мессенджера открываете общение с ботом @BotFather, либо по ссылке  https://telegram.me/botfather. После начала общения с этим ботом, нажав /start, вы получите ответ от бота с указанием его возможностей. Нас интересует создание нового бота - /newbot. После того как мы введем /newbot нас попросят придумать имя для нашего нового бота. Пусть оно будет MyFirstTestBot. Далее нам нужно придумать юзернэйм для нашего бота. В нашем случае это будет mft001_bot. После этого BotFather высылает нам специальный токен: Наш токен оказался: 851216368:AAG6_JHHsIqAK-lX2CxOWQHTAM109zdrcZM  (В вашем случае токен будет другой.) Этот токен понадобится нам при настройке нашего бота. Токен должен быть сохранён. Именно он  является единственным ключем для взаимодействия с ботом. Также мы получаем ссылку на нашего бота. В моем случае это t.me/mft001_bot. Теперь наш Tekegram-бот создан. Мы можем начать настраивать своего бота, например, установить изображение для бота, изменить или добавить описание бота и тп. С регистрацией бота мы закончили. Наш бот уже есть, но на данный момент он еще ничего не умеет. Теперь нам нужна его начинка – какой-то механизм, который будет обрабатывать наши запросы к этому боту и возвращать нам ответы.   Часть 2 Написание кода Как и написано выше мы будем создавать нашего бота на языке Python. Установите его с официального сайта, если вы используете Windows или выполните команду в терминале на Linux: sudo apt-get install python python-pip Далее воспользуемся системой управления пакетами PIP, которая используется для установки и управления программными пакетами, и установим библиотеку PyTelegramBotAPI (Telebot): pip install pytelegrambotapi –user  Создадим логику работы нашего бота. Используя полноценный IDE или простой текстовый редактор создадим файл ourbot.py и заполним его необходимой логикой. Для начала нам нужно выполнить импорт библиотеки PyTelegramBotAPI (Telebot), написав в нашем файле: import telebot  Далее подключим нашего бота, используя полученный ранее токен:  bot = telebot.TeleBot('851216368:AAG6_JHHsIqAK-lX2CxOWQHTAM109zdrcZM') Теперь создадим метод, для получения сообщений. Возможности PyTelegramBotAPI позволяют отправлять боту аудио (content_types=['audio'), видео (content_types=['video'), документы (content_types=['document'), текст (content_types=['text'), географический адрес (content_types=['location'), данные контакта (content_types=['contact') и стикеры (content_types=['sticker').  Мы, для простоты опыта, будем общаться с ботом только текстом: @bot.message_handler(content_types=['text']) def handle_text_messages(message): Теперь рассмотрим логику обработки наших текстовых сообщений. Мы хотим захардкодить простое общение бота с пользователем: бот должен уметь здороваться, когда с ним здороваются, уметь отвечать на вопросы «Кто ты?», «Как тебя зовут?» и «Что ты умеешь?».     if message.text == "Привет":         bot.send_message(message.from_user.id, "Привет")     elif message.text == "Кто ты?":         bot.send_message(message.from_user.id, "Я тестовый чатбот для учебного примера.")     elif message.text == "Как тебя зовут?":         bot.send_message(message.from_user.id, "Меня зовут MyFirstTestBot.")     elif message.text == "Что ты умеешь?":         bot.send_message(message.from_user.id, "Я умею отвечать на несколько простых вопросов - кто я, как меня зовут и что я умею делать.")     else:         bot.send_message(message.from_user.id, "Я тебя не понимаю. Напиши что-то другое.") После тела метода, обрабатывающего наши запросы к боту, добавим вызов метода: bot.polling(none_stop=True, interval=0) Задачей этого метода является создание потока, в котором бот отправляет запросы на сервер, уточняя таким способом, не писал ли ему кто-то сообщение. Параметр none_stop: False означает, что наша программа будет продолжать отправлять запросы на сервер после получения сообщения об ошибке от сервера Telegram. Сохраним наш код: Мы можем протестировать работу нашего бота, запустив его код в той IDE, в которой мы писали. И написав нашему боту в мессенджере. Все работает. Наш учебный Telegram-бот создан. Мы можем запустить наш файл локально, и он будет отрабатывать запросы к нему через мессенджер прямо на нашем компьютере, выступающим в роли сервера. Но это не очень удобная практика. Для нормальной работы код желательно залить на отдельный сервер и запустить его там. Вопросы заливки нашего простого бота на сервер мы рассмотрим в следующей статье.   Резюме Как мы увидели, создание работающего бота на Python для Telegram мессенджера достаточно просто. Для простых ботов не нужно использовать сложные решения - есть удобная библиотека PyTelegramBotAPI, позволяющая решить такие задачи.  В нашем учебном примере мы рассмотрели только работу с текстом, но, благодаря этой библиотеке, бот может работать и с другими форматами данных. Попробуйте сами сделать своего бота, отвечающего на ваши вопросы. С нашей стороны мы рекомендуем ознакомиться с курсом подготовки Python-разработчика. Знания, полученные после прохождения данного курса позволят вам не только создавать различные приложения, но и получить полноценную профессию разработчика программного обеспечения.
Як не здатися і все ж таки стати програмістом?

Автор: Дмитро Хорошилов

Вы день и ночь в поте лица изучаете синтаксис, фреймворки, решаете задачи, посещаете курсы, смотрите видеоуроки, читаете книги, но все никак не можете сдвинуться с мертвой точки — наконец-то начать программировать самостоятельно или найти первую работу. Вы раз за разом открывает IDE, чтобы начать писать код, но потом откладываете это занятие. Потому что в данный момент вам меньше всего хочется писать код. И вы по пятому кругу читаете посты на фейсбуке, смотрите видео с котиками и глупые гифки. Вам начинает казаться, что изучать программирование - это не ваше. Вы в очередной раз открываете важную и сложную книгу по программированию, но, как бы вы не пытались сосредоточиться, информация не откладывается в памяти. Более того, постоянно приходится по несколько раз перечитывать предложение за предложением, чтобы хоть немного понять, о чем речь. Знакомо? Иногда, особенно в процессе изучения чего-то нового и сложного, ваш мозг начинает играть с вами в каверзные игры. Он всеми силами пытается сопротивляться обучению, вгоняя вас в состояние прокрастинации и ступора. Самым неверным в сложившейся ситуации будет сдаться и отдаться во власть отчаяния. В этом материале мы поговорим с вами, как справиться с прокрастинацией, как заставить мозг учиться и как в конечном итоге получить желаемую работу, влиться в среду профессиональных разработчиков. Что такое прокрастинация? На самом деле, прокрастинация — это привычка. Вы шаблонно реагируете на какой-то раздражитель, когда вам следует заниматься тем, чем вы не хотите. Как следствие, вы пытаетесь отложить «нелюбимое» дело в долгий ящик и придумываете какие угодно дела взамен, лишь бы не делать что-то важное. Но то, что приносит удовольствие на короткое время, не всегда полезно в долгосрочной перспективе. Благо, с прокрастинацией можно бороться, как и с любой другой плохой привычкой. Как бороться с прокрастинацией? Вот несколько советов, что стоит делать и на что необходимо обращаться внимание: - Не тратьте силу воли на борьбу с прокрастинацией. Потому что это настолько же безрезультатно, как и бороться с пятиголовым драконом без специального оружия. Вы будете отрезать голову и усилием воли заставлять себя учиться, то есть тратить много сил, а голова будет опять вырастать. В итоге, вы в какой-то момент просто бросите эту затею и уйдете с поля битвы. - Не оставляйте все на последнюю минуту. Представьте спортстмена, который начинает тренироваться за два дня до забега. Как думаете, как он будет себя чувствовать и  в каком состоянии будут его мышцы, если он будет заниматься два дня по 10 часов каждый, вместо 2-х месяцев по часу? Как думаете, после такого у него будут шансы пробежать марафон? Очевидно, что нет. Как и с мышцами, мозг необходимо тренировать постепенно, понемногу, но постоянно. Лучше учитесь по 20 минут, но на протяжении 10 дней, чем по 10 часов, но на протяжении двух дней. - Делайте перерывы во время учебы. Да, позволяйте себе отдыхать и хорошо высыпаться. Не зубрите дни и ночи на пролет. Подолгу сидя над учебой, вы не усвоите больше. Благодаря небольшим передышкам, наш мозг получает возможность «переварить» полученную информацию. - Не откладывайте на потом. Чем на дольше откладываем, тем больше всего нам надо изучить. А значит, тем страшнее и больнее нам этим заняться. Парадоксально, но факт, чем лучше вы овладеваете каким-то навыком, тем больше вам нравится им заниматься. - «Коллективная мудрость». Не бойтесь обращаться за советом к коллегам, другим студентам. Если вы занимаетесь в одиночку, найдите обязательно себе ментора, к которому сможете обращаться за советом в моменты ступора. Если у вас нет возможности найти наставника, сходите на курсы. Старайтесь больше задавать вопросов, даже если они вам кажутся чрезвычайно глупыми. - Ориентируйтесь на процесс, а не на результат. Очень часто мы зацикливаемся на результате. И если он не достигнут, нас посещают мысли, отзывающиеся болью в мозгу, провоцируя нас прокрастинировать. Например, мы думаем: чтобы найти свою первую работу, так много еще надо всего выучить. Отпустите эти мысли, лучше сосредоточьтесь на процессе: я учу, я пишу, я делаю. И вы не заметите, как в скором времени скажете: я работаю. В этой части мы поговорили с вами о том, как лучше учиться, как бороться с ужасной и неукротимой прокрастинацией. Когда прокрастинация побеждена Теперь я бы хотел дать несколько рекомендаций о том, что делать, когда вы победите своего змея. Как только вы научитесь держать себя под контролем, ваши дела заметно пойдут вверх. Вы будете все больше получать удовольствия от процесса получения и практического применения новых знаний. В какой-то момент вам покажется, что вы готовы начать работать. Чтобы опять не попасться в капкан прокрастинации, поставьте себе цель и придумайте мотивацию. Например, цель: я найду первую работу за 3 месяца. Обязательно спланируйте, какие шаги вы будете предпринимать для того, чтобы найти работу: - напишу хорошее резюме на двух языках, - буду отслеживать вакансии и реагировать на них, - составлю список компаний, которые подходят мне по профилю — разошлю им резюме с мотивационным письмом, - начну готовиться к собеседованиям: подтягивать теоретические знания, подготовлю свое первое программистское «портфолио». А вот мотивация — это очень индивидуально, но обязательно важно. Найдите что-то свое: деньги, отдых, друзья, любимые, покупки и т.д. Надеюсь, теперь, когда вы знаете, что такое прокрастинация и как с ней бороться, вам станет намного проще двигаться по намеченному вами пути и не сбиваться с него. Главное, помните, что отдых тоже полезен. Борясь со своими чертиками, не забывайте хорошо высыпаться (это самое главное условие для хорошего усваивания знаний), отвлекаться, например, заниматься спортом, хорошо и вкусно питаться. Я уверен, что следуя этим полезным советам, вы очень скоро добьетесь успеха!
5 міфів про програмування, які стримують новачків

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

Світ ІТ приваблює багатьох: висока зарплата, віддалена робота, цікаві завдання. Але перед тим як почати навчання, чимало людей зупиняються… через страх. І часто причина — у міфах, які давно не мають нічого спільного з реальністю. У цій статті ми розвінчуємо п’ять найпоширеніших міфів, що заважають новачкам почати шлях у програмуванні. Міф 1  «Щоб стати програмістом, треба бути математичним генієм» Цей стереотип і досі лякає багатьох. Насправді ж для старту в ІТ потрібне логічне мислення, а не знання вищої математики. Так, у деяких напрямках (наприклад, Data Science або GameDev) математика важлива. Але у Web-розробці, QA, DevOps, Backend-проєктах ти можеш працювати, навіть якщо в школі не любив алгебру. Факт: згідно з дослідженням IBM, 72% ІТ-фахівців мають гуманітарну освіту, а не технічну. Міф 2 «Навчання триває роками» Традиційна вища освіта — це 4-5 років, але в ІТ усе інакше. Онлайн-курси, буткемпи, інтенсиви — дозволяють отримати базу за 6–12 місяців. На платформі ITVDN студенти вивчають HTML, CSS, JavaScript, Python або C# у своєму темпі та отримують практичні навички, які потрібні роботодавцям.Навіть після кількох місяців навчання можна знайти стажування або пройти тестове завдання. Міф 3  «Програмування — це тільки для “ботаніків”» Є уявлення, що програміст — це замкнена людина, яка говорить лише з комп’ютером. Насправді це творча і командна професія. В ІТ цінують комунікацію, ініціативу, вміння шукати рішення. Багато розробників починали як фітнес-тренери, вчителі, маркетологи або менеджери. Програмування — це навичка, яку може опанувати кожен. Міф 4 «Без університету тебе ніхто не візьме» Сучасні компанії цінують скили, а не дипломи. Якщо у тебе є GitHub, виконані проєкти, сертифікати, знання англійської — це вже дає перевагу на старті. Більшість студентів ITVDN не мають ІТ-диплому, але після навчання успішно проходять співбесіди та отримують першу роботу. Під час рекрутингу найважливіше — практика, мислення і портфоліо, а не формальна освіта. Міф 5 «Щоб стати програмістом, треба одразу знати всі мови» Це один із найбільш шкідливих міфів. Насправді достатньо обрати одну мову для старту — і з неї побудувати фундамент. Наприклад: Python — чудовий для аналітики, автоматизації, бекенду JavaScript — ідеальний для веб-розробки C# / .NET — популярний для корпоративних застосунків Потім ти зможеш додати інші мови, але спочатку важливо навчитися думати, як програміст. Міфи — це психологічні бар’єри. Вони народжуються з незнання, чужого досвіду або застарілих уявлень. А правда така:  ✅ У програмування можна прийти з нуля  ✅ Навіть якщо тобі далеко не 20  ✅ Без технічної освіти  ✅ І без “геніального” рівня IQ Головне — мотивація, правильна програма та підтримка, які допоможуть пройти шлях від першого коду до першого оферу.
Notification success