03/02/2022
💪Співбесіда VS реальна робота: які навички стануть у пригоді початківцям Python-розробникам
На інтерв'ю початківцям Python-розробникам часто ставлять запитання з тих галузей знань, які навряд чи стануть у пригоді протягом перших місяців реальної роботи. Так відбувається через те, що конкуренція на початкові позиції є дуже високою. Питання на виріст допомагають роботодавцям з великої кількості кандидатів вибрати найбільш підготовлених та вмотивованих.
✅Що, окрім Python, можуть запитати на співбесіді
Нижче наведено приклади запитань, які можуть трапитися на співбесідах, але в реальному житті навряд чи трапляться Junior-розробникові. Однак це не означає, що їхньому вивченню потрібно приділяти менше уваги.
✅Алгоритми
Базові алгоритми сортування та пошуку зараз запитують у фахівців будь-якого рівня. Так роботодавець перевіряє загальні знання теорії алгоритмів, розуміння основних принципів ефективного розв'язання цих задач та оцінює здатність розробника бачити можливості для оптимізації коду.
Однак у реальній роботі Junior-фахівець ніколи не відтворює алгоритми пам'яті. У всіх мовах програмування стандартні завдання реалізовані внутрішніми засобами.
Окрім цього, заучена теорія за алгоритмами ще не гарантує, що розробник-початківець зможе застосувати ці знання на практиці. Самостійно помітити, що написаний код алгоритмічно неефективний, досить складно — це приходить тільки з досвідом. На перших етапах упоратися із цим завданням допоможуть старші колеги на код-рев'ю.
Також багато залежить від галузі програмування. При створенні наукомістких продуктів, наприклад, пошукових систем або ігрових движків, алгоритми необхідні. Проте більшість додатків, де дуже важливі ефективність і швидкість, пишеться мовами С або C++. Python дозволяє швидко вести розробку програм, але за швидкістю виконання поступається багатьом іншим мовам.
Для веброзробки знання класичної теорії алгоритмів не таке пріоритетне. Тому протягом співбесіди на Junior-Python-розробника запитання щодо алгоритмів — це, швидше, додатковий фільтр. Він показує, що претендент зацікавлений у темі та розширенні кругозору.
✅Як працює інтернет
Ще одне популярне питання на співбесіді — що відбувається в той момент, коли в рядку браузера вводять адресу сайту? Він перевіряє загальне розуміння того, куди йдуть запити, звідки надходять відповіді, як у все це залучений браузер.
Ця галузь знань переважно використовується в роботі Frontend- і Fullstack-розробників. У повсякденному житті Junior-фахівцеві це знання може знадобитися, якщо він поєднуватиме розробку з позицією DevOps або системного адміністратора. Як і у випадку з алгоритмами, такі запитання ставлять на співбесідах, щоб оцінити світогляд та глибину знань.
✅Метакласи
Метакласи — тема більш просунутого рівня, зазвичай з нею стикаються претенденти на Middle-позиції й вище. Проте розробнику-початківцеві також можуть поставити запитання з приводу метакласів, щоби з'ясувати, наскільки ерудований кандидат.
Метакласи — інструмент для динамічного створення класів. Він використовується вкрай рідко, наприклад, у розробці фреймворків.
✅Шаблони проєктування
Python — мова з динамічною типізацією, тобто тип змінних не оголошується заздалегідь, а визначається впродовж виконання програми. Одна й та сама змінна може по черзі містити рядок, число, список, словник, об'єкт.
Класи та функції також можуть перебувати в змінних і передаватися до інших функцій як аргумент. Тому Python не потребує такої великої кількості патернів проєктування, як Java або C++. Докладніше про це можна прочитати в статті про те, чому нам не потрібні шаблони проєктування в Python.
Багато шаблонів у Python реалізовані просто та зручно, користуючись структурою та можливостями мови, вони вже вбудовані в базовий синтаксис, їх не потрібно створювати окремо.
Також досить легко працювати з декораторами. Не всі Python-розробники навіть назвуть це окремим патерном, настільки природно вони сприймаються в мові.
Однак запитання про шаблони проєктування однаково можуть трапитися на співбесідах. «Які види патернів ви знаєте?» або «Перелічіть шаблони проєктування, які ви знаєте». На початковому рівні розробники часто не замислюються про те, які патерни використовують, тому почитати про їхню класифікацію та реалізацію точно варто заздалегідь.
✅GIL, асинхронність та все-все-все
Багатопотоковість, багатопроцесорність, асинхронність, як усе це працює й що таке GIL — ще одна галузь знань, яка точно не знадобиться в перші місяці роботи більшості претендентів, але про яку можуть запитати на співбесіді.
Подібні підходи використовуються в highload-проєктах (високонавантажені вебдодатки), спеціалізованих фреймворках, наприклад, Tornado, Twisted, Aiohttp або при виконанні складних обчислювальних завдань. Робота з ними вимагає більш просунутих навичок у програмуванні, тому Junior-Python-розробник навряд чи зіткнеться з багатопотоковістю та асинхронністю в перший рік роботи.
Однак це не означає, що матеріали на ці теми можна сміливо ігнорувати. На співбесіді знання в таких галузях допоможуть вигідно виділитися на тлі інших кандидатів.
✅Які навички стануть у пригоді в реальній роботі
Перші місяці в компанії Junior-фахівець адаптується до внутрішніх процесів, тому виконує переважно невеликі завдання: пофіксити баги, викотити невеликі фічі, доповнити документацію, написати тести для непокритої частини коду. Щоб успішно з ними впоратися, потрібно розбиратися не лише в мові, а й у суміжних галузях знань.
✅SQL та бази даних
Складно уявити таку роботу, на якій Junior-Python-розробникові знання на цю тему не знадобляться. Вони будуть потрібні в базових операціях: зробити вивантаження з бази даних, додати нову інформацію, проаналізувати SQL-запит, сформований фреймворком.
✅Git
Система контролю версій — невіддільна частина колективної розробки. Потрібно знати основні команди, уміти створювати гілки та розв’язувати конфлікти. Від Junior-фахівця чекають, що йому не доведеться пояснювати з нуля, як вносити правки й при цьому нічого не зламати. Звичайно, у більшості компаній налаштування прав не дадуть випадково виконати git push-force та стерти чужі зміни, але наявність базових навичок роботи з git помітно полегшить життя вам та вашим колегам.
✅Фреймворк
Зазвичай у вакансіях уже зазначено, у якому фреймворку доведеться працювати. І досвід розробки на ньому є важливим критерієм для роботодавця. Сьогодні найбільш популярний Python-фреймворк Django. Якщо він вказаний у вакансії, то бажано знати, що таке моделі, додатки, форми, шаблони, view, міграції (як їх створювати та виконувати), а також уміти налаштовувати адмінку та працювати з нею.
Другий за поширеністю фреймворк — Flask. Тут повторіть, як обробляються запити, як фреймворк взаємодіє з базами даних, як працюють шаблонізатори.
✅Термінал Linux
Під управлінням Linux працює 96,5% серверів з першого мільйона доменів у світі, тому при розгортанні коду без цієї ОС не обійтися. При цьому не у всіх компаніях є DevOps-інженери, які допомагають донести зміни в коді на сервер, іноді це доводиться робити самому розробникові.
Junior-фахівцеві необхідно знати основи взаємодії з терміналом Linux: робота з файлами та директоріями, користувачі, групи та супер-юзери, структура та призначення стандартних каталогів, а також встановлення та видалення програм. Крім того, працювати з терміналом Linux загалом набагато зручніше: деякі операції можна виконати набагато швидше, ніж через графічний інтерфейс.
✅Культура коду
Розробники-початківці часто забувають, що код пишеться для людей, а, отже, повинен бути структурованим і зрозумілим. Обов'язковою складовою тут є сувора відповідність стандартам оформлення коду, які прописані в PEP 8: наприклад, довжина рядка не більше ніж 79 символів, наявність потрібної кількості порожніх рядків між функціями та класами, назви змінних з малої літери, класів — з великою, а констант — повністю заголовними, наявність пропусків навколо знака рівно в одних випадках та відсутність в інших.
Ще одна часта помилка новачків — економія на символах і спроба написати максимально коротке рішення. Яким би витонченим воно не було, у ньому складно розібратися з першого погляду. Звичайно, код повинен бути ефективним, але не на шкоду читання.
✅Soft skills
Для роботи в команді недостатньо лише технічних навичок. Відповідальність, уважність, швидке навчання, уміння зрозуміти суть завдання й оцінити, скільки потрібно часу на його виконання, сміливість ставити уточнювальні запитання — усе це необхідні навички при роботі з командою на тривалій дистанції.
✅Як використовувати ці знання протягом підготовки до співбесіди
Основні запитання впродовж інтерв'ю на позицію Junior-Python-розробника зазвичай стосуються самої мови. Наприклад, структури та типи даних, чим вони відрізняються один від одного і які в них є стандартні методи, як працювати з функціями та класами, що таке ООП, поліморфізм, інкапсуляція та спадкування. Однак акценту на підготовці лише на Python недостатньо — важливо пам'ятати й про суміжні галузі про які ми говорили раніше.
Щоби вибрати найбільш відповідного кандидата, роботодавець перевіряє рівень знань Computer Science загалом, а також оцінює зацікавленість у самостійному вивченні нового матеріалу. Запитання можуть виходити за межі майбутніх робочих обов'язків, тому співбесіда вимагає окремої та ретельної підготовки.
Уважно читайте текст вакансії — найчастіше у вимогах можна знайти підказки. Якщо написано, що необхідне знання алгоритмів або шаблонів проєктування, то запитання про них точно будуть в інтерв'ю. Там можна подивитися, з яким фреймворком доведеться працювати, щоб оновити знання по ньому.
Не заучуйте теорію бездумно — так вона забудеться відразу після співбесіди та згодом доведеться повторювати все ще раз. Найкраще закріпити знання на практиці. Спробуйте створити програму або додаток, де зможете використовувати вивчені інструменти. Це допоможе вам краще засвоїти матеріал та легко відповісти на запитання протягом інтерв'ю.