К основному контенту

Почему мы выбираем неправильные технологии?

Интересная статья "Why Developers Keep Making Bad Technology Choices" про причины того, почему можно промахнуться с технологиями.

Причина 1: Скука
Редко кому удается постоянно работать над интересными проектами, где можно использовать новые технологии. Чаще приходится решать уже давно решенные проблемы. Из-за этого возникает соблазн заменить старую, давно используемую библиотеку или базу данных на новомодную, свеженаписанную и активно рекламируемую технологию. Просто, чтобы не скучно было. Часто это слышал в своей практике. Кстати про это (внедрение новых технологий в проектах) я уже писал (пункт 5 и 6).

Причина 2: Наполнение резюме
Это самая грустная причина, но часто встречаемая. Разработчики начинают использовать технологии для получения некоторого опыта, чтобы потом была возможность добавить новую строчку в резюме. При этом то, насколько полезна эта технология, вторично. Самое забавное, что  часто неважно насколько глубоко человек разбирается в технологии - ведь люди склонны верить, тому кто ищет работу. И даже принцип "доверяй, но проверяй" не помогает: сложно оценить реальных уровень знаний на собеседовании (можно попытаться, но тема собеседований - это отдельная тема). Поэтому программные продукты, от малых до больших, используют непроверенные технологии, или технологии в которых никто не разбирается. В итоге компании остаются с системами использующими ооочень много технологий и которые некому поддерживать: разработчики то, дополнив резюме, ушли :)

Причина 3: Внешнее давление
Давление, которое на нас оказывают снаружи, тоже может оказывать влияние на выбор технологий. Нам  нравится считать, что мы независимы в принятии своих решений, но все мы люди и очень часто наше мнение формируется под воздействием окружения.

Причина 4: Недостаточно знаний
Иногда те или иные технологии выбираются только потому, что разработчики не понимают, как эти технологии работают или просто не хотят в этом разобраться.

Причина 5: Неверное понимание или решение несуществующих проблем
Известно также, что разработчики склоняются к применению технологии, потому что она позволяет делать А и B, а также позволяет избавиться от C. Но на самом деле, ни того, ни другого, ни третьего нет в вашем проекте. И использование технологии оправдывается словами "а вдруг пригодится" или "у всех есть эти проблемы, значит и нам тоже надо о них думать".

И что же нам со всем этим делать, как правильно выбирать технологии?
Для начала попробуйте оценить свои задачи по следующим пунктам (кстати обсуждение в команде гораздо полезнее - чем большей информацией вы обладаете в момент принятия решения, тем точнее оно окажется) (хмм, выглядит как совет КО, но как часто я сталкивался с тем, что коллективный разум полностью игнорируется именно в момент оценки)

  • Рассмотрите требования по стабильности, устойчивости к отказам, производительности и тд
  • Оцените то, что у вас используется сейчас. Насколько оно удовлетворяет вашим нуждам. Если проблем нет, то может и не надо затевать изменения?
  • Исследуйте, как другие технологии могут вам помочь. При этом обязательно учитывайте зависимости, которые принесут они за собой - бесплатного ничего не бывает, за все надо платить.
  • Выясните то, что знает ваша команда и предпочитайте то, что вы хорошо знаете.
  • Учитывайте затраты времени, стоимость и тп
  • Обсудите с командой все плюсы и минусы
Все выше сказанное не должно восприниматься как совет избегать использования новых технологий. Просто их применению должны быть причины. И постарайтесь, чтобы эти причины не входили в выше приведенный список :)

Комментарии

Популярные сообщения из этого блога

Mock vs Stub

Когда мы начали изучать модульное тестирование, то одними из первых терминов, с которыми пришлось познакомиться, стали Mock и Stub. Ниже попробуем порассуждать в чем их сходство и различие, как и для чего они применяются. Проверять работоспособность тестируемого объекта (system uder test - SUT) можно двумя способами: оценивая состояние объекта или его поведение. В первом случае проверка правильности работы метода SUT заключается в оценке состояния самого SUT, а также взаимодействующих объектов, после вызова этого метода. Во-втором, мы проверяем набор и порядок действий (вызовов методов взаимодействующих объектов, других методов SUT), которое должен совершить метод SUT. Собственно, если коротко, то в одном случае используется Stub, а в другом Mock. Это объекты, которые создаются и используются взамен реальных объектов, с которым взаимодействует SUT в процессе своей работы. Теперь подробнее. Gerard Meszaros использует термин Test Double (дублер), как обозначение для объек

План "Б" или как прикольно провести субботний день

Всем привет. Вчера состоялась конференция " План Б ". Организаторами выступили ребята из Яндекса, за что им большое спасибо. Судя по приблизительным подсчетам в мероприятии участвовало около 200 человек. Основной темой конференции было планирование, планирование всего: проектов, разработки, тестирования, дизайнеров и даже организации музыкального фестиваля. Сначала думал написать отчет в обычном своем стиле: кто и что говорил, но почитав твиттер по #pbconf понял, что просто потеряю время :) Поэтому кому оооочень интересно узнать подробности следуйте за птичкой и вы все узнаете (тэг #pbconf попал в top-30 твиттера) Здесь приведу лишь те вещи, которые мне запали в мозг Роман Чернин о продуктовой разработке: "нет заказчика, нет требований, нет сроков -> как принимать решения? ответ: заводим себе Product Manager-а" Оля Павлова (@op): "бойтесь иллюзии точной формулировки" "заказчик - ребенок, выдаем ему игрушку как можно ча

Переключите тумблер или умные люди дурного не посоветуют

Навеяно интересными вопросами про TDD после  вчерашнего выступления . Uncle Bob : " Flipping the Bit " Подробнее постараюсь перевести чуть позже, пока только это: Как определить, что у коллеги (или у вас) ТУМБЛЕР переключен?  Если ваши ответы на вопросы ниже совпадают с приведенными - то все хорошо :) Мантра: Сможете ли вы выполнить работу быстрее используя TDD? ДА Существуют ли какие-либо задачи, которые вы можете выполнить быстрее без TDD? НЕТ Я понимаю, что TDD может помочь в долгом проекте, а что если у вас короткая задача? Будете использовать TDD? Да, потому что TDD быстрее даже в короткой перспективе Что если времени реально не хватает, и босс стоит над душой, будете ли вы использовать TDD? ДА В любом случае? ДА Есть ли случаи, когда вам не нужно использовать TDD? НЕТ Представьте себе что вы на звездном корабле Enterprise ( Star track ) и осталась всего секунда до взрыва антиматерии. Все что вам нужно, чтобы избежать этого, поменять один IF. Будете ли вы и