LINUX.ORG.RU

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

 , , ,

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

3

4

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

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

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

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

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

>>> Ссылка на страницу издания
>>> Альтернативные способы скачивания

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

★★★★★

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

Дело не в пуговицах. Там вся система от процесса разработки и стандартной библиотеки до документирования отличается.

Собственно, похожесть ограничивается скобками (но в схеме могут быть не только круглые) и парой ключевых слов.

Если брать семантику, то JS больше на лисп похож, чем Схема.

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

Ну и что плохого в том, что нужно помнить приоритет?

Самоочевидно для абсолютно любого человека даже без опыта.

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

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

Вы репутацию с харизмой не путаете?

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

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

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

Зачем преподавателю писать код?

И вправду, зачем автору учебника физики знать какую-то там физику?

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

А если по-Вашему, то литературу преподавать должны только писатели, историю только археологи, а сопромат только инженеры-конструкторы.

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

Да, там опечатка, условие должно было быть q[i] конечно. Незачем так остро реагировать, это всего лишь пример, а не реальный код. Но ужасность связана не с опечаткой.

Вообще я бы писал скорее так while(*p=*q) p++,q++; т.к. в первоначальном варианте там лишние два инкремента в конце цикла, которые хоть возможно и будут оптимизированы компилятором, но всё равно создают некомфортный вид. Если, конечно, нет цели именно этот инкремент в конце реализовать.

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

Да, там опечатка, условие должно было быть q[i] конечно.

И опять не так. Хотя ладно, пойдёт.

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

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

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

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

Это скриптовый язык для редактора.

Это то на чём этот редактор написан. И множество других пакетов Emacs, не имеющих непосредственного отношения к редактированию. Хотя с кем я спорю - сложно ожидать от 1С-«программиста» умения разбираться в сортах лиспа :)

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

программирование и близко не сравнимо с разработкой новых экспериментов. Разве что с воспроизведением простых и давно известных

Вы пишете только уже написанные простые и давно известные программы? Так такие программы и Столяров писал и даже более сложные: http://www.intelib.org/intro.html

А программирование новых программ как раз сравнимо с разработкой новых экспериментов.

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

Это то на чём этот редактор написан.

Но работает этот язык всё равно только внутри этого редактора. Это не язык общего назначения.

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

Хотя с кем я спорю - сложно ожидать от 1С-«программиста» умения разбираться в сортах лиспа :)

Я, в отличие от тебя, для CL полдюжины пакетов написал: https://github.com/Kalimehtar/gtk-cffi

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

По поводу побочных эффектов, цитирую Википедию 1:

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

почему Столяров выбрал в качестве примера C и C++, в которых начиная с C89 есть void вместо возвращаемого значения.

Потому что в сях функции и процедуры объединены в одну конструкцию.

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

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

Вызов функции является операцией. Вызов функции, возвращающей значение, является выражением.

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

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

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

Это не имеет значения. Столяров выделяет функции и процедуры в отдельные сущности. Либо крестик, либо трусы.

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

как с «лысенковщиной» - пара лет

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

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

Можно учить программированию не программируя самому? Думаю, что можно.

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

Столяров профнепригоден.

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

Самоочевидно для абсолютно любого человека даже без опыта.

Ну a*b+c*d обычно ОК написать в выражении. Ну ладно, пусть приоритет, тебе пример со скобками дали, где проблема приоритета закрывается.

Как объяснить начинающему что писать активный код в условии if/while или присваивании — это плохо в общем случае?

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

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

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

Это не имеет значения. Столяров выделяет функции и процедуры в отдельные сущности. Либо крестик, либо трусы.

Функция — выделенный кусок кода, основной целью которого является возвращение значения

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

Куски кода на эти две категории делятся почти однозначно.

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

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

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

Куски кода на эти две категории делятся почти однозначно.

Нет. Я объяснял, почему. Читай мои предыдущие комментарии (про точку отсчета, например), если что-то непонятно.

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

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

Новый уровень.

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

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

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

Ещё раз, это был просто пример.

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

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

Твоя критика в Рецензия на книги А. В. Столярова (комментарий) относится в основном к личности Столярова, а не по существу вопроса.

Ты цепляешься к ОПРЕДЕЛЕНИЮ. Неужели тебе не понятно, что воевать с определениями — это не конструктивно? Определение Столярова придумано для конкретной цели, которая не будет выполнена если взять другое определение (любое модифицирующее действие), которое ты проталкиваешь.

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

Если вы так считаете, то не читайте Столярова. Что вас так колбасит?

Я неоднократно давал ответ на этот вопрос ссылкой.

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

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

Нет. Я объяснял, почему.

Прочитал ещё раз. Ты, по-моему, путаешь куски кода с побочными эффектами и процедуры по Столярову.

Попробую свести всё вместе.

Столяров

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

То есть побочные эффекты — это характеристика функций (то есть кусков кода «primary effect of reading the value of its arguments and returning a value to the invoker of the operation», а не произвольного куска кода).

Далее он пишет:

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

То есть, ещё раз, деление на процедуры и функции происходит не по фактическому наличию дополнительных действий, а по намерению программиста.

Твоё:

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


Так вот смысл в том, что в Паскале (и в 1С, например), если программист называет кусок кода функцией, то подразумевает, что цель этого куска получить некое значение. Если функция при этом создаёт файл, то это обычно очень неожиданный результат (всё равно, что SELECT на SQL вдруг что-то поменяет в базе). И наоборот, если кусок кода назван процедурой, значит его суть в каких-то действиях, а возвращаемый результат, если есть, только является неким отчётом об этих действиях.

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

Ещё раз, это был просто пример.

Непоказательный пример - хреновый пример. А нормального ты привести не можешь потому что (1) ты не программист (2) его не существует.

Он просто придумал генерализацию многих случаев как делать не надо.

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

Неужели тебе не понятно, что воевать с определениями — это не конструктивно?

Неужели тебе не понятно, что если определение не соответствует действительности, то это плохое определение? Да, я спорю с определением, потому что оно подменяет понятия и вводит магию, не существующую в природе.

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

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

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

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

А если рутина меняет данные И возвращает результат исполнения?

Тогда это процедура с выходным параметром.

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

определение не соответствует действительности,

Как определение можно соответствовать или не соответствовать действительности? Ты понимаешь, чем определение отличается от утверждения (предиката)?

Тебе кстати monk постом ниже дал пример. Функцию (или выражение в общем вроде f(x)+g(y)*3) можно вставить в отладчик, чтобы она при трассировке исполнялась на каждом шаге — это не ломает поведение. Процедуру нельзя вставить в отладчик — это поменяет поведение.

И эта генерализация сыпется на херовой горе частных случаев.

Вот тебе эмпирический критерий.

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