Проблеми TypeScript у світі React-додатків вiд Iллi Климова на React fwdays | 27 березня

DOIT Software

21...80 специалистов
Киев

21 февраля 2019 22:22

Vladimir Samoylenko, Lead mobile developer iOS & Android

Вітаю!

Хочу поділитись власним досвідом виконання тестового завдання для цієї «компанії».

Співбесіда з рекрутером.
Повідомляє про тестове завдання — питаюсь як робити з усіма бантиками на Swift, чи можна на Оbjective-C.
Отримую відповідь , що Оbjective-C теж треба знати, тому можна і на Оbjective-C.

Отримав завдання.

github.com/...​task_ Update 15_02_19.pdf

Просто мовчу, що зразок інтерфейсу в тестовому був для Андроїд.

Зразу сказав рекрутеру, що старий девайс для тесту Айфон 5 який вже майже два роки як не отримує оновлень для операційної системи, то є не зовсім правильно.

Мені сказали, що у тестера саме такий девайс. Хай буде так :)

Позвонив родичам попросив на кілька днів свій старий айфон, бо у мене 7+

Аналіз завдання показав, що це маленька, але таки повноцінна аплікація.

Основні свої зауваження до тестового завдання я написав у описі репозиторію
github.com/...​itsofware.test.assignment

Не встигав доробити інтеграцію з мережею, бо виконання тестового затягло мене на п«ятницю, суботу, неділю, понеділок і вівторок. Назбиралось інших задач. Треба зупинитись.

Отримав такий відгук:
«Нажаль, за результатами тестового завдання ми не можемо з Вами рухатися далі.»

+файлик від тестера
+файлик від ревьюєра

Таке враження, що люди навіть не розуміють суть тестового завдання. Дуже схоже у них було замовлення з Апворку, яке треба було закрити...

У мене є 3 такі зауваження:
1) Чому тестер «фірми» пише зауваження стосовно не зазначених вимог?
Претензія тестера:
«Немає валідації емейлу. Пароль не зашифрований»

Ця вимога відсутня в специфікації.

2) Зауваження від ревьюєра «Хочу начать с того, что Objective-C редко используется для написания новых проектов.»

Вибачте, але я питався про це у рекрутера ще перед отриманням тестового завдання.

Спробуйте поспілкуватись в офісі може, щоб була однакова версія :)

3) Формальний підхід до перевірки тестового завдання. Получається через те, що перша частина тестового завдання була виконана тільки 2 задачі з 7-ми, то опціональні задачі 2 та 3, що були виконані навіть на розглядались.

Цікаво а у який спосіб пан ревьюєр збирався вирішити питання зберігання данних для подальшої синхронізації даних після появи мережевого з’єднання? А чи допускався варіант перезавантаження девайсу? А чи допускався варіант вивантаження додатку з пам’яті девайсу?
А чи розуміє пан ревьюєр , що після виконання завдання 3 прийдеться повністю переробити перший пункт завдання?
Скоріше всього Ні! Ні! і знову Ні!

Резюме:
Обходьте цю «хфірму» десятою дорогою


LinkedIn

3 комментария

Подписаться на комментарииОтписаться от комментариев

Комментарии могут оставлять только пользователи с подтвержденными аккаунтами.

Надеюсь %username% еще раз прочитаешь этот коммент, прежде чем делать тестовое задание, подумаешь как сильно ты хочешь потратить 2-3 дня, что бы весь фидбек который тебе дали это был фидбек от QA с текстом «non informative error message». И да, с требованиями решай сам, потому что в доке их нет, а тебе потом укажут на то, чего нет.

Доброго дня, Володимир.

Команда DOIT Software щиро вдячна Вам за коментар.
Ми надали Вам детальну відповідь на три сторінки через два дні, після отримання тестового завдання.

Хочемо ще раз наголосити на основних моментах, що стали причиною відмови:

— так, у специфікації відсутня інформація щодо валідації та зберігання паролю -
таким чином ми перевіряємо підхід розробника та рівень його навичок і твердо переконані, що це має виконуватися за замовчуванням, особливо розробниками рівня Middle+;
— зберігання картинок не в xcassets, а в папці " images", не використовуючи ні cocoapods, ні carthage (Асети, xcassets з’явилися ще в xcode 5 і стали стандартом зберігання зображень та інших файлів);
— @synthesize починаючи з xcode 4.4, IDE сама дефолтом встановлює @synthesize propertyName = _ propertyName; всюди, де це вимагається;
— з основної частини завдання (7 запитів) Ви реалізували лише 2 запити на реєстрацію та авторизацію, які є практично ідентичними. Змінною є лише частина посилання (запити — це обов’язкова частина тестового завдання, локальне зберігання — це додаткова частина);
— ви написали дві величезні функції на 237 рядків (якби в проекті було б більше 50 запитів то API клас розрісся б до більш ніж 6000), завершальний блок хендлиться через нотифікації — краще використовувати блоки;
— всі менеджери в одному класі (TASingleton) — потрібно було розділити на APIManager, DataManager, NotificationManager... TASingleton можна використовувати як [TASingleton sharedInstance], по всьому проекту ця функція не виконується ні разу, виділяється пам’ять, cтворюється новий об’єкт;
— проблему синхронізації можна легко вирішити використовуючи простий isSynchronized, після появи інтернет-з’єднання можна взяти всі об’єкти з бази даних, використовуючи фільтр isSynchronized і по черзі завантажити кожен об’єкт на сервер, змінюючи цей прапор на true після відповіді про успішну операцію від сервера.

Коментар розробника про Objectiv-C — це просто констатація факту, а не зауваження (на цьому ніхто уваги не загострював).
Ніхто Вам не забороняв виконувати тестове на Swift і ніхто не вказував на те, що його необхідно виконувати на Objective-C — це на Ваш вибір.

Перевірка тестових завдань мобільних розробників в нашій компанії відбувається в два етапи, за участю тестувальника та розробника. Саме цей підхід допомагає нам поглянути на тестове завдання розробників з різних сторін.

У відборі на цю позицію ми розглядали низку кандидатів. Порівнявши виконані тестові завдання, ми прийняли рішення рухатися далі з іншими кандидатами.

Дуже прикро, що наша відмова викликала стільки Вашого обурення.

Ще раз дякуємо Вам за інтерес до нашої компанії і за час, який Ви витратили на наше завдання.
Ми бажаємо Вам удачі)

Вітаю Оксано.

Дуже добре, що саме Ви відповіли.

Підтвержіть, будь ласка, що саме Ви мені сказали про можливість виконання завдання на Objective-C

Команда DOIT Software щиро вдячна Вам за коментар.

Ще б пак!
Компанія стає відомою.
Як співала Шапокляк «Харошімі деламі прославіться нельзя!»

Ми надали Вам детальну відповідь на три сторінки через два дні, після отримання тестового завдання.

Спочатку булообіцяно на середу до кінця дня, а в четвер вранці прийшлосьмені нагадати. Алето таке :)

От відповіді, які я отримав
від тестера
github.com/...​/doit_tester_feedback.jpg

від по коду
github.com/...​lenko do it feedback.docx

— так, у специфікації відсутня інформація щодо валідації та зберігання паролю -
таким чином ми перевіряємо підхід розробника та рівень його навичок і твердо переконані, що це має виконуватися за замовчуванням, особливо розробниками рівня Middle+;

валідація паролю гарне завдання на «Следствіе догадалось!»

Цікаво, а як його треба було валідувати?

От наприклад вимоги до паролю в MySQL
dev.mysql.com/...​_validate_password_policy

Навіть якщо це і так, то чому на вебсервісі на має помилки: валідація паролю невдала???

— зберігання картинок не в xcassets, а в папці " images«, не використовуючи ні cocoapods, ні carthage (Асети, xcassets з’явилися ще в xcode 5 і стали стандартом зберігання зображень та інших файлів);

Вимагати чистовик в тестовому завданні, то є перебор як на мене. Тим більше, що зображення я сам шукав.

— @synthesize починаючи з xcode 4.4, IDE сама дефолтом встановлює @synthesize propertyName = _ propertyName; всюди, де це вимагається;

Це придирка.

А що поганого, в тому що воно прописане?

— з основної частини завдання (7 запитів) Ви реалізували лише 2 запити на реєстрацію та авторизацію, які є практично ідентичними. Змінною є лише частина посилання (запити — це обов’язкова частина тестового завдання, локальне зберігання — це додаткова частина);

Про це я написав:
«Цікаво а у який спосіб пан ревьюєр збирався вирішити питання зберігання данних для подальшої синхронізації даних після появи мережевого з’єднання? А чи допускався варіант перезавантаження девайсу? А чи допускався варіант вивантаження додатку з пам’яті девайсу?
А чи розуміє пан ревьюєр , що після виконання завдання 3 прийдеться повністю переробити перший пункт завдання?
Скоріше всього Ні! Ні! і знову Ні!»

От цікаво чи розумає це Ваша людина яка перевіряла це завдання?

— ви написали дві величезні функції на 237 рядків (якби в проекті було б більше 50 запитів то API клас розрісся б до більш ніж 6000), завершальний блок хендлиться через нотифікації — краще використовувати блоки;

Якби у бабусі були б ... то вона була б дідусем :)

Я ж написав:
"
Все зроблено крім мережевої інтеграції
невистачає часу
реєстрація та логін виконано, але іншу задачі ні
з огляду на те, що задача доволі велика, ящиро сподіваюсь, що той, хто буде дивитись код оцінить мою увагі до дрімниць, комплексне бачення задачі та ініціативу
"

— всі менеджери в одному класі (TASingleton) — потрібно було розділити на APIManager, DataManager, NotificationManager... TASingleton можна використовувати як [TASingleton sharedInstance], по всьому проекту ця функція не виконується ні разу, виділяється пам’ять, cтворюється новий об’єкт;

Хай буде так.

— проблему синхронізації можна легко вирішити використовуючи простий isSynchronized, після появи інтернет-з’єднання можна взяти всі об’єкти з бази даних, використовуючи фільтр isSynchronized і по черзі завантажити кожен об’єкт на сервер, змінюючи цей прапор на true після відповіді про успішну операцію від сервера.

таке відсутне у фідбеці який мені було прислано.

По друге, на бекенді була відсутня реалізація укакального номеру кожній задачі — це я теж зробив.

Коментар розробника про Objectiv-C — це просто констатація факту, а не зауваження (на цьому ніхто уваги не загострював).

Тільки чомусь коментар бів першим

Ніхто Вам не забороняв виконувати тестове на Swift і ніхто не вказував на те, що його необхідно виконувати на Objective-C — це на Ваш вибір.

Повторююсь:
питався у Вас особисто про мові виконання тестового завдання.
Ви відповіли, що Objective-C теж треба знати, бо це вимога вакансії і на ньому є задачі.

У відборі на цю позицію ми розглядали низку кандидатів. Порівнявши виконані тестові завдання, ми прийняли рішення рухатися далі з іншими кандидатами.

Питання в об"єктивності.
Рухайтесь далі. Є люди які мріють працювати у таких компаніях як Ваша.
Я був одним з таких :)

Дуже прикро, що наша відмова викликала стільки Вашого обурення.

Це навіть добре.
У мене наразі достатньо запитів від інших компаній.

Виявляється є достатньо адекватних людей, які розуміють різницю між тестовим завданням та проектом для клієнта.

Ще раз дякуємо Вам за інтерес до нашої компанії і за час, який Ви витратили на наше завдання.
Ми бажаємо Вам удачі)

Навзаєм!

Поддержали: Iren Grishanova