LINUX.ORG.RU

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

 , , ,

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

3

4

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

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

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

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

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

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

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

★★★★★

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

столяров иногда правильно и даже очень правильно пишет, но иногда совсем не правильно

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

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

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

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

Восторг! Натурально Защита Чубаки из South Park. При том работает - вон впечатлённые 1Сники по треду бегают, восторженно кукарекая :-D

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

А вы, по видимому, считаете

Да, случается, порой даже в уме.

Зачем слюной брызгать и из штанов прыгать?

Понятие не имею зачем ты это делаешь. Может съел что-то не то?

жизнь короткая, зачем её бездарно на глупости тратить?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

в нефоннеймановском языке

Каком-каком? С чего ты решил что употребляя слова, смысла которых ты не понимаешь, ты будешь выглядеть умнее?

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 ★★★★★
()
Ответ на: комментарий от monk

Ну вообще для функциональных ЯП нужны функциональные компы.

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