code monkey's typewritings

работа :: забавный результат тестового задания

Когда я искал работу, то сделал небольшое тестовое задание для b2b-energo. Позже, во время собеседования с ними, мой потенциальный руководитель посмотрел в мой код и сказал: «А вот это у вас сделано даже лучше, чем у нас».

,

программерское :: oop & literal programming

Правильно я думал, что предыдущий пост вызовет вопросы : ) Он их вызвал. Обьяснюсь, чего я хочу и почему. Я хочу двух вещей: объектно-ориентированного подхода и повышенной читабельности программы. Эти вещи друг с другом очень связаны, поэтому ниже я не особо буду их разделять.

Возмущение первое связано с порядком аргументов в глобальных функциях и противоестественностью для живого человека принятой в таких случаях записи. В известных мне человеческих языках порядок частей речи чаще всего такой: субъект, действие, объект. Субъект производит действие над объектом. Субъект (в отличие от многих других субъектов) умеет производить определённое действие, причём оно должно производиться над объектом. Переходя к программированию, логично сделать действие методом субъекта, и этот метод будет принимать параметром объект. И программист радостно напишет что-то вроде субъект.действие( объект ) или палец.нажимает( кнопкаМыши ). Напишет... в счастливом будущем. А сейчас в одном многими (справедливо?) нелюбимом, но очень популярном языке программирования ему приходится писать нажимает( палец, кнопкаМыши ) или нажимает( кнопкаМыши, палец ) — каждый раз в разном порядке. Ну да ладно, это свойство языка, и кое-где солнце светит ярче.

Возмущение второе связано с необходимостью делать так:
$o1 = new Order(); $customer->addOrder($o1); $line1 = new OrderLine(6, Product::find(‘TAL’)); $o1->addLine($line1); $line2 = new OrderLine(5, Product::find(‘HPK’)); $o1->addLine($line2); $line3 = new OrderLine(3, Product::find(‘LGV’)); $o1->addLine($line3); $line2->setSkippable(true); $o1->setRush(true);
и невозможностью делать вот так:
$customer->newOrder() ->with(6, ‘TAL’) ->with(5, ‘HPK’)->skippable() ->with(3, ‘LGV’) ->priorityRush(); Ну вы видите, да? Второй вариант можно читать. Это почти человеческий язык. Кое-то называет это "Fluent Interfaces", а кто-то — удобным api, но суть не в этом. Суть в том, что это читается почти как предложение (отсюда, кстати, literate programming в заголовке).

А возмущение третье связано с синтаксисом оператора отрицания. Вот что вам приходит в голову при виде записи !string.contains( 'substr' )? Если вы — не машинноговорящий франкенштейн человек, то это нужно читать как «не строка содержит подстроку». Ага! «Йоды магистра речи тайна раскрыта, оказывается, на форте программист старый есть он просто.» Нормальные люди (кроме немцев : ) так не говорят. У них отрицание ровно перед действием стоит: «строка не содержит подстроку». При переводе в машинный язык это должно выглядеть как string.!contains( 'substr' ). Но не выглядит ни в одном из известных мне языков программирования : (

программерское :: оператор отрицания

а вот не встречал ли кто языка, в котором можно вместо !str.contains( 'substr' ) писать вот так: str.!contains( 'substr' ) ?

,

работа :: лытдыбр

Уф! Неделя активного поиска работы в Москве, кажется, закончилась. Не то чтобы она была сильно сложная, но все-таки по насыщенности превосходит предыдущие на порядок. Вплоть до падения в кресло без сил : )

Краткий итог: 7 собеседований (два из них — в defa.ru), два предложения места (в том же defa и в «Аваланш»), один полуотказ Олега Бунина. Почему «полуотказ» — ниже.
Вообще-то искать место я начал ещё в середине декабря. Поиск затянулся, потому что мне хотелось работать в Зеленограде (7 минут до работы — супер!), а с подходящими вакансиями тут негусто. Правда, в первый же день segochka предложил мне пойти к ним в internet-design, и я даже сходил на собеседование. Но что-то насторожило директора, и он решил дать мне тестовый проект. Сразу такого под руку не попалось, потом настал новый год и после-нового-года. В общем, до сих пор ничего не было. И денег тоже уже почти не было.

В итоге пришлось искать в Москве. Все знают job.ru и joblist.ru, но я могу порекомендовать ещё и itpeople.ru — очень приятный сайт.

Первыми в понедельник откликнулись telephone.ru и b2b-energo.ru. (Что любопытно, оба связаны с жж. Про telephone.ru я буквально в тот же день прочёл что-то негативное у neoromantic, а сегодня меня зафрендил некий kibizoid, явно имеющий отношение к второй компании.)

Потом до среды подходящих предложений не было, если не считать вялотекущей переписки с Олегом Буниным, и я уже стал задумываться о том, чтобы в пятницу устраиваться в telephone.ru. Но в среду — непонятно, почему именно в среду — пришло сразу несколько приглашений пособеседоваться. С Олегом, с рекрутерской компанией peopleplus и с defa. В результате четверг получился настолько же позитивный, насколько и утомительный. Все-таки собеседование — это психическое напряжение, а если поверх него наложить поездки по Москве в буквальном смысле из конца в конец, то становится совсем тяжело. Именно тогда я под вечер падал в кресло : )

Но и приятных сторон было полно. Офис Олега очень цивильный и в центре города — на Пушкинской. Peopleplus обитают далеко-далеко на Юго-Западной, но там роскошное здание и не менее роскошное отношение к кандидату, так что я был в восторге. А то, на их тестах я очень неплохо показал себя, восторг только усиливало. Как и вакансия в анонимной, но щедрой западной компании : ) Не менее радостно было и в defa. Пусть их офис и в здании нии, но оформлен очень здорово, да и сама компания известная. Кроме того, она на Савеловской, и туда быстрее всего добираться.

А вот начало пятницы было так себе. Сначала второе собеседование — с техдиректором — в рабочем офисе defa. Он далеко не такой роскошный, скорее наоборот - в индустриальном стиле. И собеседование каким-то хитрым образом показало преимущественно мои недостатки, а не достоинства. Потом общение с Аваланшем, до офиса которого долго и сложно добираться, сам офис будто перенёсся из середины девяностых, а сотрудники компании производят немного странное впечатление. Плюс ко всему директор после нескольких простых вопросов сказал что-то вроде: «Мы тебе сейчас дадим схему нашей БД, ты за субботу-воскресенье разберешься, и в понедельник как раз выходи».

Зато вечер перевесил весь негатив дня. Сначала я решил-таки задачку по sql с собеседования в defa, и понял, что даже в этом чего-то стою : ) Потом оттуда пришло письмо с приглашением работать и очень льстящим комментарием техдиректора. Потом Олег Бунин сообщил, что взял бы меня, но второго места под яваскрипт у него нет. Таким образом одновременно похвалил и решил проблему выбора — все-таки его проект казался рисковым.

Теперь осталось только немного подождать, не согласятся ли буржуины давать мне $1350 за поездки на другой конец Москвы : ) Если не согласятся, и defa еще не передумает брать меня, то пойду к ним. Иначе нужно будет серьёзно думать : )

reason virtual machine

Виртуальная машина — это как компьютер внутри компьютера, среда для запуска программ. В качестве самого известного примера можно привести Java Virtual Machine. С одной стороны, она расширяет возможности программы, с другой — ограничивает. Очень трудно «изнутри» виртуальной машины повредить машине реальной, во всяком случае, гораздо труднее, чем при прямом доступе.

Похоже, что у меня эмоции «работают» поверх RVM. Reason virtual machine.