Программировать сложно, и все мы с этим согласны в меру нашего опыта. Чем больше мы программируем, тем более сложным нам кажется это занятие. В чем дело?
Возьмем, например, архитектора жилых сооружений. Он получает требования, по этим требованиям подготавливается проект, а затем, после одобрения, он передается в разработку строительной компании.
Или возьмем пекаря. Пекарь может экспериментировать с ассортиментом хлебобулочных изделий в своей лавке, найти наиболее оптимальное соотношение ассортимента, качества ингредиентов и цены каждого из изделий для нахождения точки в многомерном пространстве с наибольшей маржинальностью. После этого пекарю достаточно просто производить булки и зарабатывать на них, лишь изредка экспериментируя, чтобы проверять, не изменились ли у его покупателей вкусы.
Возьмем же модельера Баленсиагу, создавшего всю современную индустрию моды и множество современных выкроек. Каждое его произведение – эксперимент, но и законченный шедевр. Баленсиаге достаточно было работать с тканями и булавками, а его помощник делал зарисовки выкроек. После того, как Баленсиага заканчивал экспериментировать, они получали готовую модель, и выкройки передавались в производство мастерам.
Да возьмите кого-угодно, кроме математика, философа или программиста (наиболее прикладное сочетание первых двух), и вы будете иметь дело с чем-то законченным, чем-то, что имеет предопределенные границы. В случае же с программистами, таких границ нет. Роберт Мартин, например, часто упоминает что то, что программа делает сейчас, – это только вторая по важности вещь. Первая же вещь – то, что будет уметь программа завтра.
Мы говорим о жизни, об эволюции и адаптации – задачах, которые природа решает статистическими методами вроде "вброшу побольше разнообразия, и, может быть, что-то выживет". Мы же не играем в кости и пытаемся противопоставить этой естественной мудрости (тому, как оно есть) странные инженерные и научные подходы. В итоге люди разочаровались в таких подходах, совокупно именуемых Waterfall, и решили перейти к чему-то подобному Agile.
Agile – это про бесконечную несовершенность и незавершенность, про вечную адаптацию, которая и есть жизнью. Теперь мы поставили себе еще более сложную задачу: хотим создавать живые системы гораздо более сложные, чем мы сами, при этом мы даже самих себя не смогли познать как следует – слепые болваны, что строят Вавилонскую башню на фундаменте собственного невежества.
Когда человек глуп или без большого опыта опытен, он питает оптимизм в отношении разработки. Он считает, что может запрограммировать все, создавать вселенные, быть Демиургом, величайшим из богов и титанов существом. С опытом пыл остывает, мы наблюдаем, как башня разрушается под действием собственного веса и непредсказуемых свойств из-за сложности конструкции.
Мы строим и замечаем, что в какой-то момент башня перестает рости, а все, чем мы заняты, – попытки сохранить "высоту", сохранить монстра. В этом чудовище мы должны разглядеть самих себя, ведь наш труд есть отражение нас самих, и ужаснуться.
В чем я вижу выход, так это в том, чтобы пытаться вообще ничего не строить, а если что-то строить, то очень маленькое, необратимое, должное, необходимое для нашего выживания и покоя. Это уже не Agile, это аскеза. На практике стоит уходить от абстракций и сложных композиций, просторных рассуждений. Нужно сдвинуться с точки построения миров в сторону выпечки булочек. Решения, что мы создаем должны быть просты, как булочки. Тогда они будут законченными, и ими можно будет насладиться.
Почему программировать сложно?
visibility 467
29 Окт 2020г. в 08:11
feerpaf (2024-08-20 08:56:00)
Impact of BRCA on Fertility buy cialis generic Methods in molecular biology Clifton, NJ 2016; 1366 489 502