Какое образование стоит получить?
Всем привет! Стою перед выбором: поступать по направлению "Радиотехника" или по направлению "Информатика и вычислительная техника". Поступать собираюсь в МАИ. Слышал, что каждый инженер является программистом, но не каждый программист является инженером (не в буквальном смысле, конечно). Также слышал (и понял на собственном опыте), что научиться программированию самостоятельно легче, чем получить фундаментальную инженерную базу. Так какое образование стоит получить в первую очередь: инженерное или "IT-шное"? Вообще меня привлекает радиоэлектроника и низкоуровневое программирование. Может, кто из вас уже сталкивался с таким и может поделиться историей и дать совет. Буду благодарен!
Вот до чего доводят ночные покатушки
Товарищ улетел. Товарищ мой, тег "моё".
P. S. Андрей, если ты читаешь это - спасибо, что 15 лет назад не ушатал так мою восьмерку на покатушках, закончилось всего лишь отмыванием от слоя грязи и глины))
P. P. S. Вытащили только трактором.
Про подарки родителей
Вот отсюда вспомнил Папа
Детство мое не было сильно разным в плане денег, во всяком случае, мне так казалось. Деньги вроде были всегда, когда больше, когда меньше, но я всегда ходил одетый и обутый. Батя периодически бухал, доводил меня и маму, и сейчас доводит, но работал и деньги приносил.
Мама говорит, что я никогда ничего не просил в магазинах, да и я не припомню. Но точно помню, что одной моей мечтой детства, кроме денди, которую мне купили, был конструктор Лего в виде большого Замка! Я чуть ли не во сне играл, прятал солдатов за стенами, рушил их из пушек, отстраивал заново... В общем, мечта.
Видимо, я пару раз сказал об этом маме и однажды мы пошли его выбирать. Был у дома магазин, с отделом детских игрушек, в том числе и Лего. Я бежал впереди мамы, подгоняя ее и переживая, что его купят.
В магазине, мы сразу сказали, что хотим замок Лего. А именно замка у них и не было. А был почти вот такой набор:
Как вы понимаете, тут снарядами действительно пушки и арбалеты стреляли, были солдатики, но это ни фига не Лего. Сам замок просто раскладывался на петлях в стороны и становился большой стеной с бойницами, где можно было крепить баллисты или арбалеты.
Я был очень застенчивый, скромный и я тогда постеснялся продавщицы, которая доставала для меня этот набор, что даже толком не стал его рассматривать внутри. Боялся, что она грозно вздохнет, посмотрит на меня, мол сам не знает чего хочет, а меня гоняет. Я промямлил, что мол да, хочу его, хотя уже в тот момент понимал, что здесь явно что-то не то, но сформулировать и отказаться уже не мог. Точно помню, что мама меня спросила, точно ли я буду в него играть и точно ли мы его покупаем. Я сказал да.
Какое же было мое разочарование, когда дома я распаковал это всё. Это же не Лего, на что я рассчитывал, почему не сказал в магазине, ведь тогда понимал, что фуфло какое-то. Но я честно в него играл, даже пару раз с другом. Но все равно, я можно сказать заставлял отчасти себя в него играть, поэтому не так часто и доставал его. Однажды мама спросила, чего я в него не играю. Конечно, я сказал почему же не играю, очень даже играю, и сразу же достал... Насколько мне было обидно и жалко себя, маму, подарок, денег.
С тех пор я не вспомню, чтобы что-то так хотел и чтобы что-либо просил у родителей из игрушек. Про Лего больше не заикался никогда. Стыдно было и жалко родительских трудов, ради моего подарка, который я сам выбрал, постеснявшись отказаться и понимая, что это не то, что хочу.
Маме вроде сейчас про это рассказал, но все равно вспоминаю с грустью.
Ниндзя-код
Предлагаю вашему вниманию советы мастеров древности.
Программисты прошлого использовали их, чтобы заострить разум тех, кто после них будет поддерживать код.
Гуру разработки при найме старательно ищут их применение в тестовых заданиях.
Новички иногда используют их ещё лучше, чем матёрые ниндзя.
Прочитайте их и решите, кто вы: ниндзя, новичок или, может быть, гуру?
Осторожно, ирония!
Многие пытались пройти по пути ниндзя. Мало, кто преуспел.
Краткость – сестра таланта!
Пишите «как короче», а не как понятнее. Покажите, насколько вы умны!
«Меньше букв» – уважительная причина для нарушения любых соглашений. Ваш верный помощник – возможности языка, использованные неочевидным образом.
Обратите внимание на оператор вопросительный знак '?', например:
// код из jQuery
i = i ? i < 0 ? Math.max(0, len + i) : i : 0;
Разработчик, встретивший эту строку и попытавшийся понять, чему же всё-таки равно i, скорее всего, придёт к вам за разъяснениями. Смело скажите ему, что короче – это всегда лучше. Посвятите и его в пути ниндзя. Не забудьте вручить Дао дэ цзин.
Однобуквенные переменные
Кто знает — не говорит. Кто говорит — не знает.
Лао-цзы
Ещё один способ писать быстрее – использовать короткие имена переменных. Называйте их a, b или c.
Короткая переменная прячется в коде лучше, чем ниндзя в лесу. Никто не сможет найти её, используя функцию «Поиск» текстового редактора. Более того, даже найдя – никто не сможет «расшифровать» её и догадаться, что она означает.
…Но есть одно исключение. В тех местах, где однобуквенные переменные общеприняты, например, в счётчике цикла – ни в коем случае не используйте стандартные названия i, j, k. Где угодно, только не здесь!
Остановите свой взыскательный взгляд на чём-нибудь более экзотическом. Например, x или y.
Эффективность этого подхода особенно заметна, если тело цикла занимает одну-две страницы (чем длиннее – тем лучше).
В этом случае заметить, что переменная – счётчик цикла, без пролистывания вверх, невозможно.
Используйте сокращения
Если правила, принятые в вашей команде, запрещают использовать абстрактные имена или имена из одной буквы – сокращайте их.
Например:
• list → lst.
• userAgent → ua.
• browser → brsr.
• …и т.д.
Только коллеги с хорошо развитой интуицией поймут такие имена. Вообще, старайтесь сокращать всё. Только одарённые интуицией люди достойны заниматься поддержкой вашего кода.
Будьте абстрактны при выборе имени.
Лучший кувшин лепят всю жизнь,
Высокая музыка неподвластна слуху,
Великий образ не имеет формы.
Лао-цзы
При выборе имени старайтесь применить максимально абстрактное слово, например obj, data, value, item, elem и т.п.
• Идеальное имя для переменной: data. Используйте это имя везде, где можно. В конце концов, каждая переменная содержит данные, не правда ли?
…Но что делать, если имя data уже занято? Попробуйте value, оно не менее универсально. Ведь каждая переменная содержит значение.
• Называйте переменную по типу данных, которые она хранит: str, num…
Попробуйте! Сделают ли такие имена интереснее разработку? Как ни странно, да и намного!
Казалось бы, название переменной содержит информацию, говорит о том, что в переменной – число, объект или массив… С другой стороны, когда непосвящённый будет разбирать этот код – он с удивлением обнаружит, что информации нет!
Ведь как раз тип легко понять, запустив отладчик и посмотрев, что внутри. Но в чём смысл этой переменной? Что за массив/объект/число в ней хранится? Без долгой медитации над кодом тут не обойтись!
• …Но что делать, если и эти имена закончились? Просто добавьте цифру: data1, item2, elem5…
Проверка внимания
Только истинно внимательный программист достоин понять ваш код. Но как проверить, достоин ли читающий?
Один из способов – использовать похожие имена переменных, например, date и data.
Бегло прочитать такой код почти невозможно. А уж заметить опечатку и поправить её… Ммммм… Мы здесь надолго, время попить чайку.
Русские слова и сокращения
Если вам приходится использовать длинные, понятные имена переменных – что поделать… Но и здесь есть простор для творчества!
Назовите переменные «калькой» с русского языка или как-то «улучшите» английское слово.
В одном месте напишите var ssilka, в другом var ssylka, в третьем var link, в четвёртом – var lnk… Это действительно великолепно работает и очень креативно!
Количество ошибок при поддержке такого кода увеличивается во много раз.
Хитрые синонимы
Очень трудно найти чёрную кошку в тёмной комнате, особенно, когда её там нет.
Конфуций
Чтобы было не скучно – используйте похожие названия для обозначения одинаковых действий.
Например, если метод показывает что-то на экране – начните его название с display.. (скажем, displayElement), а в другом месте объявите аналогичный метод как show.. (showFrame).
Как бы намекните этим, что существует тонкое различие между способами показа в этих методах, хотя на самом деле его нет.
По возможности, договоритесь с членами своей команды. Если Вася в своих классах использует display.., то Валера – обязательно render.., а Петя – paint...
…И напротив, если есть две функции с важными отличиями – используйте одно и то же слово для их описания! Например, с print... можно начать метод печати на принтере printPage, а также – метод добавления текста на страницу printText.
А теперь пусть читающий код думает: «Куда же выводит сообщение printMessage?». Особый шик – добавить элемент неожиданности. Пусть printMessage выводит не туда, куда все, а в новое окно!
Повторно используйте имена
Когда целое разделено, его частям
нужны имена.
Уже достаточно имён.
Нужно знать, когда остановиться.
Лао-цзы
По возможности, повторно используйте имена переменных, функций и свойств. Просто записывайте в них новые значения.
Добавляйте новое имя, только если это абсолютно необходимо. В функции старайтесь обойтись только теми переменными, которые были переданы как параметры.
Это не только затруднит идентификацию того, что сейчас находится в переменной, но и сделает почти невозможным поиск места, в котором конкретное значение было присвоено.
Цель – развить интуицию и память читающего код программиста. Ну, а пока интуиция слаба, он может построчно анализировать код и конспектировать изменения переменных для каждой ветки исполнения.
Продвинутый вариант этого подхода – незаметно (!) подменить переменную на нечто похожее, например:
function ninjaFunction(elem) {
// 20 строк кода, работающего с elem
elem = clone(elem);
// ещё 20 строк кода, работающего с elem!
}
Программист, пожелавший добавить действия с elem во вторую часть функции, будет удивлён. Лишь во время отладки, посмотрев весь код, он с удивлением обнаружит, что, оказывается, имел дело с клоном!
Регулярные встречи с этим приёмом на практике говорят: защититься невозможно. Эффективно даже против опытного ниндзи.
Добавляйте подчёркивания
Добавляйте подчёркивания _ и __ к именам переменных. Например, _name или __value. Желательно, чтобы их смысл был известен только вам, а лучше – вообще без явной причины.
Этим вы достигните двух целей. Во-первых, код станет длиннее и менее читаемым, а во-вторых, другой программист будет долго искать смысл в подчёркиваниях. Особенно хорошо сработает и внесёт сумятицу в его мысли, если в некоторых частях проекта подчёркивания будут, а в некоторых – нет.
В процессе развития кода вы, скорее всего, будете путаться и смешивать стили: добавлять имена с подчёркиваниями там, где обычно подчёркиваний нет, и наоборот. Это нормально и полностью соответствует третьей цели – увеличить количество ошибок при внесении исправлений.
Покажите вашу любовь к разработке
Пусть все видят, какими замечательными сущностями вы оперируете! Имена superElement, megaFrame и niceItem при благоприятном положении звёзд могут привести к просветлению читающего.
Действительно, с одной стороны, кое-что написано: super.., mega.., nice.. С другой – это не несёт никакой конкретики. Читающий может решить поискать в этом глубинный смысл и замедитировать на часок-другой оплаченного рабочего времени.
Перекрывайте внешние переменные
Находясь на свету, нельзя ничего увидеть в темноте.
Пребывая же в темноте, увидишь все, что находится на свету.
Гуань Инь-цзы
Почему бы не использовать одинаковые переменные внутри и снаружи функции? Это просто и не требует придумывать новых имён.
let user = authenticateUser();
function render() {
let user = anotherValue();
...
...многобукв...
...
... // <-- программист захочет внести исправления сюда, и...
...
}
Зашедший в середину метода render программист, скорее всего, не заметит, что переменная user локально перекрыта и попытается работать с ней, полагая, что это – результат authenticateUser()… Ловушка захлопнулась! Здравствуй, отладчик.
Внимание… Сюр-при-из!
Есть функции, название которых говорит о том, что они ничего не меняют. Например, isReady(), checkPermission(), findTags()… Предполагается, что при вызове они произведут некие вычисления или найдут и возвратят полезные данные, но при этом их не изменят. В трактатах это называется «отсутствие сторонних эффектов».
По-настоящему красивый приём – делать в таких функциях что-нибудь полезное, заодно с процессом проверки. Что именно – совершенно неважно.
Удивление и ошеломление, которое возникнет у вашего коллеги, когда он увидит, что функция с названием на is.., check.. или find... что-то меняет – несомненно, расширит его границы разумного!
Ещё одна вариация такого подхода – возвращать нестандартное значение.
Ведь общеизвестно, что is… и check… обычно возвращают true/false. Продемонстрируйте оригинальное мышление. Пусть вызов checkPermission возвращает не результат true/false, а объект с результатами проверки! А что, полезно.
Те же разработчики, кто попытается написать проверку if (checkPermission(..)), будут весьма удивлены результатом. Ответьте им: «Надо читать документацию!». И перешлите эту статью.
Мощные функции!
Дао везде и во всём,
и справа, и слева.
Лао-цзы
Не ограничивайте действия функции тем, что написано в её названии. Будьте шире.
Например, функция validateEmail(email) может, кроме проверки e-mail на правильность, выводить сообщение об ошибке и просить заново ввести e-mail.
Выберите хотя бы пару дополнительных действий, кроме основного назначения функции. Главное – они должны быть неочевидны из названия функции. Истинный ниндзя-разработчик сделает так, что они будут неочевидны и из кода тоже.
Объединение нескольких смежных действий в одну функцию защитит ваш код от повторного использования.
Представьте, что другому разработчику нужно только проверить адрес, а сообщение – не выводить. Ваша функция validateEmail(email), которая делает и то и другое, ему не подойдёт. И он не прервёт вашу медитацию вопросами о ней.
Итого
Все советы выше пришли из реального кода… И в том числе, от разработчиков с большим опытом. Возможно, даже больше вашего, так что не судите опрометчиво ;)
• Следуйте нескольким из них – и ваш код станет полон сюрпризов.
• Следуйте многим – и ваш код станет истинно вашим, никто не захочет изменять его.
• Следуйте всем – и ваш код станет ценным уроком для молодых разработчиков, ищущих просветления.
Источник: https://learn.javascript.ru/ninja-code#dobavlyayte-podchyork...
Есть хочется
— Мама, есть хочется, — тянут Аксинью за край полушубка откуда-то снизу. – Мама, есть хочется.
Женщина одергивается, выныривая из раздумий. Её рука крадется за пазуху, долго роется, отогревая закоченевшие пальцы. Ничего.
А снизу все настойчивее требуют:
— Мама, есть хочется. – Детский голосок трепещет на ветру. – Мама, нас покормят сегодня?
Аксинья не отвечает. Крепче прижимает левой к телу кутаный комок, пока правая шарит внизу. Наткнувшись на взлохмаченную шапку, ладонь останавливается, впивается пальцами.
— Тише, Сережа, Машеньку разбудишь, — разлепляет губы женщина. Слова вспархивают облачками пара и тут же растворяются в январской ночи. – Или, не дай бог, услышат.
Сзади зло цыкают, призывая к молчанию. До конвоя шагов пять, не больше. Еще один часовой прохаживается вдоль строя, изредка пыхая в почерневшие лица едким папиросным дымом. Пару шагов и будет тут, рядом с Аксиньей.
— А ну цыц, контра! Чаво раскудахтались? – винтовка в руках конвоира зыркает вороненым глазом по редкой – человек сорок — толпе. – Велено вам молча лямку тянуть.
Неровное людское месиво, где застыла женщина с детьми, вжимается головами в плечи, как собака перед ударом плетью.
— Товарищ, с утра ведь стоим. У нас тут дети, старики. Сжальтесь, Христа ради, — робко дребезжит над ухом Аксиньи. – Почто мы вам?
— Какой я тебе товарищ, падла? – часовой вскидывает винтовку, ища стылым дулом наглеца. – А ну выходь, коли смелый. Я тебе вмиг покажу, кто товарищ!
Строй смолкает, сжимается плотнее.
— Крутов, без самодеятельности! – одергивают часового. – Охолонь. Сейчас поведем.
Аксинья вжимает комок в грудь, хватает сына за плечо. Уже слышала это «сейчас поведем». По осени так увели у неё Степана. Увели навсегда, без возврата. Тогда белые отступали на Юг, аккурат через их деревню. Набили свои закрома, бесчинствовали три дня, а на четвертый собрали оставшийся десяток мужиков у церкви и «повели». Половину в свою армию, половину – кто не захотел дом бросать – в расход. А сейчас, значит, поведут и оставшихся — стариков и баб с детьми. Только уже красные.
Над строем проносится робкий гул, тут же усиливается. На противоположном от Аксиньи краю взвизгивает баба и валится на колени. Крутов в один рывок оказывается рядом с ревущей, бьет остервенело прикладом, снова замахивается. Кто-то из деревенских пытается остановить его, но Крутов замечает протянутые руки, бьет наотмашь в толпу.
— Федор, сучий сын, стой! – двое прыгают на взбеленившегося часового, хватают за руки, оттаскивая.
Бабу подхватывают, силясь поднять. Она как дырявый мешок с прелым сеном разваливается по рукам, не в силах стоять ровно. Жилистые ладони заталкивают её обратно в строй поглубже – сейчас подопрут телами, оботрут снегом, может, и в себя придет.
— Глотов, Кригерс, — командует голос из вооруженной кучки. – Под ружье контру, и всех в дом к старосте. Зуев, Серов, Негода, еще раз обойти деревню.
Двое часовых, подгоняя деревенских пинками и руганью, тянут строй вперед.
Среди ссутулившихся армяков ступать тяжело. Пока один конвоир подгоняет задних, второй осаживает передних – не дают растягиваться: вдруг кто сбежать решит. А бежать некому – бабы да старики, пара ребятишек. Да и куда бежать? Окрест лес. В зимнюю пору туда и по доброй воле не сунешься. Сейчас и подавно.
Красный командир не зря погнал деревенских в дом к старосте. Изба у деда Григория большая. Второй этаж хотел строить – война с немцем планы спутала. Сыновья на фронт осенью четырнадцатого еще ушли, а одному старику с инструментом не справиться. Война два года как минула, царя прогнали. А сыновья так и не вернулись. Прошлым летом декрет в деревню пришел: отдать землю мужику. А на что земля, если справляться с ней некому…
Передний часовой останавливает строй. Шныряет в широкую дверь, возится в темноте. Наконец, выйдя на крыльцо, командует:
— Яша, заводи!
Деревенские, крякая, тянутся по скрипучим ступеням. В сенях каждый задерживается, отряхивая снег с валенок. Конвоиры зло тычут в спины нерасторопному стаду дулами, поторапливают.
— А ну пшли, сволота! – гаркает Крутов сзади. – Бегом пшли. А то в расход всех тут же. Ну, не задерживай.
Аксинья впивается побелевшими пальцами в Сережину ладошку. Страшный он, Крутов этот. И глаз у него недобрый. Такому убить – раз плюнуть. Женщина протискивается через стариковский стон, стремясь занять место к печи поближе. Сейчас набьются в избу деревенские и закроют телами её и детей от злых глаз. Так, вроде, и полегче будет.
Она притирается спиной к беленому печному боку. Спереди все валят деревенские, вжали – не продохнешь. Аксинья силится раздвинуть свободной рукой хоть немного места, чтобы урвать глоток воздуха, иначе задавят. Не со зла, а по боязни – от сеней, где набилась дюжина красных, летят пинки и ругань, подгоняя нерасторопных стариков. Где-то в глубине людского месива всхлипывают, молятся. Комок в руках женщины вздрагивает, топорщится в разные стороны. Сейчас Машенька проснется, а дать ей нечего. Аксинья юркает рукой за пазуху, достает на свет тряпицу с завернутым хлебным мякишем и, найдя маленький сморщенный ротик, сует соску дочери. Тут же под руку тянут.
— Мама, есть хочется, — напоминает о себе Сережа.
Аксинья не отвечает.
— Граждане крестьяне! – ударяет в потолок зычный голос. – Нам доподлинно известно, что ваша деревня снабжает недобитых империалистов провизией. По законам военного коммунизма каждого, кто чинит препятствия советской власти, ждет расстрел.
Голос смолкает, давая сгрудившимся старикам переварить. Аксинья выглядывает из-за лохматых голов. На том конце избы, прямо у сеней высится красный командир. Еще совсем моледенький и розовощекий, а в глазах уже пляшут кровавые бесенята. Его обступила дюжина красных. Водят по собравшимся дулами ружей. Выждав, командир продолжает:
— Предлагаю не чинить препятствий и выдать контру. Иначе… — он понижает голос и обводит избу взглядом. — Крутов. Того бери и на двор.
Крутов как в клещи хватает старика за шкирку, в одно движение вздергивает, ставя на ноги. Деревенские, уже отведавшие нрава красноармейца, не тянут руки к земляку. Пока Аксинья силится выглянуть из-за лохматых голов, дверь сеней всскрипывает и закрывается. Тишина повисает под потолком избы, напряженная, хоть ножом режь.
До слуха доносятся невнятный старческий голос, лающая ругань Крутова. Потом хлопок. Еще один. Голоса смолкают, и через долгий миг в дверях вырастает хищная фигура красноармейца. Он зло скалится, обводя деревенских жадными до крови глазами. Кажется, даже носом ведет, ловя в воздухе что-то знакомое ему одному.
— Ясно? Повторять не стану. Выдавай контру по-хорошему!
— Мама, а где дядя Евдоким? – сын тянет женщину за рукав. – Мама, они его что…
— Тише, Сережа, тише, — Аксинья с силой вжимает сына в грудь. Только сейчас осознала, что произошло.
Чадная пелена опускается на глаза женщины. Сквозь неё доносятся чеканные обрывки голоса красного командира и лающие Крутова. Где-то под ними плещется женский плач, стариковское причитание. Аксинью тормошат, пискливо требуют в ухо:
— Мама, мама!
Комок в руках шебуршит, разваливаясь. Еще немного и зайдется требовательным плачем.
— Люди добрые, Христа ради, — над горсткой перепуганных деревенских поднимается статный старик, — мы никакой контры не знаем. Мы люди простые. Сами голодаем. По осени был отряд с ружьями и шашками. А нам что? Мы супротив ружья слова не имеем. Нас ограбили, забрали последнее и ушли дальше. Христом-богом прошу, не троньте! Мужик отродясь в похлитику не лез и сейчас не полезет. Дело мужика простое…
— А ну пасть прикрой, морда кулацкая, — замахивается командир. – Разведка ясно донесла – здесь белогвардейское гнездо. Крутов, на двор его!
Аксинья ныряет взглядом в пол, страшась поднять голову, ближе прижимает детей. Снова над головой скрипит дверь, снова лает красноармеец, снова глухие хлопки, а за ними мертвецкая тишина…
Женщина качает кулек, и с каждым мерным движением словно сама пытается нырнуть в спасительную дрему. Старики говаривали, что человек, не зная выхода из беды, всегда прячется в забытие. Так было, когда уходили белые. Она бежала вслед мужу, растрепанная и босая, сбивала ноги о промерзшую землю, а потом оступилась и упала, исчезла. В себя пришла под вечер. Над головой, загораживая небо, высился Сережа, прижимая крохотный кулек к груди. В этот миг сын напоминал Аксинье Степана. Такой же взъерошенный, чумазый, с глазами-угольками на потемневшем от пахоты и ветра лице. После того дня в деревне молчали. Молчала и Аксинья. Молчал Сережа, изредка прося только поесть. Все больше молчала Машенька, полугодовалая кроха. Словно понимала, почему мать не поет и не смеется. Только первую неделю требовала сытного молока матери, но, осознав, что выжатая грудь не может дать и капли, перестала плакать. Реденько только попискивала, прося тряпицу с хлебными крошками – замену соске. А сегодня, когда пришли красные, и вовсе спит весь день.
Пока женщина раскачивает кутаный кулек, в избе редеет. Как из подпола она слышит чеканный голос командира, последние всхлипывания и завывания стариков, хищный лязг зубов Крутова и тихое, едва уловимое:
— Мама, есть хочется. Мама, страшно. Мама…
— Мразь несговорчивая! Всех порешу. А ну, падла, отвечай!
— Охолонь, Крутов. Водить по одному. Расколятся. Контра.
— Товарищ командир, а может и правда…
— Мама, страшно… Мама…
Голоса усиливаются. Под потолком рыкает Крутов, обрушивая проклятия на плечи деревенских.
— А ну подымись, а ну… — кружит над головой женщины. – Подымись, кому велено!
Аксинья разлепляет глаза. На крутовском черном, побитом оспинами лице, сверкают клыки. Жадный рот тянется уголками в стороны так широко, что, кажется, клацнет сейчас, и в голодной пасти окажется и сама Аксинья, и дети, и стонущие деревенские.
— А ну пошли, подстилка белая, — красноармеец грязно и смачно выругивается.
Перепуганные старики прядают в стороны, стараясь сбежать от Крутовского взгляда. Лишь Сережа жмется худым тельцем к матери.
— Баюкай, Сережа, баюкай. Я принесу поесть. – трясущиеся руки суют сыну кулек. Пока женщина распрямляется, пытаясь загородить собой мальчика с сестрой, глаза бегают по избе. Лохматое человеческое месиво поредело вполовину. Лишь пришлые по-прежнему водят винтовками, а красный командир чеканит голосом, требуя выдать белых.
За дверьми зло подвывает ветер, гоняя меж согбенных домишек и сараев колючую снежную поземку. Женщина скрипит снегом, едва волоча ноги. С каждым шагом липкий страх, засевший между лопаток, разбегается по телу, сковывая и выкручивая суставы. Всей спиной, от поясницы до шеи, Аксинья чувствует, как нагло, по-хозяйски, словно гоня перепуганную телку на убой, ступает Крутов. Даже винтовку опустил – знает, что женщина не побежит, слишком боится. Занемевшая шея не дает обернуться, чтобы в январской ночи увидеть, где Крутов оставил других деревенских.
--Иди, иди, — поторапливает голос сзади. – Туда иди, прямо, не сворачивай. Да поживее. Вона, сарай видишь? Туда иди. Быстро давай, кому велено! Подстилка…
Красноармеец распаляется бранью так, что щеки Аксиньи заливает стыдливым жаром – хоть в снег ныряй, чтоб остудить. За десяток лет, что она прожила со Степаном, и половины не слышала того, как ругается Крутов.
Повинуясь, она плетется вперед, зажмурившись до боли в глазах.
— Дура-баба, в сарай иди! — Он с силой пихает её в спину, загоняя в черный зев косенького сарая. – Ну что, пришли, подстилка…
Аксинья слышит надсадный хрип у самого уха. Крутов рывком разворачивает её, впивается больно в руки.
— Сейчас ты мне все расскажешь… И где контру прячешь, и как таскалась с белыми… Мразь… Подстилка…
Грузное тело подминает и валит. В лицо слюняво тыкается щетинистый рот, царапая хрупкую кожу Аксиньи. Она чувствует, как чужие руки остервенело рвут юбки, терзают полушубок, впиваются в волосы…
— Все расскажешь… Только… Сначала… Мразь… Подстилка…
К горлу подкатывает валун, мешая дышать, тело женщины деревенеет, а хищный рот продолжает похабничать над ухом. Низ живота прорезает боль. Разливаясь по животу и ногам, мешается со стыдом. Крутов дрожит над Аксиньей, больно впивается в волосы и царапает лицо, шею. В темноте она отчетливо видит два жадных глаза.
— Говори… Подстилка… Я тебя… В расход… И ублюдков… Твоих… В расход…
Аксинья силится отвернуться, но красноармеец как клещами вцепился ей в лицо, заставляя смотреть на себя. Прижатая тяжелым телом, боится раскрыть рот, лишь трепетно ждет, когда все закончится.
Пока бьется над ней, дети в безопасности. Лишь бы Машенька не проснулась, не заголосила. Лишь бы красный командир не назначил нового расстрельщика… Все можно пережить. И потерю мужа, и голод, и стыд этот. Только детей нельзя пережить. Не должна мать детей переживать.
— В расход… Всех… — рычит Крутов. Его глаза закатываются. Рыкнув последний раз, он вздрагивает, взвывает волком, замирает на секунду и обрушивается всей своей грузностью на Аксинью.
Они долго лежат в темноте сарая. Наконец, красноармеец встает, поругиваясь, чиркает спичкой, выхватывая на миг из тьмы рябое лицо, и воздух вокруг наполняется едким папиросным дымом.
Аксинья лежит, распластавшись, и боится пошевелиться. Ей кажется, что сейчас, пока Крутов смолит папиросу, еще есть время пожить. А может, разомлевший, он раздобреет и отпустит её? Про стыд она никому не расскажет, ни единой душе. Уж вымоет как-нибудь со временем, и от смрада его, прилипшего к её телу, как-нибудь избавится. Даже готова еще раз потерпеть, сама отдаться! Лишь бы детей не трогал, лишь бы ушел…
— Федор! – открывается дверь сарая. – Федор! Ты здесь? Командир сказал уходить. Немедля.
— Кого черт принес? Ты, Негода? Чаво за переполох? Куда идти?
— Разведка вернулась! Гутарют, большой отряд белых в двух верстах. Снимаемся и идем.
— А контра? – папироса вспыхивает в ночи.
— Да леший с ними. Командир сказал не тратить патронов. В доме запрем и ходу, смекаешь? Надо уйти, пока все не замело. Ходу, Федор, ходу!
Выглядывая из-за растрепанных косм, Аксинья смотрит с надеждой в полоску тусклого света на пороге сарая. Там с ноги на ногу переступает красноармеец, которого Крутов называет Негодой. Её взгляд боязливо перепрыгивает с одной фигуры на другую.
— Иди, я сейчас, — сплевывает Крутов под ноги. – Закончить надо.
Дверь сарая отрезает сумеречный свет. Аксинья слышит, как ругается оставшийся красноармеец, шебуршит по карманам. Замирает.
— На вот. Подстилка, — что-то неприятно прыгает на расхристанный живот женщины. – Большего ты не стоишь.
Аксинья зажмуривается, боясь пошевелиться. Совсем рядом всскрипыает дверь, в ноги ударяет холодным.
Когда вдали перестает слышаться скрип снега, она подскакивает. Прыгнувшее на живот валится под ноги. Женщина, упав на колени, шарит по полу. Ладонь нащупывает что-то твердо-колючее, черствое. Хлеб! Засохшая краюха хлеба!
Следы на улице почти замело. Где-то в отдалении, едва различимо слышится брань. Аксинья бежит со всех ног обратно, к дому, где остались дети. Падает, проваливаясь в снег по пояс. Злой ветер швыряает колючие снежинки за шиворот, залепляет глаза и сечет кожу. Она бредет, обезумевшая, держа за пазухой черствую корку – самое драгоценное, что может быть.
Наконец, впереди показывается изба деда Григория. Аксинья врывается внутрь.
В темноте копошится взъерошенное-стонущее.
— Сережа! – кричит Аксинья, сбиваясь на хрип. – Сережа.
На миг под потолком повисает хрупка тишина. Женщина успевает шагнуть вперед, раскрыть рот, набрать полную грудь воздуха.
— Мама, — звонко взрывается из глубины избы. – Мама!
Аксинья кидается на голос, распихивая всклоченные е тела. Те прядают от неё, как от прокаженной.
У печного бока она замечает растрепанного мальчика с кутаным кульком в руке.
— Мама, есть хочется, — округляет сын глаза.
— Держи, мой хороший. Я принесла, принесла...









