Форум: "Прочее";
Текущий архив: 2010.01.03;
Скачать: [xml.tar.bz2];
ВнизСантехники от программирования - нужны ли они ? Найти похожие ветки
← →
XXL (2009-11-04 14:36) [0]Вот, как всегда неожиданно, пришла в голову мысль...
Когда читаешь описания вакансий, то почему-то складывается впечатление - что всем программерским конторам нужны только гении, личности и т.п. со знанием десятка языков и двадцатки технологий...
А нужны ли обычные кодеры, которые просто программируют по техзаданию ?
← →
Kolan © (2009-11-04 14:46) [1]Большинство тех, кто дает такие объявления — идиоты. Они сами не знают что им нужно. Обычно такие вакансии означают: «Возьмем компьютерщика-студента на нищенскую зарплату», но написать так они боятся.
Адекватных работодателей не мало, ищите лучше.
← →
Mystic © (2009-11-04 14:53) [2]>> А нужны ли обычные кодеры, которые просто программируют по техзаданию?
Может потому, что эта ниша занята Индией?
← →
antonn © (2009-11-04 15:12) [3]большинство таких объявлений на сайтах типа работа.ру, куда суют вакансии все кому не лень, не особо задумываясь о требованиях, даже если в настоящий момент работник не нужен, "а вдруг повезет найти сишника да еду".
← →
DrPass © (2009-11-04 15:15) [4]
> Большинство тех, кто дает такие объявления — идиоты. Они
> сами не знают что им нужно. Обычно такие вакансии означают:
> «Возьмем компьютерщика-студента на нищенскую зарплату»,
> но написать так они боятся.
Наоборот, вполне вменяемые люди. Идиот напишет правду "возьмем компьютерщика-студента на нищенскую зарплату", и в итоге к нему даже студент не рискнет пойти на собеседование. Т.к. каждый компьютерщик-студент тоже хочет сразу попасть в рай, где платят кучу бабла за бухание пива в серверной. Просить всегда нужно больше, чем реально требуется - тогда есть шанс, что сможешь выбрать подходящее из того, что тебе предложат :)
← →
Игорь Шевченко © (2009-11-04 15:39) [5]
> А нужны ли обычные кодеры, которые просто программируют
> по техзаданию ?
Так они и есть эти "гении, личности и т.п. со знанием десятка языков и двадцатки технологий..."
Как потом выясняется
← →
Anatoly Podgoretsky © (2009-11-04 15:40) [6]> antonn (04.11.2009 15:12:03) [3]
Именно так - ДА ЕДУ?
← →
XXL (2009-11-04 15:51) [7]Вопрос даже не в том, кто даёт такие объявления...
Скорее в том, что работодатели, сами того не подозревая, уничтожают рынок вакансий. Если все архитекторы, прожект-менеджеры и старшие программисты - кадрированная дивизия получается с одними генералами.
Проблема еще в том, что остались люди, которые могут оценить себя адекватно - посмотрят на такое объявление и не станут лезть... а полезут скубенты начитавшиеся архангельских...
> Mystic © (04.11.09 14:53) [2]
> Может потому, что эта ниша занята Индией?
Много ли индусов в вашей конторе ?
> Игорь Шевченко © (04.11.09 15:39) [5]
> Так они и есть эти "гении, личности ...
А если это выясниться после того как "личности" успеют много наваять ?
← →
Игорь Шевченко © (2009-11-04 15:57) [8]XXL (04.11.09 15:51) [7]
Обычно быстрее выясняется
← →
XXL (2009-11-04 16:01) [9]
> Игорь Шевченко © (04.11.09 15:57) [8]
> Обычно быстрее выясняется
Вопрос, как к работодателю:
у кого больше шансов получить у вас работу - у личности или у сантехника ?
← →
Игорь Шевченко © (2009-11-04 16:06) [10]XXL (04.11.09 16:01) [9]
> у кого больше шансов получить у вас работу - у личности
> или у сантехника ?
Давайте договоримся о терминологии, чтобы понимать друг друга - что есть личность, что есть сантехник (применительно к программированию) и чем они друг от друга отличаются ?
При прочих равных шансов получить работу больше у того, кто уже умеет, чем у того, кого надо учить. Собственно, я обычно прошу исходники, чтобы составить впечатление.
← →
Mystic © (2009-11-04 16:17) [11]> Много ли индусов в вашей конторе ?
Сейчас я вообще один. А до этого в Индии был целый филиал человек в 200. Самое интересное в том, что когда он не успевал, то к работе подключались два наших специалиста.
← →
XXL (2009-11-04 16:18) [12]
> Игорь Шевченко © (04.11.09 16:06) [10]
> Давайте договоримся о терминологии...
В этом контексте:
"личность" - тот который заявляет о знании n-языков и m-технологий. Уровень знаний языков и технологий различный и не регламентируется. Как правило, это типаж, на который очень хорошо ведутся работники отдела кадров.
"сантехник" - тот который знает 1 язык и 2 технологии - но знает их хорошо.
← →
DVM © (2009-11-04 16:19) [13]
> Mystic © (04.11.09 16:17) [11]
> > Много ли индусов в вашей конторе ?
>
> Сейчас я вообще один.
один индус тоже неплохо
← →
Kolan © (2009-11-04 16:26) [14]
> Т.к. каждый компьютерщик-студент тоже хочет сразу попасть
> в рай, где платят кучу бабла за бухание пива в серверной.
Если мне будет нужен эникейшик, я такого не возьму.
← →
Демо © (2009-11-04 16:35) [15]
> XXL (04.11.09 16:18) [12]
>
> > Игорь Шевченко © (04.11.09 16:06) [10]
> > Давайте договоримся о терминологии...
>
> В этом контексте:
> "личность" - тот который заявляет о знании n-языков и m-
> технологий. Уровень знаний языков и технологий различный
> и не регламентируется. Как правило, это типаж, на который
> очень хорошо ведутся работники отдела кадров.
> "сантехник" - тот который знает 1 язык и 2 технологии -
> но знает их хорошо.
В этом контексте если мне нужен будет человек со знанием именно "1 язык и 2 технологии", он ЗНАЧИТЕЛЬНО быстрее получит у меня работу, нежели тот, кто знает n языков и m технологий.
← →
Демо © (2009-11-04 16:37) [16]
> XXL (04.11.09 14:36)
> Вот, как всегда неожиданно, пришла в голову мысль...
>
> Когда читаешь описания вакансий, то почему-то складывается
> впечатление - что всем программерским конторам нужны только
> гении, личности и т.п. со знанием десятка языков и двадцатки
> технологий...
Неправильное впечатление, притянутое за уши.
Ищут по вполне понятным и конкретным критериям.
Вакансии попадаются всякие, но под твоё описание подходит ничтожный процент.
← →
Alkid © (2009-11-04 17:33) [17]
> XXL (04.11.09 16:18) [12]
Заявляет - не значит, что знает.
Я бы переформулировал постановку задачи: более "широкий" специалист vs. более "глубокий". "Широкий" знает больше языков и технологий, чем "глубокий", зато "глубокий" знает то, что знает, более детально. Имхо, так более корректно.
← →
Игорь Шевченко © (2009-11-04 17:45) [18]Alkid © (04.11.09 17:33) [17]
В такой трактовке у "широкого" больше шансов получить работу у меня
← →
Alkid © (2009-11-04 17:48) [19]
> Игорь Шевченко © (04.11.09 17:45) [18]
Можешь подробнее описать почему ты так считаешь?
← →
XXL (2009-11-04 18:12) [20]
> Alkid © (04.11.09 17:33) [17]
> Я бы переформулировал постановку задачи
"широкий" и "глубокий" - всего лишь ваши фантазии ;)
Здесь противопоставляются сантехник и магистр по сливу.
Сантехник - умеет крутить трубы.
Магистр по сливу - знает как крутить трубы; может обосновать, почему нужно крутить так, а не эдак и возможно сам умеет крутить трубы, но хуже сантехника...
Так вот - ищут именно магистра по сливу, но лишь затем чтобы он крутил трубы... спрашивается - нужны ли сантехники в этом случае ?
← →
Mystic © (2009-11-04 18:24) [21]> Можешь подробнее описать почему ты так считаешь?
Глубина очень часто приводит к очень специфическим вещам, потребность в которых возникает редко.
← →
Демо © (2009-11-04 18:29) [22]Обычная вакансия:
Вакансия: Разработчик Oracle со знанием .NET
Должностные обязанности Разработка и модификация системы управления промышленным производством (MES).
Требования к кандидату
Возраст Не имеет значения
Пол Не имеет значения
Образование Высшее
Требования к квалификации :
Oracle (10g, PL/SQL, базовые навыки администрирования, опыт работы от 3-х лет);
Опыт работы на C# (.Net 3.5, WinForms, WPF) или опыт работы с Delphi/CBuilder - от 2-х лет).
-----------------
Обычная вакансия, коих сотни.
По терминологиии автора - "Требуется слесарь"
А вот как раз тех, кого автор считает "гениями", требуется в десятки раз меньше.
← →
Mystic © (2009-11-04 18:30) [23]
> Сантехник - умеет крутить трубы.
> Магистр по сливу - знает как крутить трубы; может обосновать,
> почему нужно крутить так, а не эдак и возможно сам умеет
> крутить трубы, но хуже сантехника...
Основная проблема IT в том, что есть много разновидностей труб, и каждые надо крутить по своему. Поэтому увеличивается необходимость знания более фундаментальных вещей.
← →
Демо © (2009-11-04 18:30) [24]
> Сантехник - умеет крутить трубы.
> Магистр по сливу - знает как крутить трубы; может обосновать,
> почему нужно крутить так, а не эдак и возможно сам умеет
> крутить трубы, но хуже сантехника...
Неудачный пример.
Любой программер выступает един в двух лицах. Он и "знает как", и "умеет".
← →
Игорь Шевченко © (2009-11-04 18:32) [25]Alkid © (04.11.09 17:48) [19]
> Можешь подробнее описать почему ты так считаешь?
Конечно могу - если человек много знает, то это свидетельствует о том, что он многим интересуется, если человек многим интересуется, он может найти, если потребуется, эффективное нешаблонное решение, порой из другой области или на стыке областей. А человек, знающий, пусть глубоко, что-то одно, вряд ли сможет выйти за рамки этого "одного". Разумеется, это несколько утрированный подход, в жизни таких крайностей не встречается, но тем не менее, моя точка зрения примерно такая.
← →
Alkid © (2009-11-04 18:49) [26]
> Игорь Шевченко © (04.11.09 18:32) [25]
Понятно, спасибо.
> XXL (04.11.09 18:12) [20]
Ага, ошибку свою понял :)
Вставлю свои 5 копеек: чистые исполнители нужны там, где речь идет о тиражировании разработанного изделия. Инженер придумал изделие и технологию его производства, теперь он может заняться чем-то другим, а экземпляры пусть штампуют рабочие на станках.
Разработка ПО имеет совершенно другую структуру. Программисты не занимаются тиражированием, они разработчики изделия, инженеры.
← →
asail © (2009-11-04 19:01) [27]
> Alkid © (04.11.09 18:49) [26]
> чистые исполнители нужны там, где речь идет о тиражировании
> разработанного изделия.
Не только. Есть еще поддержка уже написанного ПО - починка багов и т.д. Рутина, короче... Инженеру, как правило, там делать нечего, а, вот хорошим исполнителям самое место.
← →
Mystic © (2009-11-04 19:11) [28]В отличие от сантехника, в случае программиста от нового сотрудника требуется
(1) Изучить предметную область
(2) Изучить методы, которые используются в разработке данного проекта.
Таким образом это говорит о важности прокачки такого скила, как обучаемость.
← →
Pavia © (2009-11-04 19:53) [29]
> А вот как раз тех, кого автор считает "гениями", требуется
> в десятки раз меньше.
Знаешь искал я работу.
Реально требуется обыкновенные кодоры. Но в требовании заявления на гения. При этом зачастую сложно пробиться через отдел по персоналу которые ищут гениев.
Но нормальных заявлений тоже поло. Вот только почему они так далеко от дома. ;-(
← →
Игорь Шевченко © (2009-11-04 20:00) [30]Mystic © (04.11.09 19:11) [28]
> (1) Изучить предметную область
Вот мне как раз всегда хочется ограничиться только этим этапом обучения. То есть, не учить принципам ООП, не учить разрабатывать код в команде, не учить, что хинты и предупреждения являются ошибками разработки, и т.д.
← →
Alkid © (2009-11-04 20:09) [31]
> asail © (04.11.09 19:01) [27]
> Не только. Есть еще поддержка уже написанного ПО - починка
> багов и т.д. Рутина, короче... Инженеру, как правило, там
> делать нечего, а, вот хорошим исполнителям самое место.
Это такая же инженерная работа, только со своей спецификой. Поддержка ПО иногда требует бОльшей изобретательности, квалификации и дисциплины, чем разработка нового продукта.
← →
Mystic © (2009-11-04 20:32) [32]
> не учить, что хинты и предупреждения являются ошибками разработки
Так за это ж канделябром по голове!!!
← →
asail © (2009-11-04 23:51) [33]
> Alkid © (04.11.09 20:09) [31]
> Поддержка ПО иногда требует бОльшей изобретательности
Ключевое слово - "иногда". В большинстве случаев, довольно скучная и однообразная рутина... Ну это из моего собтвенного опыта работы в крупной софтверной фирме.
> Игорь Шевченко © (04.11.09 20:00) [30]
> Mystic © (04.11.09 20:32) [32]
Вспомнил тут случай такой забавный, который имел место у нас быть несколько лет назад. Была у нас довольно большая група индусов, и дали им задание прошерстить все проекты и устранить хинты и педупреждения... Код по большей части древний, проектов много, хинтов всяких вообще дофига... Справились индусы с заданием подозрительно быстро... Угадали как? Прально - поотключали все в настройках проектов, и всего делов!!!
Слава Аллаху - нет у нас больше индусов (ну, парочка наиболее вменяемых осталась).
← →
Игорь Шевченко © (2009-11-05 00:37) [34]asail © (04.11.09 23:51) [33]
Индус в данном случае - это не национальность, а диагноз. В острой стадии больной начинает доказывать, что это компилятор неправильный и выдает хинт или предупреждение там, где не должен.
← →
GDI+ (2009-11-05 02:17) [35]Игорь Шевченко © (04.11.09 20:00) [30]
Вот мне как раз всегда хочется ограничиться только этим этапом обучения. То есть, не учить принципам ООП, не учить разрабатывать код в команде, не учить, что хинты и предупреждения являются ошибками разработки, и т.д.
Не всегда. Но в 99% случаев да. Иногда на методе приходится писать
{$hints off}
{$hints on}
← →
Германн © (2009-11-05 02:25) [36]
> GDI+ (05.11.09 02:17) [35]
>
> Игорь Шевченко © (04.11.09 20:00) [30]
>
> Вот мне как раз всегда хочется ограничиться только этим
> этапом обучения. То есть, не учить принципам ООП, не учить
> разрабатывать код в команде, не учить, что хинты и предупреждения
> являются ошибками разработки, и т.д.
>
> Не всегда. Но в 99% случаев да. Иногда на методе приходится
> писать
> {$hints off}
> {$hints on}
Прописные истины не надо упоминать.
← →
TUser © (2009-11-05 08:21) [37]Кстати - "Unsafe operator @". Он, конечно, ансейф, то есть примяняя его надо думать больше, чем над словом begin, но вот на goto никаких ни хинтов, ни варнингов (Д7). А оно не менее ансейф, имхо. Может это оттого, что про goto многие даже не знают, что есть такой оператор %)
← →
Verg (2009-11-05 08:43) [38]
> Когда читаешь описания вакансий, то почему-то складывается
> впечатление - что всем программерским конторам нужны только
> гении, личности и т.п. со знанием десятка языков и двадцатки
> технологий...
Это нормально. Хоти больше, чтобы получить хотя бы не сильно меньше, чем хотелось.
← →
Демо © (2009-11-05 10:16) [39]
> TUser © (05.11.09 08:21) [37]
> Кстати - "Unsafe operator @". Он, конечно, ансейф, то есть
> примяняя его надо думать больше, чем над словом begin, но
> вот на goto никаких ни хинтов, ни варнингов (Д7). А оно
> не менее ансейф, имхо.
Ещё один. goto такой же оператор, как и остальные. Ничего плохого в нём нет, если употреблён к месту.
← →
@!!ex © (2009-11-05 12:52) [40]> [39] Демо © (05.11.09 10:16)
> Ничего плохого в нём нет, если употреблён к месту.
Ага. За исключением того, что наличие места для использования goto говорит о кривых руках прогера.
← →
MonoLife © (2009-11-05 13:04) [41]
> Демо © (05.11.09 10:16) [39]
> @!!ex © (05.11.09 12:52) [40]
>
Опять спор, древний, как "запуздырить в трей иконку":) goto, break & exit...
Как вы думаете, кого сейчас выпускают ВУЗы "слесарей" или "программистов"?
Сомневаюсь, что каждый нынешний выпускник гений и истинный программер от бога... На начальном этапе, имхо, все слесари.. А значит, завышенные требование контор исходят из того, что у кандидата есть опыт, т.е. он перешел из разряда "слесарей" в разряд "программеров"..
← →
@!!ex © (2009-11-05 13:12) [42]> [41] MonoLife © (05.11.09 13:04)
Как факт: все специалисты с окторыми я работал НЕ используют goto.
Много с кем работал... сделал для себя выводы...
Ваше право, оставлять стандартные названия компонентов на форме, писать идентефикаторы транслитом и использовать goto...
Мое право считать это ошибками.
← →
MonoLife © (2009-11-05 13:33) [43]
> @!!ex © (05.11.09 13:12) [42]
дык, не о том ведь речь! Если развивать сейчас полемику об этих операторах получится еще одна очередная тема, коих я здесь встречал не раз:)
Кстати, мне не приходилось использовать goto, обходился как-то без него..:)
← →
Игорь Шевченко © (2009-11-05 14:46) [44]@!!ex © (05.11.09 12:52) [40]
> Ага. За исключением того, что наличие места для использования
> goto говорит о кривых руках прогера.
Я бы не стал так категорично утверждать - если используется к месту, то говорит о нормальных руках.
Вот когда для обхода использованию goto начинают выдумывать разные конструкции с якобы флагами, это точно говорит о кривых руках
← →
@!!ex © (2009-11-05 15:02) [45]> [44] Игорь Шевченко © (05.11.09 14:46)
Согласен, сильно категорично получилось.
Это было ИМХО естественно.
Опять же, в асме - вполне нормальная команда. (:
← →
Mystic © (2009-11-05 15:43) [46]
> В острой стадии больной начинает доказывать, что это компилятор
> неправильный и выдает хинт или предупреждение там, где не
> должен.
Предупреждение предупреждению рознь. Например, я часто отключаю platform и unsafe предупреждения. Например, когда не планирую перевод проекта под .NET.
Но рефлекс останавливать компиляцию при возникновении warning-а остался.
← →
Игорь Шевченко © (2009-11-05 15:52) [47]Mystic © (05.11.09 15:43) [46]
Как ты понимаешь, я имею в виду не платформо-специфицеские предупреждения, тем более, что они появились относительно недавно, а диагноз "Индус" имеет историю еще с Турбо-версий компиляторов, то есть, с 80-ых годов
← →
Jeer © (2009-11-05 15:53) [48]
> @!!ex © (05.11.09 13:12) [42]
>
> > [41] MonoLife © (05.11.09 13:04)
>
> Как факт: все специалисты с окторыми я работал НЕ используют
> goto.
Эта штука бывает используется при адаптации старых алгоритмов, в основном математических. Нет смысла отказываться и перелопачивать алгоритмически выверенный код. В новых используется весьма редко и опять же в т.н. стандартных функциях.
Чтобы в ООП - нет, такого за собой не припоминаю.
← →
@!!ex © (2009-11-05 15:58) [49]> [48] Jeer © (05.11.09 15:53)
Ну дык. Все претензии к goto - ухудшение читабельности=>отладки кода.
Если код уже отлажен и работает, надо делать что проще.
← →
Verg (2009-11-05 16:02) [50]Фобии и филии - это всегда клиника. Я терпеть не могу алкашей, но и к трезвенникам отношусь настороженно.
← →
Игорь Шевченко © (2009-11-05 16:04) [51]@!!ex © (05.11.09 15:58) [49]
> Ну дык. Все претензии к goto - ухудшение читабельности=>отладки
> кода.
У меня претензия к конструкции try .. finally или try..except
У меня более общая претензия к разработчикам, которые строят работу на механизме исключений, вместо возратов результатов функций (такое нередко случается)
← →
Anatoly Podgoretsky © (2009-11-05 16:07) [52]> @!!ex (05.11.2009 15:58:49) [49]
Претензии не к читабельности, а к возможности передать управление внутрь, при том не сразу, а при некотором изменение программы. а читабельность/отладка это вторично.
← →
Verg (2009-11-05 16:08) [53]
> try .. finally
Замечательная конструкция. И даже без механизма исключений.
← →
Jeer © (2009-11-05 16:12) [54]
> И даже без механизма исключений.
Стараюсь обходиться без онного для настольных систем, для embedded - а куды деваться, прерывания - основа.
← →
Leonid Troyanovsky © (2009-11-05 16:29) [55]
> Игорь Шевченко © (05.11.09 16:04) [51]
> работу на механизме исключений
Работа на механизме не греет душу.
Мне нравится их возбуждать :)
--
Regards, LVT.
← →
Alkid © (2009-11-05 16:34) [56]
> Игорь Шевченко © (05.11.09 16:04) [51]
А чем не угодил механизм исключений? Или речь идет о неправильном его использовании?
← →
Игорь Шевченко © (2009-11-05 16:41) [57]Alkid © (05.11.09 16:34) [56]
К самому механизму претензий нет. Впрочем, как к любому механизму.
Есть претензии к коду, преобразующему коды возврата вызванных функций к исключениям, причем, класса Exception. А во внешнем коде, преобразование полученного Exception в код возврата.
Отлаживать код с такой логикой - сущее удовольствие.
Это не надуманный пример, это из тяжелой жизни :)
← →
Alkid © (2009-11-05 16:49) [58]
> Игорь Шевченко © (05.11.09 16:41) [57]
Не, ну такое понятно. Просто есть ряд программистов, которые принципиально считают исключения злом, а коды возврата - единственным верным способом передавать информацию об ошибках. Спольски, например.
← →
Демо © (2009-11-05 17:10) [59]
> @!!ex © (05.11.09 12:52) [40]
> > [39] Демо © (05.11.09 10:16)
> > Ничего плохого в нём нет, если употреблён к месту.
>
> Ага. За исключением того, что наличие места для использования
> goto говорит о кривых руках прогера.
Вряд ли. Скорее говорит о владении языком программирования, незашоренности и о том, что человек не следует тупо авторитетам.
← →
Игорь Шевченко © (2009-11-05 17:21) [60]Alkid © (05.11.09 16:49) [58]
У меня мнение простое - исключение должно говорить о ситуации в программе, для которой программист не предусмотрел штатной обработки.
Кстати, за код вида
try
...
except end;
надо сразу вешать за все выступающие части, если не написан подробный комментарий, почему в данном богоизбранном участке кода все без исключения исключения (пардон за тавтологию) должны игнорироваться
← →
@!!ex © (2009-11-05 17:26) [61]> [59] Демо © (05.11.09 17:10)
Ага. А переход через проезжую часть вместо пешеходного говорит о смелости, знании правил и о том, что человек не следует тупо авторитетам... ЛОЛ.
ПРавила рождаются не благодаря авторитетам, а из вполне жизненных проблем.
Использование goto не оправданно в большинстве случае. Исключения типа [48] только подтверждают правило.
← →
Verg (2009-11-05 17:28) [62]
switch( variable )
{
case true: goto l1;
break;
case false: goto l2;
break;
default: <убить себя ап стену>;
break;
}
l1: return true;
l2: return false;
← →
TUser © (2009-11-05 17:31) [63]
> @!!ex © (05.11.09 15:58) [49]
В смысле? Если отлажен и работает, то надо туда еще пару goto вписать для красоты?
Вообще, буду признателен за пример, где обычный goto (не exit/break/etc, а именно он сам (и не On Error Goto)) употреблен на полноценном ЯВУ (где есть операторы цикла while и repeat и всякие методы их прерывания, такие как break/continue в джаве) к месту, нормально работает и читается. А то "всякий овощ бывает полезен" звучит как-то неубедительно.
← →
@!!ex © (2009-11-05 17:33) [64]> [63] TUser © (05.11.09 17:31)
> Если отлажен и работает, то надо туда еще пару goto вписать
> для красоты?
Для переноса уже готового алгоритма, который работае с использование goto.
Внимательнее прочитай. :)
Я вообще против использования в любых целях, но чему меня тут научили, так это тому, что квантор всеобщности применять не стоит. :)
← →
TUser © (2009-11-05 17:34) [65]
> Verg (05.11.09 17:28) [62]
:) ну если так, то да, goto как метод обфрускации
← →
Jeer © (2009-11-05 17:39) [66]
> метод обфрускации
обфускации (obfuscare)
← →
Игорь Шевченко © (2009-11-05 17:42) [67]
> Вообще, буду признателен за пример, где обычный goto (не
> exit/break/etc, а именно он сам (и не On Error Goto)) употреблен
> на полноценном ЯВУ
поиск среди Program Files\Borland\BDS\x.0\Source\*.pas
← →
Verg (2009-11-05 17:43) [68]
> Вообще, буду признателен за пример,
Да любая попытка работы с ресуросм.
Захват,
работа, которая может породить ошибку, требующую прекращения работы с ресурсом.
без try...finally такой код был бы испещрен goto, либо однообразными операциями закрытия ресурса + exit
← →
Jeer © (2009-11-05 17:55) [69]Между прочим, это из биб-ки НИИ ВЦ МГУ.
Использований goto даже на мой искушенный взгляд - выше крыши.
Но используют, поскольку таков был исходный, скорее всего.
// Балансировка квадратной матрицы
Unit AMB1R_p;
interface
uses
SysUtils, Math, { Delphi }
LStruct, Lfunc;
procedure AMB1R(NM :Integer; N :Integer; var A :Array of Real;
var LOW :Integer; var IGH :Integer;
var SCALE :Array of Real);
implementation
procedure AMB1R(NM :Integer; N :Integer; var A :Array of Real;
var LOW :Integer; var IGH :Integer;
var SCALE :Array of Real);
var
I,IEXC,J,JJ,K,L,M :Integer;
B2,C,F,G,R,RADIX,S :Real;
NOCONV :Boolean;
const
SYS063 :Real = 2.0;
label
_10,_20,_30,_40,_50,_60,_70,_80,_90,_100,_110,_120,_130,_140,_150,
_160,_170,_180,_190,_200,_210,_220,_230;
begin
{ RАDIХ - ОСНОВАНИЕ СИСТЕМЫ СЧИСЛЕНИЯ,ИСПОЛЬЗУЕМОЙ }
{ В АРИФМЕТИКЕ С ПЛАВАЮЩЕЙ ЗАПЯТОЙ НА ДАННОЙ МАШИНЕ }
RADIX := SYS063;
B2 := RADIX*RADIX;
K := 1;
L := N;
goto _60;
{ ПРЕДВАРИТЕЛЬНАЯ ПЕРЕСТАНОВКА СТРОК И СТОЛБЦОВ }
_10:
SCALE[M-1] := J;
if ( J = M )
then goto _40;
for I:=1 to L do
begin
F := A[(I-1)+(J-1)*NM];
A[(I-1)+(J-1)*NM] := A[(I-1)+(M-1)*NM];
A[(I-1)+(M-1)*NM] := F;
_20:
end;
for I:=K to N do
begin
F := A[(J-1)+(I-1)*NM];
A[(J-1)+(I-1)*NM] := A[(M-1)+(I-1)*NM];
A[(M-1)+(I-1)*NM] := F;
_30:
end;
_40:
case IEXC of
1: goto _50;
2: goto _90;
end;
{ ПОИСК СТРОК С ИЗОЛИРОВАННЫМИ С.ЗН. НА ДИАГОНАЛИ }
{ И СДВИГ ИХ ВНИЗ }
_50:
if ( L = 1 )
then goto _230;
L := L - 1;
{ J = L,1,-1 }
_60:
for JJ:=1 to L do
begin
J := L + 1 - JJ;
for I:=1 to L do
begin
if ( I = J )
then goto _70;
if ( A[(J-1)+(I-1)*NM] <> 0.0 )
then goto _80;
_70:
end;
M := L;
IEXC := 1;
goto _10;
_80:
end;
goto _100;
{ ПОИСК СТОЛБЦОВ С ИЗОЛИР. С.ЗН. НА ДИАГОНАЛИ }
{ И СДВИГ ИХ ВЛЕВО }
_90:
K := K + 1;
_100:
for J:=K to L do
begin
for I:=K to L do
begin
if ( I = J )
then goto _110;
if ( A[(I-1)+(J-1)*NM] <> 0.0 )
then goto _120;
_110:
end;
M := K;
IEXC := 2;
goto _10;
_120:
end;
{ МАСШ-ИЕ ПОДМАТРИЦЫ,РАСПОЛОЖЕННОЙ В СТРОКАХ }
{ И СТОЛБЦАХ С НОМЕРАМИ ОТ К ДО L }
for I:=K to L do
begin
SCALE[I-1] := 1.0;
_130:
end;
{ ИТЕРАЦИОННОЕ УМЕНЬШЕНИЕ НОРМЫ }
_140:
NOCONV :=False;
for I:=K to L do
begin
C := 0.0;
R := 0.0;
for J:=K to L do
begin
if ( J = I )
then goto _150;
C := C + Abs(A[(J-1)+(I-1)*NM]);
R := R + Abs(A[(I-1)+(J-1)*NM]);
_150:
end;
{ МЕРЫ ПРЕДОСТОРОЖНОСТИ В СЛУЧАЕ С=. ИЛИ R=. }
if ( C = 0.0 ) or ( R = 0.0 )
then goto _220;
G := R/RADIX;
F := 1.0;
S := C + R;
_160:
if ( C >= G )
then goto _170;
F := F*RADIX;
C := C*B2;
goto _160;
_170:
G := R*RADIX;
_180:
if ( C < G )
then goto _190;
F := F/RADIX;
C := C/B2;
goto _180;
{ МАСШ-ИЕ }
_190:
if ( (C + R)/F >= 0.95*S )
then goto _220;
G := 1.0/F;
SCALE[I-1] := SCALE[I-1]*F;
NOCONV :=True;
for J:=K to N do
begin
A[(I-1)+(J-1)*NM] := A[(I-1)+(J-1)*NM]*G;
_200:
end;
for J:=1 to L do
begin
A[(J-1)+(I-1)*NM] := A[(J-1)+(I-1)*NM]*F;
_210:
end;
_220:
end;
if ( NOCONV )
then goto _140;
_230:
LOW := K;
IGH := L;
end;
end.
← →
@!!ex © (2009-11-05 17:57) [70]> [69] Jeer © (05.11.09 17:55)
Жесть....
ИМХО ИМХО ИМХО ИМХО ИМХО
← →
Игорь Шевченко © (2009-11-05 17:57) [71]Jeer © (05.11.09 17:55) [69]
Можут, ему лучше было на фортране оставаться ?
← →
TUser © (2009-11-05 18:01) [72]
> Игорь Шевченко © (05.11.09 17:42) [67]
В "C:\Program Files\Borland\Delphi7\Source\" найдено 4 файла
DSIntf.pas - Goto в комментарии
WSDLIntf.pas - в строковой константе
В
getmem.inc
MXDSSQRY.PAS
два сходных примера, а именно
procedure AAA;
begin
...
if bbb then goto FastExit;
...
if ccc then goto FastExit;
...
exit;
FastExit:
bla-bla-bla;
end;
Это два примера на десятки тысяч строк. В обоих случаях надо искать этот FastExit глазами в немаленькой процедуре - вот вам то самое уменьшение читабельности. Оба элементарно переписываются без goto.
function AAADone: boolean;
begin
result := false;
...
if bbb then goto exit;
...
if ccc then goto exit;
...
end;
procedure AAAOrBlaBlaBla;
begin
if AAADone then exit;
bla-bla-bla;
end;
(Еще проще было возбудить исключение и обработать его в try..except, но не в getmem.inc, наверное.) Exit не требует от меня искать глазами метку. Выйти - и баста. Заодно, одна большая процедура разбивается на две поменьше.
← →
TUser © (2009-11-05 18:02) [73]
> label
> _10,_20,_30,_40,_50,_60,_70,_80,_90,_100,_110,_120,_130,
> _140,_150,
> _160,_170,_180,_190,_200,_210,_220,_230;
С бейсика переписывали?
← →
Игорь Шевченко © (2009-11-05 18:04) [74]TUser © (05.11.09 18:01) [72]
> В "C:\Program Files\Borland\Delphi7\Source\" найдено 4 файла
подкаталога IBX нету ? Там тоже присутствует.
> Еще проще было возбудить исключение и обработать его в try.
> .except
За это надо убивать. Медленно и с наслаждением
← →
Verg (2009-11-05 18:06) [75]
> Оба элементарно переписываются без goto.
Это если не фанатеть, то Будьте добры?
> надо искать этот FastExit глазами в немаленькой процедуре
А если нет goto, то что надо будет искать в "немаленькой процедуре"?
← →
Jeer © (2009-11-05 18:07) [76]
> Игорь Шевченко © (05.11.09 17:57) [71]
>
> Jeer © (05.11.09 17:55) [69]
>
> Можут, ему лучше было на фортране оставаться ?
>
Полагаю, что и был изначально Фортран.
> > Еще проще было возбудить исключение и обработать его в
> try.
> > .except
>
>
> За это надо убивать. Медленно и с наслаждением
Позови, когда будет случай :)
← →
Verg (2009-11-05 18:08) [77]
> С бейсика переписывали?
Это индусский подход. Это нормально.
← →
Игорь Шевченко © (2009-11-05 18:12) [78]Jeer © (05.11.09 18:07) [76]
> Полагаю, что и был изначально Фортран.
Я подобных алгоритмов воз и маленькую тележку видел. В книжках, специально издавались, кому надо - тот набьет. Разумеется, на фортране, так как вся научная мысль 60-80-ых годов именно на нем и реализовывалась. Потому и говорю - может, лучше на фортране ? Написать переходник для сопряжения паскаля с фортраном, вроде зло не столь большой руки.
← →
Jeer © (2009-11-05 18:15) [79]
> Потому и говорю - может, лучше на фортране ?
Дык не ко мне вопрос - это НИИ ВЦ МГУ публикует свою библотеку.
Раньше у них был только фортран и Си вариант, сейчас добавили Паскаль.
← →
GDI+ (2009-11-05 19:56) [80]try
...
except end;
надо сразу вешать за все выступающие части, если не написан подробный комментарий, почему в данном богоизбранном участке кода все без исключения исключения (пардон за тавтологию) должны игнорироваться
У меня такое в самодельном логере ошибок написано(до эврика лог), который использовался для логирования ошибок. Тоесть в данном случае мне не важно почему произошла ошибка, так как в данном случае или халт программы с выодом сообщения пользователю или просто игнорировать. Я выбрал второе.
← →
Демо © (2009-11-05 20:06) [81]
> @!!ex © (05.11.09 17:26) [61]
> > [59] Демо © (05.11.09 17:10)
>
> Ага. А переход через проезжую часть вместо пешеходного говорит
> о смелости, знании правил и о том, что человек не следует
> тупо авторитетам... ЛОЛ.
> ПРавила рождаются не благодаря авторитетам, а из вполне
> жизненных проблем.
> Использование goto не оправданно в большинстве случае.
Так значит в МЕНЬШИНСТВЕ случаев goto всё-же оправдан?
Может тогда приведёшь примеры - где это может произойти?
"Правила дорожного движения" - руководство к беспрекословным дейстиям. Ты их не припутывай сюда.
А вот к мнению авторитетов надо критически относиться. Лучше сначала собственной головой подумать, а потом послушать.
← →
Демо © (2009-11-05 20:07) [82]
> ПРавила рождаются не благодаря авторитетам, а из вполне
> жизненных проблем.
PS.
Нет такого правила - "Нельзя использовать GOTO"
← →
@!!ex © (2009-11-05 20:12) [83]Прочитай внимательнее мои посты. Пока не вижу смысла писать что-то еще, если то что написано не прочитано.
← →
Anatoly Podgoretsky © (2009-11-05 20:21) [84]> Jeer (05.11.2009 17:55:09) [69]
Ну тут уже не до GOTO
← →
Mystic © (2009-11-05 20:28) [85]Ну например как-нить так использую goto:
HRESULT STDMETHODCALLTYPE CExtension::Initialize(LPCITEMIDLIST pidlFolder, IDataObject *pdtobj, HKEY hkeyProgID)
{
FreeFileList();
if (!IsEnabled()) return E_INVALIDARG;
FORMATETC fmt = { CF_HDROP, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL };
STGMEDIUM stg = { TYMED_HGLOBAL };
HDROP hDrop = NULL;
HRESULT hr = E_INVALIDARG;
if (FAILED(pdtobj->GetData(&fmt, &stg))) return E_INVALIDARG;
hDrop = (HDROP)GlobalLock(stg.hGlobal);
if (hDrop == NULL) goto Done;
FileCount = DragQueryFile(hDrop, 0xFFFFFFFF, NULL, 0);
if (FileCount == 0) goto Done;
FileList = new CFileName[FileCount];
for (UINT i=0; i<FileCount; ++i)
if (DragQueryFile(hDrop, i, FileList[i], MAX_PATH) == 0) goto Done;
hr = S_OK;
Done:
if (hr != S_OK) FreeFileList();
if (hDrop != NULL) GlobalUnlock(stg.hGlobal);
ReleaseStgMedium (&stg);
return hr;
}
← →
Демо © (2009-11-05 20:34) [86]
> @!!ex © (05.11.09 20:12) [83]
> Прочитай внимательнее мои посты. Пока не вижу смысла писать
> что-то еще, если то что написано не прочитано.
Которые твои посты? Их и было-то всего один с существенным высказыванием - тот, который я процитировал.
А GOTO вполне полезны (может это даже почти единственная польза от их использования) при большой вложенности условных операторов.
И это давно всем известно.
← →
Inovet © (2009-11-05 20:35) [87]> [0] XXL (04.11.09 14:36)
См ответ в посте 550 в ветке о поэзии
← →
oxffff © (2009-11-05 21:39) [88]
> Игорь Шевченко © (05.11.09 17:21) [60]
> Alkid © (05.11.09 16:49) [58]
>
> У меня мнение простое - исключение должно говорить о ситуации
> в программе, для которой программист не предусмотрел штатной
> обработки.
>
> Кстати, за код вида
> try
> ...
> except end;
>
> надо сразу вешать за все выступающие части, если не написан
> подробный комментарий, почему в данном богоизбранном участке
> кода все без исключения исключения (пардон за тавтологию)
> должны игнорироваться
Помнится вы были крайне категоричны, что пустой except end - это зло.
И мои примеры ингорировали. :)
Ветка была горячая, я еще и бан получил.
Теперь вы все же более благосклонны. Подскажите что заставило Вас адаптировать ваше мнение на более лояльное?
Неужели опыт пустого except end. :)
← →
RWolf © (2009-11-05 21:52) [89]
> Ну например как-нить так использую goto:
goto здесь необязателен. EAbort к этому исходнику подойдёт, как родной.
Я ещё практикую конструкциюrepeat
...
if ... then break;
...
if ... then break;
...
until false;
← →
RWolf © (2009-11-05 21:53) [90]кхм... until true, конечно (С++ глаза застит)
← →
Игорь Шевченко © (2009-11-05 23:17) [91]oxffff © (05.11.09 21:39) [88]
Я и сейчас категоричен, ничего не изменилось.
Если не будет написано веского комментария, почему в этом участке кода жизненно необходимо давить исключения, от EOutOfMemory до EAccessViolation
← →
oxffff © (2009-11-05 23:46) [92]
> Игорь Шевченко © (05.11.09 23:17) [91]
1. Исключения вообще могут наследоваться от Tobject.
2. Исключения могут быть внешними
3. Эти неизвестные исключения могут быть в самом логере, но не должны затрагивать остальную часть программы.
Она не должна вообщем с треском как вы предпочитаете.
А я рад вообщем что каждый при своем мнении, когда буду в Москве будет время подискутировать и на эту тему тоже при употреблении крепких напитков, если вы конечно не возражаете.
← →
Piter © (2009-11-05 23:48) [93]Игорь Шевченко © (05.11.09 23:17) [91]
Если не будет написано веского комментария, почему в этом участке кода жизненно необходимо давить исключения
а я приводил отличный, на мой взгляд, пример.Window: OleVariant;
...
try
Window.before_print_script;
except ;
end;
Это идет работа с TWebBrowser. После отображения странички и перед печатью, в документе исполняется скрипт before_print_script. Если в тексте HTML страницы есть такой JavaScript - то он вызовется, там может быть прописано некоторое окончательное форматирование страницы перед печатью. Если же такой скрипт внутри страницы не объявлен - будет исключение OLE, типа нет такого метода.
И почему не нужно давить это исключение? Оно абсолютно не информативное. Отсутствие такого JavaScript"а внутри страницы - абсолютно нормальное явление, это уже зависит от разработчика шаблона страницы. Если ему нужно с помощью JS что-то отформатировать - пусть использует, не нужно - так не нужно.
Единственное, что могли сказать абсолютные противники "пустого" except - мол, надо каким-то образом проверять ДО вызова - а есть ли сценарий с таким именем или нет. Наверняка, это проверить как-то можно. Но я не понимаю - зачем? Логику вывернули.
Было "Нет такого примера, когда бы был оправдан пустой try..except", а стало "Try..except не должен быть пустой, поэтому надо любым способом избегать пустого try..except". При действии последней логики да, можно поработать, подумать, ввести проверку и обойтись без try..except
← →
Игорь Шевченко © (2009-11-06 01:12) [94]oxffff © (05.11.09 23:46) [92]
> подискутировать и на эту тему тоже при употреблении крепких
> напитков, если вы конечно не возражаете.
Крепких - возражаю, пиво - не возражаю :)
Что касается исключений - в прошлой дискуссии я писал, что теряется информация не только о том, что именно плохое произошло, но и о том, что вообще что-то плохое произошло. Здесь все зависит от автора и лежит на его совести, согласен он на такую потерю, или нет. Для будущей подержки стоит написать, что автор изначально предполагает, что игнорирование всх без исключения исключений (опять же, пардон за тавтологию) в этом участке не принесет вреда ни в настоящем, ни в будущем.
Разумеется, я вроде не являюсь цербером, ОТК и нормоконтролем в одном лице для всех программистов, каждый волен поступать, как ему угодно.
← →
Amoeba © (2009-11-06 01:35) [95]А как вам такой шедевр с goto?
http://www.delphikingdom.com/asp/answer.asp?IDAnswer=73729
← →
Игорь Шевченко © (2009-11-06 02:06) [96]Amoeba © (06.11.09 01:35) [95]
да там не только goto
← →
Германн © (2009-11-06 02:23) [97]
> Крепких - возражаю, пиво - не возражаю :)
>
Из некрепких - только Джин-тоник или вермут (только не "советский"). Если помнишь, был магазин "Балатон" рядом с м.Университет. Там порой можно было купить венгерский вермут. Вот оттуда и моя любовь к вермутам.
Моё кредо после "эпохи пива"! :)
← →
Inovet © (2009-11-06 02:32) [98]> [97] Германн © (06.11.09 02:23)
> был магазин "Балатон"
А что там теперь?
← →
Германн © (2009-11-06 02:39) [99]
> Inovet © (06.11.09 02:32) [98]
>
> > [97] Германн © (06.11.09 02:23)
> > был магазин "Балатон"
>
> А что там теперь?
>
А фиг его знает. Я про него совсем забыл (я не него совсем забил - так нынче принято говорить?).
Тут ещё хуже, чем в советское время.
Как не искал, до сих пор не нашел постоянного "поставщика" хорошего вермута. Везде Мартини!
← →
MonoLife © (2009-11-06 04:13) [100]При упоминании goto и(или) спиртных напитков происходит всеобщее радостное оживление и все забы(и)вают что было вначале:))
← →
Anatoly Podgoretsky © (2009-11-06 12:11) [101]> Игорь Шевченко (05.11.2009 23:17:31) [91]
Например, Сервер и он не должен падать ни в каком случае, кроме старта.
← →
asail © (2009-11-06 12:23) [102]
> Anatoly Podgoretsky © (06.11.09 12:11) [101]
Ну, там тоже try..except не пустой должен быть - как минимум писать в лог...
У меня пустой try..except, например, в записи логов используется. Как-то так:
procedure WriteLog(const _sMsg: string);
begin
try
. . .
пишем лог в файл
. . .
except
end;
end;
В случае ловли исключения, делать с ним все равно нечего... А ловить надо...
← →
Anatoly Podgoretsky © (2009-11-06 12:46) [103]> asail (06.11.2009 12:23:42) [102]
Конечно в процедуры записи в лог, этот блок должен быть пустым.
Страницы: 1 2 3 вся ветка
Форум: "Прочее";
Текущий архив: 2010.01.03;
Скачать: [xml.tar.bz2];
Память: 0.77 MB
Время: 0.007 c