Экстремальное программирование и специализация

hov77

Кто-нибудь может объяснить как в XP решается проблема специализации программистов. Т.е. один хороший спец по БД, другой монстрит оптимизированные алгоритмы в ASM, третий пишет нейронные сети, четвертый пишет для Web. Так вот как их в пару посадить чтобы смысл был. Т.к. не спец по сути даже посоветовать ничего не сможет другому, а спецу объяснять почему он так сделал, а не так и что это вообще значит - нет времени. Да и не каждый является искуссным преподом способным объяснить за 10 мин все что изучал 10 лет.
Помоему XP утопия, по крайней мере Pair-программинг точно. Только в небольших проектах реально, где используемые технологии не выходят за рамки одной специализации.

ppplva

Просто нужно иметь по 2 спеца в каждой области

hov77

Да тоже была такая мысль, но там говориться что пары должны меняться, дабы исключить сговор , привыкание и пр, т.е. уже нужно как минимум 4 спеца в одной области. В то же время говорится что XP программинг не стоит делать если программеров больше 10-ти.
получается в эти рамки умещается только 2 специализации. Похоже XP программинг подходит только для написания курсовых в компьютерном классе

sergey_m

В то же время говорится что XP программинг не стоит делать если программеров больше 10-ти.

Где такое говорится?

hov77

В Кент Беке есть глава "Когда не следует использовать XP"
Цитирую ( не полностью копирую, но смысл остался не тронутым ):
Огромное значение имеет масштаб проекта . Скорее всего вам не удасться эффективно использовать xp если над проектом работает сотня программеров. Пятьдесят программеров тоже много, скорее всего и 20 программистов будет много. Десять программистов - определенно подходящее количество.
Это я сегодня прочитал, т.к. книжка появилась. Но про магическое число 10 еще до этого неоднократно натыкался в инете.
Конечно это все условно, может и 11 нормально быть, а 9 - плохо. Все от ситуации зависит.
Сорри 12 - хорошо, а 8 - плохо .

tarajna

надуманная проблема какая-то. вот мы пишем вдесятером проект на джаве. все без исключения временно и вынужденно являются спецами в джаве.

hov77

А что за проект интересно, есть подозрение что не очень сложный, т.к. не требует никаких доп. знаний кроме языка программирования , как я понял.

rfgbnfy

дай ссылку плз на определение XP . именно определение . то что оно в целом представляет - вроде в инете прочёл , но не понял .............
ЗЫ sorry за ламерство .........

hov77

Если бы я знал точное определение
Думаю его и сам автор точно сформулировать не может как следует. Т.к. при чтении возникает довольно часто ощущение отсутствие корреляции методики с практикой, т.е. сначала придумали как хорошо было бы если было бы так, а потом кто-то поверив пробует это .
Но вот на обложке книги , автором которой является Кент Бек написано :
Экстремальное программирование - это упрощенная методика организации производства для небольших и средних команд разработчиков, занимающихся созданием программного продукта в условиях неясных или быстроменяющихся требований.

hov77

Вот кстати правила :
http://www.xprogramming.ru/XPRules/XPRules.html
Не знаю , мне это больше коммунизм напоминает, в том плане , что утопия.

Например в правилах есть такое :
Каждый день начинается с утреннего Собрания стоя. 
Собрание стоя
Каждое утро проводится собрание для обсуждения проблем, их решений и для усиления концентрации команды. Собрание проводится стоя для избежания длительных дискуссий не интересных всем членам команды.
В типичном собрании большинство участников ничего не вносят, просто участвуют чтобы послушать что скажут другие. Большое количество времени людей тратится чтобы получить небольшое количество коммуникации. Поэтому участие всех людей в собраниях уводит ресурсы из проекта и создает хаос в планировании.
Для такого рода коммуникаций и нужно собрание стоя. Намного лучше иметь одно короткое обязательное собрание, чем множество длинных на которых большинство разработчиков должно все равно присутствовать.
Если у вас проводятся ежедневные собрания стоя, то все остальные собрания должны посещать только те люди, которые необходимы и будут что-либо привносить. Более того, имеется возможность даже избежать некоторых собраний. С ограничением участников, большинство собраний может быть проведено спонтанно перед монитором, где обмен идеями намного более интенсивен.
Ежедневное утреннее собрание это не еще одна трата времени. Оно позволит вам избежать многих других собраний и сэкономит больше времени, чем на него затрачено.

rfgbnfy

ну такие "собрания стоя" каждый день раз по 20 проводятся . место проведения - курилка ........

hov77

Ну так курилка это все-таки общение больше для удовольствия чем для дела, или у вас
"Собрание проводится стоя для избежания длительных дискуссий не интересных всем членам команды." ?

rfgbnfy

Но вот на обложке книги , автором которой является Кент Бек написано :
Экстремальное программирование - это упрощенная методика организации производства для небольших и средних команд разработчиков, занимающихся созданием программного продукта в условиях неясных или быстроменяющихся требований.

дык любая группа разработчиков пытается следовать упрощённым методикам . а "в условиях неясных или быстроменяющихся требований" - в вебе это на каждом шагу . а в чём смысл этой методики ?

hov77

Ну единственное что в этой методике принял мой организм - unit testы. Хотя учитывая лень разработчиков, которые даже зачастую и комментарии леняться вставлять, врятли они будут следовать этому правилу. Для того чтобы они не ленились сажают их вместе ( pair-программинг ) или парное программирование. У нас его просто называют - спаривание .
Правило такое что для каждого метода нужно делать тестовую процедуру. И потом все тесты собираются в одном проекте. В результате можно контролировать отъехало что-то или нет в результате изменений.

tarajna

проект достаточно сложный. многопользовательская реалтаймовая среда коллективной разработки и обсуждения всяких чертежей, схем. десяток мегабайт исходников. просто парное программирование это не парное программирование а парное кодирование на самом деле. и, плюс к этому, разный уровень знаний не особо мешает работать в паре.

hov77

Понятно что много чего используется для создания проекта,
Так в чем сам проект заключается ? Какие функции он выполняет ?
Неужели в этом проекте не нужны хорошие знания по оптимизации, БД или другим технологиям ?

rfgbnfy

Ну единственное что в этой методике принял мой организм - unit testы. Хотя учитывая лень разработчиков, которые даже зачастую и комментарии леняться вставлять, врятли они будут следовать этому правилу. Для того чтобы они не ленились сажают их вместе ( pair-программинг ) или парное программирование. У нас его просто называют - спаривание .
Правило такое что для каждого метода нужно делать тестовую процедуру. И потом все тесты собираются в одном проекте. В результате можно контролировать отъехало что-то или нет в результате изменений.

типа а каждый из разработчиков когда заявляет "работает" не должен никак за свои слова отвечать ? типа перед этим оттестить , предоставить результат тестов с описанием тестов ......
ну а потом посмотрев на результаты отчётов не так уж сложно "И потом все тесты собираются в одном проекте" .
а заранее обговаривать условия сотрудничества 2 разработчиков если они сидят в 1 оффисе - смешно . они всегда по нормальному договорится сумеют .а не сумеют - то нах такие нужны , даже если они каждый сам по себе супер разработчик .......

hov77

Ну написал например функцию Add(x, y) использовал ее в своей задаче.
Тут дополнительно к этому необходимо написать следующее
function TestProcedure1001 : boolean
begin
result := true;
if Add(1,2) <> 3 then result := false;
if Add(1,1) <> 2 then result := false;
end;
ну и так далее , в результате имеется большое количество процедур тестов и компилишь за день 100 раз ты не свой проект а тестовый который вызывает все процедуры и выясняет все ли успешно сработали.
Про unit test я ничего против не имею , полезно, просто учитывая практику что многим лень написать
Add(x, y) // складывает два числа x и y
то писать unit test еще ленивей.

rfgbnfy

ну это всё явно не для веб-програмирования ..............
и кто мешает вместо вызыва тестового проекта вызвать сразу исходный . он вроде так же покажет всё ли сработало ?

hov77

Просто все моменты сложно протестить за один заход ( смотришь на то что правил в текущий момент) , а тут все наглядно видно что такая-то процедура отъехала.
Однако все равно обнадеживаться на 100% нельзя. Т.к. в тесте невозможно перебрать всевозможные варианты параметров. Как правило останавливаются на граничных вариантах. Ну и если в дальнейшем в какой-то ситуации метод даст сбой, то эту ситуацию также прописывают в тестовую процедуру.

vijrel7878

Ну абстрактно рассуждать об хр можно очень долго. А вообще, в рамках нашей конторы хр призвано решить всего лишь несколько задач. Перечислю в порядке понижения важности:
1. Обезопасить себя от смерти проекта при уходе программиста, ведущего этот проект.
2. В принципе вытекает из превого. Избежать шантажа по повышению з.п. от ведущих основные проекты программистов, размазав их знания среди некольких человек.
3. Поднять погрязщие в дискуссиях и разнообразных подходах, не дающие однако уже второй год никаких результатов проекты, Specman в частности.
4. Повысить надежность кода написанием тестов, так как тестеры со своими обязанностими в сложных проектах уже давно не справляются.
Все остально детали и маловажно.
з.ы. Для читающих, мы с работаем в одной конторе.

rfgbnfy

ну в вебе - оттестил на сколько можно , выложил . а потом оперативно правишь по результатам жалоб от пользователей (если будут) ........

hov77

2.Избежать шантажа по повышению з.п. от ведущих основные проекты программистов, размазав их знания среди некольких человек.
Только вот ведущие почему-то все это и затеяли , или они чтобы сами себя избавить от соблазна ?

tarajna

ты что-ли не читаешь, на что отвечаешь?
> Так в чем сам проект заключается ? Какие функции он выполняет ?
>> многопользовательская реалтаймовая среда коллективной разработки и обсуждения всяких чертежей, схем. десяток мегабайт исходников.
> Неужели в этом проекте не нужны хорошие знания по оптимизации, БД или другим технологиям ?
>> просто парное программирование это не парное программирование а парное кодирование на самом деле. и, плюс к этому, разный уровень знаний не особо мешает работать в паре.

hov77

многопользовательская реалтаймовая среда коллективной разработки и обсуждения всяких чертежей, схем. десяток мегабайт исходников.
Это чего за беда такая ? . Типа Autocad c чатом + мегабайт исходников ?

Понятно что можно работать в паре, например когда один рулит а другой сидит и "спит" .
Просто в правилах xp описывается что второй следит и подсказывает или дает советы тому кто в данный момент рулит. Что ты будешь советовать челу который например в данный момент углубился в свою специфику от которой ты далек. Нельзя же знать все.
Если ничего, то какой смысл твоего просиживания рядом, вот что вызывает вопросы.

tarajna

>Типа Autocad c чатом + мегабайт исходников
да. + шара десктопа + все действия и движения коллективны + и т.д.
не возникает вообщем такой проблемы. все более менее разбираются во всем, потому что работают над одним и тем же, сильно не расходясь. и к тому же обычно один пишет и думает, а другой лишь следит и обсуждает, мысли со стороны кидает. взаимодействие происходит на уровне кодирования.

hov77

Ну понятно, такое среднее представление у каждого получается. Возможно в некоторых проектах это и допустимо, т.е. где спецификой можно пренебречь, например запихивать данные в базу извлекать можно изучить за час, но вот разобраться со спецификой конкретной БД , уметь затачивать под нее stored procedures , ну и обладать полным представленем возможностей специфичных sql запросов, в рамках XP не получится. А ведь бывают случаи когда это необходимо.
Просто тогда уж сразу вводит XW eXtremeWorking. Т.е. нет ни у кого никакой специализации вообще, т.е. дизайнеры сидят с программерами, также программеры иногда занимаются бухгалтерией совместно с местным бухгалтером.
Зачем высшее образование, когда есть среднее , получается что в xp именно так .

sergey_m


Ну единственное что в этой методике принял мой организм - unit testы. Хотя учитывая лень разработчиков, которые даже зачастую и комментарии леняться вставлять, врятли они будут следовать этому правилу. Для того чтобы они не ленились сажают их вместе ( pair-программинг ) или парное программирование. У нас его просто называют - спаривание .
Правило такое что для каждого метода нужно делать тестовую процедуру. И потом все тесты собираются в одном проекте. В результате можно контролировать отъехало что-то или нет в результате изменений.

Все эти тесты - самообман. Они не доказывают отсутствия глюков. Лучший тест - анализ кода глазами.

6yrop

А ведь бывают случаи когда это необходимо.

Бывает, но редко. имхо: сильно специализироваться, например, в конкретной СУБД сегодня слишком рисковано, поскольку что будет и во что она превратиться завтра не известно.

Marinavo_0507

> Все эти тесты - самообман. Они не доказывают отсутствия глюков. Лучший тест - анализ кода глазами.
Он тоже не доказывает отсутствия глюков.
По каким критериям он тогда лучший?

hov77

Когда глазами - работает AI человека,
а не одна микроизвилина - строчка с тестовыми параметрами.

Marinavo_0507

Я просил критерий.
Правильно ли я понял, что в качестве критерия предлагается сложность инструмента, используемого для тестирования?
А зачем он такой нужен?

sergey_m

Анализ отлавливает неограниченное количество глюков. Количество - вопрос времени. unit test сколько не гоняй - он будет давать все время положительный результат, а глюк будет сидеть рядом.
P.S. Есть кстати не unit testы, а тесты нагружающие систему случайными данными или событиями. Их намного сложнее писать, но толку от них больше.

Marinavo_0507

> Анализ отлавливает неограниченное количество глюков. Количество - вопрос времени.
Выше вроде написали, что XP придумано для ситуаций, когда времени мало.
> unit test сколько не гоняй - он будет давать все время положительный результат, а глюк будет сидеть рядом.
Ну разумное существо едва ли станет утверждать, что эти тесты нужны для поиска всех или почти всех глюков.
Мне представляется, у них другое назначение.
> Есть кстати не unit testы, а тесты нагружающие систему случайными данными или событиями. Их намного сложнее писать, но толку от них больше.
То же ведь, в зависимости от ситуации.
Если некоторая ветка кода получает управление только в вырожденных случаях, она так и останется непроверенной при такой методике.

sergey_m

> unit test сколько не гоняй - он будет давать все время положительный результат, а глюк будет сидеть рядом.
Ну разумное существо едва ли станет утверждать, что эти тесты нужны для поиска всех или почти всех глюков.
Мне представляется, у них другое назначение.
Отмазка перед начальством?
О! Я придумал пездатый аналог unit-test: делается прототип беcпилотного такси. Опытный образец отлично объезжает все препятствия на взлетной полосе со скоростью 200 км/ч и паркуется с точностью до одного сантиметра. Прокатишься ли ты на нём по МКАД?

Marinavo_0507

> Отмазка перед начальством?
1. Доказательство, что код работает хоть иногда.
Нужно, прежде чем передавать его другим людям, чтобы они тратили на него своё время,
показать, что ты и сам хоть немного потестировал.
2. regression testing
> Опытный образец отлично объезжает все препятствия на взлетной полосе со скоростью 200 км/ч и паркуется с точностью до одного сантиметра.
Знание этого существенно повысит заинтересованность тех, то будет проводить дальнейшие испытания.
> Прокатишься ли ты на нём по МКАД?
Сначала это будут делать испытатели, и не сразу на МКАД.
Опять же, выше было сказано, что XP не позиционируется для таких проектов.

sergey_m

У Володи опять спорящее настроение?
Почему разработчики Linux не практикуют XP при написании Linux?

Marinavo_0507

> У Володи опять спорящее настроение?
У Глеба кончились аргументы?
> Почему разработчики Linux не практикуют XP при написании Linux?
Конкретно regression testing некоторые люди/организации проводят.
Находят реальные баги.
Почему не используют другие приёмы XP?
У меня сложилось впечатление, что XP предназначена для относительно небольших проектов,
и небольших команд разработчиков, которые к тому же могут часто собираться вместе.
Может быть, поэтому?
Попробуй прочитать этот тред, здесь ещё много интересного, чего ты, видимо, не заметил.

sergey_m

Конкретно regression testing некоторые люди/организации проводят.
Находят реальные баги.
Это понятие появилось до XP.
Почему не используют другие приёмы XP?
У меня сложилось впечатление, что XP предназначена для относительно небольших проектов,
и небольших команд разработчиков, которые к тому же могут часто собираться вместе.
Может быть, поэтому?
Попробуй прочитать этот тред, здесь ещё много интересного, чего ты, видимо, не заметил.
Какой нибудь драйвер, framework просто кусок кода всегда пишут от 1 до 4 человек. В Linux разве не так? Почему не практикуют XP?

Marinavo_0507

> Почему не практикуют XP?
А вдруг практикуют?
Особенно те драйвера, которые коммерческими конторами пишутся?
А вообще хакеры - обычно ведь индивидуалисты.

freezer

обычно тесты делают не для всей системы, а для ее небольших составных частей...
в твоем примере скорее не всю машину бы мучали, а отдельно подрубали к аккумулятору вольтметр и т.д.

sergey_m

Угу. Причем, аккумулятор + вольтметр показывает не то напряжение, что аккумулятор под нагрузкой + вольтметр.

sergey_m

А вдруг практикуют?
Ты видел когда нибудь продукт написанный в стиле XP?

Marinavo_0507

Не уверен. А это интересно?

sergey_m

Так вот они совсем не похожи по стилю на Linux.

Marinavo_0507

А какой стиль у Linux?
Особенно, у тех драйверов и фреймворков, которые разрабатываются сторонними компаниями,
и не включаются в официальное ядро по причине кривости?

sergey_m

А какой стиль у Linux?
Не такой какой у продуктов XP. Долго объяснять. Поработай месяц там, где практикуют XP и сразу поймешь в чём разница.
Особенно, у тех драйверов и фреймворков, которые разрабатываются сторонними компаниями,
и не включаются в официальное ядро по причине кривости?
Так это уже не Linux, не так ли?

Marinavo_0507

> Поработай месяц там, где практикуют XP и сразу поймешь в чём разница.
Сам там работай, мне и так неплохо
Это невербализуемые ощущения?
> Так это уже не Linux, не так ли?
Хз, мне это крючкотворство не очень интересно.

sergey_m

Сам там работай, мне и так неплохо
Это невербализуемые ощущения?
Вербализуемые, но не в двух словах. Моё отношение излилось в треде по имени "экстремально программирование".

Dasar

Имхо, к системному и прикладному предъявляются разные требования, поэтому XP как раз лучше себя чувствует при разработке прикладного ПО, чем системного.
Отличия следующие:
1. Формализуемость. Системное ПО более формализуемое, чем прикладное. Например, понятие "файл" достаточно точно формализуется, формализовать понятие "товар" - очень тяжело.
2. Кол-во понятий и кол-во отношений между понятиями. В системном ПО довольно малое кол-во отдельных понятий (файл, процесс, ядро, драйвер и т.д. прикладное ПО имеет с очень большим кругом понятий (задача, человек, дом, должность и т.д.)
3. Статичность типов. В системном ПО: тип объектов статичен, файл он в Африке файл, тип объекта меняется только в пределах работает/не работает.
В прикладном ПО тип объекта может сильно меняться от контекста, например, человек - это и агент, и ресурс, и мера измерения вместимости автомобиля, и товар и т.д.
4. Меняемость требований. К системному ПО требования мало меняются, возьмем тот же файл, нам как 30 лет назад достаточно было функций: открыть, закрыть, прочитать, записать, так и сейчас.
В прикладном ПО - требования меняются быстро: расширяется круг задач, который можно переложить на компьютер, расширяются знания о прикладной области, меняются люди, законы, взаимоотношения и т.д.
Вывод:
системное ПО - это статичный по сути код, один раз спроектированный и написанный такой код может не меняться довольно длительное время.
прикладное ПО - это динамичный, постоянно меняющийся код.
Поэтому при разработке системного ПО достаточно (может быть даже удобнее) использовать стандартные методики (сначала много думаем и много проектируем, потом много пишем
при разработке прикладного ПО стандартных методик не хватает, (как можно, например, спроектировать класс Человек, если мы еще точно не знаем, в каком контексте и каким образом мы будем с этим человеком работать).
Поэтому приходиться использовать гибкие (agility) методики (например, XP которые позволяют разрабатывать и поддерживать проект в постоянно меняющихся плохоформализованных условиях.

Marinavo_0507

> Системное ПО более формализуемое, чем прикладное.
Хуйня.
> Например, понятие "файл" достаточно точно формализуется.
И что же такое файл?
> Кол-во понятий и кол-во отношений между понятиями.
Хуйня.
> В системном ПО довольно малое кол-во отдельных понятий
По сравнению со всем объёмом прикладного ПО - может быть,
но по сравнению с любым отдельным проектом - вряд ли.
> Статичность типов.
Тут я просто не понял, о чём ты говоришь.
> К системному ПО требования мало меняются,
Хуйня.
> В прикладном ПО - требования меняются быстро: расширяется круг задач, который можно переложить на компьютер
Точно так же увеличиваются и требования к ОС.

Hastya

> В прикладном ПО - требования меняются быстро: расширяется круг задач, который можно переложить на компьютер
Точно так же увеличиваются и требования к ОС.
Сомнительно как-то. Если бы ядро Линукса меняли с такой скоростью, от него бы рожки да ножки остались.

Marinavo_0507

> Если бы ядро Линукса меняли с такой скоростью,
с какой именно?
> от него бы рожки да ножки остались
много ли в версии 2.6 кода, сохранившегося c версии 1.0?

Hastya

> много ли в версии 2.6 кода, сохранившегося c версии 1.0?
Только не говори мне, что каждые две недели выходит новая версия. 1.0 сколько лет назад было?

Marinavo_0507

> Только не говори мне, что каждые две недели выходит новая версия.
Иногда и чаще
> 1.0 сколько лет назад было?
Хорошо, возьмём 2.0 - я его застал, и пользовал по полной программе.
По современным меркам - игрушка.

Dasar

файл - последовательность байтов/битов.
Далее уже можно говорить доступ к последовательности - последовательный или индексный, если доступ на чтение/запись, теряются данные после чтения/не теряются и т.д.
Но главное мы определили:
Теперь если я вижу "файл", то понимаю что там есть последовательность байт, если вижу последовательность байт - то знаю, что эту последовательность можно представить в виде файла.
Так что такое "товар"?
>> В системном ПО довольно малое кол-во отдельных понятий
> По сравнению со всем объёмом прикладного ПО - может быть,
> но по сравнению с любым отдельным проектом - вряд ли.
Давай в качестве примера, возьмем ядро ОС (можно даже добавить GUI) и документооборот магазина, и посчитаем кол-во понятий (замечу, что документооборот, например, должен знать о таких вроде бы не связанных с магазином понятий, как что такое вес, объем, вместимость помещения, прочность упаковки, температура, климат, праздники, беременность, транспорт, командировка и т.д.)
>> Статичность типов.
> Тут я просто не понял, о чём ты говоришь.
В зависимости от контекста, над объектом (понятием) допустимы разные операции.
Над файлом: будь он на диске, pipe-ом, socket-ом, порт-ом и т.д. операции одиннаковые.
Так какие операции допустимы над человеком? Хотя бы примерно, хотя бы в рамках вышеуказанного документооборота небольшого магазина.
ps
справка: тип объекта - это набор допустимых операций над объектом.
> увеличиваются и требования к ОС.
Пример, плиз. Что сильно нового добавилось за последние 30 лет? из крупного только 3D-GUI появился.
имеются ввиду, конечно требования не вида больше, выше, сильнее, а кардинальные.
Пример: добавление системы прав - это кардинальное изменение, т.к. добавление ортогонально уже к имеющимся, поэтому требуется полный пересмотр всей архитектуры и требуется менять каждый объект.
Добавление, например, usb - это локальное изменение, фактически добавился только новый тип драйвера.

Dasar

> много ли в версии 2.6 кода, сохранившегося c версии 1.0?
Если там осталось так мало кода от ранних версий, то что это SCO так долго трясла своими правами на старые участки кода?

sergey_m

файл - последовательность байтов/битов.
вам в /dev/null

Dasar

> вам в /dev/null
и чем такой файл не подходит под мое определение?
Ps
перед нами частный случай файла: последовательность нулевой длины, доступная на чтение и запись, теряющая данные при записи.

Dasar

> но по сравнению с любым отдельным проектом - вряд ли.
Могу даже так сказать, системное ПО работает с некоей придуманной человеком формальной детерминированной упрощенной абстракцией (компьютер, железки, каналы связи и т.д.).
Прикладное ПО старается работать с реальным миром во всей его полноте.
Поэтому кол-во понятий в прикладном ПО будем всегда больше, чем в системном.

Marinavo_0507

> файл - последовательность байтов/битов
Тогда, файлы - это всё, с чем работают любые программы, и чем сами они являются.
Толку от такой формализации - никакого.
А вот в каждой конкретной ситуации ключевыми будут особые свойства тех файлов, с которыми работают,
а многие другие сущности, хоть и представляются в виде последовательности байтов,
файлом не назовут.
Никакого различия системного и прикладного ПО этот пример не показывает.
> Давай в качестве примера, возьмем ядро ОС (можно даже добавить GUI) и документооборот магазина Б,
> и посчитаем кол-во понятий.
Затрудняюсь это сделать, понятий получится очень много в обоих случаях.
Давай лучше ты без меня этим займёшься.
> документооборот, например, должен знать о таких вроде бы не связанных с магазином понятий, как ...
А о всех ли этих понятиях знает конкретная программная реализация?
> Над файлом: будь он на диске, pipe-ом, socket-ом, порт-ом и т.д. операции одиннаковые.
Говорят, в Plan 9 это так. В распространённых практически используемых ОС - уже нет.
Но ты определил файл так, что любая сущность в любой программе является файлом.
Соответственно, над файлом возможны все операции, которые возможны над любой сущностью
> Что сильно нового добавилось за последние 30 лет?
Из интересных мне областей.
В области информационной безопасности - непонятно даже как грамотно поставить задачу,
чтобы она имела какое-то практическое значение. Соответственно, есть много разных новых подходов.
30 лет назад это было интересно только военным, которые пытались переносить подходы,
принятые для бумажного документооборота, которые сколь-нибудь применимы только для военных.
В области сетевых технологий - хитрые файрволы: тут идея в том, что на промежуточных узлах можно делать то,
что придумано для оконечных узлов. Различные подходы к обеспечению качества обслуживания - опять же,
только для того чтобы грамотно поставить практически важную задачу, нужны познания из прикладных областей.

Marinavo_0507

> Прикладное ПО старается работать с реальным миром во всей его полноте.
Каждый отдельный прикладной проект - нет.
А вот ОС работает с любым прикладным проектом, и понятия оттуда перетекают,
получается, что универсальная ОС действительно должна работать с реальным миром во всей его полноте.

sergey_m

и чем такой файл не подходит под мое определение?
Ps
перед нами частный случай файла: последовательность нулевой длины, доступная на чтение и запись, теряющая данные при записи.
null плохой пример. Возьми другой девайс. Он никак не последовательность байт. Ты не можешь сделать на нём lseek назад.

Marinavo_0507

> то это SCO так долго трясла своими правами на старые участки кода?
Хинт: пресс-релизы и "требования" SCO - плохой источник знаний о положении дел с разработкой Linux.

Dasar

> Он никак не последовательность байт. Ты не можешь сделать на нём lseek назад.
Возвражение не понял.
Последовательность - это множество, с введенной операции упорядоченности отдельных элементов в этом множестве.
Какое отношение lseek имеет к последовательности?
Возьмем socket: множество байт есть? - есть, операция упорядоченности есть? есть, это время "прихода" байта в socket.
Так почему это не последовательность?

Marinavo_0507

Сетевой пакет - это натурально последовательность байт. Беспесды.
Будем считать его файлом, согласно твоему определению?
Тогда почему выходит так, что операции с ним совсем другие, чем например, с дисковыми файлами?

sergey_m

Возьмем socket: множество байт есть? - есть, операция упорядоченности есть? есть, это время "прихода" байта в socket.
Так почему это не последовательность?
Это не последовательность, это поток.

Dasar

> Тогда, файлы - это всё, с чем работают любые программы, и чем сами они являются.
> Толку от такой формализации - никакого.
Почему никакого?
Мы полностью формализовали понятие, можно даже доформализовать это понятие до уровня математики, т.е. при написании функций работы с файлом можно будет подключать мощный аппарат математики (доказательство правильности кода, делать оптимизации и т.д.)
При чем формализовать получилось большую часть вызовов для работы с файлами (т.к. read/write основные операции за рамками осталось только открытие файла и настройка файла.
> Но ты определил файл так, что любая сущность в любой программе является файлом.
> Соответственно, над файлом возможны все операции, которые возможны над любой сущностью
Вывод неверных.
Если A, является Б, то это не означает, что над Б возможны те же операции, что и над A.
Человек является физич. телом, и это не означает, что физическое тело, например, умеет мыслить.
> А о всех ли этих понятиях знает конкретная программная реализация?
Переформулирую утверждение:
за единицу времени разработки прикладного ПО, в программу необходимо закладывать больше ортогональных понятий, чем за единицу времени разработки системного ПО.
ps
Важное уточнение: в первую очередь считать, конечно, стоит ортогональные к друг другу понятия, потому что именно они в первую очередь сказываются на кол-ве типов, на кол-ве связей.
> информационной безопасности
имхо, это уже ближе к прикладной области, чем к системной.
ps хотя здесь надо уточнить, что мы понимаем под системным ПО, а что под прикладным....

Dasar

> Это не последовательность, это поток.
Со второй частью соглашусь, с первой частью утверждения (это не последовательность) ты меня пока не убедил.
т.е.
Пока система утверждений выглядит так:
Файл - это последовательность байтов.
Некоторые файлы также являются потоками.

Dasar

> Будем считать его файлом, согласно твоему определению?
Да, будем.
> Тогда почему выходит так, что операции с ним совсем другие, чем например, с дисковыми файлами?
Уточнение, они не другие, они дополнительные.
с пакетом, я могу работать и как с файлом:


byte [] packet = GetPacket;
using (Stream stream = new MemoryStream(packet
{
Header header = ReadHeader(stream);
byte[] data = stream.ReadBytes(header.DataLength);
int crc = stream.ReadInt;
ckCrc(data, crc);
}

Marinavo_0507

> с пакетом, я могу работать и как с файлом
можешь
только если посмотришь на TCP/IP стек в любой распространённой ОС,
то увидишь, что там с пакетами работают совсем по-другому
потому что, никакого смысла считать пакет файлом нет для этих задач
всё как ты и говорил, в различных ситуациях - различные операции используются
как же проявляются отличия системного ПО от прикладного?

Dasar

> как же проявляются отличия системного ПО от прикладного?
Переход количества в качество.
ps
В данном случае с пакетом: мы имеем еще одно ортогональное понятие - "документ".
Сетевый пакет - это частный случай документа запакованного в файл.
На стыке "документ <-> файл" у нас появляются такие понятия, как Reader/Writer, Parser/Generator, Packer/Unpacker и т.д.

Marinavo_0507

> Переход количества в качество.
Вот только доводов у тебя нет.
Ты считаешь, что это количество определяется тем, прикладной проект или системный (знания о последних у тебя,
видимо, из пресс-релизов SCO почёрпнуто ). Я думаю, что лучше поискать другие факторы.

Dasar

> Тогда, файлы - это всё, с чем работают любые программы, и чем сами они являются.
> Толку от такой формализации - никакого.
Пример полезного использования.
т. к. любая сущность является файлом, а файлы я, например, умею на лету шифровать или сжимать, значит я умею и шифровать, и сжимать любую сущность.
т.е. фактически мы ввели следующие утверждения:
всё, с чем работают любые программы, представимо в виде файлов
файлы можно шифровать и сжимать на лету
далее используя простейший аппарат мат. логики, приходим к выводу:
все, с чем работают любые программы, можно шифровать и сжимать на лету
ps
в очень прикладной области, даже такие простые формализации очень тяжело делаются, т.к. приходится оперировать плохо формализиуемыми понятиями.

Marinavo_0507

> далее используя простейший аппарат мат. логики, приходим к выводу:
> все, с чем работают любые программы, можно шифровать и сжимать на лету
ну допустим
а вот будет ли это практически применимо?
для ответа на этот вопрос придётся забить на высокоуровневые абстракции и рассмотреть,
что на самом деле происходит в конкретной программе

Dasar

Стоп.
Разговор начинался с кода Linux-а и как с кодом Linux-а соотносится XP.
Код Linux-а это в первую очередь код ядра ОС + вспомогательные утилиты, именно в этом контексте я употреблял термин системное ПО.
т.е. когда я говорил, системное ПО - я имел ввиду, разработка ядра ОС.
Ps
Понятно, что термин "системное ПО" можно применить для любого движка, как для СУБД, так и для игрового движка, так 1С - это тоже системное ПО, потому что это все системы для упрощения реализации прикладных задач.
Но еще раз повторяю, в рамках данного треда под системным ПО понималось четко очерченный круг ПО.

Marinavo_0507

> Разговор начинался с кода Linux-а и как с кодом Linux-а соотносится XP.
А в результате ты стал сравнивать прикладное ПО и системное.
Если мы назовём системным ПО ядро ОС и вспомогательные утилиты,
а прикладным ПО - то, к чему хорошо применимо XP, то
1) кучу программ упустим
2) будет немало пересечений: тот же usb-стек и драйвера usb-устройств вполне,
по моему представлению, можно разработать методами XP, и я вполне допускаю,
что какие-то конторы поступают подобным образом
Таким образом, применимость XP не имеет прямого отношения к тому, системное ПО или прикладное.

Dasar

есть деление всего ПО на прикладное и системное, я согласен с тем, что такое деление нечетко, грубо, противоречиво и т.д.
но для основной массы ПО такое деление имеет право на жизнь.
далее я взял крайние точки: в качестве примера системного ПО я взял ядро ОС, а в качестве примера прикладного ПО - всеми так любимую бухгалтерию (документооборот).
И далее постарался проанализировать почему в одном случае, мы имеем одни методы разработки, а в другом - другие.
т.е. я только говорю, что для одного вида ПО есть одна тенденция, а другого вида ПО - есть другая тенденция, и я не в коем случае не говорю, что у одних только одно, у других только другое.
Опять же небольшая аналогия:
чернобелый спектр тоже можно поделить на черный и белый, это деление будет тоже очень условно, грубо и противоречиво.
Но в то же время, можно также выделить некоторые тенденции:
черное нагревается на солнце, белое отражает свет, белое быстро пачкается, белое лучше заметно и т.д.
И в данном случае, также за скобками оставляется такие вопросы, как "а серое - больше нагревается, или больше отражает свет; черное заметно или незаметно и т.д."

Marinavo_0507

> далее я взял крайние точки: в качестве примера системного ПО я взял ядро ОС, а в качестве примера прикладного ПО - всеми так любимую бухгалтерию (документооборот).
> И далее постарался проанализировать почему в одном случае, мы имеем одни методы разработки, а в другом - другие.
> т.е. я только говорю, что для одного вида ПО есть одна тенденция, а другого вида ПО - есть другая тенденция
может и есть тенденция, но причины ты приводишь неубедительные
мне кажется, тут важнее требования:
если нужно небольшой проект сдать в срок, и похуй на всё- то тут, как я понял, XP рулит
а если нужно, чтоб работало (например, нужна формальная верификация, или просто, как в случае линукса,
самому потом этим пользоваться и развивать) - другие методы

Dasar

> если нужно небольшой проект сдать в срок, и похуй на всё- то тут, как я понял, XP рулит
> а если нужно, чтоб работало (например, нужна формальная верификация, или просто, как в случае линукса,
> самому потом этим пользоваться и развивать) - другие методы
AFAIK, основные среды разработки для Java и Smalltalk делались как раз с использованием XP-методик.
Т.е. вроде и проект немаленький, и для себя делали....

Marinavo_0507

> Т.е. вроде и проект немаленький
Т.е. наврали в этом треде про неприменимость XP для таких случаев?

Dasar

Если высказывание было в форме "XP (agility-методики) не подходят для разработки больших проектов", то да - наврали
Правильнее высказывание звучит так: на больших проектах agility-методики (XP) надо совмещать с такими методиками, как RUP и MSF, т.е. Xp - в первую очередь, работает на уровне одной команды, а RUP(MSF) связывает эти команды вместе, и задает генеральный курс.
Замечу, что между RUP(MSF) и XP - много общего, это та же спиральная модель, те же этапы, то же тестирование, та же работа, напрямую с пользователями и т.д.
ps
я бы даже сказал, но это совсем уже ИМХО, что в некоторой степени XP - ориентировано на хороших разработчиков, а стандартные методики (особенно сертификация по ISO) - на средних, т.е. XP старается раскрыть потенциал отдельных хороших разработчиков/программистов, а стандартные стараются не допустить раскрытия "потенциала" плохих программистов/разработчиков.
Т.е. agility-методики стараются сделать хорошо, а стандартные методики стараются сделать неплохо.
Оставить комментарий
Имя или ник:
Комментарий: