Пожаловаться

Почему программировать сложно

11 сентября 2019 в 17:25
6065
Пожаловаться
Программировать сложно, и все мы с этим согласны в меру нашего опыта. Чем больше мы программируем, тем более сложным нам кажется это занятие. В чем дело? Почему нет такого ощущения у строителей, например? Или у медиков?

Возьмем, например, архитектора жилых сооружений. Он получает требования, по этим требованиям подготавливается проект, а затем, после одобрения, он передается в разработку строительной компании.

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

Возьмем же модельера Баленсиагу, создавшего всю современную индустрию моды и множество современных выкроек. Каждое его произведение – эксперимент, но и законченный шедевр. Баленсиаге достаточно было работать с тканями и булавками, а его помощник делал зарисовки выкроек. После того, как Баленсиага заканчивал экспериментировать, они получали готовую модель, и выкройки передавались в производство мастерам.

Возьмем, например...

Да возьмите кого-угодно, кроме математика, философа или программиста (наиболее прикладное сочетание первых двух), и вы будете иметь дело с чем-то законченным, чем-то, что имеет предопределенные границы. В случае же с программистами, таких границ нет. Роберт Мартин, например, часто упоминает что то, что программа делает сейчас, – это только вторая по важности вещь. Первая же вещь – то, что будет уметь программа завтра.

Мы говорим о жизни, об эволюции и адаптации – задачах, которые природа решает статистическими методами вроде "вброшу побольше разнообразия, и, может быть, что-то выживет". Мы же не играем в кости и пытаемся противопоставить этой естественной мудрости (тому, как оно есть) странные инженерные и научные подходы. В итоге люди разочаровались в таких подходах, совокупно именуемых Waterfall, и решили перейти к чему-то подобному Agile.

Agile – это про бесконечную несовершенность и незавершенность, про вечную адаптацию, которая и есть жизнью. Теперь мы поставили себе еще более сложную задачу: хотим создавать живые системы гораздо более сложные, чем мы сами, при этом мы даже самих себя не смогли познать как следует – слепые болваны, что строят Вавилонскую башню на фундаменте собственного невежества.

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

Мы строим и замечаем, что в какой-то момент башня перестает рости, а все, чем мы заняты, – попытки сохранить "высоту", сохранить монстра. В этом чудовище мы должны разглядеть самих себя, ведь наш труд есть отражение нас самих, и ужаснуться.

В чем я вижу выход, так это в том, чтобы пытаться вообще ничего не строить, а если что-то строить, то очень маленькое, необратимое, должное, необходимое для нашего выживания и покоя. Это уже не Agile, это аскеза. На практике стоит уходить от абстракций и сложных композиций, просторных рассуждений. Нужно сдвинуться с точки построения миров в сторону выпечки булочек. Решения, что мы создаем должны быть просты, как булочки. Тогда они будут закончеными, и ими можно будет насладиться.

P.S. Эту и другие мои публикации об IT можно найти в Telegram.

6065

Комментарии

ответил на комментарий оставил(а) комментарий 16 сентября в 13:01
Пожаловаться

Можешь вообще не строить Вавилонской башни, кто Тебя заставляет? Более того, можешь даже не трогать бедных булочников, которым так же как и всем остальным, в условиях современности, приходится автоматизировать процессы, а так же заниматься своими вавилонскими башнями, которые так же стоят в основании более древней башни из крови и пота.

Не любишь воевать, так не трогай тех, кто тащит камни в окоп. Создай домашнюю сеть, подключи все свои гаджеты к ней, разверни домашний сервер из перфокарт и общайся между устройствами через аудиокассеты. И опять же, - это не есть плохой путь.

Ответить
0 0
Показать ветку
ответил на комментарий оставил(а) комментарий 12 сентября в 14:55
Пожаловаться

Просто программирование это постоянное самокопание "а правильно ли я сделал, а безопасно ли приложение, а не надо ли будет всё обновлять через пол года...?" и так далее.

Ответить
1 0
Показать ветку
ответил на комментарий оставил(а) комментарий 12 сентября в 13:26
Пожаловаться

Большую часть времени я не пишу код, а думаю на каком уровне абстракции я должен реализовать тот или иной метод. Оглядываясь назад, я вижу, что я был гораздо производительнее, я писал тупой код с минимум классов, разграничений бизнес-логики, все было просто и выполняло поставленные задачи, а сейчас как-то даже уныло стало.

Ответить
0 0
Показать ветку
ответил на комментарий оставил(а) комментарий 12 сентября в 13:17
Пожаловаться

"Мы строим и замечаем, что в какой-то момент башня перестает рости, а все, чем мы заняты, – попытки сохранить "высоту", сохранить монстра." - Вот прям точное описание того с чем имею дело каждый день.

"В этом чудовище мы должны разглядеть самих себя, ведь наш труд есть отражение нас самих, и ужаснуться" - через это предложение проглядывает истина!

Ответить
0 0
Показать ветку

Рекомендуем

BUG!