LINUX.ORG.RU

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

 , , ,

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

4

4

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

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

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

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

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

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

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

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

★★★★★

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

Для начала сойдет

Ну для, для понимания того, что такое указатель и с чем его едят, этого достаточно.

Переменная может храниться в регистре

Это уже про sequence points, а также про strict aliasing (применительно к однопоточке) и про барьеры (применительно к многопоточке). Для корректного кода компилятор обязан поддерживать иллюзию виртуальной машины, которая никаких регистров не имеет.

https://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf

5.1.2.3 Program execution

1 The semantic descriptions in this International Standard describe the behavior of an
abstract machine in which issues of optimization are irrelevant.

2 Accessing a volatile object, modifying an object, modifying a file, or calling a function
that does any of those operations are all side effects,11) which are changes in the state of
the execution environment. Evaluation of an expression may produce side effects. At
certain specified points in the execution sequence called sequence points, all side effects
of previous evaluations shall be complete and no side effects of subsequent evaluations
shall have taken place. (A summary of the sequence points is given in annex C.)

3 In the abstract machine, all expressions are evaluated as specified by the semantics. An
actual implementation need not evaluate part of an expression if it can deduce that its
value is not used and that no needed side effects are produced (including any caused by
calling a function or accessing a volatile object).

4 When the processing of the abstract machine is interrupted by receipt of a signal, only the
values of objects as of the previous sequence point may be relied on. Objects that may be
modified between the previous sequence point and the next sequence point need not have
received their correct values yet.

5 The least requirements on a conforming implementation are:
— At sequence points, volatile objects are stable in the sense that previous accesses are
complete and subsequent accesses have not yet occurred.
— At program termination, all data written into files shall be identical to the result that
execution of the program according to the abstract semantics would have produced.
— The input and output dynamics of interactive devices shall take place as specified in
7.19.3. The intent of these requirements is that unbuffered or line-buffered output
appear as soon as possible, to ensure that prompting messages actually appear prior to
a program waiting for input.

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

У ассемблеров часто синтаксис работы с памятью кукухнутый. Там не столько концепция сложна, сколько то, в какой синтаксис она завернута. Синтаксис AT&T так вообще поехавшие придумывали.

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

А самая главная ошибка - изучение паскаля - уже исправлена?

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

А вот дать в качестве скриптового языка Python вместо TCL может и стоило бы. Я конечно где-то даже понимаю возмущение Столярова питоном, но тут уже тоже характерный пример того, что вместо говнометания стоило бы задуматься, что и Python (и Perl тоже им охаяный) возникли и длительное время развивались (Perl и сейчас) OpenSource сообществом, вовсе не корпорациями и даже ненавидимых им комитетов по стандартизациям на них не было. То есть, людям оно было и есть нужно.

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

Пидипишный MACRO как раз образец ясности. Лучше я не видел. После PDP практически все системы команд кажутся кривоватыми. Не в синтаксисе дело, я саму концепцию долго осознавал.

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

в Forth вместо массива адресов

Это уже особенности семантики Forth. Пока этот язык не используешь, они не релевантны.

А в общем случае адресное пространство может быть графом.

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

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

А чего это он переобулся?

Он прямо написал:

Ну что же, давши слово — держись; иными словами, ваша взяла. Опубликовано издание 2,92 трёхтомника «Программирование: введение в профессию» и задачника к нему. Как можно догадаться, основное отличие от предыдущих версий — корректный текстовый слой в PDF-файлах, для чего, собственно говоря, это издание и сделано. Спонсор, приславший подряд четыре пожертвования на весьма заметную общую сумму, пожелал сохранить инкогнито.

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

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

Если боишься умолчаний, то:

$ Get-FileHash -Algorithm MD5
MD5     SHA1    SHA256  SHA384  SHA512

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

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

А самая главная ошибка - изучение паскаля - уже исправлена?

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

А непонимание столяровым побочных эффектов?

А где ты видишь непонимание? Может оно как раз у тебя?

А общее сектантство?

Ну это никуда не делось, но к книжке не относится.

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

Он всегда был читаемый. Человеком по крайней мере.

Например, PocketBook-и давно умеют разобрать текстовый слой книги и переформатировать его под 6" экран, а не тот лапоть, на который он сверстан в книге.

А если книга еще и сверстана на А4 - то только такая процедура избавит от кровавых слез при чтении.

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

В get-filehash можно указывать алгоритм. И в скриптах, думаю, это делать обязательно надо. В выводе он показывает, что хеш для sha-256 вычислил.

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

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

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

А вот дать в качестве скриптового языка Python вместо TCL может и стоило бы.

Мне Tcl больше нравится. К тому же там Tk и expect нативно, можно гуйцовые обёртки делать.

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

Но в отличии от C важные концепции вроде
массивов, строк и модулей,

с первой частью, пожалуй, соглашусь (с некоторой оговоркой для себя), а вот со второй не понятно:

функций/процедур есть в явном виде, а не в урезанном.

можно поподробнее? что в паскале лучше и не урезано, по сравнению с си/+?

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

Так автор и пишет, что в Windows есть командная строка, но неюзабельная

Это устаревшая информация. Windows Terminal и Powershell 7 вполне удобная связка. Powershell конечно не предел мечтаний, но после него bash выглядит очень архаично.

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

Есть ли изменения, посвящённые проникновению ИИ во все сферы программирования?

От издания 2022 года отличий мало.

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

Я возразил на громкий пафос про разумные умолчания.

В программировании нет ничего более временного и зыбкого, чем «разумные предположения об умолчаниях», а тут вон человек на них чуть ли не философию строит…

В Linux вон команды до сих пор по умолчанию возвращают размеры в 512-байтных блоках, которые были «разумным умолчанием» в эпоху, когда заметная часть посетителей этого сайта даже не родилась, а права доступа в восьмеричной системе пишем, которая нафиг не нужна и является смутным отголоском забытой эпохи 6-битных байт.

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

его подход к обучению программированию с азов

Это плохой ошибочный подход.

А вот дать в качестве скриптового языка Python вместо TCL может и стоило бы.

Ага. И вообще, я уже неоднократно писал, в чем проблемы столяровщины, и как нужно ПРАВИЛЬНО учить программированию: Рецензия на книги А. В. Столярова (комментарий)

Спойлер: не так, как столяров.

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

можно поподробнее? что в паскале лучше и не урезано, по сравнению с си/+?

Конкретно отличие между функциями и процедурами. Функция — это вычисление результата по аргументам, а процедура — это выполнение какого-то действия. В C это можно эмулировать с помощью void-функций, но нативно такого нет. Так же как и строк и массивов (адресная арифметика, те же [N] - это синтаксический сахар для +N)

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

указатели — это просто, если уже их понимаешь

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

p.s. обращение «ты» - это общее обращение, не конкретно к вам :о)

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

Изучение паскаля — это не ошибка. Ничего лучше на роль первого языка до сих пор нет.

Учебный курс MIT с питоном с тобой не согласен. Повторяю мою ссылку, в которой написано, как правильно строить учебные курсы по пограммированию: Рецензия на книги А. В. Столярова (комментарий)

А где ты видишь непонимание? Может оно как раз у тебя?

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

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

А теперь объясни ссылку на функцию

таки все тоже самое! :о) переменная, значение кот. есть адрес. не так?

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

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

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

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

Функция — это вычисление результата по аргументам, а процедура — это выполнение какого-то действия.

А выполнение вычисление это не выполнение действия? ))

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

Учебный курс MIT с питоном с тобой не согласен.

"После того как MIT похоронил SICP в пользу питона, подобные ссылки на авторитет учебных заведений окончательно утратили смысл. Замечу, это было чуть ли не двадцать лет назад. " (c) А.В. Столяров

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

Ну дык. Столяров - мой любимый интернет-фрик, где-то наравне с Енотом Эриком и Палтусом из «Проклятья серого симпёнка». Жаль, конечно, он сам сюда не захаживает, так что онлайн-перформансами занимаются только его засланные казачки, но хотя бы так.

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

"После того как MIT похоронил SICP в пользу питона, подобные ссылки на авторитет учебных заведений окончательно утратили смысл. Замечу, это было чуть ли не двадцать лет назад. " (c) А.В. Столяров

Судья-то кто, лол?)

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

можно ссылки на скачку старых версий?

А так сложно нажать «Книги» вверху сайта и выбрать первую: http://stolyarov.info/books/programming_intro ?

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

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

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

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

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

Это плохой ошибочный подход.

Ошибочным он был бы, если бы подход не работал или плохо работал. Но многие в прошлом начинали таки с паскаля (обычно в борланд виде) и есть, даже здесь на лоре, кто по Столярову обучался. Сам Столяров в дальнейшем настоятельно рекомендует вместо Паскаля использовать Си и C++.

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

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

На мой взгляд, основной довод - это простота въезжания в тему помимо указателей. Например, если начать преподавание с Си, то сразу же придётся какие-то непонятные новичку «заклинания» делать в виде #include (или компилятору опции передавать), ещё и сходу писать не столько программу, сколько функцию main(), в Hello world объяснять, что значит \n или почему строка не переводится и т.д.

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

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

т.е. си-функция сразу содержит в себе все возможные варианты pascal-фанкции и процедуры - и это считается «урезанным» вариантом?! как-то сомнительно...

для меня си является самым простым, понятным, удобным (и как следствие локоничным) яп.
и с этим ни чего не могу сделать :о) как только что-то в голове прорабатываю, к.л. алгоритм или просто код - сразу в виде си/+ все самой складывается... просто, понятно, логично.

ладно, предлагаю по рукам, каждый при своем :о)

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

Прочитай уже методическое предисловие

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

из-за пресловутой сишности головного мозга

Столяровщина неизлечима, как я погляжу.

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

Ошибочным он был бы, если бы подход не работал или плохо работал.

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

разу же придётся какие-то непонятные новичку «заклинания» делать в виде #include

А в паскале надо объяснить, что такое program и почему его надо писать в самом начале. Любой язык содержит в себе некоторое количество магии, и откладывание объяснений на потом - вполне себе работающая стратегия.

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

нет, достаточно «для начало» понять что есть «простыня памяти», а процессор/понимание - это уже ближе к ассемблеру (имхо :о)

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

Ну так скачал по ссылке в ОП.
И с FTP то же самое.

Исправил.

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

си-функция сразу содержит в себе все возможные варианты pascal-фанкции и процедуры

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

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

да в свое время когда интересовался столяровым - как раз там и смотрел... но наткнулся на «нечитабельность» книг и/или еще какие-то непонятки/неудобства/и прочие хрени...

вот хотел уточнить, может «ваш вариант» где-то в другом месте

спасибо

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

делая понимание некоторых идей невозможным

Сектантство, как есть. Если ты не согласен со столяровым - ты просто его не понимаешь, а не он чушь несёт.

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

Я давал ссылку: начинать нужно с языка, в котором будет легко декомпозировать задачу. Дальше углубляться в системщину и на низкий уровень.

Хз, с моей точки зрения оба подхода имеют право на жизнь. Наверное, если с Python начать, то можно быстрее писать что-то на актуальном языке, но в целом я не рискну однозначно утверждать, что быстрее обучит программированию в целом. Может быть, даже от черт характера зависит.

А в паскале надо объяснить, что такое program и почему его надо писать в самом начале.

В борлад или freepascal минимальная программа - просто begin end. Program опционален, хотя и считается хорошим тоном указать.

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

Нашел в той теме могучее:

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

Явно чел не работал с реальным кодом на tk.

«По идее», ага.

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

Сектантство, как есть. Если ты не согласен со столяровым - ты просто его не понимаешь, а не он чушь несёт.

Ну есть же языки, где побочные эффекты надо оформлять явно, а функции — это всегда чистые функции. Паскаль не такой, он промежуточный между Си и функциональными языками, то есть разделение на функции/процедуры есть, но компилятор тебе не мешает оформлять процедуры через слово function и наоборот.

Мне кажется, что ты и правда не понимаешь, что такое побочные эффекты.

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

Столяров сам говорит, что паскаль выбран из-за необходимости объяснения побочных эффектов. При этом, свое определение побочных эффектов он выдумал сам на основе этого самого паскаля. Я давал ссылку - там разобрано, почему разделение на процедуры и функции по-столяровски не существует в природе. Выходит, паскаль учится ради изучения паскаля.

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

приходится использовать костыли с &

вполне правильно, самое что ни наесть «понятное и логичное» в разрезе языка, то что доктор прописал.

После паскаля C хорошо пойдёт

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

если верить Столярову

а вы не верьте никому, верьте только себе, своим чуствам/интуиции :о)

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

Наверное, если с Python начать, то можно быстрее писать что-то на актуальном языке

Зачем начинать с Python? Я вот тут попробовал чуток на нём покодить задачи из яндекс-учебника - ну изврат же.

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

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

Мне кажется, что ты и правда не понимаешь, что такое побочные эффекты.

Я прекрасно понимаю, что такое побочные эффекты, в отличие от вас со столяровым. Ваше понимание основывается исключительно на концепции, изобретенной в паскале и для паскаля, и оно расходится с общепринятым определением в computer science, и даже с ISO/IEC 2382:2015.

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

liksys ★★★★
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)