Представьте, что вы начали работу над своим самым первым проектом. В самом начале вы не знаете практически ничего ни о языках программирования, ни о сфере применения проекта, ни о процессе разработки, вы не знаете, какие практики работают, а какие нет — в общем не знаете много чего хорошего. Также вам неизвестно, что такое политические игры, внешние факторы, отчеты о статусе, человеческая глупость, страх ошибки, скука — в общем и много чего плохого вы тоже не знаете. Все это незнание мешает вам хорошо делать свою работу. Вдруг — или не вдруг — а лет так допустим через 10 — вы либо превращаетесь в классного разработчика, либо оказываетесь намертво зажаты в тисках посредственности и теряете всякую надежду поймать волну. Отчего так происходит? Что нужно делать чтобы двигаться вперед? По-моему, едва ли не самое важное здесь — это искреннее, страстное стремление к новым знаниям. Обучение - вот то главное, что двигает вперед разработку софта. Обучение — вот двигатель развития не только для каждого отдельно взятого разработчика, но и для всей команды.
Источник: Ashiro's Labzone Я думаю, что обучение является ключевой составляющей эффективного процесса разработки софта. Если работа поощряет обучение — процесс эффективен. И наоборот, если работа мешает обучению — то и процесс будет плохим. Вообще, есть три уровня обучения: на уровне отдельного человека, на уровне команды и на уровне компании. В этой статье поговорим об отдельном человеке. У меня есть свое представление о процессе разработки. Это представление сформировалось на базе опыта разработки веб-приложений. Если посмотреть в общем и целом, то что делает разработчик? Разработчик решает проблемы. Чтобы решать проблемы красиво, нужно быть всесторонне образованным профессионалом и иметь хорошие знания в смежных дисциплинах. Только такой профессионал будет обладать взвешенным и объективным подходом, и придумывать наилучшие решения.
Узкая специализация vs. разносторонние знания
Вот мы и подобрались к этой щекотливой теме. Похоже, что на данном этапе разносторонние знания востребованы больше. Почему я так считаю? Давайте обратимся к некоторым любопытным аналогиям. Они в общем-то ничего не доказывают, но все же.
Массовое производство
Разработка софта — это очень молодая дисциплина. У нее есть свои характерные особенности, и они понятны далеко не каждому. Здесь нет окончательной формализации, и поэтому нельзя запустить массовое производство (пока что, по крайней мере). То есть, нельзя написать спецификацию, сделать дизайн и автоматически сгенерировать готовый продукт из UML-диаграмм (да, я знаком с Model-Driven Development, но оно пока и близко не может обеспечить массовое производство. На самом деле, очень много с виду различных тем оказываются связанными между собой. К примеру, психология, языки, теория ограничений, парное программирование, сложные системы и т.д. На данный момент не существует самого лучшего способа создания софта. Получается, что если для разработки софта нельзя применить массовое производство, то соответственно и люди с узкой специализацией не создадут хороший софт. Эту работу не поставишь на конвейер.
Наука
Давайте оглянемся на 300 лет назад. Посмотрим в Википедию. Мы обнаружим, что многие открытия были сделаны учеными-универсалами.
- Исаак Ньютон: физик, математик, астроном, естествоиспытатель, алхимик и теолог.
- Галилео Галилей: физик, математик, астроном, философ.
- Христиан Гюйгенс: математик, астроном, физик, часовщик и изобретатель
Универсальность была обычным делом 200-300 лет назад. В современной же науке без специализации не бывает новых открытий. Ученые с разноплановыми знаниями попадаются редко. Гораздо чаще мы видим:
- Бартон Цвибах — специалист по теории струн
- Макс Тегмарк — космолог
- Дэвид Джозеф Бом — квантовый физик
Вот исключение: Стивен Вольфрам (р. 1959) — физик, разработчик софта, математик, писатель и бизнесмен. К чему я веду? Разработка программ не относится ни к науке, ни к промышленности в традиционном понимании, поэтому подобными аналогиями вряд ли что-то по-настоящему докажешь. Но если провести параллель с наукой, то девелопмент сейчас находится на уровне 19го века, а если с промышленностью — то это 17й век. Выходит так, что команда универсалов, каждый их которых обладает некоторыми специальными знаниями может создать более хороший софт, чем команда, состоящая из узких специалистов. Справедливость этого утверждения очевидна не сразу. Давайте рассмотрим доводы «за»: 1. Коммуникация (общение). Команда универсалов легко общается на одном языке. Все хорошо понимают друг друга. В команде узких специалистов общение заканчивается там, где заканчиваются знания. Если UI-девелопер ничего не знает о серверной части, а разработчик серверной части не имеет понятия о Javascript, HTML и CSS, то им будет тяжело прийти к какому-то совместному решению. 2. Архитектура. Если разработчику неизвестно, зачем нужна тестируемость, то решение, которое он сделает, будет трудно протестировать. При узком фокусе возможны какие-то локальные оптимизации, но в общем и целом архитектура оказывается слабой. Если никто в команде не понимает, «как это все работает» — это плохой знак. 3. Риск потери. Команда узких специалистов вряд ли пройдет «автобусный тест», а именно: если кто-то из ключевых разработчиков попадет под автобус, работа станет.
Универсальный разработчик
Я верю в универсальных разработчиков. Надо задать себе вопрос: «Какие скилы (знания и умения) мне нужны и насколько глубоко я хочу ими овладеть?» Это все очень индивидуально. Вот приблизительный список умений и знаний, которыми должен обладать любой уважающий себя веб-разработчик. Список отсортирован по приоритету, и я указал время в часах, которое стоило бы потратить на образование в соответствующей области:
- Жажда новых знаний (любознательность), любовь к своей работе (или есть, или нет)
- User Experience (1000 часов)
- Программирование (OOP/OOD, инструменты, практики и т. д. ) (8000 часов)
- Тестирование (200 часов)
- «Чувство прекрасного» (графический дизайн, визуализация и т. д. ) (200 часов)
Я уверен в том, что эти знания и качества являются чрезвычайно важными для настоящего веб-разработчика. Вы может спросить «Это все понятно, но зачем ставить User Experience выше программирования?» Дело в том, что UX в некотором смысле даже важнее, чем собственно разработка, так как дает разработчикам правильную точку зрения на решение проблем. Без UX можно отлично заимплементить какой-нибудь кривой солюшн, и именно поэтому 90% софта написано криво. Криво, неюзабельно и с массой ненужных фич. У настоящего разработчика есть «чувство прекрасного». Этому умению не дашь точного определения, но в общих чертах, разработчик должен быть в состоянии сказать «вот эта кнопка отстой, а вот то меню — классное». Чувство прекрасного — это очень важное свойство, без него нигде не обойтись — будь это визуальный дизайн, документацая, архитектура, исходный код. Все, что угодно. Можно (и нужно!) развивать в себе это чувство. Так что если вам понятия User Experience или Design кажутся далекими и неважными, может быть как раз самое время потратить на них пару сотен часов и превратиться в классного разработчика? Оригинал: Learning & Software Development. Multi-skilled Developer перевод: indigo777
Релоцировались? Теперь вы можете комментировать без верификации аккаунта.