Как заявили DeMarco и Lister в Peopleware около 20 лет назад, подавляющее большинство провальных программных проектов терпит неудачу не из-за технических проблем, а из-за социологических проблем . Это не изменилось за последние десятилетия, независимо от того, насколько улучшились наши инструменты.
Неумелое руководство, нереалистичные ожидания, неспособность найти подходящих людей для работы и / или не позволяющие им выполнять свою работу, следовательно, неспособность удержать их; рабочие места и инструменты, которые не подходят для разработки ПО; необработанные личные конфликты; политика ; Это лишь некоторые из типичных проблем, которые могут сделать проект обреченным с самого начала.
Почему писать хороший код сложнее?
Я не совсем уверен, что написать хороший код сейчас сложнее, чем десятилетия назад. На самом деле, по сравнению с машинным кодом или сборкой, все, что у нас сейчас есть в мейнстриме, гораздо проще в обращении. Просто нам может понадобиться произвести больше.
Только из-за упомянутых факторов, времени и сложности?
Да, достижимая сложность, безусловно, увеличилась (и продолжает увеличиваться) с увеличением мощности наших инструментов. Другими словами, мы продолжаем раздвигать границы. Что для меня переводится так, что одинаково трудно решить самые большие проблемы сегодняшнего дня, как это было 30 лет назад, чтобы решить самые большие проблемы того дня.
OTOH с тех пор, как область выросла настолько, что сейчас существует гораздо больше «маленьких» или «известных» проблем, чем было 30 лет назад. Эти проблемы технически (не должны) больше (быть) проблемой, но ... сюда входит вышеприведенный принцип :-(
Кроме того, число программистов с тех пор сильно возросло. И, по крайней мере, мое личное восприятие заключается в том, что средний уровень опыта и знаний снизился просто потому, что на поле постоянно поступает намного больше юношей, чем старших, которые могли бы их обучать.
Это что методологии не практикуются правильно?
ИМХО конечно нет. У Демарко и Листера есть несколько резких слов о методологиях Big-M. Они говорят, что никакая методология не может сделать проект успешным - только люди в команде могут. OTOH методологии small-m, которые они хвалят, довольно близки к тому, что мы сейчас знаем как «agile», который широко распространен (ИМХО по уважительной причине). Не говоря уже о такой хорошей практике, как модульное тестирование и рефакторинг, которые всего 10 лет назад не были широко известны, и в настоящее время даже многие выпускники знают об этом.