Здравствуйте, Aртём, Вы писали:
Aё>Здравствуйте, GhostCoders, Вы писали:
GC>>Забирай его себе в Австралию
Aё>А вот к вам симпатии нет: "Там работы на 30 минут" и потом "Я написал письмо клиенту и сказал, как вызвать в глобальной СК". Если работы там на 30 минут, как Вы изволили выразиться, но фича так и не была добавлена за все время- это уже о чем-то говорит.
Наличие или осутствие у Вас симпатий может интересовать только Вашу бабушку, дедушку, маму и папу.
N>Я поставил этому сообщению категорический плюс, но всё же считаю нужным вступиться и сказать несколько слов в пользу отладчика (скорее, не в случае ситуации ТС). Именно что ситуация "сам не понимает, как будет работать код" нормальна для нескольких случаев: N>1. Обучение программированию — когда надо прочувствовать происходящее именно в виде последовательности состояний и разницы между ними.
С одной стороны, так и есть. С другой стороны, при обучении программированию лучше сразу учить правильным техникам.
N>Это же не в случае обучения программированию вообще, но принципиально новым средствам (языки и фреймворки).
Ну, не совсем понимаю как отладчик может помочь изучению .NET, к примеру.
N>2. Странности работы платформы/фреймворка/etc., не документированные, плохо описанные, нарушающие документацию, etc.
Это так. Но это для уже видавшего виды разработчика скорее.
N>3. Очевидно, кордампы всех видов и происхождений.
А это уже не разработка, а скорее поддержка.
N>И правильным подходом должно быть не "запретить отладчик", а "отладчик — не замена тестам" и "затраты времени на отладчик должны быть обоснованы только чем-то из списка выше, но не неумением тестировать".
Дело в том, что использование отладчика вместо тестов — это не только затраченное время. Это еще и невозможность полностью протестировать имеющийся код.
L>>Программист должен уметь проверять работоспособность своего кода и верифицировать функциональность без отладчика. Именно поэтому я всегда говорю, что я бы вообще у разработчиков отбирал отладчик на время собственно разработки.
N>Лучшее воспитание тут — практическое доказательство того, что отладчик вместо тестов тормозит разработку.
Здравствуйте, Vlad_SP, Вы писали:
V_S>Здравствуйте, Aртём,
Aё>> У гениев бывают "игры разума", к сожалению.
V_S>Игры разума имеют неприятный побочный эффект — они иногда рождают чудовищ. Да, мы видели, оценивая код.........
Здравствуйте, BRAhMS, Вы писали:
V_S>>Игры разума имеют неприятный побочный эффект — они иногда рождают чудовищ. Да, мы видели, оценивая код.........
BRA>Сон рождает, а не игры.
Да да, там фейспалм.
Здравствуйте, Aртём, Вы писали:
Aё>Здравствуйте, GhostCoders, Вы писали:
GC>>Забирай его себе в Австралию
Aё>А вот к вам симпатии нет: "Там работы на 30 минут" и потом "Я написал письмо клиенту и сказал, как вызвать в глобальной СК". Если работы там на 30 минут, как Вы изволили выразиться, но фича так и не была добавлена за все время- это уже о чем-то говорит.
Здравствуйте, Bender, Вы писали:
B>Тут получается абелева группа, где минимальная мощность порождающего множества определяется формулой e-v+c...
Вот, как видите, совсем не нужно граней и планарности.
B>Наоборот решает. Вот был бы поиск компонент связности в отдельной чистой функции, да ещё и с юнит-тестами, сразу бы было намного читаемее.
B>Данные от предыдущего блока могут быть с ошибкой. Хуже того, два последовательных блоков могут содержать ошибки которые маскируют друг друга на большинстве данных. B>Вообще говоря тестировать систему в целом тоже необходимо, это называется интеграционное тестирование. Но оно не заменяет юнит-тестирование. B>Причём и то и то нужно автоматизировать, а не запускать постоянно вручную одни и те же тесты. Вот когда функции выполняют чёткую задачу — их и тестировать легко.
Все это — общее рассуждение о черном ящике. У меня же ящик вполне белый, и тесты предыдущих этапов целиком покрывают все данные для тестирования последующих. Поэтому вполне разумно, как и было сделано у меня, вести тестирование блоков последовательно, в конце приходя к "интеграционному тестированию".
Мне кажется, глупо проверять блоки "на все случаи жизни", пока самих этих случаев еще не предвидится. Например, вы разработали ракетный двигатель, но протестировали его только на Земле. Это неправильно, заявляют чистые ригористы, надо тестировать в невесомости, а еще лучше вблизи Солнца — на Меркурии, потом под Землей и при ядерном взрыве, чтобы провести все возможные тесты.
Здравствуйте, Bender, Вы писали:
B>Здравствуйте, Юрий Лазарев, Вы писали:
B>>>Достаточно получить глобальные координаты соответствующих точек и измерить глобальное расстояние между ними. ЮЛ>>Естественно, но не все так просто доходит до ИТ спецов. Те же евклидовы расстояния у них вычислялись и между точками в одной локальной системе (т.е.заведомо неверно)
B>Почему же заведомо неверно? Расстояния вполне могут иметь разную природу. B>Например на одном листе два чертежа, у каждого своя локальная система, причём на самом листе они могут быть растянуты как угодно. Тут евклидово расстояние в локальных координатах может вполне иметь смысл (например известны "оригинальные" локальные координаты точек и между ними вычисляется расстояние). При этом также имеют смысл и "глобальные" расстояния на самом листе, которые можно измерить линейкой — например для вычисления оптимального размера какой-нибудь аннотации.
Я опустил поначалу неопределенность этой вашей фразы, но к ней тут же, как оказалось, прицепился КМанагер. Поэтому скажу яснее — расстояния всегда имеют ОДНУ природу. Смысл в том, что физически вы измеряете одну и ту же сущность, независимо от ЛСК или глобальной СК, независимо от того, в каких единицах измерения и какие разные при этом вы получаете (цифровые) результаты.
Уверен, вы без труда объясните странному господину, почему в ЛСК необходимы метрические тензоры. Кстати, их нетрудно подсчитать по матрице преобразования, было бы желание.
Матрица ЛСК 4х4, приводимая тут в действительности 3-мерная и дополнительное измерение введено искусственно чтобы добавить трансляцию (перенос) системы координат. Например,
0.01 0 0 0
0 0.01 0 0
0 0 0.1 0
0 0 0 1
уже чем то будет существенно отличаться от рассмотренного Манагером (а это очень частый случай). Я не говорю уже об общем виде деформации, которую позволяет общий вид матрицы преобразования, и где именно значение метрического тензора особенно ясно видно.
Во всех подобных случаях евклидово расстояние (я так называю сумму квадратов) не верно.
Здравствуйте, jhfrek, Вы писали:
J>если GhostCoders не приврал для выгораживания себя, то репутация компании только улучшилась — в ней не держат людей тормозящих процесс разработки и устраивающих споры на ровном месте.
Это называется не "приврал", а солгал. Лжет он, как водится, к пущей выгоде для себя, но белые нитки легко просвечивают, вот и Артём смог сопоставить одно с другим и выявить нестыковку. Хотя этот пример всего лишь один из множества (я даже затрудняюсь сказать, когда бы он не лгал).
Например, "история" с ZERO_CHECK возникла в связи с тем, что клиент получил неправильную 64-битовую сборку инсталляции (часть прошла из 32-битовой), и причина была в какой то переменной авто-скрипта. Да, пока обезьянки глумились, я по своему пересобрал инсталляцию, и ее отправили клиенту. Через 2 дня обезьянки исправили наконец свой говно-скрипт и обрадовали меня тем, что они теперь знают, как "нужно". Я ответил, что мне это сейчас уже больше не нужно.
В смутном сознании Манагера эта история отложилась как "мои безумные поиски того, чего нет, потеря времени и проч, гоготание обезьянок в течение рабочего дня (кстати, чем полезным они при этом занимались?)"
Вообще, Манагеру очень выгодны подобные приступы локальной амнезии, чтобы помнить только выборочно. Я, к сожалению, амнезией не страдаю.
зы Отвечать самому КМ не вижу смысла — сейчас посмотрел 1 страницу, и вижу, что все ответы там уже имеются. Так что желающим видеть продолжения этой мыльной оперы можно посоветовать GOTO 1 — и бесконечный коммунальный базар обеспечен.
Вот почему неадекватов? И неадекватов чему?
Вы ведь не станете утверждать, что присутствующие обезьянки адекватны? В таком случае было бы адекватно желать побольше хапнуть, лезть вверх по головам трупов и вообще вести благообразную либеральную жизнь (проституция и гейропа включительно).
Перельман отказался от миллиона — это естественно. Так поступили бы все честные люди, не мартышки живущие одним потреблением. Перельман считал, что в равной мере премию заслуживал и его соавтор. И это тоже понятно — честные люди не станут жить на (нечестно заработанные) деньги, совесть не позволит их принять, жить с ними будет тяжело (словно Сальери, отравившему Моцарта). Наконец, это выражение того самого принципа равенства, о котором я уже не раз высказывался. Только гений может считать себя ниже или вровень с уличным музыкантом, и только сноб — превозносить свои мнимые достижения.
В действительности все равны. Умные видят это яснее всего. Любое личное достижение есть вклад на общий алтарь. Сколько талантов было загублено этими так называемыми "преуспевающими деятелями". Хотя все их преуспевание и заключалось в умении работать локтями.
On veut que les malheureux soient parfaits.
_____
Заодно, хотя я не Перельман, расскажу про себя. Занятие математикой — это удовольствие, которое не приносит денег, да и не обязано приносить. Занятие ценно само по себе. Поэтому я никогда не понимал, зачем придумали преференции (автоматический проходной балл для поступления в вуз и т.п.) тем, кто и без того доказал свои возможности. Наоборот, было бы естественней спрашивать с них больше среднего уровня.
Наверное, какое то из этих соображений подтолкнуло меня на одну "экстравагантную выходку", которой я бы гордился. Дело в том, что по нек.причинам (как потом оказалось, ранний варикоз, пропущенный врачами) мои успехи в области физкультуры к концу школы стали мягко говоря, неважными. Аттестат мне выдали нормальный, но по физ-ре явно натянули четверку дабы "проходной балл был автоматическим". Тогда я действительно воспользовался своей "известностью" после олимпиады — один и единственный раз в своей жизни — а именно, пошел к нашей директрисе и устроил скандал, потребовал вернуть в аттестат равноценную моим заслугам "тройку". Само собой, никаких трудностей с поступлением в вуз на общих основаниях у меня не возникло. Но было еще и чувство победы — над "червяком" внутри себя.
Ваш код реально ужасен — я сталкивался с таким — поддерживать мука.
Такое впечатление что вы никогда не слышали о рефакторинге. Я знаю что так обычно пишут
люди с хорошей памятью старой школы ) (Ну и студенты конечно)
Оставшиеся разработчики несчастные люди — теперь им поддерживать это говно — похоже вы нисколько не
уважаете(ли) труд других.
Все это следствие это серьезных косяков вашего руководителя:
— Вас нужно было уволить гораздо раньше (или провести разъяснительную беседу/послать на курсы).
— конечно отсутствие кодеревью
— документа о стиле кодирования.
Здравствуйте, AleksandrN, Вы писали:
AN>P.S. Забыл, когда в последний раз отладчиком пользовался. Обычно для отладки сейчас использую тесты и логи.
А я вот щас на новой работе в код въезжаю, и имею заявить, что нашёл прекрасное применение отладчику в условиях, когда непонятно, что это спагетти из пары-тройки десятков туда-сюда-делегатов делает.
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>Не преувеличивай, это отнюдь не запрет, как таковой. "Один экран текста" — это тот предел объёма программного текста, который удобно анализировать, т.к. не надо гонять текст вверх-вниз. Отсюда появилось неформальное правило: ограничивать размер функции одним экраном (примерно полсотни строчек на нынешних мониторах). Естественно, что в отдельных случаях это правило нарушают. Например, если логика алгоритма требует построить длинный switch/case на несколько сотен ключей. И уверяю тебя, никто в такой ситуации даже не пикнет относительно "неканоничности" такого кода.
Просто ремарочка. В функциональщине (конкретно — в скале) есть вложенные функции, а также возвращающие значения вложенные блоки. Для сужения областей видимости переменных я частенько пишу так:
val b = {
val a = ...
f(a)...
}
вместо плоского
val a = ...
val b = f(a)...
Аналогично, смутно вспоминаются давнишние срачи на тему "в отсутствии вложенных функций ООП-шники вынуждены засирать контракт класса". Суть в том, что код в любом случае растёт — вширь или вглубь. (Вернее, он, падла такая, растёт и вширь, и вглубь одновременно. ) Что, впрочем, не отменяет необходимости его структурировать и поддерживать баланс между глубиной и шириной для оптимальности восприятия. Так что, повторюсь, это просто ремарочка, а не возражение.
Здравствуйте, мыщъх, Вы писали:
М>в оригинале code complete. так что не гиперборла. кстати, сама книга написана в либеральном стиле без тоталитарщины и строгих правил.
Да и написана там по большому счёту — для любого достаточно опытного ходока по граблям — сплошная банальщина. Почти всё забыл почти сразу после прочтения. Запомнилось только правило "пишите не на языке, а с использованием языка": ну это ж фигня полная! Давайте сводить все фичи всех языков к общему знаменателю, не пользуясь, например, в скале функциональщиной или метапрограммированием, потому что этого нет в жаве. Нафига тогда новые языки вообще нужны. Возможно, впрочем, что мне оно запомнилось как-то криво, и речь шла не о фичах языков, а о их корявостях, но тогда это, опять же, банальщина: любой нормальный ходок по граблям в конце концов учится различать корявости издалека и не юзать их.
Здравствуйте, Юрий Лазарев, Вы писали:
B>>Тут получается абелева группа, где минимальная мощность порождающего множества определяется формулой e-v+c... ЮЛ>Вот, как видите, совсем не нужно граней и планарности.
Вот только вопрос в том, называется ли это формулой Эйлера. Судя по всему это называется "цикломатическим числом" или "цикломатическим рангом".
B>>Причём и то и то нужно автоматизировать, а не запускать постоянно вручную одни и те же тесты. Вот когда функции выполняют чёткую задачу — их и тестировать легко. ЮЛ>Все это — общее рассуждение о черном ящике. У меня же ящик вполне белый, и тесты предыдущих этапов целиком покрывают все данные для тестирования последующих. Поэтому вполне разумно, как и было сделано у меня, вести тестирование блоков последовательно, в конце приходя к "интеграционному тестированию".
Допустим, но была ли произведенна автоматизация тестирования? Или всё делалось вручную?
ЮЛ>Мне кажется, глупо проверять блоки "на все случаи жизни", пока самих этих случаев еще не предвидится. Например, вы разработали ракетный двигатель, но протестировали его только на Земле. Это неправильно, заявляют чистые ригористы, надо тестировать в невесомости, а еще лучше вблизи Солнца — на Меркурии, потом под Землей и при ядерном взрыве, чтобы провести все возможные тесты.
"нужно делать юнит-тестирование" != "нужно делать юнит-тестирование во всех мыслимых и немыслемых условиях"
Здравствуйте, Юрий Лазарев, Вы писали:
ЮЛ>Я опустил поначалу неопределенность этой вашей фразы, но к ней тут же, как оказалось, прицепился КМанагер. Поэтому скажу яснее — расстояния всегда имеют ОДНУ природу. Смысл в том, что физически вы измеряете одну и ту же сущность, независимо от ЛСК или глобальной СК, независимо от того, в каких единицах измерения и какие разные при этом вы получаете (цифровые) результаты.
Почему же по-вашему нельзя ввести несколько расстояний которые имеют разную природу?
ЮЛ>уже чем то будет существенно отличаться от рассмотренного Манагером (а это очень частый случай). Я не говорю уже об общем виде деформации, которую позволяет общий вид матрицы преобразования, и где именно значение метрического тензора особенно ясно видно. ЮЛ>Во всех подобных случаях евклидово расстояние (я так называю сумму квадратов) не верно.
Это расстояние не будет связано с глобальным расстоянием. Оно просто будет иметь другую природу. В чём проблема, если наделить это расстояние каким-то конкретным смыслом?
Ведь используют разные нормы — евклидова, манхэттенская. Считайте что и это просто отдельная норма.
Вот например, у нас есть матрица которая задает неравномерное растяжение по осям. Если мы применим это преобразование, например к окружности, то с точки зрения глобальной системы, она будет выглядеть как эллипс. Но вполне можно представить ситуацию, где полезным будет вычисление евклидового растояния на коэффициентах локальных координат (без учёта метрического тензора) — не вижу никакого криминала.
Здравствуйте, Bender, Вы писали:
B>Почему же по-вашему нельзя ввести несколько расстояний которые имеют разную природу?
B>Это расстояние не будет связано с глобальным расстоянием. Оно просто будет иметь другую природу. В чём проблема, если наделить это расстояние каким-то конкретным смыслом? B>Ведь используют разные нормы — евклидова, манхэттенская. Считайте что и это просто отдельная норма.
Это ваше "расстояние" будет иметь только ту природу, что не будет скаляром при преобразовании координат. Безусловно, имеет право на существование, как и всякая произвольная функция, взятая с потолка. Объясняйте потом клиенту, что это вы такой художник, "вы так видите".
B>Вот например, у нас есть матрица которая задает неравномерное растяжение по осям. Если мы применим это преобразование, например к окружности, то с точки зрения глобальной системы, она будет выглядеть как эллипс. Но вполне можно представить ситуацию, где полезным будет вычисление евклидового растояния на коэффициентах локальных координат (без учёта метрического тензора) — не вижу никакого криминала.
Когда что-то бывает полезным, это что-то заранее обуславливают и договариваются об определении. Здесь же заказчику, ожидающему расстояние "в нормальном смысле"(это же геологи или в любом случае практические люди), подсовывают "нечто", что может быть будет ему полезно, но вычисляется по другому и дает другой результат. Неужели вам нравится демагогия?
Например, заказчик нарисовал отрезок длиной 1м. Любые измерения линейкой говорят ему, что это 1м. Но вы предлагаете ему свою изумительную линейку, которая выдает любой результат, и 1.1м, и 0.5м и прочее в зависимости от массы обстоятельств. Наверное, клиент придет в восторг и купит у вас целую партию таких удивительных линеек.
Если идти из вашего рассуждения чуть дальше, то я тоже не вижу никакого криминала в использовании длинного кода, потому что тем более "можно представить ситуацию, где полезным будет" его использование.
Здравствуйте, Юрий Лазарев, Вы писали:
ЮЛ>Это ваше "расстояние" будет иметь только ту природу, что не будет скаляром при преобразовании координат. Безусловно, имеет право на существование, как и всякая произвольная функция, взятая с потолка. Объясняйте потом клиенту, что это вы такой художник, "вы так видите".
Конкретная ситуация: на листе бумаги изображены две карты с разным масштабом (типичная кстати ситуация). Локальное растояние (вычисленное из локальных координат) для каждой из карт имеет вполне конкретное и практичное значение. И даже глобальное растояние в пространстве листа имеет своё практическое значение для расположения аннтоаций.
ЮЛ>Если идти из вашего рассуждения чуть дальше, то я тоже не вижу никакого криминала в использовании длинного кода, потому что тем более "можно представить ситуацию, где полезным будет" его использование.
Конечно можно, и я даже приводил примеры где длинный код может быть как-то оправдан. Никаких весомых аргументов в пользу длины вашего кода я не услышал (это при том, что код элментарно разбивается на части).