Правильно я думал, что предыдущий пост вызовет вопросы : ) Он их вызвал. Обьяснюсь, чего я хочу и почему. Я хочу двух вещей: объектно-ориентированного подхода и повышенной читабельности программы. Эти вещи друг с другом очень связаны, поэтому ниже я не особо буду их разделять.
Возмущение первое связано с порядком аргументов в глобальных функциях и противоестественностью для живого человека принятой в таких случаях записи. В известных мне человеческих языках порядок частей речи чаще всего такой: субъект
, действие
, объект
. Субъект
производит действие
над объектом
. Субъект
(в отличие от многих других субъектов) умеет производить определённое действие
, причём оно должно производиться над объектом
. Переходя к программированию, логично сделать действие
методом субъекта
, и этот метод будет принимать параметром объект
. И программист радостно напишет что-то вроде субъект.действие( объект )
или палец.нажимает( кнопкаМыши )
. Напишет... в счастливом будущем. А сейчас в одном многими (справедливо?) нелюбимом, но очень популярном языке программирования ему приходится писать нажимает( палец, кнопкаМыши )
или нажимает( кнопкаМыши, палец )
— каждый раз в разном порядке. Ну да ладно, это свойство языка, и кое-где солнце светит ярче.
Возмущение второе связано с необходимостью делать так:
$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' )
. Но не выглядит ни в одном из известных мне языков программирования : (
progr
Уф! Неделя активного поиска работы в Москве, кажется, закончилась. Не то чтобы она была сильно сложная, но все-таки по насыщенности превосходит предыдущие на порядок. Вплоть до падения в кресло без сил : )
Краткий итог: 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 еще не передумает брать меня, то пойду к ним. Иначе нужно будет серьёзно думать : )
work
Виртуальная машина — это как компьютер внутри компьютера, среда для запуска программ. В качестве самого известного примера можно привести Java Virtual Machine. С одной стороны, она расширяет возможности программы, с другой — ограничивает. Очень трудно «изнутри» виртуальной машины повредить машине реальной, во всяком случае, гораздо труднее, чем при прямом доступе.
Похоже, что у меня эмоции «работают» поверх RVM. Reason virtual machine.