Ничего на свете хуже нет для пассажира средне-типичных дагестанских авиалиний, чем пребывать в блаженном неведении о том, что его самолёт ведёт линейный лётчик. Совершенно без разницы, имеет ли он за плечами тысячи рассказов о разбившихся орлах или нет, главное будьте уверены, когда-нибудь он почувствует на всех своих перьях, что такое разбившийся индюк. Дело тут в линейности. Он взлетает, вытянув штурвал на себя, скрежетая по ВПП хвостом закопчёной тушки, включает автопилот, садится по дальнеприводному маяку, сбросив скорость и подняв нос. Но это в 99,9999% случаях из ста. В оставшейшеся, затесавшейся же в неведении, на самом видном месте, доли процента лежит то, что оказывается, дерьмо-таки случается. И быть может, что капитан корабля скоропостижно скончается от шпендельмейского шнапса лучших виноградников подгорного городка, и метаясь в конвульсиях, пережмёт все рули высоты. А второй, не менее линейный пилот, сделав всё по инструкции, будет рулить. С заблокированным управлением. Абсурдно? Или, быть может, залетит в Эйфьяодлукодль, потеряется во мгле, и будет движение по радиомаяку, ибо к туманам он приучен, а вот к там ситуациям - нет, и все три движка, нахватавшись пепла заглохнут, и тогда... Или послушав диспетчера будет идти на сближение с другим самолётом - так же приказано. Озеро же Бо-ден-ское!..
Это всё к тому, что инструкции выполнять конечно полезно, даже так обречённо-глупо, с немецкой неповоротливостью королевского тигра, но даже с ними хоть иногда надо включать голову. Умение думать и быть человеком, учиться тогда, когда, в принципе, надо принимать решения, а так же принимать решения, когда ты не обязан... Этим, к сожалению, не многие могут похвастаться. Но, самое удивительное, даже среди почти что лучших и разумнейших представителей человечества, технической интеллегенции - среди инженеров и программистов такие линейные программисты, увы, не исключение.
Мне всегда казалось, что программисты - народ увлечённый, с повышенным чувством справедливости, свободолюбивый и немного инфантильный, поэтому другим, «нормальным» людям кажущиеся странными. Однако, как оказалось, что это не так. Бывают и такие, которые хорошо продаются в рабство и начинают из пасти волка блеять про прелести вольего пищеварительного тракта. Бывают и такие, которым нужен пастырь. Поэтому, увы, Джоэл не прав - или просто из-за того, что у него все звёзды - писать скучные спецификации, которые никто не читает, которые пишутся из исходного кода, не просто нужно, а жизненно важно. Только вот не для техпроцесса, а для линейных программистов. Линейных тестеровщиков, закрашивающих тысячелистные документы в зелёный цвет, что похоже на диогенов труд таджиков в московских подъездах. Это удивительно, но этим людям нужна инструкция как писать код. Нет, вы не ослышались. Или не прочитали. Прочтите ещё раз внимательно. Им нужна инструкция, как писать код. Ими, как тамагочи надо ежесекнудно командовать, и лишь оторвавшись от мамкиной сиськи они будут хныкать до того момента, пока их желудки не наполнятся рабочими часами и они со смелой душой пойдут взращивать грядки или выпиливать из пвх модель ЗАЗ-21.
Мне, пожалуй, скажут, что спецификация нужна, и лучше black-box со сценариями и рисунками. Но для линейных программистов она не должна содежать увлекательных баек про тётушку Мардж и свиное рыло, даже не потому, что от шуток юмора киснет пиво, а потому что она будет не понятна тем программистам, которые из псевдокода будут писать код. И, упаси весь пантеон князя Владимира, в спецификации и требованиях вдаться в абстракции, что эта функция должна считать логарифм. Как она должна считать? Сколько раз? Какие параметры? Сколько памяти использовать? Какими буквами быть написана? Что выдавать? Проработав немало с жесткими требованиями к дизайну кода, с венгерской нотацией и вообще немаленькими дизайн документами и драконовской отчётностью, я всё равно не могу сказать что они столь же жестки и прямолинейны, сколь требуется для линейных программистов. Они недостаточно ясны. Понимаете, венгерская нотация подразумевает некоторую свободу. Комбинации. Которые... ну вы поняли?
Начав свою деятельность в роли тим лида я внезапно понял, как далеки программы стоят от руководства, и сколь близко опять проблема людей. Люди на месте знают в предмете больше, чем ты сам и в случае необходимости я могу на них положиться - решить проблему, взять штурмом любую задачу. Но не в случае линейного программиста. Они настолько линейные, что их можно в стену заколачивать и быть уверенным, что стена простоит ещё столько же, сколько сыпался песок с пирамид. Они страшно бояться и чтут авторитет начальства, и, пожалуй, неискоренимы, из-за того, что ими можно командовать, что льстит Толстопузу с его злодейскими потливыми ручонками. А программистов... надо любить и дрессировать, но больше любить, но максимум пасти, как котов.
Так же хочу поспорить с Джоэлом, что лучше отвергнуть хорошего кандидата, чем взять плохого. Нет, точнее я с ним соглашусь, но не все звёзды. И если «да, но не совсем», это не значит, что «нет». Программист, а так же человек в тестировании, не звезда мира, чтобы взять и сделать величайший проект, ибо такие звёзды будут переписывать проект с нуля, а ограничивать их деятельность - тяжело и иногда невозможно. Возьму на себя смелость утверждать, что для каких-то случаев их надо растить и любить, баловать плюшками со своего плеча (не премировать!), просто для того, чтобы они полюбили эту замечательную профессию, чтобы они смогли о ней рассказать так же, как и я. Так же, как хороший преподаватель не вдалбливает знания, а учит их любить. Кто-то должен это делать, кто-то должен учить любить, а не заколачивать фрикциями большой и красный болт в машину прогнившего капитализма.
Но и тут главные враги - отличные знания линейных программистов, но нулевая способность решать проблемы и быть гибкими. Их феноменальная осведомлённость, которая светит Senior\Guru знаниями, но не способна быть самостоятельными и расширять свои знания. Это вообще кажется странным, как будто в них, как в EPROM загрузили данные, и всё. Хоть read, но не write. А дело тут в том, что люди устали. Что они перестали любить и верить в то, что это замечательная штука - чувствовать себя программистом. Чувствовать себя создателем. Жалко, когда любовь проходит... и остаётся рутина, бюрократия и отчёты об отчётах, которых всё равно некому отправлять и некому читать.