Кар'єра в IT: посаду Software Architect

Дана стаття - друга із серії «Кар'єра в IT » , в кожному випуску якої ми розглядаємо одну з посад у сфері розробки ПЗ. Перший матеріал серії був присвячений позиції Team Lead , роль якого полягає в поєднанні управлінських та технічних обов'язків. У цій частині ми обговоримо вищу сходинку безпосередньо програмістської кар'єри в IT - Software Architect .

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

За статистикою ДОУ , середньому українському архітектору 30 років , він має 9 -річний досвід роботи і отримує $ 4000 .

Завдання та обов'язки

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

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

В обов'язки архітектора входить:
- Проектування системи на основі вимог замовника;
- Визначення архітектури додатку або її еволюції ;
- Вибір технології для кожної ланки системи; - Вибір способів взаємодії між компонентами системи;
- Створення робочого прототипу ;
- Дизайн інтерфейсів і компонентів додатка ;
- Підбір або проектування фреймворків ;
- Аналіз та виправлення проблем продуктивності;
- Архітектурне рев'ю бізнес-вимог ;
- Рев'ю коду та дизайну при великих змінах ;
- Рефакторинг коду;
- Написання та підтримка стандартів кодування , каталогів проектних патернів і антіпаттернов ;
- Документування всіх архітектурних рішень , постійне оновлення документації ;
- Ризик - менеджмент ;
- Координування архітектури протягом наступного життєвого циклу ПЗ;
- Навчання та консультування програмістів.

«Архітектор ПО нічим не відрізняються від інших Архітекторів , які будують мости або будинку. Додаток - це теж будову: йому потрібен правильний фундамент і сильні рішення . Стоячи під мостом під час перевірки навантаженням , потрібно бути впевненим , що він не впаде ».

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

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

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

«Без знання предметної області ти залишаєшся на рівні сеньйора. Чим більше ти розумієш мова бізнесу , тим ти цінніше ».

Ще одна особливість посади архітектора пов'язана з необхідністю шукати компроміси. У кожному проекті фігурує велика кількість зацікавлених осіб ( стейкхолдерів ) :
- Замовник - зацікавлений у вирішенні проблеми , в мінімізації вартості рішення , в одноманітності всіх технічних рішень , простоті їх використання і підтримки ;
- Топ - менеджмент - в максимізації прибутку;
- Менеджмент проекту - у своєчасному і якісному виконанні проекту;
- Члени проектної команди всіх ролей і спеціальностей - у цікавій , комфортній роботі , відсутності тиску , використанні зручних і сучасних інструментів і технологій.

У кожного з них є свої інтереси в даному проекті , і кожен надає свої вимоги , побажання , обмеження. Крім цього, кожен розмовляє своєю мовою ( технічному або мовою бізнесу) , кожен розуміє і сприймає аргументи зі своєї області і не розуміє чужих. Архітекторові необхідно збирати загальну картину вимог і органичений всіх стейкхолдерів , з'єднувати їх знання та інтереси , забезпечувати ефективну комунікацію між ними , виробляти рішення , що дозволяють оптимальним чином задовольнити максимальну кількість вимог кожного.

«Уміння вибрати оптимальне рішення замість кращого - ось основне завдання архітектора ».

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

« Я займаюся не стільки реалізацією конкретних фіч гри, скільки придумуванням того , як вони повинні бути реалізовані взагалі і яким буде їх взаємодію один з одним. Наприклад , при розробці гри від мене потрібно вибрати технології реалізації клієнта і сервера , вибрати спосіб комунікації між ними , визначитися, які операції слід реалізувати на клієнті , а які - на сервері , і як все це буде зберігатися в базі. У мої обов'язки входить робота над движком гри - як реалізувати це все , щоб воно було легко переносимо і працювало якомога швидше. Припустимо , наша нова гра дає всього лише 4-5 FPS на першому iPad . У всьому винен рендер , який повинен відсортувати і намалювати безліч об'єктів . Моє завдання : придумати більш продуктивний алгоритм і реалізувати його . Завдання програмістів : прикрутити його до конкретних проектів ».

Типовий робочий день архітетора предпологает :
- участь в груповому плануванні , мітингах , нарадах із замовником ;
- консультування команди з поточних питань ;
- проектування та написання технічної документації ;
- вивчення нових технологій;
- робота з кодом проекту , прототипування , оптимізація , рефакторінг .

«Завжди потрібно бути готовим до перемикання між завданнями - це норма для архітектора ».

Переваги і недоліки

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

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

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

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

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

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

« Праця архітектора іноді менш помітний користувачами і менеджерами , ніж праця розробника. Останній додав кнопку - користувач радий , так як давно її чекав. Архітектор зробив рефакторінг - програмісти сказали " ОК " . Менше відгуків від кінцевих користувачів ».

Як стати архітектором і куди йти далі?

Посада архітектора є наступним етапом розвитку Senior/Lead- інженера , який не хоче йти в менеджмент і віддалятися від технічних завдань.

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

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

З технічних знань: необхідно розбиратися в алгоритмах та їх складнощах , бути в курсі доступних платформ і технологій та знати їх переваги і недоліки.

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

Згідно з даними IASA , результати опитування , в ході якого архітекторів з усього світу просили оцінити важливість того чи іншого якості/вміння в успішній роботі , виглядають наступним чином :

Найважливіші якості/навички за категоріями ( за спаданням ):

Human Dynamics :
- Collaboration and Negotiation
- Presentation Skill
- Leadership and Management

IT Environment :
- Platforms and Frameworks
- Application Development
- General IT Skills

Business Technology Strategy :
- Technology Strategy Development
- Requirements Discovery and Constraints Analysis
- Business Fundamentals

Design Skills :
- Architectural Description
- Design Analysis and Testing
- Decomposition and Reuse
- Design Methodologies and Processes

Quality Attributes :
- Reliability , Availability , Scalability
- Extensibility and Flexibility
- Security

«Бути архітектором - це працювати , а не просто відпрацьовувати одержувану зп ».

« Програміст стає програмістом не тоді , коли починає писати працюючий код , а коли починає думати як програміст . Це просто склад розуму і характеру - або ти мислиш як архітектор (або програміст ) , або ні ».

Практичні поради:

«Потрібно побільше працювати над своїми проектами у вільний час . Єдиний спосіб стати архітектором - почати створювати архітектури. З часом почне виходити. Ще через час почне виходити добре . Коли у тебе вже готове 90 % проекту , а ти раптово усвідомлюєш , що реалізація решти десяти займе більше часу і породить купу милиць , і це простіше переписати заново , чим закінчити , то в майбутньому будеш вже продумувати все наперед. Правда тут теж варто міру знати . Бажаючи зробити все ідеально , можна і зовсім жодного проекту не доробити ».

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

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

Перспективи кар'єрного розвитку архітектора мають 2 ракурсу : або поглиблення в технічну частину і розвиток « від маленьких систем до enterprise та управління космічними кораблями в масштабах всесвіту » , або перехід в менеджмент на позицію СТО абоVP of Engineering . Фактично архітектор - це фінальний етап технічного кар'єрного зростання.

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

З точки зору професійного зростання можна виділити наступні напрямки:
- Зростання в розмірі та складності вирішуваних проблем;
- Розвиток в « ширину » - вивчення більшої кількості технологій , процесів і методологій , інструментів , архітектурних підходів ;
- Розвиток знань в предметній області - « Людей , які можуть кодіть у світі технологічних компаній - ставок гати , і їх не цінують. А ті , хто може кодіть в біології , медицині , політиці , соціології , фізики, історії , математики - шановні люди , здатні робити дивовижні речі для розвитку своїх дисциплін ». ( Zed . A. Shaw )

« Про перспективи цієї професії на ринку України можу сказати , що для Software Architect все тільки починається. Судячи з досвіду попередніх років, ще 5 років тому ніхто навіть не здогадувався , що така професія є. Але ще 7 років тому ніхто в Україні не розумів , навіщо потрібно платити за інтернет ресурси та їх розробку - як можна заплатити за те , що не можна помацати ? Точно так само і з архітекторами ».

P.S. Окреме спасибі за допомогу в написання статті Максиму Ковтуну і 18 іншим українським архітекторам , які поділилися з DOU таїнствами своєї професії. Наведені в статті цитати взяті з їхніх розповідей .

Опубліковано: 25/11/13 @ 08:11
Розділ Різне

Рекомендуємо:

11 грудня , Київ - Law & Accounting crash test - а у Вас все правильно в бухобліку та фінансах ?
Бесіда з Ольгою Павлової , CEO "Собака Павлова "
Пастка аутсорсингу : чому так складно перейти від сервісу до продукту
10 грудня , Київ - Друга зустріч Клубу HR- ентузіастів IT -спільноти
Дайджест цікавих вакансій № 113