OberonCore
https://forum.oberoncore.ru/

Каратаев - Прикладной или системный?
https://forum.oberoncore.ru/viewtopic.php?f=86&t=3234
Страница 1 из 2

Автор:  Илья Ермаков [ Вторник, 01 Февраль, 2011 20:05 ]
Заголовок сообщения:  Каратаев - Прикладной или системный?

Интересная статья:
http://karataev.nm.ru/appviasys.html

Цитата:
Мое мнение по вопросу разделения кода на системный или прикладной состоит в правиле - если исполнение кода и его течение определяется форматом данных, то это системный код, а если код зависит от содержания данных, то это прикладной код. Правило очень простое, хотя и, может быть, спорное. Тем не менее мне оно помогает в планировании модулей и в проектировании.

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

Автор:  Валерий Лаптев [ Вторник, 01 Февраль, 2011 20:28 ]
Заголовок сообщения:  Re: Каратаев - Прикладной или системный?

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

Автор:  Alexey Veselovsky [ Вторник, 01 Февраль, 2011 22:59 ]
Заголовок сообщения:  Re: Каратаев - Прикладной или системный?

Илья Ермаков писал(а):
Интересная статья:
http://karataev.nm.ru/appviasys.html

Цитата:
Мое мнение по вопросу разделения кода на системный или прикладной состоит в правиле - если исполнение кода и его течение определяется форматом данных, то это системный код, а если код зависит от содержания данных, то это прикладной код. Правило очень простое, хотя и, может быть, спорное. Тем не менее мне оно помогает в планировании модулей и в проектировании.

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

Попробуйте в точном соответствии с этим принципом написать скажем TCP/IP стэк -- у вас получится слоёный пирог, где системные и прикладные модули будут перемежаться.

Автор:  Илья Ермаков [ Вторник, 01 Февраль, 2011 23:00 ]
Заголовок сообщения:  Re: Каратаев - Прикладной или системный?

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

Автор:  Alexey Veselovsky [ Вторник, 01 Февраль, 2011 23:12 ]
Заголовок сообщения:  Re: Каратаев - Прикладной или системный?

Илья Ермаков писал(а):
Каратаев про то и говорит, что они будут вперемеш(ж)ку в любом почти проекте. И рекомендует разделять функции по модулям, не нарушая единства модуля (только системный - только прикладной).

Ну, смотрите. Берем, парсим входящий поток. Получается что парсер у нас в любом случае суть прикладной модуль. На выходе из парсера уже поток типизированных переменных, унутре которых есть недопарсеный кусок. Они идут на вход какой-то логике, которая в зависимости от типа что-то там делает, затем эти куски идут на вход следующего парсера, который разбирает часть из остатка сырых данных (скажем вначале был IP заголовок, а потом может быть что угодно, например TCP заголовок. или UDP) ну и т.д.

Причем нужды в чистых системных модулях (в обсуждаемой терминологии ) тут может и не возникнуть вообще. Будет смешанный код (имеющиеся данные будут сравниваться с константами).

Автор:  Илья Ермаков [ Вторник, 01 Февраль, 2011 23:20 ]
Заголовок сообщения:  Re: Каратаев - Прикладной или системный?

Ну да, у него достаточно условно.
Но понятно же, что TCP/IP-стеку наплевать на содержание и внутреннюю структуру пользовательских данных...
Ну, контрольные суммы разве что посчитает.

Автор:  Alexey Veselovsky [ Вторник, 01 Февраль, 2011 23:23 ]
Заголовок сообщения:  Re: Каратаев - Прикладной или системный?

Илья Ермаков писал(а):
Ну да, у него достаточно условно.
Но понятно же, что TCP/IP-стеку наплевать на содержание и внутреннюю структуру пользовательских данных...
Ну, контрольные суммы разве что посчитает.

А которые там пользовательские? :-) Это ж стэк!
IP-заголовок -пользовательские?
TCP, UDP заголовок -- пользовательские?
HTTP, RTP загловки пользовательские?

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

Автор:  Илья Ермаков [ Вторник, 01 Февраль, 2011 23:25 ]
Заголовок сообщения:  Re: Каратаев - Прикладной или системный?

Ну дык, каждый уровень-то и есть прикладной, а для него нижний - системный... Как бы так.

Автор:  Alexey Veselovsky [ Вторник, 01 Февраль, 2011 23:29 ]
Заголовок сообщения:  Re: Каратаев - Прикладной или системный?

Илья Ермаков писал(а):
Ну дык, каждый уровень-то и есть прикладной, а для него нижний - системный... Как бы так.

Не-е, это уже получается не по даденому определению, а по иным понятиям. Поэтому обсуждаемый критерий таки не годный.

А так да, системность-прикладнутость оно понятие относительное. Гм. Такое ощущение складывается, что прикладное это то, что пишешь прямо сейчас, а всё остальное -- системное :-)

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

Автор:  Alexey Veselovsky [ Среда, 02 Февраль, 2011 00:02 ]
Заголовок сообщения:  Re: Каратаев - Прикладной или системный?

А вообще, не верно всё это. Системность штуки не зависит от свойств самой это штуки, а зависит от того как оную штуку используют.

Ну, например, допустим есть у нас обычный такой виндовозный блокнот. Вроде бы вполне себе прикладной софт. Но если мы в нашей разработке начинаем править все сырцы в блокноте, то он становится софтом системным, потому как от ошибки в нем мы можем серьезно пострадать (например если он начнет портить исходник при сохранении), и пострадает в т.ч. разрабатываемый нами софт.

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

Пример нумер два -- MS Word. Вполне прикладной софт. Однако если мы используем OLE-атоматизацию в нашей программе (например для генерации отчетов), то ворд резко становится софтом системным.

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

Это как понятие "скриптовости" языка -- сам язык не может быть скриптовым, или не скриптовым, важно используют его для скриптования или нет. Язык может лишь быть ориентированым на скриптовое применение, но от этого скриптовым он не становится.

Поэтому внешние средства могут быть ориентированными на использование в качестве системных и не ориентированными. В частности к системноориентированному софту предъявяются более жесткие требования в плане надежности (см. компиляторы например).

Ну и последний пример -- с точки зрения разработчика проекта который пишется на С++, компилятор оберона не является системным софтом. Так, прикладная игрушка. :-)

Автор:  Валерий Лаптев [ Среда, 02 Февраль, 2011 10:37 ]
Заголовок сообщения:  Re: Каратаев - Прикладной или системный?

Не. Лично мне нравится, как Ермаков указал на важный признак системного ПО в одной из своих статей. Я писал книжку по системному по там написал:
Цитата:
В процессе эволюции информационных технологий возникло (несколько условное) разделение программного обеспечения (ПО) на два типа: системное и прикладное. Поэтому, прежде чем приступить к изучению системного программного обеспечения, нужно определить, какое ПО является системным, и отделить его от прикладного.
Изучая различные виды программных продуктов (ПП), можно увидеть один существенный признак, позволяющий достаточно определенно отнести рассматриваемый программный продукт к классу прикладного ПО. Важнейшим свойством любого прикладного программного продукта (ППП) является то, что он предназначен для решения некоторой конкретной задачи из проблемной области, не относящейся к информационным технологиям. Ту же задачу раньше решали без использования компьютеров. В этом случае информационные технологии применяются для автоматизации решения задачи в конкретной проблемной области. Классическим примером такого программного обеспечения является комплекс программ, автоматизирующий расчет заработной платы.
Таким образом, можно дать следующее определение прикладного ПО:
Прикладное программное обеспечение решает задачи проблемных областей, не относящихся к информационным технологиям.
Отсюда следует, что к типу системного можно отнести то программное обеспечение, которое решает задачи внутри информационных технологий. Можно также сказать, что свойством системного ПО является то, что оно не решает никаких прикладных задач.

А потом классификацию дал:
1. ОС. Не решает никакой прикладной задачи. Обеспечивает повышение пропускной способности вычислительного комплекса
2. Инструментальное ПО. Не решает никакой прикладной задачи. Обеспечивает повышение производительности труда программиста.
3. Проблемно-ориентированное системное ПО. Или предметно-ориентированное. Не решает никакой КОНКРЕТНОЙ прикладной задачи. Но ориентировано на решение КЛАССА прикладных задач. Классический пример - СУБД. Признаки системного ПО в подобных системах: внутренний язык программирования и интерпретатор. Например, браузер - вроде чисто прикладная прога. НО! Интерпретатор HTML и JavaScript (VBSCript) - унутре работет. А это уже системное ПО.

Автор:  Alexey Veselovsky [ Среда, 02 Февраль, 2011 11:10 ]
Заголовок сообщения:  Re: Каратаев - Прикладной или системный?

Валерий Лаптев писал(а):
некоторой конкретной задачи из проблемной области, не относящейся к информационным технологиям. Ту же задачу раньше решали без использования компьютеров.

Хорошо. Пример: калькулятор. Калькулятор это ведь ППО? Вот надо мне сложить скажем те два числа(10 и 15). Можно запустить калькулятор (kcalc тот же), а можно запустить ghc (haskell) repl, и там написать: 10+15 , и в том и в другом случае будет выдан результат. Удобство одинаковое (хм. пожалуй repl таки удобней будет, ну да ладно). Так вот, я считаю что в этом случае и ghc и калькулятор относится к одному и тому же классу софта. Хотя, казалось бы ghc это чисто системная хрень, а калькулятор ну чисто прикладная.

Идем дальше. ещё один пример. У меня задача, скажем посчитать факториал. Вполне себе прикладная задача, правда ведь? Но к сожалению мой калькулятор не умеет считать факториал, зато он программируемый. Соответственно я пишу простенькую програмку считающую факториал и ей таки считаю оный факториал. Задача решена. Внимание вопрос -- калькулятор в этом случае прикладной софт, или таки системный? И чем принципиально отличается тыкание [1], [5], [!], от чуть более долгого тыкания в кнопочки калькулятора для получения того же результата (если на калькуляторе небыло заветной кнопочки [!])? Цели и задачи были одни и те же.

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

И тыкание в калькуляторе 15+10 -- ничем от написания программы не отличается. Собственно это уже программа. Да, на не тьюринг-полном языке. Ну и что с того? Скажем та же быстрая сортировка тоже может быть реализована на не тьюринг-полном языке (я реализовывал), тьюринг-полнота там не нужна.

Цитата:
А потом классификацию дал:
1. ОС. Не решает никакой прикладной задачи. Обеспечивает повышение пропускной способности вычислительного комплекса
2. Инструментальное ПО. Не решает никакой прикладной задачи. Обеспечивает повышение производительности труда программиста.
3. Проблемно-ориентированное системное ПО. Или предметно-ориентированное. Не решает никакой КОНКРЕТНОЙ прикладной задачи. Но ориентировано на решение КЛАССА прикладных задач. Классический пример - СУБД. Признаки системного ПО в подобных системах: внутренний язык программирования и интерпретатор. Например, браузер - вроде чисто прикладная прога. НО! Интерпретатор HTML и JavaScript (VBSCript) - унутре работет. А это уже системное ПО.

Это всё прекрасно подходит под даденое мною определение. Браузер может быть системным ПО а может быть прикладным. В зависимости от того как мы его используем. Word -- туда же. Да и вообще любой софт, автоматизация действий же никуда не девается.

PS. Кстати, я не очень понимаю зачем нам делить софт на системный и прикладной.

Автор:  Валерий Лаптев [ Среда, 02 Февраль, 2011 11:30 ]
Заголовок сообщения:  Re: Каратаев - Прикладной или системный?

Возможно, системное ПО - более сложное ПО? И не требующее знания прикладной области? Прикладное - по-любому надо помимо ИТ знать и прикладную область.

Автор:  Alexey Veselovsky [ Среда, 02 Февраль, 2011 11:42 ]
Заголовок сообщения:  Re: Каратаев - Прикладной или системный?

Валерий Лаптев писал(а):
Возможно, системное ПО - более сложное ПО? И не требующее знания прикладной области? Прикладное - по-любому надо помимо ИТ знать и прикладную область.

Сложно так делить. Ну вот скажем видеоподсистема -- это прикладное ПО, или системное? Казалось бы системное (может быть вообще куском ОС), однако для того, чтобы нормально написать видеоподсистему надо знать особенности восприятия изображения человеком. Что например лучше rgb, или yuv в случае если человек будет смотреть на неподвижную картинку, и что будет лучше если картинка будет динамической. И т.п. Т.е. чисто IT тут не обойдешься, нужны ещё и дополнительные знания.

Ну, или скажем написание/разработка кодеков. Казалось бы -- ну теория кодирования, берешь и вперед! Ан нет. Не получится сделать годный кодек без учета психоакустики например (это если говорим про аудио).

Разработка языков программирования опять же. Тут тоже чисто IT не достаточно, потому как нужно ещё кое-что понимать о эргономике и читабельности всего этого хозяйства. Опять же неплохо б разбираться и быть в курсе шрифтов которые сейчас в ходу как для бумаги, так и для экрана. Без этого язык получится не юзабельным, хотя технически он возможно будет хорош. А ведь казалось бы...

Автор:  Alexey Veselovsky [ Среда, 02 Февраль, 2011 11:44 ]
Заголовок сообщения:  Re: Каратаев - Прикладной или системный?

На примере этого обсуждения ясно видна дырявость абстракций :-)

Автор:  Valery Solovey [ Среда, 02 Февраль, 2011 11:52 ]
Заголовок сообщения:  Re: Каратаев - Прикладной или системный?

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

Например, ОС может быть как прикладным ПО, так и системным. Винду мы сюда не берём: это продукт, который помимо ОС содержит по крайней мере браузер, который вместе с частью ОС является прикладным ПО.

Автор:  Valery Solovey [ Среда, 02 Февраль, 2011 11:56 ]
Заголовок сообщения:  Re: Каратаев - Прикладной или системный?

Alexey Veselovsky писал(а):
PS. Кстати, я не очень понимаю зачем нам делить софт на системный и прикладной.
О, зря я не дочитал до этого места. Эти понятия находятся в разных плоскостях.

Автор:  Сергей Губанов [ Среда, 02 Февраль, 2011 12:15 ]
Заголовок сообщения:  Re: Каратаев - Прикладной или системный?

Код делится на стрёмный и не стрёмный.

Определение стрёмного кода: любой код, который выглядит как стрёмный и есть стрёмный код.

(спёрто с РСДН)

Автор:  Alexey Veselovsky [ Среда, 02 Февраль, 2011 12:53 ]
Заголовок сообщения:  Re: Каратаев - Прикладной или системный?

Valery Solovey писал(а):
Alexey Veselovsky писал(а):
PS. Кстати, я не очень понимаю зачем нам делить софт на системный и прикладной.
О, зря я не дочитал до этого места. Эти понятия находятся в разных плоскостях.

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

Автор:  Valery Solovey [ Среда, 02 Февраль, 2011 12:59 ]
Заголовок сообщения:  Re: Каратаев - Прикладной или системный?

Alexey Veselovsky писал(а):
Т.е. не понятно кому это жизнь облегчит.
Тем, кто "пишет системный софт" такое деление позволяет круче груть пальцы.

Страница 1 из 2 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/