
«Жизнь — странная штука», — Рассел приостановился перед тем, как вернуться к программе.
«Большинство людей занимают места, никогда для них не предназначенные. Предназначенные… кем? Богом? Какая чепуха!»
Щека дёрнулась. Он стряхнул с себя транс и обнаружил Робин, стоявшую рядом, очевидно, чтобы задать один из её бесконечных вопросов.
— Удобно ли мне сейчас задать вам вопрос?
Брови Рассела поползли вверх домиком.
— Наверное, сейчас не хуже, чем в любое другое время.
— Видите ли… проблема заключается в том… — и Робин инициировала длинную запутанную фразу, которая перешла в другую длинную запутанную фразу, а затем в ещё одну. Она остановилась и посмотрела на Рассела с тоской.
— Так вы хотите, чтобы я ускорил время обработки вашего запроса?
— Да… если это вообще возможно. — Робин придвинулась ближе, вглядываясь в его монитор.
— Нет, Робин, не сейчас!
«Боже», — Рассел закатил глаза, когда она ушла. — «Чёрт бы тебя побрал!»
Всё же он сразу же открыл её почту. Её запрос возник перед взором — огромный, дряблый, непостижимое месиво.
Переписывая его, Рассел думал:
«Как Робин могла стать программистом?»
Эта мысль частым незваным гостем атаковала его, когда он сталкивался с кодом Робин. «Здравый смысл — просто отсутствует!»
— Знаешь, — Рассел обращался к жене, уплетая вечером запеканку из тунца с лапшой, — какой-то парадокс, чёрт знает что… Столько безработных программистов и в то же время совсем не просто найти квалифицированного специалиста, который бы тянул лямку.
— Как это? — его жена встала, подошла к плите и выключила кипящую воду.
— Половина людей — просто балласт. Пьют кофе, ходят на совещания, посылают оправдательные письма, но работа не двигается. Выгони их — и, пытаясь распределить обязанности, будет даже трудно понять, что они вообще делали.
Например, эта Робин. Она просто груз.
— Ну, она, наверное, хороша для чего-то ещё. Чего бы её тогда держали?
— Она совершенно бесполезна, но на неё работают три фактора: она стара, она женщина и у неё какая-то психическая проблема, которая квалифицирует её как инвалида. Робин — ходячая аномалия. Её дороже выгнать, чем держать на зарплате оставшиеся до пенсии годы.
— Между прочим, сейчас у нас такое положение, что неплохо бы кого-то взять. Кто будет по-настоящему тянуть лямку.
— Так, может быть, ты возьмёшь этого… о ком Фрида говорила.
— Кого это?
— Да какого-то её родственника. Тоже программист, но только он FOB.
— FOB?
— Fresh Off the Boat — только что с корабля.
Рассел читал резюме. Написанное на неуклюжем английском, оно выглядело чересчур самонадеянным, но всё же оставило у него ощущение, что он имеет дело со специалистом.
— А что этот парень, — он прочитал имя, — Эдвард… Эдик, значит… здесь делает?
— Он ещё не работает. На городе сидит. Хочешь с ним встретиться?
Эдвард похож на жужелицу — чёрный, сухой, угловатый. Под толстыми фокальными линзами очков вместо глаз поблёскивали две чёрные точки.
Его допотопный английский едва удерживал мысль. Он выплёвывал слова, проглатывал окончания, словно слова — наросты, мешающие движению фразы.
Хвастовство в его речи звучало как замаскированная слабость.
Рассел отказался от чая, предложенного женой, и, просто для очистки совести, решил просмотреть его программу.
Как только Рассел нырнул в код, раздражение немедленно сменилось радостным возбуждением — тем, какое женщина испытывает в ювелирном магазине.
— Это ваше? — Рассел поднял глаза, стараясь поддерживать бесстрастное выражение.
— Ну конечно! — Эдуард, казалось, приподнял все движущиеся части лица и тела, стараясь выразить удивление.
Рассел поразился. Код оказался не только дьявольски остроумным, граничащим с криптограммой, но и обладающим светящейся симметрией.
Пока Рассел читал код, Эдвард ходил взад и вперёд по комнате: то заложив руки за спину и глядя в пол, то кусая ногти. Потом останавливался, смотрел через плечо
Рассела, будто желая объяснить, но сдерживался.
А Рассел думал: «Каким образом может этот тип… умудряться писать код с таким блеском?»
— Вы талантливый человек, Эдуард.
Эдвард остановился, приподнялся на цыпочки, широко улыбнулся и, указывая пальцем на свою щуплую грудь, изрёк:
— Это вы говорите мне? Мне?!
Рассел устал и хотел спать. Тем не менее он остался, слушал рассказы Эдварда о жизни до эмиграции, одновременно поражёный его талантом и неблагоразумностью, граничащей с глупостью.
«Хороший специалист подобен чудовищно разросшемуся флюсу», — вспомнил Рассел старую поговорку.
— Что ж, давайте попробуем найти вам работу по специальности.
— А какой у него опыт работы? — Рассел говорил с агентом об Эдварде.
— Большой, но не в Штатах.
— М-м… должен вам сказать: его будет непросто трудоустроить.
— Но вы же видели примеры его кода! Представляете, насколько сложна его динамика? Только это должно убедить вас, какой он выдающийся программист!
— Да, может быть, но…
— Но что?
— Почему он не звонит сам? Он вам платит?
— Нет.
— Он ваш друг?
Рассел задумался. Он сам не понимал, почему это делает. Потому ли, что Эдвард его соотечественник? Нет. Вокруг сновали тысячи бывших единоземцев, к которым Рассел испытывал совершенное безразличие. Стал ли тот ему другом? Вряд ли. Некоторые черты характера и манеры поведения Эдварда даже раздражали.
Единственная причина спонсорства то обстоятельство, что Эдвард — великолепный программист, и его участие в работе любой компании стало бы благом.
Последующие дни Рассел безуспешно пытался сосватать Эдварда различным агентам. Никого не интересовало, что тот — прекрасный рабочий инструмент. Он не вписывался в трафарет воображаемого «горячего» перспективного работника, завёрнутого в фантик правильных округлых фраз, за которым гонялись агенты и корпоративные боссы.
Раздражённый, Рассел решил протолкнуть Эдварда в свою компанию. Тот не знал языка, на котором написана система, но при его таланте это не стало серьёзным препятствием. Он продвигался по новому языку со скоростью саранчи.
Иногда Рассел удивлялся:
— Секундочку… А как ты это сделал? Я никогда не видел, чтобы кто-то делал такое на этом языке.
— Не знаю, — усмехался Эдвард. — Это казалось естественным. Я делал подобное в других языках и подумал: почему бы не попробовать?
Джон Уокер, босс Рассела, встретил идею с осторожностью, и только нажим Рассела в конце концов пробил брешь в сопротивлении.
— Ну хорошо. Пусть приедет на интервью. Скажем, в пятницу. Если он так хорош, как ты рассказываешь, — чем чёрт не шутит. Пусть затыкает дыры, убыстряет, улучшает, упрочняет. В общем, делает ту работу, на которую обычно не хватает времени.
Собеседование прошло успешно. У Эдварда не оказалось костюма, и он надел костюм Рассела. Заодно Рассел дал ему советы относительно внешности и личной гигиены.
Однако одна проблема всё же оставалась: требовались две профессиональные рекомендации.
У Эдварда только одна — от профессора, члена профессиональной группы, которому он правил код. Рассел не мог дать вторую рекомендацию, так как Эдвард — его протеже.
— Зачем Джону нужна эта несчастная рекомендация? Он вроде не дурак, а требования всё же тупые! — возмущался Эдвард.
— Это не Джон. Так работает система. Джон не владелец компании. Ему нужна документация для босса. На бумаге всё должно выглядеть кошерно. Джон и так сделал исключение — тебе не пришлось идти в отдел кадров. Но чтобы он хорошо выглядел перед начальством — это наша задача.
— Но где я возьму вторую рекомендацию? Это абсурд! Какой кошмар! — Эдвард шекспировским жестом закрыл лицо руками. — Я никогда, никогда не получу эту работу!
— Да подожди ты, не паникуй. — Рассел потёр лоб. — У меня есть один приятель, у него ремонтная мастерская. Ему нужно кое-что запрограммировать.
— Ну и?
— Сделай это — и он даст тебе рекомендацию.
— Но это будет заведомой ложью.
— Что?! Ты что, грудной ребёнок? Это и не будет ложью. Ты просто обеспечишь их требуемой информацией.
— Как же это не ложь?
«Вот идиот», — повёл глазами Рассел.
— Думай об этом так… Они проверяют твои навыки общения. Не начинай! — видя, что Эдвард хочет возразить, Рассел взмахнул руками. — Хочешь работу — сделай это. Ясно?
— Ясно, — Эдвард опустил глаза и поднёс руку ко рту, готовясь грызть ногти. — Как же я ненавижу эту страну… Зачем я только уехал?
Эдвард проработал в «Красном Ковре» три месяца и твёрдо стоял на ногах. Он по-прежнему не водил машину, и Рассел подбирал его по утрам. Обычно Рассел высоко ценил достижения Эдварда; они даже написали совместную статью для корпоративного журнала.
Иногда, однако, случались ссоры — особенно когда Эдвард критиковал решения Рассела.
— Нашёл проблему? Прекрасно. Не ходи и не скули. Исправь её. За этим тебя и наняли.
Другим скользким моментом стало обязательство, данное Эдвардом Стиву — тому, кто дал вторую рекомендацию.
— Не буду этого делать!
— Как это — не будешь? Ты согласился.
— Я не могу. Я под огромным стрессом. И вообще, они должны были взять меня без этой глупой рекомендации.
— Но не взяли бы. Как пить дать. И я гарантировал Стиву, что ты это сделаешь. Если не сделаешь ты — придётся мне.
— Я не буду. Нет! — Эдвард поднял руку к глазам, словно защищаясь от света. — Это было грязно, постыдно и нечестно. Я сказал «да» под дулом пистолета, но в душе сказал «нет» и с этих позиций не сойду.
Однажды произошла крупная размолвка. Эдвард ходил по комнате, изогнувшись буквой «С», покусывая ногти и идиотски улыбаясь.
— Ох, я молодец! Нет, я больше чем молодец! Ты понимаешь, что я сделал?
Рассел отвернулся от монитора и приготовился слушать.
Эдвард заговорил, выплёвывая мешанину технических терминов.
— Ты знаешь, какой беспорядок в директивах, по которым выставляют оценки займов?
— Ну и? — Рассел кивнул.
— Я нашёл формулу, которая покрывает все случаи! Абсолютно все!
Рассел посмотрел на формулу с недоверчивой ухмылкой.
— Может, она и правильная. Но как ты это объяснишь людям из кредитного отдела? Они территориальны. Попробуй вмешаться — и получишь раненого буйвола.
— Значит, мы не можем исправить директивы, потому что кто-то занимает не своё место? Это абсурд!
— Абсурд — и что? Нас наняли, чтобы выполнять их директивы.
— У меня с этим проблема.
— Не нравится? Вон улица.
— Почему ты не объяснишь им, что они неправы?
— Потому что я не сумасшедший. И если я скажу Дэну, что он не знает, как писать директивы, — это будет конец мне. И тебе тоже.
Рассел процитировал:
«Сосед ученый Галилея
Был Галилея не глупее
Он знал, что вертится земля
Но у него была семья»
процитировал он Евтушенко.
Головная боль нарастала.
— Формулу оставим. Старый код закомментируй. Если дерьмо попадёт в вентилятор, вернём всё назад. Я отвечаю за проект.
Поползли слухи о продаже компании. Однажды объявили, что «Красный Ковёр» продан WUH Mortgage.
Страх пополз по спинам.
— От неё точно избавятся, — шептал Денис, имея в виду Робин.
Рассел планировал остаться. Его больше тревожил Эдвард.
— Забери меня домой! Это безнадёжно! — Эдвард рвал волосы.
— Прекрати! Это мелодрама. У тебя есть опыт, деньги, английский стал лучше.
Интервью Рассела прошло первым. Он рассказал о таланте Эдварда.
— Можешь не волноваться, — шепнул он ему.
— Правда?
— Поверь.
Когда Эдвард вышел со смешанными эмоциями.
— Думаю, нормально. Они сказали, что смогут меня использовать.
Дома Рассел заболел. В воскресенье ему сообщили, что в WUH он не нужен. Через две недели он нашёл новую работу.
Позже Рассел встретился с Джоном Уокером.
— Эдвард плохо отозвался о вашей работе, — сказал Джон. — Он сказал, что должен был быть честным.
Рассел вспотел.
— Это из-за этого меня не взяли?
— Не думаю. Скорее из-за денег. Но, может, сыграло роль.
«Вот сукин сын!» — Рассел расстегнул воротник рубашки и глубоко вздохнул.
На секунду мир как будто перепутал инструкции.
Если честность — это свойство, значит, её можно добавить и убавить. И кто-то решает, сколько именно. И если честность выдают, как таблетки, то он явно пропустил приём.
Он машинально подумал, к кому с этим обращаются — в отдел кадров или в аптеку.
Мысль оборвалась, не дойдя до конца.
«Сукин сын! Просто не верится».
Рассел вышел на улицу подышать воздухом.
Через два месяца ему позвонила Робин.
— Не могли бы вы дать мне рекомендацию?
Рассел вздохнул.
Он больше не злился. Странным образом он не сожалел о том, что ввязался в историю с Эдвардом.
Ему казалось, что он принял участие в чём-то большем, чем собственная жизнь.
— Ну хорошо, — сказал Рассел, хотя и не знал, правильно ли так поступать, если смотреть на вещи шире.







@mgaft1, когда кто-то видит мой типичный код, написанный как обычно вот в таком стиле как ниже, его, как правило, называют как угодно, от шизофренического до "да она капец больная, ей лечиться надо". Ну не умею я по книжке, фантазия разыгрывается, тем не менее обычно код нормально работает, а мне большего и не нужно. Но потенциальный работодатель был бы в шоке =) Вернее в ужасе.
@lindsay,
Откровенно, не вижу здесь ничего сумашедшего. While loop and inside another ForEach loop, some conditional statements, testing for null Все в порядке.
Не зная всей программы, может быть возможно выделить части этого кода в отдельные функции, что сделает код более portable.
Но опять же, внутри этого примера все кажется правомочным. 😊
@mgaft1, Вы правы, это кусок кода, вырванный из контекста, просто он показателен к моему стилю программирования. Давайте посмотрим почему его забракует любой HR:
Pекурсивное перебирание блоков через while, но внутри асинхронного callback. Цикл как цикл, но асинхронная природа делает его странным и хаотичным для поверхностного человека. При этом оно работает эффективно и не блокирует Event Loop
С первого взгляда чушь собачья, на самом деле это дает свои плюсы - нет блокировки: Event Loop свободен, можно обрабатывать другие события, пока нода отвечает, и если каким-то образом случилось отставание от head_block_number - цикл сразу запускает пачку запросов, и они выполняются параллельно чтобы быстро догнать. Умные книги здесь советуют использовать await, тогда будет всё упорядочено, но как по мне - это дольше, а при отставании - на порядок дольше.
Опять же выглядит как хаос и шум, непонятный для неподготовленного человека, но на самом деле это защита от undefined / null. Если transactions отсутствует (undefined или null), вместо него берётся пустой массив
[]. То же самое для operations. В итоге forEach всегда работает, и код не падает на TypeError: Cannot read property 'forEach' of undefined. И не нужно лишних if‑проверок.Ну и локальное хранение всех данных в объекте без БД. Всё остаётся в памяти (chaos). Скрипт можно бросить, он сразу начнёт накапливать с нуля. Выглядит кошмарно, но для realtime анализа с выводом в консоль этого достаточно.
Это я всё к тому что часто использую конструкции, которые выглядят странно для неподготовленного человека, но они дают свои плюсы, по крайней мере в моем понимании.
@lindsay,
А что это за язык? Синтах такой же как у С, но это скорее javascript.
Мешать асинхронное с синхронным как правило не принято. И может привести к ошибкам и крашам.
Понятно, почему менаджеры побаиваются. Они же не знают будет это работать in the long run или приведет к проблемам. И им придется отвечать. Это риск.
Однако, случай случаю рознь. Если это работает на практике - почему бы и нет?
Я не знаком с Node.js-style environment.
Вот что предложил GPT.
function fetchNext() {
if (lastBlock >= props.head_block_number) return;
lastBlock++;
golos.api.getBlock(lastBlock, (err, block) => {
if (err) {
console.error(err);
return;
}
});
}
fetchNext();
или
async function fetchBlocks() {
while (lastBlock < props.head_block_number) {
lastBlock++;
const block = await golos.api.getBlockAsync(lastBlock);
// process block
}
}
fetchBlocks();
или
const tasks = [];
for (let b = lastBlock + 1; b <= props.head_block_number; b++) {
tasks.push(golos.api.getBlockAsync(b));
}
const blocks = await Promise.all(tasks);
@mgaft1, Да, это и есть javascript.
По коду от GPT - он предложил как раз то что ожидает работодатель. Если нужен строгий порядок и очередность - рекурсивный или async/await цикл. Если нужен быстрый догон цепочки - Promise.all.
А мне вот сейчас пришел в голову смешанный вариант - пул из N параллельных запросов с контролем количества одновременных запросов во избежание перегрузки ноды. Чтобы не отставать от цепочки и быстро догнать ее, если по какой-то причине (интернет пропал) случилось отставание.
В принципе, я никогда не ставила себе за цель устроиться на работу программером - ну не моё это на кого-то работать, выполнять чьи-то прихоти, терпеть унижения от самодуров-начальников итд. Несколько раз ходила на собеседования туда где по отзывам в сети, работников держат "в черном теле", ходила просто чтобы поиздеваться над кадровиками. подумывала даже устроиться если бы взяли а потом через пару дней устроить им так называемый ghosting с целью отрезвления.
Ну и я привыкла сама определять правила, а не следовать чужим догмам, таким вот эффектом "бунтарства" пронизана вся моя жизнь, я с раннего детства такой была "назло бабушке отморожу уши". Даже мой код - это демонстрация того, что всегда есть другой путь, что можно писать нестандартно, но при этом оно будет работать, выполнять свои задачи и не крашнется на первом же edge‑case.
@lindsay, Насчет "отмораживания ушей" забавно. А насчет программирования - дело ваше. Не хочу вдаваться в детали, так как сам с такого рода программированием не знаком. Но если код для вас работает - то и слава богу.
С точки зрения менаджера - это другой вопрос. Представьте себе, что вы проаботали в организации год, напрограммировали кучу всяких важных узлов, все работает прекрасно. Однако по истечении этого времени поругались с боссом, показали ему средний палец и ушли. Ему нужен кто-то еще. Где гарантия, что этот новоприбывший разберется в вашем коде, а не наломает таких дров, что вся компания отановится? Нет, менаджеру нужны люди, которые работают стандартно,внутри общепринятых правил, так чтобы их можно было бы легко заменить, без ущерба компании (и прежде всего самому себе). 😂
@mgaft1, менаджеру нужны люди, которые работают стандартно,внутри общепринятых правил, так чтобы их можно было бы легко заменить, без ущерба компании
Тут Вы правы. Работодатели ценят прежде всего предсказуемость и точное следование правилам, даже если это делает код более громоздким. И вроде как если поставить себя на их место то вроде всё верно, но с другой стороны как-то становится обидно что тебя считают легко заменяемым винтиком в механизме.
@lindsay,
Если наниматься на службу - это и означает стать "винтиком в механизме" - нужным, но легко заменяемым. Как говориться, незаменимых людей нет, вопрос только в том, сколько будет стоить замена.
Ну а если не хочешь винтиком, то тогда придется нести груз предпринимателя - оплата помещения, оборудования, следование различным государственным правилам и регламентациям, а если потребуется помощь - то придется платить "винтику" в не зависимости от того, получает ли ваш бизнес доход или нет. Кроме того может статься, что какой-то процент наемных винтиков придется нанимать, чтобы удовлетворить конкретную культурно-политическую обстановку. Например, 10% служащих должны быть из меньшинств, которых и уволить будет очень сложно, потому что компании станет дороже суд по дискриминации, чем просто содержание их на пэйроле, даже если они ничего не будут делать.
Но самое главное бремя предпринимателя - это риск того, что ваша идея, или методы её воплощения могут не сработать, и тогда все вложения времени, интеллекта, эмоций, надежд и финансов - пойдут к черту.
Зато если получится - то велика и финансовая награда. 😂
@mgaft1, таланту многое прощается...но честность в конце концов его погубит, потому как никому она не нужна
@nadiyamikhno, Честность - это сложная неоднозначная штука. 😂