Здравствуйте, Khimik, Вы писали:
K>Пожалуйста не пинайте меня, профессиональные офисные программеры, лучше скажите – где-нибудь ещё может использоваться похожий стиль?
Здравствуйте, Sinix, Вы писали:
S>>>Кэп 2: эта проблема решается не кодом, а наличием ТЗ, соглашениями по стилю кода, историей в таск-трекере, правильным разделением задач в команде и ещё тонной других способов. V>>и каким же образом тз, знание стиля и истории трекера поможет знать предметную область? я что-то пропустил в этой жизни? S>Это вопрос чтоб докопаться или серьёзно?
Я абсолютно серьёзно и безподколок. Видишь ли, я этот тезис про нового человека не знакомого с кодом вообще, читаемость сего кода и соответственно лёгкость его правки как следствие его "читаемости" слышу уже не в первый раз. Но на практике почему-то выходит, что этого не достаточно, а тезис всё повторяют и повторяют, как испорченную пластинку. Вот мне стало и интересна, сфигали?
S>Вопрос странный какой-то. Такое впечатление, что ты увидел у меня в посте какой-то тайный смысл, который я не закладывал, и с ним споришь
я вроде бы выделил твоё утверждение, но навсякий случай ещё раз:
После того, как выяснится, что код решает не ту проблему и не так, код правится без обращения к автору кода любым из разработчиков в команде. Даже если он видит этот код в первый раз.
S>Если код читаем и снабжён комментами/тестами, то проблема, которую должен решать код, восстанавливается и без автора.
Это не правда, потому-что читаемость кода не прибавляет знаний в предметной области. Читаемость кода это чисто личностное и только личностное восприятие написанного, с предметной областью не имеющего ничего общего. Наоборот, изначально надо иметь знания в предметной области (и в проекте тоже) чтобы правильно исправить код. А для этого нужно изучить достаточно значительную массу кода, включая код, который собираешься править, т.е. быть подготовленным к исправлению. Я не исключаю что есть простые случаи, которые выбиваются из сказанного, но только лишь потому, что это исключения подтверждающие правила — в исправляемом коде ты уже знаком с предметной областью.
S>Ссылка на ТЗ/лог таск-трекера позволяет уточнить детали (в том числе "предметную область кода") + найти человека, который поможет разобраться с непонятными моментами.
тогда мне не понятно это:
код правится без обращения к автору кода любым из разработчиков в команде
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Здравствуйте, Vain, Вы писали:
V>Я абсолютно серьёзно и безподколок. Видишь ли, я этот тезис про нового человека не знакомого с кодом вообще, читаемость сего кода и соответственно лёгкость его правки как следствие его "читаемости" слышу уже не в первый раз. Но на практике почему-то выходит, что этого не достаточно, а тезис всё повторяют и повторяют, как испорченную пластинку. Вот мне стало и интересна, сфигали?
А блин, я выразился некорректно Сорри
Речь шла про человека в команде, который видит конкретно этот кусок кода в первый раз, а не весь код вообще
Ну и дальше пошли недоразумения. Если натянуть ситуацию на абсолютного новичка — конечно бред получается, ему ещё минимум две недели надо въезжать что и куда.
Здравствуйте, jhfrek, Вы писали:
J>Мне всегда хочется убить подобных "экономистов", потому что ни брекпоинт не поставить, ни посмотреть как переменные меняются — каждая строчка как "черный ящик"
А как же всякая околофункциональщина с лямбдой и comprehensions?
J>>Мне всегда хочется убить подобных "экономистов", потому что ни брекпоинт не поставить, ни посмотреть как переменные меняются — каждая строчка как "черный ящик"
A>А как же всякая околофункциональщина с лямбдой и comprehensions?
В лямбдах брейпойнты можно поставить, а list comprehensions обычно достаточно короткие, чтобы не вызывать проблем
Здравствуйте, Vain,
V> Наоборот, изначально надо иметь знания в предметной области (и в проекте тоже) чтобы правильно исправить код. А для этого нужно изучить достаточно значительную массу кода, включая код, который собираешься править, т.е. быть подготовленным к исправлению.
Нет, вот тут ты не прав. Знания в предметной области чаще всего вообще не связаны с кодом. И хоть обизучайся "достаточно значительную массу кода", но знаний именно в предметной области — не прибавится.
Здравствуйте, Khimik, Вы писали: K>Я никогда не работал на работодателя, и у меня в ходе написания моей программы сформировался собственный стиль кода. Вот два фрагмента Delphi-кода моей программы:
Если это троллинг то он удался
Если же нет, то правильно говорят, что не умеешь ничего делать — иди в программисты. Программирование не производство — кривые руки компьютером не вырвет, а как хотелось бы как хотелось.
Здравствуйте, elmal, Вы писали:
E>Здравствуйте, VladFein, Вы писали:
VF>>Надеюсь что нет. E>Зря надеешься. Код после обработки обфускаторами конечно читается получше чем этот, но все таки стиль очень похож. Топикстартеру просто браво, я думал я все в этой жизни видел, меня ничем не удивить, по в плане метрик WTF в коде этот шедевр переплюнуть просто нереально. Первое место просто — такой стиль перебил класс с двумя методами на 10000 строк со сплошными копипастами и мешаниной табов из пробелов и сбившимися отсупами, а это нужно умудриться. И это еще тривиальный код, я полагаю автор на средней задаче в состоянии развернуться гораздо круче, чем здесь показал.
Я, между прочии, уже 9 лет зарабатываю на своей программе, и мой опыт говорит что мой стиль лучше стандартного, по крайней мере для меня.
"Ты должен сделать добро из зла, потому что его больше не из чего сделать". АБ Стругацкие.
Здравствуйте, Khimik, Вы писали: K>Я, между прочии, уже 9 лет зарабатываю на своей программе, и мой опыт говорит что мой стиль лучше стандартного, по крайней мере для меня.
и ты 9 лет остаешься на одном уровне?
Здравствуйте, __kot2, Вы писали:
__>Здравствуйте, Khimik, Вы писали: K>>Я, между прочии, уже 9 лет зарабатываю на своей программе, и мой опыт говорит что мой стиль лучше стандартного, по крайней мере для меня. __>и ты 9 лет остаешься на одном уровне?
Узкий специались, только он может прочитать что он написал.
Здравствуйте, Sinix, Вы писали:
S>2. После того, как выяснится, что код решает не ту проблему и не так, код правится без обращения к автору кода любым из разработчиков в команде. Даже если он видит этот код в первый раз. S>Что-то я не уверен, что со вторым пунктом у вас всё ок.
Эээээ. Вот давайте проведём мысленный эксперимент — я вам дам ссылку на ишью Розлина, а вы сначала проэстимейтите время, необходимое для фикса ишью, а потом попробуете это сделать? Ишью даже выберем уже закрытое, что бы сравнить ваши оценку/рельтат с тем, что потребовалось, скорее всего, автору кода. Мне кажется, серьёзных упрёков по стилю кодирования к тому проекту не будет.
Конечно, вы не один из команды, но дак ну и что? Во многих проектах _любой_ член команды может понятия не иметь что и как в соседних кусках. И выполнить требование того, что бы "любой" мог где угодно что поправить невозможно. Какую-то простейшую ошибку из разряда опечаток, off-by-one error и т.п. — конечно. Но что-то системное — сильно сомневаюсь. Где-то конечно такое возможно, но далеко не везде. Неоправданно много времени может уйти на изучение подсистемы, в которой необходимо внести правку.
В трёхзвенке, дапустим, тот, кто "клепает формочки" может сильно подпортить много чего, забравшись в веб-сервер или БД без должной квалификации и наоборот ("может", а не "обязательно сделает" :о)). Разве нет? У вас в команде почему таких проблем не возникает? И почему они не могут возникать в других командах?
Здравствуйте, Khimik, Вы писали:
K>Пожалуйста не пинайте меня, профессиональные офисные программеры, лучше скажите – где-нибудь ещё может использоваться похожий стиль?
Если вас заинтересовал стиль программирования – первым делом покурите Code Complete (http://www.cc2e.com/, http://www.combook.ru/product/10015183/ — кстати, редкий момент, когда книгу можно преобрести). Вовсе не обязательно перенимать как догму всё что там написано, но эта книга покажет методику, с которой нужно браться за обсуждение стиля кода.
Сравнив используемый вами стиль с предлагаемым автором и ознакомившись с аргументами автора вы сможете составить представление о том, что (и почему) о вашем коде может подумать другой программист в самом худшем случае :о) Потом приходите и можно будет обсудить более предметно.
Здравствуйте, xy012111, Вы писали:
X>В трёхзвенке, дапустим, тот, кто "клепает формочки" может сильно подпортить много чего, забравшись в веб-сервер или БД без должной квалификации и наоборот ("может", а не "обязательно сделает" :о)). Разве нет? У вас в команде почему таких проблем не возникает? И почему они не могут возникать в других командах?
Это болезнь кывт-а по-моему. В процессе обсуждения "в идеале должно быть как-то так" всегда превращается в "собеседник идиот и он считает, что должно быть так и никак иначе". Дисклаймеры не помогают, проверял
ув.Кодта. Он тот же вопрос расписал другими словами, я с его точкой зрения полностью согласен. (Ок, поскольку это рсдн, то примерно тот же вопрос и практически полностью.)
Здравствуйте, Khimik, Вы писали:
K>Я никогда не работал на работодателя, и у меня в ходе написания моей программы сформировался собственный стиль кода. Вот два фрагмента Delphi-кода моей программы:
Извините, а не Вы, случайно, автор вот этой замечательной игры? Там внизу первой страницы примеры кода http://www.gamedev.ru/projects/forum/?id=160897
Уж очень стиль оформления кода похож.
Здравствуйте, Sinix, Вы писали:
X>>В трёхзвенке, дапустим, тот, кто "клепает формочки" может сильно подпортить много чего, забравшись в веб-сервер или БД без должной квалификации и наоборот ("может", а не "обязательно сделает" :о)). Разве нет? У вас в команде почему таких проблем не возникает? И почему они не могут возникать в других командах? S>Это болезнь кывт-а по-моему. В процессе обсуждения "в идеале должно быть как-то так" всегда превращается в "собеседник идиот и он считает, что должно быть так и никак иначе". Дисклаймеры не помогают, проверял
S>Чтобы не флудить попусту: прочитайте вот это сообщение
ув.Кодта. Он тот же вопрос расписал другими словами, я с его точкой зрения полностью согласен. (Ок, поскольку это рсдн, то примерно тот же вопрос и практически полностью.)
Да ладно расстраиваться :о) просто употребляя слова "любой" и тому подобные нужно быть готовым, что их воспримут не так, как бы вам того хотелось бы. Это закономерно и даже ожидаемо должно быть. Тут многие долго и упорно мучили свой мозг различными науками, отсюда и склонность, согласен порою излишняя, к строгости формулировок.
Если в "код правится без обращения к автору кода любым из разработчиков в команде" под "любым" понимается "любой из разработчиков", работающих над этим же кодом плюс-минус, а "комнда" — это некая макрокоманда, что ли в узком смысле этого слова, то полностью с утверждением согласен
Здравствуйте, xy012111, Вы писали:
X>Если в "код правится без обращения к автору кода любым из разработчиков в команде" под "любым" понимается "любой из разработчиков", работающих над этим же кодом плюс-минус, а "комнда" — это некая макрокоманда, что ли в узком смысле этого слова, то полностью с утверждением согласен
А, ну ок тогда
Как-то так сложилось, что везде, где я работал, под командой понималась собственно команда из 5-7 человек (девелоперы,аналитик,qa), которая собственно работала над определённым куском проекта (ну, или над отдельным проектом, если он мелкий). Если хоцца чётких определений, то что-то в стиле хирургической бригады по Бруксу.
Разумеется, разделение на команды не предполагает никакой бюрократии, изоляции или общения только через начальство, речь только о разделении ответственности между командами.
Не, при желании можно собрать коллектив и побольше, но из практики — или всё фейлится, или люди сами собираются в небольшие команды. Других вариантов не встречал, если видели и оно работало на практике — делитесь, как вы так умудрились?
Здравствуйте, Sinix, Вы писали:
S>Как-то так сложилось, что везде, где я работал, под командой понималась собственно команда из 5-7 человек (девелоперы,аналитик,qa), которая собственно работала над определённым куском проекта (ну, или над отдельным проектом, если он мелкий). Если хоцца чётких определений, то что-то в стиле хирургической бригады по Бруксу.
Да, вот как-то и "команда" в широком понимании (например, командs MSVS, Windows или SAP, даже "команда разработчиков Майкрософт") и команда в более узком понимании (команда language services нарпимер) обозначаются одним словом. А законы Мёрфи пока никто отменить не осмелился…
S>Не, при желании можно собрать коллектив и побольше, но из практики — или всё фейлится, или люди сами собираются в небольшие команды. Других вариантов не встречал, если видели и оно работало на практике — делитесь, как вы так умудрились?
Было другое — в проекте несколько ведущих программистов, пишущих раличные слабосвязанные куски (с остальными кусками общаются посредством интерфейсов/протоколов), и между собой регулярных ревью не проводящих, разве что по очень важным поводам. Они не взаимозаменяемы. И, опционально, некоторое количество "студентов", коммиты которых проходят ревью от соответствующего "ментора" и других "студентов". Понятно, что "студенты" получаются заменяемыми другими студентами и ментором. И это отлично работает (дай Бог здоровья ведущим).
Вот про такие небольшие команды, где все равноценно плюс-минус заменяемы — видеть не приходилось.
Здравствуйте, Kudriako, Вы писали:
K>Здравствуйте, Khimik, Вы писали:
K>>Я никогда не работал на работодателя, и у меня в ходе написания моей программы сформировался собственный стиль кода. Вот два фрагмента Delphi-кода моей программы:
K>Извините, а не Вы, случайно, автор вот этой замечательной игры? Там внизу первой страницы примеры кода K>http://www.gamedev.ru/projects/forum/?id=160897 K>Уж очень стиль оформления кода похож.
Нет, у меня программа Chemcraft.
"Ты должен сделать добро из зла, потому что его больше не из чего сделать". АБ Стругацкие.
Здравствуйте, Khimik, Вы писали:
K>Я никогда не работал на работодателя, и у меня в ходе написания моей программы сформировался собственный стиль кода. Вот два фрагмента Delphi-кода моей программы: K>Здесь в браузере обрезаются строки, а так у меня в коде могут быть строки больше 500 символов.
Я не знаю, чем он вам удобен, но если записать с отступами, то сразу виден простор для оптимизации весь ужас этого кода, состоящий в том, что вызовы AddCustomVector производятся по совершенно магическим правилам завязанным на длину curstrings.
'v':
begin//Вектор
et:=vetOneArrow;
if curstrings.Count>7 then
if lowercase(curstrings[7])='n'then
et:=vetNoArrows;
if curstrings.Count>8 then
begin
AddCustomVector(
vector(
strtofloat(curstrings[1]),
strtofloat(curstrings[2]),
strtofloat(curstrings[3])
),
vector(
strtofloat(curstrings[4]),
strtofloat(curstrings[5]),
strtofloat(curstrings[6])
),
false,
et,
strtofloat(curstrings[8]),
strtofloat(curstrings[9]),
floatcolor(
strtofloat(curstrings[10]),
strtofloat(curstrings[11]),
strtofloat(curstrings[12])
),
strtofloat(curstrings[13])
);
end
else
AddCustomVector(
vector(
strtofloat(curstrings[1]),
strtofloat(curstrings[2]),
strtofloat(curstrings[3])
),
vector(
strtofloat(curstrings[4]),
strtofloat(curstrings[5]),
strtofloat(curstrings[6])
),
true,
et,
0,
0,
floatcolor(0,0,0),
0
);
end;//v'p':
begin//Плоскость
pltransp:=true;
if curstrings.Count>13 then
if lowercase(curstrings[13])='n'then
pltransp:=false;
if curstrings.Count>14 then
begin
AddCustomPlane(
vector(
strtofloat(curstrings[1]),
strtofloat(curstrings[2]),
strtofloat(curstrings[3])
),
vector(
strtofloat(curstrings[4]),
strtofloat(curstrings[5]),
strtofloat(curstrings[6])
),
vector(
strtofloat(curstrings[7]),
strtofloat(curstrings[8]),
strtofloat(curstrings[9])
),
vector(
strtofloat(curstrings[10]),
strtofloat(curstrings[11]),
strtofloat(curstrings[12])
),
false,
floatcolor(
strtofloat(curstrings[14]),
strtofloat(curstrings[15]),
strtofloat(curstrings[16])
),
strtofloat(curstrings[17]),
pltransp
);
end
else
AddPlane(
vector(
strtofloat(curstrings[1]),
strtofloat(curstrings[2]),
strtofloat(curstrings[3])
),
vector(
strtofloat(curstrings[4]),
strtofloat(curstrings[5]),
strtofloat(curstrings[6])
),
vector(
strtofloat(curstrings[7]),
strtofloat(curstrings[8]),
strtofloat(curstrings[9])
),
vector(
strtofloat(curstrings[10]),
strtofloat(curstrings[11]),
strtofloat(curstrings[12])
),
0,
false
);
end;//p