Экстремальное программирование и специализация
Просто нужно иметь по 2 спеца в каждой области
получается в эти рамки умещается только 2 специализации. Похоже XP программинг подходит только для написания курсовых в компьютерном классе
В то же время говорится что XP программинг не стоит делать если программеров больше 10-ти.
Где такое говорится?
Цитирую ( не полностью копирую, но смысл остался не тронутым ):
Огромное значение имеет масштаб проекта . Скорее всего вам не удасться эффективно использовать xp если над проектом работает сотня программеров. Пятьдесят программеров тоже много, скорее всего и 20 программистов будет много. Десять программистов - определенно подходящее количество.Это я сегодня прочитал, т.к. книжка появилась. Но про магическое число 10 еще до этого неоднократно натыкался в инете.
Конечно это все условно, может и 11 нормально быть, а 9 - плохо. Все от ситуации зависит.
Сорри 12 - хорошо, а 8 - плохо .
надуманная проблема какая-то. вот мы пишем вдесятером проект на джаве. все без исключения временно и вынужденно являются спецами в джаве.
А что за проект интересно, есть подозрение что не очень сложный, т.к. не требует никаких доп. знаний кроме языка программирования , как я понял.
ЗЫ sorry за ламерство .........
Думаю его и сам автор точно сформулировать не может как следует. Т.к. при чтении возникает довольно часто ощущение отсутствие корреляции методики с практикой, т.е. сначала придумали как хорошо было бы если было бы так, а потом кто-то поверив пробует это .
Но вот на обложке книги , автором которой является Кент Бек написано :
Экстремальное программирование - это упрощенная методика организации производства для небольших и средних команд разработчиков, занимающихся созданием программного продукта в условиях неясных или быстроменяющихся требований.
http://www.xprogramming.ru/XPRules/XPRules.html
Не знаю , мне это больше коммунизм напоминает, в том плане , что утопия.
Например в правилах есть такое :
Каждый день начинается с утреннего Собрания стоя.
Собрание стоя
Каждое утро проводится собрание для обсуждения проблем, их решений и для усиления концентрации команды. Собрание проводится стоя для избежания длительных дискуссий не интересных всем членам команды.
В типичном собрании большинство участников ничего не вносят, просто участвуют чтобы послушать что скажут другие. Большое количество времени людей тратится чтобы получить небольшое количество коммуникации. Поэтому участие всех людей в собраниях уводит ресурсы из проекта и создает хаос в планировании.
Для такого рода коммуникаций и нужно собрание стоя. Намного лучше иметь одно короткое обязательное собрание, чем множество длинных на которых большинство разработчиков должно все равно присутствовать.
Если у вас проводятся ежедневные собрания стоя, то все остальные собрания должны посещать только те люди, которые необходимы и будут что-либо привносить. Более того, имеется возможность даже избежать некоторых собраний. С ограничением участников, большинство собраний может быть проведено спонтанно перед монитором, где обмен идеями намного более интенсивен.
Ежедневное утреннее собрание это не еще одна трата времени. Оно позволит вам избежать многих других собраний и сэкономит больше времени, чем на него затрачено.
ну такие "собрания стоя" каждый день раз по 20 проводятся . место проведения - курилка ........
"Собрание проводится стоя для избежания длительных дискуссий не интересных всем членам команды." ?
Но вот на обложке книги , автором которой является Кент Бек написано :
Экстремальное программирование - это упрощенная методика организации производства для небольших и средних команд разработчиков, занимающихся созданием программного продукта в условиях неясных или быстроменяющихся требований.
дык любая группа разработчиков пытается следовать упрощённым методикам . а "в условиях неясных или быстроменяющихся требований" - в вебе это на каждом шагу . а в чём смысл этой методики ?
Правило такое что для каждого метода нужно делать тестовую процедуру. И потом все тесты собираются в одном проекте. В результате можно контролировать отъехало что-то или нет в результате изменений.
проект достаточно сложный. многопользовательская реалтаймовая среда коллективной разработки и обсуждения всяких чертежей, схем. десяток мегабайт исходников. просто парное программирование это не парное программирование а парное кодирование на самом деле. и, плюс к этому, разный уровень знаний не особо мешает работать в паре.
Так в чем сам проект заключается ? Какие функции он выполняет ?
Неужели в этом проекте не нужны хорошие знания по оптимизации, БД или другим технологиям ?
Ну единственное что в этой методике принял мой организм - unit testы. Хотя учитывая лень разработчиков, которые даже зачастую и комментарии леняться вставлять, врятли они будут следовать этому правилу. Для того чтобы они не ленились сажают их вместе ( pair-программинг ) или парное программирование. У нас его просто называют - спаривание .
Правило такое что для каждого метода нужно делать тестовую процедуру. И потом все тесты собираются в одном проекте. В результате можно контролировать отъехало что-то или нет в результате изменений.
типа а каждый из разработчиков когда заявляет "работает" не должен никак за свои слова отвечать ? типа перед этим оттестить , предоставить результат тестов с описанием тестов ......
ну а потом посмотрев на результаты отчётов не так уж сложно "И потом все тесты собираются в одном проекте" .
а заранее обговаривать условия сотрудничества 2 разработчиков если они сидят в 1 оффисе - смешно . они всегда по нормальному договорится сумеют .а не сумеют - то нах такие нужны , даже если они каждый сам по себе супер разработчик .......
Тут дополнительно к этому необходимо написать следующее
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 еще ленивей.
и кто мешает вместо вызыва тестового проекта вызвать сразу исходный . он вроде так же покажет всё ли сработало ?
Однако все равно обнадеживаться на 100% нельзя. Т.к. в тесте невозможно перебрать всевозможные варианты параметров. Как правило останавливаются на граничных вариантах. Ну и если в дальнейшем в какой-то ситуации метод даст сбой, то эту ситуацию также прописывают в тестовую процедуру.
1. Обезопасить себя от смерти проекта при уходе программиста, ведущего этот проект.
2. В принципе вытекает из превого. Избежать шантажа по повышению з.п. от ведущих основные проекты программистов, размазав их знания среди некольких человек.
3. Поднять погрязщие в дискуссиях и разнообразных подходах, не дающие однако уже второй год никаких результатов проекты, Specman в частности.
4. Повысить надежность кода написанием тестов, так как тестеры со своими обязанностими в сложных проектах уже давно не справляются.
Все остально детали и маловажно.
з.ы. Для читающих, мы с работаем в одной конторе.
ну в вебе - оттестил на сколько можно , выложил . а потом оперативно правишь по результатам жалоб от пользователей (если будут) ........
2.Избежать шантажа по повышению з.п. от ведущих основные проекты программистов, размазав их знания среди некольких человек.Только вот ведущие почему-то все это и затеяли , или они чтобы сами себя избавить от соблазна ?
> Так в чем сам проект заключается ? Какие функции он выполняет ?
>> многопользовательская реалтаймовая среда коллективной разработки и обсуждения всяких чертежей, схем. десяток мегабайт исходников.
> Неужели в этом проекте не нужны хорошие знания по оптимизации, БД или другим технологиям ?
>> просто парное программирование это не парное программирование а парное кодирование на самом деле. и, плюс к этому, разный уровень знаний не особо мешает работать в паре.
Это чего за беда такая ? . Типа Autocad c чатом + мегабайт исходников ?
Понятно что можно работать в паре, например когда один рулит а другой сидит и "спит" .
Просто в правилах xp описывается что второй следит и подсказывает или дает советы тому кто в данный момент рулит. Что ты будешь советовать челу который например в данный момент углубился в свою специфику от которой ты далек. Нельзя же знать все.
Если ничего, то какой смысл твоего просиживания рядом, вот что вызывает вопросы.
да. + шара десктопа + все действия и движения коллективны + и т.д.
не возникает вообщем такой проблемы. все более менее разбираются во всем, потому что работают над одним и тем же, сильно не расходясь. и к тому же обычно один пишет и думает, а другой лишь следит и обсуждает, мысли со стороны кидает. взаимодействие происходит на уровне кодирования.
Просто тогда уж сразу вводит XW eXtremeWorking. Т.е. нет ни у кого никакой специализации вообще, т.е. дизайнеры сидят с программерами, также программеры иногда занимаются бухгалтерией совместно с местным бухгалтером.
Зачем высшее образование, когда есть среднее , получается что в xp именно так .
Ну единственное что в этой методике принял мой организм - unit testы. Хотя учитывая лень разработчиков, которые даже зачастую и комментарии леняться вставлять, врятли они будут следовать этому правилу. Для того чтобы они не ленились сажают их вместе ( pair-программинг ) или парное программирование. У нас его просто называют - спаривание .
Правило такое что для каждого метода нужно делать тестовую процедуру. И потом все тесты собираются в одном проекте. В результате можно контролировать отъехало что-то или нет в результате изменений.
Все эти тесты - самообман. Они не доказывают отсутствия глюков. Лучший тест - анализ кода глазами.
А ведь бывают случаи когда это необходимо.
Бывает, но редко. имхо: сильно специализироваться, например, в конкретной СУБД сегодня слишком рисковано, поскольку что будет и во что она превратиться завтра не известно.
Он тоже не доказывает отсутствия глюков.
По каким критериям он тогда лучший?
а не одна микроизвилина - строчка с тестовыми параметрами.
Правильно ли я понял, что в качестве критерия предлагается сложность инструмента, используемого для тестирования?
А зачем он такой нужен?
P.S. Есть кстати не unit testы, а тесты нагружающие систему случайными данными или событиями. Их намного сложнее писать, но толку от них больше.
Выше вроде написали, что XP придумано для ситуаций, когда времени мало.
> unit test сколько не гоняй - он будет давать все время положительный результат, а глюк будет сидеть рядом.
Ну разумное существо едва ли станет утверждать, что эти тесты нужны для поиска всех или почти всех глюков.
Мне представляется, у них другое назначение.
> Есть кстати не unit testы, а тесты нагружающие систему случайными данными или событиями. Их намного сложнее писать, но толку от них больше.
То же ведь, в зависимости от ситуации.
Если некоторая ветка кода получает управление только в вырожденных случаях, она так и останется непроверенной при такой методике.
> unit test сколько не гоняй - он будет давать все время положительный результат, а глюк будет сидеть рядом.Отмазка перед начальством?
Ну разумное существо едва ли станет утверждать, что эти тесты нужны для поиска всех или почти всех глюков.
Мне представляется, у них другое назначение.
О! Я придумал пездатый аналог unit-test: делается прототип беcпилотного такси. Опытный образец отлично объезжает все препятствия на взлетной полосе со скоростью 200 км/ч и паркуется с точностью до одного сантиметра. Прокатишься ли ты на нём по МКАД?
1. Доказательство, что код работает хоть иногда.
Нужно, прежде чем передавать его другим людям, чтобы они тратили на него своё время,
показать, что ты и сам хоть немного потестировал.
2. regression testing
> Опытный образец отлично объезжает все препятствия на взлетной полосе со скоростью 200 км/ч и паркуется с точностью до одного сантиметра.
Знание этого существенно повысит заинтересованность тех, то будет проводить дальнейшие испытания.
> Прокатишься ли ты на нём по МКАД?
Сначала это будут делать испытатели, и не сразу на МКАД.
Опять же, выше было сказано, что XP не позиционируется для таких проектов.
Почему разработчики Linux не практикуют XP при написании Linux?
У Глеба кончились аргументы?
> Почему разработчики Linux не практикуют XP при написании Linux?
Конкретно regression testing некоторые люди/организации проводят.
Находят реальные баги.
Почему не используют другие приёмы XP?
У меня сложилось впечатление, что XP предназначена для относительно небольших проектов,
и небольших команд разработчиков, которые к тому же могут часто собираться вместе.
Может быть, поэтому?
Попробуй прочитать этот тред, здесь ещё много интересного, чего ты, видимо, не заметил.
Конкретно regression testing некоторые люди/организации проводят.Это понятие появилось до XP.
Находят реальные баги.
Почему не используют другие приёмы XP?Какой нибудь драйвер, framework просто кусок кода всегда пишут от 1 до 4 человек. В Linux разве не так? Почему не практикуют XP?
У меня сложилось впечатление, что XP предназначена для относительно небольших проектов,
и небольших команд разработчиков, которые к тому же могут часто собираться вместе.
Может быть, поэтому?
Попробуй прочитать этот тред, здесь ещё много интересного, чего ты, видимо, не заметил.
А вдруг практикуют?
Особенно те драйвера, которые коммерческими конторами пишутся?
А вообще хакеры - обычно ведь индивидуалисты.
в твоем примере скорее не всю машину бы мучали, а отдельно подрубали к аккумулятору вольтметр и т.д.
Угу. Причем, аккумулятор + вольтметр показывает не то напряжение, что аккумулятор под нагрузкой + вольтметр.
А вдруг практикуют?Ты видел когда нибудь продукт написанный в стиле XP?
Не уверен. А это интересно?
Так вот они совсем не похожи по стилю на Linux.
Особенно, у тех драйверов и фреймворков, которые разрабатываются сторонними компаниями,
и не включаются в официальное ядро по причине кривости?
А какой стиль у Linux?Не такой какой у продуктов XP. Долго объяснять. Поработай месяц там, где практикуют XP и сразу поймешь в чём разница.
Особенно, у тех драйверов и фреймворков, которые разрабатываются сторонними компаниями,Так это уже не Linux, не так ли?
и не включаются в официальное ядро по причине кривости?
Сам там работай, мне и так неплохо
Это невербализуемые ощущения?
> Так это уже не Linux, не так ли?
Хз, мне это крючкотворство не очень интересно.
Сам там работай, мне и так неплохоВербализуемые, но не в двух словах. Моё отношение излилось в треде по имени "экстремально программирование".
Это невербализуемые ощущения?
Отличия следующие:
1. Формализуемость. Системное ПО более формализуемое, чем прикладное. Например, понятие "файл" достаточно точно формализуется, формализовать понятие "товар" - очень тяжело.
2. Кол-во понятий и кол-во отношений между понятиями. В системном ПО довольно малое кол-во отдельных понятий (файл, процесс, ядро, драйвер и т.д. прикладное ПО имеет с очень большим кругом понятий (задача, человек, дом, должность и т.д.)
3. Статичность типов. В системном ПО: тип объектов статичен, файл он в Африке файл, тип объекта меняется только в пределах работает/не работает.
В прикладном ПО тип объекта может сильно меняться от контекста, например, человек - это и агент, и ресурс, и мера измерения вместимости автомобиля, и товар и т.д.
4. Меняемость требований. К системному ПО требования мало меняются, возьмем тот же файл, нам как 30 лет назад достаточно было функций: открыть, закрыть, прочитать, записать, так и сейчас.
В прикладном ПО - требования меняются быстро: расширяется круг задач, который можно переложить на компьютер, расширяются знания о прикладной области, меняются люди, законы, взаимоотношения и т.д.
Вывод:
системное ПО - это статичный по сути код, один раз спроектированный и написанный такой код может не меняться довольно длительное время.
прикладное ПО - это динамичный, постоянно меняющийся код.
Поэтому при разработке системного ПО достаточно (может быть даже удобнее) использовать стандартные методики (сначала много думаем и много проектируем, потом много пишем
при разработке прикладного ПО стандартных методик не хватает, (как можно, например, спроектировать класс Человек, если мы еще точно не знаем, в каком контексте и каким образом мы будем с этим человеком работать).
Поэтому приходиться использовать гибкие (agility) методики (например, XP которые позволяют разрабатывать и поддерживать проект в постоянно меняющихся плохоформализованных условиях.
Хуйня.
> Например, понятие "файл" достаточно точно формализуется.
И что же такое файл?
> Кол-во понятий и кол-во отношений между понятиями.
Хуйня.
> В системном ПО довольно малое кол-во отдельных понятий
По сравнению со всем объёмом прикладного ПО - может быть,
но по сравнению с любым отдельным проектом - вряд ли.
> Статичность типов.
Тут я просто не понял, о чём ты говоришь.
> К системному ПО требования мало меняются,
Хуйня.
> В прикладном ПО - требования меняются быстро: расширяется круг задач, который можно переложить на компьютер
Точно так же увеличиваются и требования к ОС.
> В прикладном ПО - требования меняются быстро: расширяется круг задач, который можно переложить на компьютерСомнительно как-то. Если бы ядро Линукса меняли с такой скоростью, от него бы рожки да ножки остались.
Точно так же увеличиваются и требования к ОС.
с какой именно?
> от него бы рожки да ножки остались
много ли в версии 2.6 кода, сохранившегося c версии 1.0?
Только не говори мне, что каждые две недели выходит новая версия. 1.0 сколько лет назад было?
Иногда и чаще
> 1.0 сколько лет назад было?
Хорошо, возьмём 2.0 - я его застал, и пользовал по полной программе.
По современным меркам - игрушка.
Далее уже можно говорить доступ к последовательности - последовательный или индексный, если доступ на чтение/запись, теряются данные после чтения/не теряются и т.д.
Но главное мы определили:
Теперь если я вижу "файл", то понимаю что там есть последовательность байт, если вижу последовательность байт - то знаю, что эту последовательность можно представить в виде файла.
Так что такое "товар"?
>> В системном ПО довольно малое кол-во отдельных понятий
> По сравнению со всем объёмом прикладного ПО - может быть,
> но по сравнению с любым отдельным проектом - вряд ли.
Давай в качестве примера, возьмем ядро ОС (можно даже добавить GUI) и документооборот магазина, и посчитаем кол-во понятий (замечу, что документооборот, например, должен знать о таких вроде бы не связанных с магазином понятий, как что такое вес, объем, вместимость помещения, прочность упаковки, температура, климат, праздники, беременность, транспорт, командировка и т.д.)
>> Статичность типов.
> Тут я просто не понял, о чём ты говоришь.
В зависимости от контекста, над объектом (понятием) допустимы разные операции.
Над файлом: будь он на диске, pipe-ом, socket-ом, порт-ом и т.д. операции одиннаковые.
Так какие операции допустимы над человеком? Хотя бы примерно, хотя бы в рамках вышеуказанного документооборота небольшого магазина.
ps
справка: тип объекта - это набор допустимых операций над объектом.
> увеличиваются и требования к ОС.
Пример, плиз. Что сильно нового добавилось за последние 30 лет? из крупного только 3D-GUI появился.
имеются ввиду, конечно требования не вида больше, выше, сильнее, а кардинальные.
Пример: добавление системы прав - это кардинальное изменение, т.к. добавление ортогонально уже к имеющимся, поэтому требуется полный пересмотр всей архитектуры и требуется менять каждый объект.
Добавление, например, usb - это локальное изменение, фактически добавился только новый тип драйвера.
Если там осталось так мало кода от ранних версий, то что это SCO так долго трясла своими правами на старые участки кода?
файл - последовательность байтов/битов.вам в /dev/null
и чем такой файл не подходит под мое определение?
Ps
перед нами частный случай файла: последовательность нулевой длины, доступная на чтение и запись, теряющая данные при записи.
Могу даже так сказать, системное ПО работает с некоей придуманной человеком формальной детерминированной упрощенной абстракцией (компьютер, железки, каналы связи и т.д.).
Прикладное ПО старается работать с реальным миром во всей его полноте.
Поэтому кол-во понятий в прикладном ПО будем всегда больше, чем в системном.
Тогда, файлы - это всё, с чем работают любые программы, и чем сами они являются.
Толку от такой формализации - никакого.
А вот в каждой конкретной ситуации ключевыми будут особые свойства тех файлов, с которыми работают,
а многие другие сущности, хоть и представляются в виде последовательности байтов,
файлом не назовут.
Никакого различия системного и прикладного ПО этот пример не показывает.
> Давай в качестве примера, возьмем ядро ОС (можно даже добавить GUI) и документооборот магазина Б,
> и посчитаем кол-во понятий.
Затрудняюсь это сделать, понятий получится очень много в обоих случаях.
Давай лучше ты без меня этим займёшься.
> документооборот, например, должен знать о таких вроде бы не связанных с магазином понятий, как ...
А о всех ли этих понятиях знает конкретная программная реализация?
> Над файлом: будь он на диске, pipe-ом, socket-ом, порт-ом и т.д. операции одиннаковые.
Говорят, в Plan 9 это так. В распространённых практически используемых ОС - уже нет.
Но ты определил файл так, что любая сущность в любой программе является файлом.
Соответственно, над файлом возможны все операции, которые возможны над любой сущностью
> Что сильно нового добавилось за последние 30 лет?
Из интересных мне областей.
В области информационной безопасности - непонятно даже как грамотно поставить задачу,
чтобы она имела какое-то практическое значение. Соответственно, есть много разных новых подходов.
30 лет назад это было интересно только военным, которые пытались переносить подходы,
принятые для бумажного документооборота, которые сколь-нибудь применимы только для военных.
В области сетевых технологий - хитрые файрволы: тут идея в том, что на промежуточных узлах можно делать то,
что придумано для оконечных узлов. Различные подходы к обеспечению качества обслуживания - опять же,
только для того чтобы грамотно поставить практически важную задачу, нужны познания из прикладных областей.
Каждый отдельный прикладной проект - нет.
А вот ОС работает с любым прикладным проектом, и понятия оттуда перетекают,
получается, что универсальная ОС действительно должна работать с реальным миром во всей его полноте.
и чем такой файл не подходит под мое определение?null плохой пример. Возьми другой девайс. Он никак не последовательность байт. Ты не можешь сделать на нём lseek назад.
Ps
перед нами частный случай файла: последовательность нулевой длины, доступная на чтение и запись, теряющая данные при записи.
Хинт: пресс-релизы и "требования" SCO - плохой источник знаний о положении дел с разработкой Linux.
Возвражение не понял.
Последовательность - это множество, с введенной операции упорядоченности отдельных элементов в этом множестве.
Какое отношение lseek имеет к последовательности?
Возьмем socket: множество байт есть? - есть, операция упорядоченности есть? есть, это время "прихода" байта в socket.
Так почему это не последовательность?
Будем считать его файлом, согласно твоему определению?
Тогда почему выходит так, что операции с ним совсем другие, чем например, с дисковыми файлами?
Возьмем socket: множество байт есть? - есть, операция упорядоченности есть? есть, это время "прихода" байта в socket.Это не последовательность, это поток.
Так почему это не последовательность?
> Толку от такой формализации - никакого.
Почему никакого?
Мы полностью формализовали понятие, можно даже доформализовать это понятие до уровня математики, т.е. при написании функций работы с файлом можно будет подключать мощный аппарат математики (доказательство правильности кода, делать оптимизации и т.д.)
При чем формализовать получилось большую часть вызовов для работы с файлами (т.к. read/write основные операции за рамками осталось только открытие файла и настройка файла.
> Но ты определил файл так, что любая сущность в любой программе является файлом.
> Соответственно, над файлом возможны все операции, которые возможны над любой сущностью
Вывод неверных.
Если A, является Б, то это не означает, что над Б возможны те же операции, что и над A.
Человек является физич. телом, и это не означает, что физическое тело, например, умеет мыслить.
> А о всех ли этих понятиях знает конкретная программная реализация?
Переформулирую утверждение:
за единицу времени разработки прикладного ПО, в программу необходимо закладывать больше ортогональных понятий, чем за единицу времени разработки системного ПО.
ps
Важное уточнение: в первую очередь считать, конечно, стоит ортогональные к друг другу понятия, потому что именно они в первую очередь сказываются на кол-ве типов, на кол-ве связей.
> информационной безопасности
имхо, это уже ближе к прикладной области, чем к системной.
ps хотя здесь надо уточнить, что мы понимаем под системным ПО, а что под прикладным....
Со второй частью соглашусь, с первой частью утверждения (это не последовательность) ты меня пока не убедил.
т.е.
Пока система утверждений выглядит так:
Файл - это последовательность байтов.
Некоторые файлы также являются потоками.
Да, будем.
> Тогда почему выходит так, что операции с ним совсем другие, чем например, с дисковыми файлами?
Уточнение, они не другие, они дополнительные.
с пакетом, я могу работать и как с файлом:
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);
}
можешь
только если посмотришь на TCP/IP стек в любой распространённой ОС,
то увидишь, что там с пакетами работают совсем по-другому
потому что, никакого смысла считать пакет файлом нет для этих задач
всё как ты и говорил, в различных ситуациях - различные операции используются
как же проявляются отличия системного ПО от прикладного?
Переход количества в качество.
ps
В данном случае с пакетом: мы имеем еще одно ортогональное понятие - "документ".
Сетевый пакет - это частный случай документа запакованного в файл.
На стыке "документ <-> файл" у нас появляются такие понятия, как Reader/Writer, Parser/Generator, Packer/Unpacker и т.д.
Вот только доводов у тебя нет.
Ты считаешь, что это количество определяется тем, прикладной проект или системный (знания о последних у тебя,
видимо, из пресс-релизов SCO почёрпнуто ). Я думаю, что лучше поискать другие факторы.
> Толку от такой формализации - никакого.
Пример полезного использования.
т. к. любая сущность является файлом, а файлы я, например, умею на лету шифровать или сжимать, значит я умею и шифровать, и сжимать любую сущность.
т.е. фактически мы ввели следующие утверждения:
всё, с чем работают любые программы, представимо в виде файлов
файлы можно шифровать и сжимать на лету
далее используя простейший аппарат мат. логики, приходим к выводу:
все, с чем работают любые программы, можно шифровать и сжимать на лету
ps
в очень прикладной области, даже такие простые формализации очень тяжело делаются, т.к. приходится оперировать плохо формализиуемыми понятиями.
> все, с чем работают любые программы, можно шифровать и сжимать на лету
ну допустим
а вот будет ли это практически применимо?
для ответа на этот вопрос придётся забить на высокоуровневые абстракции и рассмотреть,
что на самом деле происходит в конкретной программе
Разговор начинался с кода Linux-а и как с кодом Linux-а соотносится XP.
Код Linux-а это в первую очередь код ядра ОС + вспомогательные утилиты, именно в этом контексте я употреблял термин системное ПО.
т.е. когда я говорил, системное ПО - я имел ввиду, разработка ядра ОС.
Ps
Понятно, что термин "системное ПО" можно применить для любого движка, как для СУБД, так и для игрового движка, так 1С - это тоже системное ПО, потому что это все системы для упрощения реализации прикладных задач.
Но еще раз повторяю, в рамках данного треда под системным ПО понималось четко очерченный круг ПО.
А в результате ты стал сравнивать прикладное ПО и системное.
Если мы назовём системным ПО ядро ОС и вспомогательные утилиты,
а прикладным ПО - то, к чему хорошо применимо XP, то
1) кучу программ упустим
2) будет немало пересечений: тот же usb-стек и драйвера usb-устройств вполне,
по моему представлению, можно разработать методами XP, и я вполне допускаю,
что какие-то конторы поступают подобным образом
Таким образом, применимость XP не имеет прямого отношения к тому, системное ПО или прикладное.
но для основной массы ПО такое деление имеет право на жизнь.
далее я взял крайние точки: в качестве примера системного ПО я взял ядро ОС, а в качестве примера прикладного ПО - всеми так любимую бухгалтерию (документооборот).
И далее постарался проанализировать почему в одном случае, мы имеем одни методы разработки, а в другом - другие.
т.е. я только говорю, что для одного вида ПО есть одна тенденция, а другого вида ПО - есть другая тенденция, и я не в коем случае не говорю, что у одних только одно, у других только другое.
Опять же небольшая аналогия:
чернобелый спектр тоже можно поделить на черный и белый, это деление будет тоже очень условно, грубо и противоречиво.
Но в то же время, можно также выделить некоторые тенденции:
черное нагревается на солнце, белое отражает свет, белое быстро пачкается, белое лучше заметно и т.д.
И в данном случае, также за скобками оставляется такие вопросы, как "а серое - больше нагревается, или больше отражает свет; черное заметно или незаметно и т.д."
> И далее постарался проанализировать почему в одном случае, мы имеем одни методы разработки, а в другом - другие.
> т.е. я только говорю, что для одного вида ПО есть одна тенденция, а другого вида ПО - есть другая тенденция
может и есть тенденция, но причины ты приводишь неубедительные
мне кажется, тут важнее требования:
если нужно небольшой проект сдать в срок, и похуй на всё- то тут, как я понял, XP рулит
а если нужно, чтоб работало (например, нужна формальная верификация, или просто, как в случае линукса,
самому потом этим пользоваться и развивать) - другие методы
> а если нужно, чтоб работало (например, нужна формальная верификация, или просто, как в случае линукса,
> самому потом этим пользоваться и развивать) - другие методы
AFAIK, основные среды разработки для Java и Smalltalk делались как раз с использованием XP-методик.
Т.е. вроде и проект немаленький, и для себя делали....
Т.е. наврали в этом треде про неприменимость XP для таких случаев?
Правильнее высказывание звучит так: на больших проектах agility-методики (XP) надо совмещать с такими методиками, как RUP и MSF, т.е. Xp - в первую очередь, работает на уровне одной команды, а RUP(MSF) связывает эти команды вместе, и задает генеральный курс.
Замечу, что между RUP(MSF) и XP - много общего, это та же спиральная модель, те же этапы, то же тестирование, та же работа, напрямую с пользователями и т.д.
ps
я бы даже сказал, но это совсем уже ИМХО, что в некоторой степени XP - ориентировано на хороших разработчиков, а стандартные методики (особенно сертификация по ISO) - на средних, т.е. XP старается раскрыть потенциал отдельных хороших разработчиков/программистов, а стандартные стараются не допустить раскрытия "потенциала" плохих программистов/разработчиков.
Т.е. agility-методики стараются сделать хорошо, а стандартные методики стараются сделать неплохо.
Оставить комментарий
hov77
Кто-нибудь может объяснить как в XP решается проблема специализации программистов. Т.е. один хороший спец по БД, другой монстрит оптимизированные алгоритмы в ASM, третий пишет нейронные сети, четвертый пишет для Web. Так вот как их в пару посадить чтобы смысл был. Т.к. не спец по сути даже посоветовать ничего не сможет другому, а спецу объяснять почему он так сделал, а не так и что это вообще значит - нет времени. Да и не каждый является искуссным преподом способным объяснить за 10 мин все что изучал 10 лет.Помоему XP утопия, по крайней мере Pair-программинг точно. Только в небольших проектах реально, где используемые технологии не выходят за рамки одной специализации.