Junior, Middle и Senior програмист - какво трябва да умее всеки от тях?

28 март
Junior, Middle и Senior програмист - какво трябва да умее всеки от тях?

Всички сме чували за junior, middle и senior програмисти, но какво точно се крие зад уменията на едните и другите? Ако за повечето ИТ специалисти, които са от доста време в бранша, това е съвсем ясно, то за начинаещите тази статия би дала известна яснота. Повече относно йерархията в професията „програмист“, както и за нужните умения, познания и опит, необходими, за да се премине към следващото ниво, разказва Александър Демура, ръководител на развойния център на DataArt в Одеса:

„Разбира се, едва ли има универсално и стриктно правило, свързано с това какво точно се крие зад понятия като junior, middle и senior програмист, което да е валидно навсякъде по света. Но все пак са налице някои общовалидни тенденции, които важат, както за нашата компания, така и за ИТ бранша като цяло. Ето кои са те:

Стажант-програмист

Немалка част от програмистите започват работа именно като стажанти. При стажантските позиции е налице много по-голямо разнообразие от изисквания, тъй като всяка компания определя различна политиката за подбор. Например, ние в DataArt наемаме стажанти на платен стаж, без да поставяме изискване за наличие на професионален опит в ИТ сектора. По-важна за нас е мотивацията на кандидатите и наличието на основни теоретични познания, това да имат интерес към тематиката, да са способни да я усвояват. В продължение на няколко месеца те се учат под ръководството на опитен ментор.

Едно от важните условия за започване на стаж при нас е владеенето на добро ниво на английски език, тъй като повечето ни клиенти са позиционирани е САЩ и в Западна Европа. Независимо дали работите в офиса ни в България, в Аржентина, в Украйна или в Полша, английският език е от изключително значение, както за senior разработчиците, така и за стажантите, които наемаме.

Ако потенциалният стажант иска да се развива в конкретен програмен език – например в .NET, но не може да обясни какво е значението на CLR, защо знакът "равно" се отличава от "==" или да създаде един съвсем прост алгоритъм, тогава шансовете са почти нищожни. Да се започне стаж с нулеви знания и с надеждата, че всичко ще бъде усвоено в движение и с лекота, не е добра стратегия. Много от кандидатите за стажанти преди това са преминали няколко професионални курса, могат лесно да отговорят на теоретични въпроси и дори имат известен опит в програмирането. Съвсем логично е те да имат преднина пред останалите.

Junior програмист

След преминаването на стажантската програма, идва следващото junior ниво. Основното изискване при нас в DataArt, което смятам, че е валидно и в останалите ИТ компании, е да е налице способност за самостоятелно изпълняване на техническите задачи. Всеки проект има съответната архитектура, а за junior програмиста е важно да умее да разбира логиката й. Съвсем нормално е той да допуска грешки, да не разбира някои неща, да задава въпроси относно имплементирането или да поиска проверка на кода от по-опитен колега.

За един junior програмист следва да са налице три важни качества:

  1. Желание да се развива и да дообогатява познанията си (и да се учи от грешките си!)
  2. Упоритост и отдаденост
  3. Способност да приема критики и да се вслушва в наставленията

Добре е да се знае, че една задача, която senior разработчик би могъл да разреши за 10 минути, може да отнеме за junior специалист цял час, както и много усилия. Това е съвсем нормално, важното е да се намери баланса между желанието за самостоятелно разрешаване на задачата и нуждата от това да се потърси помощ. Понякога е по-добре да попита, вместо да си блъска главата в стената, а друг път е важно да не се отказва и да потърси решението сам.

Middle програмист

Основните изисквания за разработчика от т. нар. middle ново е да може да изпълнява задачите си самостоятелно. Да, наистина – това вече го прочетохте в предишното описание, касаещо junior специалиста. Но тук има една съществена разлика  - отсъствието на думата „технически“. Това означава, че разработчикът вече е преминал на по-високо ниво и трябва да разбира бизнес изискванията на съответния проект и да може да ги превърне в технически решения.

Ключовите умения: 

  1. Мiddle програмистът разбира какво точно прави съответното приложение. Това изисква по-задълбочено вникване в задачата и повече точност при изпълнението й. Ако заданието не описва напълно различните сценарии, добрият програмист ще обърне внимание на детайлите по време на етапа на планиране, а не когато апликацията започне да дава грешки след някое по-различно и непредвидено потребителско действие.
  2. Той е запознат със стандартните шаблони и решения при изграждането на приложение, разбира защо са необходими и знае как да ги прилага. Стандартизацията на решения е от голямо значение за колективното развитие на кода, тъй като позволява на друг човек от екипа бързо да разбере за какво става дума и да сведе до минимум броя на грешките.
  3. Middle програмистът трябва да може ефективно да си взаимодейства с останалите членове на екипа. Например - да обсъди дадена трудност с дизайнера, да си изясни съответните изисквания с бизнес анализатора и т.н.

Senior програмист

Senior програмистът вече предполага различно ниво на познания и умения. Той има богат опит с писането на код, през годините се е сблъсквал с множество грешки в създаването му и е съумял да научи много от тях. Важно умение, което трябва да притежава senior разработчикът е да може да взима правилните технологични решения, свързани с проекта.  "Правилни решения" означава те да носят максимални ползи за бизнеса и да минимизират разходите. Добрият senior разработчик не само разбира какво правят отделните членове на екипа, но и е наясно с това какви задачи трябва да може да изпълнява съответното приложение, когато е завършено.

Ключови умения:

  1. Senior програмистите мислят предварително за затрудненията в системата и възможността за мащабиране, запомнят уязвимостите и проблемите, причинени от неправилното използване на съответните инструменти.
  2. Такъв експерт прави нещо много съществено – решава проблеми, още преди дори да са възникнали. А това е важно, тъй като, ако даден проект живее от проблем до проблем и непрекъснато трябва да пренаписвате парчета код, това е сигурен симптом, че този проект няма достатъчно добър senior специалист.
  3. Ние от DataArt считаме, че статутът на senior не може да бъде постигнат бързо. Необходимо е да се придобие богат опит и да се разбере какво отличава добре направения код от посредствения. Необходимо е също умение да се вземат важни решения самостоятелно.
  4. Тази позиция изисква добри комуникативни умения, тъй като senior програмистът не само трябва да предложи правилното решение, но и да убеди клиента и екипа да се съгласят с него. Не е достатъчно просто да знаете как трябва да се правят нещата, но също така трябва да можете да ги обясните разбираемо. Тогава екипът се разраства бързо и натрупва опит, като се избягват болезнени грешки. Авторитарният подход ("направете каквото казвам") често води до конфликти и затрудняване на работата.
  5. Един старши програмист не може да работи, без да разбере съответните библиотеки и фреймуирк. Ако инструментът за разработка за него е "черна кутия" и ако създава приложение от отделни части, без да знае какво прави всяка от тях, продуктът винаги ще бъде нестабилен и непредсказуем.

Кое е следващото ниво?

Ще започна с развенчаването на един популярен мит - че senior програмистите стават мениджъри на проекти като следваща стъпка в кариерата. Всъщност - преходът към project мениджър не е стъпка нагоре по стълбата, а в страни от нея, поемане на различен път. Целият опит, натрупан в продължение на много години работа като програмист, всъщност се превръща в поемане на нова роля, защото трябва да работите не с код, а с хора и планове.

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

В такъв случай как трябва да се развиват senior специалистите в йерархията и кое е следващото ниво? Много програмисти обичат да говорят за "тавана", т.е. когато заплащането им се доближава до заплатеното от клиента за съответната услуга с минимален марж. Те считат, че в този случай по-нататъшното израстване на специалиста става нецелесъобразно за работодателя. Това обаче не винаги е така. Позицията на старши разработчик не трябва да се разглежда като таван в кариерата, а като трамплин за по-нататъшно развитие.

Ще дам пример с някои области, в които при нас в DataArt най-често се развиват програмистите с богат опит, решили да преминат на едно ново и по-различно ниво:

Технически експерт

Статутът на технически експерт предполага задълбочено познаване на определена област. Например, можете да сте експерт в Azure / AWS и да сте запознати с различните услуги, които тези платформи предлагат. Трябва да сте в състояние да направите машинно обучение или компютърна визия, да знаете всичко за уязвимостите в мрежата, да разберете как работят криптовалутите или да подготвите правилно Sharepoint. Такива задачи не се случват всеки ден, но когато се появят, тогава е време да включим експерта. Без него подобни проекти просто биха били невъзможни и компанията често е склонна да плаща допълнително за уникални знания.

Индустриален експерт

При нас в DataArt проектите ни са разделени по индустрии (здравеопазване, медии, финанси, туристически сектор и т.н.). Във всеки проект програмистите не само придобиват технически познания, но също така получават възможност да се запознаят с бизнеса на клиента, да разберат как работи индустрията и да научат за проблеми и решения, специфични за тази област. Какво е нужно, за да се разработи платежна система, подобна на PayPal? Защо е необходима системата Sabre? Какво представлява HIPAA и какви ограничения поставя върху разработването на решения за здравеопазването в САЩ? Хората, които притежават този тип знания, често формират гръбнака на проекта и носят огромни допълнителни ползи за компанията и клиента. Следователно, тяхната компенсация може да надхвърли външната ставка, тъй като самите компании са готови да плащат допълнително за такива специалисти.

Ръководител на екипа (Team leader)

Ролята на ръководителя на проекта е доста по-разбираема, така че едва ли има нужда да бъде обяснявана подробно. Важно е да се знае, че тя изисква комбинация от технически грамотни решения с процеси за развитие на качеството. Тяхната правилна комбинация означава по-голяма полза за клиента за същите пари, както и по-малък шанс за грешки.

Архитект

Даден проект може да изисква архитект по хиляди различни причини. Той трябва да притежава разбиране за бизнеса на клиента, способност да анализира сложни технически системи и след това да предаде това разбиране на клиента и разработчиците. Освен това, архитектът трябва да има широка поглед по отношение на наличните платформи и компоненти на пазара, от които може да се синтезира решението. За архитекта понятия като "microservices", "cloud", и т.н. не са просто модерни тенденции, а ясно проверени технологични решения, които дават строго определени предимства и налагат съответните ограничения.