LINUX.ORG.RU

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

 , , ,

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

4

6

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

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

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

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

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

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

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

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

★★★★★

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

Положительные или отрицательные последствия?

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

А ведь всего навсего «у вас там работает такой…»

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

Контекст был в обсуждении способов линковки к библиотекам: динамической и статической. Тут мне казалось трудно как-то иначе понять. Мне даже кажется, что ты меня понял, но зачем-то решил поспорить про точность формулировок.

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

Эдик дурачился

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

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

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

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

Поэтому на мой взгляд сравнение с ведущим грубияном этого обсуждения совсем не в пользу грубияна.

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

Вот они и «решают профессиональные задачи».

Таки тута речь идёт об обучении программированию будущих профессионалов в программировании. А так понятно, что будущих специалистов лучше учить предназначенным для них инструментам, а не читать общий курс программирования. Социологам полезнее R и GNUPlot или даже макросы для Excel, нежели «общий» Питон, хотя для них Питон можно, если будет «заточенный» под них курс и разбор нужных библиотек.

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

Какие ограничения, можешь назвать?

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

Только к обучению программированию это уже отношения не имеет.

Не имеет, оп том и речь. Все «боевые» на нынешний момент ЯП имеют те или иные особенности, делающие их малопригодными в качестве дидактического пособия для начинающих. А Паскаль стал нишевым инструментом для обучению программированию на ограниченной территории РФ.

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

На Delphi чего-только не писали

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

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

Он безопаснее си того времени.

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

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

Таки тута речь идёт об обучении программированию будущих профессионалов в программировании

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

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

«Война и мир» и бульварное чтиво вроде Донцовой

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

оправдывал программирование ради самого программирования

C чего ты взял что это нужно перед кем-то оправдывать?

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

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

На виртовском Паскале никто серьёзные программы и в самом деле не писал. Для коммерческих диалектов, главными и основными, которыми была продукция Borland эти ограничения давно не актуальны. Но и Си из Паскаля не сделали. Borland/Delphi - это не этакий Си, а практически Модула-2 с прикрученным ООП.

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

Значит ошибки просто не возникнет.

На тех версиях glibc, разумеется. Но у пользователя другая версия glibc. И большинство дистрибутивов (например, рассматриваемый Debian) не позволяют простыми способами поставить нужную.

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

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

В турбо паскале это всё было. Программы для ВМЭТФ (вычислительные методы в экспериментальной и теоретической физике) на Турбо Паскале работали быстрее, чем на Турбо Си.

Делфи это уже не совсем Паскаль, это сильно расширенный диалект.

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

Турбо Паскаль создавался на Си и имел кучу встроенных модулей, внутри которых был вовсе не Паскаль, а ассемблер.

А какая разница? Си тоже имеет кучу модулей (библиотек), внутри которых ассемблер.

Делфи это уже не совсем Паскаль, это сильно расширенный диалект.

Обучать всё-таки лучше на Delphi, чем на Си или Си++. И на сишном аналоге Delphi (Borland C++ Builder) вообще не помню, чтобы кто-то что-то полезное писал.

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

На виртовском Паскале никто серьёзные программы и в самом деле не писал

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

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

А он вообще существовал в виде компилятора, а не описания?

Ранние реализации самого Вирта, вроде CDC Pascal, системы вроде Pascal 2 от Oregon Software. Вживую их не видел, но судя по описаниям довольно близки были к эталону, хотя и имели расширения для работы с графикой и системой. На советских компьютерах ДВК и БК были его клонированные варианты и если погуглить, то получается, что на них был почти классический Паскаль. Такой вот парадокс.

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

В википедии (английской) как раз написано, что

The first Pascal compiler was designed in Zürich for the CDC 6000 series mainframe computer family. Niklaus Wirth reports that a first attempt to implement it in FORTRAN 66 in 1969 was unsuccessful due to FORTRAN 66's inadequacy to express complex data structures. The second attempt was implemented in a C-like language (Scallop by Max Engeli) and then translated by hand (by R. Schild) to Pascal itself for boot-strapping.[13] It was operational by mid-1970.

UCSD - это уже заметно позже.

Так или иначе, на практике, естественно никто с ограничениями классического Паскаля по Вирту не мирился и реализации содержали те или иные расширения и добавления. Модули, кстати, завезли ещё в UCSD в 70-х - узнал, когда писал это сообщение, раньше почему-то думал, что их в него борланды и Apple добавили в районе 1985-го. Но тогда получается, что они появились в отдельных вариантах Паскаля ещё даже до создания языка Модула-2, а не бекпортированы оттуда. Забавно, век живи - век учись.

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

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

Вот-вот, я кое-что новое о формате PDF узнал, например. Причём в старых книгах кодировка чинится однострочником на sed, в изданиях 2.9 и 2.91 приходится править cmap с перепаковкой с помощью qpdf или аналога.

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

Кто-то же торгует распечатками на Озоне и авито, ещё и ценник емнип 15-20 тыс.руб.

Да нет, поменьше раз в десять. Но забавно что те, кто печатают, вообще не смотрят, что они печатают, например в распечатки первого издания, которое вышло 10 лет назад.

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

А когда на ЛОР опубликовали рецепт исправления - очень смешно порвался.

Ссылку можно?

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

На тех версиях glibc, разумеется. Но у пользователя другая версия glibc.

Что ты несёшь? Откуда у него другая версия если ты сам написал что уже протестировал с той что есть? Ты не знаешь как работают deb пакеты? Зависимости? Тестирование? Какой аспект современного IT прошёл мимо тебя пока ты входил в 1С по Столярику?

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

Что ты несёшь? Откуда у него другая версия если ты сам написал что уже протестировал с той что есть?

У пользователя другая.

Разработчик написал программу. У него glibc-2.2. Он проверил, что на всех glibc до 2.2 включительно программа работает. Других у него нет. Выложил программу и ушёл заниматься другими делами.

Через несколько лет ему пишет пользователь, который не может запустить его программу, потому что в его Debian 12 нельзя поставить glibc-2.2, а на той, что есть, программа не работает. И поэтому пользователь считает, что разработчик ему обязан переделать программу для новой версии Debian.

Ты не знаешь как работают deb пакеты? Зависимости? Тестирование?

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

Можешь взять http://archive.debian.org/debian/pool/main/i/iceweasel/firefox_2.0.0.3-1_all.deb и попробовать запустить на любом современном дистрибутиве. А на Windows 11 firefox 2 без проблем запускается.

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

У пользователя другая.

Откуда у него другая если ты тестировал с той что у него?

А на Windows 11 firefox 2 без проблем запускается

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

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

Откуда у него другая если ты тестировал с той что у него?

Читай внимательно. Разработчик тестирует с той, которая у него есть. И даже если у пользователя на момент разработки был Debian Sarge с glibc-2.2, теперь ему из-за динамической линковки обновлять дистрибутив нельзя?

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

У виндузятников как раз нет проблем. Проблемы есть у линуксоидов, которые используют дистрибутивы с динамической линковкой: https://forums.fedoraforum.org/showthread.php?21129-Need-help-with-error-while-installing-qmail.

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

Пожалуйста: https://i.postimg.cc/x1w1QQpR/Screenshot-from-2026-05-11-17-03-59.png

Description:	Ubuntu 22.04.5 LTS

Как именно:

wget http://archive.debian.org/debian/pool/main/i/iceweasel/iceweasel_2.0.0.19-0etch1_amd64.deb \
  http://archive.debian.org/debian/pool/main/libx/libxp/libxp6_1.0.2-2_amd64.deb \
  http://archive.debian.org/debian/pool/main/libp/libpng/libpng12-0_1.2.27-2+lenny5_amd64.deb \
  http://archive.debian.org/debian/pool/main/libj/libjpeg6b/libjpeg62_6b-14_amd64.deb

mkdir OLD

dpkg-deb -x iceweasel_2.0.0.19-0etch1_amd64.deb OLD/
dpkg-deb -x libpng12-0_1.2.27-2+lenny5_amd64.deb OLD/
dpkg-deb -x libxp6_1.0.2-2_amd64.deb OLD/
dpkg-deb -x libjpeg62_6b-14_amd64.deb OLD/

LD_LIBRARY_PATH=./OLD/usr/lib/:./OLD/usr/lib/x86_64-linux-gnu/:./OLD/usr/lib/iceweasel/:$LD_LIBRARY_PATH OLD/usr/lib/iceweasel/firefox-bin
unC0Rr ★★★★★
()
Ответ на: комментарий от unC0Rr

LD_LIBRARY_PATH=./OLD/usr/lib/:./OLD/usr/lib/x86_64-linux-gnu/:./OLD/usr/lib/iceweasel/:$LD_LIBRARY_PATH

Круто. Я был уверен, что libc и gtk придётся подкладывать.

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

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

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

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

стандартные паскалевские строки ограничены по размеру 255 или 4гб.

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

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

и что там такого страшного написано:

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

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

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

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

Через несколько лет ему пишет пользователь, который не может запустить его программу

Быстро же ваши пользователи реагируют на проблемы...:)))

потому что в его Debian 12 нельзя поставить glibc-2.2, а на той, что есть, программа не работает. И поэтому пользователь считает, что разработчик ему обязан переделать программу для новой версии Debian

Тут «и ежу понятно», что проблема не с «либой», а «с головой у пользователя»: он явно «рыбного супа переел»... :))

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

Что вполне нормально и естественно. Это вообще не проблема, это жизнь... :)

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

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

Чем??..

стандартные паскалевские строки ограничены по размеру 255 или 4гб.

Ну так и «вперде!» - пишите на Паскале, вас же на С никто не гонит! :)

Так что"с нулём в конце" - это не «худший», а просто «непривычный» и, как следствие, возможно, «неудобный»...

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

Не вижу проблем, вижу только этакий «конфликт привычного с непривычным». :)

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

Тут «и ежу понятно», что проблема не с «либой», а «с головой у пользователя»: он явно «рыбного супа переел»… :))

Однако, встречаются. https://github.com/stenzek/duckstation/commit/30df16cc767297c544e1311a3de4d10da30fe00c

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

Что вполне нормально и естественно. Это вообще не проблема, это жизнь… :)

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

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

Полезно для понимания почему нуль-терминейтед — Керниган и остальная лаба это подразделение единственного связиста USA

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

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

Полезно для понимания почему нуль-терминейтед
Керниган и остальная лаба это подразделение единственного связиста USA

И что??..

Это «не играет». Мне вообще не интересно, «почему», мне достаточно знания о том, «как именно здесь»...

Я тот самый «Эдгар», которому «почему» - «По». :)) Работал и работаю «здесь и сейчас», «в заданных условиях», не заморачиваясь выработкой ни отношения к ним, ни мнения о них - «без нЭрва», в общем. :) Играю по правилам, короче говоря. :))

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

Это для меня всё «лирика», значения не имеющая. Приступая к той или иной задаче, я ознакомляюсь с заданными «здесь и сейчас» «правилами и условиями», и работаю, соблюдая их. :)

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

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

Однако, встречаются.

Да и «по!».. :))

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

Соглашусь на всё 100% :)

Я бы, вероятно, тоже так и делал, если бы работал «для широких народных масс» - просто чтобы потом меньше проблем «разгребать»... :)

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

Да и пофиг. :)

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

стандартные паскалевские строки ограничены по размеру 255

Это не стандартные, но типичные.

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

в общем случае нультерминейтед строки и не строки вовсе :)

для реального строкования есть подходящие под задачи rope и прочие прелести

stos/lods Ж_

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

Я знаю две реализации Паскаля, с версиями которых работал Н.Вирт.

Первая – «боевой» компилятор для серии суперкомпьютеров CDC.

https://www.standardpascal.org/Compiler_text_1984/PascalCompiler.txt

Вторая – «вирусный» переносимый компилятор, от разных версий которого пошли многие классические университетские и коммерческие реализации Паскаля 1970-1980-х. Текст использовался как иллюстрация к книгам Н.Вирта и других авторов о реализации Паскаля.

Собственно компилятор в промежуточный код («Pascal-code»). https://raw.githubusercontent.com/samiam95124/Pascal-P4/refs/heads/master/source/pcomOrg.pas

И интерпретатор этого pascal-кода. https://raw.githubusercontent.com/samiam95124/Pascal-P4/refs/heads/master/source/pintOrg.pas

Насколько я понимаю, от работы над собственно Паскалями Н.Вирт отошёл ещё до выхода первого стандарта.

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

в общем случае нультерминейтед строки и не строки вовсе :)

Ну, тогда уже «в общем случае» ничто не строки... вовсе, ага... :))

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

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

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

Программа (на C89 как он хочет) занимает 1000 строчек и тянет пяток библиотек по 5-10 тыс. строк - отлично, у всех всё компилируется и работает. Столяров - молодец!

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

Столяров довольно ярко продемонстрировал непонимание в чём тут проблема и какие задачи какими способами решают совремённые программисты, а не 30-40 лет назад: http://www.stolyarov.info/guestbook/archive/12#cmt533

Он там пишет:

если вы не готовы видеть библиотеку частью своего проекта (и своей кодовой базы, да), то это как раз и означает, что использовать её не следует.

Есть, впрочем, ещё один вариант: вы можете попытаться из OpenCV выделить подмножество модулей, нужных конкретно вашему проекту. Почему-то я практически уверен, что 2500 алгоритмов, реализованных в ней, вам нужны сильно не все.

Вот даже не знаю, что сказать про такую незамутнённость сознания :))

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

И??.. И каких это «таких»??.. И вовсе они не такие были!.. ;P ;))

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

Разработчик тестирует с той, которая у него есть.

Читай внимательно - ты же написал что тестируется deb пакет. Какой ещё своей? И почему тестирует разработчик? Ты не в курсе зачем нужны QA?

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