LINUX.ORG.RU

Вышло издание 2,92 книги «Программирование: введение в профессию» А. В. Столярова

 , , ,

Вышло издание 2,92 книги «Программирование: введение в профессию» А. В. Столярова

4

6

Тихо и незаметно 30 апреля 2026 года вышло издание 2.92, которое наконец включает в себя читаемый текстовый слой.

Исправлены опечатки и ошибки, обнаруженные в предыдущих изданиях, в частности 2.91 (где введена кликабельная навигация) и 2.9 (первое чисто электронное издание).

Книга предназначена для самообучения основам программирования и в отличии от многих других изданий предполагает фундаментальный подход — вначале основы дискретной математики и использования GNU/Linux или BSD с командной строкой, затем паскаль, потом ассемблер и только потом Си, системное программирование и альтернативные парадигмы (функциональное, логическое и так далее).

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

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

>>> Ссылка на страницу издания

>>> Альтернативные способы скачивания

>>> Новость на сайте автора

★★★★★

Проверено: dataman ()
Последнее исправление: CrX (всего исправлений: 10)
Ответ на: комментарий от zabbal

Какая разница что говорит дурак

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

Welle
()
Ответ на: комментарий от liksys

Здесь речь идет исключительно об операциях и выражениях, о функциях нет ни слова.

Разницу между операцией и функцией я понимаю, а что это опровергает — не очень.

Приведу пример:

print("hello\n"); // returns int
exits(nil); // returns void

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

Во второй же строке возвращения результата нет, значит и побочного эффекта [выражения с возвращающим значением] нет.

kaldeon ★★
()
Ответ на: комментарий от Welle

Интересная философия. Думаю, г-н Столяров не оценит позицию Дэниела Инголлса, что: «Операционная система — это всё, что не поместилось в язык. Быть её вообще не должно».

Via_Sicka
()

Столько тут рекламмировали Столярова почитать, руки недоходили, скачал на телефон, опять не тянет, формат pdf, всё одной простыней.

AZJIO
()
Ответ на: комментарий от Welle

Оно в топ-1 исключительно из-за того, что в комментариях обсуждают психические отклонения авторов опуса. Такое себе достижение.

liksys ★★★★
()
Ответ на: комментарий от kaldeon

Разницу между операцией и функцией я понимаю, а что это опровергает — не очень.

В одном из следующих комментариев в этом же треде я написал, что определение столярова рекурсивно. Поищи, будь ласка, ознакомься.

liksys ★★★★
()
Ответ на: комментарий от gochaorg

вообще что паскаль должен быть первым вообще как то не вижу веских причин

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

Для профессиональных программистов первым должен быть Си просто как язык, оказавший и оказывающий очень значимое воздействие на всю область деятельности программистов. Даже новые ЯП делаются по вариантам «улучшим Си» или «сделаем как можно непохоже на Си».

Вот просто так Паскалю как ЯП учить смысла нет и никто его, окромя школьных училок, не учит, и они учат ему около 20 уроков за всю школьную жизнь человеческой личинки. Паскаль просто УДОБЕН в качестве МЕТОДИЧЕСКОГО НАГЛЯДНОГО материала при ВВЕДЕНИИ в программирование. Удобен он своей ясностью и простотой, возможностью без невнятных для начинающих объяснений начать писать и запускать реальные программульки на реальном компе.

Возьмём для сравнения упомянутый тут Go (пусть будет «живой» Go завместо «мёртвого» Паскаля). Первая прога на Go:

package main
import "fmt"
 
func main() {
    fmt.Println("Hello!")
}

Объяснение к ней: «Программа на языке Go определяется в виде пакетов. Программный код должен быть определен в каком-то определенном пакете. Поэтому в самом начале файла с помощью оператора package указывается, к какому пакету будет принадлежать файл.»

Какой будет первая реакция начинающего? Правильно, «ЧЁ?!» Т.е. что такое пакет и зачем он нужен? В руководстве, которое я цитирую, что такое пакеты объясняют в гл. 6. До этого «пакет», «import» и «fmt.» – это такая магия.

А насколько «удобно» для начинающих ВОСЕМЬ способов объявить переменную?! 12 операторов присваивания? Просто широченное поле наплодить ошибок, которые не выявляются беглым взглядом опытного препода.

Вариант «Давайте учить ограниченное подмножество Go» не имеет смысла, т.к. этот «ограниченный Go» будет этаким уродливым Паскалем, который потом для освоения Go придётся забыть и переучиваться, да и чисто педагогическая проблема, что делать с теми, кто будет при выполнении учебных заданий игнорировать искусственные ограничения, поскольку Go не эзотерические знания?

mister_VA ★★★
()
Ответ на: комментарий от CrX

А как определение оно без контекста неполноценное.

Данное определение («Несовершеннолетними признаются лица, не достигшие 18 лет.») полноценно, поскольку «совершеннолетний» и «дееспособный» не тождественные понятия в юриспруденции.

И таки ОПРЕДЕЛЕНИЯ есть область произвола автора опуса. Дурным тоном является давать новые определения устоявшимся терминам или вводить новые термины, тождественные имеющимся.

Так что определения «Несовершеннолетними признаются лица, не достигшие 18 лет.», «Несовершеннолетними признаются лица, не достигшие 13 лет.», «Несовершеннолетними признаются лица, не достигшие 20 лет.» нельзя называть истинными или ложными, это ОПРЕДЕЛЕНИЕ термина в некой юрисдикции.

mister_VA ★★★
()
Ответ на: комментарий от liksys

И у него получается рекурсия: процедура - это последовательность действий без побочного эффекта, а побочный эффект - это что-то, чего не бывает в процедурах.

Похоже на вольную интерпретацию. Приведу аналогию: дерево — это предмет без эмоций, а эмоции — это что-то, чего нет в деревьях.

В действительности, понятия процедуры и функции вообще не зависят от понятия побочного эффекта. В первую очередь, это подпрограммы, передача контроля, с тем отличием, что функция возвращает значение, а процедура — нет.

Так вот, определение из Википедии довольно строго указывает, что речь идёт не о любых операциях или выражениях, а только о тех, которые обладают обоими характеристиками: “its … reading … and returning a value.” Если бы наличие последней было необязательным, то “and” можно было бы заменить на “or” и получилось бы «любой эффект, кроме чтения или возвращения».

Меня данное определение удивило. Оно явно не совпадает с общепринятым. С другой стороны, написано оно было явно не неделю назад, выбор слов, вероятно, не случаен и у редакторов, вполне вероятно, были причины оставить всё как есть. Различие же между академической и простой речью — обычное дело.

kaldeon ★★
()
Последнее исправление: kaldeon (всего исправлений: 4)
Ответ на: комментарий от kaldeon

Похоже на вольную интерпретацию.

Нет, это буквально изложение столяровских заблуждений кратко.

В действительности, понятия процедуры и функции вообще не зависят от понятия побочного эффекта.

Я об этом и говорю.

liksys ★★★★
()
Ответ на: комментарий от mister_VA

☕️☕️ за Go. Хотя это мой любимый язык, для введения он не годится.

Я пробовал по-разному обыграть объяснение первой программы, но получается плохо и бессмысленно. Там, где приходится тщательно и неизбежно сглаживать углы (тот же самый импорт), в Паскале это просто можно отложить до более подходящего момента. Гениальный язык.

println задачу бы упростил. Однако, “it is not guaranteed to stay in the language” 1. И переход от println к математическим функциям всё равно должен быть короткий — намного короче введения в модули.

kaldeon ★★
()
Последнее исправление: kaldeon (всего исправлений: 2)
Ответ на: комментарий от kaldeon

Там, где приходится тщательно и неизбежно сглаживать углы (тот же самый импорт)

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

goingUp ★★★★★
()
Ответ на: комментарий от goingUp

типа пока делайте вот так, дальше будет объяснение, что это такое

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

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

Был (возможно, до сих пор есть) такой курс JavaRush, на котором преподавали Java. Там почти всё именно так объяснялась: «здесь говорим только об этом, на остальное не обращаем внимание». Это очень утомительный процесс даже для вовлечённого человека — наблюдал своими глазами.

kaldeon ★★
()
Последнее исправление: kaldeon (всего исправлений: 3)
Ответ на: комментарий от kaldeon

Это очень утомительный процесс даже для вовлечённого человека.

Кому как. Мне подобные вещи наоборот кажутся чем-то таинственным, загадочным, а потом когда объясняют наоборот становится менее интересно.

goingUp ★★★★★
()
Ответ на: комментарий от kaldeon

Если вообще совсем нырять в историю то различение function vs procedure ( оба две по сути routine) [в языках программирования] связано частично с тем что стек(что аппаратный, что в реализациях трансляторов) распространилось массово только к концу 50ых - и как следствие уже с толкнулось с существование нереентерабельных подпрограмм и вагоном «а_ до_теперь нечто другое» abi

для примера - вон как было лольно в перво Фортранах - ни тебе рекурсей ни тебе произвольной ( а только на 3? уровня) вложенности вызовов подпрограмм

ибо стек не очевидно :)

qulinxao3 ★☆
()
Ответ на: комментарий от mister_VA

Данное определение («Несовершеннолетними признаются лица, не достигшие 18 лет.») полноценно, поскольку «совершеннолетний» и «дееспособный» не тождественные понятия в юриспруденции.

А я не про различие совершеннолетия и дееспособности, а про то, что в определении не задана область действия, и при этом нет контекста (например, контекст был бы, если бы это был кодекс, работающий на территории определённой страны, или для граждан определённой страны). А так, чтобы данное определение стало полноценным, надо к нему добавить «в России». Потому что возраст совершеннолетия отличается между странами.

CrX ★★★★★
()
Ответ на: комментарий от shTigrits

Штош так бомбит-то всех…

В следующий раз просто сразу закроем на 5 ★.
Да и сейчас не поздно.

dataman ★★★★★
()
Ответ на: комментарий от wandrien

Побочный эффект присутствует в функции, потому что она является функцией, а он является побочным эффектом функции.

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

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

Есть, короче, такая техника внушения, называется спиральный сюжет по Милтону Эриксону. Походу, Столяров его применяет))

Попутный газ в газовой скважине есть?

monk ★★★★★
()
Ответ на: комментарий от mister_VA

Что-то ты сам себе противоречишь

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

Паскаль просто УДОБЕН в качестве МЕТОДИЧЕСКОГО НАГЛЯДНОГО материала при ВВЕДЕНИИ в программирование. Удобен он своей ясностью и простотой, возможностью без невнятных для начинающих объяснений начать писать и запускать реальные программульки на реальном компе.

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

Для профессиональных программистов первым должен быть Си

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

Xenius ★★★★★
() автор топика
Ответ на: комментарий от liksys

Xenius … Сам при этом программировать не умеет вообще. Буквально это.

Вот не стыдно тебе передёргивать? И с чего я должен доверять твоим суждениям о Столярове, если ты так делаешь?

Xenius ★★★★★
() автор топика
Ответ на: комментарий от liksys

Нет, это буквально изложение столяровских заблуждений кратко.

Я же цитировал его книгу. Твои фантазии от его книги очень далеки.

Я об этом и говорю.

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

Фактически, его определение совпадает с Википедией.

monk ★★★★★
()
Ответ на: комментарий от CrX

Если контекст не задан, он всегда относится к дальнейшим рассуждениям.

«Компактность — это свойство множества. Множество K в метрическом пространстве (X, ρ) называется компактным, если из любого его открытого покрытия можно выделить конечное подпокрытие.»

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

monk ★★★★★
()
Последнее исправление: monk (всего исправлений: 1)
Ответ на: комментарий от Xenius

имха и паскалю ( а ваще любому hll) лучше что бы предшествовала какая либо "(m)mix" но по проще для людёв

например

https://en.wikipedia.org/wiki/Random-access_machine#Refresher:_The_counter-ma...

можно даже какую историческую машину из 50ых годов с «risc» набором команд аж из 8 штук и ваще без регистров ибо там всей памяти не больше 200сот (ну правда 36 али 72 бита) ячеек

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

qulinxao3 ★☆
()
Ответ на: комментарий от monk

ващет побочный эффект - это всё что выходит за рамки интерфейса взаимодействия

т.к. процедуры оставляют свой результате каким либо иным путём (а не возвратом через «ячейку результата» как функции) то всёж обычно результат процедуры тяжелее отличит от побочного эффекта

побочный эффект это по сути нарушение контракта стандартного взаимодействия

именно в частности изменение произвольного глобального состояния

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

qulinxao3 ★☆
()
Последнее исправление: qulinxao3 (всего исправлений: 1)
Ответ на: комментарий от monk

Всё так. «Дальнейшие рассуждения» — это тоже контекст. Но здесь рассуждения были о том, является ли определение истинным или ложным, что само по себе странный вопрос. Дано оно, вместе с заданным вопросом именно в вакууме — предыдущие рассуждения были в принципе не о совершеннолетии, и последующие тоже не о нём, предмет обсуждения другой. Вот поэтому мой ответ в том, что определение не может быть истимнным или ложным — таким может быть утверждение. А как определение приведённое является неполным. Оно сформулировано так, будто говорит обо всех возможных случаях, а на деле только о некоторых. Корректным оно станет, если просто добавить два слова: в России. Либо «18 лет» заменить на «возраст, установленный законами соответствующей страны», ну или что-то в таком роде.

CrX ★★★★★
()
Ответ на: комментарий от qulinxao3

побочный эффект это по сути нарушение контракта стандартного взаимодействия

Нет. Для функции чтения из файла сдвиг позиции чтения или разрушение аргумента для лисповой nreverse не является нарушением контракта. Но это эффект, который происходит дополнительно к основному возврату результата.

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

monk ★★★★★
()
Ответ на: комментарий от CrX

Рассуждения были о том, что утверждение «назовём А со свойством Б словом В» не может быть не истинным ни ложным. Оно просто определяет, что всюду, где мы встретим далее В мы его можем заменить на «А со свойством Б». И никак не можем возражать, что «нет, не назовём, В обозначает совсем другое».

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

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

monk ★★★★★
()
Ответ на: комментарий от Xenius

Он может. Он именно отказывается принимать определения из учебника, так как для него словосочетание «побочный эффект» имеет другой смысл.

Я не буду называть красное «зеленым по столярову». (Вышло издание 2,92 книги «Программирование: введение в профессию» А. В. Столярова (комментарий))

monk ★★★★★
()
Ответ на: комментарий от monk

Анекдот в тему.

Парень девушке
 - Какая ты у меня компактная! 
 - Маленькая и хрупкая?
 - Нет, замкнутая и ограниченная.
monk ★★★★★
()
Ответ на: комментарий от monk

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

забавно что статья на английской вике более точна( в моём понимании) там как раз про hidden state

часточно это(опус Столярова при всех + и - ) напоминают(его тома) сонм методичек упоминавших Дейсктрову «плохо ходить на» лишь для своих соков мозга - ибо goto considered harmfull ведь не столько о лапше в программах сколько сложности наблюдать динамический процесс особенно если связи не очевидны - в том и побочка плоха что «а ещё и кофе в постель»

деление процедур(cobol) vs функция(fortran) в первую очередь обусловленна history of CS и ея приложением в странах первого мира

https://en.wikipedia.org/wiki/Action_at_a_distance_(computer_programming) из https://en.wikipedia.org/wiki/Side_effect_(computer_science)

[upd] т.е состояние файла (его отражённый объект с указателем чтения) оказывается скрытым аргументом для функции которая порционно его читает

т.е в целом изменение файла это побочный эффект - ибо всё что меняет не чистое оказывается побочкой

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

qulinxao3 ★☆
()
Последнее исправление: qulinxao3 (всего исправлений: 3)
Ответ на: комментарий от monk

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

Это очень странное определение.

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

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

В-третьих, для некоторых языков явно определено, что считается побочным эффектом. Причем такие определения похожи друг на друга, и совсем не похожи на определение выше. Например, в стандарте С++:

Reading an object designated by a volatile glvalue, modifying an object, calling a library I/O function, or calling a function that does any of those operations are all side effects, which are changes in the state of the execution environment.

В стандарте C почти дословно то же самое:

An access to an object through the use of an lvalue of volatile-qualified type is a volatile access. A volatile access to an object, modifying an object, modifying a file, or calling a function that does any of those operations are all side effects, which are changes in the state of the execution environment.

Playermet
()
Ответ на: комментарий от Playermet

в стандарте С++ … в стандарте C

Эти двое почти наверняка списывали друг у друга.

Saakx
()
Ответ на: комментарий от Via_Sicka

ADA (по факту диалект Паскаля)

Это кто тебя так обманул?

zabbal ★★★★☆
()
Ответ на: комментарий от Turbid

хотел бы получить компенсацию

Возьмёшь определениями побочных эффектов?

ya-betmen ★★★★★
()
Ответ на: комментарий от Playermet

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

Вырожденные случаи из классификации можно исключить.

При этом почему-то подразумевается, что для функции это не так. Хотя все видимые эффекты функцию могут быть желаемыми, а процедура может иметь нежелаемые.

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

Например, в стандарте С++ … стандарте C

Всё верно. Это описание возможных эффектов в языке. А так как в этих языках нет понятия процедуры, то все эффекты считаются побочными.

monk ★★★★★
()
Последнее исправление: monk (всего исправлений: 1)
Ответ на: комментарий от monk

Все эти рассуждения про побочные эффекты и их нежелательность можно трактовать как ООП-шный принцип единственной ответственности применительно к процедурному программированию.

monk ★★★★★
()
Ответ на: комментарий от monk

Вырожденные случаи из классификации можно исключить.

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

Быть может, у определения, которое ломается на типовых ситуациях, есть проблемы? В чем профит использования такого определения перед общепринятыми?

Побочный эффекты это не нежелаемые это именно побочные

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

Это описание возможных эффектов в языке. А так как в этих языках нет понятия процедуры, то все эффекты считаются побочными.

  1. Приведите тогда определение термину «эффект». Вот есть функция на C++, которая складывает два своих аргумента. У нее нет никаких эффектов? Или нет только побочных?
  2. Вы же сами выше утверждали, что тип void у функции дает то же самое, что процедура.

можно трактовать как ООП-шный принцип единственной ответственности применительно к процедурному программированию.

На самом деле SRP значит совершенно другое.

Playermet
()
Последнее исправление: Playermet (всего исправлений: 2)
Ответ на: комментарий от Xenius

Вот я что-то такое говорил @liksys а он никак понять не может.

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

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

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

liksys ★★★★
()
Ответ на: комментарий от Playermet

Если бы у вас было начальное математическое образование, то вас бы не удивляло, что если по определению процедура суть последовательность действий с эффектом, то ни пустая последовательность, ни последовательность туда-сюда без изменения контекста процедурами не являются. Это следует, хи-хи, из определения процедуры. У них нет эффектов.

VIT ★★
()
Последнее исправление: VIT (всего исправлений: 2)
Ответ на: комментарий от monk

Я же цитировал его книгу. Твои фантазии от его книги очень далеки.

Фантазии - это у столярова и у тебя. А у меня факты, которые в твою голову почему-то не помещаются.

понятия процедуры и функции вообще не зависят от понятия побочного эффекта, побочный эффект - это эффект, присутствующий в функции.

Еще раз: столяров определяет побочный эффект по нахождению оного внутри функции или внутри процедуры. Если IO в функции - то это побочка. Если в процедуре - то нет.

Я уже устал пытаться донести до сектантов очевидные вещи. Что-то не понятно - перечитай тред сначала, я всё доступно объяснил раньше.

liksys ★★★★
()
Ответ на: комментарий от Xenius

Вот не стыдно тебе передёргивать?

Что я не так сказал? Что ты не умеешь программировать? Извини, но однострочники и одностраничники не считаются. Между опытом людей, которые накодили миллионы строк за всю жизнь, и тобой, пишущим простенькую автоматизацию на баше, есть большая разница.

liksys ★★★★
()
Ответ на: комментарий от Xenius

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

Не позволяет, он мёртв. Вялое сопровождение полутора реализаций и отсуствие современных проектов/библиотек на нем - тому доказательство.

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

И, как мы уже выяснили, он заблуждается. Как правильно учить программированию - я уже объяснял: постепенно, от алгоритмов, с применением простых языков типа питона, и далее углубляясь к си.

liksys ★★★★
()
Ответ на: комментарий от VIT

При чем тут вообще математика - определения есть не только в ней. Никаого удивления нет, я утверждаю что это определение расходится с объективной реальностью на всех уровнях программирования, от живого общения с коллегами, до деталей реализации компиляторов. Таким образом, оно как минимум имеет ограниченные рамки применимости. А без уточнения «в этой книге мы упростим вот так, а на самом деле по другому» еще и вредно. Вот придет стажер который учился по такому определению, начнет общаться с командой, а те только глаза округлят. Зачем так делать?

Playermet
()
Ответ на: комментарий от liksys

однострочники и одностраничники не считаются.

Программа, состоящая исключительно из процедур, которые ничего не делают, и их вызовов, счититается?

vM ★★★
()
Ответ на: комментарий от Playermet

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

Я не спорю с тем, что существуют разные определения термина «процедура», мне кажется каждый язык программирования имеет своё определение. Кто берётся доказать, что хотя бы пять определений из пяти популярных процедурных языков являются эквивалентными? Я не берусь.

Построение новой теории всегда начинается с определений. Зачем использовать перегруженный термин для своей теории, но переопределять его не общепринятым способом? Я могу придумать двадцать причин. И хорошо это или плохо - вверху двадцать разных мнений.

VIT ★★
()
Последнее исправление: VIT (всего исправлений: 1)
Ответ на: комментарий от Playermet

А по поводу стажёров и прочего. Одним из главных умений на математических факультетах Университетов является умение легко и непринужденно ориентироваться в рамках новой теории, какая бы незамысловатая эта теория ни была. Переиспользование общепринятых терминов нестандартным, иногда парадоксальным образом, своего рода игра математиков. Это и практика, и фольклор, и дурачество в одном лице. Пусть «стул» есть многомерное Банахово пространство, а «стол» - его сечение, заданное следующей формулой. И дальше теория стола и стула.

VIT ★★
()
Ответ на: комментарий от liksys

Еще раз: столяров определяет побочный эффект по нахождению оного внутри функции или внутри процедуры. Если IO в функции - то это побочка. Если в процедуре - то нет.

Не так. Столяров определяет побочный эффект по нахождению его в выражении. Например a = b++; тоже содержит побочный эффект, хотя тут и нет вызова функции

А у меня факты, которые в твою голову почему-то не помещаются.

Никакие у тебя не факты, у тебя субъективщина «определение Столярова мне не нравится» которое ты выставляешь как факт.

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

Занятно кстати, как у тебя вылезает явная логическая ошибка уже не первый раз. Вот например пройди этот тест ради интереса (можно и на другом сайте) https://psytests.org/iq/voynar.html

Xenius ★★★★★
() автор топика
Последнее исправление: Xenius (всего исправлений: 1)
Ограничение на отправку комментариев: