Здравствуйте, stuav, Вы писали:
S>Что собвственно в самом языке изучать несколько лет, скажем на теже плючы с STL помоему вполне достаточно полгода
Хм... Вы Саттера уже прорешали? =) Но это так к слову.
Я лично уже шесть лет программирую на C/C++. А до этого четыре года изучал в универе... ну вернее формально я там изучал всякую ненужную фигню, но на самом деле с пользой тратил время на задней парте на Кернигана, Страуструпа и Седжвика, а зачёты получал за сваянные преподам программки. Итого значит десять лет уже... И вот знаете. Я не могу сказать, что знаю его в тонкостях Ну то есть да, он для меня почти родной и глупых ошибок я уже не делаю, и на собеседовании меня сложно завалить, но каждый раз как сажусь что-нибудь серьёзно почитать, или даже просто начинаю сплошняком читать местный форум и думать как бы я отвечал на уже отвеченные вопросы, неизменно открывается нечто новое и интересное. Пусть и в мелочах, а новое. А ведь уже и новый стандарт на подходе... я пока сознательно не совался туда особо, чтобы не портить себе праздник от выхода.
Это я к чему. Язык определяет образ мыслей. Это очень важно. Вы очень зря это недооцениваете.
А библиотеки это действительно мусор. Сколько их уже кануло в лету... Я даже в резюме не включаю все эти бесконечные трёхбуквенные сочетания, которые когда-либо использовал. Просто пишу C/C++ 6 лет и всем всё ясно
Re[4]: про опыт работы в X с языком(технологией) XX
Здравствуйте, Quadri, Вы писали:
Q>Здравствуйте, stuav, Вы писали:
S>>т.е. типа на освоение смарт поинтеров, умение написать внятный конструктор копирования с оператором=, уходит не мене 4 лет — может не стоит считать окружающих за совсем полных дебилов) Q>Много времени уходит на то чтобы запомнить когда где и как правильно применять все эти конструкции, идиомы, паттерны etc.
НЕ НУЖНО ЗАПОМИНАТЬ!!!! Думать нужно.
Вот из-за попыток запоминания, я был готов придушить любого, кто подсовывал джуниорам книжку с патернами. Ну должен человек придумать большенство велосипедов САМ. И только потом почитать, как это класифицировано. И тогда он их применять будет правильно. Не нужно превращать программиста в ходячую энцеклопедию, что толку с того что он выучит эти страшные слова??? Он их потом путать будет. Будет пытаться втулить какой то патерн, там где нужно и не нужно. Будет апелировать к книге, словами: "А вот в книге написано, что обсервер выглядит так!" Все эти знания они скорее ограничевают развитие чем помогают в нём. Всё равно, не может человек не набивать свои шишки, а если его искуственно ограничивать, то вместо понимания у него будут догмы.
Просветите зачем в параметрах вакансий пишут опыт работы с С++ — 3 года, или SQL — 2 года или что нить аналогичное про джаву.
Что собвственно в самом языке изучать несколько лет, скажем на теже плючы с STL помоему вполне достаточно полгода, а у уж на java c SQL и того меньше.
Я понимаю когда требуют знания конкретных библиотек — теже QT или j2ee можно изучать чутьли не бесконечно(правда зачем).
Дык ведь требуют опыт работы с самим языком?
Re[4]: про опыт работы в X с языком(технологией) XX
Здравствуйте, 31415926, Вы писали:
T>>>... но java и попроще будет, и честно говоря поражает когда пишут опыт на джаве — 3 года, её можно за месяц(сам язык, и многопочность в нём) освоить весь.
3>Боюсь, что Вы жестоко заблуждаетесь (или имеете весьма своеобразное понимание слова "освоить"). 3>Наша компания уже несколько месяцев ищет хорошего Java — программиста, и я участвую в проведении собеседований с кандидатами. Ищем на senior position, так что приглашаюся люди с опытом. Так вот: уровень знания Core Java — просто удручающий. До разговоров про многопоточность как правило, дело не даже доходит. А если доходит — то тут же и заканчивается. И это в Москве и в кризис!
Тут вообще всё смешалось в одну кучу... и понятие освоить, и пройти собеседование, и годы опыта, и синьёр
Вот, к примеру, несколько месяцев назад понадобилось писать на Яве (до этого с Явой не пересекался, но приличный опыт на С++ и немного С#), ну как бы язык из той же группы ничего нового в нём нет. Покрутил айдеешку, сбилдил хеловорлд, полистал доку. Сел писать и того за пару дней написал первую прототипную утилиту ещё пару дней и сделал из неё сервлет, который до сих пор живёт на продакшене. Так по немногу, по немногу и проект себе плавно движется. А вот недавно словил себя на мысле, что пишу я на яве уже пол года, а собственно языка то я и не знаю. То есть пишу на каком то его подмножестве и впринципе для этих задач его вполне хватает. И даже книжку какую прочитать поленился
А теперь вопрос:
— Пишу ли я на Яве? Да, пишу. (как доказательство есть проект, есть результаты его внедрения)
— Знаю ли я Яву? Нет, не знаю. С++ знаю, а тут знаю минимум для этой задачи.
— Станет ли мои знания лучше за следующие пол года? Вряд ли, если только не сесть и как то системно не поразбираться.
И того: Уровень знания языка как то не особо зависят от числа лет с ним проведеным Как я писал раньше скорее разнообразие влияет. Чем больше разных задач решалось, тем с более разных сторон знаешь язык и тем за частую глубже эти знания.
Теперь про прохождение интервью:
Смогу ли я пройти интервью на Ява девелопера?
Наверное если сейчас штаны одену и пойду сдаваться, то наверное и нет.
А если потрачу пару дней на то что бы почитать немного про Яву и технологии вокруг потереблю хороших Ява девелоперов на предмет, что спрашивают на интервью (это ведь вам кажеться, что ваше интервью уникальное, а на самом деле большенство из них очень похожи), пройду какой то тест на брандбенче, а если ещё не поленюсь и сбегаю на пару интервью по Яве (тушкой, чучелом, джуниором, J2EE, J2ME ...) То думаю мои шансы весьма велики.
Ведь интервью не проверяет умение програмировать, а умение проходить интервью (да это умение корелирует с умением прогрмировать, но ведь только корелирует)
У вас будет пару часов на анализ моих знаний, и большая часть этого времени будет потрачена на беседу с Эйчаром и беседе о проектах (то есть то что не касается на прямую моего слабого места — знания Явы). Я смогу ответить на простые вопросы по синтаксису и базовым библиотекам (я ведь книгу читал), могу написать пару кусочков кода (буквы то я знаю) но Ява не С++, тут нельзя даже обсудить стандарты кодирования. Начём копать чуть глубже, вероятно достаточно стандартными вопросами, так эти ответы я зарание выучил (к тому же не полный, вроде, идиот, что то окажется знаю, что то придумаю на месте). В результате, зацепимся за какую то спорную тему (я пару выберу и подготовлюсь) ну например стратегия сборки мусора (так это вообщем то не ява). А время то идёт... Что ещё осталось а всякие диаграмки классов, дизайн, патерны... так можно поговорить, это ведь не Ява Про что ещё поговорить? про всякие библиотеки, ну да у Явы куча всяких сателитов (Хибернейты, Спринги...) ну слова я знаю + общая эрудиция (я вообще до чёрта разных слов знаю, правда к Яве не относящихся) думаю что то да отвечу, вы же не будете у меня спрашивать какой параметр у такой то функции в такой то библиотеке (сейчас это не модно, да и вообще потом на том же RSDNе заклюют).
И что, вот прошли наши пару часов увлекательной беседы, и что отвечал я уверенно, откровенную лажу не парил, ну немного приврал (но ведь и вы всего не помните, а если человек уверенно врёт, то можно с ним и согласится). Обсудили сложную тему — стратегии сборки мусора (ну и что, что я эту тему выбрал, вы ведь этого не заметили). Ну и чем я не Ява девелопер?
Конечно если светить мне лампой в глаза и устроить перекрёстный допрос, то навероне вы бы быстро обнаружели подвох. Но боюсь что большенство настоящих Ява девелоперов подобное интервью не прошли бы тоже. Люди ведь от нервов вообще чёрти что говорят.
Теперь насчёт люди ничего не знают:
я в свое время проводил очень много интервью, и моя статистика по С++, правда (не думаю, что с Явой иначе), что где то 10% нормально (естественно это моя оценка, что такое нормально и может отличаться у разных людей в разную сторону) знают язык, остальные используют очень ограниченое подмножество С++ и делают упор в дебри библиотек и технологий. Но на каждый товар найдётся свой покупатель. Мне, например, не нужны в кандидате знания по MS SQL (пусть и хорошие), а для кого то это основное, и не важно что человек не может сказать, чем структура отличается от класса, а мне вот важно.
Но то что в течении нескольких месяцев не можете закрыть позицию (в большом городе, популярные технологии, да и вообщем то позиция не экслюзивная) это наводит на мысли или о не адекватном интервью или требованиях или зарплате.
А то что кризис? так он всем кризис. Или вы думаете, что халява пришла? Наоборот. да немного просели зарплаты (при чём в основном не зарплаты, а предложения, так что вы теперь пытаетесь сманить людей на меньшии деньги но теперь стабильность стала цениться выше и те кто раньше бегали за сотней теперь предпочитают того кто платит, а не обещает больше. Да в начале кризиса прошли какие то сокращения и можно было взять хорошего девелопера по дешёвке, но ведь они не ждали вас, а искали работу и наверняка её нашли (по крайней мере я не вижу нищих, с табличками "програмирую за еду"). Так что теперь народ стал более инертный, и Эйчарам пора вспомнить свои мантры, типа "Деньги это небольшая часть всей мотивации", и показать как это работает на практике (бюджеты ведь порезали). Кризис он ведь для всех, правда?
Здравствуйте, IT, Вы писали: IT>Не понятно зачем вообще какие-то там языки указывать? Можно просто в резюме написать одно слово — программист.
Согласно последним веяниям КСВ (http://rsdn.ru/forum/flame.comp/3418503.aspx
Здравствуйте, Mr.Cat, Вы писали:
MC>С хаскелем за сколько управишься?
Весьма не корректный вопрос, мне понадобилось пару дней на то что бы писать хоть как то и пару недель на то что бы писать приемлимо.
Но и сейчас спустя где то год его использования я порой открываю для себя, что то новое, а вот в плюсах такого давно не было... но правда и в опыте разница в порядок.
Но я до этого писал на Лиспе, так что мне не нужно было переворачивать мозг
Но вопрос в другом, более 3 лет использования языка не дают уже никаких приемуществ, если не пишется что то экстраординарное (транслятор, библиотека меняющаю парадигму языка и пр.) где то 1 год это не средний девелопер (речь не про общий опыт)
А вот общий опыт весьма важен, а вот разнообразынй опыт это хорошо (вот это, правда, на любителя)
Re[19]: про опыт работы в X с языком(технологией) XX
Здравствуйте, 31415926, Вы писали:
3>1. Разумеется, Вы правы, и если потоков больше, чем элементов, алгоритм не очень подходит. Впрочем, в такой ситуации любой алгоритм будет работать плохо, так как сами данные становятся узким местом. Цель задачи — понять, насколько человек в курсе современных идей в области concurrent programming.
Да вы и сами не в их курсе
Крутить общий счетчик из нескольких потоков — не самая светлая идея. Сейчас же все машинки стали многопроцессорными, ваши потоки разбегутся по ядрам процессора и будут заниматься в основном синхронизацией процессорных кешей между собой, в том месте, где счетчик лежит. Lock-free тут вам ничем не поможет, он будет работать примерно так же медленно, как если бы вы туда обычный семафорчик воткнули.
Сейчас стало принято учитывать такие вещи.
3>Специфика многопоточного программирования такова, что ошибки дорого обходятся и тяжело исправляются. Посему очень желательно найти человека с уже выработанными правильными "инстинктами".
Я бы различал ошибки, которые нарушают корректность работы программы, и "ошибки", которые по сути — недооптимизация. Неизвестно ведь, что предпочтут продемонстрировать ваши соискатели, знание знаменитой фразы Хоара про то, что "premature optimization is the root of all evil", или умение эту самую premature optimization осуществлять
Re[2]: про опыт работы в X с языком(технологией) XX
Здравствуйте, Mr.Cat, Вы писали:
MC>С хаскелем за сколько управишься?
Если будут платить и будет задача интересная которую нужно решать именно на хаскеле(наименьшее трудо затраты, а то ж я сволоч такая что много языков знаю и меня будет тяжело убедтть что именно хаскель оптимален для данной задачи) то месяца за 2 я думаю.
Re[2]: про опыт работы в X с языком(технологией) XX
T>Я лично уже шесть лет программирую на C/C++. А до этого четыре года изучал в универе... ну вернее формально я там изучал всякую ненужную фигню, но на самом деле с пользой тратил время на задней парте на Кернигана, Страуструпа и Седжвика, а зачёты получал за сваянные преподам программки. Итого значит десять лет уже... И вот знаете. Я не могу сказать, что знаю его в тонкостях Ну то есть да, он для меня почти родной и глупых ошибок я уже не делаю, и на собеседовании меня сложно завалить, но каждый раз как сажусь что-нибудь серьёзно почитать, или даже просто начинаю сплошняком читать местный форум и думать как бы я отвечал на уже отвеченные вопросы, неизменно открывается нечто новое и интересное. Пусть и в мелочах, а новое. А ведь уже и новый стандарт на подходе... я пока сознательно не совался туда особо, чтобы не портить себе праздник от выхода.
Я стандарт коненчо уважаю, но документацию на компилятор с которым нужно работать — как бы читаю больше. На мой взгляд бессмысленно сколко нибудь долго изучать стандарт языка всё рано рабоатеш с конкретным компилятором и поставляемым к ниму либами, а цикл обновления всего этого на x86 где то 2 года. И упираться в конкретный developmen environment начинаеш гораздо быстрее чем прочитаеш весь стандарт. Java является исключением поскольку там стандарт и реализациия пишутся одновременно, но java и попроще будет, и честно говоря поражает когда пишут опыт на джаве — 3 года, её можно за месяц(сам язык, и многопочность в нём) освоить весь.
Re[4]: про опыт работы в X с языком(технологией) XX
Здравствуйте, ilnar, Вы писали:
I>Здравствуйте, stuav, Вы писали:
S>>но java и попроще будет, и честно говоря поражает когда пишут опыт на джаве — 3 года, её можно за месяц(сам язык, и многопочность в нём) освоить весь.
I>т.е. через месяц если вас спросить, то на зубок будете знать java?
да как бе уже)
Re[4]: про опыт работы в X с языком(технологией) XX
Здравствуйте, 31415926, Вы писали:
3>Здравствуйте, stuav, Вы писали:
S>>Здравствуйте, Tilir, Вы писали:
T>>>... но java и попроще будет, и честно говоря поражает когда пишут опыт на джаве — 3 года, её можно за месяц(сам язык, и многопочность в нём) освоить весь.
3>Боюсь, что Вы жестоко заблуждаетесь (или имеете весьма своеобразное понимание слова "освоить"). 3>Наша компания уже несколько месяцев ищет хорошего Java — программиста, и я участвую в проведении собеседований с кандидатами. Ищем на senior position, так что приглашаюся люди с опытом. Так вот: уровень знания Core Java — просто удручающий. До разговоров про многопоточность как правило, дело не даже доходит. А если доходит — то тут же и заканчивается. И это в Москве и в кризис!
Освоить — знать что конкретно делает каждый оператор языка, как с памятью работь, знать основные системы ввода вывода,многопочность, базовый инструментарий — какуюнить популярную ide, средства сборки, примерно так.
Куда резюме заслать? Я только кроме core джавы в джаве мало чего знаю, ибо имел отношению к джаве с очень специфического бока.
Re[15]: про опыт работы в X с языком(технологией) XX
Здравствуйте, 31415926, Вы писали:
3>Здравствуйте, eaa, Вы писали:
eaa>>Здравствуйте, 31415926, Вы писали:
3>>>
3>>>class DataFeeder<T> {
3>>> private final T[] data;
3>>> private final AtomicInteger pos = new AtomicInteger(-1);
3>>> public DataFeeder(T[] data) {
3>>> this.data = data;
3>>> }
3>>> public T next() {
3>>> int idx;
3>>> do {
3>>> idx = pos.incrementAndGet();
3>>> if( idx < data.length ) return data[idx];
3>>> }
3>>> while( pos.compareAndSet(idx, 0));
3>>> return data[0];
3>>> }
3>>>}
3>>>
eaa>>может: pos.compareAndSet(data.length, 0) ?
3>Это — одно и то же (в этом месте idx == data.length). Кстати — здесь опечатка (в предыдущем посте правильно): 3>
3>while(!pos.compareAndSet(idx, 0))
3>
вы в условиях говорили, про не белокирующий код. А по сути реализовали эту блокировку вручную. Как будет работать этот код если 100 потоков и масив из 3 элементов. А сами операции быстрые?
Re[17]: про опыт работы в X с языком(технологией) XX
Здравствуйте, 31415926, Вы писали:
3>compareAndSet — быстрая операция (на большинстве процессоров поддерживается аппаратно). Этот алгоритм — не блокирующий, в частности не требует обращения к ядру ОС для диспетчеризации потоков. Подробнее — "Java Concurrency in Practice". Вообще сейчас — это весьма популярный сюжет в CS.
Эта "быстрая операция" может стать чертовски медленной, если вы будете теребить один и тот же счетчик из разный ядер процессора. Синхронизация кешей процессоров осуществляется очень медленно.
Re[18]: про опыт работы в X с языком(технологией) XX
3>Разумеется, uncontended monitor acquisition в Java — дешевая операция. Проблема в том, сколько стоит contended. Именно поэтому столько народу занимается разработкой lock-free алгоритмов
непонятно к чему был твое решение задачи про очередь. Там никакого особого lock-free продемонстрировано не было. Твое решение ничем принципиально от спинлока не отличается.
Здравствуйте, stuav, Вы писали:
S>Просветите зачем в параметрах вакансий пишут опыт работы с С++ — 3 года, или SQL — 2 года или что нить аналогичное про джаву.
S>Что собвственно в самом языке изучать несколько лет, скажем на теже плючы с STL помоему вполне достаточно полгода, а у уж на java c SQL и того меньше. S>Я понимаю когда требуют знания конкретных библиотек — теже QT или j2ee можно изучать чутьли не бесконечно(правда зачем). S>Дык ведь требуют опыт работы с самим языком?
Потому что С++ язык такой загадочный. А SQL хз. почему
Make flame.politics Great Again!
Re[3]: про опыт работы в X с языком(технологией) XX
Здравствуйте, stuav, Вы писали:
S>Если будут платить и будет задача интересная которую нужно решать именно на хаскеле(наименьшее трудо затраты, а то ж я сволоч такая что много языков знаю и меня будет тяжело убедтть что именно хаскель оптимален для данной задачи) то месяца за 2 я думаю.
Здравствуйте, stuav, Вы писали:
S>Просветите зачем в параметрах вакансий пишут опыт работы с С++ — 3 года, или SQL — 2 года или что нить аналогичное про джаву.
S>Что собвственно в самом языке изучать несколько лет, скажем на теже плючы с STL помоему вполне достаточно полгода, а у уж на java c SQL и того меньше. S>Я понимаю когда требуют знания конкретных библиотек — теже QT или j2ee можно изучать чутьли не бесконечно(правда зачем). S>Дык ведь требуют опыт работы с самим языком?
1. через 2-3 года опыта работы над коммерческими проектами (особенно большими) на роли простого исполнителя без блата или статуса гуру, вы поймете, что в вашей работе от 50% до 99% — это рутина
и чтобы реально опробовать на практике все возможности и нюансы
1 основной технологии + 3-10 связанных с ней технологий + 1-3 предметных областей, где они применяются
вам потребуется от 3 до 5 лет работы в этой сфере
2. это хороший фильтр на возраст, без формальной дискриминации молодежи
например от 12 лет опыта в области Х на западных сайтах означает welcome для всех кому за 35 (потому что вся основная команда такая и 27 летний реальный (!) эксперт с 5летним стажем в суд подать не сможет насчет дискрминации)
хотя и дураку ясно, что что 12 лет, что 5 — это уже пофигу
Здравствуйте, stuav, Вы писали:
S>Просветите зачем в параметрах вакансий пишут опыт работы с С++ — 3 года, или SQL — 2 года или что нить аналогичное про джаву.
Что бы показать опыт и попросить больше денег
А по сути во первых это просят работодатели: "Х опыт от 2 лет", то есть что бы показать эйчару, что подхожу.
А второе (это уже со строны работодател) это даёт возможность оценить опыт человека. Если у человека заявлено 2 года Делфи + 3 года С билдер + 3 года Вижуял С++ и 8 лет Оракл, то это даёт, приблизительное, представление чем он занимался
Re[3]: про опыт работы в X с языком(технологией) XX
S>но java и попроще будет, и честно говоря поражает когда пишут опыт на джаве — 3 года, её можно за месяц(сам язык, и многопочность в нём) освоить весь.
т.е. через месяц если вас спросить, то на зубок будете знать java?
Здравствуйте, stuav, Вы писали:
S>Просветите зачем в параметрах вакансий пишут опыт работы с С++ — 3 года, или SQL — 2 года или что нить аналогичное про джаву.
Затем что 3 года C++ это такой слабенький программист С++ у которого вечно что-то утекает и падает где не попадя. Но в то же время, он уже имеет какое-то представление о языке, и его вполне можно отправлять на задание без особого присмотра. Соответственно работодатель показывает что совсем уж зеленых новичек ему не нужен, но и гуру не требуется.
Re[2]: про опыт работы в X с языком(технологией) XX
T>Я лично уже шесть лет программирую на C/C++. А до этого четыре года изучал в универе... ну вернее формально я там изучал всякую ненужную фигню, но на самом деле с пользой тратил время на задней парте на Кернигана, Страуструпа и Седжвика, а зачёты получал за сваянные преподам программки. Итого значит десять лет уже... И вот знаете. Я не могу сказать, что знаю его в тонкостях Ну то есть да, он для меня почти родной и глупых ошибок я уже не делаю, и на собеседовании меня сложно завалить, но каждый раз как сажусь что-нибудь серьёзно почитать, или даже просто начинаю сплошняком читать местный форум и думать как бы я отвечал на уже отвеченные вопросы, неизменно открывается нечто новое и интересное. Пусть и в мелочах, а новое. А ведь уже и новый стандарт на подходе... я пока сознательно не совался туда особо, чтобы не портить себе праздник от выхода.
Читая такие посты, понимаешь всю правоту Луговского.
P.S. Сам программировал (и программирую на плюсах).
Re[3]: про опыт работы в X с языком(технологией) XX
Здравствуйте, stuav, Вы писали:
T>>Я лично уже шесть лет программирую на C/C++. А до этого четыре года изучал в универе... ну вернее формально я там изучал всякую ненужную фигню, но на самом деле с пользой тратил время на задней парте на Кернигана, Страуструпа и Седжвика, а зачёты получал за сваянные преподам программки. Итого значит десять лет уже... И вот знаете. Я не могу сказать, что знаю его в тонкостях Ну то есть да, он для меня почти родной и глупых ошибок я уже не делаю, и на собеседовании меня сложно завалить, но каждый раз как сажусь что-нибудь серьёзно почитать, или даже просто начинаю сплошняком читать местный форум и думать как бы я отвечал на уже отвеченные вопросы, неизменно открывается нечто новое и интересное. Пусть и в мелочах, а новое. А ведь уже и новый стандарт на подходе... я пока сознательно не совался туда особо, чтобы не портить себе праздник от выхода.
S>Я стандарт коненчо уважаю, но документацию на компилятор с которым нужно работать — как бы читаю больше. На мой взгляд бессмысленно сколко нибудь долго изучать стандарт языка всё рано рабоатеш с конкретным компилятором и поставляемым к ниму либами, а цикл обновления всего этого на x86 где то 2 года. И упираться в конкретный developmen environment начинаеш гораздо быстрее чем прочитаеш весь стандарт. Java является исключением поскольку там стандарт и реализациия пишутся одновременно, но java и попроще будет, и честно говоря поражает когда пишут опыт на джаве — 3 года, её можно за месяц(сам язык, и многопочность в нём) освоить весь.
Выше Tilir не про стандарт писал, а про наработку хороших правил программирования.
Стандарт очень много разрешает, все программы компилируются, но мало действительно хороших (с точки зрения внутренней структуры). Читая стандарт, любую документацию до всего этого не додумаешься. Можно, конечно, изобрести RAII, но прочесть про эту идиому будет намного эффективнее и быстрее.
Мой код сейчас собирается на 2-х компиляторах, проще писать по стандарту, чем изучать документацию к ним. К тому же компиляторы как раз устареют через 2 года, а стандарт меняется реже (правда через 2 года текущий стандарт тоже устареет ).
Re[2]: про опыт работы в X с языком(технологией) XX
Зайдите в любой книжный магазин и вы увидите, что вам предложат изучить язык Java за семь дней с помощью книги Teach Yourself Java in 7 Days, а также обнаружите другие бесчисленные варианты учебных пособий, предлагающих изучить Visual Basic, Windows, Интернет и многое другое через несколько дней или часов.
Так это нормально. кто же купит книгу "Изучи паскаль за 12 лет"?
К тому же такие книги — отличный старт для новичков. Книга будет написана просто и не для профессионалов. Профессионалов мало, а новичков много, а книге нужен тираж.
Немного оффтопа:
Знает ли кто-нибудь хорошую книгу для начинающих изучать Java, но не для новичков?
Т.е. синтаксис java очень похож на С++ и особенно на С#. Нет желания изучать, что такое цикл, как использовать исключения, но при этом хочется получить хорошее и по возможности полное представление о языке вместе со всеми библиотеками и приёмами программирования.
Re[2]: про опыт работы в X с языком(технологией) XX
Здравствуйте, kaa.python, Вы писали:
KP>Здравствуйте, stuav, Вы писали:
S>>Просветите зачем в параметрах вакансий пишут опыт работы с С++ — 3 года, или SQL — 2 года или что нить аналогичное про джаву.
KP>Затем что 3 года C++ это такой слабенький программист С++ у которого вечно что-то утекает и падает где не попадя. Но в то же время, он уже имеет какое-то представление о языке, и его вполне можно отправлять на задание без особого присмотра. Соответственно работодатель показывает что совсем уж зеленых новичек ему не нужен, но и гуру не требуется.
т.е. типа на освоение смарт поинтеров, умение написать внятный конструктор копирования с оператором=, уходит не мене 4 лет — может не стоит считать окружающих за совсем полных дебилов)
Re[3]: про опыт работы в X с языком(технологией) XX
Здравствуйте, stuav, Вы писали:
S>т.е. типа на освоение смарт поинтеров, умение написать внятный конструктор копирования с оператором=, уходит не мене 4 лет — может не стоит считать окружающих за совсем полных дебилов)
Много времени уходит на то чтобы запомнить когда где и как правильно применять все эти конструкции, идиомы, паттерны etc.
Я за год не научился на все 100%, наверное я из тех окружающих о которых вы выше упомянули...
Re[2]: про опыт работы в X с языком(технологией) XX
Здравствуйте, kaa.python, Вы писали:
KP>Затем что 3 года C++ это такой слабенький программист С++ у которого вечно что-то утекает и падает где не попадя. Но в то же время, он уже имеет какое-то представление о языке, и его вполне можно отправлять на задание без особого присмотра.
А вы уверены, что он эти 3 года програмировал?
3 года достаточно большой срок, за три года человек с нуля выходит из джуниоров, за три года на новом языке человек вполне может претендовать на синьйорскую позицию (если сумарного опыта хватает).
Тут вопрос скорее в том чем он занимался, если все эти три года он писал код который читает из базы и выводит в окошко, то вероятно да. Но так он при этом писал на каком то подмножестве языка и зачастую очень не большём. И коненчно шаг в лево шаг в право — это открытие. Но самое смешное, что 10 лет тут всё равно не спасают. Человек просто решает один класс задач и всё. Просто есть люди любопытные а есть нет. Я когда то собеседовал людей много и часто, и частенько видел таких.
Например, приходит человек — 10 лет опыта. И всё время С++, SQL. Начинаем говорить С++ — не знает совсем (10 лет! опыта), то есть С синтаксис знает, что такое класс знает, что такое виртуальный метод знает, что такое исключение занет и всё. Зачем нужен виртуальный деструктор, ни одного каст оператора и тд. — по нулям. За то знает SQL кучу тонкостей по MS SQL Server, знает много про бугалтерию на предприятиях и кучу других полезных знаний для своей работы (но мне это всё не нужно). Просто он писал определённый класс задач и наверняка не плохо с этим справлялся. И при этом совсем не любопытный, чуть что : "я без этого обходился", "мне это не нужно было".
Вот под такого человека и будет хорошо. Выставить все требования которые нужны (со всеми абревиатурками) и если его опыт на это матчится — отлично, он сможет делать эту работу.
А есть человек пару лет опыта, работал в команде где в полной мере stl,boost и тд. Так вот у него С++ очень даже. и ничего не течёт, а всего пару лет опыта, но при этом оценки времени плывут, к большой задачке не знает с какой стороны подойти. То есть это джуниор пусть и с хорошим знанием языка. Но всё это прийдёт, но просто, со временем.
Так что 3 года просто С++ — ничего не значит. Скорее важен общий опыт и распределение по технологиям. По тому что по этому можно прикинуть, чем же он всё это время занимался.
Re[3]: про опыт работы в X с языком(технологией) XX
Здравствуйте, stuav, Вы писали:
S>Здравствуйте, Tilir, Вы писали:
T>>... но java и попроще будет, и честно говоря поражает когда пишут опыт на джаве — 3 года, её можно за месяц(сам язык, и многопочность в нём) освоить весь.
Боюсь, что Вы жестоко заблуждаетесь (или имеете весьма своеобразное понимание слова "освоить").
Наша компания уже несколько месяцев ищет хорошего Java — программиста, и я участвую в проведении собеседований с кандидатами. Ищем на senior position, так что приглашаюся люди с опытом. Так вот: уровень знания Core Java — просто удручающий. До разговоров про многопоточность как правило, дело не даже доходит. А если доходит — то тут же и заканчивается. И это в Москве и в кризис!
Re[5]: про опыт работы в X с языком(технологией) XX
Здравствуйте, stuav, Вы писали:
S>Куда резюме заслать? Я только кроме core джавы в джаве мало чего знаю, ибо имел отношению к джаве с очень специфического бока.
Опубликуйте на HH, если Ваше резюме нас заинтересует — пригласим на собеседование. Я, правда, сильно сомневаюсь, что Вы его успешно пройдете,
но — кто знает? Удачи!
Re[6]: про опыт работы в X с языком(технологией) XX
Здравствуйте, 31415926, Вы писали:
3>Здравствуйте, stuav, Вы писали:
S>>Куда резюме заслать? Я только кроме core джавы в джаве мало чего знаю, ибо имел отношению к джаве с очень специфического бока.
3>Опубликуйте на HH, если Ваше резюме нас заинтересует — пригласим на собеседование. Я, правда, сильно сомневаюсь, что Вы его успешно пройдете, 3>но — кто знает? Удачи!
А в личку заслать, ссылку на вакнасию?
Re[7]: про опыт работы в X с языком(технологией) XX
Здравствуйте, stuav, Вы писали:
S>Здравствуйте, 31415926, Вы писали:
3>>Здравствуйте, stuav, Вы писали:
S>>>Куда резюме заслать? Я только кроме core джавы в джаве мало чего знаю, ибо имел отношению к джаве с очень специфического бока.
3>>Опубликуйте на HH, если Ваше резюме нас заинтересует — пригласим на собеседование. Я, правда, сильно сомневаюсь, что Вы его успешно пройдете, 3>>но — кто знает? Удачи!
S>А в личку заслать, ссылку на вакнасию?
Извините, но кандитатов у нас и так более, чем достаточно, а Вы, как, я уже сказал, все равно едва-ли подойдете (еще раз извините).
Действуйте "в установленном порядке"
Здравствуйте, stuav, Вы писали:
S>Просветите зачем в параметрах вакансий пишут опыт работы с С++ — 3 года, или SQL — 2 года или что нить аналогичное про джаву.
Не понятно зачем вообще какие-то там языки указывать? Можно просто в резюме написать одно слово — программист.
Если нам не помогут, то мы тоже никого не пощадим.
Re[8]: про опыт работы в X с языком(технологией) XX
Здравствуйте, 31415926, Вы писали:
3>Здравствуйте, stuav, Вы писали:
S>>Здравствуйте, 31415926, Вы писали:
3>>>Здравствуйте, stuav, Вы писали:
S>>>>Куда резюме заслать? Я только кроме core джавы в джаве мало чего знаю, ибо имел отношению к джаве с очень специфического бока.
3>>>Опубликуйте на HH, если Ваше резюме нас заинтересует — пригласим на собеседование. Я, правда, сильно сомневаюсь, что Вы его успешно пройдете, 3>>>но — кто знает? Удачи!
S>>А в личку заслать, ссылку на вакнасию?
3>Извините, но кандитатов у нас и так более, чем достаточно, а Вы, как, я уже сказал, все равно едва-ли подойдете (еще раз извините). 3>Действуйте "в установленном порядке"
Вы ещё от важности не лопаетесь?
То только что пишем кто никто ни чего не знает (даже в кризис), а то боимся сслку на вансию кинуть, может там просто либо денег мало, либо требутся бешенный набор либ, а HR сисит отсекает если хоть одной либы нету то сразу в треш. Ну или то и другое
Re[2]: про опыт работы в X с языком(технологией) XX
Здравствуйте, IT, Вы писали:
IT>Здравствуйте, stuav, Вы писали:
S>>Просветите зачем в параметрах вакансий пишут опыт работы с С++ — 3 года, или SQL — 2 года или что нить аналогичное про джаву.
IT>Не понятно зачем вообще какие-то там языки указывать? Можно просто в резюме написать одно слово — программист.
Да точно, можно просто написать инженерное образование
С другой стороны почему не требуют "уверенное владение microsoft word в течение 10 лет" — тожеш вон она программулина какая большая?
Тёмный лес однако...
Re[9]: про опыт работы в X с языком(технологией) XX
Здравствуйте, stuav, Вы писали:
S>Вы ещё от важности не лопаетесь? S>То только что пишем кто никто ни чего не знает (даже в кризис), а то боимся сслку на вансию кинуть, может там просто либо денег мало, либо требутся бешенный набор либ, а HR сисит отсекает если хоть одной либы нету то сразу в треш. Ну или то и другое
Во-первых, я просто не хочу светить на форумах свое место работы, так что важность здесь ни при чем.
Во-вторых, вакансии обубликованы на НН.
В-третьих, что Вам мешает все-таки опубликовать резюме?
Чтобы оценить свои силы, можете попробовать решить за 10 минут следующую задачу.
Имеется массив, содержащий тестовые данные, которые используются несколькими потоками для создания тестовой нагрузки сервера.
Требуется реализовать lock-free алгоритм, которые позволял бы нескольким потокам выбирать данные из массива. После того, как все данные выбраны, начать с начала (циклический буфер). В остальном данные должны извлекаться без пропусков и повторений. Подчеркиваю, алгоритм должет быть lock-free.
Re[10]: про опыт работы в X с языком(технологией) XX
Здравствуйте, 31415926, Вы писали: 3>Чтобы оценить свои силы, можете попробовать решить за 10 минут следующую задачу.
Я вот чисто из любопытства оценил. Где можно постомтреть варианты эталонных решений?
Re[11]: про опыт работы в X с языком(технологией) XX
Здравствуйте, Mr.Cat, Вы писали:
MC>Здравствуйте, 31415926, Вы писали: 3>>Чтобы оценить свои силы, можете попробовать решить за 10 минут следующую задачу. MC>Я вот чисто из любопытства оценил. Где можно постомтреть варианты эталонных решений?
Откровенно, говоря, не знаю. Сам придумал. Возможное решение опубликую завтра — если никто не предложит своего.
Re[10]: про опыт работы в X с языком(технологией) XX
Здравствуйте, 31415926, Вы писали:
3>Здравствуйте, stuav, Вы писали:
S>>Вы ещё от важности не лопаетесь? S>>То только что пишем кто никто ни чего не знает (даже в кризис), а то боимся сслку на вансию кинуть, может там просто либо денег мало, либо требутся бешенный набор либ, а HR сисит отсекает если хоть одной либы нету то сразу в треш. Ну или то и другое
3>Во-первых, я просто не хочу светить на форумах свое место работы, так что важность здесь ни при чем. 3>Во-вторых, вакансии обубликованы на НН. 3>В-третьих, что Вам мешает все-таки опубликовать резюме?
3>Чтобы оценить свои силы, можете попробовать решить за 10 минут следующую задачу.
3>Имеется массив, содержащий тестовые данные, которые используются несколькими потоками для создания тестовой нагрузки сервера. 3>Требуется реализовать lock-free алгоритм, которые позволял бы нескольким потокам выбирать данные из массива. После того, как все данные выбраны, начать с начала (циклический буфер). В остальном данные должны извлекаться без пропусков и повторений. Подчеркиваю, алгоритм должет быть lock-free.
ну ключевое слово тут java.util.concurrent.atomic, а дальше как бэ всё ясно.
Береём массив с тестовыми данными. TestDataClass td[];
Индекс следующего элемента который надо взять запихиваем в AtomicInteger i;
Операция чтения TestDataClass cur_data=td[i.getAndIncrement()]; только тут ещё надо аккуратно сделать с перескоком на нулевой элемент.
Это помоему где то в каком то цчебнике описанно только не помню где (кажись на сайте айбиема).
Угадал или наказан?
Re[11]: про опыт работы в X с языком(технологией) XX
Здравствуйте, stuav, Вы писали:
S>Здравствуйте, 31415926, Вы писали:
3>>Здравствуйте, stuav, Вы писали:
S>ну ключевое слово тут java.util.concurrent.atomic, а дальше как бэ всё ясно. S>Береём массив с тестовыми данными. TestDataClass td[];
S>Индекс следующего элемента который надо взять запихиваем в AtomicInteger i;
S>Операция чтения TestDataClass cur_data=td[i.getAndIncrement()]; только тут ещё надо аккуратно сделать с перескоком на нулевой элемент.
S>Это помоему где то в каком то цчебнике описанно только не помню где (кажись на сайте айбиема). S>Угадал или наказан?
То, что нужно использовать Atomic — правильно. Но проблема не только с нулевым элементом. Засчитать не могу. Напишите код и поймете почему.
Re[3]: про опыт работы в X с языком(технологией) XX
Здравствуйте, alzt, Вы писали:
A>Немного оффтопа: A>Знает ли кто-нибудь хорошую книгу для начинающих изучать Java, но не для новичков? A>Т.е. синтаксис java очень похож на С++ и особенно на С#. Нет желания изучать, что такое цикл, как использовать исключения, но при этом хочется получить хорошее и по возможности полное представление о языке вместе со всеми библиотеками и приёмами программирования.
Здравствуйте, 31415926, Вы писали:
3>Чтобы оценить свои силы, можете попробовать решить за 10 минут следующую задачу.
3>Имеется массив, содержащий тестовые данные, которые используются несколькими потоками для создания тестовой нагрузки сервера. 3>Требуется реализовать lock-free алгоритм, которые позволял бы нескольким потокам выбирать данные из массива. После того, как все данные выбраны, начать с начала (циклический буфер). В остальном данные должны извлекаться без пропусков и повторений. Подчеркиваю, алгоритм должет быть lock-free.
String[] data = ...
AtomicInteger counter = new AtomicInteger();
eaa>Тут вообще всё смешалось в одну кучу... и понятие освоить, и пройти собеседование, и годы опыта, и синьёр
....
Да все правильно Вы пишите (ну — точнее, почти все, но это частности). Я сам не понимаю в чем дело.
Но люди "плавают" в элементарнейших вопросах. Ничего заумного мы не спрашиваем, сигнатуры методов на память называть не требуем,
про экзотические фреймворки не пытаем. Неужели спросить, как устроен HashMap — это наезд? А ведь и это многих ставит в тупик.
Я полагаю, что это, отчасти, "вина" J2EE — люди тратят много сил на изучение фреймворков, а про собственно язык программирования забывают.
Другое возможное объяснение — это проскальзывающее время от времени на российских форумах убеждение, что системный аналитик — это круто, "знание предметной области" — повод для гордости, а остальное, как говорил один мой бывший начальник, "детали реализации". Возможно, что это и так.
Вот только иногда (как в нашем случае) эти "детали" как раз очень важны.
Re[11]: про опыт работы в X с языком(технологией) XX
eaa>String[] data = ... eaa>AtomicInteger counter = new AtomicInteger();
eaa>String item = data[counter.getAndIncrement() % data.length];
eaa>Оформлять в виде полного исходника лень, я ведь всё так не Ява программист и не претендую на вашу вакансию
eaa>И того, наверное, минут 5 вместе с поиском AtomicInteger
Что-ж так тоже можно, но не здорово — рано или поздно значение counter перелезет через Integer.MAX_VALUE и станет отрицательным.
Конечно, это произойдет не скоро, но есть и более корректное решение
Re[6]: про опыт работы в X с языком(технологией) XX
Здравствуйте, 31415926, Вы писали:
3>Но люди "плавают" в элементарнейших вопросах. Ничего заумного мы не спрашиваем, сигнатуры методов на память называть не требуем, 3>про экзотические фреймворки не пытаем. Неужели спросить, как устроен HashMap — это наезд? А ведь и это многих ставит в тупик.
Нет это не наезд, но ведь вопрос в сущности не по яве. Ведь с точки зрения явы это ассоциативный контейнер. И оценки сложности по операциям. И все. Остальное это уже действительно детали реализации и к яве они отношения не имеют. А на подобный вопрос может ответить любой программист (даже тот кто про яву не слышал) но знает структуру данных ХешТаблица.
А поскольку, как все мы знаем, програмист не должен уметь писать сортировку. То можно и на оценки сложности забить. Просто помнить, что HashMap быстрее TreeMap но как то странно упорядочен и в большенстве случаев этого достаточно.
3>Я полагаю, что это, отчасти, "вина" J2EE — люди тратят много сил на изучение фреймворков, а про собственно язык программирования забывают. 3>Другое возможное объяснение — это проскальзывающее время от времени на российских форумах убеждение, что системный аналитик — это круто, "знание предметной области" — повод для гордости, а остальное, как говорил один мой бывший начальник, "детали реализации". Возможно, что это и так.
Почему круто? Всё просто у вас кто получает больше ПМ или Синьйор девелопер? вроде вот и ответ. А главное куда расти то?
3>Вот только иногда (как в нашем случае) эти "детали" как раз очень важны.
Так может тогда не важна Ява, а важно что то другое? может вы не того ищете?
Re[7]: про опыт работы в X с языком(технологией) XX
Здравствуйте, eaa, Вы писали:
eaa>Нет это не наезд, но ведь вопрос в сущности не по яве. Ведь с точки зрения явы это ассоциативный контейнер. И оценки сложности по операциям. И все. Остальное это уже действительно детали реализации и к яве они отношения не имеют. А на подобный вопрос может ответить любой программист (даже тот кто про яву не слышал) но знает структуру данных ХешТаблица.
Вы ошибаетесь, стандартный HashMap в Java устроен не так, как описано в учебниках по теории программирования вообще (во всяком случае, в некоторых).
И при написании высокопроизводительных приложений понимать это очень невредно. Только не надо говорить, что такие приложения следует писать не на Java.
Re[8]: про опыт работы в X с языком(технологией) XX
Здравствуйте, 31415926, Вы писали:
3>Вы ошибаетесь, стандартный HashMap в Java устроен не так, как описано в учебниках по теории программирования вообще (во всяком случае, в некоторых).
Хм, и чем же этот явовский хешмап отличается? Только что просмотрел исходники
Такой же масив списков элементов с одинаковыми хешами. такой же линейный поиск по ним. обычной мод хешфункции по длинне.
Или речь про стратегии расширения? так это действительно мелочи, если мы уж пишем высокопроизводительное приложение на Яве , не будем же мы на это полагаться... уж лучше сразу выделить.
3>И при написании высокопроизводительных приложений понимать это очень невредно. Только не надо говорить, что такие приложения следует писать не на Java.
сам сейчас такое пишу
Re[12]: про опыт работы в X с языком(технологией) XX
Здравствуйте, 31415926, Вы писали: 3>Что-ж так тоже можно, но не здорово — рано или поздно значение counter перелезет через Integer.MAX_VALUE и станет отрицательным. 3>Конечно, это произойдет не скоро, но есть и более корректное решение
Остаток от деления можно заменить на любую другую операцию, учитывающую в том числе знак.\
Я, кстати, сразу подумал о том же решении (с поправкой на то, что я дотнетчик). Хайвмайнд, блин.
Re[3]: про опыт работы в X с языком(технологией) XX
Здравствуйте, stuav, Вы писали:
S>>>Просветите зачем в параметрах вакансий пишут опыт работы с С++ — 3 года, или SQL — 2 года или что нить аналогичное про джаву. IT>>Не понятно зачем вообще какие-то там языки указывать? Можно просто в резюме написать одно слово — программист. S>Да точно, можно просто написать инженерное образование
А ещё лучше — человек.
S>С другой стороны почему не требуют "уверенное владение microsoft word в течение 10 лет" — тожеш вон она программулина какая большая?
Для тех кому это важно требуют ещё как.
S>Тёмный лес однако...
Ничего тёмного. Года опыта позволяют оценить уровень кандидата с приемлемой точностью для того, чтобы решить вызывать ли его на собеседование.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, stuav, Вы писали:
S>Просветите зачем в параметрах вакансий пишут опыт работы с С++ — 3 года, или SQL — 2 года или что нить аналогичное про джаву.
Ну наверное считается, что если вы проработали на C++ или на Яве N лет, то вы уже набили себе шишки в стандартных местах и знаете, чего можно делать, а чего нет, какие библиотеки использовать, где их брать и т.п.
Что такое абстрактный SQL не очень понятно, они все разные. Но опять же, наверное поработав несколько лет, научаешься в нем ориентироваться.
Но вообще, количество протертых штанов — плохое мерило знаний.
Re[10]: про опыт работы в X с языком(технологией) XX
Здравствуйте, 31415926, Вы писали:
3>Имеется массив, содержащий тестовые данные, которые используются несколькими потоками для создания тестовой нагрузки сервера. 3>Требуется реализовать lock-free алгоритм, которые позволял бы нескольким потокам выбирать данные из массива. После того, как все данные выбраны, начать с начала (циклический буфер). В остальном данные должны извлекаться без пропусков и повторений. Подчеркиваю, алгоритм должет быть lock-free.
А вы ничего не пропустили в описании задачи? Если потоки только выбирают данные из массива, то массив — read only, и никаких локов не требуется.
Re[12]: про опыт работы в X с языком(технологией) XX
Здравствуйте, 31415926, Вы писали: 3>есть и более корректное решение
Кстати, да, если потоков постоянное число, и выбирают они из массива примерно с одной скоростью (либо число элементов массива делится на число потоков) — то проще каждому раздать начальный индекс в массиве и приращение индекса (равное числу потоков) при выборе следующего элемента.
Re[7]: про опыт работы в X с языком(технологией) XX
eaa>А поскольку, как все мы знаем, програмист не должен уметь писать сортировку. То можно и на оценки сложности забить. Просто помнить, что HashMap быстрее TreeMap но как то странно упорядочен и в большенстве случаев этого достаточно.
Достаточно до тех пор пока в этот хеш не попадут неудобные данные, так что знать как устроен и принцип работы все-таки необходимо.
Re[11]: про опыт работы в X с языком(технологией) XX
Здравствуйте, Pzz, Вы писали:
Pzz>Здравствуйте, 31415926, Вы писали:
3>>Имеется массив, содержащий тестовые данные, которые используются несколькими потоками для создания тестовой нагрузки сервера. 3>>Требуется реализовать lock-free алгоритм, которые позволял бы нескольким потокам выбирать данные из массива. После того, как все данные выбраны, начать с начала (циклический буфер). В остальном данные должны извлекаться без пропусков и повторений. Подчеркиваю, алгоритм должет быть lock-free.
Pzz>А вы ничего не пропустили в описании задачи? Если потоки только выбирают данные из массива, то массив — read only, и никаких локов не требуется.
А причем здесь массив?
Публикую возможное решение:
public T next() {
int idx;
do {
idx = pos.incrementAndGet();
if( idx < data.length ) return data[idx];
}
while( !pos.compareAndSet(idx, 0));
return data[0];
}
Использование compareAndSet — стандартная идиома в lock-free алгоритмах.
Re[12]: про опыт работы в X с языком(технологией) XX
Здравствуйте, 31415926, Вы писали:
3>Здравствуйте, Pzz, Вы писали:
Pzz>>Здравствуйте, 31415926, Вы писали:
3>>>Имеется массив, содержащий тестовые данные, которые используются несколькими потоками для создания тестовой нагрузки сервера. 3>>>Требуется реализовать lock-free алгоритм, которые позволял бы нескольким потокам выбирать данные из массива. После того, как все данные выбраны, начать с начала (циклический буфер). В остальном данные должны извлекаться без пропусков и повторений. Подчеркиваю, алгоритм должет быть lock-free.
Виноват — забал добавить обьявление переменных впрочем, они очевидны).
class DataFeeder<T> {
private final T[] data;
private final AtomicInteger pos = new AtomicInteger(-1);
public DataFeeder(T[] data) {
this.data = data;
}
public T next() {
int idx;
do {
idx = pos.incrementAndGet();
if( idx < data.length ) return data[idx];
}
while( pos.compareAndSet(idx, 0));
return data[0];
}
}
Re[8]: про опыт работы в X с языком(технологией) XX
Здравствуйте, 31415926, Вы писали:
3>Извините, но кандитатов у нас и так более, чем достаточно, а Вы, как, я уже сказал, все равно едва-ли подойдете (еще раз извините). 3>Действуйте "в установленном порядке"
Кста, если кандидатов более чем достаточно, то единственное что нужно это облегчить фильтрацию.
Можно часть работы сбросить на кадровое агенство (если, конечно денег начатьству не очень жалко). Конечно кадровое агенство не способно проверить знания, но они отлично делают механическую работу. Например, мы давали агенству такой тестик: исходничек где то на пол страницы, нужно найти и исправить ошибки. И большие поля для коментариев. Давать кандидату на бумаге (что бы без компа правил в агенстве) потом шлют факсом или сканом. По времени не ограничивать, я проверял на сотрудниках — требует 5 мин времени. Значит у кандидатов займёт 10-15 мин. Впринципе, агенство это подтвердило.
В результате:
резултаты теста и собеседования давали очень близкие результаты, проводились разными людьми, конечно, возможно отсейлись хорошие люди, но ведь цель не найти ВСЕХ хороших людей.
проверка теста занимает 2-3 минуты.
агенство было недовольно тем что нужно присудствие человека лично (но всё равно гонят к себе в офис) и тем что нет ответов от теста (ну не верили они что бывают задания без правельных ответов , но кто платит тот и заказывает музыку.
Re[13]: про опыт работы в X с языком(технологией) XX
Здравствуйте, 31415926, Вы писали:
3>Здравствуйте, eaa, Вы писали:
eaa>>может: pos.compareAndSet(data.length, 0) ?
3>Это — одно и то же (в этом месте idx == data.length).
Виноват — idx не обязательно == data.length. Насколько я понимаю, оба варианта — правильные.
Просто в моем случае идет проверка, что значение pos не поменялось, что, на мой вкус, более "идиоматично".
Re[16]: про опыт работы в X с языком(технологией) XX
Здравствуйте, eaa, Вы писали:
eaa>вы в условиях говорили, про не белокирующий код. А по сути реализовали эту блокировку вручную. Как будет работать этот код если 100 потоков и масив из 3 элементов. А сами операции быстрые?
compareAndSet — быстрая операция (на большинстве процессоров поддерживается аппаратно). Этот алгоритм — не блокирующий, в частности не требует обращения к ядру ОС для диспетчеризации потоков. Подробнее — "Java Concurrency in Practice". Вообще сейчас — это весьма популярный сюжет в CS.
Re[17]: про опыт работы в X с языком(технологией) XX
Здравствуйте, 31415926, Вы писали:
3>compareAndSet — быстрая операция (на большинстве процессоров поддерживается аппаратно). Этот алгоритм — не блокирующий, в частности не требует обращения к ядру ОС для диспетчеризации потоков. Подробнее — "Java Concurrency in Practice". Вообще сейчас — это весьма популярный сюжет в CS.
То что не используются функции синхронизации на уровне ядра, автоматичиски не делает алгоритм не блокирующим.
Если количество потоков велико (в много раз больше к размеру масива), то может оказаться, что гоянются пусты циклы.
Формально, то оно может быть и решено, но ведь по сути решение не важное
В любом случае подобная задачка на собеседовании не очень хороша. Есть класс задач которые плохо решаются на собеседовании, и похоже это одна из таких.
Туда же написать лексикографичиское сравнение. Не знаю почему, но на интервью с этой задачей не справляются. Хотя ничего сложного в ней нет.
Я такие задачки давал в количестве один штука за интервью, что бы посмотреть как человек может реагирует на свои ошибки.
Re[18]: про опыт работы в X с языком(технологией) XX
Здравствуйте, eaa, Вы писали:
eaa>Здравствуйте, 31415926, Вы писали:
3>>compareAndSet — быстрая операция (на большинстве процессоров поддерживается аппаратно). Этот алгоритм — не блокирующий, в частности не требует обращения к ядру ОС для диспетчеризации потоков. Подробнее — "Java Concurrency in Practice". Вообще сейчас — это весьма популярный сюжет в CS.
eaa>То что не используются функции синхронизации на уровне ядра, автоматичиски не делает алгоритм не блокирующим. eaa>Если количество потоков велико (в много раз больше к размеру масива), то может оказаться, что гоянются пусты циклы. eaa>Формально, то оно может быть и решено, но ведь по сути решение не важное
eaa>В любом случае подобная задачка на собеседовании не очень хороша. Есть класс задач которые плохо решаются на собеседовании, и похоже это одна из таких. eaa>Туда же написать лексикографичиское сравнение. Не знаю почему, но на интервью с этой задачей не справляются. Хотя ничего сложного в ней нет. eaa>Я такие задачки давал в количестве один штука за интервью, что бы посмотреть как человек может реагирует на свои ошибки.
1. Разумеется, Вы правы, и если потоков больше, чем элементов, алгоритм не очень подходит. Впрочем, в такой ситуации любой алгоритм будет работать плохо, так как сами данные становятся узким местом. Цель задачи — понять, насколько человек в курсе современных идей в области concurrent programming.
Специфика многопоточного программирования такова, что ошибки дорого обходятся и тяжело исправляются. Посему очень желательно найти человека с уже выработанными правильными "инстинктами".
2. Не уверен, что "класс задач которые плохо решаются на собеседовании" — корректное понятие (все очень индивидуально), хотя, то, что любое собеседование — в какой-то степени, лотерея, несомненно. А что делать?
Re[19]: про опыт работы в X с языком(технологией) XX
Здравствуйте, 31415926, Вы писали:
3>2. Не уверен, что "класс задач которые плохо решаются на собеседовании" — корректное понятие (все очень индивидуально), хотя, то, что любое собеседование — в какой-то степени, лотерея, несомненно. А что делать?
Лотерея и лотерея. С точки зрения компании важно матожидание, как это не прискорбно со стороны кандидата.
По этому задания нужно тчательно вымерять. Не оценивать кандидата по новым задачам, а оценивать задачи по кандидатам.
Я в какой то момент отошёл от задач придуманых на лету. Ну во первых пару раз лажался а вот вторых, иногда, кажущаяся тебе элементарная задача оказыватся не подъёмной на интервью. Вместо этого собрал пару десятков задачек (+ куча вариантов с ограничениями, областью, константами) котрые тестились на кандидатах, на коллегах.
Ведь на интервью нужно получить сравнение кандидатов (с другими кандидатами или сотрудниками), а это сложно сделать если задачи разной сложности.
Но факт остаётся фактом, есть задачи который кандидаты плохо решают на интервью.
Вот пример: написать оператор меньше для масива из 5 элементов. Люди которые написали с первого раза правельно на интервью — еденицы. Так просто проблем не вызывает
Просто подобные задачки нужно отбирать и или давать сознательно или исключать.
Re[12]: про опыт работы в X с языком(технологией) XX
Здравствуйте, 31415926, Вы писали:
3>Использование compareAndSet — стандартная идиома в lock-free алгоритмах.
Скажите, а из вашего описания задачи хоть как-нибудь следует, что у вас индексом в массиве все потоки сообща крутят? Может поэтому так трудно найти людей?
Re[20]: про опыт работы в X с языком(технологией) XX
Здравствуйте, eaa, Вы писали:
eaa>Здравствуйте, 31415926, Вы писали:
3>>2. Не уверен, что "класс задач которые плохо решаются на собеседовании" — корректное понятие (все очень индивидуально), хотя, то, что любое собеседование — в какой-то степени, лотерея, несомненно. А что делать?
eaa>Лотерея и лотерея. С точки зрения компании важно матожидание, как это не прискорбно со стороны кандидата. eaa>По этому задания нужно тчательно вымерять. Не оценивать кандидата по новым задачам, а оценивать задачи по кандидатам. eaa>Я в какой то момент отошёл от задач придуманых на лету. Ну во первых пару раз лажался а вот вторых, иногда, кажущаяся тебе элементарная задача оказыватся не подъёмной на интервью. Вместо этого собрал пару десятков задачек (+ куча вариантов с ограничениями, областью, константами) котрые тестились на кандидатах, на коллегах. eaa>Ведь на интервью нужно получить сравнение кандидатов (с другими кандидатами или сотрудниками), а это сложно сделать если задачи разной сложности.
eaa>Но факт остаётся фактом, есть задачи который кандидаты плохо решают на интервью.
eaa>Вот пример: написать оператор меньше для масива из 5 элементов. Люди которые написали с первого раза правельно на интервью — еденицы. Так просто проблем не вызывает eaa>Просто подобные задачки нужно отбирать и или давать сознательно или исключать.
А я и не утверждаю, что могу предложить универсальный подход к собеседованию. К тому же понятно, что критерии/способ отбора кандидата на стартап и на поддержку/развитие уже существующего большого проекта, скорее всего, должны несколько различаться. Я не собираюсь критиковать Ваш подход, хотя и не понимаю, какие именно навыки, Вы проверяете, предлагая задачи на реализацию операции сравнения. Впрочем, с необходимостью тщательного подбора задач заранее трудно не согласиться. Тут, как и во многих других случаях, лучше несовершенная система, чем полное отсутствие таковой.
Re[13]: про опыт работы в X с языком(технологией) XX
Здравствуйте, Pzz, Вы писали:
Pzz>Здравствуйте, 31415926, Вы писали:
3>>Использование compareAndSet — стандартная идиома в lock-free алгоритмах.
Pzz>Скажите, а из вашего описания задачи хоть как-нибудь следует, что у вас индексом в массиве все потоки сообща крутят? Может поэтому так трудно найти людей?
Странно, что это не очевидно (иначе в чем вообще проблема?). Кроме того, никто не запрещает задавать уточняющие вопросы, содержание которых тоже кое-что о кандидате говорит.
Re[14]: про опыт работы в X с языком(технологией) XX
Здравствуйте, 31415926, Вы писали:
Pzz>>Скажите, а из вашего описания задачи хоть как-нибудь следует, что у вас индексом в массиве все потоки сообща крутят? Может поэтому так трудно найти людей?
3>Странно, что это не очевидно (иначе в чем вообще проблема?).
Это не очевидно потому, что это бессмысленно. Если вам просто надо гонять тестовые данные по кругу, почему бы не выдать каждому потоку по локальному счетчику и получить алгоритм, который просто не нуждается в синхронизации?
А подумал я, честно говоря, что вы решаете классическую Readers-writers problem с множественными читателями и lock-free. Но потом решил уточнить, а то сложно как-то для собеседования-то
3>Кроме того, никто не запрещает задавать уточняющие вопросы, содержание которых тоже кое-что о кандидате говорит.
Вот я и задал. А вы в ответ зачем-то ответ на задачу вывалили
Re[21]: про опыт работы в X с языком(технологией) XX
Здравствуйте, 31415926, Вы писали:
3>Я не собираюсь критиковать Ваш подход, хотя и не понимаю, какие именно навыки, Вы проверяете, предлагая задачи на реализацию операции сравнения.
А это не была отдельная задача, (ведь реализация её три строкчи, что то типа реверсирования строки) она была внутри намного более практичиской задачи. И прошло не мало собседований пока её локализовали как вызывающая ступор.
Re[15]: про опыт работы в X с языком(технологией) XX
Здравствуйте, Pzz, Вы писали:
Pzz>Здравствуйте, 31415926, Вы писали:
Pzz>>>Скажите, а из вашего описания задачи хоть как-нибудь следует, что у вас индексом в массиве все потоки сообща крутят? Может поэтому так трудно найти людей?
3>>Странно, что это не очевидно (иначе в чем вообще проблема?).
Pzz>Это не очевидно потому, что это бессмысленно. Если вам просто надо гонять тестовые данные по кругу, почему бы не выдать каждому потоку по локальному счетчику и получить алгоритм, который просто не нуждается в синхронизации?
Pzz>А подумал я, честно говоря, что вы решаете классическую Readers-writers problem с множественными читателями и lock-free. Но потом решил уточнить, а то сложно как-то для собеседования-то
При наличие writer'ов добиться lock-free проблематично — что должны делать потоки, если новых данных не поступило? Можно говорить о сокращении access contention (напр. использовать ConcurrentLinkedQueue). Локальный счетчик на поток не подходит, если Вы, к примеру, тестируете сервер, который реализует протокол, требующий уникальности ключей сообщение на достаточно длинных сериях. Кроме того, речь идет о тестовой задаче, которая неизбежно описывает не вполне "жизненную" ситуацию.
Насчет производительности — напишите тест, прогоните его на многопроцессорной машине, и убедитесь.
Накладные расходы на синхронизацию процессорных кешей несопоставимы с ценой обращения к ядру ОС, которое возникает при простом использовании synchronized блоков. Впрочем, если Вы можете предложить другой алгоритм, который без этого обходится — замечательно.
Впрочем, я не собираюсь ввязываться в перебранку.
Re[22]: про опыт работы в X с языком(технологией) XX
Здравствуйте, eaa, Вы писали:
eaa>Здравствуйте, 31415926, Вы писали:
3>>Я не собираюсь критиковать Ваш подход, хотя и не понимаю, какие именно навыки, Вы проверяете, предлагая задачи на реализацию операции сравнения.
eaa>А это не была отдельная задача, (ведь реализация её три строкчи, что то типа реверсирования строки) она была внутри намного более практичиской задачи. И прошло не мало собседований пока её локализовали как вызывающая ступор.
Интересно — буду иметь в виду. Спасибо.
Re[16]: про опыт работы в X с языком(технологией) XX
Здравствуйте, 31415926, Вы писали:
3>При наличие writer'ов добиться lock-free проблематично — что должны делать потоки, если новых данных не поступило?
Ну понятно, что если writer слишком быстрый или слишком медленный, кому-то придется подождать, и тут без блокировок не обойтись. Я имею ввиду именно синхронизацию доступа к разделяемым данным.
3>Локальный счетчик на поток не подходит, если Вы, к примеру, тестируете сервер, который реализует протокол, требующий уникальности ключей сообщение на достаточно длинных сериях.
А reordering? Неизвестно ведь, в каком порядке ваши потоки будут разбрасывать данные из массива.
3>Кроме того, речь идет о тестовой задаче, которая неизбежно описывает не вполне "жизненную" ситуацию.
Ну вот человеку, который написал достаточное количество настоящего параллельного кода сразу видно, что в вашей задаче что-то не так. Вы либо должны быть готовы к приходу таких людей, либо изменить тест таким образом, чтобы подобных вопросов не возникало. В любом из этих случаев, вы сами должны понимать, чего в вашем тесте не так.
3>Насчет производительности — напишите тест, прогоните его на многопроцессорной машине, и убедитесь. 3>Накладные расходы на синхронизацию процессорных кешей несопоставимы с ценой обращения к ядру ОС, которое возникает при простом использовании synchronized блоков.
Очень даже сопостовимы. "Сбегать в ядро" может делаться без единого обращения к физической памяти. Синхронизовать кеши без этого вряд ли удасться. Память медленнее процессора в сотни раз. Я уж не говорю о том, что вы пишете на Яве, а не на голом win32 API, а там объекты синхронизации могут устроены таком образом, чтобы без нужды к операционной системе не обращаться.
3>Впрочем, если Вы можете предложить другой алгоритм, который без этого обходится — замечательно.
Разбейте свой массив на сегменты. Используйте общий счетчик, чтобы делить сегменты между потоками, а внутри сегмента двигайтесь локальным для потока счетчиком.
Re[17]: про опыт работы в X с языком(технологией) XX
Здравствуйте, Pzz, Вы писали:
Pzz>Очень даже сопостовимы. "Сбегать в ядро" может делаться без единого обращения к физической памяти. Синхронизовать кеши без этого вряд ли удасться. Память медленнее процессора в сотни раз. Я уж не говорю о том, что вы пишете на Яве, а не на голом win32 API, а там объекты синхронизации могут устроены таком образом, чтобы без нужды к операционной системе не обращаться.
Ваши рассуждения носят, по моему, чисто абстрактный характер и противоречат как многочисленным текстам вполне уважаемых мною людей, так и моему собственному опыту. Не считаю нужным продолжать эту бессмысленную дискуссию.
Re[13]: про опыт работы в X с языком(технологией) XX
Здравствуйте, Mr.Cat, Вы писали:
MC>Кстати, да, если потоков постоянное число, и выбирают они из массива примерно с одной скоростью (либо число элементов массива делится на число потоков) — то проще каждому раздать начальный индекс в массиве и приращение индекса (равное числу потоков) при выборе следующего элемента.
Не всегда это хорошая идея. Потоки могут работать с разной скоростью. В результате равномерность подачи данных будет нарушена.
Re[16]: про опыт работы в X с языком(технологией) XX
3>Накладные расходы на синхронизацию процессорных кешей несопоставимы с ценой обращения к ядру ОС, которое возникает при простом использовании synchronized блоков.
не знаю где как, но в линуксе даже при использовании обычных мютексов обращение к ядру происходит вовсе не всегда. Если contention отсутствует, то системного вызова не происходит.
Re[17]: про опыт работы в X с языком(технологией) XX
Здравствуйте, dilmah, Вы писали:
3>>Накладные расходы на синхронизацию процессорных кешей несопоставимы с ценой обращения к ядру ОС, которое возникает при простом использовании synchronized блоков.
D>не знаю где как, но в линуксе даже при использовании обычных мютексов обращение к ядру происходит вовсе не всегда. Если contention отсутствует, то системного вызова не происходит.
Разумеется, uncontended monitor acquisition в Java — дешевая операция. Проблема в том, сколько стоит contended. Именно поэтому столько народу занимается разработкой lock-free алгоритмов
Re[18]: про опыт работы в X с языком(технологией) XX
3>Разумеется, uncontended monitor acquisition в Java — дешевая операция. Проблема в том, сколько стоит contended. Именно поэтому столько народу занимается разработкой lock-free алгоритмов
ну или ведут разработку так, чтобы contention был как можно меньше. Например, разбивают данные на зоны с помощью хэша.
Re[19]: про опыт работы в X с языком(технологией) XX
3>>Разумеется, uncontended monitor acquisition в Java — дешевая операция. Проблема в том, сколько стоит contended. Именно поэтому столько народу занимается разработкой lock-free алгоритмов
D>непонятно к чему был твое решение задачи про очередь. Там никакого особого lock-free продемонстрировано не было. Твое решение ничем принципиально от спинлока не отличается.
Как я уже говорил, эта задачка — для для демонстрации крутизны, а для проверки знания базовых приемов lock-free программирования, еще точнее, понимания сферы применения CAS — инструкций, что все-таки, как мне представляется, несколько отличается от спин-лока.
Re[19]: про опыт работы в X с языком(технологией) XX
3>>Разумеется, uncontended monitor acquisition в Java — дешевая операция. Проблема в том, сколько стоит contended. Именно поэтому столько народу занимается разработкой lock-free алгоритмов
D>ну или ведут разработку так, чтобы contention был как можно меньше. Например, разбивают данные на зоны с помощью хэша.
Да, lock striping — один из подходов. Далеко не всегда можно предложить lock-free реализацию.
Re[18]: про опыт работы в X с языком(технологией) XX
Здравствуйте, 31415926, Вы писали:
3>Ваши рассуждения носят, по моему, чисто абстрактный характер и противоречат как многочисленным текстам вполне уважаемых мною людей, так и моему собственному опыту. Не считаю нужным продолжать эту бессмысленную дискуссию.
Ну удачи вам в поиске сотрудников
Re[19]: про опыт работы в X с языком(технологией) XX
Здравствуйте, Pzz, Вы писали:
Pzz>Здравствуйте, 31415926, Вы писали:
3>>Ваши рассуждения носят, по моему, чисто абстрактный характер и противоречат как многочисленным текстам вполне уважаемых мною людей, так и моему собственному опыту. Не считаю нужным продолжать эту бессмысленную дискуссию.
Pzz>Ну удачи вам в поиске сотрудников
Спасибо.
Re[5]: про опыт работы в X с языком(технологией) XX
Здравствуйте, stuav, Вы писали:
S>Здравствуйте, ilnar, Вы писали:
I>>Здравствуйте, stuav, Вы писали:
S>>>но java и попроще будет, и честно говоря поражает когда пишут опыт на джаве — 3 года, её можно за месяц(сам язык, и многопочность в нём) освоить весь.
I>>т.е. через месяц если вас спросить, то на зубок будете знать java?
S>да как бе уже)
Смешной ты человек, если бы так всё просто было)
Ну вот ты знаешь как Garbage Collector работает в ждава или какие бывают Classloader's ? Думаю, нифига ты не знаешь
А если написал Hello world, то можешь в IBM или Google уже идти)
Re[6]: про опыт работы в X с языком(технологией) XX
Здравствуйте, telal, Вы писали:
T>Здравствуйте, stuav, Вы писали:
S>>Здравствуйте, ilnar, Вы писали:
I>>>Здравствуйте, stuav, Вы писали:
S>>>>но java и попроще будет, и честно говоря поражает когда пишут опыт на джаве — 3 года, её можно за месяц(сам язык, и многопочность в нём) освоить весь.
I>>>т.е. через месяц если вас спросить, то на зубок будете знать java?
S>>да как бе уже)
T>Смешной ты человек, если бы так всё просто было) T>Ну вот ты знаешь как Garbage Collector работает в ждава или какие бывают Classloader's ? Думаю, нифига ты не знаешь T>А если написал Hello world, то можешь в IBM или Google уже идти)
Это о чём? А сложные вещи они не программировании если кто не в курсе — а в науке, причём науке академичиской. А здесь — максимум чтение статей.
А что до жабы то таки Garbage Collector и Classloader я писал.
Re[7]: про опыт работы в X с языком(технологией) XX
Здравствуйте, 31415926, Вы писали:
3>Здравствуйте, stuav, Вы писали:
>>А что до жабы то таки Garbage Collector и Classloader я писал.
3>Да ну! А Вы случайно в лейбгвардии не служили?
Не мы в основном в коровнике механизатором, да на трахторе, а программинг это так долгими зимними вечерами, когда водку не завезли в наше село.
Re[7]: про опыт работы в X с языком(технологией) XX
Здравствуйте, stuav, Вы писали:
S>Здравствуйте, telal, Вы писали:
T>>Здравствуйте, stuav, Вы писали:
S>>>Здравствуйте, ilnar, Вы писали:
I>>>>Здравствуйте, stuav, Вы писали:
S>>>>>но java и попроще будет, и честно говоря поражает когда пишут опыт на джаве — 3 года, её можно за месяц(сам язык, и многопочность в нём) освоить весь.
I>>>>т.е. через месяц если вас спросить, то на зубок будете знать java?
S>>>да как бе уже)
T>>Смешной ты человек, если бы так всё просто было) T>>Ну вот ты знаешь как Garbage Collector работает в ждава или какие бывают Classloader's ? Думаю, нифига ты не знаешь T>>А если написал Hello world, то можешь в IBM или Google уже идти)
S>Это о чём? А сложные вещи они не программировании если кто не в курсе — а в науке, причём науке академичиской. А здесь — максимум чтение статей. S>А что до жабы то таки Garbage Collector и Classloader я писал.
А я говорю, что если ты от нех делать изучишь любой язык за месяц, то тебе дорога в IBM или Google, там таких самородков ищут
Ну вообще, если ты уж стал программистом, то неплохо бы и математику знать, хотя бы дискретку, это как раз академические вещи(теория графов, множества, комбинаторика...).
А циклы for и условия if они во всех языках одинаковые. Копни тебя поглубже в Java Collection API и многопоточность, тут все понты и посыпятся
Здравствуйте, stuav, Вы писали:
S>Просветите зачем в параметрах вакансий пишут опыт работы с С++ — 3 года, или SQL — 2 года или что нить аналогичное про джаву.
S>Что собвственно в самом языке изучать несколько лет, скажем на теже плючы с STL помоему вполне достаточно полгода, а у уж на java c SQL и того меньше.
Вот, предположим, плотник. Чтобы понять назначение молотка и пилы вполне достаточно пяти минут. Доверишь человеку у которого опыт работы плотником полгода строить себе дом?