Здравствуйте, carpenter, Вы писали:
D>>>bla-bla-bla Каково было мое удивление что 90% людей не знаю ДЛЯ ЧЕГО НУЖЕН ВИРТУАЛЬНЫЙ ДЕСТРУКТОР...
гы. а зачем тогда вообще нужны виртуальные функции они знают?
D>>>Куда делись настоящие программситы...
1) вымерли как мамонты;
2) уже давно трудоустраивают на работу, а не трудоустраиваются на нее;
SVZ>>Ничего удивительного. Ну не все используют виртуальные деструкторы в повседневной практике. Без практики знания быстро забываются. C>На практике — деструктор лучше сразу сделать виртуальным — а потом подумать , не сделать ли его невиртуальным.
согласен. особенно с учетом того, что компилятор скорее всего оптимизирует вызов деструкутора, объявленного виртуальным, если поймет, что это не поломает программу. однако, разница в стоимости вызова виртуальных и невиртуальных функций довольно-таки существенна и потому я предпочитаю думать всякий раз, когда что-то объявляю. исключение составляют случаи когда наследников у нас нет и не будет, но это уже ближе к использованию плюсов в режиме "перехаченного си".
C>... знание о виртуальном деструкторе — это практически знание об указателях в контексте ООП ... C>т.е. если человек пишет в резюме ООП — то он обязан это знать , либо пускай не пишет.
ну я бы не стал тут говорить за указатели. объявление десктруктора виртуальным всего лищь гарантирует его вызов у всех потомков до седьмого колена. а как будет производиться вызов — через указатель или компилятор заооптимизирует — хз. впрочем, это большей частью относиться к реконструкции кода из бинарника в си++. ну вот типичный пример на который когда-то напоролся. есть код (программы) с библиотекой. задача — выдрать библиотеку и поднять до уровня плюсов. ну вижу, что деструкторов в одном классе вааще нет. а они и не нужны были в данном коде. ну так и написал. а чел. который стал юзать библиотеку наплодил производных клссов. а у меня деструктор в базовом объявлен невиртуальным. последствия вы сами понимаете.
SVZ>>В моем текущем проекте, к примеру, нет ни одного места, где можно было бы применить виртуальные деструкторы (ну некуда их там приткнуть). C>их не надо притыкать — это не фенечка ... в зависимоси от архитектуры — они либо нужны либо нет
архитектуры чего, извините? проца или проекта? ну тут уже говорили выше, что если в базовом классе десктуктор уже виртуальный, то в производных классах на него можно просто забить. все равно виртуальным будет. а если производных классов нет — это еще лучше
SVZ>>Вот и получается, что добрый десяток С++ программистов с опытом работы в 5+ лет не пройдут твоего собеседования C>как ни прискорбно — но здесь говорится о банальных вещах — то же самое как спрашивать у дворника — с какой стороны берется метла.
и что самое интересное, эти программисты таки имеют хорошие шансы найти себе работу, где знание этой фундаментальной особенности им не пригодится. точнее, им не сильно повредит ее незнание. если на вашей работе знать этот стафф необходимо — ну так впишите его в методичку и раздайте всем. у меня, кстати, тоже по работе бывают идиотские заморочки с амсатиками. типа опытный чел, уже давно работающий, неожиданно встречает lea и начинает грит, что она выбросит тут исключение. и что вообще не понятно как этот код работает. опс. приехали.
SVZ>>А книжки читать, увы, хрен заставишь
ну таких действительно нужно гнать. если челу указали, что у него есть проблемы и сказали, что читать, а он не читает упорно -- это ж угроза для всего тима.
C>И меня сильно удивляют программисты , которые не любопытны , и считают что уже достигли вершин лондонского дна. C>Вот только со временем проблемы
а вот меня удивляет, что это за организация труда такая при которой всем приходится учиться. ИМХО каждый должен делать что-то свое. причем, далеко не все технологии развиваются быстро и стремительно. не, ну мне на работе действительно приходится учиться всему новому каждый день (в силу специфики самой работы), но часть коллег делает одно и тоже, и роет не в ширину, а в глубину.
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Здравствуйте, Denwer, Вы писали:
D>Последние два месяца прорезюмировал просто толпу соискателей на программистов по с++. Каково было мое удивление что 90% людей не знаю ДЛЯ ЧЕГО НУЖЕН ВИРТУАЛЬНЫЙ ДЕСТРУКТОР.
я понимаю что я немного не по теме, и что к автору топика, скорее всего, приходили банальные балбесы, но, кто из участников дискуссии сможет сходу вспомнить хоть одно правило русского (или английского) языка?
Кто сможет рассказать что такое наречие или какие бывают дополнения? Кто сможет разбить на части слово "последние"? Кто сможет определить как спрягается тот или иной глагол?
И это незнание не мешает нам правильно разговаривать и писать по-русски. Почему программист не может знать язык программирования на том же уровне — он знает что и когда надо сказать, вернее, написать, но плохо помнит формальные вещи.
Как проверяется знание русского языка? Беседой на нем, написанием сочинения или диктанта и т.п. Причем, если вы нанимаете на работу дворника, вам достаточно убедиться что он сможет понять несколько слов типа "мести", "двор", "зарплата" , а если нанимаете тех. писателя — вы попросите его что-то описать, что бы убедиться что он не только хорошо говорит и пишет, но и правильно описывает.
Почему нельзя тестирование знания языка программирования организовать подобным образом? Используете виртуальные деструкторы? — дайте задачу где они жизненно необходимы. Если соискатель их использовал, приглашаете на беседу, иначе — нет, что бы сэкономить свое время. Неужели для вас сложно придумать набор задач, покрывающий вашу предметную область?
Здравствуйте, jhfrek, Вы писали:
J>И это незнание не мешает нам правильно разговаривать и писать по-русски. Почему программист не может знать язык программирования на том же уровне — он знает что и когда надо сказать, вернее, написать, но плохо помнит формальные вещи.
Потому что одно дело не помнить к какой части речи относится слово 'говорить', 'кодировать', 'думать', а другое — не знать ни одного глагола.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, jhfrek, Вы писали:
D>>Последние два месяца прорезюмировал просто толпу соискателей на программистов по с++. Каково было мое удивление что 90% людей не знаю ДЛЯ ЧЕГО НУЖЕН ВИРТУАЛЬНЫЙ ДЕСТРУКТОР. J>я понимаю что я немного неи по теме, и что к автору топика, скорее всего, приходили банальные балбесы, но, кто из участников дискуссии сможет сходу вспомнить хоть одно правило русского (или английского) языка?
так ведь вопрос можно и перефразировать:
1) что неправильно в коде бла-бла-бла (базовый + производный, деструкторы невиртуальные);
2) какя функция вызовется здесь (базовй + производный, функция [не]виртуальная);
3) а если деструктор будет невиртуальным — что тогда?
4) виртуальный деструктор и оверхид
по вашему можно писать на плюсах и не знать ответа на эти вопросы? ну-ну... а потом долго ловить странные "баги" компилятора, особенно касательно (1), где мы получаем ub со всеми вытекающими
J>Кто сможет рассказать что такое наречие или какие бывают дополнения? Кто сможет разбить на части слово "последние"? Кто сможет определить как спрягается тот или иной глагол?
ну и что это доказывает? что можно программировать даже не зная опций компилятора?
J>И это незнание не мешает нам правильно разговаривать и писать по-русски.
и много вы знаете людей которые тут пишут правильно?
J> Почему программист не может знать язык программирования на том же уровне — он знает что и когда надо сказать, вернее, написать, но плохо помнит формальные вещи.
это -- другое. если программа собралась и как бы работает -- ура. если же нет, начинаем рыть. в конце-концов приходим к тому, что деструктор производного класса не вызывается. задаем вопрос на форуме или лезем в гугл. там нам дают на водку. и на пиво тоже. вот так все и работает
J> Как проверяется знание русского языка? Беседой на нем, написанием сочинения или диктанта и т.п.
есть разные уровни знания русского языка. корректор может фиксить ляпы, но не обязан знать наше с вами арго. и даже молодежное арго он, возможно, не знает. и будет долго гадать на фига класть шнурки в стакан. с другой стороны, а кто способен написать правильно? так чтобы можно было пускать под печатный пресс?
J> Причем, если вы нанимаете на работу дворника, вам достаточно убедиться что он сможет понять несколько слов типа "мести", "двор", "зарплата" ,
допустим, человек не знает, что такое виртуальный деструктор. но он решает поставленные задачи быстее, чем ему успеют дать законченный тз. и все понимает с полуслова. так какое мне дело до его виртуальных деструкторов? исключение составляет ситуаця, когда он пишет базовый класс, а я -- производный. тут я ему скажу: вася, ты не прав. пофикси свой код и покури стандарт для расширения сознания. и все. чел покурит и даже все будет ну очень хорошо.
J> а если нанимаете тех. писателя — вы попросите его что-то описать, что бы убедиться что он не только хорошо говорит и пишет, но и правильно описывает.
согласен. человек должен делать свою работу. вопрос по виртуальному дестуктору — дрянь. потому как это слишком просто вылавливается в коде. а вот выловить ошибки целочисленного переполнения -- уже сложнее, например. или если чел. наивно полагает что char по умолчанию беззнаковый. или что int всегда 32 бита. или что порядок байт в слове всегда один и тот же.
J> Почему нельзя тестирование знания языка программирования организовать подобным образом?
да можно, почему нельзя. я вот сейчас одного паренька притащил в наш тим. пацак реально шарит и хорошо обучаем. есму только сказали: вот посмотри эту щтуку. это типа твой проект будет, если тебя примут. просто попросили взглянуть. а вдруг человека это уже не прикалывает? короче, его еще трудоустроить не успели (бюракратия), а он уже залил бетон проекта и представил работающий макет. проект на плюсах. но никто его за виртуальные деструкторы не спрашивал. ибо от него требуется только ввод/вывод. типа вот входные данные, а вот результат их обработки. и все. единственное требование к нему, чтобы это шло под никсами и вендой.
J> Используете виртуальные деструкторы? — дайте задачу где они жизненно необходимы.
именно. чел. вообще должен приность фирме деньги и если он их приносит, то все остальное уже вторично. с другой стороны, если чел. не знает за деструкторы, то ему нельзя давать писать базовые классы. и архитектором ему не быть. и даже тимлидом. но своя ниша у него есть и без знания для чего нужен виртуальный деструктор. а вот если человек пишет ужасный код, то это ласты. проблема в том, что качество кода на малых проектах не проверяется.
J> Если соискатель их использовал, приглашаете на беседу, иначе — нет, что бы сэкономить свое время. J> Неужели для вас сложно придумать набор задач, покрывающий вашу предметную область?
а вот это действительно сложно. кстати, мы вот тут человека вообще на одну вакансию брали, а по ходу дела загрузили его совсем другими задачами. правда, мы его и не собеседовали толком. т.к. сразу было понято, что чел. хоть и не в теме, но обучаемый. так что нам с ним повезло даже больше, чем ему с нами и какой смысл было его гонять? меня вот даже тестовое задание подрядили ему писать, но я с ним просто початился и на том дело и кончилось. отписал руководству: надо брать. руководство с ним тоже пообщалось (причем, у него уже совета спрашивалии из его предметной области), и тоже сказало: зачотный пацак. ну у нас правда коллектив дружный. и к тому же маленький. а работы куча. и если человек уже показал свою полезность -- зачем его пытать? правда у нас есть отмазка. мы сначала берем контрактором, а уже потом смотрим -- кто нам нужен, а от кого лучше избавиться.
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Здравствуйте, bnk, Вы писали:
bnk>Но что движет этим "читающим" меньшинством? Страх того что они могут завтра "отстать от поезда"? Абстрактная тяга к новым знаниям? Желание прославиться и оставить след в истории? То есть, для чего человеку, которого все более-менее устраивает в текущей ситуации, продолжать само-совершенствоваться?
Любопытство. Впрочем, это же любопытство заставляет меня лезть в вещи которые мне знать не надо и иногда делает меня и моего работодателя несчастливыми. Так что стоит подумать, может лучше нанять не слишком стремящегося к новым горизонтам, но исполнительного работника?
Здравствуйте, Vamp, Вы писали:
D>>Вообще то в моем предложении был просто симафор, а не бинарный. V>Ага, то есть все-таки, в некоторых случаях разницы нет.
Здравствуйте, bkat, Вы писали:
LVV>>Ага! Попробовали бы вы устроится на работу инженером — строителем без знаний... B>Они и устраиваются практически без знаний. B>Вернее без реального опыта, без которого ничего толком не построишь.
Да, только в любой конторе сначала спросят диплом. И без диплома ты на инженерную должность претендовать никак не сможешь. А в программировании?! LVV>>Да вас на порог не пустят! А в программировании — недоучки-самоучки не только собеседуются, но и работают... B>В программировании все то же самое, если под "недоучками" понимать зеленых выпускников без опыта. B>В любой нормальной отрасли есть процесс становления спеца, который после универа только начинается. B>Умудренные опытом товарищи, знающие для чего нужны виртуальные деструкторы, играют важную роль в этом процессе
Не... Это только если учебный процесс неправильно построен. Наши — практически с 3 курса уже на производственной практике начинают работать. И процентов 85 к диплому имеют двухлетний опыт РЕАЛЬНОЙ работы. У меня были даже пару студентов, которые работали в Москве, а приезжали сдавать только в сессию. Это дневники! И начали с производственной практики. B>Ну а самоучек реально мало, и у них есть шансы только когда потребность в спецах намного выше чем самих спецов.
Дык студенты 3 курса — это кто? недоучки и есть! А им поручают вполне серьезную работу...
И иногда бывает (если проблем с армией нет), что чел на учебу просто забивает и просто остается работать, начиная с 3 курса...
Один из наших выпускников 4 года диплом защищал, приезжая из Москвы...
А другой защитил только через 11 лет после первого поступления...
А есть люди, которые так и не сподобились прийти защищать...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
H>>Дело в легкости владения. Например Qt, за пару недель можно въехать в основы и начать тихонько использовать — медленно, неоптимально, не совсем качественно. Через полгода-год возникает легкость владения — голова находит решения быстрее, код пишется быстро, качество выше.
S>Qt учится в процессе использования. Что-то понадобилось — почитал, добавил.
Довольно большие куски кода написанные в начальный период освоения либы мне пришлось переписывать впоследствии. Человек который только-то что-то прочитал и добавил как правило выполнит задачу гораздо хуже чем человек который имеет системное видение либы в целом и может осмысленно выбрать решение.
Системное видение либы получается минимум после нескольких месяцев использования и как минимум изучения многих примеров
Здравствуйте, Denwer, Вы писали:
D>Последние два месяца прорезюмировал просто толпу соискателей на программистов по с++. Каково было мое удивление что 90% людей не знаю ДЛЯ ЧЕГО НУЖЕН ВИРТУАЛЬНЫЙ ДЕСТРУКТОР. Как такое может быть? Куда делись настоящие программситы, а не оходники за деньгами? Что творится с людьми?
Скорей с отраслью. Просто большинство людей у нас занимаются теми вещами, где все это нафиг не нужно. Грустно, товарищи.
Здравствуйте, Denwer, Вы писали:
D>А если например такой случай, человеку написали резюме, точнее помогли профессионально его составить? Или как уже сказали, человек может и не писал его не разу, а вот дал по сути первый вариан его за все время и что тогда? ТОже отсеить по резюме? А если это как раз тот самый 1 из 100? Проблема не в том что много трачу на беседы с людьми, а втом что хороших программистов нет. Ну пускай отсею я худших по резюме, но хороших то от этого не прибавится?
Если человек не поленился, узнал и составил грамотное резюме — это уже о чем то говорит.
Многие даже этого толком сделать не могут.
Здравствуйте, Denwer, Вы писали:
D>Последние два месяца прорезюмировал просто толпу соискателей на программистов по с++. Каково было мое удивление что 90% людей не знаю ДЛЯ ЧЕГО НУЖЕН ВИРТУАЛЬНЫЙ ДЕСТРУКТОР. Как такое может быть? Куда делись настоящие программситы, а не оходники за деньгами? Что творится с людьми?
Хе хе, я когда первый раз на работу устраивался ( третий курс), мне такой же вопрос задали.
А у меня из головы вылетело, не помню толком.
Ээ.. Ну, говорю, если есть виртуальные методы, значит обязательно должен быть виртуальный деструктор.
Интервьюер — хм, логично. Ну довай следующий вопрос...
Каково было мое удивление что 90% людей не знаю ДЛЯ ЧЕГО НУЖЕН ВИРТУАЛЬНЫЙ ДЕСТРУКТОР. Как такое может быть? Куда делись настоящие программситы, а не оходники за деньгами? Что творится с людьми?
Деньги, деньги, деньги, деньги . Вы можете предложть 120к в месяц после налогов? По глазам вижу что бюджет не подразумевает. А если бы могли — то увидели бы вживую людей которые знают не только что такое виртуальный деструктор, но и sequence points, почему у i++ + ++i undefined behaviour, все типы объектов синхронизации, что такое слайсы и как их готовить.
На зарплату 50-80 сейчас, увы, высококлассные специалисты не пойдут
Здравствуйте, jazzer, Вы писали:
J>Ты можешь представть себе кораблестоителя, который не может ответить, для чего нужен киль?
Я просто не очень уверен, является ли вопрос о том зачем нужнен виртуальный деструктор
аналогом вопроса для чего нужен киль.
Аналогом вопроса про киль был бы вопрос а зачем нужен деструктор.
На этот вопрос большинство смогут что-то внятное сказать.
А о чем говорит незнание виртуальных деструкторов в С++?
Вариантов много, но скорей всего у человека проблемы с пониманием ООП в целом
или с пониманием особенностей ООП на С++
То, что С++ в целом не очень интуитивно понятный язык — это не секрет.
Ну и ООП увы дается тоже далеко не каждому.
Кстати, со временем про виртуальные деструкторы смогут ответить все меньше и меньше народу.
Так что будет еще хуже
Здравствуйте, IT, Вы писали:
J>>И это незнание не мешает нам правильно разговаривать и писать по-русски. Почему программист не может знать язык программирования на том же уровне — он знает что и когда надо сказать, вернее, написать, но плохо помнит формальные вещи. IT>Потому что одно дело не помнить к какой части речи относится слово 'говорить', 'кодировать', 'думать', а другое — не знать ни одного глагола.
то есть приходившие к топикстартеру не знали ни одного оператора?
Здравствуйте, мыщъх, Вы писали:
М>так ведь вопрос можно и перефразировать: М>1) что неправильно в коде бла-бла-бла (базовый + производный, деструкторы невиртуальные); М>2) какя функция вызовется здесь (базовй + производный, функция [не]виртуальная); М>3) а если деструктор будет невиртуальным — что тогда? М>4) виртуальный деструктор и оверхид М>по вашему можно писать на плюсах и не знать ответа на эти вопросы? ну-ну... а потом долго ловить странные "баги" компилятора, особенно касательно (1), где мы получаем ub со всеми вытекающими
по нашему, не нужно задавать общих вопросов на знание теории, а нужно задавать вопросы на знание практики. Если все, вышеперечисленное будет использоваться в работе соискателя, то написанное вами нисколько не противоречит тому, что мы считаем
J>>Кто сможет рассказать что такое наречие или какие бывают дополнения? Кто сможет разбить на части слово "последние"? Кто сможет определить как спрягается тот или иной глагол? М>ну и что это доказывает? что можно программировать даже не зная опций компилятора?
это доказывает что можно говорить, не зная формальной стороны языка.
J>>И это незнание не мешает нам правильно разговаривать и писать по-русски. М>и много вы знаете людей которые тут пишут правильно?
да
J>> Почему программист не может знать язык программирования на том же уровне — он знает что и когда надо сказать, вернее, написать, но плохо помнит формальные вещи. М>это -- другое. если программа собралась и как бы работает -- ура. если же нет, начинаем рыть. в конце-концов приходим к тому, что деструктор производного класса не вызывается. задаем вопрос на форуме или лезем в гугл. там нам дают на водку. и на пиво тоже. вот так все и работает
странно, но вы написали "программа собралась", а не "праграмай собрались" и вам даже не нужно лезть в Гугл, что бы понять что в моем словосочетании неправильно, вы просто не напишите его в таком виде
J>> Причем, если вы нанимаете на работу дворника, вам достаточно убедиться что он сможет понять несколько слов типа "мести", "двор", "зарплата" , М>допустим, человек не знает, что такое виртуальный деструктор. но он решает поставленные задачи быстее, чем ему успеют дать законченный тз. и все понимает с полуслова. так какое мне дело до его виртуальных деструкторов? исключение составляет ситуаця, когда он пишет базовый класс, а я -- производный. тут я ему скажу: вася, ты не прав. пофикси свой код и покури стандарт для расширения сознания. и все. чел покурит и даже все будет ну очень хорошо.
именно
J>> Если соискатель их использовал, приглашаете на беседу, иначе — нет, что бы сэкономить свое время. J>> Неужели для вас сложно придумать набор задач, покрывающий вашу предметную область? М>а вот это действительно сложно.
скорее неохота , спрашивать по топикам из Страуструпа проще, и привычнее (многие же сдавали экзамены в вузе)
Здравствуйте, ___Avatar___, Вы писали:
___>- очень часто человек может прийти на проект в середине разработки, когда все классы уже созданы и человеку необходимо решать исключительно задачи бизнес логики и GUI, поэтому на виртуальные деструкторы он внимания не обращает ___>- я ни разу не видел книги по C++ в которой на первых страницах крупным жирным шрифтом было бы прописано "10/20/30 вещей, которые вы ОБЯЗАНЫ знать про С++, чтобы не делать ляпов" — строго говоря, я не видел такой книги ни по одной области или технологии программировании
Интересно, где ты смотрел книги.
По С++ очень много подобных книг. На мой взгляд даже книг "Как не сделать что-то на С++" больше, чем "Как всёже что-нибудь сделать".
Кроме 30/50/100 советов по С++, 101 правила, порекомендую ещё Дьюхэрста "Скользкие места С++". Эта книга позволяет довольно быстро пройти по сложным местам языка и освежить свои знания.
Здравствуйте, Denwer, Вы писали:
D>Последние два месяца прорезюмировал просто толпу соискателей на программистов по с++. Каково было мое удивление что 90% людей не знаю ДЛЯ ЧЕГО НУЖЕН ВИРТУАЛЬНЫЙ ДЕСТРУКТОР. Как такое может быть? Куда делись настоящие программситы, а не оходники за деньгами? Что творится с людьми?
А какие еще были вопросы и как эти соискатели на них отвечали?