Сравнивая разработку программного обеспечения с гражданским проектированием, я был удивлен, увидев другой способ мышления: любой инженер-строитель знает, что если вы хотите построить небольшую хижину в саду, вы можете просто получить материалы и начать строить их, тогда как если вы хотите построить 10-этажный дом (или, например, что-то вроде этого ) вам нужно сделать довольно много математики, чтобы быть уверенным, что он не развалится.
Напротив, общаясь с некоторыми программистами или читая блоги или форумы, я часто нахожу распространенное мнение, которое можно сформулировать более или менее следующим образом: теория и формальные методы предназначены для математиков / ученых, в то время как программирование больше ориентировано на достижение цели .
Обычно подразумевается, что программирование является чем-то очень практичным и что хотя формальные методы, математика, теория алгоритмов, чистые / связные языки программирования и т. Д. Могут быть интересными темами, они часто не нужны, если все, что нужно, - это получить что-то сделано .
Исходя из моего опыта, я бы сказал, что хотя вам не нужно много теории, чтобы собрать 100-строчный сценарий (хижина), для разработки сложного приложения (10-этажное здание) вам нужен структурированный дизайн, хорошо -определенные методы, хороший язык программирования, хорошие учебники, где можно искать алгоритмы и т. д.
Таким образом, теория ИМО (нужное количество) является одним из инструментов для достижения цели .
Мой вопрос: почему некоторые программисты считают, что существует контраст между теорией (формальные методы) и практикой (достижение цели)?
Является ли программная инженерия (создание программного обеспечения) воспринимаемой многими столь же легкой, как , например, гражданское строительство (строительство домов)?
Или эти две дисциплины действительно различны (кроме критически важного программного обеспечения сбой программного обеспечения гораздо более приемлем, чем отказ здания)?
Я пытаюсь подвести итог, что я понял из ответов до сих пор.
- В отличие от программной инженерии, в гражданском строительстве гораздо яснее, какое количество теории (моделирование, дизайн) необходимо для выполнения определенной задачи.
- Отчасти это связано с тем, что гражданское строительство столь же старо, как человечество, а разработка программного обеспечения существует всего несколько десятилетий.
- Другой причиной является тот факт, что программное обеспечение является более нестабильным видом артефакта, с более гибкими требованиями (ему может быть разрешен сбой), различными маркетинговыми стратегиями (хороший дизайн может быть принесен в жертву для быстрого выхода на рынок) и т. Д.
Как следствие, гораздо сложнее определить, какое правильное количество дизайна / теории подходит для разработки программного обеспечения (слишком мало -> грязный код, слишком много -> я никогда не смогу закончить), потому что нет общего правила и только (большой) опыт может помочь.
Поэтому, если я правильно истолковываю ваши ответы, эта неопределенность в отношении того, сколько теории действительно необходимо, способствует смешанным чувствам любви / ненависти, которые испытывают некоторые программисты к теории.