Skip to content

Instantly share code, notes, and snippets.

@nikitafomin
Last active August 7, 2020 16:54
Show Gist options
  • Save nikitafomin/0d650399a78eb2571305 to your computer and use it in GitHub Desktop.
Save nikitafomin/0d650399a78eb2571305 to your computer and use it in GitHub Desktop.
iOS developer skills

##junior developer

  • знает основы программирования на Objective C (Swift)
  • программирует в Xcode
  • знает основы git
  • читал Mobile Human Interface Guidelines
  • знает и использует базовые паттерны (MVC, делегаты, нотификейшены)
  • знает что такое протоколы, делегаты, категории
  • знает и использует основные элементы интерфейса (UIWindow, UIView, UINavigationBar, UIToolbar, UITabBarController)
  • знает жизненный цикл UIView в UIViewController'е
  • знает жизненный цикл приложения

##middle developer

  • хорошо знает Objective C (Swift)
  • хорошо разбирается в Xcode
  • хорошо разбирается в git
  • уверенно пользуется терминалом
  • использует Cocoapods
  • знает и использовал большенство элементов интерфейса
  • знает что такое Rest API
  • использует Core Data вместе с MagicalRecord и Mogenerator
  • использует для запросов к серверу AFNetworking
  • использует SDWebImage
  • знает GCD
  • использует Storyboards, Autolayout, Size Classes
  • умеет создавать сертификаты разработчика, провижен профайлы
  • умеет настраивать пушнотификации
  • умеет настраивать инапы
  • может выложить приложение в аппстор
  • умеет архивировать проект и создавать .ipa файл
  • знаком с сервисами дистрибуции приложений
  • способен самостоятельно решать поставленные задачи

##senior developer

  • отлично знает Objective C (Swift)
  • отлично разбирается в Xcode
  • знает Objective-C Runtime
  • пишет тесты используя TDD/BDD
  • использует OCMock при написании тестов
  • может настроить Travis-CI
  • пишет скрипты на bash
  • знает основы java script, HTML
  • умеет ставить задачи в проекте, четко их формулировать
  • умеет объяснить технические детали неспециалистам (менеджерам, заказчикам)
  • умеет объяснить какие требуются ендпоинты для приложения
  • быстро осваивает новые незнамомые технологии
  • быстро разбирается в чужем коде
  • следит за чистотой кода в проекте
  • знает следующиме фреймворки - AFNetworking, MagicalRecord, SDWebImage, SSKeychain, SVProgressHUD, BlocksKit, Reachability, RestKit, ReactiveCocoa, Mantle, NSData+Base64, MKStoreKit и др.

##lead developer

  • может организовать работу команды в проекте
  • отвечает за проект в котором работает
  • может составить план работ в проекте и оценить по времени
  • следит за новыми технологиями в мобильной разработке
  • внедряет новые технологии в проектах
  • делает презентации по новым технологиям
@kruperfone
Copy link

программирует в Xcode - какой-то лишний пункт, он и так программировать в нем должен
CI, возможно, лучше перекинуть в lead
внедряет новые технологии в проектах - по мне лучше в senior, как и "следит за новыми технологиями в мобильной разработке"

Насчет тестов: TDD/BDD я бы понял, если бы у нас был поставлен такой workflow, а пока мы вообще не уверены, стоит ли использовать TDD в iOS разработке, насколько я понимаю.
Еще может имеет смысл добавить конкретно использование KIF-тестов

У лида нет никаких "технических" пунктов. Может надо что-то из senior перекинуть, может дописать еще что

@vladimirgoncharov
Copy link

Я бы посоветовал конкретно описать либо немного подкорректировать, что мы подразумеваем под выражениями вроде: знает основы git, хорошо разбирается в git, хорошо разбирается в Xcode, знает основы программирования на Objective C (Swift), хорошо знает Objective C (Swift) и т.п.
К примеру можно описать так:

  • знает основы программирования на Objective C (Swift) - знание и умение работать с основными скалярными (int, float, bool и т.п.) и структурированными типами данных (NSString, NSNumber, NSArray, NSSet, NSDate и т.п.)
  • знает основы git (создание git репозитарий, создание новых branches, commits, pull request и решение конфликтов) и т.д.
    Я думаю, что в описании нужно смотреть ни как на требования, а как на список целей.

Еще бы объединил 2 строки:

  • знает и использует базовые паттерны (MVC, делегаты, нотификейшены)
  • знает что такое протоколы, делегаты, категории
    в одну:
  • знает и использует базовые паттерны (MVC, delegate, notifications, adapter(если не ошибаюсь, это правильное название для протоколов), categories).

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

Для middle добавить:

  • после знает GCD добавить знает NSOperationQueue и NSOperation
  • умение работать с сторонними сервисами (Fabric, Crashlytics)

Для senior можно:

  • переименовать умеет объяснить какие требуются ендпоинты для приложения на умеет составлять требования для backend API
  • переименовать быстро осваивает новые незнакомые технологии на интересуется и быстро осваивает новые технологии (ну или по крайней мере исправить ошибку )
  • переименовать быстро разбирается в чужом коде на легко разбирается в чужом коде (или тоже исправить ошибку).
  • нужно ли "следит за чистотой кода в проекте" ? Если да, то к этому с малых лет надо приучать :)
  • перенести из lead может составить план работ в проекте и оценить по времени

Для lead соглашусь с Сергеем, что надо добавить больше пунктов, так как из 6 текущих пунктов в принципе 4 касаются остальных также.

@nikitafomin
Copy link
Author

А я думаю, что к моменту, когда становишься лидом уже должен отлично программировать. Т.е. лид и сеньер на одном уровне в плане программирования. Просто у лида более административная роль. Больше организаторских обязанностей.
Я имею ввиду, что когда переходишь из сеньера в лиды ты уже все про программирование должен знать. И сервисы должен уметь настраивать.

@nikitafomin
Copy link
Author

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment