Как стать автором
Обновить

Комментарии 133

>Если за последний год-два в работе, хобби, литературе и кино ничего кардинально не поменялось, то, скорее всего, в таком неспешном темпе он и будет у вас “работать”.

Ну литература и кино тут, как мне кажется, зря упомянуты, не коррелируют они с прогрессом в проф. сфере. И «не поменялось в хобби» тоже надо бы раскрыть — мало ли, что значит «не поменялось».
В бытность мою начинающим разработчиком я хотел «раздуть» резюме как можно больше. И размещал в нем сведения о своих хобби и прочую не относящуюся к делу ерунду.
Работодатели как-то косо поглядывали на все это, но молчали. И к счастью для меня, нашелся один из них, который бестактно заметил, что у сотрудников, работающих на полную занятость, не может быть столько свободного времени на хобби. Разглагольствуя о хобби можно произвести впечатление бездельника.
Я вряд ли бы удержался в рамках цензурной лексики после такого замечания.
Популярно бы объяснил этому человеку, что то, чем я занимаюсь в свое личное время его не касается, как и не касается то, откуда я это личное время беру, даже если мне для этого приходится спать по 4 часа.
А после бы проследил, чтобы негативный отзыв об этой фирме появился бы на как можно большем количестве сайтов.
Популярно бы объяснил этому человеку, что то, чем я занимаюсь в свое личное время его не касается
Но вы же сами указали это в резюме. Не указали бы, не было бы ни вопросов, ни замечаний. А раз указали, значит, хотели донести информацию, ну а раз донесли, так получите обратную связь.

Я, например, пункт «хобби» в резюме у кандидатов обычно пропускаю, т.к. там почти всегда все стандартно (IT, чтение, автомобили, спорт). Да и пофиг мне, чем человек в свободное время занимается. Я же его на работу беру, а не для личной жизни.
Первая часть (про то чем я занимаюсь) относится к тем, кто спрашивает о хобби а потом из этого пытается строить какие-то теории и делать вывод о проф.пригодности (такие тоже есть).
Вторая (про то, когда я этим занимаюсь и сколько времени трачу) — уже к упомянутому случаю. Ни первое ни второе не должно служить причиной для отказа, если собеседование проводит адекватный человек.
Я все-таки удержался в рамках цензуры.
Но, конечно, объяснил, что не готов отказываться от своей личной жизни ради работы в их компании.

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

Учитывая, что вписаться в двух-страничный шаблон с годами становится все труднее, и каждая строка в резюме на счету — давно уже вычеркнул из него свое хобби. Зачем, если оно не несет смысловой нагрузки?
У меня в конце резюме в одной строчке перечислено: туризм, страйкбол, мотоцикл.
Этого достаточно, хотя некоторые интервьюеры спрашивали «И это всё?» Тогда говорил, что у меня еще и кот есть.
Еще бывает спрашивают: какой мотоцикл, сколько прёт, сколько жрёт, далеко ли ездил )
А зачем это в резюме?
Я просто прочитал на американских сайтах о работе, что так надо ))
Полагаю, на это смотрят по той причине, если у человека нет никаких увлечений и вся жизнь заключается в цикле работа-дом-работа, то он может запросто оказаться алкоголиком, поедателем антидепрессантов, или просто кровопийцей, который будет развлекать себя скандалами и ссорами с коллегами.
У нас может и незачем, а вот на Западе принято это указывать.
А как этим пользуются
Да никак. Просто любят людей увлеченных и с «активной жизненной позицией».
Ну и какой? Сколько жрет? Сколько прет?
Интересно просто. Я сам бывший мотоциклист. Продал мотоцикл потом-что очень заморочено его держать, без гаража и с мотосезоном в три с половиной месяца. Хотя жалею немного.
В личку пишу :)
НЛО прилетело и опубликовало эту надпись здесь
На мое первое и единственное место работы собеседование прошло так (с остальными так и не сложилось):
— Нам нужно сделать в данный момент вот это, а в будущем еще это и это. Сможешь?
Немного подумал.
— Да, смогу.
— Ждем в следующий понедельник.
Но да, это не IT компания :) Но деньги для студента платят нормальные, гибкий график и все дела.
Аналогично!

Видимо, когда у тебя ещё пустое резюме и идут поиски первой работы, то ходишь, пока не наткнёшься на людей, которые в тебя поверят.

Первый раз меня взяли в компании, в которой всё было на PHP, а они хотели замутить проект на mod_perl (да, это было очень давно). Они ничего не знали про mod_perl и специалистов у них таких не было. И вопросы задавать было некому. Они просто спросили меня «ты знаешь»? Я сказал «знаю». «Ты нам подходишь». Вот и весь сказ :-)

Хотя, я что-то подумал… может быть так всегда… Тут недавно позвали (сами!) в одну крупную компанию. Прошёл семь (7!) испытаний. (Задачки надом, по телефону, по скайпу, очно...) И что? Не взяли :-) Я уверен, что они уже после пятого собеседования не сомневались, что я не плохой парень… но… не поверили :-)
Ну вот, мне повезло.:) Работаю, получаю деньги. И главное опыта набрался. И одногруппника туда еще подбил пойти, на пару работаем.
Причем работаем как — нам дают задания, в стиле — вот входные данные, вот что должно на выходе. У программы должна быть одна кнопка — СДЕЛАТЬ. И делаем. Сам придумываем, как будет работать, прорабатываем алгоритм, тестируем. Причем приходим, когда хотим, главное, чтобы дело делалось и 20 часов в неделю набегало.
Правда, я все равно хочу куда-нибудь уйти. Правда, будучи студентом, это сделать сложновато :(
> Обязательно спросите, чем абстрактный класс отличается от интерфейса — как показывает практика, этим вопросом очень легко идентифицировать реальных мидлов.
До сих пор считал себя джуниором (Java 2 года) и тут я понял, что я ошибаюсь.
Нет, ну серьёзно, я считаю, что даже джуниор должен это знать. Оказывается это уже квалификация мидла.
Может имелось в виду, что если вам на собеседовании задают такой вопрос, то значит вас собеседует реальный мидл? :)
НЛО прилетело и опубликовало эту надпись здесь
До сих пор считал себя системным администратором…
Буквально 20 минут назад интервьюировали человека на позицию Head of Development, у которого (судя по CV) 8 лет опыта с C#/C++.

Он не знает, что что такое интерфейс, что такое абстрактный класс и не смог решить задачу на простейший проход по итератору. Также, он не смог толком объяснить что значат терминамы «public, static, void». Хотя, псевдокод алгоритма двоичного поиска выдал сразу же.

Disclaimer
Не индус, британец. (Дело в UK происходит). Индус кстати тоже был, но тоже технически слабо подкован и слишком много воды лил.


Задача — кусок из одной из домашек, которую мне дали в универе (Я джуниор, 2 года опыта, пишу на Ruby, но вполне комфортно работаю с C#/Java, по мне так это полный примитив, но надо было выдумывать на ходу посреди интервью)
Задача
В метод передаётся итератор и объект класса, который реализует интерфейс Checker. Задача — пройти по коллекции и сосчитать количество элементов, которые подходят под данный «Checker object». Проверка идёт через метод check, который, соответственно, выдаёт результат.

interface Checker<E>
{
	bool check(E obj);
}

int countMatchingObjects(IEnumerator<E> en, Checker<E> chk){
	// method should return the amount of objects within the Iterator(Enumerator)
	// that match the rule set within a Checker object
	// interface for Checker class is provided
	
}


А можно как-нибудь по умному сделать задачу? Есть в C# какая-нибудь существующая алгебра энумераторов, чтоб сделать типа.

en.Where(chk.ckeck).Count

Что надо делать если en или checker == null и как правильно это сделать (Code Contracts?)
Нет, для енумераторов нет. Такой код можно было бы написать для IEnumerable, но енумератор придется пробежать «ручками» (собсно для этого он в задании и дается).

Если en или checker == null, то нужно выкидывать исключение (поскольку метод не сможет выполнить свое действие). Как это правильно делать: как угодно. if, code contracts — скорее зависит от вашего проекта и целей. Для тестового задания однозначно хватит if.
Для начала нам понадобится бесконечный список:
IEnumerable<object> Infinite() { while(true) yield return null; }

Теперь можно написать:
int countMatchingObjects(IEnumerator<E> en, Checker<E> chk) {
    return Infinite().TakeWhile(en.MoveNext).Select(en => en.Current).Where(chk.check).Count();
}

Но почему-то язык не поворачивается назвать такой код — «по умному» :)
А почему енумерабль не может просто возвратить переданныйм енумератор
Для этого нужно написать цикл while(en.MoveNext()) — а такой же цикл решает и исходную задачу. Так что если хочется по-индусить в псевдо-функциональном стиле — то надо делать цикл как можно более обобщенным, абстрагируясь от всяких там en.
Я имел ввиду не заводить новых циклов, а сделать энумерабл, который в гетэнумераторе возвращает переданный в конструкторе энумератор. А циклом воспользоваться готовым из каунта.

но это для саморазвития просто. В реальном коде проще конечно нациклить, а е разводить itertools на пустом месте
А, точно, так тоже можно. Но это, к сожалению, целый класс получился — а у меня две строки всего (не считая условия задачи).
Кстати, по поводу преобразования из перечислителя в перечислимое. Ответы на тот вопрос мне не понравились — в первом нарушается контракт перечисления, а в другом слишком много усилий уходит на синхронизацию. Лучше уж вот так сделать:
private static IEnumerable<T> AsEnumerable<T>(IEnumerator<T> tt, List<T> cache) {
    int i = 0;
    while (true) {
        if (i == cache.Count) {
            if (!tt.MoveNext()) yield break;
            cache.Add(tt.Current);
        }
        yield return cache[i++];
    }
}
public static IEnumerable<T> AsEnumerable<T>(this IEnumerator<T> tt) {
    if (tt == null) throw new ArgumentNullException();
    return AsEnumerable(tt, new List<T>());
}
А оно точно будет работать — тейквайл разве не вернет кучу нуллов?
Упс, я ошибся чуть чуть.Там должен быть Select(_ => en.Current), конечно же. Теперь эта магия стала понятнее?
Ну да, но оно хрупкое — базируется на знании, что тейквайл не содержит, например буферизации
Разумеется. Потому-то я такой код и назвал псевдо-функциональным: формально исходная задача функционально декомпозирована, и успешно реализована по частям — но на самом деле, разные части по-прежнему зависят от побочных эффектов друг друга, и декомпозиция исходную задачу лишь усложнила.
Для начала нам понадобится бесконечный список:

Теперь можно написать:

И зачем? Поражают такие люди, особенно на всяких программерских форумах для новичков, когда велосипедят linq-код просто для того, чтобы показать, что они его знают. На обычных циклах даже текста меньше займет, не говоря про понятливость/производительность. А уж про подводные камни наподобие упаковки для значимых типов вообще не хочется вспоминать. Тогда уж:
IEnumerable<T> Infinite<T>() {while(true) yield return default(T);}

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

Кстати, ваши слова про упаковку я вообще не понял — в моем примере никакой упаковки не происходит, и IEnumerable<object> вполне достаточно.
Да, фейл. Прошу прощения *sorry*
А что у вас подразумевается под Head of Development? Начальник пятидесяти разработчиков или тимлид небольшой команды? Т.е. я имею в виду, что если от этой позиции ожидается менеджерство, и чувак когда-то давно имел те 8 лет опыта, то странно задавать такие вопросы. А если второе — то да, косяк.

P.S. Вы, как джуниор, участвовали в собеседовании человека на такую позицию? Да еще и задачи задавали? Что-то не так в датском королевстве :).
В нашем случае — тимлид небольшой команды, который будет также помогать с разработкой. Тоесть для нас в данный момент очень важно, чтобы человек мог и руководить проектом, который у нас через пару недель начинается, так и помогал кодить/продумывать архитектурные решения. Чисто менеджера мы позволить не можем, потому что не всё так гладко в компании идёт.

А про участие меня — за 3 месяца от команды отвалилось 3 девелопера, включая бывшего Head of Development. В итоге осталось трое нас в команде и надо было набирать новых людей. Так как в менеджменте компании программистов нет, то пришлось нам втроём и интервьюировать.
Что касается задач — я не хотел задавать просто вопросы про общие конструкции языка, я хотел чтобы человек писал код. Так как никто не шевелился писать тестовые задания — я на ходу вспомнил это и решил задать. В итоге половина провалила это задание, поэтому я считаю, что это был неплохой фильтр.

P.S. А джуниор — я не знаю. Сейчас в компании забавная ситуация, что я единственный, кто знает Ruby, и, похоже, я буду учить остальных ему же. Очень странное ощущение это, переучивать Senior'ов. :)
> В итоге половина провалила это задание, поэтому я считаю, что это был неплохой фильтр.

как в анекдоте, «не люблю неудачников». На практике IEnumerator не нужен.
Не скажите. Это весьма неплохое задание для отсева. Очень похоже по простоте на fizz buzz. Правда тоже могут найтись те, кто скажет, что такое на практике не нужно.
Да ну, стандартный сфероконь в ваккууме. Именно из «домашки в универе». Можно еще про побитовый сдвиг что-то спросить. С тем же успехом — столь же жизненно, «правда тоже могут найтись те, кто скажет, что такое на практике не нужно». )
Приведите пример не стандартного сфероконя. Так, чтоб а) посмотреть что человек способен писать код в принципе, б) посмотреть, как он его пишет, в) без опускания до конкретных технологий и фреймворков.
IEnumerator как раз вполне конкретен…

Вам сложно выгнать человека с испытательного срока, если он не способен писать код? Что вы будете делать, если студент напишет сферокод, а на боевом обломается?
Может он пытался понять, что такое «amount of objects».
А что в фразе не так?
По контексту это вроде «количество объектов», то есть «number of objects». «Amount» подразумевает что-то более-менее непрерывное, что можно померять, а не пересчитать.
Я проконсультировался с двумя британцами — мне сказали что оба варианта приемлемы :)
Ну это конечно не все.:) Надо уметь список разворачивать:-)

Но в целом меня эта фраза позабавила, я даже принял ее сначала за стеб автора.
Мне кажется, автор имел в виду, что джуниор назовет формальные отличия, а мидл — в первую очередь идеологической различие в назначении этих понятий.
Тут как с свадьбой, многие забывают, что существует развод.
Поэтому иногда собеседование разумно сократить, и смотреть человека на испытательном сроке, когда он перестанет стоять на цыпочках.
Если продолжать аналогию, то существует понятие «гражданский брак»…
Это понятие обозначает официально зарегистрированный брак.
Однако сначала придется как-то выбрать из нескольких кандидатов.
НЛО прилетело и опубликовало эту надпись здесь
гуру, как правило, обладает огромным опытом прохождения собеседований


Это что за гуру такие? Гуру по прохождениям собеседований? :)
Что-то мне кажется, что если вы ищете гуру, то не гуру придет к вам на собеседование, а вы к гуру)))
У гуру может почему-то не быть своего офиса :)
Ну тут еще такой намек на двусмысленность) что гуру устроит компании собеседование, чтобы решить подходит она ему или нет)
Проводя анологию, компании посылают гуру свои резюме, портфолио и cover letters :D
«Почему вы хотите, чтобы я у вас работал?» :D
«Где вы видите свою компанию через 5 лет?»
«Напишите пример алгоритма выдачи мне зарплаты»
Мы бы назвали это не собеседованием, а диалогом. Обе стороны должны понять, что подходят друг другу, что интересны друг другу и в личностном, и в профессиональном плане, т.е. и работать совместно им будет комфортно. Гуру — это по сути человек, которому ставят мета задачу, а пути её выполнения и конкретные задачи он уже ставит себе и команде сам
Всегда считал собеседование не односторонним процессом. Компания собеседует кандидата, кандидат — компанию.
Нормальный специалист подойдет любой компании на нашем рынке, но далеко не каждая компания подойдет ему. Работа занимает большую часть жизни человека (за вычетом сна), потому я всегда подходил к выбору работы, как к поиску своей второй половинки.
По-моему только хомячки идут работать в первую попавшуюся компанию, где хорошо платят.
вы правы, но штука в том, что на интервью вы больше отвечаете на вопросы, чем задаёте их. Права по итогам выбирать работодателя у вас конечно же остаётся.
У гуру как мы думаем больше равноправия в процессе переговоров, и он может задавать даже больше вопросов, чем задают ему :)
Не писать код на бумажке, не спрашивать кем я вижу себя через 5 лет и не давать длинных тестовых заданий?
Это не делает собеседование идеальным.

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

Кроме того, несмотря на декларацию «плясать нужно не от должности», у вас получается жесткое ранжирование людей именно по должности или роли.
НЛО прилетело и опубликовало эту надпись здесь
Прикольная классификация, интересно было читать.
Неожиданное описание синьора. Сам под ними всегда подразумевал и продолжаю подразумевать отличных технарей с тимлидскими качествами. В нашей компании есть такой экземпляр на должности архитектора, а тимлидов, которые непонятно чем занимаются нет.
НЛО прилетело и опубликовало эту надпись здесь
Случай был не в IT, но тоже похожей.

Выходит главный технолог, берет резюме, смотрит на резюме, смотрит на меня, и выдает: «Ты нам подходишь, если не будешь брать воду вон с того шкафа, она моя».
Моё идеальное собеседование походу также было :) Технических вопросов не задавали. Были вопросы типа «как дела?», «Как зовут?» и т.п. После HR менеджера, зашёл ген. дир. компании, спросил знаешь ли html5 (под этим он подразумевал походу умение верстать, а не знание компонентов html5), я ответил «да», тогда он сказал: «принят» на должность php программиста :)

Во время поиска работы, имел дело с тремя кадровыми IT агентствами, одно из них Московское. Честно сказать, уровень их компетенства вообще никакой. Нуль (ноль, нужное подчеркнуть). Вопросы аля как зовут, какой опыт имел, знаешь ли такие то технологии и собственно всё — вы нам подходите, сейчас мы определим компанию где вы будете работать. Ну согласитесь бред? А как же проверка знаний и всё такое. Кадровые агенства работают ради денег и только, но не ради поиска рабочей силы для компании-клиента.

Но были также и собеседования с программистами из тех самых компаний, куда я пытался устроиться. Это вообще туши свет. Каждый из них почему то пытался узнать во мне себя. Приводил какие то заумные формулы пифагора, которые в принципе не нужны. Давали десятиэтажные задачи, которые надо было решать недели 2-3 без передышки (аля сделайте модуль, который делает то и то). Извините, но я ищу работу и мне собственно нету времени решать задачи на 2-3 недели, даже если эта работа на зарплату в 100 000. Потому что у меня денег нет на существование, мне надо срочно куда то устроиться. Мне нечего кушать, платить за квартиру и обеспечивать семью, а Вы предлагаете мне решать задачи на 2-3 недели, после которой меня могут еще не взять. А таких компаний, помимо Вашей, которая даёт эту задачу еще десяток другой. Решать такие задачи просто отказываешься, либо забиваешь. Оно и понятно. А затем эти компании плачутся, что не могут найти себе специалиста (мне лично на собеседованиях все так твердили). Времени решать такие задачи, у меня попросту нету. В ответ один ответ: тогда вы нам не подходите. Всё конечно утрировано, но всё же. Выход всегда есть. Можно, например, посмотреть работы уже выполненные этим человеком и так далее.
Задача компании сделать из джуниора мидла за минимально возможный срок (в идеале за 2-2.5 года).

Если держать человека 2-2,5 года джуниором, то он вряд ли будет дожидаться, пока вы переведете его в мидлы. Активные джуниоры (а он не может быть неактивным, потому что всё, что вокруг него происходит, ему в новинку) редко сидят дольше года в джуниорах.

Мидл-разработчик – это ваша вьючная лошадь, которая будет выполнять большую часть всей рутинной работы и приносить максимальную прибыль. Поэтому для мидла важно быть “трудягой”, а не “звездой” или “классным чуваком”

Это ведь вопрос психологии. То есть описанный вами мидл никогда не станет синьором, потому что он совсем другой человек. По-вашему, синьор рождается звездой, а мидл — это те, кому не повезло.
Активные джуниоры (а он не может быть неактивным, потому что всё, что вокруг него происходит, ему в новинку) редко сидят дольше года в джуниорах.

Вы хотите сказать, что джуниоры часто меняют место работы?
Если они видят, что их бурное развитие в течение года никем не замечается, то естественно они уйдут. И правильно сделают.
Ну тут наверно всё относительно. Но я понял Вашу мысль.

Просто хотел сказать, что бывает (как бы это не казалось вопиющим) джуниоры, максимум джуниор+ собеседует других джуниоров.
Это уже организационный бардак, тут уровень работника уже фактически ни при чём.
>>не задавайте ему вопросы а-ля “почему вы хотите работать в нашей компании”. Ответ вас удивит и расстроит :)
Я думал что все переболели уже, но буквально недавно, сами меня позвали и с порога, без здрасти — «почему вы хотите работать именно у нас?». Старался не расстраивать как мог.
>> Или будьте готовы к тому, что он вместо решения выскажет свою готовность отбить пальцы любому, кто напишет что-либо подобное в реальном проекте.
Такое желание возникает когда в очередной раз просят написать сортировку.
На такие вопросы надо честно брать предложенную ручку, бумажку и писать на ней следующее:
Псевдокод сортировки
array.sort()
Идеальное собеседование существует и применяется часто — тебя просто рекомендуют и собеседование сводится к согласованию условий работы.
«Спрашивать кем себя видит мидл через пять лет – бессмысленно. Через пять лет вряд ли он будет работать в вашей компании.»

а почему, собственно не поинтересоваться целями человека на данный момент.
Не стоит спрашивать потому, что ответ на данный вопрос вам ничего не даст, а зачем вам тратить и своё время и время кандидата понапрасну?
Плюс есть вероятность делать неправильные выводы из серии «человек не строит планов на 5 лет вперёд, а из этого вытекает, что он не строит планы вообще».
Почему не даст? Если человек строит планы, можно узнать, насколько его направление согласуется с нашим. Если он планирует меньше чем на 5 лет вперед, он вполне может ответить «Я так далеко не загадываю, но в ближайший год хочу стать специалистом по ассемблеру архитектуры Z80». Если только вопросы о планах не вызывают у него жуткого протеста про причине того, что ему приходится самому осознавать, что живет он как придется ;)
Хотя бы потому что за 5 лет поменяются планы и компании, и кандидата. А если вам интересно про ближайший год, то про него и спросите :)

Ну и плюс к тому это один из самый «социально-желательных» вопросов, т.е. человек может подумать, что правильный ответ — перечислить технологии вашей компании и сказать, что 20 лет хочет работать у вас, а вы сочтёте его дураком и лицемером.
Мне скорее интересно в каком направлении человек хочет двигаться — например хочет ли он расти в управлении или в технологии, или может сменить вообще свою роль в процессе. И мне кажется что таких вопросов не стоит бояться, а стоит попытаться ответить на него честно. А так у меня складывается образ специалиста, который считает себя мусором, поэтому трепещет что его не возьмут. А по моим ощущениям сейчас есть хороший выбор для хороших специалистов разного уровня опыта.

В принципе, сама по себе реакция на такой вопрос показательна :)
Речь скорее о формулировке вопроса. Ведь восприятие работает именно от формулировки.

Если хотите спросить о направлении развития, то про него и стоит спрашивать, а не о том, кем как и где человек видит себя через 5 лет

Это как вопросы про книги. Можно обсудить, что человек читает, чему научился за последние 6 месяцев. А можно про книгу, которую читает сейчас — ответ может быть совершенно не показательным и вы сделаете неправильные выводы
Так последующие вопросы же не запрещено задавать. Интересно, что именно этот вопрос вызывает столь эмоциональную реакцию.
Я, кстати, не считаю этот вопрос удачным, но в-основном, потому, что он шаблонный и вызывает шаблонную реакцию отторжения (судя по многочисленным репликам). Я бы задал его в более размытом виде — просто как начало разговора о планах. Но с точки зрения кандидата не вижу в нем ничего особенного. Как и в вопросе «почему вы выбрали нашу компанию» — мне кажется, хороший кандидат сначала изучает потенциальных работодателей, знает чем ему придется заниматься в общих чертах и сможет сказать, какие выгоды для себя может найти там.
про компанию тоже дело только в формулировке, человек мог пока ничего для себя не выбирать, пришёл на первый этап — просто познакомится и ждать от него вдумчивого анализа о причинах выбора бывает преждевременно
Опять никто не мешает ему так т сказать
Так чем же абстрактный класс отличается от интерфейса?
Ну, в абстрактном классе можно реализовать некоторые методы, а в интерфейсе только определить, что они должны быть.

Вы примите меня мидлом к себе? Ну пожалуйста :(
Если абстрагироваться от языка, то интерфейс — чистый абстрактный класс: в нём нет ничего, кроме абстрактных методов.

Предложение выше я писал десять минут.
Это называется не «абстрагироваться от языка», а «применительно к языку С++»… В других языках у интерфейса и абстрактного класса есть более существенные различия.
Строго говоря, да. Но зачастую абстрактный класс, все методы которого также виртуальны и абстрактны (=0), называется интерфейсом.
НЛО прилетело и опубликовало эту надпись здесь
С С++ я таки знаком, да. Кстати, не «чистая виртуальная», а «чисто виртуальная», а в отрыве от языка — вообще «абстрактная функция». А дальше — по тексту.
Абстрактный класс должен иметь хотя бы одну чистую виртуальную абстрактную функцию.
, а интерфейс а.к.а. чистый абстрактный класс содержит только абстрактные функции.
Тогда уж, по вашей логике, его надо называть чисто абстрактным классом…
по вашей логике
Вы так говорите, как будто я сам всё это придумал >_>
НЛО прилетело и опубликовало эту надпись здесь
В интерфейсе гарантированно нет реализации соответственно, если какой-то другой класс зависит от интерфейса, мы точно знаем что можем подсунуть ему любой класс, реализующий такой интерфейс. Также в джаваподобных языках отсутствует множественное наследование классов, но есть множественная реализация интерфейсов — таким образом, порождая зависимость от класса мы жестко задаем иерархию в которой должна находиться реализация, а если у нас есть зависимость от интерфейса, мы можем в любую иерархию добавить его реализацию.
Абстрактный класс имеет смысл использовать для обобщения реализации каких-то классов (например «шаблонный метод»), интерфейс для декларирования контрактов между подсистемами
Можно задуматься над названиями. Класс, неважно какой, абстрактный он или конкретный, реализует интерфейс. Как минимум свой, или еще какой-то отдельно объявленный. Интерфейс — это некоторое множество сообщений, которые можно отправить объекту (некоторое множество методов, доступных для объекта), то, как можно обратиться к объекту класса. Класс — это описание объекта.

Отсюда в частности вытекает, что у интерфейса не должно быть полей, и уже далее из этого и предыдущего — что у интерфейса методы абстрактные. Т.е. поскольку интерфейс — не класс, то у него не может быть состояния, следовательно и методы не могут менять состояние (состояние чего? интерфейса? не бывает такого).
Я бы вообще предложил обобщить: интерфейс это описательная характеристика объекта, а абстрактный класс — часть его реализации, имплементальная характеристика. Разница примерно как между стратегией и тактикой.
Вы скорее конкретизировали. Если обобщать, то и класс, и интерфейс (в UML) — это классификаторы (без подробностей, некоторое описание объектов с общими свойствами). Интерфейс — описание поведения объекта, класс — описание множества объектов (у которых в том числе общее поведение, см. features).

Конкретизируя, объект некоторого класса предоставляет интерфейс (к своему состоянию), класс — описание объекта, определяя тем самым контракт. Абстрактный класс — необязательно часть реализации (вообще может не быть реализации). Абстрактный класс абстрактный потому что не может иметь объектов, а не потому что у него какой-либо метод не реализован (это просто конкретный способ сделать класс абстрактным — считается, что нет полного описания — не может быть объекта с «половинчатым» поведением).
Конкретизируя, объект некоторого класса предоставляет интерфейс (к своему состоянию), класс — описание объекта, определяя тем самым контракт.
Извинения, опечатка. Исправление:
Конкретизируя, объект некоторого класса предоставляет интерфейс (к своему состоянию), определяя тем самым контракт, а класс — описание объекта.
Хух, вы меня обнадежили, а то я уже повелся на умные слова и ссылки в первой части и начал было думать, что не понимаю значения слова «контракт» :) Мой ведь подход интуитивный, на опыте основанный, а ваш — академический.
Тот неловкий момент, когда 8+ лет кодишь, а так и не знаешь ответа на вопросы про асбстракции, наследования и прочие интерфейсы, но понимаешь, что всё это есть в проектах и как то без мыслей о названиях пишется и используется.
Честное слово, 3 года назад узнал что использую MVC и 2 года назад что agile-метод разработки. А спросили бы на собеседовании — сказал бы что не знаю такого =(
В итоге выходит: знаешь термины — возьмут, умеешь девелопить — не возьмут.
Знать термины важно для работы в команде и обсуждения дизайна. Да и, для того, чтобы думать о собственном коде и сознательно выбирать более подходящий дизайн.
Я все-таки думаю, что три года назад вы выучили новые термины довольно быстро.
Не так давно появилась новая категория “джунов”, которые, начитавшись на форумах о больших зарплатах айтишников, начинают просить (даже, мы бы сказали, настойчиво требовать) стопитсот денег и массажистку в придачу за возможность лицезреть Его Величество
Хоть бы кто сказал наконец, на какую зарплату может рассчитывать (просить) средний джуниор.
Здесь всё зависит от региона в котором Вы проживаете. Выше его потолка не прыгнешь.
Да хоть бы и Москва-Питер.
Поделитесь с нами вашим cv или профилем на LI, и мы дадим нашу экспертную оценку :)
Гуру – это человек, который в критической ситуации может вытащить проект на себе или принять на себя удар.
Это точно гуру? Я видел, как ищут подобных людей. Говорят, «мы поставим тебя на сложный и важный для нашей компании проект», который по факту провален уже как три года (и ожидают чуда, поскольку сами некомпетентны понять, как проект оказался в заднице). Есть такая поговорка, «непрофессионалы не суются, а профессионалы не высовываются». Если он всё-таки профессионал и в такое полез, то тогда чему удивляться, что он хочет много денег?

В целом статья замечательная. В одном только есть другое мнение — расхлебывать заваренную кашу должны те люди, которые её заваривали. В принципе, это не совсем по статье замечание… сколько по подходу к найму.
НЕМНОГО БУКВ В ЗАЩИТУ СТРОКЕ «ХОББИ» В РЕЗЮМЕ:

Лично мы думаем, что строчка хобби в резюме никому не мешает. если вам не важен какой сотрудник с человеческой точки зрения, то можно не читать, а если важен, то хобби иногда помогают понять на одной ли языке вы общаетесь. если человек любит читать книги, а ваша команда предпочитает активные виды отдыха, то при сомнениях в его кандидатуре вы можете ему отказать и наоборот :)
Странно все это. Я тут немедни прошел несколько интервью. Даже не несколько — а сколько. Никто никогда не спрашивал меня о хобби. Все только и разговоров что о проектах и задачках на бумажках.

Неправильные конторы какие-то я выбираю. Мда.
Моё идеальное собеседование было таким:
==
Директор: у меня один вопрос — какую зарплату хочешь?
Я: Называю сумму в 1.5 раза выше, чем на текущей работе.
Директор: Ну отлично, в понедельник приходи.
Я: Что даже ничего спрашивать не будете?
Директор: Нет. Когда такую зарплату просят, то 100% спец. хороший.
Я (первая мысль, не в слух). Черт, продешевил!
==
Не считаю подход «без вопросов» правильным, но для меня это было «идеальнейшее собеседование» :)
и сейчас у него работаете?
Неа, год проработал и уволился.
Нашли еще одного директора?
:) не, нашел работу на Кипре
тут все было по другому, 2 собеса пришлось проходить: час по скайпу и еще потом полтора часа в Москвовском офисе
Какой бы ты ни был супер пупер гуру, но если ты не можешь написать код на два уровня ниже заявленной компетентности — иди нафиг на уровне phone screen
Обязательно спросите, чем абстрактный класс отличается от интерфейса — как показывает практика, этим вопросом очень легко идентифицировать реальных мидлов.

неужели всё так плохо? Если человек этого не знает, то это вообще не программист (в том языке по крайней мере где такие понятия существуют), это же всегда идет подряд в одном учебнике: Классы — Абстрактные классы — Интерфейсы.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации