23 августа 2010 г.



Путь джедая - эпизод 4, Новая надежда

Дисклэймер: не претендую на оригинальность, универсальность и премию Оскар. Думаю, что мои рассказы смогут стать интересными как новичкам, так и более опытным разработчикам. Первые найдут здесь полезный опыт и (надеюсь!) полезные советы, вторые - смогут поностальгировать о давно прошедших временах. 

И не волнуйтесь - никто не перейдет на темную сторону, не смотря на то, что временами их печеньки выглядят очень и очень аппетитно:)

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

Что обычно происходит с новым разработчиком на проекте?

Итак, вариантов несколько:
  • Проект старый и уже находится в стадии поддержки (или близок к ней). Все основные баталии разработки уже позади. Новичку достаются груды документации и, возможно, опытный аксакал для терроризирования его (аксакала) разнообразными вопросами. Кроме этого, новичку достаются все малоинтересные и/или сложные нерешенные проблемы проекта. Я на таком проекте побывал, поэтому подробности пока опустим, когда-нибудь я об этом расскажу. Мой новый проект - не такой.
  • Проект новый и все еще только начинается. По моему мнению, это просто рай для разработчика. Основные концепции и правила еще не введены или не устоялись. Есть возможность повлиять на решения, которые будут определять жизнь команды и способы ее работы над проектом. Можно протолкнуть на всеобщее обсуждение новую фишечку или технологию, о которой пять минут назад прочитал на Хабре или сделал сам. Конечно, придется знакомиться и общаться с новыми людьми, а ведь мы, айтишники, очень этого не любим (по крайней мере, так гласят легенды). Но, так или иначе, эти проблемы будут решены. В любом случае, мой новый проект - не такой.
  • Проект уже начался и разработка уже ведется. Мой проект - именно такой. Забегая вперед, скажу, что по всем рекомендациям и советам в литературе по управлению проектами такой ситуации лучше не допускать. Достаточно вспомнить закон Брукса. Пускай в реальной жизни все несколько сложнее, но, в целом, я с ним согласен.
Итак, я на новом проекте. Разработка уже идет, основные концепции приняты. Команда, слава богу, небольшая, да и все работаем в одной компании - друг друга знаем. Внутренний голос подсказывает, что чтобы начать приносить пользу проекту, нужно каким-то образом получить информацию. Вообще замечу, что если разработчик не чувствует, что делает что-либо полезное, его мотивация сильно падает.

Вот тут начинается самое интересное. Проект еще не достиг той стадии, когда по документации можно разобраться что и как. В моем случае единственная документация, которая была в наличии - это высокуровневые описания, предназначенные, в основном, для заказчика. Она, безусловно, нужна чтобы понять предметную область и представлять себе основные задачи и проблемы бизнеса. Но для начала работы программиста ее явно маловато.

Ну что же, раз документации нету - идем к более опытным разработчикам. Однако и тут нас подстерегает проблема. Разработка идет полным ходом, сроки сжатые, выбиваться из плана никто не хочет. Поэтому, максимум что можно добиться это «Вот тебе имя класса (пакета, модуля) - посмотри там что да как, разберешься». Конечно, если сроки и бюджет проекта терпят, то очень даже можно выделить время опытного бойца на обучение новобранца. Но, как я уже неоднократно писал выше, мой новый проект - не такой. Чтобы картина стала еще более полной: проект основан на готовом open-source решении, соответственно многое приходится делать в рамках уже созданного фреймворка.

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

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

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

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

Итак, резюмируя:
  • разработчик должен чувствовать, что его работа приносит пользу - это очень сильный фактор внутренней мотивации
  • нужно развивать способности чтения кода вместе с абстрактным мышлением - это вернейший путь узнать как на самом деле работает та или иная система
  • почувствовав себя профи - не останавливаться на достигнутом. Только так можно стать магистром джедаев :)
Конечно, я понимаю, что все это - лишь некоторые аспекты в становлении профессионального разработчика. Для своего пути на данном его этапе я посчитал важными именно эти.

Продолжение: эпизод 5.

Справка
На данный момент (август, 2010) проект представляет собой комплекс приложений для крупной мебельной компании в Беларуси: ERP система, приложение для крупной дилерской сети, комплекс автоматизации производства. Каждое из них, в свою очередь, состоит из более мелких, но достаточно самостоятельных, модулей (управление сложным каталогом продукции по спецификации BMECat, графическое моделирование с трехмерным отображением, история изменений и синхронизация данных, модуль работы со сканерами штрих-кодов и печати этикеток и другие, более специфические). За основу был взят open-source проект JFire, хотя с течением времени от него остался только самый каркас. Архитектурно представляет собой клиент-серверное приложение: JBoss на стороне сервера и Eclipse RCP на стороне клиента. На время моего появления на проекте велась разработка основы ERP системы и каталога, другие направления появились позже.

Полезные ссылки:





    Понравилось сообщение - подпишитесь на блог Подписка на блогFollow grodnosoft on Twitter




    Читайте также:


    Комментов: 0

    Отправить комментарий