LINUX.ORG.RU

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

 , , ,

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

4

6

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

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

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

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

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

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

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

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

★★★★★

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

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

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

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

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

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

Нет. Ты можешь считать, что выделенная память, заполненная данными - и есть результат твоего вычисления, тогда это не будет побочным эффектом (если тебе не важен факт заполнения кучи).

Применим тест monk. Предположим твоя функция запускается при отладке в каждом шаге цикла, а шагов там миллион. Результат — всё падает нафиг с OOM. Значит это побочный эффект.

Конкатенация строк не будет побочным эффектом только в нефоннеймановском языке, где строки first class citizen вроде Tcl.

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

достаточно открыть указатель в конце трёхтомника и начать читать указанные разделы подряд

Если обратиться к трудам преподобного Онания Столпника…

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

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

Это далеко не первый раз же. Всегда одинаково.

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

strcpy наоборот распаковывается иногда

Что не всегда есть хорошо. В своих прод сборках мы целенаправленно отсушили builtin-memcmp и builtin-strlen.

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

очевидно что процедура без изменения среды это вариант sleep

побочное всёж это то что помимо основного

процедуре передаётся либо value «запиcь активации» и она творит что то + меняет своё окружения ( и это оказывается основной побочкой) либо есть передаётся «запись активации» али про простому ононимный(sic!) объект и через изменение его полей процедура очучествляет побочку - но всёж эта побочку не абы где рэндом память портить а чисто конкретно через получение поля и через их var

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

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

Потому переводит предмет рассмотрения из сферы синтаксиса в сферу системы типов.

int -> void - это типологическая запись. Так же как, например, int -> bottom, хотя bottom-типа напрямую в Си нет. А вот void есть, и хорошо, что он есть.

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

FFI-прокладка?

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

Это даже неплохо, кстати. Вот кложа, скажем, с чего началась? С провалившихся попыток Рича Хикки затащить борщелисп в продакшен и экспериментов с интеропом с другими платформами.

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

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

из сферы синтаксиса в сферу системы типов

Чего в этом хорошего?

Так можно и for/while/if в сферу системы типов перенести, как это сделано в Haskell. Это тоже хорошо?

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

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

Пишется. Была Genera OS, сейчас Mezzano есть. Но драйвера для своего компьютера я заколебусь для них переписывать. Поэтому приходится использовать ОС с сишным интерфейсом, а значит на каком-то уровне лисповой программе придётся с ней взаимодействовать через FFI.

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

А чем плохо? Особенно strlen.

libc’шные в наших тестах были быстрее. Плюс у нас зоопарк машинок, и вот тут ifunc выстреливает в полный рост.

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

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

Но если памяти в систему докинуть, то не падает… Значит не побочный эффект.

Так мы далеко пойдём, главное по пути штаны не порвать, широко шагая.

Конкатенация строк не будет побочным эффектом только в нефоннеймановском языке, где строки first class citizen вроде Tcl.

Восторг! Люди боятся ИИ, а я боюсь ЕИ!

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

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

Ну да, ну да. S-выражения (префиксная нотация), code as data (и вытекающие отсюда возможности метапрограммирования), read-eval-print, (попытки в) функциональное программирование — это всё херня из-под коня. Главное — ключевые слова чтоб были буковка в буковку! %)

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

Я понял. То есть Haskell лучше, чем Си?

Кстати, а вариант Racket ещё лучше, где (void) это просто значение процедуры, а почти все конструкции, являющиеся в Си синтаксическими, из сферы синтаксиса перенесены в сферу библиотечных макросов?

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

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

Ничосе) В JS тоже переменные и функции в независимых пространствах имён живут?

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

Я после того как выше увидел откровение про JS и CL, потерял интерес отвечать всерьёз, сорян =)

Слишком много шизы на один тред. Одной книжки Столярова хватает.

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

как это сделано в Haskell. Это тоже хорошо?

Конечно хорошо - чем больше в программе доказуемого вместо «чё-т куда-то в памяти записали, хз - авось не сегфолт», тем безусловно лучше.

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

Я понял.

Наверняка ведь опять врёшь.

То есть Haskell лучше, чем Си?

Конечно. Именно поэтому его никто не заменяет на Rust.

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

Во, можешь же когда хочешь - всё правильно понял.

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

S-выражения (префиксная нотация)

Это как раз те скобки. В обоих языках можно перейти на инфиксную при помощи библиотеки.

code as data (и вытекающие отсюда возможности метапрограммирования)

Там разные data. В лиспах code это списки, а в схемах это синтаксические объекты. Что позволяет в схеме делать надёжное метапрограммирование (в лиспе случайное переопределение символа часто может поломать макрос).

read-eval-print

Он нынче всюду. От питона до JS. Лисповского REPL с сохранением образа в схемах обычно нет. Переопределения произвольных объектов из импортированного модуля тоже нет.

функциональное программирование

Так оно в схеме есть, а в лиспе даже оптимизация хвостового вызова в стандарте отсутствует. И для вызова функции из переменной надо funcall вызывать. Нормального функционального программирования, чтобы цепочка вызовов не создавала промежуточных объектов как в Haskell нет ни там ни там. В том объёме, в котором функциональное программирование в лиспе, оно нынче и в питоне и в JS есть.

Главное — ключевые слова чтоб были буковка в буковку

Главное семантика. Схемовские макросы на лиспе не сделать (нет синтаксических объектов в языке). Схемовский call/cc (и всё, что на нём от корутин до генераторов) не сделать (нет продолжений в языке). И в обратную сторону: в лиспе CLOS интегрирован в компилятор, поэтому достаточно быстрый, в лиспе есть сохранение образа в файл (не в стандарте, но по факту), в лиспе рестарты и интерактивный отладчик с выбором рестарта и REPL часть языка.

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

Ничосе) В JS тоже переменные и функции в независимых пространствах имён живут?

В этом JS и Схема одинаково далеки от лиспа. А вот продолжений одинаково нет ни в CL ни в JS.

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

Так можно и for/while/if в сферу системы типов перенести, как это сделано в Haskell. Это тоже хорошо?

Да это офигенно.

То есть Haskell лучше, чем Си?

Вопрос как-будто с подвохом. Почти что угодно лучше чем си, тем более хаскель

а вариант Racket ещё лучше, где (void) это просто значение процедуры, а почти все конструкции, являющиеся в Си синтаксическими, из сферы синтаксиса перенесены в сферу библиотечных макросов?

А вот это нет, полноценные типы лучше макросов

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

Ну тут, как говорят, на безрыбье…

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

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

Вопрос как-будто с подвохом. Почти что угодно лучше чем си, тем более хаскель

Там выше фанаты сей были, которым паскаль поперёк горла был, и на хаскель тоже наезжали.

monk ★★★★★
()

Что за алгоритм нумерации 2,92? Вот Кнут я знаю TeX к числу Pi нумерует, чем выше патч, тем Pi ближе.

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

Чем слово void хуже слова procedure?

Тем, что в си нет процедур. Они не предусмотрены дизайном языка, в котором почти всё обладает побочными эффектами, как пишет твой любимый столяров.

Нет.

Бесполезно объяснять слепому, как выглядит зеленый слоник.

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

Значит это побочный эффект.

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

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

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

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

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

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

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

Если же стеком попользовались и вернули как было - то нет.

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

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

liksys ★★★★
()

О нет, очередной столяровский тред. Читать это все я конечно же не буду) Напишу только, вот для чего нужно образование? Чтобы получить профессию -> получить работу -> получать деньги и перестать зависеть от мамки. А студент Столярова в рабочем коллективе будет как Маугли, не хотеть пользоваться благами цивилизации (базами данных например) и говорить на каком-то своем языке (привет побочные эффекты).

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

Вот что было сказано про издание 2,9:

Издание авторским произволом получило номер 2,9 (два и девять десятых). Предполагается, что последующие версии, если когда-нибудь появятся, получат номера 2,99, 2,999 и т.д., т.е. номера электронных изданий будут арифметически всё ближе и ближе к тройке, но равными тройке станут лишь в случае, если книга когда-нибудь будет снова напечатана на бумаге типографским способом.

Всякие 2,91, 2,92 - незначительные изменения (добавление кликабельного оглавления и корректного текстового слоя, а также исправления найденных на момент публикации опечаток).

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

Извиняюсь, не согласен, до интернета я например basic изучал первым языком, и не просто basic, а gw-basic и БЭЙСИК на МК85, именно на МК85 он был первым

1 программа была, пиксель по диагоналям отскакивал от бортов и паспорт на МК85

все… больше ничего, и мне 10 лет (92 год) и никого..

изучай как хочешь

и только потом ZX SPECTRUM / Z80 и журналы, и ассемблер

а тооооолько потом либо Си, либо Паскаль, я выбрал Си

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

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

так там надо объяснять с начала термина вычисление/Тюринг/Черч/Конечные автоматы/Синтаксис ну то есть полностью переучивать

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

Я считаю, что это очень показательно. @Xenius прямо таки настаивает на том, что именно понимание по столярову дает БАЗУ, и только так можно писать хороший код.

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

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

Ну или хотя бы лисп-машины.

Emacs запусти - вот тебе и будет lisp-машина.

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

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

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

Было бы неплохо, чтобы упомянутые паскалисты, помимо чтения книжек, писали какой-нибудь полезный код.

Судя по их комментам в треде после создания DoubleCommander они достигли совершенства поэтому написание чего бы то ни было ещё утратило всякий смысл :)

Что само по себе довольно иронично - даже сам Вирт не стал зацикливаться на пасквиле, а двинулся дальше к Modula(-2) и Oberon. Причём в отличии от благополучно загнувшегося фронта пасквиля, для первого даже есть поддержка в GCC: https://gcc.gnu.org/onlinedocs/gm2/ - потому что писать компиляторы это воистину не языком про побочные эффекты на форумах трепать.

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

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

zabbal ★★★★☆
()
Ограничение на отправку комментариев: