Я розробник і це моя історія про створення проєкта для інших розробників
Історія про те, як один розробник в Україні вирішив спробувати створити власний проєкт interviewboom.com.
Це трохи незвично говорити про себе в третьому лиці, але це така собі автобіографічна історія, заснована на реальних подіях. У цій історії немає шаленого успіху й хайпу. Немає визнання, підтримки, фінансування, друзів, які б поділилися своїм досвідом або допомогли.
Хоча є люди, які все ж таки трохи допомогли. Десь на початку розробки деякі люди, імена яких я пам’ятаю. Вони дійсно просто повірили в цю ідею і доклали трохи своїх сил на старті.
Але по факту чуда не було: просто тяжка рутина і віра, що це комусь буде корисно. Іноді не було ніяких сил і бажання, особливо зараз, коли така ситуація в країні, але я хотів принципово довести цей проєкт до робочої версії, бо його місія — навчання і тренування скілів для розробників. Підготовка до технічної співбесіди. Обмін досвідом. Розвиток вітчизняного Dev-community.
Ця стаття про тишу в кімнаті, де крім звуку клавіатури не чути нічого. Ця атмосфера сповнена надії, що ідея має потенціал, хоч повільно, але ми наближаємося ближче до цілі. Коміт за комітом щось відбувається: є прогрес, є покращення функціоналу. Нові користувачі реєструються, пробують проходити тести, хоч мало хто залишається і регулярно проходить тестування; більшість просто спробувала і зникла — стабільної активності немає. Але на цьому етапі я не очікую шаленого притоку — очікую лише відгуків і перших вражень. Неважливо, чи негативні, чи позитивні: головне — не залишити користувача байдужим.
Історія розробки і погресу проекту, від ідеї до робочого результату
Спочатку я хотів зробити прості тести, де можна було б зібрати всі актуальні питання для перевірки знань з мови програмування та підготуватися до співбесіди. Оскільки сам проводжу технічні співбесіди і вирішив, що це буде корисним іншим, хто витрачає багато часу на підготовку.
Це було цікаво, але як же показати результат проходження тесту так, щоб це було конструктивно і інформативно?
Деякі сайти просто виводять список правильних і неправильних відповідей наприкінці. Мені ж хотілося створити високу варіативність, рівні складності і збільшити глибину питань. Питання повинно змусити замислитися над тим, у чому полягає суть задачі та як її застосувати на практиці.
Я лінкую до конкретного питання: конкретний скіл чи фічу — це, по суті, мікротема або маленький підрозділ напрямку, в якому відбувається тестування. Щоб кожне питання було в контексті конкретної фічі. І я вирішив, що як результат показуватиму графік, де ми оцінюємо кожен скіл за рівнем складності й підраховуємо кінцевий результат за цими показниками.
Ось так виглядає зараз фінальна сторінка тесту

Також до питань і відповідей бажано додавати практичні приклади коду та зображення. Щоб текст доповнювався візуалізацією, коли складно описати це текстом, і підкріплювався прикладами коду та команд. Для цього було проведено дослідження, і в результаті ми (тобто я і мій здоровий глузд) зрозуміли, що тулити туди редактора коду буде оверхедом, і знайшли універсальний формат — формат Markdown. Markdown — всі розробники знають: це універсальна мова, нею користуються і в коді, і в документації.
Складність тесту — це найскладніша штука. Це так само, як визначити рівень розробника: усе дуже абстрактно, і немає чіткого визначення рівня складності теми залежно від рівня розробника. Але моя ідея полягала в конфігурації глибини питання: чим складніше питання, тим більше підтем воно охоплює. В результаті вдалося знайти оптимальний алгоритм. Але судити вам, чи мені це вдалося.
Балансування складності
Окрім цього, питання в тесті не повинні занадто сильно фокусуватися на одній темі, тому в тесті застосовують принцип генерації більшості питань, які відповідають рівню тесту, і десь 20% — це можуть бути питання вищої або нижчої складності.
За питання вищої складності бал не знімається, якщо юзер не зміг відповісти, але за питання, яке простіше, звичайно, знімається. Все як на реальній співбесіді: там теж бувають розбалансовані питання, щоб зрозуміти, наскільки ви кваліфіковані, і оцінити ваші здібності. І коли джуніору задають щось із високої матерії, як правило, це не означає, що він провалив тему, але якщо зможе відповісти, це буде прямо великий плюс.
У своєму проєкті теж використовую подібний алгоритм.
Окрім балансування складності, я ще балансую над варіативністю тем в тесті, оскільки питання підбираються випадково: можливий сильний перекіс в сторону однієї теми, тому алгоритм підбору питань в тесті бере максимум по два питання на 1 тему. За винятком випадків, коли користувач навмисно обирає для себе якийсь конкретний скіл для тестування. Тоді тест фокусується виключно на тому, що юзер обрав для себе.
Час тесту
Час на співбесіді відіграє чи не найважливішу роль. Коли кандидат занадто швидко відповідає, це привід замислитися, чи не чітер він. І навпаки: коли кандидат дуже довго думає, це може сприйнятися як незнання теми, навіть коли він відповів, але зайняло половину співбесіди.
Тому в тестах є можливість проходити з таймером і без нього. З таймером це означає, що йде зворотний відлік — такий собі режим змагання: якщо не вклався в час, тест вважається проваленим. А коли проходження тесту без таймера, то це простий відлік часу, щоб зрозуміти, скільки ви вже часу проходите тесту, хоч бескінченно.
У режимі змагання таймер додає бонусний час, якщо ви відповісте на питання швидше, ніж за 1 хвилину. Але це можна збільшити, поки чекаю фідбеку від користувачів, щоб зрозуміти, чи це забагато чи замало.
Пояснення відповідей і переклади
Питання в тестах бувають різні і іноді взагалі незрозумілі. Люди здебільшого хочуть навчитися чомусь новому, а не просто швидко проходити тести, тому важливо пояснити, чому ця відповідь правильна, а інша неправильна. Я до цього прийшов не одразу, бо додавання тестових питань займає багато часу, але з появою AI-індустрії цей процес значно спростився, тож я можу його автоматизувати. І тепер можна відповідати на питання й одразу бачити, чи правильно відповів, а для кожної відповіді — чітке пояснення.
Ну і, звичайно, моя головна аудиторія — це українці, тому всі питання перекладаються на дві мови: українську та англійську.
Наступні кроки
Оскільки робота над проєктом кипить, зараз головна задача — ще зробити roadmap для користувача на конкретному рівні і стеку. Наприклад, якщо юзер шукає роботу в веб-розробці, то логічно, щоб він спочатку опанував рівень Junior JavaScript. Тоді roadmap підтягне потрібний набір скілів, щоб рухатись до цілі. Це було б чудово давати юзеру персональну карту розвитку, щоб він бачив, які скіли він ще не покрив або яких йому не вистачає, щоб рухатись далі.
Підсумок зробленої роботи
Окрім того, що я перерахував вище, було зроблено багато іншої роботи, але, думаю, це не влізе у статтю і навряд чи буде корисно знати. В цілому, хочу сказати відверто: я здавався багато разів на шляху, поки не відбувся перший реліз робочої версії. Я хотів покинути проєкт. Але люди, яким сподобалася ідея і які позитивно відреагували, трохи давали драйву, щоб все ж таки допиляти. Зізнаюсь, що все одно я б волів просто працювати далі на основній роботі й жити життя. Але я почав отримувати задоволення не від чийогось визнання, а від самого процесу. Я зрозумів одну річ: справжній надійний результат — це не короткочасний хайп і емоційна ейфорія, а довготривалий і кропіткий процес. Можна порівняти зі спортзалом: у перший день хочеться бачити результат, але перемагають сувора самодисципліна і постійність відвідування тренувань. Як це простіше сприймається? Наприклад, сьогодні зробив коміт у коді — здається, що ніякого впливу немає, і іноді не розумієш, навіщо це все. Але будь-яка зміна — це прогрес, навіть маленька. Нам здається, що результат — це щось таке велике і швидке. Але так не буває. Мій 100% успіх у цій справі — це те, що я не перестаю працювати над проєктом і фокусуюсь на одному конкретному напрямку, покращую якість питань і додаю дедалі більше нових склілів, а також нових тестів різної складності. Я наразі не маю монетизації й продовжую розвивати проєкт як безкоштовну платформу для навчання і тренування своїх знань.
Немає коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів