Здравствуйте, Игoрь, Вы писали:
И>Ну вот я взял ради интереса и распечатал пару страниц кода из студии... теперь я вообще не понимаю из-за чего весь сыр-бор. Студия помечает перенесенные строки стрелочками, перенесенных строк не так уж и много на странице. Принципиально это на читабельность не влияет. Кстати, в одну строку без переносов у меня с дефолтными настройками влазят строки до 100-106 символов в длину. Если уменьшить отступы от краев листа, влезет еще больше. В чем вообще проблема?
Я не знаю почему вы решили что распечатать код — проблема. В конце концов лист можно развернуть на 90. Вообще ограничение не для печати. А для того, чтобы писали читаемый код. Так же как размер функции на экран.
Здравствуйте, Игoрь, Вы писали:
VV>>Иногда имеет смысл расширить ограничение до 85-90 символов если пользуешься языком, где изначально есть несколько контекстов (пакет, класс итд), но дело вовсе не в ширине экрана. И>Зачастую гораздо удобнее иметь имя с чуть более длинным названием, но из которого ясна суть, чем плодить мелкие аббревиатуры, смысл которых становится загадкой через некоторое время даже для самого автора. 85-90 мало, без вариантов.
Краткость — сестра таланта. Но это не означает, что в именах надо выбрасывать значимую информацию. А если вам 85-90 мало, стоит проверить качество своего кода другими метриками. Вполне возможно у вас как раз тот случай когда код нечитаем из-за большого количества контекстов.
Здравствуйте, vladimir.vladimirovich, Вы писали:
I>>Распечатки это отсутствие навигации, подсветки, рефакторинга, анализа, интеллисенса и тд. I>>Максимум — фетиш который помогает сменить обстановку и отдохнуть.
VV>Вполне возможно. А почему Вы вдруг заговорили о фетишах?
Фетиш — неодушевлённый предмет, наделённый сверхъестественными свойствами. Наиболее распространённые фетиши — амулеты, обереги, талисманы. В переносном смысле — то, что является предметом безусловного признания, слепого поклонения. У большинства людей в современном обществе это всевозможные вещи (сотовые, машины, одежда и пр.), где цена за имя фетиша растёт не сопоставимо росту качества этой техники, но эта вещь является предметом безусловного признания в кругу общения данного индивида.
Заговорил потому, что очень странно, что бы девелопер отказался от всех плюсов-бонусов которые дают инструменты и занялся вдруг самоудовлетворением используя листок бумаги и карандаш.
Я решил, что пока дело всего лишь в необходимости отдыха. А почему тебя беспокоит что я спросил про фетиш ?
Здравствуйте, vladimir.vladimirovich, Вы писали:
VV>Вы научились пользоваться поиском — это безусловно позитивный процесс! А почему Вам кажется, что кто-то беспокоится?
Очевидно, что твой психиатор сливает приватную инфу. Подай на него в суд
Здравствуйте, Ikemefula, Вы писали:
VV>>Вы научились пользоваться поиском — это безусловно позитивный процесс! А почему Вам кажется, что кто-то беспокоится? I>Очевидно, что твой психиатор сливает приватную инфу. Подай на него в суд
Здравствуйте, Erop, Вы писали:
E>Я указал конкретную проблему. Взрыв QSort на каких-то специфичных данных. Чем там поможет подсветка и рефакторилка? Ну и вообще что именно поможет-то, кроме головы?
Сколько тебе лет ?
У меня были похожие задачи, получалось решать их используя инструменты.
Вместо того, что бы эмулировать головой control flow, нужно проводить эксперименты, менять вход, ввододть логирование, пользоваться отладкой и тд.
I>У меня были похожие задачи, получалось решать их используя инструменты. I>Вместо того, что бы эмулировать головой control flow, нужно проводить эксперименты, менять вход, ввододть логирование, пользоваться отладкой и тд.
это все здорово, если ты можешь воспроизвести проблему..
Здравствуйте, Ikemefula, Вы писали:
I>Сколько тебе лет ?
Превосходный аргумент. Речь не мальчика, но...
I>У меня были похожие задачи, получалось решать их используя инструменты.
Поразительная логика. Вы феноменальны!
Прошу не принимать на свой счет. Просто вспомнилась прекрасная песня группы Несчастный Случай: "Я готов предугадывать мысли людей и собак, Но мышление устриц — это какой-то мрак..."
I>Вместо того, что бы эмулировать головой control flow, нужно проводить эксперименты, менять вход, ввододть логирование, пользоваться отладкой и тд.
I>>У меня были похожие задачи, получалось решать их используя инструменты. I>>Вместо того, что бы эмулировать головой control flow, нужно проводить эксперименты, менять вход, ввододть логирование, пользоваться отладкой и тд.
D>это все здорово, если ты можешь воспроизвести проблему..
Здравствуйте, CreatorCray, Вы писали:
U>>Но ограничение в 80 символов имеет вполне рациональное объяснение — примерно столько составляет поле зрения человека, соответственно если код имеет ширину около 80 символов, то глаза двигаются только вверх-вниз, а если шире, то еще и влево-вправо, что очень неудобно. На коде, конечно, это не так заметно, т.к. там все равно скорость чтения низкая, а вот на обычном тексте это очень заметно, читать книгу развернутую по ширине на те же самые 80 символов экрана и на всю ширину экрана это две очень большие разницы. CC>Мы всё таки про код или про худлит?
На что возражаешь-то? Ты не согласен с тем, что необходимость движений глаз влево-вправо повышает утомляемость и снижает скорость чтения?
Простите, господа, что вмешиваюсь в выяснения отношений...
(А тема-то не упала до сих пор — значит, данный вопрос людям не безразличен, и
не такие уж это и "просто скобочки" !).
Итак, недавно наткнулся в одном форуме на сообщение человека, который никак не
мог найти причину загадочного поведения главного цикла вот в таком коде (ничего не
приукрашено — все как в оригинале):
Скрытый текст
while(((((numColsArg/N)*K)+(numColsArg%N))>=resultNumArg) && (((numColsArg/N)*K)+(numColsArg%N))>N){
circle=0;
Form1->ProgressBar1->Min=0;
Form1->ProgressBar1->Max=numColsArg/N;
Form1->ProgressBar1->Position=0;
while(circle<numColsArg/N){
Form1->ProgressBar1->StepBy(1);
Application->ProcessMessages();
rightOne=N-1;
rightZero=N-1;
nextOne=0;
sigmaMin=100000000000000000000000;
//Обнуляем массив сочетанийfor(int i=0;i<N;i++)
if(i<K){
mass[i]=1;
matrixGroup[i]=new long double[numRowsArg];
} else mass[i]=0;
for(unsigned long int iteration=0; iteration<C;iteration++){
//Заполняем массив из N элементовint MatCount=0;//счётчикfor(int i=0; i<N; i++)
if(mass[i]){
for(int r=0;r<numRowsArg;r++)
matrixGroup[MatCount][r]=dataSource[i+N*circle][r];
MatCount++;
}
sigma=0;
for(int l=0; l<left;l++)
sigma+=sigmaFunc(matrixGroup, funcVal, numRowsArg, numRowsInModel,l,K,false);
sigma/=left;
if(sigma<sigmaMin){
sigmaMin=sigma;
for(int q=0; q<N; q++)
if(mass[q]) massSigmaBest[q]=1;
else massSigmaBest[q]=0;
}
rightZero=rightOne=N-1;
//Если правый бит не единица, находим ближайшую единицу и сдвигаем вправо на 1while(!mass[rightOne]) rightOne--;
if(rightOne!=N-1){
mass[rightOne]=0;
mass[rightOne+1]=1;
continue;
}
//Если правый бит единица
//Считаем количество единиц справаwhile(mass[rightZero]) rightZero--;
//Исключаем единичные разряды справа из рассмотрения
//находим ближайшую единицу и перемещаем на 1 вправоif(rightZero!=N-1){
nextOne=rightZero;
while(!mass[nextOne]) nextOne--;
mass[nextOne]=0;
mass[nextOne+1]=1;
for(int i=rightZero+1; i<N; i++)
mass[i]=0;
for(int i=nextOne+2;i<nextOne+2+(N-1-rightZero);i++)
mass[i]=1;
}
}
//Сдвигаем значения вправоfor(int j=0,k=0; j<N; j++)
if(massSigmaBest[j]){
for(int i=0; i<numRowsArg;i++)
dataSource[k+circle*K][i]=dataSource[j+circle*N][i];
titleHead[k+circle*K][0]=titleHead[j+circle*N][0];
titleHead[k+circle*K][1]=titleHead[j+circle*N][1];
k++;
}
circle++;
Sh1.OlePropertyGet("Cells",(numRowsArg*left+10+step),(circle+1)).OlePropertySet("Value",((AnsiString)(double)sigmaMin).c_str());
}
for(int j=0;j<(numColsArg%N);j++){
for(int i=0; i<numRowsArg;i++)
dataSource[j+circle*K][i]=dataSource[j+circle*N][i];
titleHead[j+circle*K][0]=titleHead[j+circle*N][0];
titleHead[j+circle*K][1]=titleHead[j+circle*N][1];
}
step++;
numColsArg=((numColsArg/N)*K)+(numColsArg%N);
}
По словам "очевидцев", на некоторых входных данных программа так круто зацикливается, что не
хочет завершать цикл, несмотря на то, что одно из условий главного while равно false (смотрели
под отладчиком), и даже вручную вставленная инструкция break ничего не дает (!) —
программа продолжает выполняться со следующей строки.
Здравствуйте, Ikemefula, Вы писали:
I>>>У меня были похожие задачи, получалось решать их используя инструменты. I>>>Вместо того, что бы эмулировать головой control flow, нужно проводить эксперименты, менять вход, ввододть логирование, пользоваться отладкой и тд.
D>>это все здорово, если ты можешь воспроизвести проблему..
I>Не "можешь", а "умеешь".
Не всегда твое "умеешь" доступно. Если проблема возникает на очень редком случае входных данных, то не так просто применить "умеешь". Потому что сначала может понадобится сообразить как эти данные сформировать.
Опять же, логгирование или отладка вносят свой вклад. И при более усиленном логгировании ошибка банально не воспроизводится. А когда воспроизводится, то детализации логов недостаточно. В этом случае толку от твоих умений будет ноль
Здравствуйте, CreatorCray, Вы писали:
CC>>>Значит мне в последнее время везёт. Я и код вижу и ничего реально геморного преодолевать не надо. I>>Я помню, это не у тебя код проекта в одной команде писаный ? CC>Видимо не у меня.
А моему у тебя.
I>>>>Сиплюсники склонны все проблемы решать переписыванием, потому что вижло рефакторить не умеет. CC>>>VAX умеет. I>>Не умеет. CC>Умеет умеет. CC>Все что надо для С++ он умеет.
Вот видишь, уже уточнять начал
Смотрим вместе, вычеркнул глупости всякие. Сам видишь — жиденько. И для классов, интерфейсов практически ничего нет.
•Rename
•Extract Method •Encapsulate Field
•Change Signature •Move Implementation to Source File •Create from Usage •Add Member •Add Similar Member •Document Method
•Create Declaration
•Create Implementation
То есть, VAX умеет рефакторить для C, но не для С++
Здравствуйте, vladimir.vladimirovich, Вы писали:
I>>У меня были похожие задачи, получалось решать их используя инструменты.
VV>Поразительная логика. Вы феноменальны!
Я обычный, а ты и для фона не годишься.
I>>Вместо того, что бы эмулировать головой control flow, нужно проводить эксперименты, менять вход, ввододть логирование, пользоваться отладкой и тд.
VV>Это называется "сила заднего ума".
Это инженерия. А "задний ум" есть гадание по бумажке.
Здравствуйте, ambel-vlad, Вы писали:
I>>Не "можешь", а "умеешь".
AV>Не всегда твое "умеешь" доступно. Если проблема возникает на очень редком случае входных данных, то не так просто применить "умеешь". Потому что сначала может понадобится сообразить как эти данные сформировать.
Да, необходимость подумать никто не отменял, ты прав
AV>Опять же, логгирование или отладка вносят свой вклад. И при более усиленном логгировании ошибка банально не воспроизводится. А когда воспроизводится, то детализации логов недостаточно. В этом случае толку от твоих умений будет ноль
Бывает и такое. Тебя ведь никто не ограничивает логами ?
Я вот не пойму, чем отсутствие инструментов может быть лучше их наличия.
Хотелось бы увидеть качественный пример, а не булшит про сортировку.
O>По словам "очевидцев", на некоторых входных данных программа так круто зацикливается, что не O>хочет завершать цикл, несмотря на то, что одно из условий главного while равно false (смотрели O>под отладчиком), и даже вручную вставленная инструкция break ничего не дает (!) - O>программа продолжает выполняться со следующей строки. O>Казалось бы — при чем тут скобки ?
Вот когда такого кода на 200-500кб, то начинается самое интересное
Здравствуйте, Ikemefula, Вы писали:
I>>>Не "можешь", а "умеешь".
AV>>Не всегда твое "умеешь" доступно. Если проблема возникает на очень редком случае входных данных, то не так просто применить "умеешь". Потому что сначала может понадобится сообразить как эти данные сформировать.
I>Да, необходимость подумать никто не отменял, ты прав
Угу, вот только чтобы придумать этот набор входных данных надо не мало времени потратить на просмотр и анализ в голове кода. Так что от "умеешь" толку ноль.
AV>>Опять же, логгирование или отладка вносят свой вклад. И при более усиленном логгировании ошибка банально не воспроизводится. А когда воспроизводится, то детализации логов недостаточно. В этом случае толку от твоих умений будет ноль
I>Бывает и такое. Тебя ведь никто не ограничивает логами ?
I>Я вот не пойму, чем отсутствие инструментов может быть лучше их наличия.
Никто не говорит, что отсутствие инструментов лучше. Говорят, что они не всегда могут помочь. Разницу видишь?
I>Хотелось бы увидеть качественный пример, а не булшит про сортировку.
А сортировка тоже может неудачно выстрелить.
Могу еще один случай привести. Была у нас ситуация, когда на специально подобранном наборе данных сервак обламывался. Такой набор данных в реальной жизни если и встретиться, то хорошо, если раз в пару лет. А можешь и не столкнуться. Тем не менее, тестеры смогли смоделировать ситуацию. Из логов понятно приблизительное место где возникает проблема. Кода там не так уж и много. Сотни три строк. Но точнее узнать не получается. Поставили большую детализацию, все начало пахать идеально. Под отладчиком эта проблема вообще никогда не воспроизводилась. Искали как раз по распечаткам. По банальной причине. Удобнее. На бумаге удобнее делать пометки. Причина оказалась банальной. Две подсистемы должны были работать независимо. Но так уж сложилось, что на том наборе входных данных зависимость все таки присутствовала.
Здравствуйте, ambel-vlad, Вы писали:
I>>Да, необходимость подумать никто не отменял, ты прав
AV>Угу, вот только чтобы придумать этот набор входных данных надо не мало времени потратить на просмотр и анализ в голове кода. Так что от "умеешь" толку ноль.
Есть инструменты, которые облегчают просмотр и анализ кода.
I>>Я вот не пойму, чем отсутствие инструментов может быть лучше их наличия.
AV>Никто не говорит, что отсутствие инструментов лучше. Говорят, что они не всегда могут помочь. Разницу видишь?
Пример приведи.
I>>Хотелось бы увидеть качественный пример, а не булшит про сортировку.
AV>А сортировка тоже может неудачно выстрелить.
Может. Не возникало сложностей с алгоритмами сложнее сортировки, что бы найти проблему
AV>Могу еще один случай привести. Была у нас ситуация, когда на специально подобранном наборе данных сервак обламывался. Такой набор данных в реальной жизни если и встретиться, то хорошо, если раз в пару лет. А можешь и не столкнуться. Тем не менее, тестеры смогли смоделировать ситуацию.
Видишь, один инструмент ты уже сам назвал
>Из логов понятно приблизительное место где возникает проблема. Кода там не так уж и много. Сотни три строк.
Это уже второй инструмент.
>Но точнее узнать не получается. Поставили большую детализацию, все начало пахать идеально.
Что такое "детализация" ?
>Под отладчиком эта проблема вообще никогда не воспроизводилась. Искали как раз по распечаткам. По банальной причине. Удобнее. На бумаге удобнее делать пометки. Причина оказалась банальной.
Т.е. вы эмулировали бумагой анализатор, что можно поделать Вероятно код был в таком состоянии, что его легче читать по бумаге. На это тоже есть инструменты.
>Две подсистемы должны были работать независимо. Но так уж сложилось, что на том наборе входных данных зависимость все таки присутствовала.
Обычно первым делом проверяются все возможные зависимости и отрабатываются по одной. На 300 строк кода зависимостей просто не может быть очень много.
Вобщем, ты привел пример того, что инструменты нужны — ты сам назвал два штуки.