Category: работа

Category was added automatically. Read all entries about "работа".

Me

Программирование как мандала

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

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

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

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

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

[ DW ]
Me

Не только деньги

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


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

Затем они начинают, сцуко, спрашивать. Как мне этот дизайн? Хочу ли я плитку подешевле, но которая отвалится через десять лет, или которая проживёт век, но дороже? Как надо считать суммы возврата налога на платежи, просроченные более чем на полгода? Эти термины следует переводить по медицинскому словарю или по техническому? Мой ребёнок не хочет играть в подвижные социальные игры, но отлично сам в уголке собирает конструкторы - мне это подходит? Как я вообще хочу жить? Отстаньте, демоны! Я уже заплатил вам денег - чего вам ещё надо?

И вот тут я совершаю критическую ошибку, из-за которой примерно вся моя жизнь идёт в жопу. Я говорю: "Отстаньте, демоны!" Я отговариваюсь какой-нибудь незначительной ерундой. Я тупо молчу. Я отвечаю, но меняю решения по пять раз в неделю. Я говорю: "Вы специалисты, вам виднее, сделайте как-нибудь сами". Очевидно же, что они просто придалбываются. Я уже сказал всё, что мне надо, я уже дал денег. Пусть делают и не высовываются.

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

Когда я отмахиваюсь, молчу, отвечаю что попало - я заодно молча отвечаю им: "Мне, на самом деле, похуй, что вы сделаете. Мне нахуй не сдался ваш результат. Мне просто надо потратить деньги и отчитаться. Мне не важно и не интересно. Что бы вы ни сделали - это для меня будет говно. Я всё равно это выброшу".

Они всё равно постараются угадать и сделать как лучше. Они же специалисты.

Но что я получу при таком моём отношении к своему запросу?

Только говно.

[ DW ]
Me

Ассертивность

Ассертивное поведение считают эталоном здорового конструктивного общения и отношения к жизни. Я с этим, в общем, согласен. Ассертивный человек выглядит сильным, уверенным, надёжным, в меру жёстким, но одновременно и внимательным, гибким, сочувствующим и так далее. Однако сложность ассертивности не только в том, что для неё надо извести стадо собственных тараканов, но и в том, что идеально она работает только с такими же ассертивными людьми. Невротизированные собеседники могут принимать эту позицию за чёрствость, холодность, наглость, слабость, обман - всё что угодно из своего привычного спектра. В общем итоге ассертивность даёт приличные результаты даже тогда, но что хорошие люди всегда могут договориться - это романтичная иллюзия.

Любопытно, как это перекликается с принятым в программировании подходом "делай, а не спрашивай". Суть его в том, что перед вызовом метода не следует городить многократные проверки того, а действительно ли та сторона находится в нужном состоянии, правильно проинициализирована и в целом готова к такому запросу. Вызывающий код пишут так, как будто с той стороны всё готово и сработает как обещано контрактами. Если что-то там не так - это задача вызываемого метода сообщить о проблеме, бросив исключение (разбираться с которым будет уже вызывающий, в отдельной ветке кода). Такой подход сильно упрощает код и делает его нагляднее. Но нормально работать он будет только тогда, когда вызываемый тоже написан в том же духе, и будет бросать исключения, а не молча творить ошибочную хрень.

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

А в программировании обязательные условия, которые всегда-всегда должны исполняться, иначе всё пропало и сплошная ошибка, почти во всех языках называют assert.

[ DW ]
Me

Контракты

На описание языка Eiffel я набрёл лет двадцать назад, и сразу же влюбился в его принцип Design by Contract. Я вообще люблю, чтобы всё было описано максимально чётко: что куда можно и нельзя передавать, что откуда следует ожидать. И чтобы всё максимально проверялось как можно раньше. И в языки с нестрогой типизацией я так и не поверил. Контракты просто идеально соответствуют моему представлению о прекрасном. (Отсюда следует, что реальный мир почти всегда ужасен). Жаль, что Eiffel так и не захватил весь мир, а больше с тех пор контракты мне нигде не попадались.

Так что когда я два года назад узнал о проекте CodeContracts for .Net, я ухватился за него всеми руками. Это было в точности то, что надо. И оно показало мне уйму сомнительных мест в моём коде. А я-то думал, что пишу аккуратно... (Потом я пробовал пропускать через анализатор исходники нескольких популярных библиотек, и всегда это оказывался ад кромешный из кучи не проверенных разработчиками возможных ситуаций).

Но, блин, проект уже два года как заброшен. В VS.Net 2017 и .Net Core поддержки контрактов нет и не будет. И чем их теперь заменить? Пока что перевожу проекты на R# Code Annotations. Это не то, но хоть что-то...

[ DW ]
Me

Полный путь

В здешнем здании довольно разветвлённая сеть дверей и коридоров. За дверью может оказаться не комната, а коридор, некоторые двери в нём ведут в другие коридорчики, за некоторыми дверями скрывается тамбур и ещё несколько дверей. Но всё тщательно пронумеровано, на каждой двери висит табличка с полным путём к ней. Например, тут неподалёку есть комната с номером 5.3.3.4.А.

[ DW ]
Me

30 августа

В офисе второй день сломан кондиционер. После обеда солнце светит на нашу сторону здания. Обстановка совершенно нерабочая, даже с открытыми окнами.

Нет, этот пост никак не связан с предыдущим.

[ DW ]
Me

Вернулся с интенсива

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

Выдыхаю, возвращаюсь в рабочий график.

20160709_194036.jpg

[ DW ]
Me

Дополз

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

[ DW ]
Me

Карьерный рост

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

Я прикинул, сколько времени понадобится мне от текущего момента, чтобы дорасти до верха, если я начну как можно раньше, все мои учебные группы будут собираться без заминки и выпускаться без единого промаха, и разумное количество групп получится вести параллельно. Самые сжатые и удачные сроки.

Лет двадцать. Ну восемнадцать.

Если повезёт, я даже доживу.

[ DW ]