kika: (Default)
Вспомнил тут историю в контексте другого обсуждения, и решил повеселить публику.

Меня как-то наняли спасать проект с огромной базой кода на С++. Мягкий реалтайм, система управления буровой установкой для горизонтального бурения. Там был странный плавающий баг, который на симуляторе приводил к потере головки, то есть это нельзя было выпускать ни в коем случае. Они к моменту моего прихода искали баг всей командой уже три месяца. Я нашел баг (это было непросто и это оказался наш любимый off by one) исправил его, победно затрубил и запустил симулятор. Через 10 часов потерял головку. Стал искать баг опять. Нашел его снова, неисправленный. Тут Зоркий Глаз начал что-то подозревать и обнаружил 6 (шесть!) копий класса, который отвечал за считывание статуса и подачу команд на управляющую железку. Просто во всех местах где надо было пользоваться API этого класса, им надо было этот API чуть модифицировать и класс просто копировали, называли по-другому, подпиливали API и пользовались.

Кроме того, как выяснилось, железка не умела отвечать сразу нескольким клиентам, поэтому то, что у них все совсем не взорвалось было чистым везением (ну или невезением, взорвалось бы раньше, быстрее бы нашли).
kika: (Default)
8. Если вы собеседуете человека в несколько заходов (в один день или несколько) идите от младшего персонала к старшему, а не наоборот. Даже если в конторе не принято заглядывать начальнику в рот и пытаться ему угодить, все равно лояльные сотрудники будут подсознательно настраиваться на точку зрения начальства, а сотрудники на ножах с начальством будут наоборот, стараться перечить. В результате субъективная оценка качества кандидата превращается в силовую игру внутри компании, а сам кандидат остается сбоку.
В идеале, собеседовать человека должен нанимающий, плюс один-два его подчиненных для "подтверждения совместимости". Более вышестоящее начальство для вежливости может поговорить 15-30 минут с кандидатом, но решения они принимать не должны.
kika: (Default)
Чтобы перенести в dreamwidth всю френдленту, надо при импорте
https://www.dreamwidth.org/tools/importer
указать импортировать список френдов, потом когда задание на импорт встанет в очередь, дождаться выполнения, пойти в http://www.dreamwidth.org/manage/circle/edit и поставить там галочки subscribe у всех, кого вы хотите читать.
Если у вас френдов в ЖЖ много и кликать на всех лень, то в консоли броузера можно выполнить вот это:
document.querySelectorAll("[id^='editfriend_edit_'][id$='_watch']").forEach(function(el){el.setAttribute('checked', 'checked');el.setAttribute('value', 1);})

И потом просто нажать кнопку Save changes.

Я пишу в LJ уже года три через dw на самом деле, просто убрал баннер трансляции из постов, поэтому этого было не видно. Наверное после устаканивания текущей бури в стакане и когда станет понятно что dw нормально справился с всплеском нагрузки, я трансляцию уберу. Не то чтобы я тут сильно подрывал и очень уж отчаянно плевал и уж тем более я не собираюсь в ближайшее время ехать в РФ (делать там совершенно нечего), но просто как-то неаккуратненько что-ли. Пусть меня читают только гебисты с прямыми руками и не крышующие ларьки, у которых дазы банных не "утекают" на рынок.
kika: (Default)
Офигеть, 10 месяцев не писал. Тут возник вопрос в ФБ и поскольку там даже свои посты-то с трудом найдешь, что уж говорить о комментариях, то решил написать сюда, ибо вопрос возникает редко, но регулярно.

Как с моей точки зрения правильно нанимать программистов/девопсов на работу:

0. Правильно составить объявление о найме. Сжато и быстро написать bid и ask. Что надо делать (на самом деле, а не всё на свете + еще немножечко) и что за это предлагается. Что делает компания и где лежат грабли (это важнее чем расписывать какая она leading и какие технологии bleeding). Грабли могут быть технологические (адовое легаси например), организационные (адский режим работы например), финансовые (от последнего раунда осталось полгода runway, и следующий раунд зависит как раз от результатов работы) и так далее. Это все равно всплывет, но тогда, когда вы уже потратите кучу времени. Не надо надеяться что вы "продадите" хорошему программисту (то есть человеку, предположительно хорошо умеющему в рациональное мышление) свою компанию. Если он может проигнорировать какие-то грабли - он придет на интервью как минимум. Если не может - то и не сможет, значит и на интервью не придет. С граблями лучше сгущать краски чем приукрашивать, верьте мне, люди.

1. Читаем резюме. Если идет поток треша, мы что-то не то написали в №0, идем обратно туда. Если говна не больше 80% с этим можно работать, но лучше оптимизировать. Я иногда получал практически 100% выход годных (когда натурально хочется позвать всех) но не знаю как это синтезировать искусственно. Быстро валидируем резюме на непротиворечивость (даты, продолжительности, технологии), потом выделяем интересные моменты (технологии, компании, обучение), причем не обязательно интересные для данной позиции, а просто знакомые лично вам, то есть что можно обсудить на интервью. Резюме русские писать не умеют, причем как не умели 20 лет назад, так и сейчас не умеют. Немного лучше научились оформлять разве что. Впрочем лучше пусть дальше так не умеют как скажем индусы умеют, когда резюме читать вообще смысла не имеет. Обратите внимание на оформление, кстати, если вы просили в ворде, а прислали - пдф, это звоночек. Если вы просили на английском, а прислали на русском или наоборот - это тоже звоночек. Это на самом деле важно, как показывает практика.

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

3. Задаем несколько вопросов как в №2, но по теме данной позиции и копаем вглубь пока лопата не зазвенит. Причем годятся любые вопросы, ответы на которые практически невозможно запомнить всухую. "А вы помните в каком релизе там фундепы внедрили?" Правильный ответ "что-то типа NNN или около того, но потом пришлось обратно всем откатываться, потому что оказывается что фундепы сломали тайпчекер, как оно тесты-то прошло, бгггг". Очень хорошо идут вопросы из резюме кандидата (из №2) но в приложении к технологиям из №3: "а вот вы рассказывали что вы делали ХХХ, а как бы вы сделали тоже самое, но уже с использованием YYY, которое нам нужно?". Тут люди очень часто заводятся и начинают увлеченно "проектировать" ибо чувствуют себя в своей тарелке. Вообще говоря, на этом месте иногда можно и закончить и послать человеку оффер (ну или наоборот), если повезет.
В завершение, если человек декларирует знание английского, то переходим на него и пару технических вопросов обсуждаем на английском.

4. Даем тестовое задание. Лучше иметь несколько на выбор, если ваше "основное" слишком длинное. Но в любом случае тестовое задание не должно быть больше 8 часов при требуемом вами уровне квалификации, а лучше меньше. Идеально - 4-5. Если есть возможность - не говорить кандидату на этапе №2 сколько именно вы рассчитываете займет задание. Просто отделайтесь "небольшое" и попросите его на этапе №5 оценить время самому.
Я стараюсь иметь бюджет на оплату тестовых заданий и плачу по разумной рыночной ставке, чтобы человеку было не обидно и замечено что люди даже за небольшие деньги гораздо внимательнее относятся к выполнению, включается психологический паттерн "работа". Задание даю так, чтобы его можно было сделать за отведенное время аккуратно, без висящих соплей. Стараюсь давать из существующего проекта, либо что-то новое (поскольку заплачено, то не стыдно и использовать будет) либо уже существующее (зато есть reference implementation и можно отдать на глубокое ревью тому, кто писал оригинал). Задание должно быть вырезано из существующего проекта аккуратно и не требовать экзотического тулинга и строго заданных ОС. Человек будет делать задание из дома, а там у него может не быть рабочего окружения, а просто игровой компутер с виндой. Можно дать доступ на EC2 инстанс, где уже все готовое установлено, а потом его просто убить.
Я читал много завываний что вырезать из существующего проекта небольшое изолированное задание очень тяжело, но что-то мне подсказывает что это у людей проблемы с проектированием и управлением проектом. У меня таких проблем никогда не было.
Задача должна быть реальная, делать что-то полезное, а не сортировать массив пузырьком, прости господи.

5. Ревью задания с кандидатом. Почему вы сделали так, а не иначе, что бы вы сделали если бы было больше времени, покрытие тестами, точки интеграции в "большой" проект, то есть обычная рабочая рутина. Посмотреть как человек вертится, как и что предлагает, насколько хорошо оценивает риски, и т.д. Желательно конечно убедиться что задание компилируется, работает и делает что обещано :-)

6. Мой любимый вопрос: "представьте себе что я вам дал миллион долларов и вы можете его потратить на что угодно в области вычислительной техники, что вы сделаете?". Это не решающий вопрос, но много интересного может рассказать о кандидате. А может и нет, но обычно впендюриваю. Бывало что по результатам я усердно гуглил потом и мне раскрывались разные бездны.

7. Никаких, упаси господь, задач из области компутер саейнса, вы программистов нанимаете, а не компутерных сайентистов. Если человек хорошо знает алгебру, логику, теорию категорий, графов, игр - это будет написано у него в резюме.
Никакого программирования в реальном времени на собеседовании, вообще кандидат должен при таком предложении вежливо распрощаться, это бред сивой кобылы (ну, кроме случаев когда надо в боевом режиме так программировать и это соответственно оплачивается). Никакого тестирования "стрессоустойчивости" при этом не происходит, ну что за бред.
Можно порисовать диаграммки на доске если интервью личное.
Если у вас так уж пригорает на тему "формального тестирования", то разработайте квиз с парой десятков вопросов системы "выбор из 4-5 вариантов". Но это пустая трата времени.
Никаких вопросов про пол, ориентацию, семейное положение, возраст, детей, etc. Это правонарушение и даже если вы нанимаете в какую-нибудь условную Руанду, где это не так, все равно ведите себя цивилизованно. Допустимо задать вопрос про командировки, если это требуется.

Нигде не написано в какой момент надо пригласить в офис посмотреть в глаза и поговорить. Это зависит от массы факторов, удаленности, бюджета, etc. Чем ближе к концу тем ниже риск, очевидно. Само очное интервью - это что-то из №2 и №3, но с бОльшим числом людей. Я нанимаю как с очным интервью, так и чисто удаленно и никакой разницы по качеству набора не вижу.

Набираю я хорошо, это по-моему, лучшее что я научился делать за 25 лет в этом вашем IT. К сожалению, я надеялся что научусь большему.

Пост наверное через некоторое время уберу во френдз-онли ибо я тут под своим настоящим именем и незачем давать готовую инструкцию "по прохождению интервью".
kika: (Default)
А что чатик думает о том, сколько в России проживет интернет? В смысле хотя бы какая-то IP connectivity с остальным миром (если можно просунуть хотя бы UDP пакет, то дальше в общем можно справиться).
Или все-таки Жалкие Неудачники Вставшие с Колен не будут связываться и оставят коннективити для "временно не уехавших".
kika: (Default)
1. К разговору о http://kika.livejournal.com/151518.html?thread=2137310#t2137310
Простенький, но иллюстративный примерчик
https://gist.github.com/kofno/f5f34f03895e74727bc9

2. Надо написать некий сервис. Полночи читал что у мироздания есть на эту тему, нашел несколько SaaS сервисов и неплохую библиотеку от ASF (ну и гору плохих очевидно). Похоже что SaaSом обойтись не удастся, у них чуть другой юзкейз, поэтому придется писать на библиотеке, но должно быть несложно. Библиотека, очевидно (это ж ASF), на Яве, следовательно писать надо на Яве. Ну ок, с утра стою в душе и думаю - Clojure или Scala? Пытаюсь сообразить насколько придется освежать когда-то прочитанное. И только сев за компьютер до меня дошло что собственно можно же на Яве-то и написать!11 При этом на Скале я не писал вообще никогда ничего, на Кложе писал всякую муру подзаборную, чисто понять что за язык, а на Яве я как раз писал (ну, правда лет примерно 10-12 назад, ээээ).
kika: (Default)
Читая обсуждение http://ivan-gandhi.livejournal.com/3329246.html и ответы на мой коммент, я вдруг понял почему так тяжело идет. У меня нет никаких проблем барабанить на Erlang'е например, а Purescript, Elm или их идейный отэц Haskell (ну или ML) идет с гораздо большим трудом.

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

Потом как-то программирование на ассемблере превратилось в программирование на С, но компиляторы для этих микропроцессоров были таковы, что регулярно генерировали последовательности типа

mov bx, ax
mov dx, ax
mov bx, dx
mov ax, bx

Потому что так у него оптимизатор работает, видите ли. Ну или еще почему. И надо было компилировать в ассемблерный листинг, читать его и руками чистить от этого мусора, потому что иначе в ПЗУ не лезло.

А в универе учили как на Фортране ряды Тейлора вычислять, что тоже не прибавляло.

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

Нужна книжка или статья "Функциональное программирование для недохардверных недоинженеров". Реквестирую у мироздания.
kika: (Default)
На короткий консалтинговый проект нужен subj. У нас есть заказчик, который нанял индусов, которые запороли репозиторий, создав в нем 100500 бранчей, кучу брошенных на полдороги мерджей и whatnot. Надо взять это в руки, починить, привести обратно в мерджащееся состояние, выяснить какие бранчи таки нужны, какие нет, и т.д. Почасовая оплата (you name the price). Расположение неважно, важна квалификация. Код в репозитории на яве. Классический такой кровавый энтерпрайз.

Если у вас в багаже есть ява (томкат, джбосс, вебсфера), питон, линукс и желание работать в девопсе (собственно продукт моего подразделения - это готовые CI/CD окружения для разработки страхового энтерпрайза на яве) то возможно долговременное сотрудничество. $2500-$3500/mo, либо в офисе (Питер, Минск, Одесса, Рига) либо удаленно. Трактор потенциально возможен. Командировки в вышеперечисленные офисы и штабквартиру в СФ.

Резюме и почасовую ставку - kika АТ kikap ДОТ com
kika: (Default)
Ну вот как так можно написать, а? С той стороны приезжает JSON, я его парсю, нахожу в нем 'command', который 'exit' и в отладочной печати вижу "Now exiting the hive", но не вижу "Listener exits". И это нынче один из самых модных языков для разработки.
Read more... )
kika: (Default)
Я что-то не втыкаю, прошу помощи зала. Я хочу хранить JSON объекты в какой-нибудь простой базе, при этом не хочу руками заводить индексы. Хочу чтобы база сама парсила объекты и если в нем есть какой-то ключ, то по этому ключу заводила бы сама индекс. То есть я скажем пишу туда { name: "Vasya", surname: "Pupkin" }, и она заводит два индекса, добавляю в какие-то объекты birthday: "02/20/1969" - она создает третий индекс. Объектов - ну максимум десятки тысяч, то есть в принципе все можно держать в голове. Хочется без тяжелого рантайма, инсталляций с триллионом prerequisites и прочего девопс-кошмара.

В принципе это наверное можно соорудить вокруг Редиски. Наверняка почти любая RDBMS с этим справится тоже. Но хочется избежать "сооружения" и не хочется таскать за собой постгресс с кучей зависимостей или мускль со своими капризами.

Можно это соорудить вокруг Дивана (Кауча), если написать внешний кауч-процесс, который будет следить за новыми объектами и добавлять индекс при необходимости. Наверное я так и сделаю, если не найду ничего лучше, Кауч хотя бы заметно проще большинства RDBMS по части зависимостей, но все равно надо лепить горбатого вокруг. Зато хорошая репликация достанется бесплатно.

Или я извращенец и никому это не надо?
kika: (Default)
Cause:
Due to case-insensitivity in the PCB layout tool used, the schematic nets Pb/PB and Pr/PR are actually shorted together on the PCB so they do not match the schematic.
kika: (default)
Второй акт трагикомедии "И за это меня тоже не уволят": http://roem.ru/2013/12/20/badpr88041/
Первый акт был http://kika.livejournal.com/135084.html

Я там прокомментировал в стиле роема, но тем не менее вопросы актуальны

Безмозглые пиарщики это не интересно, а интересно другое: мейлру публичная компания же ведь, да? Я не знаю требований к публичным компаниям в России, но в Штатах одно из требований SOX это внедрение change control procedures как составной части IT controls (ITIL, вот это вот всё, боже как я всё это ненавижу, кровь, кишки, сделайте мне развидеть это, ищу работу в стартапе).

Ну очевидно, имхо, что для почтового сервиса ручное внесение (или изменение алгоритма автоматического внесения) чего бы то ни было в спам лист - это одно из самых серьезных изменений, которые можно внести в систему вообще. Два вопроса:
1. Есть ли аналогичный SOX'у закон в России?
2. Знают ли подписчики/покупатели MLRYY о творящемся п-це?
3. Bonus track: а если узнают?

Ну то есть неленивая особь может перевести выдачу Артамоновой в фейсбук на английский и послать (веером по базе) в техкранч, пандодейли, вот это всё.
kika: (default)
Дима "Начосы" Быдлов всячески агитирует за профсоюз как средство защиты интересов профессионалов. Вот что значит настоящий русский интеллигент - у него ложные друзья переводчика существуют даже при переводе с русского на русский. Если союз профессиональный, то значит в нем состоят профессионалы! "А это, Петька, наука логика!"
http://avmalgin.livejournal.com/4157481.html?thread=216962857#t216962857

Я вот сколько раз не прочитаю такое скудоумие, все никак в толк не возьму - а почему у профессиональных программистов нету нигде профсоюза? Может они просто пока недостаточно профессиональны?
kika: (default)
злой МГТС отобрал у меня домашний телефон (за академическую неуспеваемость неуплату) и восстанавливать его на месяц как-то глупо, имхо.

что сейчас считается кошерным способом обрести приличного качества интернетик в москве? если это мобильное решение и оно еще будет работать в НН, то совсем хорошо.
у меня вот в кровавом пиндостане есть коробочка MiFi от верайзона, которая практически в любой точке покрытия этого верайзона раздает совершенно кошерный интернетик мегабит в 5 и больше. вот что-то типа такого бы.
kika: (default)
Bad news:
SFO->SVO 01/07/2014

Good news:
SVO->SFO 02/08/2014
kika: (default)
Почитал http://users.livejournal.com/_winnie/407870.html и вдруг осознал что никогда в жизни не использовал svn. Было несколько раз когда просто чекаутил из чьего-то публичного репозитория и на этом всё (то есть буквально - ничего кроме svn co не использовал).
Как-то сразу с cvs переехал на hg, а потом на git, но гит я как-то еще не освоил.

Кстати, а если ли чего-нибудь интересненькое? Как-то вот была вспышка - Hg, bzr, darcs, потом git - и всё, конец истории.
kika: (default)
"свобода слова не обозначает право пропаганды"

http://object.livejournal.com/1703703.html?thread=34728471#t34728471
kika: (default)
Сам пользую услугами финской почты, когда надо бумаги отправить. Из Петрозаводска письмо до Финляндии идет месяц, из ближайшей финской деревни 2 дня. Но это еще ладно, приграничные поселки уже готовы к финской системе централизованного отопления подключиться :)
http://nl.livejournal.com/1228300.html

Я так понимаю, что любимое Великое Failed State занялось имплементацией очередного анекдота, теперь про китайско-финскую границу? В мирном варианте, без войны.
kika: (default)
То есть про Лоткову. Конечно нехорошо что блондинке дали трешечку за то что она постреляла в каких-то гопников. Так что блондинка конечно права (просто потому что блондинка). Но.

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

Profile

kika: (Default)
kika

January 2017

S M T W T F S
1234567
89 1011121314
151617181920 21
22232425262728
293031    

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Oct. 24th, 2017 12:31 am
Powered by Dreamwidth Studios