Re: Как я провалил этой весной
От: Gradient http://www.x-trips.com/
Дата: 22.06.11 07:37
Оценка: 6 (4) +1 -1 :)))
Здравствуйте, z3d, Вы писали:

z3d>... Опыт больше 5 лет. Немного ленив....

z3d>....Дали тестовое задание. Сделал его. Обещал сделать за 2 дня, реально сделал за 3, ....

С 5+ годами опыта тратить три вечера на тестовое задание при неспешном поиске работы? И это еще называется "немного ленив"?
-----
Любимая фраза физика-теоретика: "Вот видите, мы ошиблись всего лишь на порядок".
Re: Как я провалил этой весной
От: divergo  
Дата: 22.06.11 04:54
Оценка: 2 (2) +2 -2 :)
Задание на 2-3 дня, которое ни о чем не говорит???
+ вопросы по паттернам
+ join-groupby-having прораммисту с 5-и летним опытом
= ф топку

Спасибо, напомнило не делать тестовых заданий, не будучи уверенным в желании там работать.
Re[18]: Как я провалил этой весной
От: avpavlov  
Дата: 13.07.11 10:59
Оценка: 1 (1) -3 :)
U>1) В вопросах цель подменена средством. Нет такой задачи применить join к таблице, есть задача на основании двух таблиц получить третью отвечающую определенным требованиям.

Если ты не знаешь джойны, то ты не сможешь решить задачу, ни мою ни свою.

U>2) При решении реальной задачи всегда есть и таблички, для которых пишется запрос, и Sql viewer, и гугль,


Я тебе наверное скажу новость, но SQL не прощает такого подхода. Если ты не понимаешь как работает запрос, то всё закончится тупым подбором каких-то магических операторов, которые на текущей тестовой базе дадут правильный ответ. И неправильный на продакшн.

U>3) В вопросах имеется куча экзотики, мало применимая или и вовсе бесполезная на практике.

U>select * from t1, t2

ОФИГЕТЬ

U>Т.к. я не припомню ни одной реальной задачи, в которой left join или right join был бы реально нужен. Вместо inner join для меня удобнее и понятнее использовать выборку из двух таблиц со связыванием их через условие.


ОФИГЕТЬ

U>Так что может и быть join'ы это действительно тоже, что у указатели в C, но на практике они нужны точно также как указатели в C#.


ОФИГЕТЬ

U>Активно использую Sql около 5 лет, но на большинство ваших вопросов я бы не ответил. Объясняю почему:


Вот собственно от таких как ты мы и защищаемся при наборе, твой пост добавлю в избранное, буду постить в ответ на "зачем спецу с 5летним опытом дают решать задачки".
Re[4]: Как я провалил этой весной
От: avpavlov  
Дата: 09.07.11 05:49
Оценка: +3 -1 :)
D>... и опытные спецы, понимающие, что знание тех. деталей — это последнее, что определяет подходит ли человек на позицию.

Опытные спецы неспособные ответить на простейшие вопросы? А в чём тогда заключается их опыт?
Re: Как я провалил этой весной
От: barlock  
Дата: 21.06.11 13:21
Оценка: 1 (1) +3
Здравствуйте, z3d, Вы писали:

Ты все сделал правильно, был самим собой.
Если бы ты пошел, то они бы не испытали разочарования, а то бывает на собеседовании человек готов офигенно, куча вариантов решения, а в работе ленив, туповат.
Не оставляй работу на субботу, а секс на старость
Re[17]: Как я провалил этой весной
От: Undying Россия  
Дата: 13.07.11 04:34
Оценка: 1 (1) +1 -2
Здравствуйте, avpavlov, Вы писали:

A>Мы про СКЛ говорим? Всё нижеперечисленное применяется к кандидатам, которые заявляют в своём резюме хорошее знание СКЛ.


Активно использую Sql около 5 лет, но на большинство ваших вопросов я бы не ответил. Объясняю почему:

1) В вопросах цель подменена средством. Нет такой задачи применить join к таблице, есть задача на основании двух таблиц получить третью отвечающую определенным требованиям.

2) Я не стремлюсь запомнить и соответственно не помню тонкости sql, т.к. это совершенно не нужно для решения реальных задач. При решении реальной задачи всегда есть и таблички, для которых пишется запрос, и Sql viewer, и гугль, и ранее написанный код. Поэтому если что-то помнишь смутно или в чем-то сомневаешься, то уточнение занимает от силы пару минут.

3) В вопросах имеется куча экзотики, мало применимая или и вовсе бесполезная на практике.

select * from t1, t2

Я достаточно часто использую запросы вида select accounts.client_id, clients.client_name, accounts.login from accounts, clients Where accounts.client_id = clients.client_id и соответственно если меня неожиданно спросить может даже вспомню, что этот запрос возвращает (хотя могу и не вспомнить). Но я никогда не использовал выборку из двух таблиц без условия и не представляю себе задачу где бы это могло пригодиться.

select distinct * from t1, t2

Только сейчас узнал о существовании distinct'а в sql'е. Это, конечно, минус к моему sql'ому образованию, но решение реальных задач от этого никак не страдало, т.к. distinct это по сути урезанный по возможностям вариант group by.

A> На мой взгляд джойны это из разряда указателей в языке С, некоторые никогда не смогут понять как это работает (не знаю почему). Это азы СКЛ и если человек пишет в резюме 5 лет SQL и не может на эти вопросы ответить, то просто рискованно его брать.


Пять лет назад я мог ответить на вопросы по join'ам. Сейчас на память даже синтаксис не вспомню. Т.к. я не припомню ни одной реальной задачи, в которой left join или right join был бы реально нужен. Вместо inner join для меня удобнее и понятнее использовать выборку из двух таблиц со связыванием их через условие.

Так что может и быть join'ы это действительно тоже, что у указатели в C, но на практике они нужны точно также как указатели в C#.
Re[2]: Как я провалил этой весной
От: alf_kadett  
Дата: 08.07.11 23:00
Оценка: 6 (1) +1 -1
Здравствуйте, divergo, Вы писали:

D>+ join-groupby-having прораммисту с 5-и летним опытом


Так не сделал же. Тривиальная вещь, но очень хорошо отсеивает соискателей.
Re[7]: Как я провалил этой весной
От: Undying Россия  
Дата: 11.07.11 05:17
Оценка: 4 (2) +1
Здравствуйте, avpavlov, Вы писали:

U>>В умении решать реальные задачи.

A>Если у спецов проблемы с простейшими вопросами, то как они решают задачи?

Ключевыми навыками разработчика являются:

1) Способность понять реальную задачу, т.е. умение понять что надо делать и зачем делать.
2) Способность понять какие ситуации надо обрабатывать специальным образом
3) Способность написать принципиальный алгоритм обработки ситуаций.

Знания о том как принципиальный алгоритм положить на конкретную технологию являются второстепенными, т.к. даже если разработчик чего-то не знает, то это элементарно гуглится.
Re[17]: Как я провалил этой весной
От: divergo  
Дата: 13.07.11 08:57
Оценка: 3 (1) +1 :)
Примитив.
А если бы Вам пришлось набирать водителей?,
Вы бы для начала попросили их проехаться на роликах, затем на велосипеде,
затем посадили в авто и спросили где педаль тормоза — а где сцепления
и какая последовательность переключения передач
до езды бы у вас не дошло — никто бы не прошел.
Как я провалил этой весной
От: z3d  
Дата: 21.06.11 11:10
Оценка: 1 (1) +2
Коротко напишу, как я на половину провалил собеседование этой весной. Может кому и интересно будет. Хотя в целом история ни о чем, мастодонтам будет неинтересно.

Я типичный средний программер на .net, веб-разработка, БД, сишарп. В основном внутренния автоматизация разных крупных компаний. Опыт больше 5 лет. Немного ленив. Опыт, хочу я того или нет, но поднакопился маленько.

На старом месте задолбали маразмы, пошел пособеседоваться. Вдруг, думаю, найду компанию мечты. Офис у новой компании был рядом с домом, так что это уже пол мечты. Дали тестовое задание. Сделал его. Обещал сделать за 2 дня, реально сделал за 3, правда в те дни у меня были сторонние отвлекающие факторы, но я про них не сообщал, не оправдывался, думаю собеседователи много отмазок слышали от кандидатов, проще в такой ситуации промолчать. Решение не усложнял и не делал универсальным, наоборот делал по минимуму, так как обратного не просили. Поэтому вышло все просто, как потом сказал собеседовавший меня архитектор: "По нашему тестовому заданию конечно ничего не оценишь".

Потом задавали вопросы про паттерны и популярные сторонние библиотеки. К собеседованию я совсем не готовился, и безработица не поджимала, поэтому на большинство вопросов честно отвечал: "С этим не работал, слышал, читал только для ознакомления". Как всегда попросили написать на бумажке синглтон, ну и я не вчера родился, написал конечно. Хотя отсутствие творческого подхода и штампы на собеседовании меня разочаровали маленько. Людей конечно понять можно, кучу народа надо отсмотреть. Попросили решить задачку на SQL с чем-то из серии join-groupby-having, я не решил и не сильно пытался напрягаться. Ощутил, что своим легким пофигизмом разочаровал немного собеседовавших. Хотя мужики в целом нормальные.

Было правда ощущение, что я немного раздражал менеджера. Это меня в свою очередь немного напрягло.

По итогам собеседования предложили денег меньше, чем я просил и меньше, чем имел на старом месте. Я отказался и остался на старом месте разгребать наши местные маразмы. Работу мечты не нашел. Конечно пытаюсь самообразовываться в свободное время, но двигаюсь немного в сторону от корпоративной автоматизации.
Re[7]: Как я провалил этой весной
От: SE Украина  
Дата: 10.07.11 07:52
Оценка: 4 (1) :)
Здравствуйте, __kot2, Вы писали:


__>и проведение собеседования это просто часто повод поболтать с кем-то, познакомиться поближе, с возможно интересным человеком, далеко ведь не случайным — он проходит предварит отбор по резюме. это ж не гопник с остановки.


Пару-тройку лет назад, в самый разгар кризиса в срочном порядке набирал я людей на проект. Это было время, когда конторы сливали неликвид, в том числе кадровый, а профи сидели тихонько по своим хлебным местам и посмеивались.
Команду мы таки набрали, и команду хорошую. Но три четверти кандидатов, включая людей с длительным опытом работы, в профессиональном плане были такими, что лучше бы я гопников с остановки собеседовал. Жаль потерянного времени.

С другой стороны, три десятка собеседований за три недели и сотня просмотренных резюме прибавили мне здорового цинизма.
Re[3]: Как я провалил этой весной
От: divergo  
Дата: 09.07.11 04:18
Оценка: 1 (1) +1
D>>+ join-groupby-having прораммисту с 5-и летним опытом

_>Так не сделал же. Тривиальная вещь, но очень хорошо отсеивает соискателей.

Таки да, если цель уменьшить поток — это способ.
Не пройдут вчерашние студенты и опытные спецы, понимающие, что знание тех. деталей — это последнее, что определяет подходит ли человек на позицию.
Нет желания выполнять тестовое задание -> нет сосредоточенности -> ошибки в результате.
Re[7]: Как я провалил этой весной
От: SkyDance Земля  
Дата: 10.07.11 23:29
Оценка: 1 (1) +1
A>Если у спецов проблемы с простейшими вопросами, то как они решают задачи?

Хорошо решают.
Ответы на все простейшие вопросы есть в интернете -> 5 минут гугла — достаточно. А вот с более-менее сложной задачей всё совсем не так.
Re[20]: Как я провалил этой весной
От: SkyDance Земля  
Дата: 12.07.11 23:22
Оценка: 1 (1) +1
FD>Трудно себе представить, какие плюсы могут быть у первых двух. Скорее наоборот — на практике много раз приходилось переделывать структуру таблиц из первых двух способов в третий.

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

Но жизнь штука разнообразная. Во многих системах менеджмента серверов (в т.ч. виртуальных) в таблицах хранятся performance counters — выборки/семплы. Разумеется, в tiered виде (т.е. каждые отсчеты каждые 5 секунд, затем поминутно — только 1 сутки, далее — усредненные почасовые за месяц, далее — дневные за год и т.п.). Выборка требуется по CPU (желательно поядерно!), RAM, disk space, network traffic/bandwidth consumption (по разным классам трафика, и по направлению — входящий/исходящий). Это для физических машин. У виртуальных есть эти и несколько других. У машин на Linux — есть добавочные свои счетчики, на Windows — свои. С точки зрения теоретической правильности, следует завести большущую таблицу с семплами, ключом в ней будет ID сервера + ID счетчика + дата/время семпла. Итого — от 5 до 40 счетчиков.

Но!
Имея всего-то 930 серверов (положим, 30 реальных и по 30 виртуальных на каждом — это вполне нормальная density для многих виртуализационных решений), надо каждые 5 секунд писать по 4.650-37.200 семплов, или от 930 до 7.440 в секунду.

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

Так вот, о чем это я. О гибкости мышления: какими бы сильными не были догмы, забитые вам в разум или даже подкорку, нельзя им тупо следовать.
Re[2]: Как я провалил этой весной
От: avpavlov  
Дата: 30.06.11 21:10
Оценка: +2
D>+ join-groupby-having прораммисту с 5-и летним опытом
D>= ф топку

Т.е. главное где-то тупо стаж набить в 5 лет, а потом всех в топку посылать, кто попытается проверить, что кандидат хоть что-то умеет?
Re[8]: Как я провалил этой весной
От: avpavlov  
Дата: 11.07.11 07:04
Оценка: +1 -1
U>2) Способность понять какие ситуации надо обрабатывать специальным образом

Вот этого без реального опыта никак не достичь. А реальный опыт откладывается в голове реальными знаниями

U>Знания о том как принципиальный алгоритм положить на конкретную технологию являются второстепенными, т.к. даже если разработчик чего-то не знает, то это элементарно гуглится.


Детский сад какой-то. Мы про математика говорим или программиста? Это для математиков всё заканчивается, когда они доказали принципиальную возможность чего-либо, а вот программисту нужно положить это на конкретную технологию, и это ни хрена не является второстепенным.

U>то это элементарно гуглится.


Обычно такие самоуверенные "спецы" гуглят уже после того, как говно случилось (см. п2 из своей программной речи). И хорошо если оно случилось у тестировщиков, а не на продакшн.
Re[20]: Как я провалил этой весной
От: avpavlov  
Дата: 12.07.11 20:58
Оценка: +2
FD>из которых правильный только последний (нормализованный).

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

Хочешь продолжить спор — ступай в БД
Re[16]: Как я провалил этой весной
От: avpavlov  
Дата: 12.07.11 07:28
Оценка: 3 (1)
U>Можно парочку примеров вопросов, которые вы задаете на собеседовании?

Мы про СКЛ говорим? Всё нижеперечисленное применяется к кандидатам, которые заявляют в своём резюме хорошее знание СКЛ.


I) По телефону:

1) Перечислите виды джойнов?


Засчитывается просто перечисление через запятую, отличия одного от другого не требуются, но если правильно назвали, то это плюс.

Если лефт джойн был назван, то дополнительный вопрос

2) В таблице "Города" 10 записей, в таблице "Люди" 100 записей.
Таблица "Люди" ссылается на "Города" и город известен для каждого человека.
Сколько записей будет в "города лефт джойн люди по правильному условию"


С ответом не тороплю, повторяю сколько попросят. Если многократно настаивают на расшифровке "правильного условия" и требуют имён колонок — плохой знак.

"100" принимается за правильный ответ. "от 100 до 109" — это уже просто волшебный кандидат.

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

II) Личное собеседование

Если кандидата пригласили на личное собеседование, и у меня помечено что, например, про левый джойн он не ответил "ой я забыл/волновался/устал" и на личном собеседовании выясняется, что он даже не попытался освежить свои знания — очень плохой знак.

На личном собеседовании даётся листок с 8мью вопросами, ответы кандидата разбираю вместе с ним по мере написания, если ошибся, то пытаюсь намёками подтолкнуть к правильному решению (привожу контрпримеры, или прошу расписать резалтсет и т.п.) — если исправил, то хорошо. Из 8ми вопросов всего два являются обязательными, незнание которых является поводом прекратить собеседование. Остальные скорее простой способ проверить глубину текущих знаний.

Обязательные вопросы

1) Таблицы t1 и t2 заполнены следующими данными (тут нарисованы таблицы данных 1..5, 1..10):

a) Сколько строк будет выбрано в результате следующих запросов:

select * from t1, t2
select distinct * from t1, t2


2) Есть таблица городов и таблица клиентов. В таблице клиентов есть поле, ссылающееся на таблицу городов. Эта ссылка необязательная, т.е. не для каждого клиента известен его город. Также, не каждый город имеет ссылки из таблицы клиентов, т.е. не в каждом городе есть клиенты. Известно, что в базе на данный момент 100 городов, из них 20 городов не имеют клиентов. Также, в базе 1000 клиентов, и для 500 из них город неизвестен. Сколько строк вернут следущие запросы:

select * from City inner join Client on City.id = Client.city_id
select * from City left outer join Client on City.id = Client.city_id
select * from City right outer join Client on City.id = Client.city_id
select * from City full outer join Client on City.id = Client.city_id
select * from City, Client where City.id = Client.city_id


Если кандидат даже с подталкиванием не может ответить на эти вопросы, то смысла продолжать нет. На мой взгляд джойны это из разряда указателей в языке С, некоторые никогда не смогут понять как это работает (не знаю почему). Это азы СКЛ и если человек пишет в резюме 5 лет SQL и не может на эти вопросы ответить, то просто рискованно его брать.

Когда закончили с листком (у действительно опытных это занимает менее 10 минут), далее просто проверяю способность кандидата рассуждать, спрашивать, обосновывать и т.д. — прошу спроектировать несколько таблиц, связи между ними, почему так, а не этак, какие операции будет удобно делать, а какие неудобно, что нужно сделать, чтобы и эти было удобно ну и т.д.

--------------------------------

На самом деле мы никогда не ищем чистых СКЛников, а всегда Ява+СКЛ, так что есть ещё секция про Яву, но она построена на схожем принципе — 1-2 вопроса по телефону, небольшой вопросник на собеседовании и свободная беседа.

Телефонное собеседование занимает от 20 до 40 минут (в зависимости от словоохотливости кандидата), личное собеседование — 2-2.5 часа, то же в зависимости от кандидата. И телефонное и личное собеседования, и их длина заранее оговаривается с кандидатом, так что если кому-то не нравится длина собеседования — они могут отказаться и не мучать себя.
Re[28]: Как я провалил этой весной
От: avpavlov  
Дата: 14.07.11 13:29
Оценка: 3 (1)
B>Красавчег пишет что он пять лет писал этот ваш SQl. Про джоинты он ничего не писал.

Ну вот тут и поспорили — я утверждал, что 5ний опыт на СКЛ без джойнов — это простейшие КРУД операции, на знание СКЛ не тянет.

Аналогия — 5 лет на С++ не используя классов, структур, заголовочных файлов и вся программа в одном файле — да так тоже можно писать, но называть себя человеком с хорошим знанием С++ и обижаться, что кто-то поставит это под сомнение — ну самому не смешно?
Re[5]: Как я провалил этой весной
От: FlamingWind Россия  
Дата: 08.07.11 11:49
Оценка: 1 (1)
A>>Специалистам — тогда вообще полный бред, заниматься любимым программированием в 100 раз интереснее, чем проводить собеседования.
__>а почему тогда программисты читают rsdn, когда они так любят свое программирование? вы будто с марса появились, будто никогда с проблемой отлынивания от работы не сталкивались. или может она программистов не касается? нет, конечно проводить собеседование это как бы сложно. но ведь достаточно просто сидеть и разговаривать с кандидатом о какому-нибудь вопросу пару часов, проще всего — по тому вопросу, сем сейчас занимаетесь и пусть он рассказывает вам то, что вы и так знаете. а там, глядишь, обед.

Не знаю как у вас, но в серьезных не гос. фирмах все равно есть некий график выпуска продукта. При этом именно соблюдение данного графика является решающим фактором. Т.е. если прогер успевает реализовать запланированные фичи и пофиксить все баги к определенному времени, то особых претензий к нему от руководства не будет, даже если окажется, что 70% из запланированного времени он читал раздел "за жизнь" на RSDN. Таким образом, программисту гораздо более интересней почитать тот же форум, чем слушать тупняк очередного кандидата... Более того, как вам написали, даже программирование (выполнение своих прямых обязанностей) более интересная задача, чем проведение собеседований.
Re[5]: Как я провалил этой весной
От: SE Украина  
Дата: 10.07.11 09:04
Оценка: 1 (1)
Здравствуйте, avpavlov, Вы писали:

D>>... и опытные спецы, понимающие, что знание тех. деталей — это последнее, что определяет подходит ли человек на позицию.


A>Опытные спецы неспособные ответить на простейшие вопросы? А в чём тогда заключается их опыт?


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

Некоторые программисты даже ручкой шариковой разучились писать, но это не показатель их безграмотности. Просто практики в нужной базовой области долго не было — на работе другие задачи совсем решаются, а не те, что на собеседованиях спрашивают.
Re[9]: Как я провалил этой весной
От: Undying Россия  
Дата: 11.07.11 08:47
Оценка: 1 (1)
Здравствуйте, avpavlov, Вы писали:

A>Лёгкие решать западло, трудные на собеседовании решать тоже как-то мало кто рвётся.


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

A>Получается остаётся только верить резюме и хорошо подвешенному языку?


А побеседовать о предыдущем опыте человека не судьба? Нужен вам, к примеру, разработчик для написания сложных алгоритмов, так спросите у человека какие сложные алгоритмы он реализовывал и по какому-нибудь из них детально побеседуйте. Такой метод говорит о человеке намного больше нежели тестирование или ответы на примитивные вопросы на собеседовании.
Re[9]: Как я провалил этой весной
От: dmz Россия  
Дата: 23.07.11 08:36
Оценка: 1 (1)
G>Если бы это было правдой, то не существовало бы вакансии С++ программист, Java программист итд. Искали бы просто абстрактных программистов. Одна вхождение в новую технологию занимает ненулевое время.

Де-факто так и есть, и кое-где так и делают.
Re[4]: Как я провалил этой весной
От: elmal  
Дата: 24.06.11 14:51
Оценка: +1
Здравствуйте, HolyNick, Вы писали:

HN>Да и если ты пришел с пофигизмом на собеседование не значит , что ты что-то тренируешь

Это зависит от адекватности собеседования . Если собеседование проходит как диалог о проектах, где ты рассказываешь о своих решениях, о своем опыте решения таких задач, о проблемах, которые происходят и тому подобное, а тебе рассказывают о том, как делают эти задачи у них — вполне себе тренируются навыки. Причем интересно это и кандидату, и тому, кто собеседует — время не пропадает даром ни для кого!
Re[5]: Как я провалил этой весной
От: hokkaido  
Дата: 09.07.11 06:11
Оценка: :)
A>Опытные спецы неспособные ответить на простейшие вопросы? А в чём тогда заключается их опыт?

В понтах на РСДНе. В чем же еще??
Re[8]: Как я провалил этой весной
От: Stanislav V. Zudin Россия  
Дата: 11.07.11 06:11
Оценка: -1
Здравствуйте, Undying, Вы писали:

U>Ключевыми навыками разработчика являются:


U>1) Способность понять реальную задачу, т.е. умение понять что надо делать и зачем делать.

U>2) Способность понять какие ситуации надо обрабатывать специальным образом
U>3) Способность написать принципиальный алгоритм обработки ситуаций.

U>Знания о том как принципиальный алгоритм положить на конкретную технологию являются второстепенными, т.к. даже если разработчик чего-то не знает, то это элементарно гуглится.


Твое утверждение справедливо лишь отчасти.
Если разработчик, что называется, "в теме", но подзабыл (давно не использовал), то позабытое гуглится легко.
Но если задача совершенно незнакома, то гугл мало поможет.

Пример из жизни, наблюдал лично.

Моему коллеге потребовалось построить триангуляцию Делоне. Он гордо вскинул голову, мол, фигня, алгоритм 100500 раз описан в книжках, взял "Вычислительную геометрию" Ласло и реализовал предложенный там алгоритм.
Вот только там был описан академический алгоритм, который работает, но медленно и на синтетических данных.
А на реальных данных валится

Таких примеров у каждого найдется не по одному.
К чему это я...
Мой коллега был достаточно опытным разработчиком.
Однако, Гугл в данном случае ни разу не помощник.
Если бы был под рукой человек, который "в теме", который объяснил бы по-быстрому, почему этот алгоритм плох и подсунул бы другой действующий алгоритм, то мой коллега не потратил бы уйму времени.
_____________________
С уважением,
Stanislav V. Zudin
Re[8]: Как я провалил этой весной
От: avpavlov  
Дата: 11.07.11 06:57
Оценка: -1
SD>Хорошо решают.
SD>Ответы на все простейшие вопросы есть в интернете -> 5 минут гугла — достаточно.

Ну т.е. спец это человек, умеющий читать и знающий про гугл == выпускник начальной школы?

SD>А вот с более-менее сложной задачей всё совсем не так.


Лёгкие решать западло, трудные на собеседовании решать тоже как-то мало кто рвётся. Получается остаётся только верить резюме и хорошо подвешенному языку?
Re[12]: Как я провалил этой весной
От: avpavlov  
Дата: 11.07.11 09:25
Оценка: -1
U>Потому что сложную задачу решить в формате собеседования невозможно. Можно лишь вспомнить решение сложной задачи, которую человек решал ранее.

Естественно, поэтому можно дать среднюю и посмотреть на рассуждения кандидата
Re[13]: Как я провалил этой весной
От: Undying Россия  
Дата: 11.07.11 09:57
Оценка: +1
Здравствуйте, avpavlov, Вы писали:

U>>Потому что сложную задачу решить в формате собеседования невозможно. Можно лишь вспомнить решение сложной задачи, которую человек решал ранее.

A>Естественно, поэтому можно дать среднюю и посмотреть на рассуждения кандидата

И даже среднюю нельзя. Задача даже средней сложности требует знания контекста, в котором она решается, и терминологии. Когда человек решает задачу по работе, то у него уже общее понимание контекста и принятой терминологии обычно есть, и тем не менее для новой задачи на выяснение контекста уходит от нескольких часов до нескольких дней. А на собеседовании у человека понимания контекста и вашей терминологии вообще нет, поэтому времени нужно еще больше. Соответственно на собеседовании можно решить только примитивную задачу, на чуть более сложную времени уже не хватит.
Re[10]: Как я провалил этой весной
От: avpavlov  
Дата: 11.07.11 10:32
Оценка: -1
DD>Опыт не "откладывается", а набирается.

мощно задвинул

DD>Вы путаете опыт с набором разнородной информации, хранимой в памяти. Та информация постоянно обновляется. Старая стирается, новая добавляется, и так каждый день.

DD>Опыт к хранимой фактической информации отношения не имеет.

надеюсь программируешь ты лучше, чем формулируешь свои мысли.
Re[13]: Как я провалил этой весной
От: DorfDepp  
Дата: 11.07.11 10:50
Оценка: +1
Здравствуйте, avpavlov, Вы писали:

A>Здравствуйте, DorfDepp, Вы писали:


DD>>Здравствуйте, avpavlov, Вы писали:


DD>>>>Опыт не "откладывается", а набирается.


A>>>мощно задвинул


DD>>С чем не согласен?


A>И ты и я использовали "простонародные" определения опыта, при этом ты не только разглядел между ними разницу, но и с умным видом заявил, что одно простонародное определение лучше другого.


Я ничего не понял, о чем ты вообще.
Re[9]: Как я провалил этой весной
От: Undying Россия  
Дата: 11.07.11 16:59
Оценка: +1
Здравствуйте, avpavlov, Вы писали:

A>Детский сад какой-то. Мы про математика говорим или программиста? Это для математиков всё заканчивается, когда они доказали принципиальную возможность чего-либо, а вот программисту нужно положить это на конкретную технологию, и это ни хрена не является второстепенным.


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

Если у человека хорошие базисные инженерные навыки, то, как правило, проблем положить принципиальное решение на конкретную технологию у него не возникает. Исключением может быть лишь ситуация когда вы используете шаманские технологии с очень высоким порогом вхождения. Тогда, да, опыт использования таких технологий желателен. Но если вы используете такие технологии, да еще и на тривиальных задачах, то я вам сочувствую.
Re[19]: Как я провалил этой весной
От: Flying Dutchman Украина  
Дата: 12.07.11 18:44
Оценка: +1
Здравствуйте, avpavlov, Вы писали:

A>Здравствуйте, Flying Dutchman, Вы писали:


FD>>Интересно, и как это структура таблиц может зависеть от "удобства выполнения операций" ?


A>Простейший пример: хранение нескольких телефонов можно сделать несколькими способами


A>- в одном поле через запятую

A>- несколько колонок
A>- подчинённая таблица со связью 1-ко-многим

из которых правильный только последний (нормализованный).

A>У каждого способа есть плюсы и минусы (== удобство/неудобство выполнения тех или иных операций)


Трудно себе представить, какие плюсы могут быть у первых двух. Скорее наоборот — на практике много раз приходилось переделывать структуру таблиц из первых двух способов в третий.

Хотя, действительно, можно найти примеры дизайна таблиц для одной и той же функциональности, зависящие от удобства операций. Например, дерево можно хранить в таблице либо "тривиальным" образом (с внешнм ключом, ссылающимся на эту же таблицу), либо сдклать дизайн на основе вложенных множеств. О обоих случаях таблицы бкдкт нормализованными.
Re[5]: Как я провалил этой весной
От: divergo  
Дата: 13.07.11 04:11
Оценка: +1
A>Опытные спецы неспособные ответить на простейшие вопросы? А в чём тогда заключается их опыт?
Я бы не назвал себя мега гуру, но для примера:
на днях из любопытства сходил на собеседование — входе общения интерес к позиции пропал начисто,
и на просьбу написать запрос(на бумажке) выдал WHERE field1 = NULL, ясное дело, должно быть IS NULL
На работе IS NULL писал автоматом не задумываясь, а здесь черт дернул

Примечательно, на мой вопрос по их проекту "чем выбираете данные? например датаадаптерами...", собеседующие стушевались и промямлили "да просто, запросами"
Предполагалась работа под .Net 1.1
Re[7]: Как я провалил этой весной
От: divergo  
Дата: 13.07.11 04:24
Оценка: +1
G> А потом приходит на собеседование и выясняется, что он не способен за разумное время решить несложную задачку на написание sql скрипта.
Черт его знает, наверное это где-то в подсознании лежит, потому как обычно решаются (относительно)сложные задачи довольно быстро, а потом читаешь рсдн.
А на собеседовании, наверное, другое полушарие мозга работает.
Ну не идет оно, нет сосредоточенности.
Re[21]: Как я провалил этой весной
От: Flying Dutchman Украина  
Дата: 13.07.11 08:34
Оценка: +1
Здравствуйте, avpavlov, Вы писали:


FD>>из которых правильный только последний (нормализованный).


A>Это уже обсуждалось в "базах данных" поэтому не хочу спорить ещё раз, но замечу, что слепая вера в живительную силу тотальной нормализации в моих глазах является минусом. Нормализация просто один из инструментов в арсенале программиста и, как каждый инструмент, он может быть подходящим или нет.


Немного не так: нормализация — один из основных (или основной) методов проектирования БД (имеется в виду OLTP). Денормализация — один из методов улучшения производительности.

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

A>Хочешь продолжить спор — ступай в БД


Времени нет, так что на этом закончим .
Re[23]: Как я провалил этой весной
От: Brutalix  
Дата: 14.07.11 11:26
Оценка: +1
Здравствуйте, avpavlov, Вы писали:

U>>>>Так какие реальные задачи нельзя решить не используя join?

A>Сходу не приходят в голову. Путём большого огромного кол-ва подзапросов наверное можно съэмулировать любой джойн.
A>Правда выходит, что джойны упрекают за сложность и тут же готовы раздуть запросы многократно, чтобы от них отказаться?

Не правда Основная идея — не городить чего либо сложнее необходимого, что б работало. Это частный случай выбора между шашечками и ехать. По моему скромному опыту на интервью часто гоняются за шашечками в ущербу ехать, а потом удивляются, когда на работе шашечки, но проект не едет. Вообще ситауция, когда в конторе все гении, а работать некому — весьма печальная.
Re[29]: Как я провалил этой весной
От: hokkaido  
Дата: 14.07.11 18:28
Оценка: +1
B>>Красавчег пишет что он пять лет писал этот ваш SQl. Про джоинты он ничего не писал.
A>Ну вот тут и поспорили — я утверждал, что 5ний опыт на СКЛ без джойнов — это простейшие КРУД операции, на знание СКЛ не тянет.
A>Аналогия — 5 лет на С++ не используя классов, структур, заголовочных файлов и вся программа в одном файле — да так тоже можно писать, но называть себя человеком с хорошим знанием С++ и обижаться, что кто-то поставит это под сомнение — ну самому не смешно?

Во-во! И ведь покажите мне задачу которую на С++ нельзя решить без этих ваших классов и наследования.
Я вот себя спецом по СКЛ (и по базам вообще) даже рядом не считаю, но и то понятно что JOIN (ну и понимания в чем разница между разными видами джойнов) — это базовое знание.
Re[30]: Как я провалил этой весной
От: avpavlov  
Дата: 16.07.11 05:23
Оценка: :)
>Но зато эти запросы будут
>
> 1) легко читаться
> 2) легко отлаживаться. Даже не так. ЛЕГКО ОТЛАЖИВАТЬСЯ

По обоим пунктам СКЛ выиграл.
Re[30]: Как я провалил этой весной
От: dmz Россия  
Дата: 23.07.11 08:47
Оценка: :)
A>> Примеров как можно сложный СКЛ сделать простым, перенеся в бизнес-слой, я скорее всего от тебя не дождусь.

U>TableLink genderLink = new TableLink(dbConnection, "Select code From gender", 
U>  new FieldBlank[] { GenderType.Code }, new IndexBlank[] { GenderType.ByCode });
U>TableLink ethnicLink = new TableLink(dbConnection, "Select code From ethnic",
U>  new FieldBlank[] { EthnicType.Code }, new IndexBlank[] { EthnicType.ByCode });
U>TableLink peopleLink = new TableLink(dbConnection, 
U>  "Select gender, ethnic, count(*) From people group by gender, ethnic",
U>  new FieldBlank[] { PeopleType.Gender, PeopleType.Ethnic, TempType.Count },
U>  new IndexBlank[] { PeopleType.ByGenderAndEthnic });

U>IEnumerable<RowLink> allGenders = genderLink.AllRows.Concat(null);
U>IEnumerable<RowLink> allEthnics = ethnicLink.AllRows.Concat(null);

U>foreach (RowLink gender in allGenders)
U>{
U>  foreach (RowLink ethnic in allEthnics)
U>  {
U>    int? genderCode = gender != null ? gender.Get(GenderType.Code) : null;
U>    int? ethnicCode = ethnic != null ? ethnic.Get(EthnicType.Code) : null;
U>    RowLink people = people.FindRow(PeopleType.ByGenderAndEthnic, genderCode, ethnicCode);
U>    int count = people != null ? people.Get(TempType.Count) : 0;
U>  }
U>}
U>


Т.е мало того, что кода больше, так еще и весь рекордсет будет поднят в память?
Re[31]: Как я провалил этой весной
От: Undying Россия  
Дата: 23.07.11 14:43
Оценка: -1
Здравствуйте, dmz, Вы писали:

dmz>Т.е мало того, что кода больше,


И что? Простота кода и лаконичность кода это не просто разные, а зачастую прямо противоположные вещи.

так еще и весь рекордсет будет поднят в память?

В память поднята одна строчка таблицы на одну строчку отчета. Бумага в офисе закончится значительно раньше, чем память.
Re[35]: Как я провалил этой весной
От: Undying Россия  
Дата: 25.07.11 04:05
Оценка: -1
Здравствуйте, avpavlov, Вы писали:

U>> т.к. на практике почти всегда мерж в памяти оказывается понятнее и удобнее.

A>Я даже не знаю что тут возразить. А если таблицы на десятки тысяч строк? А если на сотни тысяч?

Какая разница? В память выбираются только те строки, которые нужны по условию задачи.
Re: Как я провалил этой весной
От: Ellin Россия www.rsdn.ru
Дата: 21.06.11 11:44
Оценка:
Что за контора?
Re: Как я провалил этой весной
От: HolyNick  
Дата: 22.06.11 16:28
Оценка:
Просто нужно стараться не ходить по собеседованиям с таким настроением.
Re[2]: Как я провалил этой весной
От: JazzzMaster Россия  
Дата: 23.06.11 05:49
Оценка:
Здравствуйте, HolyNick, Вы писали:

HN>Просто нужно стараться не ходить по собеседованиям с таким настроением.


Да почему? Ходить по собеседованиями полезно просто для того, чтобы потренировать свои коммуникативные навыки
Re[3]: Как я провалил этой весной
От: HolyNick  
Дата: 23.06.11 06:49
Оценка:
В данном случае таких задач не ставилось, как видно.
Да и если ты пришел с пофигизмом на собеседование не значит , что ты что-то тренируешь
Re[5]: Как я провалил этой весной
От: blackhearted Украина  
Дата: 05.07.11 16:34
Оценка:
Здравствуйте, elmal, Вы писали:

E>Здравствуйте, HolyNick, Вы писали:


HN>>Да и если ты пришел с пофигизмом на собеседование не значит , что ты что-то тренируешь

E>Это зависит от адекватности собеседования . Если собеседование проходит как диалог о проектах, где ты рассказываешь о своих решениях, о своем опыте решения таких задач, о проблемах, которые происходят и тому подобное, а тебе рассказывают о том, как делают эти задачи у них — вполне себе тренируются навыки. Причем интересно это и кандидату, и тому, кто собеседует — время не пропадает даром ни для кого!

да как ты смеешь проходить собеседование, если не собираешься менять работу?!
Re: Как я провалил этой весной
От: SemiCoder США  
Дата: 07.07.11 07:21
Оценка:
Здравствуйте, z3d, Вы писали:

z3d>Коротко напишу, как я на половину провалил собеседование этой весной. Может кому и интересно будет. Хотя в целом история ни о чем, мастодонтам будет неинтересно.


Сначала хотел много плохого написать, но потом подумал — правильно что пошел. Чем больше будешь ходить и смотреть что еще есть вокруг тебя, тем больше ты утвердишься в том, чего ты на самом деле хочешь, какие реальные требования в твоей сфере, чего спрашивают, чего делать надо и т.п.
Так что нормально. Провалить первое собеседование — это ожидаемый результат даже для "мастодонтов".
Совет один — даже если ты ленив, не стоит это показывать на собеседовании.
И не забывай — ты тратишь не только свое время, но и время интервьюверов — а они тоже люди, которые как правило проводят интервью в отрыве от работы, у них есть семьи и еще много чего... Подумай об этом.
Re[2]: Как я провалил этой весной
От: __kot2  
Дата: 08.07.11 03:28
Оценка:
Здравствуйте, SemiCoder, Вы писали:
SC>И не забывай — ты тратишь не только свое время, но и время интервьюверов — а они тоже люди, которые как правило проводят интервью в отрыве от работы, у них есть семьи и еще много чего... Подумай об этом.
вот именно, не стоит забывать что собеседование это вполне законный способ поотлынивать от работы. поэтому есть люди, которые собеседуют просто чтобы ничего не делать, для них лучше никого не брать — тогда можно собеседовать очень долго
Re[3]: Как я провалил этой весной
От: avpavlov  
Дата: 08.07.11 07:22
Оценка:
__>вот именно, не стоит забывать что собеседование это вполне законный способ поотлынивать от работы. поэтому есть люди, которые собеседуют просто чтобы ничего не делать, для них лучше никого не брать — тогда можно собеседовать очень долго

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

Короче, ты написал абсолютный конспирологический бред из разряда "тестовые задания тайком используются для написания продакшн кода".
Re[4]: Как я провалил этой весной
От: __kot2  
Дата: 08.07.11 11:15
Оценка:
Здравствуйте, avpavlov, Вы писали:
A>Короче, ты написал абсолютный конспирологический бред из разряда "тестовые задания тайком используются для написания продакшн кода".
это, конечно, бред.
A>Специалистам — тогда вообще полный бред, заниматься любимым программированием в 100 раз интереснее, чем проводить собеседования.
а почему тогда программисты читают rsdn, когда они так любят свое программирование? вы будто с марса появились, будто никогда с проблемой отлынивания от работы не сталкивались. или может она программистов не касается? нет, конечно проводить собеседование это как бы сложно. но ведь достаточно просто сидеть и разговаривать с кандидатом о какому-нибудь вопросу пару часов, проще всего — по тому вопросу, сем сейчас занимаетесь и пусть он рассказывает вам то, что вы и так знаете. а там, глядишь, обед.
Re[5]: Как я провалил этой весной
От: avpavlov  
Дата: 08.07.11 11:44
Оценка:
__>а почему тогда программисты читают rsdn, когда они так любят свое программирование?

Отдыхают?

И если уж на то пошло, приятнее отлынивать на рсдн, чем на собеседовании.
Re[6]: Как я провалил этой весной
От: __kot2  
Дата: 08.07.11 12:48
Оценка:
Здравствуйте, avpavlov, Вы писали:
A>И если уж на то пошло, приятнее отлынивать на рсдн, чем на собеседовании.
rsdn и собеседование это просто общение. программист по своей работе испытывает недостаток общения, который нужно как-то компенсировать.
и проведение собеседования это просто часто повод поболтать с кем-то, познакомиться поближе, с возможно интересным человеком, далеко ведь не случайным — он проходит предварит отбор по резюме. это ж не гопник с остановки. бывает что человек нужен правда и нужен срочно, еще и денег на него немного дают. это другой разговор. многие люди проводят собеседования чисто просто поболтать. а есть кто получает наслаждение из "разговора с позиции силы", но таких в ИТ не так и много. я только дважды встречал.
Re[7]: Как я провалил этой весной
От: avpavlov  
Дата: 08.07.11 13:28
Оценка:
__>и проведение собеседования это просто часто повод поболтать с кем-то, познакомиться поближе

Мне только остаётся спросить — сколько собеседований ты в жизни провёл? Или ты теоретически рассуждаешь?
Re[8]: Как я провалил этой весной
От: __kot2  
Дата: 09.07.11 02:04
Оценка:
Здравствуйте, avpavlov, Вы писали:
__>>и проведение собеседования это просто часто повод поболтать с кем-то, познакомиться поближе
A>Мне только остаётся спросить — сколько собеседований ты в жизни провёл? Или ты теоретически рассуждаешь?
да штук 10-то провел. но причем тут я? у меня свои подходы, я сужу больше чисто по психологии и по увиденному в других компаниях когда собеседовали меня. иногда было видно, что я им нафиг не нужен, им просто охота поболтать.
Re[3]: Как я провалил этой весной
От: carpenter Голландия  
Дата: 10.07.11 07:05
Оценка:
Здравствуйте, JazzzMaster, Вы писали:

JM>Здравствуйте, HolyNick, Вы писали:


HN>>Просто нужно стараться не ходить по собеседованиям с таким настроением.


JM>Да почему? Ходить по собеседованиями полезно просто для того, чтобы потренировать свои коммуникативные навыки


еще помогает побыть некоторое время нанимающим самому —

я вот например для себя сделал вывод что важно не только быть профессионалом ,
но и уметь производить некоторое положительное впечатление лично.

например что важно для меня —
— не одевать рваные рубашки с капюшоном
— ходить на собеседование трезвым
— не говорить собеседующему что он баран и не знает таких элементарных вещей
(и вообще вести себя вежливее)
Весь мир — Кремль, а люди в нем — агенты
Re: Как я провалил этой весной
От: 8086  
Дата: 10.07.11 08:40
Оценка:
Здравствуйте, z3d, Вы писали:

z3d>Коротко напишу, как я на половину провалил собеседование этой весной. Может кому и интересно будет. Хотя в целом история ни о чем, мастодонтам будет неинтересно.


z3d>Я типичный средний программер на .net, веб-разработка, БД, сишарп. В основном внутренния автоматизация разных крупных компаний. Опыт больше 5 лет. Немного ленив. Опыт, хочу я того или нет, но поднакопился маленько.


z3d>На старом месте задолбали маразмы, пошел пособеседоваться. Вдруг, думаю, найду компанию мечты. Офис у новой компании был рядом с домом, так что это уже пол мечты. Дали тестовое задание. Сделал его. Обещал сделать за 2 дня, реально сделал за 3, правда в те дни у меня были сторонние отвлекающие факторы, но я про них не сообщал, не оправдывался, думаю собеседователи много отмазок слышали от кандидатов, проще в такой ситуации промолчать. Решение не усложнял и не делал универсальным, наоборот делал по минимуму, так как обратного не просили. Поэтому вышло все просто, как потом сказал собеседовавший меня архитектор: "По нашему тестовому заданию конечно ничего не оценишь".


z3d>Потом задавали вопросы про паттерны и популярные сторонние библиотеки. К собеседованию я совсем не готовился, и безработица не поджимала, поэтому на большинство вопросов честно отвечал: "С этим не работал, слышал, читал только для ознакомления". Как всегда попросили написать на бумажке синглтон, ну и я не вчера родился, написал конечно. Хотя отсутствие творческого подхода и штампы на собеседовании меня разочаровали маленько. Людей конечно понять можно, кучу народа надо отсмотреть. Попросили решить задачку на SQL с чем-то из серии join-groupby-having, я не решил и не сильно пытался напрягаться. Ощутил, что своим легким пофигизмом разочаровал немного собеседовавших. Хотя мужики в целом нормальные.


z3d>Было правда ощущение, что я немного раздражал менеджера. Это меня в свою очередь немного напрягло.


z3d>По итогам собеседования предложили денег меньше, чем я просил и меньше, чем имел на старом месте. Я отказался и остался на старом месте разгребать наши местные маразмы. Работу мечты не нашел. Конечно пытаюсь самообразовываться в свободное время, но двигаюсь немного в сторону от корпоративной автоматизации.
Re: Как я провалил этой весной
От: Фукерман Ниоткуда  
Дата: 10.07.11 09:12
Оценка:
Ну а каково окончание_то этой захватывающей и увлекательной истории ?
Re[5]: Как я провалил этой весной
От: Undying Россия  
Дата: 10.07.11 16:05
Оценка:
Здравствуйте, avpavlov, Вы писали:

A>Опытные спецы неспособные ответить на простейшие вопросы? А в чём тогда заключается их опыт?


В умении решать реальные задачи.
Re[6]: Как я провалил этой весной
От: avpavlov  
Дата: 10.07.11 17:20
Оценка:
A>>Опытные спецы неспособные ответить на простейшие вопросы? А в чём тогда заключается их опыт?

U>В умении решать реальные задачи.


Если у спецов проблемы с простейшими вопросами, то как они решают задачи?
Re[9]: Как я провалил этой весной
От: Undying Россия  
Дата: 11.07.11 07:45
Оценка:
Здравствуйте, Stanislav V. Zudin, Вы писали:

SVZ>Твое утверждение справедливо лишь отчасти.

SVZ>Если разработчик, что называется, "в теме", но подзабыл (давно не использовал), то позабытое гуглится легко.
SVZ>Но если задача совершенно незнакома, то гугл мало поможет.

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

Но соглашусь, если в силу специфики реальных задач нужно, к примеру, постоянно работать со сложной математикой, то желательно иметь в команде человека с хорошим математическим образованием. Нескольких не особо нужно, а одного весьма желательно. И этот человек либо будет непосредственно реализовывать нужные алгоритмы, либо консультировать других разработчиков. Впрочем это вовсе не гарантирует, что этого человека в вузе обучали реально применениемым алгоритмам, а не какой-нибудь академической хрени.
Re[10]: Как я провалил этой весной
От: avpavlov  
Дата: 11.07.11 09:15
Оценка:
U>А побеседовать о предыдущем опыте человека не судьба? Нужен вам, к примеру, разработчик для написания сложных алгоритмов, так спросите у человека какие сложные алгоритмы он реализовывал и по какому-нибудь из них детально побеседуйте. Такой метод говорит о человеке намного больше нежели тестирование или ответы на примитивные вопросы на собеседовании.

Во-первых, непонятно, почему ты думаешь что у нас всё сводится к примитивным вопросам? Примитивные вопросы это как способ быстро понять есть реальный опыт или нет.

Во-вторых (а может и в-первых) я видал много умных людей, которые теряются/сковываются на собеседовании и не могут свободно беседовать. Решение простых задач позволяет им освоиться и почуствовать уверенность.
Re[11]: Как я провалил этой весной
От: Undying Россия  
Дата: 11.07.11 09:23
Оценка:
Здравствуйте, avpavlov, Вы писали:

A>Во-первых, непонятно, почему ты думаешь что у нас всё сводится к примитивным вопросам? Примитивные вопросы это как способ быстро понять есть реальный опыт или нет.


Потому что сложную задачу решить в формате собеседования невозможно. Можно лишь вспомнить решение сложной задачи, которую человек решал ранее.
Re[9]: Как я провалил этой весной
От: DorfDepp  
Дата: 11.07.11 10:05
Оценка:
Здравствуйте, avpavlov, Вы писали:

U>>2) Способность понять какие ситуации надо обрабатывать специальным образом


A>Вот этого без реального опыта никак не достичь. А реальный опыт откладывается в голове реальными знаниями


Опыт не "откладывается", а набирается. Вы путаете опыт с набором разнородной информации, хранимой в памяти. Та информация постоянно обновляется. Старая стирается, новая добавляется, и так каждый день.

Опыт к хранимой фактической информации отношения не имеет.
Re[14]: Как я провалил этой весной
От: avpavlov  
Дата: 11.07.11 10:30
Оценка:
U>И даже среднюю нельзя. Задача даже средней сложности требует знания контекста, в котором она решается, и терминологии. Когда человек решает задачу по работе, то у него уже общее понимание контекста и принятой терминологии обычно есть, и тем не менее для новой задачи на выяснение контекста уходит от нескольких часов до нескольких дней. А на собеседовании у человека понимания контекста и вашей терминологии вообще нет, поэтому времени нужно еще больше. Соответственно на собеседовании можно решить только примитивную задачу, на чуть более сложную времени уже не хватит.

Вот по его вопросам и можно будет понять, чего он стоит — человек с опытом задаст правильные вопросы, а балобол с перком гугления будет гнуть пальцы и утверждать, что задача поставлена некорректно или что такие задачи должны решать "специально назначенные люди" или ещё сто тысяч миллионов отговорок найдётся.
Re[11]: Как я провалил этой весной
От: DorfDepp  
Дата: 11.07.11 10:38
Оценка:
Здравствуйте, avpavlov, Вы писали:

DD>>Опыт не "откладывается", а набирается.


A>мощно задвинул


С чем не согласен?

DD>>Вы путаете опыт с набором разнородной информации, хранимой в памяти. Та информация постоянно обновляется. Старая стирается, новая добавляется, и так каждый день.

DD>>Опыт к хранимой фактической информации отношения не имеет.

A>надеюсь программируешь ты лучше, чем формулируешь свои мысли.


Пока никто не жаловался.
Re[12]: Как я провалил этой весной
От: avpavlov  
Дата: 11.07.11 10:42
Оценка:
Здравствуйте, DorfDepp, Вы писали:

DD>Здравствуйте, avpavlov, Вы писали:


DD>>>Опыт не "откладывается", а набирается.


A>>мощно задвинул


DD>С чем не согласен?


И ты и я использовали "простонародные" определения опыта, при этом ты не только разглядел между ними разницу, но и с умным видом заявил, что одно простонародное определение лучше другого.
Re[15]: Как я провалил этой весной
От: Undying Россия  
Дата: 11.07.11 17:00
Оценка:
Здравствуйте, avpavlov, Вы писали:

A>Вот по его вопросам и можно будет понять, чего он стоит — человек с опытом задаст правильные вопросы, а балобол с перком гугления будет гнуть пальцы и утверждать, что задача поставлена некорректно или что такие задачи должны решать "специально назначенные люди" или ещё сто тысяч миллионов отговорок найдётся.


Можно парочку примеров вопросов, которые вы задаете на собеседовании?
Re: Как я провалил этой весной
От: pagrus  
Дата: 11.07.11 22:42
Оценка:
Тут ведь какая штука получается. Хочешь получить больше денег — приложи усилия чтоб себя продать. Хочешь в команду умных и мотивированных ребят — убавь пофигизм, и изо всех сил покажи себя специалистом и хорошим парнем.
Это не даёт никакой гарантии, что работодатель предложит то, что тебе надо. Но без этого точно без шансов.
"вялый, малознающий, без видимой перспективы — проект не потянет, команду не поведёт. Поставлю ка я его младшим помощником на багфиксинг, маразмы разгребать".
Re[6]: Как я провалил этой весной
От: genre Россия  
Дата: 12.07.11 10:18
Оценка:
Здравствуйте, Undying, Вы писали:

A>>Опытные спецы неспособные ответить на простейшие вопросы? А в чём тогда заключается их опыт?

U>В умении решать реальные задачи.

Не, я вот правда не понимаю. Есть у нас программист, который на работе, в течении нескольких лет достаточно регулярно пишет sql скрипты разной сложности. А потом приходит на собеседование и выясняется, что он не способен за разумное время решить несложную задачку на написание sql скрипта.
Какие выводы можно из этого сделать? У меня всего два получаются:
1. Он никаких скриптов на работе не писал, те врет.
2. каждый новый несложный скрипт потребует у него "пару дней чтобы вспомнить" (см сообщение рядом).

Ну и нафиг он такой нужен?
... << RSDN@Home 1.2.0 alpha 4 rev. 1476>>
Re[8]: Как я провалил этой весной
От: genre Россия  
Дата: 12.07.11 10:18
Оценка:
Здравствуйте, Undying, Вы писали:


U>Знания о том как принципиальный алгоритм положить на конкретную технологию являются второстепенными, т.к. даже если разработчик чего-то не знает, то это элементарно гуглится.


Если бы это было правдой, то не существовало бы вакансии С++ программист, Java программист итд. Искали бы просто абстрактных программистов. Одна вхождение в новую технологию занимает ненулевое время.
А когда "ничего не знаю, но ща нагуглю" и возникают тонны говнокода.
... << RSDN@Home 1.2.0 alpha 4 rev. 1476>>
Re[17]: Как я провалил этой весной
От: Flying Dutchman Украина  
Дата: 12.07.11 17:43
Оценка:
Здравствуйте, avpavlov, Вы писали:


A>Когда закончили с листком (у действительно опытных это занимает менее 10 минут), далее просто проверяю способность кандидата рассуждать, спрашивать, обосновывать и т.д. — прошу спроектировать несколько таблиц, связи между ними, почему так, а не этак, какие операции будет удобно делать, а какие неудобно, что нужно сделать, чтобы и эти было удобно ну и т.д.


Интересно, и как это структура таблиц может зависеть от "удобства выполнения операций" ?
Re[18]: Как я провалил этой весной
От: avpavlov  
Дата: 12.07.11 18:16
Оценка:
Здравствуйте, Flying Dutchman, Вы писали:

FD>Здравствуйте, avpavlov, Вы писали:



A>>Когда закончили с листком (у действительно опытных это занимает менее 10 минут), далее просто проверяю способность кандидата рассуждать, спрашивать, обосновывать и т.д. — прошу спроектировать несколько таблиц, связи между ними, почему так, а не этак, какие операции будет удобно делать, а какие неудобно, что нужно сделать, чтобы и эти было удобно ну и т.д.


FD>Интересно, и как это структура таблиц может зависеть от "удобства выполнения операций" ?


Простейший пример: хранение нескольких телефонов можно сделать несколькими способами

— в одном поле через запятую
— несколько колонок
— подчинённая таблица со связью 1-ко-многим

У каждого способа есть плюсы и минусы (== удобство/неудобство выполнения тех или иных операций)

Правда этот простейший не так интересен, но поговорить можно и не о простейшем.
Re[6]: Как я провалил этой весной
От: Undying Россия  
Дата: 13.07.11 05:52
Оценка:
Здравствуйте, divergo, Вы писали:

D>и на просьбу написать запрос(на бумажке) выдал WHERE field1 = NULL, ясное дело, должно быть IS NULL

D>На работе IS NULL писал автоматом не задумываясь, а здесь черт дернул

Это естетственно. То с чем постоянно работаешь уходит на уровень подсознания, но на собеседование подсознание не работает, т.к. обстановка не привычная. А сознание уже давным давно забыло как к этой информации обращаться. Поэтому требование на собеседовании точного синтаксиса это редкостный маразм.
Re[8]: Как я провалил этой весной
От: genre Россия  
Дата: 13.07.11 08:23
Оценка:
Здравствуйте, divergo, Вы писали:

G>> А потом приходит на собеседование и выясняется, что он не способен за разумное время решить несложную задачку на написание sql скрипта.

D>Черт его знает, наверное это где-то в подсознании лежит, потому как обычно решаются (относительно)сложные задачи довольно быстро, а потом читаешь рсдн.
D>А на собеседовании, наверное, другое полушарие мозга работает.
D>Ну не идет оно, нет сосредоточенности.

Конечно на собеседовании сложнее, ну так и задачи на собеседованиях обычно дают гораздо проще, чем встречаются в реальной жизни.
... << RSDN@Home 1.2.0 alpha 4 rev. 1476>>
Re[18]: Как я провалил этой весной
От: SE Украина  
Дата: 13.07.11 09:03
Оценка:
Здравствуйте, Flying Dutchman, Вы писали:

A>>Когда закончили с листком (у действительно опытных это занимает менее 10 минут), далее просто проверяю способность кандидата рассуждать, спрашивать, обосновывать и т.д. — прошу спроектировать несколько таблиц, связи между ними, почему так, а не этак, какие операции будет удобно делать, а какие неудобно, что нужно сделать, чтобы и эти было удобно ну и т.д.


FD>Интересно, и как это структура таблиц может зависеть от "удобства выполнения операций" ?


Классический пример — хранение деревьев в реляционной БД. Различные способы имеют различные скорости модификации, поиска, перечисления и т.д.
Re[7]: Как я провалил этой весной
От: alzt  
Дата: 13.07.11 11:19
Оценка:
Здравствуйте, genre, Вы писали:

G>Не, я вот правда не понимаю. Есть у нас программист, который на работе, в течении нескольких лет достаточно регулярно пишет sql скрипты разной сложности. А потом приходит на собеседование и выясняется, что он не способен за разумное время решить несложную задачку на написание sql скрипта.

G>Какие выводы можно из этого сделать? У меня всего два получаются:
G>1. Он никаких скриптов на работе не писал, те врет.
G>2. каждый новый несложный скрипт потребует у него "пару дней чтобы вспомнить" (см сообщение рядом).

3. Ваша тестирование не адекватно.
Я уверен, что моих знаний sql хватит для большинства задач. Но при этом я его не использовал уже года 4, если не 5. Кроме простейшего select-а написать вообще ничего не смогу.
Естественно, если потребуется устраиваться на работу, где нужен sql — быстро "нагоню" знаний, пролистав книжку.

А если последнее время человек действительно этим sql занимался, то знания у него есть.
Re[18]: Как я провалил этой весной
От: DorfDepp  
Дата: 13.07.11 11:28
Оценка:
Здравствуйте, Undying, Вы писали:

U>Здравствуйте, avpavlov, Вы писали:


Да не спорь ты с павловым — вы на разных уровнях развития находитесь, посему друг друга не понимаете.

Донести до другого человека всю совокупность твоего отношения к делу невозможно — можно только выбирать людей, полностью разделяющих твои взгляды, а не понимающих просто обходить стороной.
Re[8]: Как я провалил этой весной
От: genre Россия  
Дата: 13.07.11 11:46
Оценка:
Здравствуйте, alzt, Вы писали:

G>>Не, я вот правда не понимаю. Есть у нас программист, который на работе, в течении нескольких лет достаточно регулярно пишет sql скрипты разной сложности. А потом приходит на собеседование и выясняется, что он не способен за разумное время решить несложную задачку на написание sql скрипта.

G>>Какие выводы можно из этого сделать? У меня всего два получаются:
G>>1. Он никаких скриптов на работе не писал, те врет.
G>>2. каждый новый несложный скрипт потребует у него "пару дней чтобы вспомнить" (см сообщение рядом).

A>3. Ваша тестирование не адекватно.

A>Я уверен, что моих знаний sql хватит для большинства задач. Но при этом я его не использовал уже года 4, если не 5. Кроме простейшего select-а написать вообще ничего не смогу.
A>Естественно, если потребуется устраиваться на работу, где нужен sql — быстро "нагоню" знаний, пролистав книжку.

A>А если последнее время человек действительно этим sql занимался, то знания у него есть.


тут все зависит от того какого уровня человек нужен. если писать несложные скрипты, то можно вообще не тестировать на знание sql — научиться писать несложные скрипты способен любой вменяемый программист. а если нужен человек способный писать реально сложные запросы то "нагоню" здесь работает не всегда. сколько ты будешь нагонять до уровня гуру?
... << RSDN@Home 1.2.0 alpha 4 rev. 1476>>
Re[9]: Как я провалил этой весной
От: abch-98-ru Россия  
Дата: 13.07.11 12:09
Оценка:
__>>>и проведение собеседования это просто часто повод поболтать с кем-то, познакомиться поближе
A>>Мне только остаётся спросить — сколько собеседований ты в жизни провёл? Или ты теоретически рассуждаешь?
__>да штук 10-то провел. но причем тут я? у меня свои подходы, я сужу больше чисто по психологии и по увиденному в других компаниях когда собеседовали меня. иногда было видно, что я им нафиг не нужен, им просто охота поболтать.
как-то так?
Автор: elmal
Дата: 24.06.11
Re[19]: Как я провалил этой весной
От: hrensgory Россия  
Дата: 13.07.11 13:20
Оценка:
On 13.07.2011 14:59, avpavlov wrote:

> U>3) В вопросах имеется куча экзотики, мало применимая или и вовсе

> бесполезная на практике.
> U>select * from t1, t2
>
> *ОФИГЕТЬ*

Приведите какой-нибудь примерчик жизненный для такого запроса, для чего
он у вас используется. А то с остальным в целом согласен, а вот тут не
могу сообразить для чего бы такой запрос мог понадобиться. Хотя с SQL
лет уж 10 минимум опыта, не вспоминается похожего.

--
WBR,
Serge.
Posted via RSDN NNTP Server 2.1 beta
Re[20]: Как я провалил этой весной
От: avpavlov  
Дата: 13.07.11 13:39
Оценка:
H>Приведите какой-нибудь примерчик жизненный для такого запроса, для чего
H>он у вас используется. А то с остальным в целом согласен, а вот тут не
H>могу сообразить для чего бы такой запрос мог понадобиться. Хотя с SQL
H>лет уж 10 минимум опыта, не вспоминается похожего.

ну, например, есть люди. У них 2 признака — пол и национальность. Построить отчёт с группировкой по полу и национальности, включая нулевые значения.


select
 breakdown.*
 ,count(*)
from
  (
    select gender.code gender, ethnic.code ethnic from gender,ethnic
  ) breakdown
  left join people on people.gender = breakdown.gender and people.ethnic = breakdown.ethnic
group by
  breakdown.gender
  ,breakdown.ethnic


Собственно, люди, которые "умеют объяснить" поведение с условием (select * from t1,t2 where t1.x=t2.y), но не могут объяснить поведение без условия (select * from t1,t2), практически в 100% случаев на вопрос "найти все значения т1 которые не встречаются в т2 без использования вложенных запросов" пишут "from t1,t2 where t1.x != t2.y" — потому что они тупо не понимают, что внутре у этой неонки происходит.

При этом считают, что задавать такие вопросы — западло
Re[19]: Как я провалил этой весной
От: avpavlov  
Дата: 13.07.11 13:41
Оценка:
DD>Да не спорь ты с павловым — вы на разных уровнях развития находитесь, посему друг друга не понимаете.
DD>Донести до другого человека всю совокупность твоего отношения к делу невозможно — можно только выбирать людей, полностью разделяющих твои взгляды, а не понимающих просто обходить стороной.

Если бы вы оба перестали воспринимать отказ в приёме на работу как оскорбление, то вам бы легче стало жить.
Re[21]: Как я провалил этой весной
От: avpavlov  
Дата: 13.07.11 13:44
Оценка:
A>
A>select
A> breakdown.*
A> ,count(*)
A>from
A>  (
A>    select gender.code gender, ethnic.code ethnic from gender,ethnic
A>  ) breakdown
A>  left join people on people.gender = breakdown.gender and people.ethnic = breakdown.ethnic
A>group by
A>  breakdown.gender
A>  ,breakdown.ethnic
A>


в запросе, кстати, есть ошибка
Re[21]: Как я провалил этой весной
От: hrensgory Россия  
Дата: 13.07.11 14:13
Оценка:
On 13.07.2011 17:39, avpavlov wrote:
> From: *avpavlov* </Users/12804.aspx>

, практически в 100% случаев на вопрос
> "найти все значения т1 которые не встречаются в т2 без использования
> вложенных запросов" пишут "from t1,t2 where t1.x != t2.y"

Да ладно, не может быть чтоб такое писали.
Они наверное над вами глумятся просто

--
WBR,
Serge.
Posted via RSDN NNTP Server 2.1 beta
Re[22]: Как я провалил этой весной
От: avpavlov  
Дата: 13.07.11 14:17
Оценка:
H>Да ладно, не может быть чтоб такое писали.
H>Они наверное над вами глумятся просто

Ну я в ответ прошу расписать резалтсет, так что глумление тут взаимное выходит тогда

Многие люди в этом и других подобных топик думают "это легкотня, я это с пелёнок знаю и отвечаю ночью спросонья. Спрашивать такое — западло". А на самом деле они меряют по себе и не понимают, что есть куча других людей (с 5ним опытом, ага), для которых это ящик с неонкой.
Re[23]: Поверхностность и понимание
От: SergeCpp Россия http://zoozahita.ru
Дата: 13.07.11 15:17
Оценка:
Здравствуйте, avpavlov!

A>...есть куча других людей (с 5-ним опытом, ага), для которых это ящик с неонкой.


На концептуальность этой проблемы обратил внимание ещё великий Гаусс:

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

Из писем Гаусса Шумахеру 15мая 1843 года и 1 сентября 1850 года.

http://rsdn.ru/forum/philosophy/2310941.1.aspx
Автор: SergeCpp
Дата: 20.01.07


К сожалению, "что было, то и будет" (Екклезиаст)...
http://zoozahita.ruБездомные животные Екатеринбурга ищут хозяев
поверхностность понимание
Re[24]: Поверхностность и понимание
От: avpavlov  
Дата: 13.07.11 15:52
Оценка:
Товарищ, Вы на чьей стороне выступили?
Re[19]: Как я провалил этой весной
От: Undying Россия  
Дата: 14.07.11 03:35
Оценка:
Здравствуйте, avpavlov, Вы писали:

A>Я тебе наверное скажу новость, но SQL не прощает такого подхода. Если ты не понимаешь как работает запрос, то всё закончится тупым подбором каких-то магических операторов, которые на текущей тестовой базе дадут правильный ответ. И неправильный на продакшн.


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

U>>3) В вопросах имеется куча экзотики, мало применимая или и вовсе бесполезная на практике.

U>>select * from t1, t2

A>ОФИГЕТЬ


Так зачем вы используете этот код в реальном коде? Чтобы на двух жалких табличках по тысяче записей получить приятный сюрприз в виде OutOfMemory?

A>Если ты не знаешь джойны, то ты не сможешь решить задачу, ни мою ни свою.


Так какие реальные задачи нельзя решить не используя join?
Re[20]: Как я провалил этой весной
От: avpavlov  
Дата: 14.07.11 07:00
Оценка:
U>За пять лет использования sql у меня не было ни одной ошибки ни с возвращением не того результата, который ожидался, ни с производительностью. И достигается это как раз за счет использования сложных запросов только в крайних случаях, когда без них действительно нельзя обойтись. А наворачивать сложность в надежде, что ты ее правильно понимаешь это путь гарантированных ошибок.
...
U>Так зачем вы используете этот код в реальном коде? Чтобы на двух жалких табличках по тысяче записей получить приятный сюрприз в виде OutOfMemory?
...
U>Так какие реальные задачи нельзя решить не используя join?

Собственно из этих твоих ответов становится очевидно, что "5 лет СКЛ" — это 5 лет использования простейшего КРУД с выносом всей логики в приложение. Так тоже можно, и многие так и работают. Просто не надо обижаться, когда твой 5-летний опыт сочтут ничтожным и неподходящим для конкретной компании.
Re[21]: Как я провалил этой весной
От: Undying Россия  
Дата: 14.07.11 07:31
Оценка:
Здравствуйте, avpavlov, Вы писали:

A>
A>select
A> breakdown.*
A> ,count(*)
A>from
A>  (
A>    select gender.code gender, ethnic.code ethnic from gender,ethnic
A>  ) breakdown
A>  left join people on people.gender = breakdown.gender and people.ethnic = breakdown.ethnic
A>group by
A>  breakdown.gender
A>  ,breakdown.ethnic
A>


Припоминаю, писал такую муть на заре своей программистской жизни. В чем проблема такого кода? В том, что этот код невозможно повторно использовать. Если нужно почти тоже самое, но чуть-чуть по другому, приходиться писать почти тоже самое еще раз. А невозможность повторного использования кода и необходимость постоянного дублирования кода с внесением небольших изменений является одним из главных признаков говнокода. К счастью я осознал это достаточно быстро и от такого подхода отказался.
Re[22]: Как я провалил этой весной
От: avpavlov  
Дата: 14.07.11 07:51
Оценка:
U>Если нужно почти тоже самое, но чуть-чуть по другому, приходиться писать почти тоже самое еще раз.

Или использовать генерацию СКЛ или прогонять СКЛ через движок разметки, чтобы внести изменения перед исполнением, например через velocity.

U>К счастью я осознал это достаточно быстро и от такого подхода отказался.


К счастью я осознал быстро, что любые догматические взгляды мешают в жизни вообще и в программировании в частности.

Например, повторное использование кода — это не священная корова, ради которой нужно пожертвовать всем.

Проиллюстрирую: есть задача получения списков людей — обычных операторов и администраторов.

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

Человек, который каждую методику рассматривает как подоходящий или неподходящий инструмент, и поэтому свободен от предрассудков просто напишет 2 запроса (и ему будет плевать что 70% символов продублированы)

select * from Users where isOperator=1
select * from Users where isAdministrator=1

Но зато эти запросы будут

1) легко читаться
2) легко отлаживаться. Даже не так. ЛЕГКО ОТЛАЖИВАТЬСЯ

Короче, избавление от дублирования кода должно иметь цель ОБЛЕГЧЕНИЯ СОПРОВОЖДЕНИЯ КОДА. Когда вместо этой цели используется избавление ради избавления, и в жертву приносится всё остальное — вот это и есть проблема, которую не каждый способен осознать.
Re[23]: Как я провалил этой весной
От: Undying Россия  
Дата: 14.07.11 08:45
Оценка:
Здравствуйте, avpavlov, Вы писали:

U>>Если нужно почти тоже самое, но чуть-чуть по другому, приходиться писать почти тоже самое еще раз.

A>Или использовать генерацию СКЛ или прогонять СКЛ через движок разметки, чтобы внести изменения перед исполнением, например через velocity.

Это еще больший кошмар.

A>Человек, который каждую методику рассматривает как подоходящий или неподходящий инструмент, и поэтому свободен от предрассудков просто напишет 2 запроса (и ему будет плевать что 70% символов продублированы)


A>select * from Users where isOperator=1

A>select * from Users where isAdministrator=1

Я бы примерно так и сделал. Но зачем для написания подобных запросов мега знание sql'а?

A>Короче, избавление от дублирования кода должно иметь цель ОБЛЕГЧЕНИЯ СОПРОВОЖДЕНИЯ КОДА. Когда вместо этой цели используется избавление ради избавления, и в жертву приносится всё остальное — вот это и есть проблема, которую не каждый способен осознать.


Сложные sql запросы и плохо читаются, и плохо отлаживаются. Соответственно использовать их надо только тогда, когда других вариантов решения задачи нет. А такое бывает редко.
Re[24]: Как я провалил этой весной
От: avpavlov  
Дата: 14.07.11 08:54
Оценка:
U>Это еще больший кошмар.

Ты судишь не разу не воспользовавшись этим подходом, и скорее всего даже ни разу не видав, как оно выглядит.

A>>Человек, который каждую методику рассматривает как подоходящий или неподходящий инструмент, и поэтому свободен от предрассудков просто напишет 2 запроса (и ему будет плевать что 70% символов продублированы)


A>>select * from Users where isOperator=1

A>>select * from Users where isAdministrator=1

U>Я бы примерно так и сделал. Но зачем для написания подобных запросов мега знание sql'а?


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

И обращаю твоё внимание: джойны — это не мега знание, это базовое знание.

U>Сложные sql запросы и плохо читаются, и плохо отлаживаются. Соответственно использовать их надо только тогда, когда других вариантов решения задачи нет. А такое бывает редко.


Сложный СКЛ запрос воспроизведённый в приложении будет читаться и отлаживаться ещё хуже. Так что не надо передёргивать.
Re[21]: Как я провалил этой весной
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 14.07.11 09:19
Оценка:
Здравствуйте, avpavlov, Вы писали:

H>>Приведите какой-нибудь примерчик жизненный для такого запроса, для чего

H>>он у вас используется. А то с остальным в целом согласен, а вот тут не
H>>могу сообразить для чего бы такой запрос мог понадобиться. Хотя с SQL
H>>лет уж 10 минимум опыта, не вспоминается похожего.

A>ну, например, есть люди. У них 2 признака — пол и национальность. Построить отчёт с группировкой по полу и национальности, включая нулевые значения.



A>
A>select
A> breakdown.*
A> ,count(*)
A>from
A>  (
A>    select gender.code gender, ethnic.code ethnic from gender,ethnic
A>  ) breakdown
A>  left join people on people.gender = breakdown.gender and people.ethnic = breakdown.ethnic
A>group by
A>  breakdown.gender
A>  ,breakdown.ethnic
A>



Может я что-то не понимаю, но нормальный человек напишет

select g.code as gender, e.code as ethnic, count(*)
from people p
right join gender g on g.code=p.gender
right join ethnic e on e.code=p.ethnic
group by g.code, e.code


не?
Re[22]: Как я провалил этой весной
От: avpavlov  
Дата: 14.07.11 09:24
Оценка:
G>Может я что-то не понимаю, но нормальный человек напишет

Выпады про нормальность при неумении читать постановку задачи смотрятся забавно

G>не?


Не.
Re[23]: Как я провалил этой весной
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 14.07.11 09:32
Оценка:
Здравствуйте, avpavlov, Вы писали:

G>>Может я что-то не понимаю, но нормальный человек напишет


A>Выпады про нормальность при неумении читать постановку задачи смотрятся забавно


A>ну, например, есть люди. У них 2 признака — пол и национальность. Построить отчёт с группировкой по полу и национальности, включая нулевые значения.

Вроде строит, и влючая нулевые тоже.

G>>не?

A>Не.

Ченетак?
Re[24]: Как я провалил этой весной
От: avpavlov  
Дата: 14.07.11 09:45
Оценка:
G>Вроде строит, и влючая нулевые тоже.


MS SQL 2005


select g.code as gender, e.code as ethnic, count(p.id)
from 
(
 select 1 id, 'M' gender, 'W' ethnic 
)p
right join (select 'M' code union select 'F' code) g on g.code=p.gender
right join (select 'W' code union select 'B' code) e on e.code=p.ethnic
group by g.code, e.code

--------------------------------
gender    ethnic    (No column name)
NULL    B    0
M    W    1
--------------------------------

select
 breakdown.*
 ,count(people.id)
from
  (
    select gender.code gender, ethnic.code ethnic from (select 'M' code union select 'F' code) gender, (select 'W' code union select 'B' code) ethnic
  ) breakdown
  left join (select 1 id, 'M' gender, 'W' ethnic) people on people.gender = breakdown.gender and people.ethnic = breakdown.ethnic
group by
  breakdown.gender
  ,breakdown.ethnic

--------------------------------
gender    ethnic    (No column name)
F    B    0
M    B    0
F    W    0
M    W    1
--------------------------------
Re[21]: Как я провалил этой весной
От: Brutalix  
Дата: 14.07.11 09:46
Оценка:
Здравствуйте, avpavlov, Вы писали:

U>>Так какие реальные задачи нельзя решить не используя join?


A> твой 5-летний опыт сочтут ничтожным и неподходящим для конкретной компании.


Не, я понимаю, круче — только яйца и горы (и то не все, а только эверест). Но таки нельзя ли ответить на вопрос? А то сей холивар сильно напоминает сходку сторонников написания квиксорта на бумажке во время интервью.
Re[25]: Как я провалил этой весной
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 14.07.11 10:01
Оценка:
Здравствуйте, avpavlov, Вы писали:

G>>Вроде строит, и влючая нулевые тоже.


A>
A>--------------------------------
A>gender    ethnic    (No column name)
A>F    B    0
A>M    B    0
A>F    W    0
A>M    W    1
A>--------------------------------

A>


Ясно. Я бы такое сразу в olap отдал.
Re[22]: Как я провалил этой весной
От: avpavlov  
Дата: 14.07.11 10:01
Оценка:
U>>>Так какие реальные задачи нельзя решить не используя join?

Сходу не приходят в голову. Путём большого огромного кол-ва подзапросов наверное можно съэмулировать любой джойн.

Правда выходит, что джойны упрекают за сложность и тут же готовы раздуть запросы многократно, чтобы от них отказаться?
Re[25]: Как я провалил этой весной
От: Undying Россия  
Дата: 14.07.11 11:38
Оценка:
Здравствуйте, avpavlov, Вы писали:

A>Сложный СКЛ запрос воспроизведённый в приложении будет читаться и отлаживаться ещё хуже. Так что не надо передёргивать.


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

U>>Это еще больший кошмар.

A>Ты судишь не разу не воспользовавшись этим подходом, и скорее всего даже ни разу не видав, как оно выглядит.

Не видел. Но знаю какова цена дополнительных абстрактных слоев. Эта цена очень велика.
Re[26]: Как я провалил этой весной
От: avpavlov  
Дата: 14.07.11 11:45
Оценка:
U>Проще он будет читаться, причем намного.

Ну чего я один всё примеры пишу и пишу. Может ты чего покажешь? Сложный СКЛ и простой аналог на каком-нибудь языке программирования?
Re[24]: Как я провалил этой весной
От: avpavlov  
Дата: 14.07.11 11:47
Оценка:
B>Не правда Основная идея — не городить чего либо сложнее необходимого, что б работало. Это частный случай выбора между шашечками и ехать. По моему скромному опыту на интервью часто гоняются за шашечками в ущербу ехать, а потом удивляются, когда на работе шашечки, но проект не едет. Вообще ситауция, когда в конторе все гении, а работать некому — весьма печальная.

Ну и от тебя тогда пример, когда с джойном это "городить лишнего", а без джойна — божья роса.
Re[27]: Как я провалил этой весной
От: amg  
Дата: 14.07.11 11:51
Оценка:
U>>>>Так какие реальные задачи нельзя решить не используя join?
A>Ну чего я один всё примеры пишу и пишу. Может ты чего покажешь? Сложный СКЛ и простой аналог на каком-нибудь языке программирования?

например, интересно посмотреть реализацию left join из задачи выше(http://www.rsdn.ru/forum/job/4341577.aspx
Автор: avpavlov
Дата: 13.07.11
)
Re[25]: Как я провалил этой весной
От: Brutalix  
Дата: 14.07.11 12:34
Оценка:
Здравствуйте, avpavlov, Вы писали:


B>>Не правда Основная идея — не городить чего либо сложнее необходимого, что б работало. Это частный случай выбора между шашечками и ехать. По моему скромному опыту на интервью часто гоняются за шашечками в ущербу ехать, а потом удивляются, когда на работе шашечки, но проект не едет. Вообще ситауция, когда в конторе все гении, а работать некому — весьма печальная.


A>Ну и от тебя тогда пример, когда с джойном это "городить лишнего", а без джойна — божья роса.


Про джойн — не скажу. Про С/С++ — писание квик сорта на бумажке и рассуждения о важности написать оный будучи разбуженным ночью с пятницы на субботу, после пьянки, и, потом на работе пользование стандартного квиксорта (один раз за два года).
Re[26]: Как я провалил этой весной
От: avpavlov  
Дата: 14.07.11 12:40
Оценка:
B>Про джойн — не скажу. Про С/С++ — писание квик сорта на бумажке и рассуждения о важности написать оный будучи разбуженным ночью с пятницы на субботу, после пьянки, и, потом на работе пользование стандартного квиксорта (один раз за два года).

Знаешь, если человек заявляет, что он 5 лет писал квик сорт — то на собеседовании он его должен тоже написать.

Так что ты передёргиваешь
Re[27]: Как я провалил этой весной
От: Brutalix  
Дата: 14.07.11 12:49
Оценка:
Здравствуйте, avpavlov, Вы писали:


A>Знаешь, если человек заявляет, что он 5 лет писал квик сорт — то на собеседовании он его должен тоже написать.


A>Так что ты передёргиваешь


Нее — ты не внимательно читаешь. Или я — лень ткнуть мышью и проверить. Красавчег пишет что он пять лет писал этот ваш SQl. Про джоинты он ничего не писал. Я на С++ ваяю побольше чем он на этомвашем сикуеле, но ночью квиксорт таки не напишу. В общем, днем тоже не напишу. И долгим зимним вечером — не напишу. И на работе — пару раз использовал что то стандартное для сортировки. И вот живу же как то.
Re[27]: Как я провалил этой весной
От: Undying Россия  
Дата: 15.07.11 13:50
Оценка:
Здравствуйте, avpavlov, Вы писали:

A>Ну чего я один всё примеры пишу и пишу. Может ты чего покажешь? Сложный СКЛ и простой аналог на каком-нибудь языке программирования?


select
 breakdown.*
 ,count(*)
from
  (
    select gender.code gender, ethnic.code ethnic from gender,ethnic
  ) breakdown
  left join people on people.gender = breakdown.gender and people.ethnic = breakdown.ethnic
group by
  breakdown.gender
  ,breakdown.ethnic


Вы всегда пользователю столько мусорной информации выводите? Представьте, решил начальник построить такой отчетик для отдела из 30 человек. Национальностей в России более 160, так уж и быть мировые брать не будем, полов слаба богу всего 2. И вот для этих 30 человек выводится отчет на десяток страниц с тремя сотнями с гаком строк, из которых процентов 95 это мусор. Как думаете сильно доволен будет начальник таким отчетом? И это нам еще повезло, что отчет строился по связке пол + национальность, а ежели бы начальник решил построить отчет для национальности + ВУЗ, то боюсь в офисе бумаги бы не хватило, чтобы его напечатать.

Если же отчет строить не для галочки, а для полезной деятельности, то весь мусор из него придется выкинуть и запрос сведется к тривиальному:

select gender, ethnic, count(*) from people group by gender, ethnic
Re[28]: Как я провалил этой весной
От: avpavlov  
Дата: 15.07.11 14:02
Оценка:
U>Вы всегда пользователю столько мусорной информации выводите?

Нет, только нужную

U>Представьте, решил начальник построить такой отчетик для отдела из 30 человек.


Предстfвьте такой отчётик нужен для импорта куда-то, где требуются все строки, или для отображения на графике, где опять таки требуются все строки.

U>Национальностей в России более 160, так уж и быть мировые брать не будем, полов слаба богу всего 2.


В Англии многие системы учёта оперируют "национальностями" на верхнем уровне — White, Asian, Black, Mixed

Так что там такие отчёты — реальность, собственно это и был реальный пример.

Полов там, кстати, часто 3

http://www.hesa.ac.uk/index.php/component/option,com_studrec/task,show_file/Itemid,233/mnl,10051/href,a^_^GENDER.html/

U>Если же отчет строить не для галочки, а для полезной деятельности, то весь мусор из него придется выкинуть и запрос сведется к тривиальному:


Так тоже можно, если пользователь согласен, что нулевые строки не нужны.


Вообщем, ты проблему незнания СКЛ свёл к тому, что тебе не нравится пример запроса. Если честно, мне уже надоел этот спор. Добавить мне к тому что я сказал нечего. Примеров как можно сложный СКЛ сделать простым, перенеся в бизнес-слой, я скорее всего от тебя не дождусь.

Так что я сливаюсь из топика (если будут примеры — вернусь!).
Re[29]: Как я провалил этой весной
От: Undying Россия  
Дата: 16.07.11 03:07
Оценка:
Здравствуйте, avpavlov, Вы писали:

A> Примеров как можно сложный СКЛ сделать простым, перенеся в бизнес-слой, я скорее всего от тебя не дождусь.


TableLink genderLink = new TableLink(dbConnection, "Select code From gender", 
  new FieldBlank[] { GenderType.Code }, new IndexBlank[] { GenderType.ByCode });
TableLink ethnicLink = new TableLink(dbConnection, "Select code From ethnic",
  new FieldBlank[] { EthnicType.Code }, new IndexBlank[] { EthnicType.ByCode });
TableLink peopleLink = new TableLink(dbConnection, 
  "Select gender, ethnic, count(*) From people group by gender, ethnic",
  new FieldBlank[] { PeopleType.Gender, PeopleType.Ethnic, TempType.Count },
  new IndexBlank[] { PeopleType.ByGenderAndEthnic });

IEnumerable<RowLink> allGenders = genderLink.AllRows.Concat(null);
IEnumerable<RowLink> allEthnics = ethnicLink.AllRows.Concat(null);

foreach (RowLink gender in allGenders)
{
  foreach (RowLink ethnic in allEthnics)
  {
    int? genderCode = gender != null ? gender.Get(GenderType.Code) : null;
    int? ethnicCode = ethnic != null ? ethnic.Get(EthnicType.Code) : null;
    RowLink people = people.FindRow(PeopleType.ByGenderAndEthnic, genderCode, ethnicCode);
    int count = people != null ? people.Get(TempType.Count) : 0;
  }
}
Re[31]: Как я провалил этой весной
От: Undying Россия  
Дата: 16.07.11 11:00
Оценка:
Здравствуйте, avpavlov, Вы писали:

>>Но зато эти запросы будут

>> 1) легко читаться
>> 2) легко отлаживаться. Даже не так. ЛЕГКО ОТЛАЖИВАТЬСЯ

A>По обоим пунктам СКЛ выиграл.


Ты не так давно доказывал, что с sql может работать далеко не каждый даже ведущий программист. С кодом, который я привел, без всяких проблем работает любой вчерашний студент не шибко чуждый программированию.
Re[29]: Как я провалил этой весной
От: Sharowarsheg  
Дата: 16.07.11 11:47
Оценка:
Здравствуйте, avpavlov, Вы писали:


B>>Красавчег пишет что он пять лет писал этот ваш SQl. Про джоинты он ничего не писал.


A>Ну вот тут и поспорили — я утверждал, что 5ний опыт на СКЛ без джойнов — это простейшие КРУД операции, на знание СКЛ не тянет.


A>Аналогия — 5 лет на С++ не используя классов, структур, заголовочных файлов и вся программа в одном файле — да так тоже можно писать, но называть себя человеком с хорошим знанием С++ и обижаться, что кто-то поставит это под сомнение — ну самому не смешно?


Осталось только узнать, у кого же выше зарплата. Потому что среди всех разговоров про классы и джойны ни разу не вспомнили про сумму денег. Хотя собеседования в основном про суммы денег.
Re[32]: Как я провалил этой весной
От: avpavlov  
Дата: 16.07.11 12:12
Оценка:
U>Ты не так давно доказывал, что с sql может работать далеко не каждый даже ведущий программист.

Вот именно поэтому мы ищем тех кто может.

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


Если честно, тот запрос что я привёл я считаю простейшим. Бывают запросы из многих десятков операторов на десятки килобайт текста — это если речь идёт об импорте данных из какого нибудь некачественного источника, поэтому требуется очистка, обработка, сопоставление — если переписать на С++, у вчерашнего студента мозг лопнет
Re[30]: Как я провалил этой весной
От: avpavlov  
Дата: 16.07.11 12:34
Оценка:
U> RowLink people = people.FindRow(PeopleType.ByGenderAndEthnic, genderCode, ethnicCode);

Я вот ещё сразу не вчитывался, сейчас только внимательно посмотрел. Прокомментируй этот код, пожалуйста. Это на каждый вариант поиска придётся иметь ByXXX? А если условие хоть чуть более сложное чего делать? Например, поиск по OR(или).

Ещё жизненный случай — есть студент, у него указана планируемая дата начала и окончания учёбного курса. А есть ещё поле когда он реально начал. Когда это поле пусто, то используется планируемая дата.

Таким образом поиск получается что-то вроде where coalesce(actualStartDate,plannedStartDate) = ...

Как это будет записано в твоём фрэймворке?
Re[30]: Как я провалил этой весной
От: avpavlov  
Дата: 16.07.11 12:40
Оценка:
U> RowLink people = people.FindRow(PeopleType.ByGenderAndEthnic, genderCode, ethnicCode);

и в догонку — допусти есть поле spouseId (супруг) которое ссылается на эту же таблицу. Оно может быть НУЛЛ (не женат/не замужем). Как будет выглядеть запрос "получить список имён людей и имён их супругов, если супруг есть"?
Re[33]: Как я провалил этой весной
От: Undying Россия  
Дата: 17.07.11 04:23
Оценка:
Здравствуйте, avpavlov, Вы писали:

A>Если честно, тот запрос что я привёл я считаю простейшим. Бывают запросы из многих десятков операторов на десятки килобайт текста — это если речь идёт об импорте данных из какого нибудь некачественного источника, поэтому требуется очистка, обработка, сопоставление — если переписать на С++, у вчерашнего студента мозг лопнет


Писать очистку, обработку и сопоставление на sql это извращение, поэтому и получается сверх сложно, для этого нормальные языки есть, при использовании которых сложность резко снижается.

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

Это даже по твоей задаче видно — при том что логически она выеденного яйца не стоит, sql уже получился довольно сложный. Императивное же решение достаточно объемно, но все преобразования примитивны, поэтому вполне понятны даже студенту.
Re[31]: Как я провалил этой весной
От: 0xC0DE  
Дата: 23.07.11 10:10
Оценка:
Здравствуйте, dmz, Вы писали:

dmz>Т.е мало того, что кода больше, так еще и весь рекордсет будет поднят в память?


Бытует мнение (особенно в управляемых средах), что память — не ресурс )
Re[32]: Как я провалил этой весной
От: SE Украина  
Дата: 23.07.11 15:12
Оценка:
Здравствуйте, Undying, Вы писали:

U>И что? Простота кода и лаконичность кода это не просто разные, а зачастую прямо противоположные вещи.


U> так еще и весь рекордсет будет поднят в память?


U>В память поднята одна строчка таблицы на одну строчку отчета. Бумага в офисе закончится значительно раньше, чем память.


Если у нескольких сотен пользователей вдруг возникает непреодолимое желание разглядывать отчеты на пару миллионов записей (нафига? но ведь хотят!) и вертеть их и так и эдак, причем каждый отчет специфичен для пользователя и так по двадцать отчетов одновременно, то опыт показывает, что при разгильдяйском отношении к памяти, память заканчивается раньше.
Re[32]: Как я провалил этой весной
От: dmz Россия  
Дата: 23.07.11 15:18
Оценка:
U>В память поднята одна строчка таблицы на одну строчку отчета. Бумага в офисе закончится значительно раньше, чем память.

Оно еще и по сети будет передаваться, если СУБД на другом сервере. Т.е. на самом деле этот код пытается выполнять задачу СУБД
вместо нее, едва ли эффективно, при этом.

А какие преимущества у этого кода, кроме того, что он понятен лично вам? Мне вот SQL понятен сразу, а приведенный код требует
вникания в каждую строчку (которых, повторюсь, еще и больше).
Re[33]: Как я провалил этой весной
От: Undying Россия  
Дата: 23.07.11 15:22
Оценка:
Здравствуйте, SE, Вы писали:

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


И чем тут поможет последовательная загрузка строк таблицы? Если отчет хранит данные, то он все равно сожрет немерянно памяти. Тут надо делать честный виртуальный режим, который будет подгружать только то, что видит пользователь на экране.
Re[34]: Как я провалил этой весной
От: SE Украина  
Дата: 23.07.11 15:30
Оценка:
Здравствуйте, Undying, Вы писали:

U>Здравствуйте, SE, Вы писали:


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


U>И чем тут поможет последовательная загрузка строк таблицы? Если отчет хранит данные, то он все равно сожрет немерянно памяти. Тут надо делать честный виртуальный режим, который будет подгружать только то, что видит пользователь на экране.


О том и речь. В результате бизнеслогика все равно переместится на сторону БД, причем, если количество данных не будет известно зарание, то выяснится это только на продакшене.
В общем, для себя отметил, что оба приведенных примера бессмысленны без знания контекста задачи.
Re[35]: Как я провалил этой весной
От: Undying Россия  
Дата: 23.07.11 15:35
Оценка:
Здравствуйте, SE, Вы писали:

SE>О том и речь. В результате бизнеслогика все равно переместится на сторону БД, причем, если количество данных не будет известно зарание, то выяснится это только на продакшене.


Хотя я не понимаю зачем пользователю показывать пару миллионов строк, наиболее разумное решение отсечь 1000-10000 верхних, а остальное отбросить. Неужто заказчик грудью стоит за то что ему все 2 миллиона строк нужны? Заказчик реальной работой вообще не занимается что ли?
Re[33]: Как я провалил этой весной
От: Undying Россия  
Дата: 23.07.11 15:42
Оценка:
Здравствуйте, dmz, Вы писали:

dmz>Оно еще и по сети будет передаваться, если СУБД на другом сервере. Т.е. на самом деле этот код пытается выполнять задачу СУБД

dmz>вместо нее, едва ли эффективно, при этом.

А если sql-запрос использовать оно через астрал начнет передаваться? Ты о чем вообще?

dmz>А какие преимущества у этого кода, кроме того, что он понятен лично вам? Мне вот SQL понятен сразу, а приведенный код требует

dmz>вникания в каждую строчку (которых, повторюсь, еще и больше).

Это тебе к avpavlov'у. Это он говорил, что с таким sql'ем могут работать немногие программисты, поэтому большинство программистов приходится отсеивать на собеседовании. Я не знаю прав прав avpavlov или нет, но знаю, что с кодом который я привел вчерашние студенты работают влегкую.
Re[34]: Как я провалил этой весной
От: avpavlov  
Дата: 23.07.11 16:00
Оценка:
U>Это тебе к avpavlov'у. Это он говорил, что с таким sql'ем могут работать немногие программисты, поэтому большинство программистов приходится отсеивать на собеседовании. Я не знаю прав прав avpavlov или нет, но знаю, что с кодом который я привел вчерашние студенты работают влегкую.

В Яве есть нечто похожее — называется Hibernate, как раз позволяет студентам легко работать с базой данных. Настолько легко, что они даже не понимают, что на самом деле происходит. Вот в твоём примере происходит NxM запросов к базе, вместо одного — а они этого даже не поймут.

Ну ещё, кстати, ты так и ответил на мои вопросы

здесь: http://www.rsdn.ru/forum/job/4345302.1.aspx
Автор: avpavlov
Дата: 16.07.11


и здесь: http://www.rsdn.ru/forum/job/4345306.1.aspx
Автор: avpavlov
Дата: 16.07.11
Re[36]: Как я провалил этой весной
От: SE Украина  
Дата: 23.07.11 16:03
Оценка:
Здравствуйте, Undying, Вы писали:

U>Здравствуйте, SE, Вы писали:


SE>>О том и речь. В результате бизнеслогика все равно переместится на сторону БД, причем, если количество данных не будет известно зарание, то выяснится это только на продакшене.


U>Хотя я не понимаю зачем пользователю показывать пару миллионов строк, наиболее разумное решение отсечь 1000-10000 верхних, а остальное отбросить. Неужто заказчик грудью стоит за то что ему все 2 миллиона строк нужны? Заказчик реальной работой вообще не занимается что ли?


Да. Вот нужны и всё. Причем все два миллиона на одной странице. Заказчики иногда такие заказчики...

Заказчика из моей истории остановил лишь тот аргумент, что один пиксель скролбара соответствовал нескольким тысячам строк. Т.е. при всем желании ни о какой адекватной навигации речь не шла.
Re[35]: Как я провалил этой весной
От: Undying Россия  
Дата: 23.07.11 16:42
Оценка:
Здравствуйте, avpavlov, Вы писали:

A>В Яве есть нечто похожее — называется Hibernate, как раз позволяет студентам легко работать с базой данных.


Хибернейт очень тяжелая ОРМ, поэтому редкостная гадость. У меня ОРМ сверх легкая и соответственно совершенно прозрачная.

A>Настолько легко, что они даже не понимают, что на самом деле происходит. Вот в твоём примере происходит NxM запросов к базе, вместо одного — а они этого даже не поймут.


В моем примере происходит столько запросов сколько выбирается табличек, т.е. всего там три запроса.

A>Ну ещё, кстати, ты так и ответил на мои вопросы


A>здесь: http://www.rsdn.ru/forum/job/4345302.1.aspx
Автор: avpavlov
Дата: 16.07.11

A>и здесь: http://www.rsdn.ru/forum/job/4345306.1.aspx
Автор: avpavlov
Дата: 16.07.11


Не заметил почему-то. Сейчас отвечу.
Re[36]: Как я провалил этой весной
От: avpavlov  
Дата: 23.07.11 16:47
Оценка:
A>>Настолько легко, что они даже не понимают, что на самом деле происходит. Вот в твоём примере происходит NxM запросов к базе, вместо одного — а они этого даже не поймут.

U>В моем примере происходит столько запросов сколько выбирается табличек, т.е. всего там три запроса.


RowLink people = people.FindRow(PeopleType.ByGenderAndEthnic, genderCode, ethnicCode);

Если это не запрос к базе, то что? И вообще, переменная people не объявлена нигде
Re[31]: Как я провалил этой весной
От: Undying Россия  
Дата: 23.07.11 17:04
Оценка:
Здравствуйте, avpavlov, Вы писали:

A>и в догонку — допусти есть поле spouseId (супруг) которое ссылается на эту же таблицу. Оно может быть НУЛЛ (не женат/не замужем). Как будет выглядеть запрос "получить список имён людей и имён их супругов, если супруг есть"?


По уму как-то так:

(Select * From people Where ...) selectPeople;
(Select * From people Where people_id in (select spouseId From selectPeople)) spousePeople;


Но я не умею из программы получать две таблички одним запросом (это вообще возможно?), поэтому на практике либо формирую второй запрос из программы после отработки первого (если уверен, что количество элементов в in будет не слишком велико), либо использую первый запрос в качестве вложенного во втором запросе.

Связывание между выбранными людьми и их супругами сделаю через словари, аналогично предыдущей задаче.
Re[31]: Как я провалил этой весной
От: Undying Россия  
Дата: 23.07.11 17:41
Оценка:
Здравствуйте, avpavlov, Вы писали:

U>> RowLink people = people.FindRow(PeopleType.ByGenderAndEthnic, genderCode, ethnicCode);


A>Я вот ещё сразу не вчитывался, сейчас только внимательно посмотрел. Прокомментируй этот код, пожалуйста. Это на каждый вариант поиска придётся иметь ByXXX? А если условие хоть чуть более сложное чего делать? Например, поиск по OR(или).


Индекс это словарь, т.е. он может помочь только когда ключу соответствует одна или несколько строк. Записывается он одной строчкой кода, можно это делать по месту:

MultiIndexBlank byGenderAndEthnic = new MultiIndexBlank(PeopleType.Gender, PeopleType.Ethnic);


Бинарный поиск сейчас TableLink не поддерживает, т.к. как-то редко надо было в полученной выборке искать что-то в отсортированной коллекции. Соответственно если с такой задачей встречусь, то решу ее внешним образом, через сортировку tableLink.AllRows и бинарный поиск в полученной коллекции. Но в принципе и в tableLink еще один вид индекса добавить недолго.

A>Ещё жизненный случай — есть студент, у него указана планируемая дата начала и окончания учёбного курса. А есть ещё поле когда он реально начал. Когда это поле пусто, то используется планируемая дата.

A>Таким образом поиск получается что-то вроде where coalesce(actualStartDate,plannedStartDate) = ...
A>Как это будет записано в твоём фрэймворке?

А в полном варианте можешь задачу привести? Если задача состоит в том, чтобы выбрать всех студентов с временем начала учебы в таком-то диапазоне, то я ее средствами sql буду решать, передав соответствующий запрос в конструктор TableLink'а. Я не люблю мержить таблицы средствами sql (т.к. считаю это сложным), а фильтрацию строк лучше делать sql'ем, благо это обычно достаточно просто. Т.е. общий принцип такой, если средствами sql можно значительно сократить количество выбираемых строк, то это надо делать, операции же не сокращающие количество строк, а преобразующие их лучше делать в программе.
Re[37]: Как я провалил этой весной
От: Undying Россия  
Дата: 23.07.11 17:45
Оценка:
Здравствуйте, avpavlov, Вы писали:

A>RowLink people = peopleLink.FindRow(PeopleType.ByGenderAndEthnic, genderCode, ethnicCode);

A>Если это не запрос к базе, то что? И вообще, переменная people не объявлена нигде

Извиняюсь за опечатку, там должно быть выделенное.

Это поиск в полученном DataTable. При создании TableLink мы указываем какие индексы (словари) нам нужно построить по полученному DataTable. Соответственно FindRow это просто обращение к словарю.
Re[32]: Как я провалил этой весной
От: avpavlov  
Дата: 24.07.11 06:42
Оценка:
U>
U>(Select * From people Where ...) selectPeople;
U>(Select * From people Where people_id in (select spouseId From selectPeople)) spousePeople;
U>


U>Но я не умею из программы получать две таблички одним запросом (это вообще возможно?), поэтому на практике либо формирую второй запрос из программы после отработки первого (если уверен, что количество элементов в in будет не слишком велико), либо использую первый запрос в качестве вложенного во втором запросе.


U>Связывание между выбранными людьми и их супругами сделаю через словари, аналогично предыдущей задаче.


U>По уму как-то так:


Нет, по уму как то так


select people.Name, spouse.Name
from 
 people 
 left join people spouse on spouse.id = people.spouse_id



U>либо использую первый запрос в качестве вложенного во втором запросе.


А как это на уровне твоего ОРМ сделать? Как в указанном в предыдущем посте коде? 2 таблицы вытащить в память и объединить в программе? И всё ради того, чтобы не учить джойны?
Re[33]: Как я провалил этой весной
От: Undying Россия  
Дата: 24.07.11 08:50
Оценка:
Здравствуйте, avpavlov, Вы писали:

A>А как это на уровне твоего ОРМ сделать? Как в указанном в предыдущем посте коде? 2 таблицы вытащить в память и объединить в программе? И всё ради того, чтобы не учить джойны?


Раньше я и знал, и активно использовал join'ы. Однако когда ты поднял тему про sql, я с некоторым удивлением обнаружил, что неиспользовал join'ы уже очень давно, т.к. на практике почти всегда мерж в памяти оказывается понятнее и удобнее.
Re[34]: Как я провалил этой весной
От: avpavlov  
Дата: 24.07.11 11:05
Оценка:
U> т.к. на практике почти всегда мерж в памяти оказывается понятнее и удобнее.

Я даже не знаю что тут возразить. А если таблицы на десятки тысяч строк? А если на сотни тысяч?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.