Фідбек на тестове завдання або чому риба має вміти лазити по дереву

Вітаю!

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

Співбесіда з рекрутером.
Повідомляє про тестове завдання — питаюсь як робити з усіма бантиками на 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 прийдеться повністю переробити перший пункт завдання?
Скоріше всього Ні! Ні! і знову Ні!

Питання не в тому як зроблений код.
Питання не в якості вебсервісів.
І навіть не в тому наскільки чітко сформульовані вимоги в специфікації.

Питання в тому, що про критерії ніяк не можна здогадатись, бо вони не зазначені.

Це як оцінювати рибу за навичкою залазити на дерево.

Ось такі пиріжки з кошенятами...

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn

Найкращі коментарі пропустити

ВАТ?!
Они тратят время тестировщика, чтобы проверить блекбоксом тестовое, вместо код-ревью?!
Ахахахаха, это действительно очень похоже на решение задачи с апворка за счёт кандидата.
Сразу несколько красных флагов:
1. Задача заняла больше нескольких часов.
2. Задача представляет собой полноценное приложение.
3. Задача интересует как конечный результат («делай так, потому что у тестера такой телефон»), а не как проверка навыков кодирования.
4. Ограничение на используемый язык (для код ревью нет разницы, на каком языке его проводить. Исключение — только в случае аргументированного списка, типа «мы вот такие технологии используем на проекте и нам важно, чтобы кандидат имел опыт именно с ними»).
5. Ошибки в тестовом — usability-level (типа нешифрованный пароль), а не coding level (типа архитектурных просчётов, антипаттернов и т.д.). Это ещё раз говорит о 3-м флаге.

Мой совет — забудь про эту контору, а лучше — поставь её в личный чёрный список.
На будущее: видишь такие тестовые — сразу отказывай, незачем кормить мошенников, зарабатывающих на имитации вакансий.

Больше спасибо автору тему, что собрал здесь iOS-разработчиков на одной площадке.
В первый раз за долгое время на форуме начали обсуждать не налоги, не выгорание, не амбициозный стартап от нетерпеливого бизнесмена, не просьбы помочь будущей декретчице с чего начать вход в айти и даже не «где же искать девушек» .

А обсуждали КОД и практики проектирования. Я думал, этому уже не быть никогда.
Эмоциально, экспрессивно, но справедливо.

Будто бы в 2000-е вернулся, а то и раньше.

Время плавно подбирается к обеду.

Ждём в теме представителя компании из отдела пиара и маркетинга, который в позитивно-приторном тоне расскажет, что тестовое задание было и сделано неправильно, и составлено неправильно и все друг друга недопоняли.
Затем под конец проповеди поблагодарит автора за обратную связь, ведь именно она «помогает делать процессы нашей компании ещё лучше!»

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

Уговорили, вот вам ревью на ваш код: github.com/...​re.test.assignment/pull/1

Поскольку я теперь прочитал все, то вот итог.

Стиля кода нет. Скобки как попало, отступы как попало, пустые строки как попало, NO/false как попало. Читать эту мешанину очень тяжело.
Как работает ваш синглтон вообще не понятно.
Потоки данных гвоздями прибиты к навигационному стеку.

В целом да, кодить вы умеете. Теперь надо научится думать в контексте архитектуры.

Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Больше спасибо автору тему, что собрал здесь iOS-разработчиков на одной площадке.
В первый раз за долгое время на форуме начали обсуждать не налоги, не выгорание, не амбициозный стартап от нетерпеливого бизнесмена, не просьбы помочь будущей декретчице с чего начать вход в айти и даже не «где же искать девушек» .

А обсуждали КОД и практики проектирования. Я думал, этому уже не быть никогда.
Эмоциально, экспрессивно, но справедливо.

Будто бы в 2000-е вернулся, а то и раньше.

Так получилось :)

Вітаю!

Ось і минув тиждень наших дебатів.

Маємо 16500 переглядів топіку, понад 700 коментарів.

На жаль мало, дуже мало, конструктивної критики з прикладами, як треба.

З понеділка у мене починається новий проект, тому у мене буде дуже мало часу для відповідей, але я буду прагнути відповісти кожному :)

Дякую за участь в обговоренні!

Окрема подяка за теплі слова підтримки!!!

P.S. В будь якому разі, ті хлопці, які аргументували прикладами свою критику варті уваги та пошани. Хоча б за сміливість!

На жаль мало, дуже мало, конструктивної критики з прикладами, як треба.
P.S. В будь якому разі, ті хлопці, які аргументували прикладами свою критику варті уваги та пошани. Хоча б за сміливість!

)))) и не 1 «нормального» ревью. Видимо новый проект очередное тестовое и скоро нам ждать новую темку.

)))) и не 1 «нормального» ревью

на жаль так.
«мельчает мужчінка» ©

Видимо новый проект очередное тестовое и скоро нам ждать новую темку.

на жаль мимо :(

удачи в новых начинаний. Я тоже уже почти выздоровел и выхожу с больничного гребсти на своём гордом надувном матрасике.
зы — на правах рекламы: у нас есть вакансия андроид разработчика

По поводу многодневных тестовых заданий, похожих на реальные коммерческие проекты. Перевод фрагмента статьи на Wired:

в Великобритании такая завуалированная форма бесплатного труда может идти в разрез с правительственными рекомендациями для бизнеса. «Тестовые задания, которые требуют день на выполнение и имеют экономическую ценность для работодателя подпадают под закон о National Minimum Wage»

Теперь неудивительно, что британские компании мне предлагали только простые и короткие тестовые задания вида «поревьювай этот криво написанный класс и сделай рефакторинг».

dou.ua/forums/topic/26541 я вчера постил, но увы, до данной темы ей далеко

В Европах очень редко дают фидбек. Это связано с тем, что причина отказа может быть причиной для иска в суде. Поэтому и проще сказать — не подошли и все

Не удержусь и запощу еще вот это видео тут, пятница все-таки: www.youtube.com/watch?v=KpWqTjLn7Fg.

На месте HR я бы взял этот подход на вооружение.
Тут и технаря можно натравить (если он заинтерсован), и контакты набрать.

Заранее сорри — не особо разбираюсь в их специфике. Но с моей колокольни выглядит весьма вкусно.

Хочется у знатоков иос девелопмента спросить — с чего нужно начинать разработку приложения(например как в тестовом задании ) с интерфейса экранов или с запросов к серверу? И почему?

Дуже слушне запитання!

иди матюкайся в другой ветке, а тут по теме плиз задвинь :)

в какой ветке можно матюкаться?

а по теме, в зависимости от методологии разработка идет по разному
например в методологии «куяк-куяк и в продакшн» ака agile, сначала бы рисовали экраны, а к ним бы прикручивали бэкенд. в waterflow скорее всего — наебоврот

Просто смотрел видос и чувак там рассказывал, если не знаете с чего начинать, то начинайте всегда с экранов, а там может внезапно придумаете как внутренности приложения наполнить. Вот поэтому решил спросить может кто то другой вариант подкинет.

типичный аджайл

Так это логично. Сначала продумывается UX приложения, а потом реализация.

Я бы начал с сети, потом модельки, а потом уже ui. Скорее всего привычка, сеть и модели можно вынести в отдельный модуль,а ui оставить отображение этих данных.

Всем привет!
Прочитал жалобу, пролистал коментарии, просмотрел фидбеки на код.
Дай думаю сделаю фидбек на задание с точки зрения человека, который и сам делает задания для кандидатов.

Пункт номер ноль: я не мобильщик, но я архитектор.

Номер раз: такое задание должно быть платным начиная с пункта 2 ( ибо занимает чрезмерно много свободного времени кандидата ). Пункт 1 может быть платным по обоюдной договоренности.

Номер два, идем по пунктам

Using the provided API, create an application with tasks list screen, with the following functionality: (Абсолютно нормальный пункт на демонстрацию базовых навыков, этот пункт должен быть проходным для высокоуровневого специалиста)
● A simple sign in/ sign up form (save token for the furthered using); — Норм, вообще никаких претензий — тут тебе есть простор показать на простом примере, как ты шаришь в базисы по безопасности и воплощаешь это в жизнь.
● View tasks list; — Норм, весьма базовая штука
● Pull to refresh; — Норм, базовая штука
● Sort tasks list, by property with an option to choose ascending/descending order; — Норм, нормальная задача на понимание логики ( привет алгоритмы? ) или умение взять готовое решение
● Create / Edit / Delete a task. — Капец сложная штука, да ?:)

Add additional functionality: ( Вот тут то кандидат должен был бы показать свой креатив и высокий скилл в умении использовать системные возможности платформы и всячески выпендриться хитрыми реализациями )
● Enable reminder about task expiration (using device local services); (Знание платформы, весьма ожидаемая сфера проверки знаний)
● Reminders screen: (Нормальный такой юзкейс, отлавливание событий позволяет показать подходы к написанию кода)
○ View user’s reminders ( Аналогично предыдущему )
○ Delete reminders (Аналогично )
● Settings screen: ( Позволяет продемонстрировать подходы к управлению конфигурацией приложения, вот тут то точно можно блеснуть скиллом! )
○ Choose the default sorting option (Нормальный пункт, вообще нет претензий)

Implement offline mode: ( Продвинутая задача, уж Лид девелопер то точно понимает потенциал! тут еще и +500 накинут! )
● Give a user an ability to use basic functionality (from 1 step) without a network connection and
synchronize data with remote service upon network availability. ( Использование механизмов платформы для аутентификации? А может какой другой хитрый способ? Вот же ж она — возможность проявить креатив и умение делать хитрые синхронизации данных. А поле для оптимизаций то какое!)

Номер три: Референсы на АПИ и документации очень даже уместны и стандартны. Что тут может смущать?
Номер четыре: Скриншоты. Они есть. Они понятны.

Итого:
Задание очень даже. Все структурировано и понятно. Нет принуждений к использованию чего-то конкретными инструментами. Полная свобода выбора механизмов проявить себя. Единственный пункт, который тут может напрягать — масштабы. Но это я описал выше — можно ведь и за деньги делать такие задачи, не так ли ?

P.S. О компании DOIT до этого не знал и не слышал. Респект тем, кто писал у них тестовое задание!

а вот у меня будет пару вопросов. В идеале, хотелось бы услышать представителя DOIT, но можно и мнение стороннего архитектора или коллег по цеху.
1 — начну с п3, организации работы в оффлайне.

Give a user an ability to use basic functionality (from 1 step) without a network connection and
synchronize data with remote service upon network availability. ( Использование механизмов платформы для аутентификации? А может какой другой хитрый способ? Вот же ж она — возможность проявить креатив и умение делать хитрые синхронизации данных. А поле для оптимизаций то какое!)

Я бы задал бы ряд вопросов ибо тут не всё однозначно, ибо данное апи не предоставляет возможность получить дельту событий. И тут у меня тьма вариантов, как выкрутится.
а — забить болт и не делать
б — запросить делать апи и обосновать зачем оно надо. Если нет, то идем в п. а (мой вариант)
в — сделать условно примитивный офлайн мод, просто записывать в очередь предполагаемые запросы и при появлении инета, отправлять их на бек. Этот вариант не идеален тем, что я могу легко перетереть изменения с бека.
г — хранить все данные локально в coredata или realm. написать какой-то синхронизатор, который дампит все таски и при изменинни их, делает запросы на бек. Это довольно сложно и не эффективно при большом объёме данных.

2 — сортировка тасков. Это 2 скрин. тут возникает 2 вопроса: А как упорядочены данные с бекенда? и как будет изменяться список, если я догрузил след страницу (апи предоставляет паджинацию). Приведу конкретный пример, допустим апи нам возвращает список тасков, отсортированным по времени. Пользователь решил отсортировать список тасков по приоритету. Даллее он решил догрузить страницу, что дальше? объединили с текущими данными, отсортировали снова и показали новый список? или инные варианты поведения?

3 — я этот пункт писал выше в коментах, но повторю: имхо, требовать ipa сборку несколько не уместно. Я бы убрал данный пункт.

В целом же, задание вполне ок, у нас оно намного проще, но у мы его даем с немного другой целью

Ну так в том то и прикол, что можно в процессе задавать вопросы и обсуждать предпочтительные сценарии выполнени задачи ;) Вот это аккурат и показывает уровень специалиста

А если посмотреть на это с другой стороны? довольно часто, нет прямого общения у кандидата с авторами данного задания. Часто данный вид коммуникаций идет через посредника (рекрутер или же представитель компании) и есть временная задержка в ответе. Вот у меня был такой опыт, довольно простое тестовое было, дали 1 неделю, но вот ответ на свои вопросы я получис спустя 4 рабочих дня.

Но с другой стороны, в реальной работе задания очень часто ещё менее детализированы, чем то что по ссылке. Бек пилит непонятная команда чёрт знает где, которая отвечает через раз, доков нет ну и вообще вот это вот всё. Но работать то надо.
Синьор/лид как раз и отличается от мидла тем, что должен проявлять инициативу и принимать решения.

Как по мне, то задание довольно хорошо написано. И если бы были проблемы именно с пониманием ТЗ, то был бы другой разговор. Но проблемы не с ТЗ, а с тем что код не выдерживает никакой критики. Или вы правда думаете, что если бы ТЗ было бы расписано до мелочей, то стало бы лучше?

предположу, что ничего бы не изменилось

если бы ТЗ было расписано как автор хочет страниц на 5, то он бы тогда его даже не читал

если бы ТЗ было расписано как автор хочет страниц на 5, то он бы тогда его даже не читал

Скіл вангування 80 лвл.
Браво!!!

«А слона то и не заметил» ©
согласно ua.linkedin.com/in/serhii-osadchuk не факт что он автор данного ТЗ

Я загуглил перед тем, как писать :)
Я не думаю, что могла бы возникнуть проблема с поиском «десижн мейкера», особенно если указаны контакты СОО.
Зачем высасывать из пальца проблему ?:)

отвечу сам себе на 2 вопрос. там сортировку можно указать в параметрах, так что можно не париться. вопрос снят

Первый пункт лучше сделать на остальное забить, т. к. второй и третий пункт необязательны. Это кстати и сократить время разработки.

Між іншим все було зроблено крім інтеграції з вебсервісами.
Навіть синхронізація локальної БД з вебсервісами була підготована.

Але на жаль, Ви не

Пункт номер ноль: я не мобильщик, но я архитектор.

Але на жаль, Ви не архітектор :)))
Якби були архіктором, то змогли би зробити висновки.
Та і поста цього б не було, бо софт-скілли були б.

Бажаю Вам професійного і персонального росту :)

Добре що Ви архітектор з софт скілами.
Гарний приклад, щоб робити висновки :)

Прибігли «засвітились» в популярній темі, показали свої «софт скіли».

Шедеврально!

У каждого свои слабости. Я вот люблю людей с ЧСВ :)

Я вот люблю людей с ЧСВ :)

Якщо це про мене, то мимо :)

Бо я злякався :)

и какой длины должно быть ЧСВ?

Implement offline mode: ( Продвинутая задача, уж Лид девелопер то точно понимает потенциал! тут еще и +500 накинут! )

Я приложению без offline mode, где он нужен — влеплю кол в отзывах, пусть переделывают.

Мне не хотелось бы зайти в метро и понять, что меня приложение подводит: данные были, да сплыли.
В худшем случае любой ценой оставляем старую версию данных, они уже принадлежат пользователю, новую версию не загружаем — раз это технически невозможно сейчас, работаем с тем что есть, но лишаем пользователя этих данных ни в коем случае.

Я приложению без offline mode, где он нужен — влеплю кол в отзывах, пусть переделывают.

эээ. google maps, google assist, google :)

ограниченную область

Качни оффлайн карты заранее — будет неограниченной (условно, конечно)

ну ок, карты вычеркиваем

Там вполне можно заранее подготовить оффлайн-карту региона, куда собираешься поехать, соглашаясь с тем, что она займёт известный объём на диске и уже можешь искать компромиссное решение.
Плюс есть базовая, очень поверхностная версия.

Если бы мессенджеры не показывали чаты в оффлайн-режиме, вот это было бы скотство по отношению к пользователю. А так они просто новое не дают, но старое хранят, да и сколько там того места под чаты нужно.

Надо было предложить оплату тестового задания и продать решение с гитхаба ;)

Мне вот другое интересно. Lead developer готов тратить 5 (пять) дней на выполнение тестового задания, чтобы попасть в ноунейм контору.

Господа iOS разработчики, у вас на рынке действительно все настолько плохо с вакансиями?

Господа iOS разработчики, у вас на рынке действительно все настолько плохо с вакансиями?

За последние несколько лет их количество выросло вдвое, но это если говорить о Киеве. Но всё равно мало, меньше только на Ruby.
Я чуть больше года назад тут отвечал: dou.ua/...​rums/topic/22058/#1251587

Состоянием на зиму 2019 пошли поперёк борозды проекты с блокчейнами и криптовалютами и больше не замусоривают пространство вакансий. Всё бы ничего, но некоторые люди ещё дожидаются последней зарплаты:(

Чуть больше продуктовых стартапов появилось, и вроде бы идеи не из пальца высосаны, а вполне себе нормальные. Работой обеспечат. Хорошими процессами? Как повезёт, может сам и будешь их ставить. А вот зарплатой? Хз.

Чаще начали давать тестовые задания, даже на вакансии с опытом от 5 лет в мобильной разработке. Это с чем-то тоже связано.

Ещё меня вот что настораживает: dou.ua/...​language-rating-jan-2019
Что-то не так с разработкой под яблоко, рейтинг свифта чуть просел.
Или проектов под iOS стало меньше, или по многим другим направлениям рост.

Что-то не так с разработкой под яблоко, рейтинг свифта чуть просел.

Я думаю, часть проектов съела кроссплатформенная разработка (реакт нейтив и тд).
Есть значительная часть заказчиков, которые хотят начинать новые проекты именно на нем, но они потом обламываются с тем, насколько потом такие приложения будут тупить на андроид девайсах, но вот чисто на ios они показывают вполне хорошую производительность (правда не сравнимую с нейтив аппами). С потреблением оперативы пока тоже терпимо, так как айфон любое дерьмо вытерпит, которое будет жрать по 200-600 мб.
Чисто по моим наблюдениям, на ios реакт нейтив приложение (в release mode) берет около 30-50 мб чисто на рантайм реакт нейтива, что как бы многовато :(

И потом приходится под андроид писать уже отдельно нативное приложение, так как не все юзеры ходят с флагманами, не все девайсы смогут потянуть такие приложения

эм, тобишь всёравно надо писать 2 апки? так может под айфон сразу на норм платформе, без костылей?

Не, чувака который знает js можно припахать сделать и сайт, и моб. приложение под ios, айфоны любое глючное говно стерпят. А айосник фронт для сайта не напишет.

а ну да. всё на js. а для андроида можно и на кодове или вообще вебвьюхами.

Гібриди атакують.

Спочатку Іонік, потім Реакт Нейтів, тепер хайп на Флаттер.

Ангулярівський Typescript дуже схожий на Swift, тому маємо такий ріст розробників.

ну у флаттера хоть бэкэнд на плюсах. и за ним гугель стоит

Не, у автора просто особый случай.
Найти удаленку человеку даже с 3-мя годами опыта на $3к (что как бы и не много) — неделя поиска работы, без всяких тестовых.

То брешуть.

ніт, минимум 2 такие вакансии отклонил. еще на несколько не «подошел по софтскиллам». а опыт у нас с тобой примерно одинаков. Смысл в том, что вакансии есть. В дуит я не лез изначально. Там сразу видно, что вакансия стремная.

Якщо розглядати варіанти з гібридами, то да 3-4 то реально.
Мені гібриди не «зайшли».

Комментарий бы не ро гибриды
Там вже зробили «фідбек/рев’ю» на цей проект
Мій коментар був про те, що, поперше, не з важай на цю контору, по-друге, придивись до рев’ю.
Я розумію, що кожен розробник насамперед буде харкатися на код іншого, але твій дійсно не дуже (виглядає так, що ти трохи застряг у минулому)

Може хоч Ви зможет надати приклад взірця коду?
Всі питаю, але ніхто не признається :(

согласен. обливаешь помоями — так достань свой...гитхаб и покажи

там мабуть маленький репозиторій :)

В каком месте я помоями облил?
Там ниже есть ссылка на полноценное ревью от другого разработчика.
Примеры «как надо» есть на том самом который достать и показать.
Я отказался общаться с доит еще на этапе «а интересна ли вам такая вакансия». По тем же причинам не вижу смысла показывать «как лучше» было бы сделать тестовое.
Считай, что я слился на твоем комменте.

Кажется я понял, что ты принял за «помои». «застрял в прошлом» — в моем случае не было персональной нападкой. По сути это просто ощущение при беглом просмотре кода. Я практически вернулся в старые-добрые времена. И даже ощутил ностальгию. По сути, я остановился где-то в районе «синглтона», который не синглтон (холивары на тему его необходимости не будем понимать). Этот момент как раз и есть «не очень». По названию обычно стараешься понять цель. За годы работы с чужим кодом пришла простая мысль — каждый пишет как хочет, но если есть постоянство в нейминге/стайле/прочем, то намного проще принимать проект, как бы он ни был написан. После стандартных для любого разработчика плевков на чужой код, начинается этап, когда ты понял как этот другой разработчик думал — и по коду намного проще становится ориентироваться. Остальное мелочи, которые всегда можно поправить и найти.

В каком месте я помоями облил?

я не на ваше сообщение отвечал, поэтому это не относилось лично к вам

Що саме ти хочеш побачити?
(це інтернет, який багато років вже «на ти»)
Я наразі довіряю тобі, що ти дійсно освідчений девелопер. Там був нижче фідбек від людини, яка мала вільний час. Переглянь то рев’ю і знайди що з твоєї точки зору є логічним. Ніхто тут не примушує тебе змінювати то, як і що ти пишеш. Фішка в тому, що на проекті потрібна буде взаємодія з іншими розробниками. Якщо ти послідовний, іншим (це мінімум) буде легше адаптуватися до твого коду.

Доречі, саме тімлід це мав знати.

Хай буде на «ти», це не проблема, відпрацював 18 років в корпоративному секторі, то вже звичка :)

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

Стиль написання коду — то не проблема, воно вирішиться або обов«язковим прогоном скриптами для вирівнювання, переносів, тощо.
Ще щось вирішиться лінтом.

Питання в іншому: навіть тут є приклад, коли одна команда не хоче (не розуміє) роботу іншої команди.

Олексій Озюн (? вибачаюся якщо неправильно написав) так і не відповів на моє зауваження про забитий лог помилкою 401. Мабуть девопс особливо цьому не зрадіє, що перевірка мережі у нього виглядає як спроба втурчання.

Але найбільша проблема, як на мій погляд це тупо критика без прикладу як треба.

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

А таку критику як тут було 90% — ну озвучили проблему. Добре. Можеш показати як треба? Ні? Ну тоді мовчи будь ласка :) <- можливо грубо, але хоч час не марнується на «пойди туда незнаю куда, принеси то, не знаю что».

Отаке.

Можеш показати як треба? Ні? Ну тоді мовчи будь ласка

Вы этот вопрос поднимали в треде не раз уже, два раза в контексте почему в навигационный стек по индексам не ходят. Я не знаю какие сейчас требования к знанию паттернов в Cocoa но мы по годам в мобильном секторе пересекались. Неужели вам серьезно нужен пример кода что бы понять как работает делегация? Но ведь первая ссылка в гугле по cocoa delegate pattern идет на доки эппла, а вторая в картинках объясняет что куда. Или уведомления, которые у вас в коде уже есть, неужели вам надо пример как на них сделать тоже самое?

Я думаю что примеры кода вам в первую очередь не показывают потому что у вас в профиле много лет опыта разработки и есть ожидание что такому человеку достаточно подсказать куда смотреть, а не разбирать вопросы реализации по кубикам.

Тут вже є комент від люини з личною «архітектор», який сам признався що програмувати не вміє.

Тому приклад коду Вам дасть 100 очків вперед.

Може хтось Ваш підхід покритикує і ми побачимо нарешті істину :)

Я думаю что примеры кода вам в первую очередь не показывают потому что у вас в профиле много лет опыта разработки и есть ожидание что такому человеку достаточно подсказать куда смотреть, а не разбирать вопросы реализации по кубикам.

А я от чомусь думаю, що у критиків кишка тонка :)

Багато чую, що все погано, але як тільки просиш показати як правильно — всі стають такими загадковими... і зливаються :(

Вот как с делегацией: github.com/...​l/1#discussion_r261886867

Столько кода хватит чтобы понять суть или вам надо полностью рабочее решение, покрытое тестами?

Треба трошки більше, з отриманням значення для змінної dueDateDelegate

Щоб вже було по дорослому.

Нет, вы знаете, хватит это детский сад разводить. Или вы троллите, или вы действительно не понимаете как абстрактно вернуть значение из модального диалога, и в любом случае для «Lead mobile developer» это крайне печально.

Мені дійсно дуже цікаво побачити саме Ваш варіант.
Якщо ми не можемо використати стек вьюконтролерів, то має існувати інше рішення.

Вы код по ссылке выше в комментарии увидели? Ну давайте я еще сюда скопирую:

if (dueDateDelegate) {
  [dueDateDelegate dueDateChanged:dueDateMoment];
}

вот так он будет попадать вверх.

>It’d be set by the caller before pushing this controller on the stack.

я виходив з того, що апп флоу відповідає вимозі:
до кожного екрану один можливий шлях.

Тому я переконаний, що попередній вьюконтролер буде такого типу як мені треба.

В іншому випадку, зробив би аналогічно Вашому варіанту через передачу параметром вьюконтролера.

я виходив з того, що апп флоу відповідає вимозі:
до кожного екрану один можливий шлях.

Это не оправдывает неаккуратно написаный код.

Ок, розглянемо в цьому випадку продукт Firebase від відомого гіганта Google.

Є файний репозиторій з охайним кодом:
github.com/firebase/quickstart-ios

Але от незадача не було конвертовано код для Swift 4.2
Swift 4.2 було релізнуто 17 вересня swift.org/blog/swift-4-2-released але за 2,5 місяці до 30 листопада так ніхто і не спромігся оновити приклади для швидкого старту.

В силу душевної доброти я зробив цю роботу
github.com/...​e/quickstart-ios/pull/590
і що ми бачимо?

github.com/...​90#issuecomment-443352902

«This shouldn’t be merged yet. Our test infra doesn’t support Xcode 10 or Swift 4.2. There is an update I can push which checks for swift version and works for both 4.2 and 4. I’ve been holding off on it to move to 4.2 straight when our infra is updated. I should’ve commented earlier.»

За 2, 5 місяці так ніхто не піклувався про оновлення інфраструктури для нової версії свіфта!!!

Я був дуже здивований таким. Думав чим же вони таким, більш важливим займалися?

А тепер я точно знаю.

Фони код форматували, щоб він був охайним :)

Володя, що скажете про колег з сусіднього офісу?
Шіт хепенс віз евріван?

Это великолепно. Эпичнее было бы только спросить почему не смержили PR того как ты его создал.

як раз змерджили — саме у цьому весь цимес!

Стиль написання коду то не тільки переноси — то структурування насамперед. Тобто, то, що ти пишеш, повинно мати якийсь спільний підхід. Якщо використовуєш якісь поширені назви — то людина, яка потім буде переглядати код, очикуватиме використання коду згідно з назвою. Лінт це, нажаль, не перевірить.

Зрозумів тебе, буду мовчати :)
На приклади немає часу.

Стиль написання коду то не тільки переноси — то структурування насамперед. Тобто, то, що ти пишеш, повинно мати якийсь спільний підхід. Якщо використовуєш якісь поширені назви — то людина, яка потім буде переглядати код, очикуватиме використання коду згідно з назвою. Лінт це, нажаль, не перевірить.

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

Назви то питання 50/50: згоден, що якісь треба поправити, але не всі.

На приклади немає часу.

Отак завжди.

Шум підіймається, а як написати який стандарт вимог до оформлення коду треба використовувати, то друзьки :(

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

Очень жаль что вы в своей работе экономите на банальных операциях.

Звичайно дуже жаль, що такий хай піднявся через таку дрібницю.

Не тільки у мене, але і у тих кому я показував цей топік склалося враження, що люди руками форматують :)

Не важно форматируют люди руками, скриптами, или у них триггер на pre-commit или post-save. Важно что в репозиторий код попадает в аккуратном виде.

Не важно форматируют люди руками, скриптами, или у них триггер на pre-commit или post-save. Важно что в репозиторий код попадает в аккуратном виде.

До створення цього топіку якось не переймався цим питанням.

Раніше я вважав, що лише код для клієнта — 100% треба віддавати охайним.

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

Наразі багато зауважень — можна вводити як внутрішній стандарт.

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

Мій підхід до тестових такий як ціна таксі:
дешево — ланос чи бляха
дорого — подадуть мерс чи іншу свіженьку машину.

Так і тут за 2500 викладатись як на 3500 — то себе не поважати.
Компроміси мають бути з двох сторін.

А тут получилось, що я повинен дешевше працювати, а вимоги до якості залишили попередніми.
Нема дурних :)
Яка риба — така юшка.

Какой дженкинс, какие батники? Код в репозиторий должен попадать уже отформатированным. Или вы дженкинсом историю переписываете?

Колись я теж був таким категоричним ;)
Приколупуватись до девів стосовно форматування коду, коли це можна зробити скриптом , як мінімум тупо.

Є більш головні речі.
Звичайно якби це був Гугл, то мабуть така вимога є прийнятною, а для команд до 20 людей це перебор

Поэтому там, где это важно, вешается скрипт на commit hook.

саме про це я і пишу :)

все рівно дженкінс збільшує номер білда, от хай ще форматне код.

У вас CVS, что ли?
В достаточно современных системах commit hook выполняется на клиенте.

нам подобається так :)

як кажуть: «У кожного Додіка своя методика».

Сперечатись в команді стосовно форматування коду — то дурне ІМХО.

Всі (в моїх командах) розуміють, що є (якщо є) вимога клієнта стосовно стилю форматування коду (LLVM, Google , Chromium, Mozilla, WebKit). Тому всім ясно, що код буде переформатовано Дженкінсом.

Тому з хуками на клієнті ніхто не грається :)

Тому всім ясно, що код буде переформатовано Дженкінсом.

Вас правильно питали — Дженкінс комітить нову версію, чи як?
При нормальних налаштуваннях він не може цього робити, це зона компетенції SCM (Git чи що там буде).

всім ясно

Більшости, мабуть, неясно, бо Jenkins таке не робитиме.

Вас правильно питали — Дженкінс комітить нову версію, чи як?
При нормальних налаштуваннях він не може цього робити, це зона компетенції SCM (Git чи що там буде).

Ще раз повторюю:
для мене важливий комфорт розробника, тому я переконаний, що розробник не повинен на своїй стороні робити ту роботу, яку можна виконати скриптом. Тим більше, що у клієнта можуть бути свої вимоги до оформлення коду — через це сперечатись з девелопером — вважаю тупізмом.

Тому, за зайвий рядок я нікого не задзьобую, бо це можна прибрати скриптом на Дженкінсі, бо коли збирається новий білд, скрипт на Дженкісні все рівно робить коміт в репозиторій з збільшеним номером білду, тому форматнути код у потрібний формат — то не питання для ClangFormat :)

тому я переконаний, що розробник не повинен на своїй стороні робити ту роботу, яку можна виконати скриптом

Я десь пропонував інше? Читайте уважніше.

бо коли збирається новий білд, скрипт на Дженкісні все рівно робить коміт в репозиторій з збільшеним номером білду

Тобто, так, ви для цього дали права Jenkinsʼу щось комітити. І він на коміт розробника робить свій коміт з наступним білдом. Рекурсія — див. Рекурсія.
Дякую, більш питань нема.

Тобто, так, ви для цього дали права Jenkinsʼу щось комітити. І він на коміт розробника робить свій коміт з наступним білдом. Рекурсія — див. Рекурсія.
Дякую, більш питань нема.

Те, що я написав, то написав я.
А те що Ви подумали, то подумали Ви :)

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

Річ у тім, що Ваше припущення про додавання тригеру на коміт розробника є хибним. Тому Ви зарано подякували :)

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

Всё с вакансиями отлично. Хороший синьор (даже не лид) может претендовать на ЗП в два раза больше чем хотел автор топика. Но для этого надо действительно шарить. А если тим лид и умеешь не только в iOS, то вообще всё отлично.

Не кожен офіс готовий платити навіть 3

Можете зробити замір

Что значит «не готовы»? Ну не готовы, значит идут в сад, всё просто.
Другое дело, что надо соответствовать.

Другое дело, что надо соответствовать.

Бачу Ваші справи вже виконано.
Приємно знову Вас бачити серед активних учасників.

хранить пароль в открытом виде — вам для этого нужно в спеке написать, что так делать нельзя? вроде как сениор должен понимать в чем проблема такого подхода.

кто все? манипуляция без подтвержденных фактов. в 2018 году пароль в открытом виде хранить, передавать — это моветон и сениор разработчики должны об этом знать

манипуляция без подтвержденных фактов.

вы наверняка умеете гуглить, вам даже не нужен тэг сарказм, вы сарказм видите издалека
www.theverge.com/...​y-flaw-exposed-change-now
www.wired.com/...​email-accounts-passwords
www.zdnet.com/...​xposed-account-passwords
вот неск. ссылок с топа поиска

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

все прыгают — ну и я прыгнул. а то шо потом будут последствия для пользователей и бизнеса — мне то что, я ведь *всего лишь* наемный старший разработчик ¯\_(ツ)_/¯

вам даже не нужен тэг сарказм, вы сарказм видите издалека

#саркаааазм

да, сарказм не распознаю :D спасибо за табличку :D

Формально ты должен был использовать man 3 crypt как защиту от мамкиных кулхацкеров. Многие просто делают XOR.

В серьезных проэктах шифрованием паролей должен заниматься выделенный инженер который знает как это делать правильно. Среднестатистический сеньйор или архитектор не имеет об этом никакого представления.

В серьезных проэктах шифрованием паролей должен заниматься выделенный инженер который знает как это делать правильно.

Золоті слова!!!
Саме так у мене було на всіх проектах де вимагали захисту.

В серьезных проэктах шифрованием паролей должен заниматься выделенный инженер который знает как это делать правильно

здесь горько заплакали сотрудники фейцбука

У них есть выделенные инженеры, но нет их выделенного применения.

Вот это поворот :-)

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

Тобто пароль для передачі по мережі далі необхідно однаково шифрувати і для Android і для iOS.
Причому шифрування паролю повинне бути незалежним від девайсу, бо користувач може мати кілька девайсів для кожної операційної системи.

Це я такий нюанс, який не завжди на увазі серед Java розробників також :(

Отже я переконаний, що спосіб шифрування паролю повинен бути зазначений.

Більше того в специфікації відсутній кейс стосовно використання збереженого паролю, отже Ваше зайваженяя стосовно зберігання паролю виглядає дивним.

хранить пароль в открытом виде — вам для этого нужно в спеке написать, что так делать нельзя?

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

— так, у специфікації відсутня інформація щодо валідації та зберігання паролю -

jobs.dou.ua/...​it-software/reviews/#5389

Якщо коротко, то вебсервіс реєстрації користувачів не видавав помилку, про невалідований пароль чи не відповідність паролю правилам валідації.

Якщо такий «телепатичний» спосіб роботи по специфікації для Вас сприйнятний , будь ласка працюйте саме так.

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

Це я такий нюанс, який не завжди на увазі серед Java розробників також :(

Отже я переконаний, що спосіб шифрування паролю повинен бути зазначений.

а как Вы авторизуетесь в форме ввода пароля Вашего любимого сайта? данные с вебформ (логи и пас) всегда идут в открытом виде, а сам трафик принято шифровать. У вас есть https и этого достаточно.

Більше того в специфікації відсутній кейс стосовно використання збереженого паролю, отже Ваше зайваженяя стосовно зберігання паролю виглядає дивним.

а зачем Вам пароль хранить? у Вас есть токен. Вы его получили 1 раз, дальше его и используете. Токен положили в кейчен. У Вас есть альтернативные способы? раскажите, пожалуйста

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

а зачем это делать на клиенте? в тз это не указано, юзер ввел 1 как пароль, ну и шлите его. Бек разрулит. Вам предоставлен пример ошибки, на него и ориентируйтесь. Это вполне реальный случай, когда меняется критерии для пароля и тогда не надо обновлять логику на клиенте.

Якщо коротко, то вебсервіс реєстрації користувачів не видавав помилку, про невалідований пароль чи не відповідність паролю правилам валідації.

а зачем Вам об этом думать? от вас это не просили

Якщо такий «телепатичний» спосіб роботи по специфікації для Вас сприйнятний , будь ласка працюйте саме так.

зачем телепатировать? Вы могли же спросить.

а как Вы авторизуетесь в форме ввода пароля Вашего любимого сайта? данные с вебформ (логи и пас) всегда идут в открытом виде, а сам трафик принято шифровать. У вас есть https и этого достаточно.

Проясніть будь ласка, чи правильно я зрозумів:
використання

https

є достатньою умовою для передачі паролю у тому вигляді, як його ввів користувач?

Я розумію, що зберігати треба виданий токен.

а зачем Вам пароль хранить?

Відповідь do it

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

jobs.dou.ua/...​it-software/reviews/#5389

як виявилось про цю вимогу я повинен був здогадатись

а зачем это делать на клиенте? в тз это не указано, юзер ввел 1 как пароль, ну и шлите его

Так і було зроблено.

зачем телепатировать? Вы могли же спросить.

Про мову виконаня тестового завдання я вже питався :(

Проясніть будь ласка, чи правильно я зрозумів:
використання

https
є достатньою умовою для передачі паролю у тому вигляді, як його ввів користувач?

да

Проясніть будь ласка, чи правильно я зрозумів:
використання

https
є достатньою умовою для передачі паролю у тому вигляді, як його ввів користувач?

да

Дякую!

Владимир, маскировка пароля под звёздочки — общепринятая практика, я не припоминаю, чтобы на формах ввода пароля было по-другому, даже в личный кабинет портала «Наш Конотоп», даже 20 лет назад. А вы часто встречались с чем-то другим?

Возможная такая опция, как показать пароль, когда вы нажимаете на значок вроде 👁️ , пароль вам временно покажется.

Делайте, будто бы делаете для себя.
Делайте настолько качественные продукты, насколько качественными вы сами хотели бы пользоваться.

Если на сервисе нет валидации пароля, то ни к чему в приложении что-то строже валидировать, в вашем случае — просто проверьте, что поле непустое.

Владимир, маскировка пароля под звёздочки — общепринятая практика, я не припоминаю, чтобы на формах ввода пароля было по-другому, даже в личный кабинет портала «Наш Конотоп», даже 20 лет назад. А вы часто встречались с чем-то другим?

Ну не закрив зірочками. Визнаю. Був неуважним.
Виправити — 5 секунд роботи.

Если на сервисе нет валидации пароля, то ни к чему в приложении что-то строже валидировать, в вашем случае — просто проверьте, что поле непустое.

Здивую, але це було зроблено:

-(BOOL)checkPassword{

BOOL result = false;

if ([tfPassword.text length] > 0){
result = true;
}

return result;
}

github.com/...​reenViewController.m#L158

Вибачте, але тут вже Ви неуважні :(

Бачите, кожен може зробити помилку :)

Если на сервисе нет валидации пароля, то ни к чему в приложении что-то строже валидировать, в вашем случае — просто проверьте, что поле непустое.

Это не именно вам адресовано, скорее общая рекомендация.

Контекст не знаю, просто увидел этот ваш комментарий и, к слову, можно убрать весь лишний мусор и сократить до вот так:
... { return [tfPassword.text length] > 0; }

... { return [tfPassword.text length] > 0; }

В цьому конкретному випадку, таке скорочення доречне.

Делайте, будто бы делаете для себя.

Пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете

Навіщо?

Зараз починається саме цікаве:
тролі видохлись.

Підтягнулися «критики», правда не можуть обгрунтувати, але це вже прогрес :)

тема скоро переплюнет фопов

Мне больше напоминает человека от жопы гнапа. Такой же гиперактивный, но туповатый и абсолютно не воспринимающий критику.

Нет мне кажется автор не туповатый. В нем даже какая-то харизма есть, если б я в Киеве был сходил бы пива с ним попил и поболтал бы об иос девелопменте. Я вот тоже про архитектуру спросил мне тыкнули статью про MVC и на том архитектура окончилась. Не сказали когда лучше ксибы когда сторибоарды использовать, когда сегвеи использовать а когда лучше через функцию презент вызывать контроллер, про навигейшен контроллер тоже ничего, про установку свойств всяких кнопок переключателей как лучше из кода устанавливать или непосредственно в Xcode . Я тоже сначала херней маялся в этой ветке, но потом понял как то некрасиво это выглядит. Не зря есть выражение критикуешь — предлагай альтернативу.

Что-то мне кажется, что тот проект писался ради троллинга какой-нибудь компании, которая всучит тестовое задание.
И ещё есть ощущение, что автор пишет для дела на чём-нибудь другом, не под мобилки и у него уже есть работа и проект.
А разработка под iOS — не его профиль, просто пробовал когда-то.

У меня тоже такое ощущение, похоже он под ондроед до этого разрабатывал. Но тогда откуда столько снобизма?

Хотя, нет, в профиле свежие записи об iOS.

Но тогда откуда столько снобизма?

только у автора?

Нет, он просто задает тон дискусии.

Такі як Ви теж мають вплив на тон дискусії.

Андроїд я теж трошки знаю :)

Між іншим був сертифікованим спеціалістом по бухгалтерській підсистемі для вісімки :)

ну так может это Ваша область? я вот на рубях иногда скрипты делаю, они вообще критике не поддаются и мне стыдно за них. Но они свою работу выполняют и всех это устраивает.

ну так может это Ваша область?

Було моєю до 2010 року. Девал 2008 був рубіконом багатьох підприємств :(
За 1 рік кількість клієнтів зменшилась на 80%

я вот на рубях иногда скрипты делаю, они вообще критике не поддаются и мне стыдно за них. Но они свою работу выполняют и всех это устраивает.

А це проблеск істини:
що важливіше краса чи виконання задачі?

А це проблеск істини:
що важливіше краса чи виконання задачі?

прочите, пожалуйста, вторую часть комментария dou.ua/...​rums/topic/26482/#1525543

Если бы я был ревьювером, то ревью закончилось бы на реализации ф-ции
-(BOOL)isConnected{..}
с фидбеком «лучше бы ему заняться физическим трудом на свежем воздухе». Ну про синглтон, который не синглон вообще молчу.

Если это уровень лидов сейчас, то ой.

ну там еще очень сильно в глаза бросается переиспользование ячеек...
должен признаться, пару недель назад на глаза попала статья www.smashingmagazine.com/...​-performance-tricks-apps и тогда я был сильно удивлен капитанскими советами. Особенно первый пункт. Я был сильно удивлен, что кому-то в голову приходит каждый раз инициализировать однотипную ячейку и не переиспользовать старую. Конечно же, есть исключения, но это совершенно другой случай.

Чёрт, я не увидел этого сразу!
UITableViewCell *cell = [[UITableViewCell alloc] init];

Чёрт... Мне вот сейчас реально за профессию обидно.

Так загадково написали «конструктивну критику» в навіть не показали як правильно.

Тьфу! Размазня!

Я не такой воспитанный как мой уважаемый коллега, а потому..
Конструктивная критика может быть к чему то конструктивному. Вот есть код, он в целом ничего, но... и вот тут начинается критика. В данном же случае, этот код годится только на поржать.

Хотя всё же нет, критика будет. Удалить репо, чтобы никто не видел. Прочитать хоть что то по iOS разработке и разработке вообще. Написать пару-тройку подобных проектов, но уже нормально. И тогда вежливо попросить их покритиковать. Можно прямо здесь.

Такої «критики» тут ціла гілка.

Всі знають, що все погано, але ніхто не може показати як правильно.

Пічалька :(

Так может стоит прислушаться к критике?

А показать.. У нас тут суровый капитализм, мы показываем за деньги только) Благо в интернетах полно добрых людей, не таких меркантильных. Вот у них можно почитать как надо.
Вот например www.raywenderlich.com/ios

Гарно з"їхав.

Спочатку загадково написав зауваження, потів розповів про своє виховання, а тепер радить прислухатись до критики.

Мені багато розповідали про лідів таких яв Ви:
може тільки критикувати, і не показати як привильно.
Я думав, що брешуть.

А ні, виявилось таки є такі екземпляри.

Є над чим подумати.

Чувак, ты понимаешь, что после этого треда найти работу станет в 100 раз сложнее? Разве что в «Рога и Копыта» куда программистов берут на вес? Доу читает куча народу и, поверь, этот тред сейчас активно обсуждается в куче закрытых чатиков и каналов (откуда я о нём и узнал). Ты теперь звезда украинской iOS разработки, поздравляю.

Последняя попытка быть серьёзным. Тебе максимально корректно указали на кучу просто элементарных ошибок в коде, которые недопустимы даже для джуна. Дело совсем не в форматировании, а в том, что базовые вещи сделаны неправильно.

Самое простое из того, что сразу бросается в глаза:
— код написан на Obj-C который был актуален в каменном веке, спасибо что хоть нет ручного управления памятью
— не используются реюзебл целс (это умеют джуны с 2-3 месяцами опыта)
— синглтон это плохо само по себе, это code smells, но в коде определён синглтон, который каждый раз создаётся явно, а это явная ошибка
— проверка наличия сети через запрос гугла (это смешно)
— код в стиле [viewControllers objectAtIndex:self.navigationController.viewControllers.count — 2] — это пипец и вон из профессии
Я нашёл это всё за 3 минут очень беглого просмотра кода прямо на гитхабе, даже проект не скачивал.

Задание на самом деле довольно простое, я когда то такое же делал в Циклум. На него уходит 3-4 часа, но никак не три дня.

Ну и банальное не умение читать ТЗ. Не сделан пункт 2), зато масса усилий на опциональный пункт 3) (который тоже сделан неправильно). Вот для меня это даже не звоночек, а колокол, что в работе будет так же. Делаем не то что надо, а то что умеем или хочется.

Короче, «учиться, учиться, учиться» как говорил тот, чьё имя протзносить нельзя )

Чувак, ты понимаешь, что после этого треда найти работу станет в 100 раз сложнее? Разве что в «Рога и Копыта» куда программистов берут на вес? Доу читает куча народу и, поверь, этот тред сейчас активно обсуждается в куче закрытых чатиков и каналов (откуда я о нём и узнал). Ты теперь звезда украинской iOS разработки, поздравляю.

Якщо потім працювати у такого як Ви — то краще бути «реджектнутим» одразу.

Последняя попытка быть серьёзным. Тебе максимально корректно указали на кучу просто элементарных ошибок в коде, которые недопустимы даже для джуна. Дело совсем не в форматировании, а в том, что базовые вещи сделаны неправильно.

Нарешті Ваше виховання дозволило перейти до конкретніших речей.

Самое простое из того, что сразу бросается в глаза:
— код написан на Obj-C который был актуален в каменном веке, спасибо что хоть нет ручного управления памятью

Вже втомився повторювати, це було узгоджено з рекрутером. Я питався на чому писати, мені сказали Обджектів Сі теж треба знати :)

У мене є товариш у Нідерландах, дядькові 60 років, ще пише на Коболі.

— не используются реюзебл целс (это умеют джуны с 2-3 месяцами опыта)

Це використовуються, вже відповідав іншому товаришу
github.com/...​reenViewController.m#L153

— синглтон это плохо само по себе, это code smells, но в коде определён синглтон, который каждый раз создаётся явно, а это явная ошибка

50/50
У CoreData є такий прикол як запізнення на 1-2 секунди з оновленням даних в таблицях.
Як варіант подолання цього «глюку» роботу з БД переніс в сінгтон — в результаті всі данні завжди актуальні.

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

— проверка наличия сети через запрос гугла (это смешно)

Були такі причини:
1) Перевіряти наявність мережі перед запитом таки треба — певен погодитесь
2) Сам хост з АПІ ендпоінтом видавав щось незрорзуміле, тому я прописав Гугл
3) Використовувати pod (неодноразово бачив в чужому коді) для такої елеметарної задачі — соромно

— код в стиле [viewControllers objectAtIndex:self.navigationController.viewControllers.count — 2] — это пипец и вон из профессии

а тут будь ласка детальніше.
Ви вже другий хто на це звертає увагу.

Буду щиро вдячний за приклад правильного, на Ваш погляд солюшину повернення змінної на попередній екран.

Ну и банальное не умение читать ТЗ. Не сделан пункт 2), зато масса усилий на опциональный пункт 3) (который тоже сделан неправильно). Вот для меня это даже не звоночек, а колокол, что в работе будет так же. Делаем не то что надо, а то что умеем или хочется.

Після прочитання «ТЗ» у мене склалося враження, що людина яка його писала прийшла з веброзробки. Що і було підтверджено такою цитатоб з відповіді do it
«— проблему синхронізації можна легко вирішити використовуючи простий isSynchronized, після появи інтернет-з’єднання можна взяти всі об’єкти з бази даних, використовуючи фільтр isSynchronized і по черзі завантажити кожен об’єкт на сервер, змінюючи цей прапор на true після відповіді про успішну операцію від сервера.»
"
jobs.dou.ua/...​tware/reviews/38594/#5389

Отже, той хто ставив задачу не розуміє, що девайс може перезавантажитись або додаток буде вивантажено з пам"яті.

Тому для збереження даних я вирішив використати CoreData.

Далі.
Якщо Ви звернули увагу, то в моїй дата моделі є більше властивостей у об«екта Task

Вони були додані для викішення задачі синхронізації та видалення даних як локально так і на сервері.

Я допускав варіант коли у одного користувача може бути кілька пристроїв.

Використання даних з JSON, отриманого з серверу має суттево іншу логіку ніж робота з CoreData з наступною синхронізіцією даних <- це і є тією самою причиною, чому я спочатку зробив локальну БД, а інтеграцію вебсервісів залишив на потім.

Короче, «учиться, учиться, учиться» как говорил тот, чьё имя протзносить нельзя )

А тут робота така :)

Та не гони. Всім це байдуже. Через місяць ніхто й не згадає.

спасибо что хоть нет ручного управления памятью

вы в этом не разбираетесь и боитесь как огня, верно?

синглтон это плохо само по себе, это code smells

поройтесь, сколько синглтонов в том же эпловском коде. потом принюхайтесь к своему телефону. ничего не пованивает?

проверка наличия сети через запрос гугла (это смешно)

это единственный способ, умник. это стандартная практика для всех: эпл, гугл и тп. почитай, как иос определяет наличие сети. каждый пытается пингануть собственный сервер

это единственный способ, умник. это стандартная практика для всех: эпл, гугл и тп. почитай, как иос определяет наличие сети. каждый пытается пингануть собственный сервер

Но дело в том что автор это делает через жопу, все в main thread и тд.

Там не только в этом дело. Сам подход ни о чём. Нахрена дёргать гугл, если можно вызвать тот же API метод и в случае ошибки выполнить какие то действия.
Если же нужно подписаться на изменения состояния сети, то для этого есть SCNetworkReachability. Или Reachability под если неохода возиться с колбеками.
Ну и да, обращение на главном потоке) Если сеть есть, то вызов и смысла не имеет ) А если мы в лифте, то всё приложение виснет )

Є думка, що SCNetworkReachability найраще підходить для відлову обривів передачі даних, на кшалт користувач зайшов у ліфт. Після появи мережевого з"єднанння повторити відправку даних.

Доступність з"єднання краще таки перевіряти спробою щось скачати з АПІ серверу, але оскільки

если можно вызвать тот же API метод и

АПІ метод був відсутній, а по пустому запиту на адресу АПІ серверу приходила беліберда, то використовувався Гугл.

Є думка, що SCNetworkReachability найраще підходить для відлову обривів передачі даних, на кшалт користувач зайшов у ліфт. Після появи мережевого з"єднанння повторити відправку даних.

а Вы точно не тролите в этой теме? тут вы предоставили совершенно правильное утверждение.

Доступність з"єднання краще таки перевіряти спробою щось скачати з АПІ серверу, але оскільки
если можно вызвать тот же API метод и

АПІ метод був відсутній, а по пустому запиту на адресу АПІ серверу приходила беліберда, то використовувався Гугл.

тогда просто шлите запрос и смотрите на ошибку.
или, продолжим Ваше решение, дернем curl -i -X HEAD "http://testapi.doitserver.in.ua/api/tasks?sort=title%20asc" -H "accept: application/json" прилетела 401 ошибка, инет есть

тогда просто шлите запрос и смотрите на ошибку.
или, продолжим Ваше решение, дернем curl -i -X HEAD «testapi.doitserver.in.ua/api/tasks?sort=title asc» -H «accept: application/json» прилетела 401 ошибка, инет есть

Стосовно перевірки роботи — згоден.

Стосовно забивання логів вебсерверу — погано :(

ну да, пусть гугл страдает. он то что, большой, все выдержит

Така ціна популярності.

неважно, как это делает автор
важно, как на это реагируют другие программисты
ни капли доброжелательности, ни капли желания реально помочь
каждый стараяется выпятить свое ЧСВ: как петухи перед курами красуются
смешно и грустно наблюдать

ни капли доброжелательности, ни капли желания реально помочь

Ты, наверное, начал читать комменты в обратном порядке 🙃.

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

Тогда, очевидно, невинимательно или выборочно следишь. Тут в топике конструктива и сопереживания выше крыши. Но ТС непоколебим.

конструктива

есть

сопереживания

а вот этого 0 целых, куй десятых

Но ТС непоколебим.

что вы ему предлагаете? покаятся и уйти в монастырь? наверняка свои уроки он из этого вынес

а вот этого 0 целых, куй десятых

Детектор барахлит, похоже.

реакция украинских айтишников.

У нас тут великий Гуру из самой Швеции, расходимся) Сейчас нас будут учить жизни.

да, вот об этом я и говорил

Ну автору отвечают в его же стиле. Он же тоже не разобрался почему ему отказали, и сразу начал поносить контору и ревьюверов. :(

Кожному я відповідаю як він того заслужив :)

Ещё клоун в копилку.
И не надо грубить незнакомым людям в интернетах. Это некрасиво.

А пованивает тут только ваше раздутое самомнение. Замечания были вполне по делу, но вступать в спор с людьми, которые нихрена не понимают в ios разработке — это потеря времени. Вчера оно у меня было, сегодня уже нет. Так что счастливо оставаться.

Ещё клоун в копилку.

и

И не надо грубить незнакомым людям в интернетах

вот именно

А пованивает тут только ваше раздутое самомнение

встаньте перед зеркало и повторите эту фразу еще раз

ну это же прекрасно. У ТС есть однодумец, а значит, существует вероятность, что их больше 2 и они смогут работать в команде, разделять такие практики программирования и тд. Вот только бы хотелось, чтобы не пересекаться с ними за пределами доу...

попробуйте в своем гмбх так же среагировать на чужой код:

людьми, которые нихрена не понимают в ios разработке
автор это делает через жопу
человек на джуна даже не тянет с таким уровнем obj-c

и тд и тп

мне кажется, что вы попутали авторство вышеуказанных цитат.

Вот только бы хотелось, чтобы не пересекаться с ними за пределами доу...

Маю таку саму думку про Вас :)

Вчера оно у меня было, сегодня уже нет.

Але це вже другий комент за сьогодні...

мне за Вас тестовое сделать? найдется ли у Вас время, его покритиковать?

Вчора хіба не Ви обіцяти на всю гілку свій код ревью показати?
Чи вже передумали?

мне за Вас тестовое сделать? найдется ли у Вас время, его покритиковать?

Дякую, не треба.
Не на часі.

Але після цього Ви вчора писали, що буде таки від Вас ревью.

Не переймайтесь.

www.smashingmagazine.com/...​-performance-tricks-apps
Сразу первый пункт. Объясняют

You’ve probably used tableView.dequeueReusableCell(withIdentifier:for:) inside tableView(_:cellForRowAt:) before. Ever wondered why you have to follow this awkward API, instead of just passing an array of cell in? Let’s go through the reasoning of this.
Say you have a table view with a thousand rows. Without using reusable cells, we would have to create a new cell for each row, like this:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
   // Create a new cell whenever cellForRowAt is called.
   let cell = UITableViewCell()
   cell.textLabel?.text = "Cell \(indexPath.row)"
   return cell
}
Copy
As you might have thought, this will add a thousand cells to the device’s memory as you scroll to the bottom. 
Imagine what would happen if each cell contained a UIImageView and a lot of text: Loading them all at once could cause the app to run out of memory!
 Apart from that, every single cell would require new memory to be allocated during scrolling. If you scroll a table view quickly, a lot of small chunks of memory will be allocated on the fly, and this process will make the UI janky!
To resolve this, Apple has provided us with the dequeueReusableCell(withIdentifier:for:) method. 
Cell reuse works by placing the cell that is no longer visible on the screen into a queue, and when a new cell is about to be visible on the screen (say, the subsequent cell below as the user scrolls down), the table view will retrieve a cell from this queue and modify it in the cellForRowAt indexPath: method.
dequeueReusableCell::
dequeue

там очередь

Ви промахнулись :(

Так загадково написали «конструктивну критику» в навіть не показали як правильно.

Тьфу! Размазня!

було про.

Если бы я был ревьювером, то ревью закончилось бы на реализации ф-ции
-(BOOL)isConnected{..}
с фидбеком «лучше бы ему заняться физическим трудом на свежем воздухе». Ну про синглтон, который не синглон вообще молчу.

Если это уровень лидов сейчас, то ой.

А про повторне використання ячейок я знаю.

У мене таке використовується:
MyTaskTableViewCell *myTaskTableViewCell = [tblTasks dequeueReusableCellWithIdentifier:@"MyTaskTableViewCell"];

github.com/...​reenViewController.m#L153

Ви неуважно дивились в код :(

ревью закончилось бы на реализации ф-ции
-(BOOL)isConnected{..}
Так загадково написали «конструктивну критику» в навіть не показали як правильно.

Ну, если в 2 словах.
Критика: эта функция синхронная и вызывается на главном потоке.
Как правильно: минимум, сделать ее асинхронной.

Если не в 2 словах, то эта функция здесь вообще не нужна, потому что это не real-time communication приложение и нам не нужно постоянно отслеживать соединение.
Просто обрабатывай таймауты и ошибки запросов.

Ну, если в 2 словах.
Критика: эта функция синхронная и вызывается на главном потоке.
Как правильно: минимум, сделать ее асинхронной.

згоден, 100%. требе було зробити її асинхронною і питання знялось би як дурне.

Если не в 2 словах, то эта функция здесь вообще не нужна, потому что это не real-time communication приложение и нам не нужно постоянно отслеживать соединение.
Просто обрабатывай таймауты и ошибки запросов.

А тут я не згоден, бо переконаний, що спочатку треба перевірити наявність з"єднання, а потім передавати дані.

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

переконаний, що спочатку треба перевірити наявність з"єднання, а потім передавати дані.

Нахіба?
Во-первых, скачивать страницу www.google.com перед каждым запросом на свой сервер — это оверхед по траффику (очень дорогому мобильному траффику) и по времени ожидания (как ты знаешь, мобильные сети характерны высоким latency, а у тебя это будет x2 на каждый полезный запрос).

Во-вторых, тот факт, что у тебя есть связь с google.com вовсе не означает, что будет связь с твоим сервером. Для этого в HTTP есть 5xx коды ошибок и таймауты.

В-третьих, если тебе нужно решать, куда сохранять Task, локально или на сервер, ты опять-таки, можешь принимать это решение в ответ на таймауты или ошибки запросов. А по-хорошему, воспользоваться одной из стратегий кеширования, подходящих для твоего кейса, например write-through cache — то есть всегда писать сперва в локальную базу данных, а потом отправлять на сервер.

Як варіант може бути.

Нахіба?

у нас была система с глюком: если посылать запросы при отсутствии сети, прокси перегружался запросами и в конце концов система ребутилась

Для этого в HTTP есть таймауты.

в TCP и они как правило слишком большие

у нас была система с глюком: если посылать запросы при отсутствии сети, прокси перегружался запросами и в конце концов система ребутилась

Верю. И как решали? Неужели делали фейковый запрос перед каждым полезным запросом и меняли флажок isConnected? Что мешало откладывать все запросы в очередь ожидания в ответ на таймауты и 5xx ошибки одного из полезных запросов и только тогда начинать пинговать левый сервер, чтоб не перегружать прокси? То есть, в худшем случае, у вас был бы только один полезный запрос «в молоко» и некоторое количество фейковых запросов на левый сервер, пока связь восстановливалась. А не соотношение 1:1 фейковых запросов к полезным даже при happy сценарии, как сделано в этом тестовом задании.

в TCP и они как правило слишком большие

Так и замечательно. Поэтому на более высоком уровне клиенты добавляют свои таймауты, в том числе и CocoaTouch, а также выводят контроль по таймауту на UI. Привожу цитату из Apple Developer:

If during a connection attempt the request remains idle for longer than the timeout interval, the request is considered to have timed out. The default timeout interval is 60 seconds.
As a general rule, you should not use short timeout intervals. Instead, you should provide an easy way for the user to cancel a long-running operation.

ничего этого у нас не было. ни доступа в систему ни доступа к чему либо мимо прокси, а прокси давал доступ только к сайтам из белого списка
как решали — из 2х зол выбирали меньшее. пинговали внешний саит из белого списка раз в 3-5 секунд хттп запросом. если соединения не было, то никто ни с чем не пытался соединятся. это не решало полностью проблему, но по крайней мере отодвигало неизбежный конец :)

Я понял это. Мой поинт в том, что не обязательно ведь было все время пинговать внешний сайт из белого списка. Достаточно было это делать только тогда, когда один из запросов на внутренний сайт падал. Иными словами, не постоянно отслеживать наличие соединения, а только момент его восстановления после потери. А пока ждете восстановления соединения, складываете невыполненные запросы в очередь ожидания.

не поверишь, но в конечном итоге так и сделали

Правильно сделали — я уверен, что ваши пользователи это почувствовали. Особенно те, кто с дорогим и медленным мобильным интернетом.

Вообще, у меня немного подгорает от тренда в мобильной разработке, когда команды ориентируются на то, что их приложениями будут пользоваться только люди на Wi-Fi или каких-то дешевых и быстрых сетях.

Лично я придерживаюсь мнения, что приложения, которые в основном работают с текстами типа тудушек, как в этом тестовом задании, должны быть на 100% юзабельными и приятными даже на iPhone 5 на 2G сетях.

А это, кстати, огромный пласт пользователей из африканских стран, которых, кажется, в секси стартапах даже за людей не считают.

Я проверяю приложения в искусственно плохих условиях: преднамеренно ухудшаю качество соединения, скорость,
эмулирую потери пакетов. Тестировщикам предлагаю делать то же самое.
Приложения секси-стартапов начинают вести себя странно, как тётка, которой резко приспичило остановиться в переходе прикупить носки мужу.

Для симуляторов — тоже throttling-режим в macOS использую.
Приложение должно объяснить, что с ним происходит, хотя бы каким-нибудь вменяемым индикатором.

Но это уже личные стандарты.

Так и живем.
По теме, могу порекомендовать замечательный эпизод подкаста iOhYes: «108: Peeling the Onion on Networking».
Есть на iTunes.

Есть секси фейсбук, который ударился в обратное. принуждать сотрудников раз в неделю юзать слабое соединение.
Собственно, идея — ок. Реализация хромает.

принуждать сотрудников раз в неделю юзать слабое соединение.

Не слыхал о таком, поинтересуюсь.
Но, думается мне, что это байка или заморочка какой-то одной тимы, а не всего инженерного отдела.
John Appleseed выше описал программные методы, которыми команды тестируют разные сети и это должно быть неотъемлемой частью QA процесса, без всяких странных принуждений. Правда, иногда программных методов недостаточно, особенно для симуляции Route flapping или ситуаций, когда ходишь по границе Wi-Fi сигнала. Тогда уже надо в «поле» выходить. Или в лифт :)

Возможно действительно заморочка какой-то команды. В свое время видел статью на каком-то желтоватом портале.

Код автора просто по скилу похож на отрыжку кота.

Он хочет чтоб ему тут на форуме бесплатно сделали код ревью? с какой стати? Ему уже его сделали и отказали вполне заслужено.
Автор, ты слышал про инкапсуляцию? Class extensions? Паттерн синглтон — это просто космос.

NSURL *scriptUrl = [NSURL URLWithString:@"google.com"];
NSData *data = [NSData dataWithContentsOfURL:scriptUrl];

Алеее, тимлид, читал, что Аппле пишут? Don’t use this synchronous method to request network-based URLs. For network-based URLs, this method can block the current thread for tens of seconds on a slow network, resulting in a poor user experience, and in iOS, may cause your app to be terminated.
Instead, for non-file URLs, consider using the dataTaskWithURL:completionHandler: method of the NSURLSession class. See URL Session Programming Guide for details.

NSString *token = [self->decodedJSONDictionary valueForKey:@"token"];
NSString *message = [self->decodedJSONDictionary valueForKey:@"message"];

Дружище, ты стиль не перепутал с с++? ты уж определись как ты к полям обращаешься, а то здесь у тебя -> , а там точка, а где-то и ламповый []

Хранить данные в аппделегате? Серьезно? Тебя не индусы с апворка учили случаем? Хотя о чем это я, даже индусы уже так не делают

[tblTasks addSubview:refreshControl];

Отличное место для рефреша, ты наверное не слыхал, что у тэйбл вью есть специальное проперти? Или это подход тимлида так говнокодить?

if (myTaskTableViewCell == nil) {

NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"MyTaskTableViewCell" owner:self options:nil];
myTaskTableViewCell = [topLevelObjects objectAtIndex:0];

}

Это ты так ниб ячейки грузанул? Да ты профи, ты точно не мало денег попросил, 2500? может ты нулем ошибся? надо было 25000, для такого спеца было бы мало и такой суммы.

Короче... Это беглый взгляд на твой говнокод отборный... Удачи тебе в поиске работы на галерах Украины после этого, ох знатно ж ты обделался с этим топиком, а если ты этого не понимаешь, то ты еще банально умственно отсталый, но это ниче, некоторым компаниям нужны инвалиды, это нормально, устроишься.

Дякую містер Annonymous Annonymous .
Особливо за наведені приклади солюшинів, які Ви так смачно рознесли.

І головне, що це перший коментар :)

Не за что, открою тайну, мне заплатили, 500 грн, чтобы я зарегистрировался на форуме и указал на Ваши ошибки, а по сути есть что сказать? Или тоже я все придумал и «Вы все врете». Ваш код явно уровня выпускника академии ШАГ без опыта работы, мне крайне жаль ваших бывших коллег. Я представляю как им было трудно что-либо донести до Вас.

мне заплатили, 500 грн, чтобы я зарегистрировался на форуме и указал на Ваши ошибки

А што, так можно было?! О_о

Нет, пришлось заплатить 508.35₴ с учётом скотской комиссии, мать её туда.

А чому Вам соромно себе назвати?

Встидаєтесь власного імені?

А чем Вас не устраивает мое имя? Уж лучше Вашего кода )

Якщо Вам так зручніше, то хай буде так :)

Мне вот в авторе нравится то что он ни смотря ни на что, идет дальше вперед, даже на такую беспощадную критику. Вовка я может скажу малое что мне не нравится в коде, а именно названия переменных myTaskTableViewCell лучше заменить на TaskCell(класс) taskCell(экземпляр класса) или MyTaskListScreenViewController на TaskListVC, зачем эти длинные имена? И лучше вообще отказаться от xib а юзать storyboard и констрейнты на них, а не в коде. И как может быть повторюсь obj c практически труп.

Ціную.
Дякую!

Даже когда есть TableViewController его тоже лучше сокращать до «осмысленное имя» + VC, он и так наследуется от вьюконтролера просто на него «сверху» добавлена функциональность таблицы :) Еще вот это (я не фанат обж с) мне кажется такую строчку arrTasks = [[NSArray alloc] init]; лучше заменять на arrTasks = [NSArray new]; если ты хочешь пользоваться дефолтным инициализатором.

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

[[NSArray alloc] init];

чим саме поганий такий спосіб?

да ничем, можно даже arrTasks = @[];
это синтаксический сахар, который экономит время разработчика. Со стороны это выглят, что Вам не лень набрать полную форму выражения и Вы не цените своё время. С миру по нитке, бедному рубаха. за день можно съэкономить 5 минут времени и их провести в баталиях и срачах на доу или любом другом месте.

да ничем, можно даже arrTasks = @[];
это синтаксический сахар,

Звичайно варіант, просто складно потім на проект додати ще одного розробника без підготовки.

Приходиться дуже багато пояснювати :(

простите, а что объяснять? это любой джун должен знать.

Бро зачекай на шедевры я ще здивую тебе :) Да ничем он не хуже просто меньше скобок нужно писать.

ну ок, зачекаю :)

Вспомнилось мне одно интервью... :
www.youtube.com/watch?v=6q_sLLA4QT0
www.youtube.com/watch?v=sreNMZF023k ... с «фидбеком», кстати.

он просто решил больше не работать на нашем рынке )

С песнями у него всё так же психоделично. Тролль ещё тот.
Но с английским слегка получше чем у большинства наших коллег. И без «ззыс» и «ай сынк» — от наших перформеров я это каждый день слышу, он же произносит в целом нормально.

Уговорили, вот вам ревью на ваш код: github.com/...​re.test.assignment/pull/1

Поскольку я теперь прочитал все, то вот итог.

Стиля кода нет. Скобки как попало, отступы как попало, пустые строки как попало, NO/false как попало. Читать эту мешанину очень тяжело.
Как работает ваш синглтон вообще не понятно.
Потоки данных гвоздями прибиты к навигационному стеку.

В целом да, кодить вы умеете. Теперь надо научится думать в контексте архитектуры.

Справедливое замечание. Практика показывает что шапка функции с контрактом легко воспринимается в контексте: «если мы вообще не можем обработать входящие данные — сразу выходим». Впрочем, это очень хорошо ложится на идеологию go и rust, а для такого кода может быть несколько непривычно. Все же, в данном случае оно улучшает читаемость, так что я оставлю комментарий в силе.

От вложенных if избавляются другими способами

А кстати, как? Мне в голову приходит вынести тело в другой метод, но наверно вы имели в виду не это.

Справедливо — но в контексте конкретно этого кода, какие идеи?

в свифте вложенные ифы можно заменить на один оператор guard и если какое-то условие не выполнилось выйти из функции.

Да, собственно оттуда эту идею и взял для этого случая.

Это увеличивает количество точек выхода из методов

зато улучшает читабельность

Дякую.

Але оскільки я Вас про це не просив, то я нічого за це Вам не винен і не зобов"язаний — це такий собі димсклаймер на майбутнє.

Так я ничего и не прошу, просто решил что вам это пригодится в будущем. Удачи с поиском работы!

Твоя реакция на конструктивную критику , однако даёт повод задуматься :)

Ви тут бачили конструктивну критику?

Від кого? Від реальних віртуалів?

Я ні :(

Написати що погано — є, обгрунтувати та показати приклад як правильно — нема, отже конструктивної критики тут нема.
:)

Логічно?

браво, вы сделали титанический труд. я вот ТС предлагал провести код ревью, но были сомнения в моей компетенции и ряд других причин, так что мне отказали dou.ua/...​rums/topic/26482/#1524040

А проведите мне ревью на ревью тогда? Я Cocoa уже шесть лет не трогал, интересно какие замечания не актуальны и что я пропустил.

ну вот в процессе, там смайлики ставлю

    myTaskTableViewCell.lblTaskNameLabel.text = title;
    myTaskTableViewCell.lblDueToDateLabel.text = @"Due to 19/02/19";

Лучше протянуть туда простую структуру, пусть ячейка сама разбирается с форматированием, due to и заголовками.
Или адаптированную структуру протягиваем, как вариант.

// этот файл
....
[myTaskTableViewCell updateWithModel:model];
....

// другой файл
- (void)updateWithModel:(Model *)model {
self.nameLabel.text = model.title;
self.dueDateLabel.text = [self.formatter formatWithTemplateKey:FormatKeys.DueDate placeholderValues:@[model.dueDate]]);
....
}
Почему? Ибо Due to %s будет локализовываться с ненулевым шансом, лучше заложить эту возможность заблаговременно, чем как делают наши строители «построили ЖК — сделали двор — ой, а трубы не проложили — потом перекапываем всё»

наброшу: ненене, а как же епловский MVC? у нас должны быть тупые вьюшки (ячейка же вьюшка), а всё должно сетапиться в контроллере

наброшу: ненене, а как же епловский MVC?

Оставим его для примеров на stackoverflow и WWDC под радостные визги эякулирующих хомячков.

Но беда в том, что установка всего подряд в контроллере — первое, что попадается на глаза начинающим и свитчерам с других платформ.
Получается с одной стороны вроде бы низкий порог вхождения, а с другой -двупорожье.
Как у PHP.
Как и в PHP, под яблоко трудно встретить нормальную разработку, но легко начать программировать без оглядки.

а что там мешает создать категорию к ячейке, которая и будет делать нам -updateWithModel: ? тогда у нас будет довольно тупая вьюха, которая не знает ничего про модель и довольно чистый вью контроллер. могу сразу и ответить — лень. На практике довольно часто один тип ячейки используется для одного же типа модели, так что можно забить и тулить всё в ячейку.

Там до «браво» як до неба рачки.
«Біг пес через овес. Нема шкоди ні псові ні вісові».

Замечания по синтаксическому оформлению кода.
Заявлених архитектурних пропозицій нема.

Подякував як вихована людина :)

Как вы оцените адекватность этого человека от 1 до 10? Мне кажется он скоро появится на любимом айти.

Замечания по синтаксическому оформлению кода.
Заявлених архитектурних пропозицій нема

1 — да, 0 — нет, 10 — да нет наверное? или 1 — да, 10 — нет? тогда у вас чет не то с двоичной логикой...

Все верно, как в SQL Server или JS: да, нет и undefined 🙃.

в свифте для этого есть bool?

давайте просто пренебрежем здесь булевой алгеброй). Это числа 0...10 типа UInt, где min всегда 0, a max по условию 10.

жаль, что человек не может нормально воспринмать критику в свой адрес. Но его скилы, как iOS дева по такой шкале где-то колебаються между 2-3.

все его «скилы» ровны нулю из-за его чрезмерного ЧСВ. он не способен учится и принимать критику адекватно. а «скилы» из 2012 в наше время не котируются

давайте не думать о человеке плохо. 0 не было в изначальном тз, так что все правки в след спринте

за не имением опросов на коментах, сделаем так

Я понимаю, что Вас будет тяжело в этом убедить, но я попытаюсь: Ваш код читать довольно тяжело, много каши, не ясная логика, много магии и надо знать контекст происходящего. Подозреваю, что такие трудности будут и у того, кто в дальнейшем будет работать с Вашим кодом. Понятно, что в тестовом не стоит над этим заморачиваться сильно, но, допустим, ревьювер ничего не знает о Вас и единственный способ узнать, а можно ли с данным человеком работать? Предположу, что нет. Ибо много времени придется убить, чтобы понять, а сломаю ли это? а ведь приложения бывают на 50+ экранов. Стоит ли мне это все держать в голове?
хочу спросить у Вас, а Вы работали на одном проекте с больше, чем 1 iOS разработчиком? если да, были ли у Вас непонимание или всё было отлично?
Рассмотрим и другую точку зрения. Часто бизнесу не интересно, как оно там внутри. Есть задача, она выполнена, а что-то понять — то потом, а может и не надо будет будет менять и тд. Но вот одна проблема, я так понял, что в рамках данного тестового задания, этот проект считается не выполненным...

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

Я заплутався.

Без півлітри не розберешся :(

«вы плохо читали код» ©
там же комент был dou.ua/...​rums/topic/26482/#1525579

дивно що розробник не «здогадався» © додати таку фічу :(

Нічого не нагадує?

Це ж очевидно!

Осмелюсь предположить, что ход Ваших и моих (а также части участников данной темы) не совпадает. Удачи вам в поисках работы и поиске команды, которая будет разделять ваш подход к разработке ПО. Пожалуйста, отпишитесь, как найдёте работу (без указания работодателя).

Поражаюсь твоей выдержке и воспитанности, бро. Ты просто пример для меня теперь) Вот без сарказма, серьёзно )

Він у нас такий :)

Осмелюсь предположить, что ход Ваших и моих (а также части участников данной темы) не совпадает.

Це дуже прикро.
Де для Вас очевидно мені треба писати в документації.

А там де мені очевидно, там Вам не очевидно.

Парадокс?

Теперь надо научится думать в контексте архитектуры.

Где про это можно прочитать касательно иос девелопмента, в каких книгах, кто авторы?

ну можно начать с habr.com/...​ompany/badoo/blog/281162 и developer.apple.com/...​vPedia-CocoaCore/MVC.html
по факту, mvc хватает в 80% случаев. всё остальное — это уже случаи, когда VC разрастаются и надо их упорядочить. Отдельно могу упомянуть крайние случаи с VIPER или RIB (github.com/uber/RIBs) — это когда у тебя сотни гребцов и нет времени определять, что и кто делает. Тут жестко расписаны обязаности и если их соблюдать, то можно сходу понять, где и что как работает. Порой это добавляет очень сильный оверхед, который не надо многим апам.

блин, создал тут топик про неадекватные зпшки (пока на модерации).
Автор, ты имеешь 6 лет опыта и хочешь работать за 2,5к???
ты б%%ь рушишь мой мир. У меня 2 года опыта на ios и я хочу двушку уже. 1,5к это нижний предел.
Или я живу с какими-то розовыми очками или что-то не так с вами?

А что тебя удивляет? Я лично сам звезд с неба не хватаю, но ко мне приходили на интервью более опытные, чем я кандидаты (10+ лет), но которые едва тянули на миддлов. А все потому, что их опыт некачественный. Проекты однодневки на шлюпках 5-10 человек, фрилансы, говнобанки, эникейство.
В противовес, видел людей которые за год на моих глазах профессионально росли шо дурные.
По сабжу — если человек честно понимает, что он со своими 6 годами тянет максимум на стронг мидла за 2.5k, то честь ему и хвала за осознание проблемы.

В одной какой-то умной книге читал по поводу опыта — опыт может быть пятилетний, а может быть один год, но пять раз. Суть, думаю, ясна :)

Ясна конечно же
В iOS-разработке у нас две проблемы:
1. Качественный, как сказал Алексей, опыт у нас почти негде получить
2. Если таки получил, сложно найти следующую компанию где он нужен.

Объяснения:
1.

Проекты однодневки на шлюпках 5-10 человек, фрилансы, говнобанки, эникейство.

2.
Найти сложно, но можно. Разве что делать там всё на свой лад, особенно если команду только формируют.

По сабжу — если человек честно понимает, что он со своими 6 годами тянет максимум на стронг мидла за 2.5k, то честь ему и хвала за осознание проблемы.

dou.ua/...​rums/topic/26482/#1525033

Мені от цікаво, як на цей Ваш коментар відреагують Ваші колеги, які в силу різних причин згодились працювати у Вашій компанії за меншу з/п?

А як Ваше керівництво дивиться на Ваші активності в робочий час?

Мені от цікаво, як на цей Ваш коментар відреагують Ваші колеги, які в силу різних причин згодились працювати у Вашій компанії за меншу з/п?

А чем особенна реакция конкретно моих коллег? Есть рыночные зарплаты, которые можно посмотреть в специальном разделе на этом форуме. Также можно подписаться на рассылку Djinni и смотреть за какие деньги нанимают людей.
2500$ — это как раз верхний порог миддлов/нижний порог синьоров в iOS. Уверен, что мои коллеги в курсе этого и реагировать будут в конструктивном ключе.

А як Ваше керівництво дивиться на Ваші активності в робочий час?

Понятия не имею. На сайте компании можешь найти контакты менеджмента и спросить их.

Спитаюсь при нагоді :)

А какой такой особый случай тебе нужен?
Все топ-менеджеры компании присутствуют на LinkedIn уже сейчас. Некоторые, также, присутствуют и публикуются прямо здесь на DOU.
Также есть отдел по связи с общественностью, занимающийся, в том числе, и такими важным вопросам, как жалобами на разработчиков комментирующих на DOU в рабочее время.
Уверен, что они тебя выслушают и выведут на нужных людей без необходимости дожидаться какого-то особого случая.

Я так і зроблю :)

Це просто ви ще не вийшли на той рівень, щоб розуміти що то були цілком адекватні та дорогі деви.
Просто згідно синдрому Давнінга-Крюгера — вони применшували свої здобутки.

Всё возможно. В таком случае, я искренне надеюсь, что эти люди в результате нашли места, где более опытные интервьюверы смогли оценить их навыки с поправкой на кривую Даннига-Крюгера и предложили достойную оплату.
Однако, путем даже поверхностного сравнения с другими кандидатами, я бы не был столь оптимистичным.
Думаю, что в результате, они приняли оферы на позиции миддлов в компаниях с хорошо поставленными процессами разработки и смогли за год-два прокачаться до достаточного уровня, чтобы конкурировать с людьми, которые всю карьеру работали в таких компаниях и чей потенциал не был сдержан

Проектами однодневками на шлюпках 5-10 человек, фрилансами, говнобанками, эникейством.

P.S. Я, конечно, не эксперт в этом вопросе, но, видится мне, что за 10+ лет работы неплохо бы яму на кривой Даннинга-Крюгера преодолеть.

Логіка достатньо проста:
1) Це компанія далеко не лідер ринку. Треба розуміти, що у них немає можливості платити більше.
2) Більша з/п за роботу в офісі, я шукав віддалену роботу
3) Гарна з/п це відрядження — мені відрядження не цікаві
4) Мало хто бере людей на гарну з/п одразу. Як правило придивились, передомовились. Тим більше перші кілька місяців, коли визначаються задачі та видно умови роботи.
5) Для мене важливо вчасно отпримувати з/п, без затримок. Пізніше 5-го числа з/п — мені така фірма не цікава :(

ты б%%ь рушишь мой мир. У меня 2 года опыта на ios и я хочу двушку уже. 1,5к это нижний предел.

Хотіти то одне, а отримувати то інше :)

пока что желания и возможности совпадают, с этим все ок.
Насчет пункта 4 — вот тут не согласен. Если взяли на 2,5к, то хоть ты реальным сеньйором окажись, а через 3 месяца тебе зп не удвоят.

Та там весь список — сплошной набор заблуждений.

4) Мало хто бере людей на гарну з/п одразу. Як правило придивились, передомовились. Тим більше перші кілька місяців, коли визначаються задачі та видно умови роботи.

Принято считать что подобных пересмотров никогда не бывает. На что сразу договоришься то и будет.

Логіка достатньо проста:
1) Це компанія далеко не лідер ринку. Треба розуміти, що у них немає можливості платити більше.
2) Більша з/п за роботу в офісі, я шукав віддалену роботу
3) Гарна з/п це відрядження — мені відрядження не цікаві
4) Мало хто бере людей на гарну з/п одразу. Як правило придивились, передомовились. Тим більше перші кілька місяців, коли визначаються задачі та видно умови роботи.
5) Для мене важливо вчасно отпримувати з/п, без затримок. Пізніше 5-го числа з/п — мені така фірма не цікава :(

Логика поломана :)

1) Я вот вообще не компания, а ФОП. Запилите мне аппликушку на 100 грн? :) Сумма контракта определяется пожеланиями работника и возможностями заказчика. Если интервалы не пересекаются контракта не будет.
2) С любой (адекватной) конторой можно договорится про удаленку, особенно на синьор уровне. Исключения — кровавый энтерпрайз, но в мобилочках его не часто встретишь.
3) Совсем не факт. 4-5К возможно без командировок.
4) Любая нормальная контора бурет сразу на нормальную ЗП. Сколько будет экономия на ЗП за 3-6 месяцев? Это копейки.
5) И поэтому вы пошли в ДоИтСофтваре? Самую известную и большую контору на рынке?

P.S. Да-да, вы все еще ждете когда я буду искать работу :)

Чекати на Ваш комент довелося не довго :)

4-5К возможно без командировок.

Ну что вы такое говорите? Если топикстартеру такого не встречалось, значит не существует в природе. Как говорится «этого не может быть, потому что этого не может быть никогда». :)

А то что ему этого не встречалось, потому что скиллы не дотягивают — ну это ж все неправда и вообще. :)

С таким качеством кода, как у автора — ему и 2.5 много. :(

можно еще хуже писать код а зарабатывать больше, смотря как продашь себя :)

Можете показати свій код і написати рівень з/п для такого коду.

Тут якраз цілий топік експертів.

Ясність внесуть швидко :)

Почитайте для начала книгу про паттерны: github.com/ssuhanov/ios_patterns_2
Там на 21 странице есть Синглтон, например.

Обратите внимание на слова о приватном инициализаторе.

Дякую.
Обов"язково почитаю.

кстати, весьма неплохая подборка. я пару лет назад первоисточник от Дмитрия, там тьма опечаток, но было полезно. Почитаю новую версию

Появился ответ jobs.dou.ua/...​it-software/reviews/#5389 . Кто прав, кто виноват?) Действительно ли автор 6 лет иос дев?

Да это, наверное, самый адекватный фидбэк на тестовое задание, который я видел. Три страницы, Карл!! И от девелопера, и от тестера!

Трішки часу. Все буде :)

Было бы лучше, если бы вы прекратили обсуждение.

А я вважаю інакше :)

Хай знають, що буде «обратка».

Скажу більше:
мені тільки сьогодні 5 рекрутерів написали запрошення.
Всім я дав посилання на ці 2 топіки: скаргу та цей — отримав відповідь: «нічого страшного, ми можемо відрізнити конструктивну критику від „лапші“».

Я не специалист в iOS-разработке, но судя по ответу компании там косяки очевидные

О це і погано, що Ви не розбираюсь у темі віддаєте перевагу одній зі сторін, яка мовчала 4-ри дні.

А вот срачь на форуме уже никак не спрячешь, если только не попросить доброго админа.
Потому что, кроме проблем со скиллами, в компаниях теперь знают, что вы еще и знатный тролль. Оно вам надо?

Якщо для Вас краще терпіти — то терпіть.

Зверніть увагу всі тільки наїзжають, але ніхто не показав правильного рішення. Зате все знать, що це погано :)

І Ви пишете, що це у мене проблема зі скілами? Ну-ну :)

Думка інших людей, які вміють тільки голосно кричати і бачити тільки те, що їм вигідно — мене цікавить не більше ніж погода в Гондурасі :)

а вы уверены что они вас серьёзно приглашают на интервью? я бы предположил, что им просто интересно с вами познакомится.
я вот бы с удовольствием посмотрел бы на интервью с вами, что-то в стиле www.youtube.com/...​wuSOa_0EH6X4OXzFAmyQGS3a3

Я так розумію на фоні плити та кактуса то Ви?

Хай знають, що буде «обратка».

детский сад какой то, если бы мне давали по доллару за каждое интервью где я встретил неадекватную оценку , то я бы ощутимо обогатился на этом) а если бы писал жалобы, то меня бы обвинили в графомании)))

Так, це ясельна група.

Віртуальна група підтримки do it поставила їм підтримку їхньої відповіді мені.
Чим вони і проявилися :)

Прямо як кіт застрибнув у коробку :)

они оценку не дали, просто комментарии к тестовому заданию тс и просто были кандидаты которые сделали лучше или больше (при таком объеме неудивительно). И все.
Что за привычка унизить человека?

Просто посмотрев его проект и почитав другие комменты от иос девов в этой теме — понял, что человек на джуна даже не тянет с таким уровнем obj-c. Вот и итересно, кто что думает про 6 лет бесполезного опыта, которые застряли в технологиях 2011 года.

тогда понятно почему 6 лет и 2,5к ((( пичалька

6 лет просиживания штанов было представлено как 6 лет иос девелопмента.

Я вже почав скучати за Вашим радіо :)

Так покажете свої шедеври програмування чи їх нема?

Дуже погано, що Ви не можете самостійно визначитись.
Дружину теж будете по рекомендаціям вибирати?

Как говориться 1 голова хороша, много лучше т.к. не интересно поностью смотреть все ваши 2 класа. На тщательную проверку вашего тестового я не хочу тратить свое время, так как в отличии от вас у меня есть работа. Я уже увидел ваш проект — понял, что вы не знакомы даже с базовыми понятиями SOLID. Я удивлен, что ваш проект еще не на MRC написан. Road to old 2011.

«Ми бажаємо Вам удачі)»

как в комментарии ниже

Дуже сміливо мабуть таке писати з анонімного аккаунту :)

На тщательную проверку вашего тестового я не хочу тратить свое время

яле 3 команти в топік написали :)
і ще один в сусідню тему :)

люди должны знать своих героев, потратить 1 минуту на парня с таким огромным ЧСВ), которое теперь явно немного упало — радость для моих глаз)

Грамотно. И в срачик на доу не ввязались, и точку поставили вполне конкретную...

Все ще буде

«Ми бажаємо Вам удачі)» — переводится — катись ты Володька на шишку и больше не закатывай истерик.

там все просто, они нашли друг друга, там комбо. Например тестовое задание меня смутило фактом, что я должен иметь свой дистрибьюшен сертификат и подписать adhoc билд. а он есть не у всех, ибо нет смысла за него платить в личных целях. Я бы это обговорил сразу.
но вот с другой стороны

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

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

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

имхо, тут надо расценивать как поддержка ios 10, и экрана 4″. Как следствие и 32 бит. Лично я не вижу смысла брать физическое устройство для разработки данного тестового.
Или делать тестовое с дизайном схематических скриншотов с задания. ну это очень странно...
А еще, я бы посмотрел, что еще есть на гитхабе у ТС — github.com/redcapua/blackbox довольно старый проект, но тогда ТС где-то 3-4 года опыта. откроем github.com/...​ckbox/blackbox/MainScreen — опа, отдельный xib под каждый размер экрана. Вот тут бы я сильно призадумался бы, продолжать с данным кандидатом или нет в независимости от его уровня. подозреваю, что @trimm утащил этот пример для след поучительных историй....
а теперь главный вопрос: а на сколько этично публиковать тестовое задание публично? галере то будет полезно, оно то всё равно стало сильно не актуальным, хоть освежат.

Проект
github.com/redcapua/blackbox

робився за годину під наглядом СТО замовника через тімвьюєр

Люди попросили показати чи може я програмувати і як я працюю.

Тому зауваження про відсутність бантиків — мимо на жаль :(

Так, у мене був офер, але НДА дуло надто жорстке

а вы мастерклассы по продаже себя не делаете? похоже что это вы делаете лучше чем iOS разработку

посмотрите prntscr.com/mqbxku 2016 год ксибы под девайсы когда уже давно есть autolayout.
Вижу, что ваш СТО вообще не знаком с iOS программированием в целом.

Не кожен дизайн від дизайнерів можно впіхнути в автолейаут.
Є приклади співпраці з аутстафовськими дизайнерами українських лідерів ринку.

Маєте це розуміти :)

«Сегодня в завтрашний день не все могут смотреть. Вернее, смотреть могут не только лишь все, мало кто может это делать.» — примерно так я понял вышесказанное

кстати, а почему можно поддержать отзыв, а комментарий на отзыв нельзя?
Дуров, верни стену! ©

а куда тыкать надо? я вот к этому хочу поставить лайк jobs.dou.ua/...​it-software/reviews/#5389

спасибо, это было весьма не очевидно
imgur.com/v5AAYgd

Та да, я сам туда нажал наугад сегодня 🙂.

Я їм відповім.
Реанімуйте тему!

Побереги репутацию. Или то, что от нее осталось. Вообще лучше попроси грохнуть топик. А то есть ненулевая вероятность, что тебе будет сложно искать работу на местном рынке.

Топік показав, що місцевий ринок для мене протипоказаний :)

Місцевий ринок я бачу, на жаль, таким
uk.wikipedia.org/wiki/Менталітет_краба

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

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

місцевий ринок протипоказаний

так лучше будет

На неместном рынке с таким майндсетом тоже будут сложности. Никто не любить работать с людьми, настолько не умеющими признавать свои ошибки.

Німці мені теж не подобаються.
Особливо баварські.

І машини стали ніякі. Чого вартий пластикова кришка багажнику в w221

Критику надо уметь воспринимать. В целом таким крабом мне кажешься ты — либо жестко демпингуешь на рынке по зп, либо обесцениваешь лычку «6 лет опыта»

Коментар порушує правила спільноти і видалений модераторами.

Та судя по его проектам и коду, он 2 года назад закончил курсы. Работу так и не нашел ,и решил уйти сайти красиво) подальше от "

місцевого ринку

"

Головне, що в цій гілці всі знають як треба, а показати приклад правилного коду нікому :(

Одразу зникають в тумані загадковості :)

Никто вам бесплатно ничего показывать не будет, тратя на это свое время. Есть ресурсы такие как медиум, вендерлич, обжс.ио , аппл гайдлайны и прочее черпайте информацию в интренете. Развивайтесь — удачи, себя вы уже разрекламировали как успешного Лида.

Никто вам бесплатно ничего показывать не будет

Мені і не треба :)

Але якщо хтось каже/пише що знає кращий варіант, то мабуть доцільно показати свій кращий варіант, щоб не бути балаболом.
Чи не так?

В целом таким крабом мне кажешься ты — либо жестко демпингуешь на рынке по зп

на ринку нема з/п

всі розповідають проте які вони круті та як дуже зайняті, а по факту з обіду у топіку жара!!!

Вже трохи зрання засмутився, що тема здохла :( але ні!
Дякувати тролям :)

причем здесь "

всі розповідають проте які вони круті та як дуже зайняті, а по факту з обіду у топіку жара!!!

? В нормальных компаниях никто не будет стоять над душой и смотреть, что бы ты не дай бог не работал. Сделал таску — молодец.
А насчет рынка и зп — есть определенная средняя температура по больнице.
Что отображает по твоему раздел «Зарплаты» на этом сайте?
Почему рядом со мной сидящий айосник с 5ю годами опыта получает 5к$, а ты, человек еще более скиловый и довольно умный и опытный (если судить по ЧСВ) не тянешь (по твоим же словам) на 3к?

Почему рядом со мной сидящий айосник с 5ю годами опыта получает 5к$,

це як інтимні відносини у підлітків:
всі про них лише говорять :)

так само і з з/п:
«ми компанія маленька, клієнти у нас бідні...»

Не понял сарказма, если честно? Да, в компании это не приветствуется, но я точно знаю сколько получает мой коллега.

Фірма не може платити багато.
От на етапі найму фірма жаліється, що мало грошей :)

так зачем тебе фирма, которая не может платить много?

Давай ці нюанси залишимо в таємниці :)

А можно поинтересоваться, вы на какую позицию подавались? какого уровня?

Просто iOS девелопер.
По зарплаті спочатку просив 3, потім відчув, що не потягнуть. Сказав, що згоден і за 2,5, на що мені рекрутерка відповіла, що там буде видно, бо може бути і ще менше... думаю спробуємо.

Але виявилось, що «Ваша Галя дуже балувана» :)

правильно ли я понял, это речь о 3к$ в месяц?

2,5к було верхнею межею можливої з/п

Я не связан с вышеуказанной компанией, но я iOS dev и могу написать фидбек, что бы меня смутило, увидев бы я данное тестовое. Интересен ли он вам? Можете использовать его, как основу для заполнения пробелов в iOS.
скажу сразу, если я бы рассматривал бы данное тестовое, то я бы вас тоже не взял.

Дякую.
Але мені воно не треба.

То тестове завдання вже історія :)

Вчора читав статтю про тестування, так на автора корили, що він через веб інтерфейс Дженкінс конфігурував:
dou.ua/...​ui-testing-guide/#1397604

У кожної команди свої підходи.

Кожен рядок коду я можу пояснити стосовно використаного підходу чи принципу.

Добре ілюструє підходи до кодингу така байка:
===============
Ходжа, сын его и осел в пути

Ехал ходжа Насреддин со своим сыном в какую-то деревню. Сына он посадил на осла, а сам шел рядом. Увидели это встречные и говорят: «Ну и молодежь! Отца своего, старика, всеми уважаемого человека, он заставляет идти пешком, а сам уселся на осла». Тогда сын сказал ходже: «Послушай, отец, ведь я говорил тебе, что так будет? Прошу тебя, не упрямься, садись на осла». И ходжа сел на осла.

Они проехали немного, как опять попались им навстречу люди. «А-ах! Ведь ты здоровый, а забрался на осла и едешь, — сказали они. — А вот разве хорошо подвергать мучениям молоденького мальчика, худенького, как щепка?» Тогда ходжа взял и посадил сына вместе с собой на осла.

Только проехали они так несколько шагов, навстречу им идет толпа. Взглянули они на ходжу с сыном и воскликнули: «Вот, посмотрите, какие безжалостные люди! Разве можно садиться на маленького бедного осла сразу двум людям? Гляньте, гляньте, это, должно быть, ходжа!» Ходжа рассердился, слез с осла, спустил и сына и погнал осла перед собой.

Вскоре повстречалось им еще несколько людей. «Посмотрите на них, — сказали они, — осел бежит налегке впереди, а они по такой жаре тащатся пешком. Бывают же на свете этакие дурни!» Когда ходжа услыхал это, он, вздохнув, воскликнул: «Ну и ну! Сомневаюсь я, чтобы кто-нибудь мог избежать злословия!»
===============

От і кодинг з його підходами виглядає якось так.

Большое спасибо, второй строчкой вы пролили свет на данный топик.

Відповім інакше.

Чому я відмовився від Вашого код ревью:
1) Я Вас особисто не знаю
2) Я не хочу марнувати Ваш час
3) Я не хочу марнувати свій час на дослідження Ваших компетенцій
4) Я не хочу з Вами сперечатись стосовно Ваших рекомендацій

Все дуже просто :)

да, действительно, вы правы. Сказали как отрезали.

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

И потом почувствовал что нужно сделать тестовое?

У кожного свої причини

Если вдруг кто захочет к ним, время устроить флешмоб.
Отправим им это тестовое задание или другое новое (только основной пункт) решенное с помощью: Xamarin, Native Script, React Native, PhoneGap, а для знающих толк есть www.embarcadero.com/...​ad-studio/ios-development, omz-software.com/pythonista , wukix.com/mocl
Напишите на котлине, потом скажите что перепутали платформу
Сделайте два поля, на вопрос «почему ничего больше нет?», ответите что «Да, вы правы, но зато пароль скрывается под звёздочками»
Что угодно, только не Свифт.

Ох, як тобі пощастило, що галерка зашкварилась на тестовому етапі — ти ж просто уяви які ТЗ будуть під-час роботи 😏 іди і радій, що не попав туди 🙂

эта галерка зашкварилась намного раньше. а что ты имеешь в виду под ТЗ во время работы? если технические задания, то обычно технические задания дает заказчик, и галерка тут не при чем, ты как программист полностью можешь влиять на техническое задание если ты не безмолвный раб который делает все что скажут. ну а эта галерка не продуктовая а рабовладельческая галерка ).

Честно говоря, я в шоке. Речь идет даже не об умениях кодить, а об элементарном уровне мышления и уровне менталитета. Я не программист, я веб-дизайнер, но целиком и полностью поддерживаю товарища по труду. Человек потратил свое личное время на компанию, где мягко говоря не профи, а оматоры, которые не считают нужным грамотно составлять тз, а делают все на свое усмотрение. Это как же себя нужно не уважать, чтоб так накинуться человека, который справедливо делится своей болью.
Немного предыстории, так уж у нас заведено, что есть рабы, которые должны читать мысли, лизать отверстие работодателю и при этом морально унижать себе же подобных коллег. Вы на, что рассчитываете, что вас будут больше ценить, скорее наоборот. Скотство, заключается в том, что с вами поступят точно также.
И когда к нашим работодателям, стучится человек, а они далеко не Google, то сотрудники очередной жлобо-компании, считают своей святой обязанностью унизить его.
Я тоже раньше была наивной, усердно делала тз и каждый раз шла нахер, пока до меня не дошло, последнее место помогло это понять, спалились на том, что стали демонстрировать работы предыдущих потенциальных работников.
Но нет худа, без добра. Теперь я хер. делаю тз. бесплатно. Если компания готова платить нормальную зарплату, то для нее не составит труда, заплатить символические деньги, за мое потраченное время. Плюс имею список дежурных вопросов, которые я задаю перед тем как ехать на собеседование. Это помогает, отсеивать жлобов и не тратить на них свое драгоценное время. И современем, буду рвать от сюда, в более комфортные и цивилизованные страны, где нет такого откровенного варварства.

стандартная борода:
1) на вопрос какой язык/технологии/фреймворк использовать в тестовом — ответ up to you. В результате reject с пояснением «не та технология»
2) просят сделать тестовое «как можно проще, чтобы было о чем поговорить» — на собеседовании потом выставляют претензии почему не было сделано это, это и это

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

Не хочу вас образити, але ви реально вважаєте що базові речі: валідація інпутів та шифрування паролю повинні бути описані в спеці?Ви коли писали код вам було ОК відправляти що попало в інпутах?

та шифрування паролю повинні бути описані в спеці?

Про валидацию имейла, ну детскую (паттерн с @) можно было бы прикрутить.
Но кто может пояснить что это за «назашифлованый пароль» такой?
— Показывается текст вместо звездочек в инпуте? — Тогда залет разработчика, но это нифика не шифрование.
— Шифрование при хранении в БД? — так надо не шифровать, а хешировать, ибо ключ от шифрования у вас будет на девайсе.
— При передаче на сервак? — обычно хватает ХТТПС, а там где не хватит, там шифрование не поможет :)

UPD. Кстати, у них на мобилочках есть специальные хранилища для паролей, поэтому надо было бы его использовать, а не хешировать.

тестер имел ввиду первый вариант — текст отображается вместо точек, я проект скачал и глянул

тестер имел ввиду первый вариант — текст отображается вместо точек, я проект скачал и глянул

Тогда все на пресдачу :)
Тестер за неумения описывать проблему.
ТС за джуновскую ошибку. Про валидацию имейла еще можно говорить, но плейн поле для ввода пароля — это залет ( stackoverflow.com/a/43247362 ).

кстати я еще один косяк в его поделке обнаружил )))) когда удаляешь задачу она удаляется а напоминание которое было сформировано для этой задачи остается, хотя должно быть тоже удалено ))))

Фирма, конечно, говно.
Но кто из тут присутствующих сам бы взял автора на работу или хотел бы быть в команде где он лид?

Про лида, почему-то, есть очень большие сомнения.

Тут аксиома Эскобара, на мой взгляд.

Написав андроїд девелопер :)

Приколько читати як миші кота обирають.

Команду лід набирає напишу Вам по секрету ;)

Я после такого к вам не пошел бы в команду однозначно.

Ну и опять же, уверенности в ваших скилах лида нету.

А у мене є сумніви в Вашій компетенції як девелопера ;)

Дивно.
У мене чомусь склалося враження, що буцім я Вам зробив рфер на 10к, а Вам вітер з моря у вікно дує...
Ні?

Нет, просто я обычно собираю минимально информацию про фирму/людей с которыми буду работать если приму офер. Почитав эту тему и куча вашего плача в соседних, я бы предпочел отказаться.

Фирма перед вами повела себя неправильно, но вы какой-то прям детский сад устроили. Достаточно было этого в отзыв им написать, они для этого и есть. А вы некотором или, отзыв, тема, срач в теме...

Прямо як Шелдон Купер :)

Команду лід набирає напишу Вам по секрету ;)

А если пришел в уже готовую команду, то всех увольнять и новых набирать?

Я на таке не підпишусь :)

Лид должен уметь работать с любой командой. С готовой командой даже в каком-то смысле проще, так как все сработались и не нужно друг к другу привыкать.

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

У тімліда відсутні повноваження стимулювання колег:
штраф
звільнити
дати премію
дати вихідний
змінити графік роботи

Тому, для мене простіше взяти людину на роботу, озвучити умови. Якщо умови девелопером порушуються — я маю всі підстави його звільнити, бо то я його привів у команду.

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

Інша річ, коли тімлід без повноважень. Тоді він може зробити тільки «жорсткий код ревью» :)

Бачите, все просто :)

У тімліда відсутні повноваження стимулювання колег:
штраф
звільнити
дати премію
дати вихідний
змінити графік роботи

И слава б*гу! Ты же понимаешь, что с правами приходят и обязанности?
Если бы ты мог росчерком пера выдавать премии и штрафы, то это бы означало, что ты был бы обязан заниматься бюджетированием на проекте!
Если бы ты мог давать людям выходные, то ты был бы обязан заниматься планированием и составлением рабочих графиков!
Если бы ты мог увольнять людей, то ты был бы ответственным за кадровую политику.
Оно тебе надо? Если да, то иди в ПМы.
А так, у тебя будет авторитет для того, чтобы давать ПМу рекомендации по этим вопросам, вплоть до выдвижения ультиматумов, если ты чувствуешь, что непременно должен добиться своего — например, чьего-то увольнения. И тогда будет вполне справедливо, если в рамках ультиматума уволят тебя.

И тогда будет вполне справедливо, если в рамках ультиматума уволят тебя.

Я проверял — работает.

Я такого не боюсь :)

Добре що я свого часу відмовив рекрутеру з Вашої компанії :)

И зря. Думаю, Eleks были бы рады нанять чудака, который готов отгребать сразу за тимлида и ПМа, прося при этом всего $2.5-3k.

Проще на эти деньги взять strong middle , кормить обещаниями, навешать обязанности

тимлида и ПМа

дать полгода «себя проявить», а потом по результатам аттестации докинуть всего лишь 10% потому что не умеет в past future continuous.

О чём, собственно, и речь. Только даже навешивать ничего не нужно — сам же просит :)

Собаки гавкають — караван іде :)

Собаки гавкають — караван іде :)

Я не працював би тім лідом за заявлені Вами кошти.
Мінімум 4к.

И не прося :)

Можете продовжити список.
А спільнота подивиться який Ви менеджер :)

Ви дали критику

Это вы перечислили известные вам способы мотивации? И на этом все, инструментарий кончился?
Походу лид там такой же джу как и девелопер.

Вас попросили проявити себе і доповнити список.
Ви по хамськи відповідаєте

Спильнота нехай maruv дивится.
А вы можете читнуть это для начала.

Розумним людям достатньо інформації, щоб скласти свою думку по Ваші менеджерські навички.

Секрет :)

Вот у меня такое же чувытво после прочтения топика и комментов.

Вот у меня такое же чувытво после прочтения топика и комментов.

А от у мене відчуття, що Ви не змогли налаштувати перевірку синтаксису у веб переглядачі :)

Добре, що хоч в керівництві розбираєтесь :)

Не знаю, что ты имеешь в виду на счет управления, но в свою команду я бы тебя не взял. Как минимум ты не умеешь воспринимать конструктивную критику.

Від кого сприймати критику?
Від таких як ти, які пишуть з помилками?

Проспись!!!!

Действительно, что это я. Не заморачивайся, ты все правильно делаешь.

Подивився Ваш профіль щось я не побачив лідовськоої активності...
Мабуть не змогли собі команду набрати? Чи начальство не довірило?
Класно звичайно бути незалежник підрядником: і швець, і жнець, і на дуді дудець!
А саме головне можна іншим давати оцінку: бо сам і розробник і біг босс ;)

Фрейду булоб цікаво, чому Ви відреагували саме на цей тред в топіку? Приховане прагнення?

Эмм, я, кагбэ, на разные треды отреагировал. Хотел написать коммент очень близкий по содержанию. В итоге и написал 😉.

я не побачив лідовськоої активності...

Так ты не там смотел 🙂.

Оооо... Гульчатай, покажи личко, не встидайся!!!

А питання було достатньо просте:
В лінкедіновському профайлу активність девелопера.
Лідовку активність треба шукати мабуть в «секретному» резюме.

Або її скоріш за все дійсно не має :)

Чи таки є?

Там и слова архитект нигде нет. И разных других громких слов. Странно, что ты на этом заострил свое внимание. Активность нужно смотреть во время рабты и оценивать по ее результатам. Тем не менее, как лычки которые я хочу или не хочу выставлять относятся к твоему надменному поведению в этой ветке?

Активность нужно смотреть во время рабты и оценивать по ее результатам

Это зависит. Некоторые вот на форуме достаточно неплохо раскрываются... :)

Личку ж не дали :(

Мабуть активність була недостатньо активною чи переконливою...

і.о. то не лід :(

то так підтанцьовка з беквокалом, на жаль.

Ну, хоть что-то ты вынес из нашей дискуссии 🤦‍♂️.

один момент тільки залишився для прояснення:
я так і не зрозумів де була лідовська активність :(

Ну, ты, главное, не переживай по этому поводу.

Просто тепер я знаю, що лідовського досвіду у Вас немає.

Одна річ писати брехні з анонімного аккаунта, інша річ з прив"язаного до інших аків.

Для мене Ви ще один голий король з казки Андерсена :)

Але не переймайтесь з цього приводу. Хто я такий, щоб зважати на мою думку?

Головне, щоб Вам вірили про Ваші лідовські активності рекрутери на роботодавці. Навіть, якщо про личку в резюме не написано.

Єдине, не нервуйтеся сильно, коли будуть уточнювати. Це у Вас це виглядає дуже прикольно :)

Все буде добре!

Знаешь, любопытно, что у некоторых компаний такая же вава. Некоторые зовут на позицию тех лида, архитекта, СТО, просят сделать аудит проекта и т.п., а другие говорят, что ты не написал себе в профиле слово лид и позицию лида мы тебе предложить не можем. Как думаешь, с чем это связяно?

Андрію, давайте подивимось все по порядку.

З чого почалася наша з Вами дискусія?

З Вашого коменту:

Вот у меня такое же чувытво после прочтения топика и комментов.

Цей комент

Знаешь, любопытно, что у некоторых компаний такая же вава. Некоторые зовут на позицию тех лида, архитекта, СТО, просят сделать аудит проекта и т.п., а другие говорят, что ты не написал себе в профиле слово лид и позицию лида мы тебе предложить не можем. Как думаешь, с чем это связяно?

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

Це цілком природньо.

Тому Ваші рефлексії викликані нереалізованим ще прагненням бути лідом.

Все дуже просто :)

Згодні?

Конечно, согласен, для каждой сложной проблемы есть простое, понятное и неправильное решение. Ладно, я больше не хочу тратить на тебя время.

Чому?

Гештальд закрився чи катарсіс досягнуто?

Потому что это напрасная трата врмени и в виду отсутсвия конструктива могу скатиться в шутки про напыщенного айось лида, который не прошел собес на обычного дева на 2.5к. Оно никому не нужно.

Як все запущено :(

Почали про сумніви в моїх лідовських здібностях.
Ви розповіли про несправедливість на співбесідах та неможливість отримати лідовську позицію.

Тепер Ви мене лякаєте своїм відчуттям гумору :)

«Два чаю цьому гаспадіну!!!» ©

Все набагато простіше, не переймайтесь.

Я начал с того, что с таким типом мне работать было бы неприятно. Ну и дальше тоже какое-то искаженное перекрученное восприятие моих комментариев. Очевидно, что меня не слышат. За сим откланиваюсь.

Чи я б корова мукала :)

Кстати да, mobile lead за 2.5 это интересно))

Міша, зробіть свій профайл в лінкедіні активним, а ми його подивимось.

По жруге то була звичайна позиція розробника, я ніде на писав, що за 2,5 я би працював тімлідом :)

Он и так активный.
Ну по каким-то причинам вы идёте на даунгрейд. Как вариант — потому что вы не нужны как лид? А глядя на этот топик это кажется правдой.

Дай Боже, щоб Ви бути всім завжди потрібні !!!

Спасибо.
Вы отказываетесь ото всех советов. Вы не прошли тестовое во второсортную шлюпку.
Но при этом все вокруг не правы, а вы красавчик. Если вокруг все козлы, стоит задуматься ©.

Не приписуйте мені будь ласка того, чого не було.

Ни разу не в курсе как пишутся апы на айфоны..
Просто интересно, действительно все так плохо, что авторизация и 2 странички тудулиста пишутся больше 4 дней, человеком с 6 годами опыта?

у человека с любым количеством лет опыта могут быть и другие дела, кроме как решение тестовых

Я конечно понимаю, что нельзя много ожидать от js разработчика. Но все же, я не говорил ничего о тестовом задании, мне была интересна технология и эстимейт от тех кто пишет под эпл.. Ваш комментарий совершенно не отвечает на этот вопрос.

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

Ваше питання звучить достатньо агресивно.

Как бы я мог перефразировать, что бы это звучало менее агрессивно?

Спитайтеся у своєї мами чи дійсно люди цікавляться у такому тоні?

Рад, что моя мама для вас такой авторитет :)

Ви не дивилися виконане завдання

У специфікації 4 екрани
По факту 7, бо були пропущені екрани в специфікації

какой экран был пропущен в задании? кстати бро ты Swift знаешь или нет?

Вибачте Олег віртуальний Іванов, але схоже ми з Вами навіть не знайомі.

Бро, ййо і так далі кажіть будь лска тим кого знаєте або своїм родичам ;)
Більше я на Ваші провокації відповідати не буду ;)

Сподіваюся, що все що Ви хотіли спитати Ви вже спитали ;)

Щасти!

Что ты мутишься и так понятно что ты свифт не знаешь, да и верстать интерфейс тоже не умеешь.

На це я відповім просто:
подивіться контрибьюти в моєму репозиторії. Там є і на свіфті ;)

да ничего на свифте у тебя там нет

Здається пошук то не Ваше:
от контритбьют в одну лібу
github.com/...​author:redcapua is:closed

от конвертація прикладів Firebase Google в Swift 4.2
github.com/...​q= is:pr author:redcapua

Ви теж могли би показати свої шедеври, якщо вони є звичайно :)

Замена наименования типа ключей словаря UIApplicationLaunchOptionsKey на UIApplication.LaunchOptionsKey это твой шедевр ? :) Ты на какую позицию претендовал на джуна или лида ?

там миграция swift 4.2 автоматическая на которую swiftlint бы ругался если бы он старался писать красиво и аккуратно. в общем я не много смотрел, но то что я увидел не правильно и нужно переписывать. также у Владимира есть вот такой пример github.com/...​apua/swiftcodeclasssample. по которому видно что с SOLID он не дружит и не знает swift на уровне хотя бы джуна. использует NSMutableDictionary в SWIFT это уровень мифического лида)))). азахахахахах.

игнат, он же олег он же ни разу ни бот, у вас паспорт поменялся или вы просто удачно женились, но поменяли только имя?

Нет Влад. я удачно вышел замуж. и вообще. этого индивидуума не взяли просто потому что он не умеет программировать на нормальном уровне. смысл что вы его защищаете? я думаю конечное решение было выдвинуто ревьювером и на него не влияло решение какого-то тестировщика с поражением мозга которы не может отличить сикурный ввод текста от шифрования. ОМГ. и да, я не бот. если ты не можешь отличить фейка (какого-то анонима) от бота то мне тебя жаль

и да, я не бот

сказал иван, игнат и джон
может это просто шизофрения?

я знаю от чего у тебя подгорело от потоков в JS и на мой аргумент по делу. но зачем ты меня к Игнату прилепил :)

мне кажется у меня развивается диссоциативное расстройство идентичности. Олег, ты чо? ))

у тебя подгорело от потоков в JS

как может подгореть от того, чего не существует?

я ж написал что я не бот потому что я — фейк. ахахх... смысл вырывать фразу из контекста???
мне очень жаль тебя. искренне жаль.
а Олег Иванов это чужой фейк. хотя смысл тебе верить словам какого-то Джона. лучше почитать слова Johnа Appleseedа, который явно друг Vladimirа Samoylenkа. можно еще отследить кучу фейков в комментариях.

Дубовая роща ты, посмотри на мою дату регистрации и количество комментариев.
Я не друг никому , скорее враждебно отношусь к посудинам вроде doit , и вообще не понимаю, зачем в похожие отхожие места ходить: это небезопасно для карьеры и кошелька
Что они могут предложить , кроме вереницы однотипных проектов с апворка по fixed price?

Ви теж так можете зробити ;)
Жаль що інший проект, який був вказаний першим Ви не побачили ;(
Сліпота?

А перед цим іншого репозиторію ти не побачив? Спіпондра!

Я не углублялся. Повторюсь, интересно не как тестовое, а как быстро вообще пишутся простые вещи для эпла.

Я не углублялся

так навіщо тоді триндіти

Просто интересно, действительно все так плохо, что авторизация и 2 странички тудулиста пишутся больше 4 дней, человеком с 6 годами опыта?

якщо просто цікаво ? %)

К сожалению, не имею других возможностей донести вопрос, кроме как «трындеть»..

Вечер пятницы , отдел пиара и маркетинга не появился.
Ну, может люди наяву работой загружены по кромку ушей.

Читаю вакансию на яблочного разработчика и тут:
As a plus
— Residence in Kyiv
— Adwanced English

А вот это зачем ? 0_о

— Adwanced English

А вот это о компании тоже говорит кое-что.

прислать им порядка 500 строк кода из любого своего пет-проекта.

Упаси Боже увидеть кому-то код моих пет-проектов ))

Хотя.. если любой код, то можно DTO`шки прислать :D

Рыба должна думать прежде чем подписываться на делать.
Особенно если тестовое сильно похоже на реальный проект.
И да, если Вас не хотят взять, а тестовое это лохотрон для исполнителей или 100500 чего еще, то и не возьмут.
Найдут 100500 причин, и даже если Вы успешно сделаете, то завалят на следующем этапе или просто банально отморозятся.
Заморачиваться на эту тему очень себе в минус.
Квест поиска работы в последнее время сильно напоминает колесо фортуны :)))
Удачи Вам найти хорошую работу.

Зачем вообще делать техническое по устаревшим технологиям? Чтобы потом копатся в куче легаси?

Тому що так сказала рекрутерка :)

Ты рекрутершу искал или хороший проект?

Я спитався, мені відповіли.
На цьому крапка :)

Task
Create an application based on existing API and Swift/Kotlin.

хммм... зачем что-то спрашивать, ведь там все написано?
и вот ты спросил и тебе сказали пиши на objc никакого swift )

скорее всего спросил так как плохо свифт знает

писал бы уже на java ) потому что и objc тоже не шибко хорошо знает

Хватит тут наговаривать на человека с 6+ годами опыта!!!

блин. сорян. Владимир, простите что наговариваю. у меня то опыта не 6 лет. боюсь последствий от Лида с 6+ годами опыта.

Олег, кончай!
Покажи свій репозиторій.
Побачимо який ти спец.
Пока я переконаний що ти спец по триндежу.
Даю тобі шанс виправитись.
Язиком молоти, не мішки ворочати ;)

Объективно говоря, ваш код написан неаккуратно. Да, тестовое там упоротое и хочется плакать кровавыми слезами (the furthered using — ёбаный стыд); но у вас вообще нет никакой культуры кода, 100500 пустых строк, отступы как попало, магические цифры везде где можно: github.com/...​eenViewController.m#L294 по стеку вверх ходите когда нужно и не нужно: github.com/...​creenViewController.m#L49.

Дійсно, я не користуюсь плагінами для форматування коду.

На проектах де це дуло дуже важливо використовувались скрипти на Дженкінсі для виставлення переносів, відступів, тощо.

по стеку вверх ходите когда нужно и не нужно: github.com/...​creenViewController.m#L49.

Тут я не згоден, бо треба будо повернути значення.

На проектах де це дуло дуже важливо використовувались скрипти на Дженкінсі для виставлення переносів, відступів, тощо.

Код чаще приходится читать чем писать, я бы серьезно посоветовал вам выработать культуру написания такого кода который приятно читать. Да, для большинства языков есть автоформаттеры, и их можно (и нужно!) использовать, но вы вполне должны быть способны написать аккуратный код и в блокноте.

Тут я не згоден, бо треба будо повернути значення.

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

Код чаще приходится читать чем писать, я бы серьезно посоветовал вам выработать культуру написания такого кода который приятно читать. Да, для большинства языков есть автоформаттеры, и их можно (и нужно!) использовать, но вы вполне должны быть способны написать аккуратный код и в блокноте.

мене так влаштовує, інших також.
кому це важливо — вони скамі казали які плагіни ставити в ісккод і які налаштування їм задавати.

Зайвий рядок Ви перший побачили за останні кілька років.

Мені більш толерантніші люди попадались...

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

ну так напишіть їх будь ласка :)

мене так влаштовує, інших також.
кому це важливо — вони скамі казали які плагіни ставити в ісккод і які налаштування їм задавати.

Вы так говорите вроде никогда в команде не работали. Вы свой код вот так напишете, за вами кто-то отформатирует, а `git blame` потом кому разгребать?

Не считая самой идеи тестовых заданий — если вы потратили столько времени на «попрограммить», почему бы не сделать это хорошо? Вы снова акцентируете внимание на том что я у вас лишний `\n` нашел, но ведь проблема не в нем, проблема в том что ваш код тяжело читать. Извините за терминологию, но стойкое ощущение что написано «на отъебись», а ведь вы сами написали ниже что вам было интересно попробовать эту задачу. Почему не написали аккуратнее?

ну так напишіть їх будь ласка :)

Помнится в Obj-C для такого традиционно применялся паттерн delegate?

Володя,

одна річ це дебати про шифрування паролю.

Інша річ, це зауваження по коду.

Якщо вони у Вас є — будь ласка напишіть Ваш варіант, без всіляких там здогадувань типу

Помнится в Obj-C для такого традиционно применялся паттерн delegate?

в іншому випадку воно сприймається як теревені.

Резюме:
не подобається мій варіант — пишіть свій.

Забулися як воно там, краще промовчіть.
Розумних в топіку і так вистачає :)

Премія Дарвіна Ваша!
Рекрутерка так сказала. Її питалося.

Уважніже!!!

та ты больной реально. ты спрашивал то что написано и не спрашивал то чего не написано, а теперь ноешь тут. удачи тебе...

УВАЖНIШЕ ПИТАТИСЯ ТРЕБА БУЛО!!!

Дякую лікаре!!!
Діагноз по аватарі це супер!!!

Пишіть іще!

Потому что свифт не знает, наверное

по заданию первое что бросается в глаза — это криво сделаный интерфейс.

Подивіться на специфікацію.

а что на нее смотреть? я уже смотрел вместо трех кнопок ты лепишь одну кнопку разделенную на три части (сегментэд контрол) для чего?

Тому що сегментед контрол саме для таких ситуація коли з трьох варіантів треба вибрати один.
Там я у Вас питався про кордату та локалнотіфікейшини. Подивіться будь ласка. То дуже важливо.
Дякую!

ахах фейспалм )))) сними лычку iOS лида ты на джуна даже не тянешь )))))

то я тролив :)

Однако, охренеть — тестеры уже тестируют чье-то тестовое задание :)

ООО «Бломов», берем задание на апворк на 20 часов. набираем 10 вайтивайтишников, даем «тестовое задание», платим одному тестировщику, чтобы проверил, выбираем одно задание, вайтишников разгоняем метлой, профит уходит менеджеру.

Наверное, в 2019 году это удивляет. В 2000м, когда я был интерном, наши тестовые задания ещё и как тестировали профессиональные тестировщики. Более того — если они находили баг (а особенно — тривиальный), это был хороший такой минус в карму автору кода.

Мне хорошо запомнилось, как мы в нашей интернской группе наловчились делать кросс-тестирование кода друг друга, чтобы иметь достаточно уверенности, что твоё тестовое задание не вернут с позором в виде обширного баг-репорта.

Т.е. если тестер проверил чье-то тестовое задание и нашел баг(и) — это повод задуматься о том, чтоб брать разработчика на работу? А штатных разработчиков, простите, тогда что за баг(и) — увольнять?

харрроший вопрос, кстати

А штатные разработчики, вы думаете, как попадали на работу? :) Большинство — через такой же фильтр, либо в виде интернатуры, либо в виде менторов — суровых бородатых дядек, некоторые из которых за косяки в коде могли распечь так, что мало не покажется.

А умудрившихся просочиться мимо фильтра и потом плодящих баги — таки да, в те времена могли и уволить. Я вас сильно удивлю, если скажу, что в начале 2000х в топовые ИТ-компании были конкурсы по несколько человек на место?

Абсолютно не удивили, ибо сейчас конкурс не меньше.

пока искал «вайтивайти», тестовые воспринимались как нормальное явление. Уже имея работу, понял насколько это ж, блин, утомительно — заниматься ими в свое свободное время. Если и делаю, то только те которые любопытно делать/либо совсем ненапряжные. И да отсутствие какого либо фидбека вообще обычные дело, увы. Так, что я бы посоветовал вообще не брать в голову и искать дальше. И касательно ситуации — все ваши замечания можно было предъявить прямо тому человеку, который отправил фидбек. Вряд ли бы это кардинально что-то изменило, но хотя бы недопонимания между вами и компанией не было.

Їм моя позиція відома :)

Есть такая рыба «Анабас», она умеет ползать по дереву

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

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

Да это ж просто праздник какой-то, тут вообще фидбека не дождешся а тебе аж от двух человек и по делу пришел.

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

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

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

Ото канєшна косяк, як на мене єдиний.

Люди, вы просто посмотрите на его код. github.com/...​itsofware.test.assignment. Владимир ты ж не сделал ничего хорошо. какой у тебя опыт работы? ты начал писать на ios в 2011 и через 2 года забил. а тут с бухты барахты ты решил написать что ты все можешь? какой синглтон класс на 600 строк? какие запросы по 200 строк? какие синтесайзы, какое хранение данных в апп делегате. люди которые на стороне этого человека вы уверены что вы защищаете правильную сторону? конечно если вы не знаете ничего о ios разработке то да, рекрутер плохой, тестер аутист а ревьер вообще без опыта работы и знает только swift, даже прочитать нечего не смог и забил.

Отличный тимлид 7 лет и конкурсы хорошие) посмотри, где храняться его картинки. А структура то какая такое чувство что классы писались разными людьми. А кордата с 1 меин контекстом вмерженная с апи менеджером. Зря вообще запостил автор 7 лет))) иос девелопмента

Шикарно пане Віктор.
Дякую за перший комент у моєму топіку!

Ви перестали бути незайманим на ДОУ!!!

Ох уж ці айосники, кого хочеш позбавлять цноти ))

2 перца после регистрации сразу ломанулись разоблачать коварного иос девелопера, посмевшего создать файла на 600 строк. наблюдаем

какой синглтон класс на 600 строк?

это к чему претензия? я бы понял претензию к длине метода на 600 строк

какие запросы по 200 строк?

никто не писал запросы к мелкомягким сервисам?
я просмотрел код наискосок и не увидел там ничего страшного, хоть и не люблю обжси
непонятно, на какую позицию было собеседование
непонятно, почему тестовое задание проверял тестер и тп

Проверял же не только тестер :). Почему это смцщает. Ноборот, это оценка работы под разными углами чтобы принять более взвешенное решение.

Проверял же не только тестер

и заказчик :)

Хорошая шутка :). Это же обычный TODO list.

мы же не знаем, кто был заказчик. вдруг какйто студент из индии, который лабу пишет

Давайте спочатку визначимось пробіл чи табулятор, а потім поговоримо про кількість рядків у файлі.
ок?

просто ахахахха... хорош. давай еще посчитаем количество букв.

не всех больных война убила...

не всех больных война убила...

the irony is strong in this one

Крайне странная конторка, так же имел «удовольствие» с ними общаться(с СЕО и СОО), года пол назад. Что у них там на уме одному аппарату МРТ известно.

Неэтично выкладывать тестовые задания.
Ничего особенного не случилось. Было интервью, ты по каким-то причинам не подошел, и несоласен с этим. Но это обычный рабочий момент.

Неетично робити оцінку по незаявленим вимогам :)

Я про це.

Неетично робити оцінку по незаявленим вимогам :)

Вам ответили почему Вас не взяли. Им нужно, что бы пароль слали зашифрованным, без упоминания этого момента в документации. Это не оценка Вас, как разработчика, это ответ, почему именно Вы именно им не подходите. Возможно есть компания, где сказали бы, зачем слать шифрованный пароль, если это явно не указано.. Но это уже совсем другая история )

От Вам кейс:
2 айфони і андроїдний телефон
Один користувач
Один аккаунт

Користувач має логінітись у свій аккаунт з будь якого девайсу

Шифруйте пароль ;)

а вот тут подробнее. С каких таких моментов не этично выкладывать тестовое задание?

С такого момента, что остальные кандидаты получают конкурентное преимущество, зная задание наперёд.

Конкретно в чем выражается преймущество?

PS: даже если таковое есть от тестового задания: И что с того?
1) Ты уже в эту компанию и так не идешь.
2) Люди получают шанс лучше подготовится, соответственно рекрутер может отобрать более подготовленных кандидатов.
3) Человек может сам решить, стоит ли ему вообще отвечать рекрутеру, если есть тестовое задание на 40+ часов.

Преимущество в конкретно этом случае в том, что задание просят сделать как можно быстрее. Странно, что вы не видите разницы в задании с ограничением времени и без такого ограничения.

Задание просят сделать как можно быстрее. Странно, что вы не видите разницы в задании с ограничением времени и без такого ограничения.

И все-таки: «Почему?». Ответ без аргумента не принимается

Так написали выше, потому как пошарив тестовое задание от конторы ХУZ ты во первых даешь кандидатам возможность другим кандидатам подготовиться к нему заранее, что как бы ставит кандитов в неравные условия. Ты даешь возможность кому либо стырить тестовое задание подготовленное конторой XYZ и использовать его, тем самым готовить кандидатов к выполнению этого тестового задания (банально если 3 конторы дают одно и то же тестовое). Если XYZ сочтет это проблемой это вынудит их придумывать новоет ТЗ а это как бы трудозатраты. Банально это тестовое задание (ровно как и любой документик написанный в недрах любой компании) какая-никакая а их интелектуальная собственность, без разрешения её шарить не надо.

Так написали выше, потому как пошарив тестовое задание от конторы ХУZ ты во первых даешь кандидатам возможность другим кандидатам подготовиться к нему заранее, что как бы ставит кандитов в неравные условия. Ты даешь возможность кому либо стырить тестовое задание подготовленное конторой XYZ и использовать его, тем самым готовить кандидатов к выполнению этого тестового задания (банально если 3 конторы дают одно и то же
тестовое).

И? В чем проблема? Оценивать будут не то как ты читал задание, а то как ты его выполнил. Выкладывать решение — другой вопрос, но даже его надо «защитить», так что опять же, качество выполнения не зависит от наличия задания заранее.

это тестовое задание (ровно как и любой документик написанный в недрах любой компании) какая-никакая а их интелектуальная собственность, без разрешения её шарить не надо.

А вот это уже другой вопрос, тут уже вынужден задуматься :) Но сомневаюсь что будут судиться из-за банального тестового задания.

И? В чем проблема?

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

А вот это уже другой вопрос, тут уже вынужден задуматься :) Но сомневаюсь что будут судиться из-за банального тестового задания.

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

Просто так нет, но если есть ситуация, в которую попал автор, то вполне нормально.

А в какую такую особую ситуацию он попал? Его отсеяли по тестовому заданию? Мене одна контора отсеяла в 3 случаях из 4, хотя сначала казалось бы у нас с ней должен был быть идеальный матч.

Вибачаюся за втурчання, мушу поправити :)

Его отсеяли по тестовому заданию?

Перевірка відбувалася за незаявленими критеріями.

Ну а що власне в тому такого? Хіба ти таке вперше в житті бачиш?

На жаль так :(
Інші або мовчки зливалися або по суті приколупувались.

А тут тупо придумали нові вимоги.
Хоч стій, хоч падай :)

А тут тупо придумали нові вимоги.
Хоч стій, хоч падай :)

чим це для тебе відрізняється від

Інші або мовчки зливалися
Перевірка відбувалася за незаявленими критеріями.

Ну серьезно, как джун который ищет первую работу. Вам могут отказать потому что «просто не понравилось» (и вы так же можете отказаться). Снова же, от лида обычно ожидают чего-то большего чем «а мне в спеке не написали». Жизнь — не тест в школе где надо угадать Х правильных ответов.

P.S. Да, я вкурсе что вы ждете недождетесь когда я буду искать работу.

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

Снова же, от лида обычно ожидают чего-то большего чем «а мне в спеке не написали».

Ви опустились на рівень тих, хто приховувваня паролів зірочкою та шифрування вважає тотожним ;(

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

З задоволенням Вас читав останні 4 роки.

До цього Вашого коменту я Вас поважав.

Вибачайте якщо, щось не так.

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

Я так понимаю, к вам это понимание пришло уже после того, как «...Я чомусь вирішив, що інтеграція вебсервісів не так круто як робота з локальною БД»?

Я прагнув зробити всі три пункти завдання.

Если XYZ сочтет это проблемой это вынудит их придумывать новоет ТЗ а это как бы трудозатраты.

так в чем проблемы? Подписываем с кандидатом нда, засылаем ему копейку и тогда вообще никаких проблем ни с придумыванием нового, ни с отзывами

Ну мое мнение что даже без подписывания НДА как содержание так и сам факт переговоров о трудоустройстве это конфиденцальная информация не подлежащая разглашению.

Как бы ты отнесся к тому, что контора где ты был на собеседовании слила бы куда-нибудь твое резюме?
Как бы ты отнесся к тому, что она проинформировала об этом твоего текущего работодателя?
А если бы распространила информацию о том что по их мнению ты не дотягиваешь до уровня на который притендуешь?

Ничто из этого не смертельно конечно но это нарушение деловой этики. А нарушать её не надо.

Как бы ты отнесся к тому, что контора где ты был на собеседовании слила бы куда-нибудь твое резюме?

У НR это явление наблюдается регулярно, неоднократно сталкивался, отношусь с пофигизмом, распространение слухов, порочащих и т д тоже наблюдается, даже специально отведенные места есть.
И, как вы думаете, статьи про цирк на галерах на уютненьком.ат строго выдумка?

У НR это явление наблюдается регулярно, неоднократно сталкивался, отношусь с пофигизмом,

Ну то есть увидев такую ситуацию вы тоже отреагируете «а что тут такого»?

Какую именно?

а что тут такого"?

Вполне возможно. А еще возможны варианты с попкорном, и дополнительным набросом для разжигания.

на любую из трех описанных мной выше, хотя бы на

Как бы ты отнесся к тому, что контора где ты был на собеседовании слила бы куда-нибудь твое резюме?

Это тоже «что тут такого»?

Класс тема. Топик стартеру респект и

пятёрочка за топик в пятницу

Отвечу оппоненту.

Как бы ты отнесся к тому, что контора где ты был на собеседовании слила бы куда-нибудь твое резюме?

Абсолютно спокойно. Мало того, разумно в него не включать те подробности, о которых не стоит говорить. И если буде надо будет, развернуто пояснить, после получения гарантий нераспространения.

Как бы ты отнесся к тому, что она проинформировала об этом твоего текущего работодателя?

С пониманием уровня переговорщиков в той конторе. Они просто не нашли другого рычага давления. А для текущего работодателя это будет еще одним шансом поговорить за деньги и про то, что надо их больше. В общем то, он и так в курсе, что с тех пор, как придумали дензнаки и для экономии 3ю группу, это как то требует держать отношения в тонусе.

А если бы распространила информацию о том что по их мнению ты не дотягиваешь до уровня на который притендуешь?

Вот тоже работает только до определенного уровня, а после него можно и поиграть в как минимум в 2 игры:
* снять денег за ущерб репутации, причем тут тоже масса способов
* нанести ответный удар по репутации же, чем ТС и занят.

НДА на тестовое — я правильно вас понял?

Оо, если правильно — то договор ЦПХ с оплатой, так как согласно ГК, договор должен быть направлен на реальное наступление обусловленных им последствий (ч. 5 ст. 203 ГК), и реальными последствиями такого договора будет получение одной стороной денежных средств за выполненные работы, а компанией — выполненых работ. Соответственно — условия работ оформляются как приложения к договору, и соответственно неразглашение условий фиксируется в договоре, том числе и период.
Прямой НДА на этапе тестового, прямо скажу, как то наивен. Во первых надо фиксировать факт деловых отношений, а без фин. взаимоотношений сторон, доказать взаимоотношения это как то будет сложно, во вторых условия тестового должны быть ком. тайной на предприятии, если Вы понимаете, о чем это я.

тестовое задание (ровно как и любой документик написанный в недрах любой компании)

Не путаем твердое с квадратным. Тестовое задание, если не предприняты специальные меры, это часть публичного оффера работы. И при любых непонятках подлежит оглашению.
А вот с документиками в недрах компании все не так однозначно.
А так, интеллектуальной собственностью кандидата считается даже письмо потенциальному работодателю, отправленное по e-mail. И цирк с тестовыми, отказ о приеме может служить поводом для иска. А так как, по наивности или по правовому расп... требовалось готовое приложение, факт запуска и изучения самой компанией обьекта аторского права не отрицается, жаль, что мы не в Техасе. Это кстати причина, почему разумные просят только какую то часть кода и никогда — полную систему, и проводят ответные действия по его экспертизе для кандидата, чтоб если что прикрытся от иска.

Неэтично выкладывать тестовые задания.

серьезно? почему?

серьезно? почему?

потому, что компания не выложила твое cv на свой публичный гитхаб с указанием стенограммы ваших контактирований

так никто не выкладывал черную бухгалтерию конторы
а мой сиви свободно лежит в линкедине. чего мне его прятать?

для тебя это норм, для кого-то не норм
поэтому, нужно спрашивать, когда выставляешь информацию, касающуюся других

Неэтично выкладывать тестовые задания.

Если нет грифа секретности в имейле или какого-то другого требования к конфиденциальности, то выкладывай не хочу. На гитхабе валом тестовых заданий в самые респектабельные компании и это никого не смущает.

зачем вообще обж с использовать в 2019 году если есть красивый и удобный язык свифт?

Рекрутера було запитано як робити на Свіфті з бантиками — в такому разі прийдеться скорочувати завдання чи попростіше ? Отримав відповідь — На Обджектів Сі без фанатизму.
От я і зробив на Обджектів Сі :)

не знаю бро щас ты на эмоциях может не стоит всю эту возню выставлять на всеобщее обозрение, лучше остыть и забить и искать новое место. смысл этих нелепых отзывов, кандидатов еще по жестче прокидывают. а там дело твое, удачи.

Я дуже спокійно на це все дивлюся.
Не вони перші, не вони останні :)

Вважаю, що випадок має бути оприлюднено.
Країна повинна знати «героїв»!

сколько ты пунктов сделал три или только первый?

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

Другий та третій пункти були зроблені повністю, але навіть не розглядались.
Ревьюєр написав так:
«Только локальная реализация. Запросы — это обязательная часть тестового задания, локальное хранение ¬— это дополнительная часть.
Из обязательной части выполнено только 2 запроса (sign in/ sign up).
»
Ревьюєр навіть не побавив що зроблено локальні нотифікації з можливістю їх відміни — тобто пункт 2 зроблено повністю.

вот лучше бы ты на второй и третий пункт заложил, а сделал все по первому, так что ссзб

Я чомусь вирішив, що інтеграція вебсервісів не так круто як робота з локальною БД.

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

А за чем что то решать если в задании четко сказано первый пункт обязателен к выполнению , а второй и третий необязательные(опциональные). Этот как в протоколах iOS есть обязательные функции и необязательные функции для реализации, когда ты свой класс подписываешь под протокол.

Не встиг доробити :(

Моє бачення структури аплікації було таке, що використання локальної БД вимагатиме значних змін в інтеграції бекенду:
відправка нових подій на сервер, видалення подій, апдейт.

Тому для економії часу (щоб робити тільки один раз) я і відклав перший пункт на потім.

а зачем верстать интерфейс в отдельных xib файлах, если лучше все в одном сторибоарде сделать тем более там всего четыре экрана нужно было?

Сторіборди чи ксіби то є релігійне питання :)

хах хорошо слился)))) видишь в этом монастыре не канает твоя религия

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

по форме логин — текстовые поля не сделал им рамку как в задании, в поле для ввода имейла не поставил клавиатуру соответствующую, в поле ввода пароля не поставил птичку Secury Text Entry, углы у кнопки логин не округлил как показано на картинке.

В такому разі подивіться ще роботу з CoreData та LocalNotification

Бачу Ви добре обізнані.

Я серйозно.

ВАТ?!
Они тратят время тестировщика, чтобы проверить блекбоксом тестовое, вместо код-ревью?!
Ахахахаха, это действительно очень похоже на решение задачи с апворка за счёт кандидата.
Сразу несколько красных флагов:
1. Задача заняла больше нескольких часов.
2. Задача представляет собой полноценное приложение.
3. Задача интересует как конечный результат («делай так, потому что у тестера такой телефон»), а не как проверка навыков кодирования.
4. Ограничение на используемый язык (для код ревью нет разницы, на каком языке его проводить. Исключение — только в случае аргументированного списка, типа «мы вот такие технологии используем на проекте и нам важно, чтобы кандидат имел опыт именно с ними»).
5. Ошибки в тестовом — usability-level (типа нешифрованный пароль), а не coding level (типа архитектурных просчётов, антипаттернов и т.д.). Это ещё раз говорит о 3-м флаге.

Мой совет — забудь про эту контору, а лучше — поставь её в личный чёрный список.
На будущее: видишь такие тестовые — сразу отказывай, незачем кормить мошенников, зарабатывающих на имитации вакансий.

1. Хз, но чаще всего да
2. Да, причем клиент для решения реальной проблемы
3. Да
4. Не знаю. Возможно у них работают те, кто в яблочную разработку вкатились в 16 году с курсов и от Objective-C и у их будет медвежья болезнь. (А мне нравится Objective-C)
5. По-хорошему и то и другое нужно делать, но в тестовом задании позволительно какие-то моменты в юзабилити сделать скорее практично, чем юзабельно. Черновик. Иначе можно еще пару дней и дальше прокудахтать над тестовым.

Вопрос не в том, нужно или не нужно делать ошибки, а в том, что они их ищут. Это означает, что задача проверялась с точки зрения продукта, а не кода. Очевидный красный флаг. Задачу, выполнение которой никого не интересует, могут даже не запускать ни разу ну или запустить, чтобы убедиться, что она билдится без ошибок компиляции

Откуда такой вывод? Задача проверялась тестером и код смотрел ревьюер? Наоборот, говорит о том, что они качественно подошли к проверке задания.

Нет. Это говорит о том, что их интересовало, будет ли задача работать с точки зрения пользователя. Никто в здравом уме не будет давать тестировщику задачи, не требующие верификации. Задача тестового задания — верификация навыков кодирования кандидата, а не выполненный кусок работы.

Никто в здравом уме не будет давать тестировщику задачи, не требующие верификации.

Это утверждение на чем основано? Может они хотят проверить как команде будет работать с результатами труда автора? Или ты считаешь что эту поделку им заказали и они решили заработать на соискателе, лол?

в чем ценность этого приложения? к тому же там свифт был указан, значит основная работа по iOS разработке в компании осуществляется на этом языке.

Я не знаю. Но зачем проверять приложение, не имеющее ценности, блекбоксом? Это не имеет смысла, перевод времени тестировщика и, соответственно, денег конторы.
Тестировщику дают только те задачи, которые необходимо показать заказчику.

Ну вообще нешифрованный пароль это секьюрити проблема, и я бы не хотел дева в команде который по умолчанию на это забивает пока не скажут, где и как не забивать . Конечно джуну это простительно

Вопрос не в допущенных ошибках, а в постановке задачи и методиках её проверки. 1..2 красных флага — ну, бывает. 3 и больше с высокой вероятностью указывают на попытку решить свои задачи за счет кандидата.

ну вообще то 1 не красный флаг тоже — у нас на фирме тестовое задание сделать production ready restful server которые должен позволять создавать/просматривать 2 типа сущности, где вторая связанная с первой. и мы как раз смотрим на то как все сделанно о чем позаботился разраб (есть ли документация минимальная, сваггер и другое), ибо никто никогда не получает детальной ТЗ которое на тех уровне описывает как что делать

Первый раз слышу, чтобы в анализе тестового задания принимал участие QA.
Я, кстати, далек от мысли, что все участники процесса уверены в том, что занимаются тестовым заданием. И тестер, и код-ревьювер, и HR. Не бывает так, чтобы о такой схеме знал лишь один менеджер. И все эти люди живут рядом с нами и прикидываются разработчиками. Также как и те, кто пилил в Киеве азино три топора, рассказывая нам, что создают игрушки.

Время плавно подбирается к обеду.

Ждём в теме представителя компании из отдела пиара и маркетинга, который в позитивно-приторном тоне расскажет, что тестовое задание было и сделано неправильно, и составлено неправильно и все друг друга недопоняли.
Затем под конец проповеди поблагодарит автора за обратную связь, ведь именно она «помогает делать процессы нашей компании ещё лучше!»

ведь именно она "помогает делать процессы нашей компании ещё лучше...

..., а наш ЧС ще товще...

Хоча... кого хвилює наявність ЧС у контори, яка сує всім тестові.

Да:) Это как личный блокнот ненависти волосатой феминистки с записями по типу «50 типов мальчиков, с которыми ни за что не стану встречаться»

do it software

это что-то вроде ООО «Вектор»

A simple sign-in/sign-up form (save token for further using); — как раз токен можно сохранить в keychain, явно не в NSUserDefaults и не в базе — на джейлбрейкнутом устройстве туда легко забраться.

Видели в GameCenter в играх рекорды по 2^32 — 1 в первой десятке? Вот то-то и оно.

Вибачте, я не зберігав токен у

NSUserDefaults

Ну если честно, то на джейлбрейкнутом устройстве можно и в кейчейн залезть, и через https токен перехватить.

Токен перехватили, пароль шифрувати сенсу не має.
Логічно :)

Еще можно стырить из бэкапов в айтюнсе. (если они не шифрованы)

як на мене валідація та сейв паролю — це маст хев, це те, що відрізняє якісне від неякісного і показує твоє відношення до задачі/продукту. Зараз сервіс/додаток може будьякий школяр налабати за вечір, так, щоб воно працювало, навіть використати десяток патернів. Але даний приклад показує твоє відношення до задачі. Я би радив прислухатись і спробувати ще.

про критерії ніяк не можна здогадатись, бо вони не зазначені.

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

dou.ua/...​_campaign=comment#1521590

Який алгоритм необхідно використовувати, щоб зашифрувати пароль?

Який алгоритм необхідно використовувати, щоб зашифрувати пароль?

Замена символа в текстбоксе звездочкой?

:)

Точно?

А де це написано в специфікації?

Как-то вопросы не в том порядке у вас)

Ну даже если не указано, это уже стандарт и я думаю когда они написали

A simple sign in form

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

Я відповім так:
на фоні того, що в специфікації було пропущено цілий екран, помилки з назвами кнопок та передача генерування ідентифікатора запису БД на клієнт — гадаю відсутність маски для поля з паролем вже не суттево :)

А де це написано в специфікації?

это вопрос из разряд «а где в задаче написано, что нужно пользоваться java code conventions при написании java кода?»

для цього є різні підходи — bcrypt with salt як початкова точка
можете в мд5 — тоді буде питання на співбесіді, чому це погано (що сам по собі факт такого питання є позитивним)

а де в специфікації можна прочитати про необхідність застосування саме цих алгоритмів?

Если бы там писали про каждый алгоритм что нужно использовать, тогда зачем вы им вообще нужны?

Знову таки «піди туди не знаю куди, принеси то не знаю що».

Чому Ви переконані що треба використовувати саме запропоновані Вами алгоритми?

В специфікації про них нічого не сказано.

Містер Адам
Бекенд для мобайлу відносить ся до типу:
Різні види клієнтів для одного серверу — саме це є ключовою відмінністю від інтеграції вебсервісу для вебу, де одна аплікація адаптується до різних броузерів.
Отже:
Шифрування паролю для передачу сторьонньому сервісу має бути описане в специфікації

«Пароль не зашифрований»
Ця вимога відсутня в специфікації.

Да правильно они в этом месте фыркнули, кмк.
В реальной работе сплошь и рядом при постановке задачи предполагается некоторый уровень компетенций и здравого смысла исполнителя, никто не выписывает до запятой спецификации к каждой задаче (может и к сожалению, но это жиза), так что некоторая неполнота требований в тестовой задаче — не более чем хорошая аппроксимация реальности. Как минимум, если уж поленился делать правильно, нужно было хотя-бы коммент оставить в стиле «так делать низя, правильно бы так-то и так-то, но этого не было в ТЗ»...

От Вам про апроксімацію

dou.ua/...​_campaign=comment#1521590

Який алогритм необхідно використовувати, щоб зашифрувати пароль?

Який алогритм необхідно використовувати, щоб зашифрувати пароль?

І що далі?

Чи Ви теж вважаєте, що зірочки для приховування паролю є тотожним шифруванню?

Чи Ви теж вважаєте, що зірочки для приховування паролю є тотожним шифруванню?

Нет. Но вы же уже признали, что факап был. Тогда о чем этот спор?

Я додовжу тезу, що «вимога стосовно шифрування не була визначена в специфікації».

Деякі коментатори вважають, що приховування паролю зірочками тотожне шифруванню.

А що доводите Ви?

Захешированный пароль это маст хев, будь самокритичнее

А чи біло хешування зазначено в специфікації? Який вираз використовувати у якості солі? Давайте дивитись комплексно.У користувача може бути і Андроїд девайс, паролі навіть хешовані мають співпасти на бекенді......

Вспоминается случай из жизни когда правили пагинацию на сайте и в итоге после перехода на след. страницу пагинации — пользователь оставался в футере, его не прокручивало к первому экрану. Аргументировал дев точно также — вы не описали это в ТЗ. Ничего не напоминает?

Так и с вами — вам нужно объяснять и не только объяснять но и доказывать, убеждать что валидация полей, шифрование паролей — должны присутствовать по дефолту.

Какое шифрование использовать — вы взрослый человек или ребёнок? Реально не придумали как решить этот вопрос? Ни единого варианта не пришло в голову?

Вам не очевидно, что в тестовом задании можно было использовать любое шифрование? А потом просто дописать в комменте пояснение мол использовал вот такое для примера. А в реальном пр-те это решается за 3 секунды 1 вопросом.

Вполне допускаю что тестовое было с жуткими огрехами, не проработанное и противоречивое, а ваш код норм.

Но, одного вашего отношения к тестовому достаточно чтобы вас не нанимать. Посмотрите на ситуацию со стороны пма\ба\продакта — зачем им такой дев которому нужно до запятой разжевывать, доказывать что-то про стандарты и дефолтные моменты если можно найти такого которому это всё объяснять не надо. Это даже не софт скилз, это просто найти не по*уиста и не балбеса.

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

Враховуючи, що додаток робився для Айос та Андроїд, треба врахувати наперед, що користувач може мати аккаунт на 2 девайси, тому шифрування логіна, паролю тощо повинно бути однаково реалізовано на обох платформах.

Отже, це повинно бути зазначено в специфікації.

Ось було колись тестове завдання на безпеку:
github.com/redcapua/blackbox

Кодилось на швидкість під пильним наглядом СТО через тімвьюєр.

Що замовили, то і получили :)

Кодилось на швидкість під пильним наглядом СТО через тімвьюєр.

Что за чушь? Четыре дня сидел что ли? Делать ему больше нефиг? Ты точно не придумал эту историю про тестовое чтобы всех тут потролить?

А то очень похоже на топик по самодескредитации.

Під наглядом СТО кодилась ця задача

Ось було колись тестове завдання на безпеку:
github.com/redcapua/blackbox

Шифрование и валидация полей это стандарт. Это нужно делать всегда и это не нужно явно указывать в ТЗ.

Как решается проблема с выбором типа шифрования для тестового — описал выше.

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

да там шифрование не нужно было он просто озалупился на том что поле ввода для пароля не закрыл точками, в Xcode это делается элементарно включением одной галочки.

Який вираз використовувати у якості солі?

marsWeather.get()

А що так можна було? :)

Я додовжу тезу, що "вимога стосовно шифрування не була визначена в специфікації".

Тестер почти наверняка имел в виду просто маскировку пароля в поле ввода, и а) вы это понимаете, и б) знаете что вы этого не сделали. Если вы считаете, что отсутствие указания об этом в ТЗ вас как-то оправдывает, то возникает следующий вопрос: а нафига тогда им нанимать вас — аж целого лида с лычками и наверняка пропорциональными пожеланиями по зарплате — если вам задачи нужно ставить так же, как любому джуну — то есть разжевывая все до каких-то совершенно уже капитанских деталей реализации?

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

Є така річ, яка називається «Мова професійного спілкування», отже якщо тестер вважає, що приховування паролю зірочками повинно називатись шифрування... ну що, можливо з Вами йому було б комфортно, а Вам з ним :)

На превеликий жаль, я звик до іншого стилю взаємодії в команді.

На превеликий жаль, я звик до іншого стилю взаємодії в команді.

Стиль называется «этого не было в ТЗ — не мои проблемы, а во всем виноват тестер потому что языком проф. общения не владеет»?

Давайте не будемо пересмикувати :)

Глибоко переконаний, що Ви все розумієте правильно :)

якщо тестер вважає, що приховування паролю зірочками повинно називатись шифрування

ЧСВ-метр зашкаливает.

Будем честными — да оправдывает. :)

разница в том, что джун поймет, что он стратил и быстро перепилит по правильному. А лид начнет всем доказывать, что он прав потому что требование явно не описано и для реализации нужен отдельный фича реквест на пять стори поинтов, который мы может быть возьмем в следующий спринт

Тем не менее, пятёрочка за топик в пятницу!

Тестовое задание служит не ради оценки самого задания, а ради вопросов, которые ты должен задавать по ходу его выполнения.
Например — каким образом валидировать email и как лучше шифровать пароль?

Порой один вопрос, который правильно задан, избавит тебя от тестового задания вообще.

Конкретно эти вопросы, кандидат уровня middle+ должен сам решить, а если хранит plain password или спрашивает как валидировать email, то это тоже звоночек.

Да, можно понапридумывать разного и про подтверждение email’а с 2-х факторной авторизацией, но если этого не описано, то такие сложности делать необязательно, но самые базовые механизмы нужно то самому знать и сделать.